name: "fmode-code-agent" description: "用纯 JS(浏览器 + Node 双兼容、无构建)写网页版 Bot 智能体。触发词:智能体、agent、MCP、Skill、LangGraph、Re-act、工具调用 function calling、Web Worker MCP、Agent 架构、token 实测、自动部署。适用场景:(1) 新建一个网页内跑的智能体(对话 + 工具调用)(2) 把能力封装成 MCP 工具 / 接入多个 MCP (3) 用 LangGraph.js 做图编排(浏览器无构建)(4) 给智能体加 token/速度实测与输入输出比例 (5) 配自动部署。产出遵循 fmode-code-agent 规则仓的分层与命名规范。" version: "1.0.0" license: "MPL-2.0" author: "Fmode (未来飞马)"
教 AI 用纯 JS(浏览器 + Node 双兼容、无任何打包器)实现网页里跑的智能体: 三层架构(Agent 决策 / MCP 协议 / Skill 实现)、LangGraph.js 图编排(浏览器 ESM 直跑)、 浏览器端 MCP(Web Worker + JSON-RPC 2.0)、token/速度实测方法、自动部署。
前端 Lit 规范见姊妹技能 fmode-code-lit;本技能管智能体那一层。
Agent(决策)──不 import Skill;换框架不动 MCP/Skill
└─ MCP(协议)──把工具暴露成 JSON-RPC;不含业务编排;凭据不进 Worker
└─ Skill(实现)──真正干活(纯函数);不假设调用方
验收标准:换 Agent 框架时,MCP 与 Skill 一行不改。
fs/path 只在分发脚本里用。node <skill_dir>/scripts/scaffold.mjs ./my-agent --project my-agent
生成:index.html(importmap)+ app.js + lib/(graph / 协议 / 遥测)+ mcp/(Worker + 工具规格)。
node <skill_dir>/scripts/install-rules.mjs . # 写入 ./.claude/rules/ + CLAUDE.md 片段
bash scripts/install-hooks.sh # pre-push 触发「体检 → 发布 → 验真」
bash scripts/auto-deploy.sh # 手动跑一轮
bash scripts/auto-deploy.sh --watch # 常驻监听,改了即发
| 项 | 约定 |
|---|---|
| MCP 契约 | start(幂等) / listTools / callTool / state / transport |
| 工具全名 | 多 MCP 时 <mcpId>.<toolName>,避同名冲突 |
| Worker | 只 import 相对路径纯 JS;不能 import 裸包(无 importmap) |
| schema | Worker 侧 JSON Schema + 主线程侧 zod,assertSpecParity() 保证一致 |
| 凭据 | 不进 Worker;出图/调模型在主线程;错误剔除 key |
| State | 只存索引/摘要;凭据不进 State(会被 checkpoint 序列化) |
| ctx | 挂 config.configurable.__dc,别用闭包(图编译一次复用) |
| LangGraph | 浏览器需 importmap + 3 个替身(langsmith / node:async_hooks / base64-js) |
| 尺寸 | 出图 size 宽高须 ÷16;9:16 用 1024x1792(不是 1080x1920) |
| 参考图 | 只走 /v1/images/edits 的 images: [{ image_url }] |
| 实测 | 框架调度与 IO 分开计时;await 期间暂停框架计时 |
| 入库 | parse-server 不会自动补 user 指针 → 先 GET /parse/users/me,显式传 Pointer |
| 部署 | 无构建直传 OBS+CDN;只 curl 首页不算验收(须爬模块图 + 深链接回退) |
--force)。@langchain/langgraph@1.5.1 @langchain/core@1.2.18
@langchain/langgraph-checkpoint@1.2.0 @langchain/protocol@0.0.19
uuid@11.0.5 zod@4.6.7