mirror of
https://github.com/YspCoder/clawgo.git
synced 2026-05-17 17:47:33 +08:00
2.6 KiB
2.6 KiB
04 工具注册架构优化
背景
agent.NewAgentLoop() 直接注册大量工具,包括文件、shell、web、MCP、message、spawn、sessions、memory、parallel、browser、camera、system_info 等。工具注册逻辑和 AgentLoop 初始化耦合较深,也让子 Agent 可见性、默认工具集、可选工具集的边界不够清晰。
目标
抽出工具启动/注册逻辑,让 AgentLoop 只负责调用工具构建器,而不是直接知道每个工具的创建细节。
建议改动范围
主要文件:
pkg/agent/loop.gopkg/tools/registry.go- 新增
pkg/tools/bootstrap.go - 新增
pkg/tools/bootstrap_options.go
可选文件:
pkg/tools/tool_allowlist_groups.gopkg/tools/subagent*.gopkg/tools/mcp.go
尽量避免修改:
pkg/providers/*pkg/api/*cmd/*
建议设计
新增一个工具构建入口,例如:
type BootstrapOptions struct {
Config *config.Config
Workspace string
MessageBus *bus.MessageBus
CronService *cron.CronService
Provider providers.LLMProvider
ProcessManager *ProcessManager
}
type BootstrapResult struct {
Registry *ToolRegistry
ProcessManager *ProcessManager
SubagentManager *SubagentManager
SubagentRouter *SubagentRouter
}
func BootstrapDefaultTools(ctx context.Context, opts BootstrapOptions) (*BootstrapResult, error)
AgentLoop 中保留:
- session manager 初始化。
- context builder 初始化。
- provider fallback chain。
- subagent run func 注入。
工具构建器负责:
- 创建并注册基础工具。
- 根据 config 注册 cron/remind。
- 根据 config 注册 MCP 和远端工具。
- 创建 subagent manager/router。
- 注册 tool catalog 需要的 metadata。
子 Agent 可见性
保持现有行为:
- 主 Agent 默认看见全部注册工具。
- 子 Agent 由 profile allowlist 限制。
skill_exec仍为隐式允许工具。parallel内部 call 仍需要逐项校验 allowlist。
验收标准
agent.NewAgentLoop()更短,工具注册细节迁移出去。- 工具列表和原来保持一致。
- MCP discovery 行为保持一致。
- subagent spawn/profile/sessions 工具仍正常注册。
go test ./pkg/agent ./pkg/tools通过。go test ./...通过。
测试建议
go test ./pkg/tools -count=1
go test ./pkg/agent -count=1
go test ./...
建议新增一个测试断言默认工具集名称,避免重构时漏注册工具。
并行注意
该任务会修改 pkg/agent/loop.go,应避免和 AgentLoop 行为改动并行落同一分支。它不应修改 Provider 或 Gateway。