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.
This skill provides significant advantages for AI agents:
appId and version, making it easy to iterate on applications without manual version management.
This API call is a long-running operation. The Vibe Dev Flow performs multiple steps including workspace creation, AI code generation, building, and publishing.
"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.
Use this skill when the user wants to:
The Pulse Editor API requires an API key for authentication. Users can obtain their API key by:
The API key should be passed in the Authorization header as a Bearer token:
Authorization: Bearer your_api_key_here
POST https://pulse-editor.com/api/server-function/vibe_dev_flow/latest/generate-code/v2/generate
| Header | Required | Description |
| --------------- | -------- | -------------------------------------- |
| Authorization | Yes | Bearer token with Pulse Editor API key |
| Content-Type | Yes | application/json |
| Accept | Yes | text/event-stream |
| 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" |
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.
There are two message types:
Creation Message - A new message in the stream:
{
"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:
{
"messageId": "msg_abc123",
"type": "update",
"delta": {
"result": "additional content to append",
"error": "additional error to append"
},
"isFinal": true
}
| 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 |
When the generation completes, an artifactOutput message contains:
{
"publishedAppLink": "https://pulse-editor.com/app/...",
"sourceCodeArchiveLink": "https://...",
"appId": "my_app_x7k9q2",
"version": "0.0.1"
}
| 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 |
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"
}'
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')}")
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 part of parts) {
if (!part.startsWith("data:")) continue;
const json = part.replace(/^data:\s*/, "");
const message = JSON.parse(json);
if (message.type === "creation") {
messages.set(message.messageId, message);
} else if (message.type === "update") {
const msg = messages.get(message.messageId);
if (msg) {
msg.data.result =
(msg.data.result ?? "") + (message.delta.result ?? "");
msg.data.error = (msg.data.error ?? "") + (message.delta.error ?? "");
msg.isFinal = message.isFinal;
}
}
// Check for final artifact output
const msg = messages.get(message.messageId);
if (msg?.data.type === "artifactOutput" && msg.isFinal) {
const result = JSON.parse(msg.data.result);
console.log("Published:", result.publishedAppLink);
}
}
}
To update an existing app, include the appId and optionally the version:
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": "Add a calendar view to display tasks by date",
"appName": "My Todo App",
"appId": "my_app_x7k9q2",
"version": "0.0.1"
}'
To update an existing app, include the appId and optionally the version:
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": "Add a calendar view to display tasks by date",
"appName": "My Todo App",
"appId": "my_app_x7k9q2",
"version": "0.0.1"
}'
| Issue | Solution |
| ---------------- | --------------------------------------------------- |
| 401 Unauthorized | Verify your API key is correct and has beta access |
| No SSE events | Ensure Accept: text/event-stream header is set |
| App not updating | Verify the appId exists and you have access to it |
This skill includes a ready-to-run Python example in the examples/ folder:
examples/generate_app.py - Complete Python script demonstrating SSE streaming with the Vibe Dev Flow API
examples/generate_app.js - Complete Node.js script demonstrating SSE streaming with the Vibe Dev Flow API
To run the example Python script:
# Set your API key
export PULSE_EDITOR_API_KEY=your_api_key_here # Linux/Mac
set PULSE_EDITOR_API_KEY=your_api_key_here # Windows
# Install dependencies
pip install requests
# Run the script
python examples/generate_app.py
To run the example Node.js script:
# Set your API key
export PULSE_EDITOR_API_KEY=your_api_key_here # Linux/Mac
set PULSE_EDITOR_API_KEY=your_api_key_here # Windows
# Install dependencies
npm install node-fetch
# Run the script
node examples/generate_app.js
共 1 个版本