Skip to content

feat(tools): 引入 ToolRegistry 工具注册系统与文件操作工具#4

Merged
Jonnytoshen merged 6 commits into
mainfrom
feat/tool-system
May 22, 2026
Merged

feat(tools): 引入 ToolRegistry 工具注册系统与文件操作工具#4
Jonnytoshen merged 6 commits into
mainfrom
feat/tool-system

Conversation

@Jonnytoshen

Copy link
Copy Markdown
Owner

概述

引入统一的工具注册系统(ToolRegistry),新增文件操作工具,并为并发场景实现读写锁保障。

变更内容

新增

  • ToolRegistry:统一管理工具的注册、查询与 AI SDK 格式转换;内置读写锁,确保并发安全
  • ToolDefinition 接口:扩展 isConcurrencySafeisReadOnlymaxResultChars 元数据
  • ReadFileTool:读取文件内容,支持 maxResultChars 自动截断
  • WriteFileTool:写入文件内容(串行,独占锁)
  • ListDirectoryTool:列出目录内容(只读,可并发)
  • tools.ts:导出 allTools 工具列表,统一注册入口
  • 读写锁acquireConcurrent / acquireExclusive 实现共享/独占语义,finally 中释放防泄漏

重构

  • CalculatorTool / WeatherTool 迁移至 ToolDefinition 结构,补充 name、并发属性
  • agentLoop 参数由 ToolSet + BudgetState 改为 ToolRegistry,Token 预算内化为常量 TOKEN_BUDGET(50000),仅在用量 >90% 时打印日志
  • index.tsToolRegistry + allTools 替换手动构造的工具集,启动时打印已注册工具及属性

Mock Model(v0.4.0)

  • 新增并发工具调用(测试并发)、文件工具意图检测、截断验证(测试截断
  • 修复 hasToolResults 逻辑,只检查最近一轮 tool 消息
  • 简化 usage 为常量 USAGE,移除 makeUsage

测试

  • pnpm run lint
  • pnpm run format:check

- 新增 ListDirectoryTool:列出目录内容(只读、可并发)
- 新增 ReadFileTool:读取文件内容,支持 maxResultChars 截断(只读、可并发)
- 新增 WriteFileTool:写入文件内容(读写、串行)
- 重构 CalculatorTool / WeatherTool:迁移至 ToolDefinition 接口,补充 name、isConcurrencySafe、isReadOnly 字段
- 新增 tools.ts:导出 allTools 工具列表
- 更新 tools/index.ts:统一重导出所有工具
- agentLoop 参数由 ToolSet + BudgetState 改为 ToolRegistry,调用时通过 registry.toAISDKFormat() 转换
- 移除导出的 BudgetState 接口,改为内部常量 TOKEN_BUDGET(50000),仅在用量超过 90% 时打印日志
- index.ts:用 ToolRegistry + allTools 替换手动构造的 ToolSet,启动时打印已注册工具及并发/只读属性
- 新增三个状态变量:exclusiveLock、concurrentCount、waitQueue
- acquireConcurrent / releaseConcurrent:共享锁,只读工具可同时持有
- acquireExclusive / releaseExclusive:独占锁,写工具必须等所有共享锁释放
- drainQueue:锁释放后统一唤醒等待队列,让各方重新竞争
- toAISDKFormat 中根据 isConcurrencySafe 自动选择锁类型,锁在 finally 中释放以防泄漏
Copilot AI review requested due to automatic review settings May 22, 2026 07:17
@Jonnytoshen Jonnytoshen merged commit 8256d39 into main May 22, 2026
1 check failed
@Jonnytoshen Jonnytoshen deleted the feat/tool-system branch May 22, 2026 07:19
@Jonnytoshen Jonnytoshen removed the request for review from Copilot May 22, 2026 07:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant