主题
API 参考文档
本文引用的源码文件
本文引用的文件
目录
引言
本参考文档面向扩展开发者、Agent 集成方和 MCP/Skill/RAG 能力使用者,覆盖以下范围:
- Chrome Extension API:权限模型、消息通信、侧边栏控制、Service Worker 生命周期约束。
- Agent HTTP API:RESTful 接口规范、认证机制、错误码约定、文件上传与命令执行。
- WebSocket 协议:命令流式输出连接、鉴权参数、事件语义。
- MCP 协议:传输方式、工具发现与调用、注册表管理、语言与错误处理。
- 内部 API:扩展端与 Agent 端的通信契约、数据交换格式、状态同步机制。
- 使用示例、最佳实践、错误处理模式、版本兼容与迁移建议。
本项目采用双进程架构:Chrome 扩展端(Manifest V3,src/)与独立本地代理端 Agent(Node.js,agent/src/server.js)。两端版本号保持同步,当前以 2.3.1 为准。Agent 源码修改后必须重启进程,新接口才生效。
项目结构
- 扩展端入口与服务 Worker:manifest.json 声明 background service_worker 为 src/background/index.js;side panel 默认路径为 side_panel.html。
- 扩展端后台逻辑:background/index.js 负责 Service Worker 保活、侧边栏开关、快捷键、面板可见性、自动续跑等;local-agent-client.js 封装与 Agent 的 HTTP/WebSocket 通信;tool-executor.js 动态加载 MCP/RAG 工具并路由到 Agent。
- Agent 服务端:agent/src/server.js 提供 HTTP Router + WebSocket,承载配对、健康检查、文件、命令、MCP、Skill、Memory/RAG 等能力。
- MCP 子系统:agent/src/mcp/client.js 实现多种传输(stdio/sse/streamableHttp/websocket),agent/src/mcp/registry.js 维护已连接 Server 与工具列表。
- Memory/RAG:agent/src/memory/routes.js 暴露 /api/memory/* 业务端点;RAG 安装与探测在 agent/src/rag 下。
- Skill 系统:agent/src/skill/registry.js 管理 Workflow/Agent Skill 的加载、启用、执行与 Prompt 注入。
- 共享常量与工具定义:src/background/constants.js 与 src/shared/tools.js 提供内置工具分类、默认配置与 UI 映射。
graph TB A["浏览器页面<br/>Side Panel"] --> B["Background Service Worker<br/>src/background/index.js"] B --> C["Agent 客户端<br/>src/background/local-agent-client.js"] C --> D["Agent HTTP 服务<br/>agent/src/server.js"] D --> E["MCP 注册表<br/>agent/src/mcp/registry.js"] D --> F["记忆/Memory 路由<br/>agent/src/memory/routes.js"] D --> G["Skill 注册表<br/>agent/src/skill/registry.js"] B --> H["工具执行器<br/>src/background/tool-executor.js"] B --> I["常量与工具定义<br/>src/background/constants.js"]
图表来源
- manifest.json#L47-L53
- src/background/index.js#L1-L120
- src/background/local-agent-client.js#L40-L94
- agent/src/server.js#L388-L457
- agent/src/mcp/registry.js#L1-L55
- agent/src/memory/routes.js#L1-L27
- agent/src/skill/registry.js#L1-L20
- src/background/tool-executor.js#L448-L651
- src/background/constants.js#L87-L149
章节来源
核心组件
- Chrome Extension API 与权限
- manifest.json 声明 MV3、permissions、host_permissions、content_scripts、background service_worker、side_panel、commands、action 等。
- 关键权限包括 activeTab、storage、unlimitedStorage、sidePanel、scripting、bookmarks、history、downloads、notifications、tabs、tabGroups、cookies、offscreen、clipboardRead/Write、commands、alarms、debugger、webNavigation。
- Background Service Worker 生命周期
- 通过 keepalive port 维持 SW 存活;监听 sidePanel.onOpened/onClosed;快捷键切换侧边栏需用户手势上下文;SW 被回收后由闹钟恢复 ReAct checkpoint。
- Agent HTTP API
- 统一 JSON 响应体 { success, ... },CORS 仅放行 chrome-extension:// 来源;/api/pair 无认证,其余多数接口需要 Authorization: Bearer <token>。
- MCP 协议
- 支持 stdio/sse/streamableHttp/websocket 四种传输;Server 连接后 listTools/callTool;扩展端动态注册 MCP 工具并压缩 schema。
- Memory/RAG
- /api/memory/* 提供 store/recall/manage/inject/reindex 等;embedding-config/test-embedding/vector-status 为配置与探活端点。
- Skill 系统
- 支持 Workflow JSON 与 Agent SKILL.md;可导入/删除/启用/禁用;Agent Skill 通过 prompt 注入给 AI,Workflow 可直接 run。
章节来源
- manifest.json#L7-L32
- src/background/index.js#L120-L218
- agent/src/server.js#L235-L266
- agent/src/mcp/client.js#L29-L94
- agent/src/memory/routes.js#L77-L137
- agent/src/skill/registry.js#L130-L189
架构总览
扩展端通过 local-agent-client.js 向 Agent 发起 HTTP 请求或建立 WebSocket 连接;Background 将工具调用转发到 Agent 的文件、命令、MCP、Skill、Memory/RAG 等能力;Side Panel 负责聊天、流式渲染、任务恢复与交互确认。
sequenceDiagram
participant UI as "Side Panel"
participant BG as "Background"
participant AC as "AgentClient"
participant AG as "Agent Server"
participant MCP as "MCP Registry"
UI->>BG : 发送消息/触发工具
BG->>AC : 构造请求(携带 Bearer Token)
AC->>AG : HTTP POST/GET
AG-->>AC : JSON {success,...}
AC-->>BG : 返回结果
BG->>UI : 流式/最终结果
Note over BG,MCP : 动态注册 MCP 工具时从 Agent 拉取工具列表
图表来源
- src/background/local-agent-client.js#L393-L443
- agent/src/server.js#L417-L457
- src/background/tool-executor.js#L551-L651
详细组件分析
Chrome Extension API 与权限
- 权限清单
- 页面访问:activeTab、tabs、webNavigation、cookies、history、bookmarks。
- 存储与持久化:storage、unlimitedStorage、offscreen。
- UI 与交互:sidePanel、notifications、clipboardRead/Write、commands、alarms。
- 调试与网络:debugger、scripting。
- Content Scripts
- 匹配所有 URL,注入 libs/qrcode.min.js、libs/marked.min.js、src/content/index.js,CSS 样式 styles.css。
- Background Service Worker
- 入口 src/background/index.js;侧边栏行为 setPanelBehavior(openPanelOnActionClick=false),手动 open/close。
- 快捷键 _toggle_sidepanel 绑定 Ctrl+Shift+Y(mac 为 Command+Shift+Y)。
- 侧边栏作用域:global 或 tab-specific;全局模式下所有 tab 可用面板,tab-specific 模式下仅显式打开的 tab 可见。
- 窗口分组:可选自动将带面板的 tab 归入“AI Helper”分组,便于识别。
- SW 保活:keepalive port 防止空闲被杀;SW 重启检测并通知 Side Panel。
- 自动续跑:基于 reactCheckpoints 定时闹钟恢复中断任务,达到最大尝试次数后提示人工介入。
flowchart TD Start(["扩展启动"]) --> Init["初始化 i18n/闹钟/DB自检"] Init --> Keepalive["注册 keepalive port"] Keepalive --> Panel["设置 sidePanel 行为与默认 path"] Panel --> Scope["读取 sidePanelScope 并应用"] Scope --> Events["监听 onOpened/onClosed/tabs/windows"] Events --> Shortcut["注册快捷键 _toggle_sidepanel"] Shortcut --> AutoResume["注册自动续跑闹钟处理器"]
图表来源
- src/background/index.js#L53-L95
- src/background/index.js#L220-L322
- src/background/index.js#L581-L650
- src/background/index.js#L65-L81
章节来源
- manifest.json#L7-L32
- manifest.json#L36-L46
- manifest.json#L47-L76
- src/background/index.js#L120-L218
- src/background/index.js#L220-L322
- src/background/index.js#L581-L650
Agent HTTP API 规范
- 通用响应体
- 成功:
- 失败:
- 附加 httpStatus:扩展端在 fetch 响应后附加 HTTP 状态码,用于区分“文件不存在 404”与“Agent 离线/网络错误”。
- CORS 策略
- 仅允许 chrome-extension:// 来源跨域读取响应;OPTIONS 预检同样遵循该规则。
- 认证机制
- 除 /api/pair 与 /api/status 外,其他接口需在 Authorization 头携带 Bearer token。
- /api/shutdown 对本地来源免认证,远程来源仍需认证。
- 主要 REST 端点(扩展端注释汇总)
- 配对与会话:POST /api/pair,GET /api/status,GET /api/status/detail
- 文件系统:POST /api/fs/read/write/list/delete/search_files/search_content/files/upload
- 浏览器:POST /api/browser/open
- 命令执行:POST /api/exec,POST /api/exec/stop
- MCP:GET /api/mcp/tools,POST /api/mcp/call,GET/POST/DELETE /api/mcp/servers,POST /api/mcp/servers/connect/disconnect,PUT /api/mcp/servers/toggle
- Skill:GET /api/skill/list/detail,POST /api/skill/run/import/save-markdown/import-zip/import-url,DELETE /api/skill/delete,POST /api/skill/toggle,GET /api/skill/markdown/resource,GET /api/skill/agent-prompts/agent-prompt
- 记忆:/api/memory/store/recall/manage/inject/reindex,以及 embedding-config/test-embedding/vector-status
- 文件大小限制
- JSON body 上限 MAX_BODY_SIZE=200MB;流式上传 /api/fs/upload-stream 也受相同上限保护。
- 操作冷却与防重入
- /api/agent/restart/update/shutdown 等敏感操作有 OPERATION_COOLDOWN_MS=10s 冷却,并发操作返回 409,频繁请求返回 429。
flowchart TD
Req["HTTP 请求"] --> Parse["解析 URL/Body"]
Parse --> Pair{"/api/pair ?"}
Pair --> |是| PairHandler["处理配对"]
Pair --> |否| Status{"/api/status ?"}
Status --> |是| StatusHandler["返回平台信息"]
Status --> |否| Auth{"Authorization Bearer ?"}
Auth --> |否| Err401["返回 401 noToken"]
Auth --> |是| Verify["verifyToken(extId)"]
Verify --> Valid{"有效 ?"}
Valid --> |否| Err403["返回 403 invalidToken"]
Valid --> Route["分发到具体端点"]
Route --> Resp["jsonResponse(success,...)"]
图表来源
章节来源
- agent/src/server.js#L235-L303
- agent/src/server.js#L388-L457
- agent/src/server.js#L471-L548
- agent/src/server.js#L555-L720
- src/background/local-agent-client.js#L40-L94
WebSocket 协议(命令执行流式输出)
- 连接地址
- 由扩展端根据 Agent 配置的 url 替换 wsUrl 中的本地地址(0.0.0.0/127.0.0.1/localhost → 实际 hostname),并在查询串追加 token。
- 鉴权
- 通过 URL 查询参数 token 传递 Bearer token;扩展端在创建连接前从 getAgentConfig() 获取。
- 消息格式
- 服务端推送 JSON 对象;若无法解析则回退为 raw 类型。
- 生命周期
- onopen:连接成功;onmessage:接收命令输出;onclose:连接关闭;onerror:连接错误。
- 超时
- 空闲超时由调用方统一管理,避免双重超时冲突。
sequenceDiagram participant BG as "Background" participant AC as "AgentClient" participant WS as "WebSocket" participant AG as "Agent Server" BG->>AC : createExecWebSocket(wsUrl,onMessage,onClose,onError) AC->>AC : 解析 config.url 并替换 localhost AC->>WS : new WebSocket(token=...) WS-->>AC : onopen AC-->>BG : resolve(ws) WS-->>AC : onmessage(JSON/raw) AC-->>BG : onMessage(data) WS-->>AC : onclose/onerror AC-->>BG : onClose()/onError(error)
图表来源
章节来源
MCP 协议规范
- 传输方式
- stdio:command/args/env/cwd;sse/streamableHttp:url+headers;websocket:url。
- 连接流程
- McpClient.connect() 创建 Client,选择 transport,连接后获取 serverInfo/capabilities,listTools 缓存 tools。
- 工具调用
- callTool(toolName,args) 返回 { success,content,raw } 或 { success:false,error }。
- 注册表
- initializeMcpRegistry() 启动时连接所有 enabled servers;getMcpServersStatus() 返回服务器状态与工具数量;getMcpTools(serverId?) 扁平化工具列表;callMcpTool(serverId,toolName,args) 转发调用。
- 扩展端动态注册
- tool-executor.js 从 Agent 拉取 MCP 工具,压缩 inputSchema(限制嵌套深度、参数数量、description 长度),注入 RAW_TOOLS/BUILTIN_TOOLS/TOOL_HANDLERS,并更新 storage.mcpTools。
classDiagram
class McpClient {
+serverId
+serverName
+connected
+tools
+serverInfo
+connect()
+callTool(toolName,args)
+disconnect()
+getStatus()
}
class Registry {
+initializeMcpRegistry()
+getMcpServersStatus()
+getMcpTools(serverId)
+callMcpTool(serverId,toolName,args)
+connectMcpServer(serverId)
+disconnectMcpServer(serverId)
+shutdownMcpRegistry()
}
Registry --> McpClient : "管理实例"
图表来源
章节来源
- agent/src/mcp/client.js#L29-L94
- agent/src/mcp/client.js#L96-L184
- agent/src/mcp/registry.js#L1-L55
- agent/src/mcp/registry.js#L85-L128
- src/background/tool-executor.js#L448-L651
内部 API 接口(扩展端与 Agent 端)
- 通信封装
- agentRequest(path,body,method,timeoutMs) 统一添加 Authorization、Accept-Language,附加 httpStatus;agentGet(path,timeoutMs) 用于 GET。
- uploadFile(file) 使用 FormData 调用 /api/files/upload,超时 60s。
- 文件与搜索
- readFile/statFile/writeFile/listDir/deleteFile/downloadFile/searchFiles/searchContent。
- 命令执行
- execCommand/execCommandWait/stopCommand/detachCommand。
- MCP 与 Skill
- getMcpTools/callMcpTool/getMcpServers/addMcpServer/removeMcpServer/connectMcpServer/disconnectMcpServer/toggleMcpServer。
- RAG 知识库
- ragListCollections 等(见注释与调用处)。
flowchart TD
Call["调用方"] --> AC["agentRequest/agentGet"]
AC --> Fetch["fetch(url, headers={Authorization,Bearer})"]
Fetch --> Resp["response.json()"]
Resp --> Attach["附加 httpStatus"]
Attach --> Return["返回 {success,...,httpStatus}"]
图表来源
- src/background/local-agent-client.js#L393-L443
- src/background/local-agent-client.js#L445-L482
- src/background/local-agent-client.js#L516-L550
章节来源
- src/background/local-agent-client.js#L393-L482
- src/background/local-agent-client.js#L484-L626
- src/background/local-agent-client.js#L730-L788
事件监听机制与状态同步
- Side Panel 与 Background 的消息通道
- 通过 chrome.runtime.sendMessage/chrome.runtime.connect 进行消息传递;keepalive port 用于保活与实例身份上报。
- 面板可见性与通知
- isPanelVisibleToUser 结合窗口焦点、活跃 tab、面板打开状态判断是否弹通知;面板断开延迟复核避免误报。
- 会话恢复与 Checkpoint
- 自动续跑扫描 reactCheckpoints,按 interruptedReason 与重试次数决定是否恢复;到达最大尝试次数后通知人工介入。
stateDiagram-v2 [*] --> Idle Idle --> Running : "CALL_API" Running --> Paused : "用户取消/超时" Running --> Completed : "完成" Running --> Error : "异常" Paused --> Resuming : "自动续跑" Resuming --> Running : "恢复成功" Resuming --> Exhausted : "尝试耗尽" Completed --> Idle : "清理" Error --> Idle : "清理" Exhausted --> Idle : "人工介入"
图表来源
章节来源
依赖关系分析
- 扩展端依赖
- background/index.js 依赖 state/config/notifier/panel-visibility/auto-resume/context-compactor/token-recorder/react-loop/tool-executor/local-agent-client。
- tool-executor.js 依赖 constants.js、agent-dispatcher、stream-controller、tool-helpers、activity-store、network-scope、tool-memory、tool-debugger、snapshot-orchestrator、notifier、react-loop、RAG_TOOLS。
- Agent 端依赖
- server.js 聚合 auth/security/trash/executor/search/rag/install/memory/routes/mcp/registry/skill/registry/i18n/logger/process-tree。
- mcp/client.js 依赖 @modelcontextprotocol/sdk 的多种传输;registry.js 依赖 client.js 与 mcp-config.js。
- memory/routes.js 依赖 service.js/embedding-config.js/rag/embedding/index.js。
- skill/registry.js 依赖 loader.js/executor.js/path/fs/i18n。
graph LR BGIndex["background/index.js"] --> LocalAgent["local-agent-client.js"] BGIndex --> ToolExec["tool-executor.js"] ToolExec --> Constants["constants.js"] ToolExec --> AgentDispatch["agent-dispatcher.js"] ToolExec --> StreamCtrl["stream-controller.js"] ToolExec --> Snapshot["snapshot-orchestrator.js"] Server["agent/src/server.js"] --> MCPReg["mcp/registry.js"] Server --> MemoryRoutes["memory/routes.js"] Server --> SkillReg["skill/registry.js"] MCPReg --> MCPClient["mcp/client.js"]
图表来源
- src/background/index.js#L1-L21
- src/background/tool-executor.js#L1-L23
- agent/src/server.js#L1-L56
- agent/src/mcp/registry.js#L1-L5
- agent/src/memory/routes.js#L1-L11
- agent/src/skill/registry.js#L1-L8
章节来源
性能与可靠性
- Service Worker 生命周期
- 通过 keepalive port 保活;SW 被回收后由闹钟恢复任务;面板断开延迟复核减少误判。
- 大消息截断
- chrome.runtime.sendMessage 单条消息最大 64MiB,日志条目超过阈值时保留尾部 N 条并保留 subtask_plan。
- MCP Schema 压缩
- 限制 description 长度、properties 嵌套深度、参数数量,避免撑爆上下文。
- Agent 操作冷却
- restart/update/shutdown 等接口 10s 冷却,防 DoS;并发操作返回 409,频繁请求返回 429。
- 文件上传大小限制
- JSON body 与 multipart/form-data 均受 MAX_BODY_SIZE 保护;流式上传也受相同上限保护。
[本节为通用指导,不直接分析具体文件]
故障排查指南
- 常见错误码与含义
- 401:缺少 token(noToken)。
- 403:token 无效(invalidToken)。
- 409:操作进行中(operationInProgress)。
- 429:请求过于频繁(tooFrequent)。
- 500:内部错误(internal)。
- 诊断步骤
- 检查 Authorization 头是否正确携带 Bearer token。
- 检查 Origin 是否为 chrome-extension://,否则 CORS 会阻止跨域读取。
- 对于 /api/status 与 /api/status/detail,确认 Agent 是否在线且端口可达。
- 对于 MCP 工具不可用,检查 registry 中服务器是否 connected,工具是否被禁用。
- 对于命令执行超时,检查扩展端 toolTimeout 与 Agent 端 commandTimeout 预算是否合理。
章节来源
版本管理与迁移
- 版本同步
- 扩展端 manifest.json version 与 Agent package.json version 保持一致,当前为 2.3.1。
- 向后兼容
- Agent 端对旧版扩展的兼容性体现在:/api/status 返回 platform/nodeVersion/searchTools/ragAvailable;/api/status/detail 返回 pairCodeTTL/workdir/allowedPaths/commandTimeout/fileMaxSize/uploadMaxSize/runningProcesses/resourceUsage。
- Memory 路由对未知路径返回 404,扩展端据此探测旧版本 Agent 无记忆端点。
- 迁移指南
- 旧格式 Agent 配置(agentUrl/agentToken/agentPlatform)在启动时迁移到 pairedAgents/activeAgentId,token 加密存储。
- MCP 工具动态注册:若 Agent 不支持 MCP,扩展端静默跳过并记录日志。
- Skill 系统:内置 skill-creator 标记为 builtin/editable=false/deletable=false;用户停用状态持久化到 disabled_skills.json。
章节来源
- manifest.json#L1-L6
- agent/src/server.js#L487-L500
- agent/src/server.js#L724-L749
- agent/src/memory/routes.js#L157-L160
- src/background/local-agent-client.js#L147-L183
- src/background/tool-executor.js#L551-L651
- agent/src/skill/registry.js#L155-L180
结论
本 API 参考文档梳理了 Chrome Extension API、Agent HTTP API、WebSocket 协议、MCP 协议与内部通信契约,明确了权限模型、认证机制、错误码约定与状态同步机制。通过动态工具注册、Schema 压缩、操作冷却与大消息截断,系统在可扩展性与可靠性之间取得平衡。建议在集成时严格遵循认证与 CORS 策略,合理使用超时与冷却机制,并结合 Checkpoint 与自动续跑提升长任务鲁棒性。