← Back to Skills
Automation

pulse-editor

shellishack By shellishack 👁 19 views ▲ 0 votes

Generate and build Pulse Apps using the Vibe Dev Flow API.

GitHub
---
name: Pulse Editor Vibe Dev Flow
description: Generate and build Pulse Apps using the Vibe Dev Flow API. Use this skill when the user wants to create, update, or generate code for Pulse Editor applications.
---

## Overview

This skill enables you to interact with the Pulse Editor Vibe Dev Flow API to generate, build, and publish Pulse Apps using cloud-based AI coding agents. The API uses Server-Sent Events (SSE) streaming to provide real-time progress updates.

## Why Use This Skill

This skill provides significant advantages for AI agents:

- **No Local Code Generation Required**: Instead of generating code locally on the user's machine, agents can offload code generation to Pulse Editor's cloud-based vibe coding service. This eliminates the need for local build tools, dependencies, or development environments.

- **Built-in Version Control**: Every app generation is automatically versioned. Agents can update existing apps by specifying `appId` and `version`, making it easy to iterate on applications without manual version management.

- **Instant Deployment**: Apps are automatically built and published immediately after generation. No separate build or deploy steps needed—users get a live, working app URL as soon as generation completes.

- **Parallel App Generation**: Agents can generate multiple apps simultaneously by making concurrent API calls. This is ideal for scenarios where an agent needs to scaffold several microservices, create multiple related applications, or batch-generate apps for different purposes—all at the same time.

- **Stateless & Scalable**: Since all code generation happens in the cloud, agents remain lightweight and can scale horizontally without worrying about local resource constraints.

## Important: Long-Running Task

**This API call is a long-running operation.** The Vibe Dev Flow performs multiple steps including workspace creation, AI code generation, building, and publishing. 

- **Expected duration**: Typically 2-5 minutes, but complex apps may take longer
- **Timeout threshold**: Do NOT time out the request unless it exceeds **10 minutes**
- **SSE streaming**: The connection stays open throughout the process. **Even if no SSE messages are received for a period, the request is NOT stalled or stuck as long as the connection remains open.** Wait for the stream to end or the 10-minute timeout.
- **Token efficiency**: Agents should use `"streamUpdatePolicy": "artifactOnly"` in the request body to receive only the final artifact output, significantly reducing input tokens. But it won't count as being stuck if no messages are received for a while.

## When to Use This Skill

Use this skill when the user wants to:

- Create a new Pulse App from a description or prompt
- Update an existing Pulse App with new features
- Generate code for a Pulse Editor application
- Build and publish a Pulse App

## API Authentication

The Pulse Editor API requires an API key for authentication. Users can obtain their API key by:

1. Signing up or logging in at https://pulse-editor.com/
2. Going to the **developer** section under account settings
3. Requesting beta access at https://pulse-editor.com/beta (if needed)
4. Creating and copying the API key from the developer section

The API key should be passed in the `Authorization` header as a Bearer token:

```
Authorization: Bearer your_api_key_here
```

## API Endpoint

**POST** `https://pulse-editor.com/api/server-function/vibe_dev_flow/latest/generate-code/v2/generate`

### Request Headers

| Header          | Required | Description                            |
| --------------- | -------- | -------------------------------------- |
| `Authorization` | Yes      | Bearer token with Pulse Editor API key |
| `Content-Type`  | Yes      | `application/json`                     |
| `Accept`        | Yes      | `text/event-stream`                    |

### Request Body Parameters

| Parameter | Type   | Required | Description                                                                                | Example                                       |
| --------- | ------ | -------- | ------------------------------------------------------------------------------------------ | --------------------------------------------- |
| `prompt`  | string | Yes      | The user prompt instructing the Vibe coding agent                                          | `"Create a todo app with auth and dark mode"` |
| `appName` | string | No       | Friendly display name for the app                                                          | `"My Todo App"`                               |
| `appId`   | string | No       | Unique identifier of an existing app to update. If not provided, a new app will be created | `"my_app_x7k9q2"`                             |
| `version` | string | No       | Version identifier of an existing app. If not provided, defaults to latest version         | `"0.0.1"`                                     |
| `streamUpdatePolicy` | string | No | Set to `"artifactOnly"` to receive only the final artifact output (recommended for agents to save tokens) | `"artifactOnly"` |

### Response

