{"_id":"@agent_claw/openclaw-agentclaw-plugin","_rev":"5-ee637e7cf8d9c3a77e1f7ec71e1b3ff0","name":"@agent_claw/openclaw-agentclaw-plugin","dist-tags":{"latest":"1.0.5"},"versions":{"1.0.0":{"name":"@agent_claw/openclaw-agentclaw-plugin","version":"1.0.0","keywords":["openclaw","plugin","agentclaw","websocket"],"_id":"@agent_claw/openclaw-agentclaw-plugin@1.0.0","maintainers":[{"name":"ifly_zhigao2","email":"526253959@qq.com"}],"dist":{"shasum":"d1fe366325624e46b2881eb7db693e2a7c0a01e5","tarball":"https://registry.npmjs.org/@agent_claw/openclaw-agentclaw-plugin/-/openclaw-agentclaw-plugin-1.0.0.tgz","fileCount":12,"integrity":"sha512-P8vMJKvvzlVc3mI7EuAyfYYOARbQhFf3uolIOw8P+25gYLhvtYSnY0ogr/RtflFjkzTjB+gGLCmGxIhUexgLgA==","signatures":[{"sig":"MEUCIQD1QdUwdMDUdiZOdyshW5OIU0e6qlaWVN8vdDxzjyhgggIgH/ofKI7Y2Xkahgy6f/P73NS6ng8I/ZXQvw1bZ1YiJ9c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76962},"main":"plugin-index.mjs","type":"module","exports":{".":{"import":"./plugin-index.mjs"}},"private":false,"scripts":{"test":"node --test tests/*.test.mjs","check":"node --check plugin-index.mjs && node --check agentclaw-ws-url.mjs && node --check plugin-channel.mjs && node --check plugin-worker-client.mjs && node --check plugin-wss-worker.mjs && node --check plugin-wss-client.mjs && node --check binary-frame.mjs && node --check attachment-adapter.mjs && node --test tests/*.test.mjs"},"_npmUser":{"name":"ifly_zhigao2","email":"526253959@qq.com"},"openclaw":{"channel":{"id":"agentclaw","blurb":"Bridge backend WebSocket task dispatch into OpenClaw agent execution, including binary image frames.","label":"WebSocket Bridge","order":100,"aliases":["websocket-bridge","agentclaw-agentclaw"],"docsPath":"/channels/agentclaw","docsLabel":"agentclaw","detailLabel":"Backend Task Bridge","selectionLabel":"WebSocket Task Bridge","quickstartAllowFrom":true},"install":{"localPath":".","defaultChoice":"local"},"extensions":["./plugin-index.mjs"]},"_npmVersion":"10.8.1","description":"OpenClaw WebSocket bridge plugin with binary image frame support for AgentClaw.","directories":{},"_nodeVersion":"20.16.0","dependencies":{"ws":"^8.18.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"^2026.5.7"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-agentclaw-plugin_1.0.0_1779173875941_0.16459849052893172","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@agent_claw/openclaw-agentclaw-plugin","version":"1.0.1","keywords":["openclaw","plugin","agentclaw","websocket"],"_id":"@agent_claw/openclaw-agentclaw-plugin@1.0.1","maintainers":[{"name":"ifly_zhigao2","email":"526253959@qq.com"}],"bin":{"agentclaw-install":"agentclaw-install.mjs"},"dist":{"shasum":"5c413c4d1ccffc2de2126cbf75e23af7bf6e5e12","tarball":"https://registry.npmjs.org/@agent_claw/openclaw-agentclaw-plugin/-/openclaw-agentclaw-plugin-1.0.1.tgz","fileCount":13,"integrity":"sha512-jxODZdrl2b9U7Jmzeb34UFteXgWEsTPgpr+QUKHxl6kd/sqiXivP+54+hEVffx9Q1UNRtI6Yyhdxt18AqGTIRQ==","signatures":[{"sig":"MEUCIQDem+11g96N7LGuTYrlINV6PLPNilejGuUOU0YvCgTRmQIgermHmuJlyHwzX9rfrOifXDF1oNeGcHL8yTtHdBV3P4E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82041},"main":"plugin-index.mjs","type":"module","exports":{".":{"import":"./plugin-index.mjs"}},"private":false,"scripts":{"test":"node --test tests/*.test.mjs","check":"node --check plugin-index.mjs && node --check agentclaw-ws-url.mjs && node --check plugin-channel.mjs && node --check plugin-worker-client.mjs && node --check plugin-wss-worker.mjs && node --check plugin-wss-client.mjs && node --check binary-frame.mjs && node --check attachment-adapter.mjs && node --test tests/*.test.mjs"},"_npmUser":{"name":"ifly_zhigao2","email":"526253959@qq.com"},"openclaw":{"channel":{"id":"agentclaw","blurb":"Bridge backend WebSocket task dispatch into OpenClaw agent execution, including binary image frames.","label":"WebSocket Bridge","order":100,"aliases":["websocket-bridge","agentclaw-agentclaw"],"docsPath":"/channels/agentclaw","docsLabel":"agentclaw","detailLabel":"Backend Task Bridge","selectionLabel":"WebSocket Task Bridge","quickstartAllowFrom":true},"install":{"npmSpec":"@agent_claw/openclaw-agentclaw-plugin","localPath":".","defaultChoice":"npm","minHostVersion":">=2026.5.7"},"extensions":["./plugin-index.mjs"]},"_npmVersion":"10.8.1","description":"OpenClaw WebSocket bridge plugin with binary image frame support for AgentClaw.","directories":{},"_nodeVersion":"20.16.0","dependencies":{"ws":"^8.18.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"^2026.5.7"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-agentclaw-plugin_1.0.1_1779190596247_0.3350396684174717","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@agent_claw/openclaw-agentclaw-plugin","version":"1.0.2","keywords":["openclaw","plugin","agentclaw","websocket"],"_id":"@agent_claw/openclaw-agentclaw-plugin@1.0.2","maintainers":[{"name":"ifly_zhigao2","email":"526253959@qq.com"}],"bin":{"agentclaw-install":"agentclaw-install.mjs"},"dist":{"shasum":"6708c6b90e42198221ab656429d0880749021a2c","tarball":"https://registry.npmjs.org/@agent_claw/openclaw-agentclaw-plugin/-/openclaw-agentclaw-plugin-1.0.2.tgz","fileCount":13,"integrity":"sha512-pk23C3tLYeMkUCxdanSMBZdofT8hZ1HqoZaoxowUiZjQ5Yr6hRNzmL45s4Vrm18qSjIjqTT1bTEUVnN6WTPBzQ==","signatures":[{"sig":"MEUCIQCDwXbUll7sw1m9mMG6GWZBkYmgHWWeEcRY/XEwde4B/QIgBTvjY8deZzhVAkTv8uabA0fuX3AZ9i4OuGXxMvFQ92k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84186},"main":"plugin-index.mjs","type":"module","exports":{".":{"import":"./plugin-index.mjs"}},"private":false,"scripts":{"test":"node --test tests/*.test.mjs","check":"node --check plugin-index.mjs && node --check agentclaw-ws-url.mjs && node --check plugin-channel.mjs && node --check plugin-worker-client.mjs && node --check plugin-wss-worker.mjs && node --check plugin-wss-client.mjs && node --check binary-frame.mjs && node --check attachment-adapter.mjs && node --test tests/*.test.mjs"},"_npmUser":{"name":"ifly_zhigao2","email":"526253959@qq.com"},"openclaw":{"channel":{"id":"agentclaw","blurb":"Bridge backend WebSocket task dispatch into OpenClaw agent execution, including binary image frames.","label":"WebSocket Bridge","order":100,"aliases":["websocket-bridge","agentclaw-agentclaw"],"docsPath":"/channels/agentclaw","docsLabel":"agentclaw","detailLabel":"Backend Task Bridge","selectionLabel":"WebSocket Task Bridge","quickstartAllowFrom":true},"install":{"npmSpec":"@agent_claw/openclaw-agentclaw-plugin","localPath":".","defaultChoice":"npm","minHostVersion":">=2026.5.7"},"extensions":["./plugin-index.mjs"]},"_npmVersion":"10.8.1","description":"OpenClaw WebSocket bridge plugin with binary image frame support for AgentClaw.","directories":{},"_nodeVersion":"20.16.0","dependencies":{"ws":"^8.18.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"^2026.5.7"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-agentclaw-plugin_1.0.2_1779241549331_0.5697477598565583","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@agent_claw/openclaw-agentclaw-plugin","version":"1.0.3","keywords":["openclaw","plugin","agentclaw","websocket"],"_id":"@agent_claw/openclaw-agentclaw-plugin@1.0.3","maintainers":[{"name":"ifly_zhigao2","email":"526253959@qq.com"}],"bin":{"agentclaw-install":"agentclaw-install.mjs"},"dist":{"shasum":"3238acc6ef1b76b15c423107cfba8d46485af2c9","tarball":"https://registry.npmjs.org/@agent_claw/openclaw-agentclaw-plugin/-/openclaw-agentclaw-plugin-1.0.3.tgz","fileCount":13,"integrity":"sha512-cOoMR41VJaYgz9xZddaq6XLYj4pnT5x6tOAVEuH8/vuzKCoBZiazz59k6C5XPy7fkTT5TiwSHR8b7gXQ+luMKw==","signatures":[{"sig":"MEUCIDK3zvNMX39EB9ACe+PWDpBPg0AkujNDP6Dl0wKjCuZVAiEAvxEAGt8f6QNmCjVlIJp9w0oROJ6Ej9XHG/YYj/cVmLI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88795},"main":"plugin-index.mjs","type":"module","exports":{".":{"import":"./plugin-index.mjs"}},"private":false,"scripts":{"test":"node --test tests/*.test.mjs","check":"node --check plugin-index.mjs && node --check agentclaw-ws-url.mjs && node --check plugin-channel.mjs && node --check plugin-worker-client.mjs && node --check plugin-wss-worker.mjs && node --check plugin-wss-client.mjs && node --check binary-frame.mjs && node --check attachment-adapter.mjs && node --test tests/*.test.mjs"},"_npmUser":{"name":"ifly_zhigao2","email":"526253959@qq.com"},"openclaw":{"channel":{"id":"agentclaw","blurb":"Bridge backend WebSocket task dispatch into OpenClaw agent execution, including binary image frames.","label":"WebSocket Bridge","order":100,"aliases":["websocket-bridge","agentclaw-agentclaw"],"docsPath":"/channels/agentclaw","docsLabel":"agentclaw","detailLabel":"Backend Task Bridge","selectionLabel":"WebSocket Task Bridge","quickstartAllowFrom":true},"install":{"npmSpec":"@agent_claw/openclaw-agentclaw-plugin","localPath":".","defaultChoice":"npm","minHostVersion":">=2026.4.21"},"extensions":["./plugin-index.mjs"]},"_npmVersion":"10.8.1","description":"OpenClaw WebSocket bridge plugin with binary image frame support for AgentClaw.","directories":{},"_nodeVersion":"20.16.0","dependencies":{"ws":"^8.18.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":">=2026.4.21"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-agentclaw-plugin_1.0.3_1779247408381_0.6403137214118568","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@agent_claw/openclaw-agentclaw-plugin","version":"1.0.5","private":false,"description":"OpenClaw WebSocket bridge plugin with binary image frame support for AgentClaw.","type":"module","main":"plugin-index.mjs","exports":{".":{"import":"./plugin-index.mjs"}},"scripts":{"check":"node --check plugin-index.mjs && node --check agentclaw-ws-url.mjs && node --check plugin-channel.mjs && node --check plugin-worker-client.mjs && node --check plugin-wss-worker.mjs && node --check plugin-wss-client.mjs && node --check binary-frame.mjs && node --check attachment-adapter.mjs && node --test tests/*.test.mjs","test":"node --test tests/*.test.mjs"},"keywords":["openclaw","plugin","agentclaw","websocket"],"publishConfig":{"access":"public"},"dependencies":{"ws":"^8.18.3"},"peerDependencies":{"openclaw":">=2026.4.21"},"openclaw":{"extensions":["./plugin-index.mjs"],"channel":{"id":"agentclaw","label":"WebSocket Bridge","selectionLabel":"WebSocket Task Bridge","detailLabel":"Backend Task Bridge","docsPath":"/channels/agentclaw","docsLabel":"agentclaw","blurb":"Bridge backend WebSocket task dispatch into OpenClaw agent execution, including binary image frames.","aliases":["websocket-bridge","agentclaw-agentclaw"],"order":100,"quickstartAllowFrom":true},"install":{"npmSpec":"@agent_claw/openclaw-agentclaw-plugin","localPath":".","defaultChoice":"npm","minHostVersion":">=2026.4.21"}},"_id":"@agent_claw/openclaw-agentclaw-plugin@1.0.5","_nodeVersion":"20.16.0","_npmVersion":"10.8.1","dist":{"integrity":"sha512-L+SEfCbmBZ0GPJJA0U0p3/zklmcH0CGY+vmadXwCqLhnKyqzYdt7fFcf64Pus/lLqYU0NhkJWQHSCSRs3uqfqQ==","shasum":"38d516630bcf83d67f59f73f93a49c506454894f","tarball":"https://registry.npmjs.org/@agent_claw/openclaw-agentclaw-plugin/-/openclaw-agentclaw-plugin-1.0.5.tgz","fileCount":12,"unpackedSize":78738,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDEyeBwur9PoCfctNngoGqY7oOex3UfsAU7GkB64nBrZgIhAPAGGjfvipHwTSxI0Q1E/LUAzT1fUI5oXmzI1M/dWpYi"}]},"_npmUser":{"name":"ifly_zhigao2","email":"526253959@qq.com"},"directories":{},"maintainers":[{"name":"ifly_zhigao2","email":"526253959@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/openclaw-agentclaw-plugin_1.0.5_1779255487478_0.014367528667515783"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-19T06:57:55.824Z","modified":"2026-05-20T05:38:07.786Z","1.0.0":"2026-05-19T06:57:56.074Z","1.0.1":"2026-05-19T11:36:36.425Z","1.0.2":"2026-05-20T01:45:49.469Z","1.0.3":"2026-05-20T03:23:28.638Z","1.0.5":"2026-05-20T05:38:07.652Z"},"keywords":["openclaw","plugin","agentclaw","websocket"],"description":"OpenClaw WebSocket bridge plugin with binary image frame support for AgentClaw.","maintainers":[{"name":"ifly_zhigao2","email":"526253959@qq.com"}],"readme":"# @agent_claw/openclaw-agentclaw-plugin\n\nOpenClaw `agentclaw` channel plugin，用于把 AgentClaw / 自有后端的 WebSocket 任务分发桥接到 OpenClaw agent。\n\n支持两类入站消息：\n\n1. **JSON 文本帧**：`task.dispatch` / `task.cancel`\n2. **二进制单帧图片消息**：`4-byte header length + JSON header + image bytes`\n\n插件会把后端任务路由到 OpenClaw agent，并要求 agent 最终返回：\n\n```json\n{\"summary\": \"...\", \"content\": \"...\", \"artifacts\": []}\n```\n\n---\n\n## 通过 npm 发布后的用户安装方式\n\n### 1. 一键安装（推荐）\n\n```bash\nnpx -y @agent_claw/openclaw-agentclaw-installer install --token <YOUR_TOKEN>\n```\n\n可选：\n\n```bash\nnpx -y @agent_claw/openclaw-agentclaw-installer install --token <YOUR_TOKEN> --version 1.0.4\nnpx -y @agent_claw/openclaw-agentclaw-installer install --token <YOUR_TOKEN> --no-restart\nnpx -y @agent_claw/openclaw-agentclaw-installer install --token <YOUR_TOKEN> --openclaw-bin \"%APPDATA%\\\\npm\\\\openclaw.cmd\"\n```\n\n该命令会自动完成：\n\n- 安装插件包 `@agent_claw/openclaw-agentclaw-plugin`\n- 确保 `plugins.allow` 包含 `agentclaw`\n- 写入 `channels.agentclaw.token`\n- 默认重启 OpenClaw gateway\n\n### 2. 手动安装插件\n\n```bash\nopenclaw plugins install @agent_claw/openclaw-agentclaw-plugin\n```\n\n如需固定版本：\n\n```bash\nopenclaw plugins install @agent_claw/openclaw-agentclaw-plugin@1.0.0\n```\n\n### 3. 配置 OpenClaw\n\n```json\n{\n  \"plugins\": {\n    \"allow\": [\"agentclaw\"]\n  },\n  \"channels\": {\n    \"agentclaw\": {\n      \"token\": \"your-token-here\"\n    }\n  }\n}\n```\n\n最小必填项：\n\n- `token`\n\n说明：\n\n- WebSocket 地址在插件内 `agentclaw-ws-url.mjs`（`AGENTCLAW_WS_URL`）中固定，更换网关请改该文件而非 OpenClaw 配置\n- `token` 填原始值即可，不要手动加 `Bearer ` 前缀\n- `agentId` 不填时，插件会使用默认 account id 作为回退值\n- 其他参数都可以先用默认值\n\n### 4. 重启 OpenClaw\n\n```bash\nopenclaw gateway restart\n```\n\n---\n\n## 本地开发 / 本地安装\n\n安装依赖：\n\n```bash\nnpm install\n```\n\n本地语法校验：\n\n```bash\nnpm run check\n```\n\n本地目录安装到 OpenClaw：\n\n```bash\nopenclaw plugins install .\n```\n\n---\n\n## 发布到 npm\n\n### 1. 登录 npm\n\n```bash\nnpm login\n```\n\n### 2. 检查即将发布的文件\n\n```bash\nnpm pack --dry-run\n```\n\n确认输出中至少包含：\n\n- `package.json`\n- `README.md`\n- `INSTALL.md`\n- `openclaw.plugin.json`\n- `plugin-index.mjs`\n- `agentclaw-ws-url.mjs`\n- `plugin-channel.mjs`\n- `plugin-worker-client.mjs`\n- `plugin-wss-client.mjs`\n- `binary-frame.mjs`\n- `attachment-adapter.mjs`\n\n并且**不应包含**安装器脚本 `agentclaw-install.mjs`。\n\n### 3. 正式发布\n\n```bash\nnpm publish --access public\n```\n\n安装器包在 `installer/` 目录下，单独发布：\n\n```bash\ncd installer\nnpm publish --access public\n```\n\n### 4. 发布后验证\n\n```bash\nnpm view @agent_claw/openclaw-agentclaw-plugin version\nnpm view @agent_claw/openclaw-agentclaw-installer version\n```\n\n---\n\n## 可选配置示例\n\n```json\n{\n  \"plugins\": {\n    \"allow\": [\"agentclaw\"]\n  },\n  \"channels\": {\n    \"agentclaw\": {\n      \"token\": \"your-token-here\",\n      \"agentId\": \"agentclaw-agent-001\",\n      \"protocolVersion\": \"v1\",\n      \"heartbeatSeconds\": 30,\n      \"defaultPeerId\": \"backend\",\n      \"mediaDir\": \"D:/tmp/openclaw-agentclaw-media\",\n      \"maxInboundImageBytes\": 20971520,\n      \"mediaTtlSeconds\": 86400,\n      \"allowedImageMimeTypes\": [\n        \"image/png\",\n        \"image/jpeg\",\n        \"image/webp\",\n        \"image/gif\",\n        \"image/heic\",\n        \"image/heif\"\n      ]\n    }\n  }\n}\n```\n\n说明：\n\n- `mediaDir` 不填时默认落到 `%TEMP%/openclaw/agentclaw-media/<accountId>`，该目录位于 OpenClaw 默认允许读取的本地媒体根目录下\n- `maxInboundImageBytes` 当前默认 `20MB`\n- `mediaTtlSeconds` 默认 `86400` 秒，插件会在处理新的二进制图片前清理过期文件\n\n---\n\n## 文本任务协议\n\n### `task.dispatch`\n\n```json\n{\n  \"type\": \"task.dispatch\",\n  \"request_id\": \"req_001\",\n  \"task_id\": \"task_001\",\n  \"timestamp\": \"2026-04-29T02:00:00Z\",\n  \"payload\": {\n    \"task_type\": \"text_query\",\n    \"instruction\": \"总结这段内容\",\n    \"context\": {\n      \"conversation_id\": \"conv_001\",\n      \"user_id\": \"user_001\"\n    }\n  },\n  \"meta\": {\n    \"trace_id\": \"trace_001\",\n    \"protocol_version\": \"v1\"\n  }\n}\n```\n\n### `task.cancel`\n\n```json\n{\n  \"type\": \"task.cancel\",\n  \"request_id\": \"req_cancel_001\",\n  \"task_id\": \"task_001\",\n  \"timestamp\": \"2026-04-29T02:00:10Z\",\n  \"payload\": {\n    \"reason\": \"user interrupted\"\n  },\n  \"meta\": {\n    \"trace_id\": \"trace_001\",\n    \"protocol_version\": \"v1\"\n  }\n}\n```\n\n---\n\n## 二进制图片单帧协议\n\n### 帧布局\n\n```text\n| 4 bytes header length (uint32, big-endian) |\n| header JSON (utf-8)                         |\n| raw image bytes                             |\n```\n\n### header JSON 示例\n\n```json\n{\n  \"type\": \"task.dispatch\",\n  \"request_id\": \"req_img_001\",\n  \"task_id\": \"task_img_001\",\n  \"timestamp\": \"2026-04-29T02:05:00Z\",\n  \"payload\": {\n    \"instruction\": \"帮我看这张图里有什么异常\",\n    \"has_image\": true,\n    \"image_format\": \"png\",\n    \"image_size\": 245678,\n    \"context\": {\n      \"conversation_id\": \"conv_001\",\n      \"user_id\": \"user_001\"\n    }\n  },\n  \"meta\": {\n    \"trace_id\": \"trace_img_001\",\n    \"protocol_version\": \"v1\"\n  }\n}\n```\n\n插件行为：\n\n1. 解析二进制帧\n2. 校验 `payload.instruction` / `payload.has_image` / `payload.image_format` / `payload.image_size`\n3. 校验图片格式 / 大小 / `image_size` 与实际字节数是否一致\n4. 将图片写入本地 `mediaDir`\n5. 生成：\n   - 本地文件路径 `MediaPath`\n   - 本地 `file://` URL `MediaUrl`\n6. 调用 OpenClaw `finalizeInboundContext()`，把图片作为真正的多模态媒体输入交给 agent\n7. 同时把附件摘要拼进 prompt，作为兼容兜底\n\n---\n\n## agent 接收方式\n\n插件不会只把图片路径拼到纯文本里，而是会通过下面这些上下文字段传给 OpenClaw：\n\n- `MediaPath` / `MediaPaths`\n- `MediaUrl` / `MediaUrls`\n- `MediaType` / `MediaTypes`\n\n这意味着 OpenClaw runtime 可以把它当成真实图片输入处理，而不是仅靠 prompt 猜。\n\n---\n\n## 返回消息\n\n插件会回传：\n\n- `task.ack`\n- `task.status`\n- `task.result`\n- `error`\n\n失败时典型错误码包括：\n\n- `INVALID_MESSAGE`\n- `INVALID_BINARY_FRAME`\n- `TASK_CONFLICT`\n- `TASK_NOT_FOUND`\n- `UNSUPPORTED_MESSAGE_TYPE`\n- `EXECUTION_FAILED`\n- `INVALID_AGENT_OUTPUT`\n\n---\n\n## 注意\n\n1. 二进制帧当前只支持 **图片**。\n2. 推荐后端严格按协议发送 `has_image`、`image_format`、`image_size`，二进制帧类型固定为 `task.dispatch`。\n3. 如果后端已经有对象存储 URL，也可以直接走普通 `task.dispatch + context.attachments[]`。\n4. 本实现优先保证 AgentClaw 场景可落地，不包含更复杂的 `task.stream`、任务真正中断底层 run 等增强功能。\n","readmeFilename":"README.md"}