feat(core): ChartController 暴露 Agent 工具宿主注册(registerToolHost) - #272
Closed
EliteOtaku wants to merge 2 commits into
Closed
EliteOtaku wants to merge 2 commits into
EliteOtaku wants to merge 2 commits into
Conversation
…egisterToolHost) Tool 装饰器协议允许任意宿主把领域方法暴露为 Agent 工具,但 toolHosts 硬编码(仅内置对比品种宿主),外部宿主的 @tool 方法无法被归属解析。 - ChartController 新增 registerToolHost/unregisterToolHost(幂等去重); ChartAgentControllerDependencies 加可选 extraToolHosts() - toolHosts getter 合并内置+动态宿主;browser tool registry 的 owns() 解析消费方零改动 - 根导出补通用工具协议:Tool 装饰器 + ChartToolConfig/ ChartToolExecutionContext/ChartToolSafety/RegisteredChartTool 类型 - 新增 toolHosts 测试 3 用例;core 251 文件 2676 用例全绿
EliteOtaku
added a commit
to EliteOtaku/KCQ-NexusAI
that referenced
this pull request
Sep 29, 2026
@tool 装饰器依赖跨 bundle 不可达(外部插件与 core 不共享模块实例), bridge 工具目录又只在构造时静态快照——外部宿主的 Agent 工具无法进入目录。 - core:chartToolRegistry 增 registerChartTool/unregisterChartTool(编程式 写入唯一真源,冲突语义与装饰器一致);根导出同步 - vue:BrowserAgentBridgeOptions 增 extraChartTools?: () => RegisteredChartTool[] (惰性求值一次),BrowserToolRegistry.registerTools 合并内置+外部源 - 与 363045841#272(registerToolHost 方法归属解析)组成外部 Agent 工具完整链: 宿主持有 @tool 类实例 → registerToolHost 注册归属 → bridge extraChartTools 声明工具目录
@tool 装饰器依赖跨 bundle 不可达(外部插件与 core 不共享模块实例), bridge 工具目录又只在构造时静态快照——外部宿主的 Agent 工具无法进入目录。 - core:chartToolRegistry 增 registerChartTool/unregisterChartTool(编程式 写入唯一真源,冲突语义与装饰器一致);根导出同步 - vue:BrowserAgentBridgeOptions 增 extraChartTools?: () => RegisteredChartTool[] (惰性求值一次),BrowserToolRegistry.registerTools 合并内置+外部源 - 与 363045841#272(registerToolHost 方法归属解析)组成外部 Agent 工具完整链: 宿主持有 @tool 类实例 → registerToolHost 注册归属 → bridge extraChartTools 声明工具目录
EliteOtaku
added a commit
to EliteOtaku/KCQ-NexusAI
that referenced
this pull request
Sep 29, 2026
与 363045841#272(工具宿主注册)同族的注册表编程入口:指标目录的注册只有类装饰器 (依赖模块加载),外部宿主 bundle 与 Core 不共享模块实例时不可达。 - indicatorDefinitionRegistry:抽共享组装 defineIndicator,新增 registerIndicatorDefinition(config, rendererFactory)(同名重复注册抛错, 与装饰器语义一致);name 放宽为 string(契约 union 仅约束内置编译期拼写) - IndicatorDefinitionConfig/IndicatorMetadata 增可选 ui 字段(name/description/ params):内置指标 UI 元数据来自静态 uiMeta 表,外部指标随定义携带—— indicatorCatalog rebuild 映射 uiMeta ?? def.ui - 测试 +4(编程式注册进目录/重复注册拒绝/params 通道/装饰器与编程式同表), 全量 252 文件 2680 用例全绿
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
动机
Tool装饰器协议(foundation/agent/chartToolRegistry)允许任何持有宿主对象的代码把领域方法暴露为 Agent 工具,但ChartAgentController.toolHosts目前是硬编码数组(仅内置对比品种宿主)——外部宿主(插件、嵌入方)无法把自己的@Tool宿主注册进 Agent 的方法归属解析,@Tool协议因此对第三方宿主不可用。方案(纯增量 API)
ChartController新增两个方法:ChartAgentControllerDependencies增加可选extraToolHosts?: () => ReadonlyArray<object>;toolHostsgetter 返回[comparisonCommands, ...extraToolHosts()],既有消费方(browser tool registry 的chartToolTarget按owns()解析)零改动;Tool装饰器与ChartToolConfig/ChartToolExecutionContext/ChartToolSafety/RegisteredChartTool类型——外部宿主此前无法从公开 API 获取装饰器。典型用法(外部宿主/插件):
验证
createChartController.toolHosts.test.ts3 用例:注册幂等(重复注册仅一份)/ unregister 移除 /@Tool方法经owns解析宿主并执行(TypeBox 校验走通);兼容性
纯增量:不改既有接口行为;未注册宿主时
toolHosts行为与之前完全一致。补充(第二段:工具目录动态源)
@Tool装饰器依赖模块级注册表,外部宿主 bundle 与 core 不共享模块实例时不可达;工具目录又只在 bridge 构造时静态快照。本 PR 同时补齐:chartToolRegistry增registerChartTool(tool)/unregisterChartTool(name)(编程式写入唯一真源,冲突语义与装饰器一致);BrowserAgentBridgeOptions增extraChartTools?: () => ReadonlyArray<RegisteredChartTool>,BrowserToolRegistry.registerTools合并内置与外部源。组合用法(外部宿主/插件):