The response is a Server-Sent Events (SSE) stream. Each event contains a JSON-encoded message. Messages are separated by `\n\n`.

Each SSE message is formatted as:

```
data: <JSON>
```

followed by a blank line.

#### Message Types

There are two message types:

**Creation Message** - A new message in the stream:

```json
{
  "messageId": "msg_abc123",
  "type": "creation",
  "data": {
    "type": "text" | "toolCall" | "toolResult" | "artifactOutput",
    "result": "string content",
    "error": "error message if any"
  },
  "isFinal": false
}
```

**Update Message** - Delta update to an existing message:

```json
{
  "messageId": "msg_abc123",
  "type": "update",
  "delta": {
    "result": "additional content to append",
    "error": "additional error to append"
  },
  "isFinal": true
}
```

#### Data Types

| Type              | Description                            |
| ----------------- | -------------------------------------- |
| `text`            | Text output from the agent             |
| `toolCall`       | Tool invocation by the agent           |
| `toolResult`     | Result from a tool execution           |
| `artifactOutput` | Final artifact with published app info |

#### Artifact Output Format

When the generation completes, an `artifactOutput` message contains:

```json
{
  "publishedAppLink": "https://pulse-editor.com/app/...",
  "sourceCodeArchiveLink": "https://...",
  "appId": "my_app_x7k9q2",
  "version": "0.0.1"
}
```

### Response Status Codes

| Code | Description                                  |
| ---- | -------------------------------------------- |
| 200  | Streaming SSE with progress and final result |
| 400  | Bad request - invalid parameters             |
| 401  | Unauthorized - invalid or missing API key    |
| 500  | Server error                                 |

## Example Usage

### cURL Example

```bash
curl -L 'https://pulse-editor.com/api/server-function/vibe_dev_flow/latest/generate-code/v2/generate' \
  -H 'Content-Type: application/json' \
  -H 'Accept: text/event-stream' \
  -H 'Authorization: Bearer your_api_key_here' \
  -d '{
    "prompt": "Create a todo app with auth and dark mode",
    "appName": "My Todo App"
  }'
```

### Python Example

```python
import requests
import json

url = "https://pulse-editor.com/api/server-function/vibe_dev_flow/latest/generate-code/v2/generate"

headers = {
    "Authorization": "Bearer your_api_key_here",
    "Content-Type": "application/json",
    "Accept": "text/event-stream"
}

payload = {
    "prompt": "Create a todo app with auth and dark mode",
    "appName": "My Todo App"
}

response = requests.post(url, json=payload, headers=headers, stream=True)

messages = {}  # Track messages by messageId
buffer = ""

for chunk in response.iter_content(chunk_size=None, decode_unicode=True):
    buffer += chunk

    # SSE messages end with \n\n
    while "\n\n" in buffer:
        part, buffer = buffer.split("\n\n", 1)

        if not part.startswith("data:"):
            continue

        data = json.loads(part.replace("data: ", "", 1))

        if data["type"] == "creation":
            messages[data["messageId"]] = data
            print(f"New: {data['data'].get('result', '')}")

        elif data["type"] == "update":
            msg = messages.get(data["messageId"])
            if msg:
                msg["data"]["result"] = (msg["data"].get("result") or "") + (data["delta"].get("result") or "")
                msg["isFinal"] = data["isFinal"]

        # Check for artifact output
        if data.get("data", {}).get("type") == "artifactOutput" and data.get("isFinal"):
            result = json.loads(messages[data["messageId"]]["data"]["result"])
            print(f"Published: {result.get('publishedAppLink')}")
```

### JavaScript/Node.js Example

```javascript
const response = await fetch(
  "https://pulse-editor.com/api/server-function/vibe_dev_flow/latest/generate-code/v2/generate",
  {
    method: "POST",
    headers: {
      Authorization: "Bearer your_api_key_here",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      prompt: "Create a todo app with auth and dark mode",
      appName: "My Todo App",
    }),
  },
);

const reader = response.body.getReader();
const decoder = new TextDecoder();
let buffer = "";
const messages = new Map();

while (true) {
  const { done, value } = await reader.read();
  if (done) break;

  buffer += decoder.decode(value, { stream: true });

  // SSE messages end with \n\n
  const parts = buffer.split("\n\n");
  buffer = parts.pop(); // Keep incomplete part in buffer

  for (const pa

... (truncated)
automation

Comments

Sign in to leave a comment

Loading comments...