智能体开发¶
本页说明了 InnoClaw 中与智能体相关功能、工具调用流程以及 deep-research 编排有关的贡献者要求。
主要代码区域¶
智能体与研究执行相关的行为分布在几个核心区域中:
src/app/api/agent/与src/app/api/deep-research/负责 HTTP 入口src/lib/ai/负责 provider 选择、prompts、运行时能力检查以及工具注册src/lib/ai/tools/负责具体工具实现与共享工具类型src/lib/agent/负责流式生命周期与持久化行为src/lib/deep-research/负责 doctrine 加载、角色定义、编排、工作流策略与执行辅助逻辑src/lib/skills/负责技能导入以及以仓库为后端的技能工作流src/components/agent/与src/components/deep-research/负责暴露智能体状态与工作流进度的 UI 界面
架构规则¶
保持 route handler 足够轻薄。它们只负责解析输入、校验上下文、选择正确的编排路径,并将非简单逻辑下放到
src/lib/。将 prompts 放在 prompt 模块或 doctrine/role 文件中,不要把大段 prompt 文本直接嵌入 route handler 或 React 组件里。
将 provider、model 与运行时能力逻辑集中在
src/lib/ai/中,以保证各个智能体入口行为一致。将
src/lib/ai/tool-names.ts视为工具标识与权限分层的公开契约。
智能体变更流程¶
flowchart LR
Start["Plan an agent change"] --> Type{"What changed?"}
Type -- "Prompt or role" --> Prompt["Review prompt files, doctrine, parsers, and UI labels"]
Type -- "Tool or privilege" --> Tool["Review tool names, gates, selectors, and allow/deny tests"]
Type -- "Streaming or session" --> Stream["Review route, stream manager, persistence, and resume UI"]
Type -- "Deep-research workflow" --> Research["Review doctrine, roles, workflow policy, routes, and UI states"]
Prompt --> Verify["Add tests and update docs if contributor-facing"]
Tool --> Verify
Stream --> Verify
Research --> Verify
Verify --> Audit{"High-risk execution path?"}
Audit -- "Yes" --> Approval["Confirm approval gates and audit trail remain intact"]
Audit -- "No" --> Ship["Prepare handoff with changed contracts and validation"]
Approval --> Ship
flowchart LR
Start["规划一次智能体变更"] --> Type{"变更类型是什么?"}
Type -- "Prompt 或角色" --> Prompt["联查 prompt 文件、doctrine、解析器与 UI 标签"]
Type -- "工具或权限" --> Tool["联查工具名称、门控、选择器与 allow/deny 测试"]
Type -- "流式输出或会话" --> Stream["联查路由、stream manager、持久化与恢复 UI"]
Type -- "Deep-research 工作流" --> Research["联查 doctrine、角色、工作流策略、路由与 UI 状态"]
Prompt --> Verify["补充测试,并在影响贡献者时更新文档"]
Tool --> Verify
Stream --> Verify
Research --> Verify
Verify --> Audit{"是否涉及高风险执行路径?"}
Audit -- "是" --> Approval["确认审批门控与审计链路仍然完整"]
Audit -- "否" --> Ship["准备交接说明,并列出变更契约与验证"]
Approval --> Ship
在为智能体相关变更提交 PR 之前,请先使用这套流程。它能快速帮您识别最常见的跨层回归。
变更矩阵¶
当您修改以下任一面向智能体的契约时,请一并检查对应的联动面:
Prompt、doctrine 或角色文本变更:同时检查 prompt 模块、doctrine 文件、角色注册表、依赖它们的解析器,以及依赖这些名称或指令的 UI 文案与状态标签。
新增工具或工具重命名:同时检查
src/lib/ai/tool-names.ts、工具实现、allow/deny 逻辑、相关选择器 UI,以及描述该能力的贡献者文档。权限层级或审批流程变更:同时检查工具门控、运行时能力检查、UI 交互提示,以及允许/拒绝两条路径的测试。
流式输出或会话持久化变更:同时检查 route 入口、
src/lib/agent/agent-stream-manager.ts、持久化辅助逻辑,以及负责恢复或展示进行中状态的 UI 组件。Deep-research 工作流变更:同时检查 doctrine 加载、角色注册表、工作流策略、artifact/status 类型、API 路由,以及依赖这些步骤或状态存在的 UI 组件。
工具与权限边界¶
将新工具实现添加到
src/lib/ai/tools/下。优先复用共享的工具上下文与校验辅助逻辑,不要临时引入零散的文件系统或 shell 访问。
新工具默认遵循最小权限原则。如果某项能力可能修改基础设施或触发远程执行,就应像现有高权限工具集一样进行门控。
除非您明确在做契约迁移,否则应保持工具名称稳定。重命名需要同步更新测试、文档以及所有相关的 UI 选择器界面。
不要让 prompt 文本成为高风险能力的唯一防线。真正的权限边界应体现在带类型的运行时检查与工具注册中。
流式输出、会话与 UI 状态¶
如果您修改了智能体流式输出的生成或消费方式,请一并检查
src/lib/agent/agent-stream-manager.ts以及已挂载 UI 的行为。当面板卸载、标签切换或后台任务继续运行时,必须保持恢复与持久化语义不变。
谨慎处理由 localStorage 支撑的键与会话标识符。应将它们视为 route、runtime 与 UI 各层之间的共享契约。
优先使用显式的状态迁移与可见错误,而不是静默 fallback;静默 fallback 容易掩盖事件丢失、工具不受支持或恢复失败。
Deep-Research 与多角色流程¶
让
researcher-doctrine.ts、role-registry.ts与workflow-policy.ts之间的 doctrine 加载、角色定义与工作流策略保持一致。当修改角色 prompts 或协作行为时,请检查依赖这些 artifact、步骤或状态存在的 API 路由与 UI 组件。
高风险执行路径必须继续保持审批驱动,并且可审计。
当新增角色、artifact 类型或工作流状态时,请验证它在持久化、导出/报告路径以及面向操作者的评审界面中是如何呈现的。
失败处理与可观测性¶
在客户端或操作员需要做出不同处理时,应返回显式、带类型的失败状态。
记录足够的 request、session、provider 或 tool 上下文,以便在无需从头复现的情况下定位编排失败。
除非用户体验明确告知了被跳过的能力,否则应避免静默 provider fallback 或静默抑制工具。
在修改远程执行、集群操作或其他高风险流程时,必须保持审批检查点与审计链路完整。
测试要求¶
请根据您修改的层级选择测试:
路由行为:
src/app/api/**/route.test.tsProvider 或模型选择行为:
src/lib/ai/下的测试工具契约或解析行为:
src/lib/ai/或src/lib/skills/下的测试流式/会话持久化行为:
src/lib/agent/附近或受影响 UI 辅助逻辑附近的测试Deep-research 工作流逻辑:
src/lib/deep-research/下的测试
至少,新引入的面向智能体行为应覆盖以下方面:
校验与错误路径
权限或工具访问边界
在行为不同处的 provider/runtime 分支
任何持久化的会话或工作流状态变化
智能体贡献者检查清单¶
在为智能体相关工作请求评审前,请确认:
变更矩阵中相关的契约联动面已被一并检查
测试同时覆盖成功路径与失败/拒绝路径
如果其他贡献者或操作员需要理解这项新能力,文档已经同步更新
交接说明已经明确指出变化的工具名称、审批边界、持久化键、工作流状态或环境要求
文档要求¶
当智能体相关变更影响以下内容时,请更新贡献者文档:
安装配置或必需环境变量
可用工具、权限边界或执行门控
贡献者在测试、调试或本地开发中的工作流
其他开发者很可能会继续扩展的路由或工作流契约
如果某项变更主要是内部实现,但引入了新的开发者扩展点,请在这里或最相关的开发文档页中记录该扩展点。