[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6G37NCC3QJEGR3230YV3ARC":3,"skill-same:01M6G37NCC3QJEGR3230YV3ARC":82},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":43,"commitSha":44,"skillDirectory":45,"forksCount":46,"repositoryHtmlUrl":47,"repositoryHomepageUrl":6,"ownerHtmlUrl":48,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":49,"install":50,"resources":63},"01M6G37NCC3QJEGR3230YV3ARC","Pulse Editor Vibe Dev Flow",null,"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.","kbarbel640-del\u002Fskills","kbarbel640-del","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F255315490?v=4","01M6CJPPQGCCESXMG3K7BBGQ5J","01M6CJPPX2PB2BCZERFVM2C2B3",1,"MIT","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fshellishack\u002Fpulse-editor\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[23,24,25,26,27,5,28,29,30,31,32,33,34,35,36,37],"editor","dev","flow","pulse","vibe","create","generate","update","code","applications","api","user","use","build","apps","2026-11-10 10:12:30",false,"---\r\nname: Pulse Editor Vibe Dev Flow\r\ndescription: 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.\r\n---\r\n\r\n## Overview\r\n\r\nThis 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.\r\n\r\n## Why Use This Skill\r\n\r\nThis skill provides significant advantages for AI agents:\r\n\r\n- **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.\r\n\r\n- **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.\r\n\r\n- **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.\r\n\r\n- **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.\r\n\r\n- **Stateless & Scalable**: Since all code generation happens in the cloud, agents remain lightweight and can scale horizontally without worrying about local resource constraints.\r\n\r\n## Important: Long-Running Task\r\n\r\n**This API call is a long-running operation.** The Vibe Dev Flow performs multiple steps including workspace creation, AI code generation, building, and publishing. \r\n\r\n- **Expected duration**: Typically 2-5 minutes, but complex apps may take longer\r\n- **Timeout threshold**: Do NOT time out the request unless it exceeds **10 minutes**\r\n- **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.\r\n- **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.\r\n\r\n## When to Use This Skill\r\n\r\nUse this skill when the user wants to:\r\n\r\n- Create a new Pulse App from a description or prompt\r\n- Update an existing Pulse App with new features\r\n- Generate code for a Pulse Editor application\r\n- Build and publish a Pulse App\r\n\r\n## API Authentication\r\n\r\nThe Pulse Editor API requires an API key for authentication. Users can obtain their API key by:\r\n\r\n1. Signing up or logging in at https:\u002F\u002Fpulse-editor.com\u002F\r\n2. Going to the **developer** section under account settings\r\n3. Requesting beta access at https:\u002F\u002Fpulse-editor.com\u002Fbeta (if needed)\r\n4. Creating and copying the API key from the developer section\r\n\r\nThe API key should be passed in the `Authorization` header as a Bearer token:\r\n\r\n```\r\nAuthorization: Bearer your_api_key_here\r\n```\r\n\r\n## API Endpoint\r\n\r\n**POST** `https:\u002F\u002Fpulse-editor.com\u002Fapi\u002Fserver-function\u002Fvibe_dev_flow\u002Flatest\u002Fgenerate-code\u002Fv2\u002Fgenerate`\r\n\r\n### Request Headers\r\n\r\n| Header          | Required | Description                            |\r\n| --------------- | -------- | -------------------------------------- |\r\n| `Authorization` | Yes      | Bearer token with Pulse Editor API key |\r\n| `Content-Type`  | Yes      | `application\u002Fjson`                     |\r\n| `Accept`        | Yes      | `text\u002Fevent-stream`                    |\r\n\r\n### Request Body Parameters\r\n\r\n| Parameter | Type   | Required | Description                                                                                | Example                                       |\r\n| --------- | ------ | -------- | ------------------------------------------------------------------------------------------ | --------------------------------------------- |\r\n| `prompt`  | string | Yes      | The user prompt instructing the Vibe coding agent                                          | `\"Create a todo app with auth and dark mode\"` |\r\n| `appName` | string | No       | Friendly display name for the app                                                          | `\"My Todo App\"`                               |\r\n| `appId`   | string | No       | Unique identifier of an existing app to update. If not provided, a new app will be created | `\"my_app_x7k9q2\"`                             |\r\n| `version` | string | No       | Version identifier of an existing app. If not provided, defaults to latest version         | `\"0.0.1\"`                                     |\r\n| `streamUpdatePolicy` | string | No | Set to `\"artifactOnly\"` to receive only the final artifact output (recommended for agents to save tokens) | `\"artifactOnly\"` |\r\n\r\n### Response\r\n\r\nThe response is a Server-Sent Events (SSE) stream. Each event contains a JSON-encoded message. Messages are separated by `\\n\\n`.\r\n\r\nEach SSE message is formatted as:\r\n\r\n```\r\ndata: \u003CJSON>\r\n```\r\n\r\nfollowed by a blank line.\r\n\r\n#### Message Types\r\n\r\nThere are two message types:\r\n\r\n**Creation Message** - A new message in the stream:\r\n\r\n```json\r\n{\r\n  \"messageId\": \"msg_abc123\",\r\n  \"type\": \"creation\",\r\n  \"data\": {\r\n    \"type\": \"text\" | \"toolCall\" | \"toolResult\" | \"artifactOutput\",\r\n    \"result\": \"string content\",\r\n    \"error\": \"error message if any\"\r\n  },\r\n  \"isFinal\": false\r\n}\r\n```\r\n\r\n**Update Message** - Delta update to an existing message:\r\n\r\n```json\r\n{\r\n  \"messageId\": \"msg_abc123\",\r\n  \"type\": \"update\",\r\n  \"delta\": {\r\n    \"result\": \"additional content to append\",\r\n    \"error\": \"additional error to append\"\r\n  },\r\n  \"isFinal\": true\r\n}\r\n```\r\n\r\n#### Data Types\r\n\r\n| Type              | Description                            |\r\n| ----------------- | -------------------------------------- |\r\n| `text`            | Text output from the agent             |\r\n| `toolCall`       | Tool invocation by the agent           |\r\n| `toolResult`     | Result from a tool execution           |\r\n| `artifactOutput` | Final artifact with published app info |\r\n\r\n#### Artifact Output Format\r\n\r\nWhen the generation completes, an `artifactOutput` message contains:\r\n\r\n```json\r\n{\r\n  \"publishedAppLink\": \"https:\u002F\u002Fpulse-editor.com\u002Fapp\u002F...\",\r\n  \"sourceCodeArchiveLink\": \"https:\u002F\u002F...\",\r\n  \"appId\": \"my_app_x7k9q2\",\r\n  \"version\": \"0.0.1\"\r\n}\r\n```\r\n\r\n### Response Status Codes\r\n\r\n| Code | Description                                  |\r\n| ---- | -------------------------------------------- |\r\n| 200  | Streaming SSE with progress and final result |\r\n| 400  | Bad request - invalid parameters             |\r\n| 401  | Unauthorized - invalid or missing API key    |\r\n| 500  | Server error                                 |\r\n\r\n## Example Usage\r\n\r\n### cURL Example\r\n\r\n```bash\r\ncurl -L 'https:\u002F\u002Fpulse-editor.com\u002Fapi\u002Fserver-function\u002Fvibe_dev_flow\u002Flatest\u002Fgenerate-code\u002Fv2\u002Fgenerate' \\\r\n  -H 'Content-Type: application\u002Fjson' \\\r\n  -H 'Accept: text\u002Fevent-stream' \\\r\n  -H 'Authorization: Bearer your_api_key_here' \\\r\n  -d '{\r\n    \"prompt\": \"Create a todo app with auth and dark mode\",\r\n    \"appName\": \"My Todo App\"\r\n  }'\r\n```\r\n\r\n### Python Example\r\n\r\n```python\r\nimport requests\r\nimport json\r\n\r\nurl = \"https:\u002F\u002Fpulse-editor.com\u002Fapi\u002Fserver-function\u002Fvibe_dev_flow\u002Flatest\u002Fgenerate-code\u002Fv2\u002Fgenerate\"\r\n\r\nheaders = {\r\n    \"Authorization\": \"Bearer your_api_key_here\",\r\n    \"Content-Type\": \"application\u002Fjson\",\r\n    \"Accept\": \"text\u002Fevent-stream\"\r\n}\r\n\r\npayload = {\r\n    \"prompt\": \"Create a todo app with auth and dark mode\",\r\n    \"appName\": \"My Todo App\"\r\n}\r\n\r\nresponse = requests.post(url, json=payload, headers=headers, stream=True)\r\n\r\nmessages = {}  # Track messages by messageId\r\nbuffer = \"\"\r\n\r\nfor chunk in response.iter_content(chunk_size=None, decode_unicode=True):\r\n    buffer += chunk\r\n\r\n    # SSE messages end with \\n\\n\r\n    while \"\\n\\n\" in buffer:\r\n        part, buffer = buffer.split(\"\\n\\n\", 1)\r\n\r\n        if not part.startswith(\"data:\"):\r\n            continue\r\n\r\n        data = json.loads(part.replace(\"data: \", \"\", 1))\r\n\r\n        if data[\"type\"] == \"creation\":\r\n            messages[data[\"messageId\"]] = data\r\n            print(f\"New: {data['data'].get('result', '')}\")\r\n\r\n        elif data[\"type\"] == \"update\":\r\n            msg = messages.get(data[\"messageId\"])\r\n            if msg:\r\n                msg[\"data\"][\"result\"] = (msg[\"data\"].get(\"result\") or \"\") + (data[\"delta\"].get(\"result\") or \"\")\r\n                msg[\"isFinal\"] = data[\"isFinal\"]\r\n\r\n        # Check for artifact output\r\n        if data.get(\"data\", {}).get(\"type\") == \"artifactOutput\" and data.get(\"isFinal\"):\r\n            result = json.loads(messages[data[\"messageId\"]][\"data\"][\"result\"])\r\n            print(f\"Published: {result.get('publishedAppLink')}\")\r\n```\r\n\r\n### JavaScript\u002FNode.js Example\r\n\r\n```javascript\r\nconst response = await fetch(\r\n  \"https:\u002F\u002Fpulse-editor.com\u002Fapi\u002Fserver-function\u002Fvibe_dev_flow\u002Flatest\u002Fgenerate-code\u002Fv2\u002Fgenerate\",\r\n  {\r\n    method: \"POST\",\r\n    headers: {\r\n      Authorization: \"Bearer your_api_key_here\",\r\n      \"Content-Type\": \"application\u002Fjson\",\r\n    },\r\n    body: JSON.stringify({\r\n      prompt: \"Create a todo app with auth and dark mode\",\r\n      appName: \"My Todo App\",\r\n    }),\r\n  },\r\n);\r\n\r\nconst reader = response.body.getReader();\r\nconst decoder = new TextDecoder();\r\nlet buffer = \"\";\r\nconst messages = new Map();\r\n\r\nwhile (true) {\r\n  const { done, value } = await reader.read();\r\n  if (done) break;\r\n\r\n  buffer += decoder.decode(value, { stream: true });\r\n\r\n  \u002F\u002F SSE messages end with \\n\\n\r\n  const parts = buffer.split(\"\\n\\n\");\r\n  buffer = parts.pop(); \u002F\u002F Keep incomplete part in buffer\r\n\r\n  for (const part of parts) {\r\n    if (!part.startsWith(\"data:\")) continue;\r\n\r\n    const json = part.replace(\u002F^data:\\s*\u002F, \"\");\r\n    const message = JSON.parse(json);\r\n\r\n    if (message.type === \"creation\") {\r\n      messages.set(message.messageId, message);\r\n    } else if (message.type === \"update\") {\r\n      const msg = messages.get(message.messageId);\r\n      if (msg) {\r\n        msg.data.result =\r\n          (msg.data.result ?? \"\") + (message.delta.result ?? \"\");\r\n        msg.data.error = (msg.data.error ?? \"\") + (message.delta.error ?? \"\");\r\n        msg.isFinal = message.isFinal;\r\n      }\r\n    }\r\n\r\n    \u002F\u002F Check for final artifact output\r\n    const msg = messages.get(message.messageId);\r\n    if (msg?.data.type === \"artifactOutput\" && msg.isFinal) {\r\n      const result = JSON.parse(msg.data.result);\r\n      console.log(\"Published:\", result.publishedAppLink);\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n### Updating an Existing App\r\n\r\nTo update an existing app, include the `appId` and optionally the `version`:\r\n\r\n```bash\r\ncurl -L 'https:\u002F\u002Fpulse-editor.com\u002Fapi\u002Fserver-function\u002Fvibe_dev_flow\u002Flatest\u002Fgenerate-code\u002Fv2\u002Fgenerate' \\\r\n  -H 'Content-Type: application\u002Fjson' \\\r\n  -H 'Accept: text\u002Fevent-stream' \\\r\n  -H 'Authorization: Bearer your_api_key_here' \\\r\n  -d '{\r\n    \"prompt\": \"Add a calendar view to display tasks by date\",\r\n    \"appName\": \"My Todo App\",\r\n    \"appId\": \"my_app_x7k9q2\",\r\n    \"version\": \"0.0.1\"\r\n  }'\r\n```\r\n\r\n### Updating an Existing App\r\n\r\nTo update an existing app, include the `appId` and optionally the `version`:\r\n\r\n```bash\r\ncurl -L 'https:\u002F\u002Fpulse-editor.com\u002Fapi\u002Fserver-function\u002Fvibe_dev_flow\u002Flatest\u002Fgenerate-code\u002Fv2\u002Fgenerate' \\\r\n  -H 'Content-Type: application\u002Fjson' \\\r\n  -H 'Accept: text\u002Fevent-stream' \\\r\n  -H 'Authorization: Bearer your_api_key_here' \\\r\n  -d '{\r\n    \"prompt\": \"Add a calendar view to display tasks by date\",\r\n    \"appName\": \"My Todo App\",\r\n    \"appId\": \"my_app_x7k9q2\",\r\n    \"version\": \"0.0.1\"\r\n  }'\r\n```\r\n\r\n## Best Practices\r\n\r\n1. **Clear Prompts**: Provide detailed, specific prompts describing what you want the app to do\r\n2. **Handle SSE Properly**: Process the streaming response in real-time for progress updates\r\n3. **Error Handling**: Implement proper error handling for 400, 401, and 500 responses\r\n4. **API Key Security**: Never hardcode API keys; use environment variables or secure storage\r\n5. **Versioning**: When updating apps, specify the version to ensure you're building on the correct base\r\n\r\n## Troubleshooting\r\n\r\n| Issue            | Solution                                            |\r\n| ---------------- | --------------------------------------------------- |\r\n| 401 Unauthorized | Verify your API key is correct and has beta access  |\r\n| No SSE events    | Ensure `Accept: text\u002Fevent-stream` header is set    |\r\n| App not updating | Verify the `appId` exists and you have access to it |\r\n\r\n## Included Examples\r\n\r\nThis skill includes a ready-to-run Python example in the `examples\u002F` folder:\r\n\r\n- **`examples\u002Fgenerate_app.py`** - Complete Python script demonstrating SSE streaming with the Vibe Dev Flow API\r\n- **`examples\u002Fgenerate_app.js`** - Complete Node.js script demonstrating SSE streaming with the Vibe Dev Flow API\r\n\r\nTo run the example Python script:\r\n\r\n```bash\r\n# Set your API key\r\nexport PULSE_EDITOR_API_KEY=your_api_key_here  # Linux\u002FMac\r\nset PULSE_EDITOR_API_KEY=your_api_key_here     # Windows\r\n\r\n# Install dependencies\r\npip install requests\r\n\r\n# Run the script\r\npython examples\u002Fgenerate_app.py\r\n```\r\n\r\nTo run the example Node.js script:\r\n\r\n```bash\r\n# Set your API key\r\nexport PULSE_EDITOR_API_KEY=your_api_key_here  # Linux\u002FMac\r\nset PULSE_EDITOR_API_KEY=your_api_key_here     # Windows\r\n# Install dependencies\r\nnpm install node-fetch\r\n# Run the script\r\nnode examples\u002Fgenerate_app.js\r\n```\r\n\r\n## Resources\r\n\r\n- [Pulse Editor Documentation](https:\u002F\u002Fdocs.pulse-editor.com\u002F)\r\n- [API Reference](https:\u002F\u002Fdocs.pulse-editor.com\u002Fapi-reference)\r\n- [Get API Key](https:\u002F\u002Fdocs.pulse-editor.com\u002Fapi-reference\u002Fget-pulse-editor-api-key)\r\n- [Discord Community](https:\u002F\u002Fdiscord.com\u002Finvite\u002Fs6J54HFxQp)\r\n- [GitHub](https:\u002F\u002Fgithub.com\u002FClayPulse\u002Fpulse-editor)\r\n","## Overview\r\n\r\nThis 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.\r\n\r\n## Why Use This Skill\r\n\r\nThis skill provides significant advantages for AI agents:\r\n\r\n- **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.\r\n\r\n- **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.\r\n\r\n- **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.\r\n\r\n- **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.\r\n\r\n- **Stateless & Scalable**: Since all code generation happens in the cloud, agents remain lightweight and can scale horizontally without worrying about local resource constraints.\r\n\r\n## Important: Long-Running Task\r\n\r\n**This API call is a long-running operation.** The Vibe Dev Flow performs multiple steps including workspace creation, AI code generation, building, and publishing. \r\n\r\n- **Expected duration**: Typically 2-5 minutes, but complex apps may take longer\r\n- **Timeout threshold**: Do NOT time out the request unless it exceeds **10 minutes**\r\n- **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.\r\n- **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.\r\n\r\n## When to Use This Skill\r\n\r\nUse this skill when the user wants to:\r\n\r\n- Create a new Pulse App from a description or prompt\r\n- Update an existing Pulse App with new features\r\n- Generate code for a Pulse Editor application\r\n- Build and publish a Pulse App\r\n\r\n## API Authentication\r\n\r\nThe Pulse Editor API requires an API key for authentication. Users can obtain their API key by:\r\n\r\n1. Signing up or logging in at https:\u002F\u002Fpulse-editor.com\u002F\r\n2. Going to the **developer** section under account settings\r\n3. Requesting beta access at https:\u002F\u002Fpulse-editor.com\u002Fbeta (if needed)\r\n4. Creating and copying the API key from the developer section\r\n\r\nThe API key should be passed in the `Authorization` header as a Bearer token:\r\n\r\n```\r\nAuthorization: Bearer your_api_key_here\r\n```\r\n\r\n## API Endpoint\r\n\r\n**POST** `https:\u002F\u002Fpulse-editor.com\u002Fapi\u002Fserver-function\u002Fvibe_dev_flow\u002Flatest\u002Fgenerate-code\u002Fv2\u002Fgenerate`\r\n\r\n### Request Headers\r\n\r\n| Header          | Required | Description                            |\r\n| --------------- | -------- | -------------------------------------- |\r\n| `Authorization` | Yes      | Bearer token with Pulse Editor API key |\r\n| `Content-Type`  | Yes      | `application\u002Fjson`                     |\r\n| `Accept`        | Yes      | `text\u002Fevent-stream`                    |\r\n\r\n### Request Body Parameters\r\n\r\n| Parameter | Type   | Required | Description                                                                                | Example                                       |\r\n| --------- | ------ | -------- | ------------------------------------------------------------------------------------------ | --------------------------------------------- |\r\n| `prompt`  | string | Yes      | The user prompt instructing the Vibe coding agent                                          | `\"Create a todo app with auth and dark mode\"` |\r\n| `appName` | string | No       | Friendly display name for the app                                                          | `\"My Todo App\"`                               |\r\n| `appId`   | string | No       | Unique identifier of an existing app to update. If not provided, a new app will be created | `\"my_app_x7k9q2\"`                             |\r\n| `version` | string | No       | Version identifier of an existing app. If not provided, defaults to latest version         | `\"0.0.1\"`                                     |\r\n| `streamUpdatePolicy` | string | No | Set to `\"artifactOnly\"` to receive only the final artifact output (recommended for agents to save tokens) | `\"artifactOnly\"` |\r\n\r\n### Response\r\n\r\nThe response is a Server-Sent Events (SSE) stream. Each event contains a JSON-encoded message. Messages are separated by `\\n\\n`.\r\n\r\nEach SSE message is formatted as:\r\n\r\n```\r\ndata: \u003CJSON>\r\n```\r\n\r\nfollowed by a blank line.\r\n\r\n#### Message Types\r\n\r\nThere are two message types:\r\n\r\n**Creation Message** - A new message in the stream:\r\n\r\n```json\r\n{\r\n  \"messageId\": \"msg_abc123\",\r\n  \"type\": \"creation\",\r\n  \"data\": {\r\n    \"type\": \"text\" | \"toolCall\" | \"toolResult\" | \"artifactOutput\",\r\n    \"result\": \"string content\",\r\n    \"error\": \"error message if any\"\r\n  },\r\n  \"isFinal\": false\r\n}\r\n```\r\n\r\n**Update Message** - Delta update to an existing message:\r\n\r\n```json\r\n{\r\n  \"messageId\": \"msg_abc123\",\r\n  \"type\": \"update\",\r\n  \"delta\": {\r\n    \"result\": \"additional content to append\",\r\n    \"error\": \"additional error to append\"\r\n  },\r\n  \"isFinal\": true\r\n}\r\n```\r\n\r\n#### Data Types\r\n\r\n| Type              | Description                            |\r\n| ----------------- | -------------------------------------- |\r\n| `text`            | Text output from the agent             |\r\n| `toolCall`       | Tool invocation by the agent           |\r\n| `toolResult`     | Result from a tool execution           |\r\n| `artifactOutput` | Final artifact with published app info |\r\n\r\n#### Artifact Output Format\r\n\r\nWhen the generation completes, an `artifactOutput` message contains:\r\n\r\n```json\r\n{\r\n  \"publishedAppLink\": \"https:\u002F\u002Fpulse-editor.com\u002Fapp\u002F...\",\r\n  \"sourceCodeArchiveLink\": \"https:\u002F\u002F...\",\r\n  \"appId\": \"my_app_x7k9q2\",\r\n  \"version\": \"0.0.1\"\r\n}\r\n```\r\n\r\n### Response Status Codes\r\n\r\n| Code | Description                                  |\r\n| ---- | -------------------------------------------- |\r\n| 200  | Streaming SSE with progress and final result |\r\n| 400  | Bad request - invalid parameters             |\r\n| 401  | Unauthorized - invalid or missing API key    |\r\n| 500  | Server error                                 |\r\n\r\n## Example Usage\r\n\r\n### cURL Example\r\n\r\n```bash\r\ncurl -L 'https:\u002F\u002Fpulse-editor.com\u002Fapi\u002Fserver-function\u002Fvibe_dev_flow\u002Flatest\u002Fgenerate-code\u002Fv2\u002Fgenerate' \\\r\n  -H 'Content-Type: application\u002Fjson' \\\r\n  -H 'Accept: text\u002Fevent-stream' \\\r\n  -H 'Authorization: Bearer your_api_key_here' \\\r\n  -d '{\r\n    \"prompt\": \"Create a todo app with auth and dark mode\",\r\n    \"appName\": \"My Todo App\"\r\n  }'\r\n```\r\n\r\n### Python Example\r\n\r\n```python\r\nimport requests\r\nimport json\r\n\r\nurl = \"https:\u002F\u002Fpulse-editor.com\u002Fapi\u002Fserver-function\u002Fvibe_dev_flow\u002Flatest\u002Fgenerate-code\u002Fv2\u002Fgenerate\"\r\n\r\nheaders = {\r\n    \"Authorization\": \"Bearer your_api_key_here\",\r\n    \"Content-Type\": \"application\u002Fjson\",\r\n    \"Accept\": \"text\u002Fevent-stream\"\r\n}\r\n\r\npayload = {\r\n    \"prompt\": \"Create a todo app with auth and dark mode\",\r\n    \"appName\": \"My Todo App\"\r\n}\r\n\r\nresponse = requests.post(url, json=payload, headers=headers, stream=True)\r\n\r\nmessages = {}  # Track messages by messageId\r\nbuffer = \"\"\r\n\r\nfor chunk in response.iter_content(chunk_size=None, decode_unicode=True):\r\n    buffer += chunk\r\n\r\n    # SSE messages end with \\n\\n\r\n    while \"\\n\\n\" in buffer:\r\n        part, buffer = buffer.split(\"\\n\\n\", 1)\r\n\r\n        if not part.startswith(\"data:\"):\r\n            continue\r\n\r\n        data = json.loads(part.replace(\"data: \", \"\", 1))\r\n\r\n        if data[\"type\"] == \"creation\":\r\n            messages[data[\"messageId\"]] = data\r\n            print(f\"New: {data['data'].get('result', '')}\")\r\n\r\n        elif data[\"type\"] == \"update\":\r\n            msg = messages.get(data[\"messageId\"])\r\n            if msg:\r\n                msg[\"data\"][\"result\"] = (msg[\"data\"].get(\"result\") or \"\") + (data[\"delta\"].get(\"result\") or \"\")\r\n                msg[\"isFinal\"] = data[\"isFinal\"]\r\n\r\n        # Check for artifact output\r\n        if data.get(\"data\", {}).get(\"type\") == \"artifactOutput\" and data.get(\"isFinal\"):\r\n            result = json.loads(messages[data[\"messageId\"]][\"data\"][\"result\"])\r\n            print(f\"Published: {result.get('publishedAppLink')}\")\r\n```\r\n\r\n### JavaScript\u002FNode.js Example\r\n\r\n```javascript\r\nconst response = await fetch(\r\n  \"https:\u002F\u002Fpulse-editor.com\u002Fapi\u002Fserver-function\u002Fvibe_dev_flow\u002Flatest\u002Fgenerate-code\u002Fv2\u002Fgenerate\",\r\n  {\r\n    method: \"POST\",\r\n    headers: {\r\n      Authorization: \"Bearer your_api_key_here\",\r\n      \"Content-Type\": \"application\u002Fjson\",\r\n    },\r\n    body: JSON.stringify({\r\n      prompt: \"Create a todo app with auth and dark mode\",\r\n      appName: \"My Todo App\",\r\n    }),\r\n  },\r\n);\r\n\r\nconst reader = response.body.getReader();\r\nconst decoder = new TextDecoder();\r\nlet buffer = \"\";\r\nconst messages = new Map();\r\n\r\nwhile (true) {\r\n  const { done, value } = await reader.read();\r\n  if (done) break;\r\n\r\n  buffer += decoder.decode(value, { stream: true });\r\n\r\n  \u002F\u002F SSE messages end with \\n\\n\r\n  const parts = buffer.split(\"\\n\\n\");\r\n  buffer = parts.pop(); \u002F\u002F Keep incomplete part in buffer\r\n\r\n  for (const part of parts) {\r\n    if (!part.startsWith(\"data:\")) continue;\r\n\r\n    const json = part.replace(\u002F^data:\\s*\u002F, \"\");\r\n    const message = JSON.parse(json);\r\n\r\n    if (message.type === \"creation\") {\r\n      messages.set(message.messageId, message);\r\n    } else if (message.type === \"update\") {\r\n      const msg = messages.get(message.messageId);\r\n      if (msg) {\r\n        msg.data.result =\r\n          (msg.data.result ?? \"\") + (message.delta.result ?? \"\");\r\n        msg.data.error = (msg.data.error ?? \"\") + (message.delta.error ?? \"\");\r\n        msg.isFinal = message.isFinal;\r\n      }\r\n    }\r\n\r\n    \u002F\u002F Check for final artifact output\r\n    const msg = messages.get(message.messageId);\r\n    if (msg?.data.type === \"artifactOutput\" && msg.isFinal) {\r\n      const result = JSON.parse(msg.data.result);\r\n      console.log(\"Published:\", result.publishedAppLink);\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n### Updating an Existing App\r\n\r\nTo update an existing app, include the `appId` and optionally the `version`:\r\n\r\n```bash\r\ncurl -L 'https:\u002F\u002Fpulse-editor.com\u002Fapi\u002Fserver-function\u002Fvibe_dev_flow\u002Flatest\u002Fgenerate-code\u002Fv2\u002Fgenerate' \\\r\n  -H 'Content-Type: application\u002Fjson' \\\r\n  -H 'Accept: text\u002Fevent-stream' \\\r\n  -H 'Authorization: Bearer your_api_key_here' \\\r\n  -d '{\r\n    \"prompt\": \"Add a calendar view to display tasks by date\",\r\n    \"appName\": \"My Todo App\",\r\n    \"appId\": \"my_app_x7k9q2\",\r\n    \"version\": \"0.0.1\"\r\n  }'\r\n```\r\n\r\n### Updating an Existing App\r\n\r\nTo update an existing app, include the `appId` and optionally the `version`:\r\n\r\n```bash\r\ncurl -L 'https:\u002F\u002Fpulse-editor.com\u002Fapi\u002Fserver-function\u002Fvibe_dev_flow\u002Flatest\u002Fgenerate-code\u002Fv2\u002Fgenerate' \\\r\n  -H 'Content-Type: application\u002Fjson' \\\r\n  -H 'Accept: text\u002Fevent-stream' \\\r\n  -H 'Authorization: Bearer your_api_key_here' \\\r\n  -d '{\r\n    \"prompt\": \"Add a calendar view to display tasks by date\",\r\n    \"appName\": \"My Todo App\",\r\n    \"appId\": \"my_app_x7k9q2\",\r\n    \"version\": \"0.0.1\"\r\n  }'\r\n```\r\n\r\n## Best Practices\r\n\r\n1. **Clear Prompts**: Provide detailed, specific prompts describing what you want the app to do\r\n2. **Handle SSE Properly**: Process the streaming response in real-time for progress updates\r\n3. **Error Handling**: Implement proper error handling for 400, 401, and 500 responses\r\n4. **API Key Security**: Never hardcode API keys; use environment variables or secure storage\r\n5. **Versioning**: When updating apps, specify the version to ensure you're building on the correct base\r\n\r\n## Troubleshooting\r\n\r\n| Issue            | Solution                                            |\r\n| ---------------- | --------------------------------------------------- |\r\n| 401 Unauthorized | Verify your API key is correct and has beta access  |\r\n| No SSE events    | Ensure `Accept: text\u002Fevent-stream` header is set    |\r\n| App not updating | Verify the `appId` exists and you have access to it |\r\n\r\n## Included Examples\r\n\r\nThis skill includes a ready-to-run Python example in the `examples\u002F` folder:\r\n\r\n- **`examples\u002Fgenerate_app.py`** - Complete Python script demonstrating SSE streaming with the Vibe Dev Flow API\r\n- **`examples\u002Fgenerate_app.js`** - Complete Node.js script demonstrating SSE streaming with the Vibe Dev Flow API\r\n\r\nTo run the example Python script:\r\n\r\n```bash\r\n# Set your API key\r\nexport PULSE_EDITOR_API_KEY=your_api_key_here  # Linux\u002FMac\r\nset PULSE_EDITOR_API_KEY=your_api_key_here     # Windows\r\n\r\n# Install dependencies\r\npip install requests\r\n\r\n# Run the script\r\npython examples\u002Fgenerate_app.py\r\n```\r\n\r\nTo run the example Node.js script:\r\n\r\n```bash\r\n# Set your API key\r\nexport PULSE_EDITOR_API_KEY=your_api_key_here  # Linux\u002FMac\r\nset PULSE_EDITOR_API_KEY=your_api_key_here     # Windows\r\n# Install dependencies\r\nnpm install node-fetch\r\n# Run the script\r\nnode examples\u002Fgenerate_app.js\r\n```\r\n\r\n## Resources\r\n\r\n- [Pulse Editor Documentation](https:\u002F\u002Fdocs.pulse-editor.com\u002F)\r\n- [API Reference](https:\u002F\u002Fdocs.pulse-editor.com\u002Fapi-reference)\r\n- [Get API Key](https:\u002F\u002Fdocs.pulse-editor.com\u002Fapi-reference\u002Fget-pulse-editor-api-key)\r\n- [Discord Community](https:\u002F\u002Fdiscord.com\u002Finvite\u002Fs6J54HFxQp)\r\n- [GitHub](https:\u002F\u002Fgithub.com\u002FClayPulse\u002Fpulse-editor)\r\n",{"name":5,"description":7},"main","e7e336ac628c3e3bd771aff1aaa469c93778f94a","skills\u002Fshellishack\u002Fpulse-editor",0,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del","2026-08-23 22:39:37",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add kbarbel640-del\u002Fskills --skill \"Pulse Editor Vibe Dev Flow\"",{"tool":56,"command":57},"bunx","bunx skills add kbarbel640-del\u002Fskills --skill \"Pulse Editor Vibe Dev Flow\"",{"tool":59,"command":60},"pnpm","pnpm dlx skills add kbarbel640-del\u002Fskills --skill \"Pulse Editor Vibe Dev Flow\"","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fshellishack\u002Fpulse-editor\u002FSKILL.md",true,[64,70,76],{"path":65,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},"_meta.json","REFERENCE","参考文档",298,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fshellishack\u002Fpulse-editor\u002F_meta.json",{"path":71,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":74,"sourceHtmlUrl":75},"examples\u002Fgenerate_app.py","SCRIPT","脚本",9053,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fshellishack\u002Fpulse-editor\u002Fexamples\u002Fgenerate_app.py",{"path":77,"resourceType":78,"resourceTypeDesc":79,"sizeBytes":80,"sourceHtmlUrl":81},"examples\u002Fgenerate_app.tsx","OTHER","其他",6112,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fshellishack\u002Fpulse-editor\u002Fexamples\u002Fgenerate_app.tsx",[83,111,138,159,165,185],{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":92,"publishedAt":38},"01M6G8J55967D6281ACMKAKTEQ","crowd-prompting","A marketplace where AI agents improve prompts, system instructions, tool descriptions, and other text-based content with domain expertise from real-world operations — and earn tokens for valuable contributions.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzzadrian\u002Fcrowd-prompting\u002FSKILL.md",[89],{"categoryNo":90,"categoryName":91,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000036","内容创作者",[93,94,33,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110],"crowd prompting","prompting","with","tokens","domain","world","prompts","operations","instructions","text","tool","system","improve","productivity","marketplace","https","content","ai agents",{"skillNo":112,"name":113,"nameZh":6,"description":114,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":122,"publishedAt":38},"01M6G8J0PKPAYVET6BWE8W4C26","dilemm-ai","Compete in DilemmAI, the prisoner's dilemma AI arena at dilemm.ai. Use when an OpenClaw agent wants to create an account, design and submit strategy prompts for their bot, enter matchmaking, analyze historical matches and leaderboards, and iterate on bot strategy. Requires headless browser automation (no API available yet).","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzyori\u002Fdilemm-ai\u002FSKILL.md",[117],{"categoryNo":118,"categoryName":119,"taxonomyType":120,"taxonomyTypeDesc":121},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[123,33,124,125,126,127,28,128,129,130,131,132,133,134,135,136,137,99,35],"dilemm ai","arena","analyze","browser","openclaw agent","automation","browser automation","bot","openclaw","design","strategy","headless","compete","submit","matchmaking",{"skillNo":139,"name":140,"nameZh":6,"description":141,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":142,"categories":143,"keywords":147,"publishedAt":38},"01M6G8HWAF3K9SW7NP3Z83CPJ6","arxiv-paper-reviews","Interact with arXiv Crawler API to fetch papers, read reviews, and submit comments. Use when working with arXiv papers, fetching paper lists by date\u002Fcategory\u002Finterest, viewing paper details with comments, or submitting paper reviews via API at http:\u002F\u002F150.158.152.82:8000.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzxrys\u002Fweak-accept\u002FSKILL.md",[144],{"categoryNo":145,"categoryName":146,"taxonomyType":120,"taxonomyTypeDesc":121},"01JBSEEDCAT000000000000021","资料检索与研究",[148,149,150,151,152,153,154,95,155,136,35,156,33,157,158],"arxiv paper reviews","reviews","arxiv","paper","crawler","papers","comments","fetch","read","http","via",{"skillNo":160,"name":140,"nameZh":6,"description":141,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":161,"categories":162,"keywords":164,"publishedAt":38},"01M6G8HQJ7N7WMY6YV7D7SSJ16","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzxrys\u002Farxiv-paper-reviews\u002FSKILL.md",[163],{"categoryNo":145,"categoryName":146,"taxonomyType":120,"taxonomyTypeDesc":121},[151,150,149,148,158,153,154,95,152,136,35,155,156,33,157],{"skillNo":166,"name":167,"nameZh":6,"description":168,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":169,"categories":170,"keywords":171,"publishedAt":38},"01M6G8HM95Y64JNVFC2HN4E2BG","git-summary","Get a quick summary of the current Git repository including status, recent commits, branches, and contributors.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzweack\u002Fgit-summary\u002FSKILL.md",[],[172,173,174,175,176,177,178,179,180,181,182,183,184],"git","summary","git summary","commits","repository","win32","status","linux","contributors","true","quick","get","branches",{"skillNo":186,"name":187,"nameZh":6,"description":188,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":189,"categories":190,"keywords":195,"publishedAt":38},"01M6G8HGEGF05CNEJCGVYFSC4R","agent-constitution","Interact with AgentConstitution governance contracts on Base Sepolia. Check compliance, read rules, log actions, query governance state.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fztsalexey\u002Fagent-constitution\u002FSKILL.md",[191,192],{"categoryNo":118,"categoryName":119,"taxonomyType":120,"taxonomyTypeDesc":121},{"categoryNo":193,"categoryName":194,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000037","律师与法务",[196,197,198,199,95,200,201,43,202,156,203,204,205,206,207,108,208,209,210],"agent constitution","constitution","contracts","tree","query","base","log","check","Rules","projects","compliance","actions","state","governance","github"]