parallel optimization groundwork

This commit is contained in:
LPF
2026-05-10 17:27:06 +08:00
parent ce2263ac8c
commit 7b07bb270b
37 changed files with 6896 additions and 3481 deletions

View File

@@ -0,0 +1,101 @@
# 04 工具注册架构优化
## 背景
`agent.NewAgentLoop()` 直接注册大量工具包括文件、shell、web、MCP、message、spawn、sessions、memory、parallel、browser、camera、system_info 等。工具注册逻辑和 AgentLoop 初始化耦合较深,也让子 Agent 可见性、默认工具集、可选工具集的边界不够清晰。
## 目标
抽出工具启动/注册逻辑,让 AgentLoop 只负责调用工具构建器,而不是直接知道每个工具的创建细节。
## 建议改动范围
主要文件:
- `pkg/agent/loop.go`
- `pkg/tools/registry.go`
- 新增 `pkg/tools/bootstrap.go`
- 新增 `pkg/tools/bootstrap_options.go`
可选文件:
- `pkg/tools/tool_allowlist_groups.go`
- `pkg/tools/subagent*.go`
- `pkg/tools/mcp.go`
尽量避免修改:
- `pkg/providers/*`
- `pkg/api/*`
- `cmd/*`
## 建议设计
新增一个工具构建入口,例如:
```go
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 ./...` 通过。
## 测试建议
```bash
go test ./pkg/tools -count=1
go test ./pkg/agent -count=1
go test ./...
```
建议新增一个测试断言默认工具集名称,避免重构时漏注册工具。
## 并行注意
该任务会修改 `pkg/agent/loop.go`,应避免和 AgentLoop 行为改动并行落同一分支。它不应修改 Provider 或 Gateway。