@vybestack/llxprt-code-tools 0.10.0-nightly.260613.1adad3b34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +294 -0
- package/dist/.last_build +0 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/src/__tests__/fixtures/filesystem-tool-fixtures.d.ts +29 -0
- package/dist/src/__tests__/fixtures/filesystem-tool-fixtures.js +30 -0
- package/dist/src/__tests__/fixtures/filesystem-tool-fixtures.js.map +1 -0
- package/dist/src/__tests__/fixtures/key-storage-fixtures.d.ts +39 -0
- package/dist/src/__tests__/fixtures/key-storage-fixtures.js +53 -0
- package/dist/src/__tests__/fixtures/key-storage-fixtures.js.map +1 -0
- package/dist/src/__tests__/fixtures/provider-formatting-fixtures.d.ts +140 -0
- package/dist/src/__tests__/fixtures/provider-formatting-fixtures.js +157 -0
- package/dist/src/__tests__/fixtures/provider-formatting-fixtures.js.map +1 -0
- package/dist/src/__tests__/red-test-helpers.d.ts +14 -0
- package/dist/src/__tests__/red-test-helpers.js +18 -0
- package/dist/src/__tests__/red-test-helpers.js.map +1 -0
- package/dist/src/formatters/IToolFormatter.d.ts +84 -0
- package/dist/src/formatters/IToolFormatter.js +6 -0
- package/dist/src/formatters/IToolFormatter.js.map +1 -0
- package/dist/src/formatters/ToolFormatter.d.ts +94 -0
- package/dist/src/formatters/ToolFormatter.js +379 -0
- package/dist/src/formatters/ToolFormatter.js.map +1 -0
- package/dist/src/formatters/ToolIdStrategy.d.ts +79 -0
- package/dist/src/formatters/ToolIdStrategy.js +173 -0
- package/dist/src/formatters/ToolIdStrategy.js.map +1 -0
- package/dist/src/formatters/doubleEscapeUtils.d.ts +46 -0
- package/dist/src/formatters/doubleEscapeUtils.js +223 -0
- package/dist/src/formatters/doubleEscapeUtils.js.map +1 -0
- package/dist/src/formatters/index.d.ts +21 -0
- package/dist/src/formatters/index.js +12 -0
- package/dist/src/formatters/index.js.map +1 -0
- package/dist/src/formatters/toolIdNormalization.d.ts +28 -0
- package/dist/src/formatters/toolIdNormalization.js +97 -0
- package/dist/src/formatters/toolIdNormalization.js.map +1 -0
- package/dist/src/formatters/toolNameUtils.d.ts +43 -0
- package/dist/src/formatters/toolNameUtils.js +143 -0
- package/dist/src/formatters/toolNameUtils.js.map +1 -0
- package/dist/src/index.d.ts +88 -0
- package/dist/src/index.js +68 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/interfaces/IAsyncTaskService.d.ts +57 -0
- package/dist/src/interfaces/IAsyncTaskService.js +6 -0
- package/dist/src/interfaces/IAsyncTaskService.js.map +1 -0
- package/dist/src/interfaces/IIdeService.d.ts +62 -0
- package/dist/src/interfaces/IIdeService.js +6 -0
- package/dist/src/interfaces/IIdeService.js.map +1 -0
- package/dist/src/interfaces/ILspService.d.ts +54 -0
- package/dist/src/interfaces/ILspService.js +6 -0
- package/dist/src/interfaces/ILspService.js.map +1 -0
- package/dist/src/interfaces/IMcpToolService.d.ts +47 -0
- package/dist/src/interfaces/IMcpToolService.js +6 -0
- package/dist/src/interfaces/IMcpToolService.js.map +1 -0
- package/dist/src/interfaces/IPromptRegistryService.d.ts +51 -0
- package/dist/src/interfaces/IPromptRegistryService.js +6 -0
- package/dist/src/interfaces/IPromptRegistryService.js.map +1 -0
- package/dist/src/interfaces/ISettingsService.d.ts +50 -0
- package/dist/src/interfaces/ISettingsService.js +6 -0
- package/dist/src/interfaces/ISettingsService.js.map +1 -0
- package/dist/src/interfaces/IShellExecutionService.d.ts +55 -0
- package/dist/src/interfaces/IShellExecutionService.js +6 -0
- package/dist/src/interfaces/IShellExecutionService.js.map +1 -0
- package/dist/src/interfaces/IShellToolHost.d.ts +176 -0
- package/dist/src/interfaces/IShellToolHost.js +6 -0
- package/dist/src/interfaces/IShellToolHost.js.map +1 -0
- package/dist/src/interfaces/ISkillService.d.ts +69 -0
- package/dist/src/interfaces/ISkillService.js +6 -0
- package/dist/src/interfaces/ISkillService.js.map +1 -0
- package/dist/src/interfaces/IStorageService.d.ts +42 -0
- package/dist/src/interfaces/IStorageService.js +6 -0
- package/dist/src/interfaces/IStorageService.js.map +1 -0
- package/dist/src/interfaces/ISubagentService.d.ts +112 -0
- package/dist/src/interfaces/ISubagentService.js +6 -0
- package/dist/src/interfaces/ISubagentService.js.map +1 -0
- package/dist/src/interfaces/ITaskToolHost.d.ts +185 -0
- package/dist/src/interfaces/ITaskToolHost.js +6 -0
- package/dist/src/interfaces/ITaskToolHost.js.map +1 -0
- package/dist/src/interfaces/ITodoService.d.ts +79 -0
- package/dist/src/interfaces/ITodoService.js +6 -0
- package/dist/src/interfaces/ITodoService.js.map +1 -0
- package/dist/src/interfaces/IToolHost.d.ts +91 -0
- package/dist/src/interfaces/IToolHost.js +6 -0
- package/dist/src/interfaces/IToolHost.js.map +1 -0
- package/dist/src/interfaces/IToolKeyStorage.d.ts +62 -0
- package/dist/src/interfaces/IToolKeyStorage.js +6 -0
- package/dist/src/interfaces/IToolKeyStorage.js.map +1 -0
- package/dist/src/interfaces/IToolMessageBus.d.ts +63 -0
- package/dist/src/interfaces/IToolMessageBus.js +6 -0
- package/dist/src/interfaces/IToolMessageBus.js.map +1 -0
- package/dist/src/interfaces/IToolRegistryHost.d.ts +43 -0
- package/dist/src/interfaces/IToolRegistryHost.js +6 -0
- package/dist/src/interfaces/IToolRegistryHost.js.map +1 -0
- package/dist/src/interfaces/IWebSearchService.d.ts +16 -0
- package/dist/src/interfaces/IWebSearchService.js +7 -0
- package/dist/src/interfaces/IWebSearchService.js.map +1 -0
- package/dist/src/interfaces/index.d.ts +33 -0
- package/dist/src/interfaces/index.js +6 -0
- package/dist/src/interfaces/index.js.map +1 -0
- package/dist/src/tools/activate-skill.d.ts +26 -0
- package/dist/src/tools/activate-skill.js +121 -0
- package/dist/src/tools/activate-skill.js.map +1 -0
- package/dist/src/tools/apply-patch.d.ts +65 -0
- package/dist/src/tools/apply-patch.js +528 -0
- package/dist/src/tools/apply-patch.js.map +1 -0
- package/dist/src/tools/ast-edit/ast-config.d.ts +67 -0
- package/dist/src/tools/ast-edit/ast-config.js +72 -0
- package/dist/src/tools/ast-edit/ast-config.js.map +1 -0
- package/dist/src/tools/ast-edit/ast-edit-invocation.d.ts +40 -0
- package/dist/src/tools/ast-edit/ast-edit-invocation.js +410 -0
- package/dist/src/tools/ast-edit/ast-edit-invocation.js.map +1 -0
- package/dist/src/tools/ast-edit/ast-query-extractor.d.ts +21 -0
- package/dist/src/tools/ast-edit/ast-query-extractor.js +178 -0
- package/dist/src/tools/ast-edit/ast-query-extractor.js.map +1 -0
- package/dist/src/tools/ast-edit/ast-read-file-invocation.d.ts +26 -0
- package/dist/src/tools/ast-edit/ast-read-file-invocation.js +149 -0
- package/dist/src/tools/ast-edit/ast-read-file-invocation.js.map +1 -0
- package/dist/src/tools/ast-edit/constants.d.ts +30 -0
- package/dist/src/tools/ast-edit/constants.js +36 -0
- package/dist/src/tools/ast-edit/constants.js.map +1 -0
- package/dist/src/tools/ast-edit/context-collector.d.ts +25 -0
- package/dist/src/tools/ast-edit/context-collector.js +115 -0
- package/dist/src/tools/ast-edit/context-collector.js.map +1 -0
- package/dist/src/tools/ast-edit/context-optimizer.d.ts +29 -0
- package/dist/src/tools/ast-edit/context-optimizer.js +86 -0
- package/dist/src/tools/ast-edit/context-optimizer.js.map +1 -0
- package/dist/src/tools/ast-edit/cross-file-analyzer.d.ts +41 -0
- package/dist/src/tools/ast-edit/cross-file-analyzer.js +294 -0
- package/dist/src/tools/ast-edit/cross-file-analyzer.js.map +1 -0
- package/dist/src/tools/ast-edit/edit-calculator.d.ts +71 -0
- package/dist/src/tools/ast-edit/edit-calculator.js +249 -0
- package/dist/src/tools/ast-edit/edit-calculator.js.map +1 -0
- package/dist/src/tools/ast-edit/edit-helpers.d.ts +22 -0
- package/dist/src/tools/ast-edit/edit-helpers.js +36 -0
- package/dist/src/tools/ast-edit/edit-helpers.js.map +1 -0
- package/dist/src/tools/ast-edit/language-analysis.d.ts +19 -0
- package/dist/src/tools/ast-edit/language-analysis.js +123 -0
- package/dist/src/tools/ast-edit/language-analysis.js.map +1 -0
- package/dist/src/tools/ast-edit/local-context-analyzer.d.ts +84 -0
- package/dist/src/tools/ast-edit/local-context-analyzer.js +267 -0
- package/dist/src/tools/ast-edit/local-context-analyzer.js.map +1 -0
- package/dist/src/tools/ast-edit/repository-context-provider.d.ts +22 -0
- package/dist/src/tools/ast-edit/repository-context-provider.js +139 -0
- package/dist/src/tools/ast-edit/repository-context-provider.js.map +1 -0
- package/dist/src/tools/ast-edit/types.d.ts +155 -0
- package/dist/src/tools/ast-edit/types.js +7 -0
- package/dist/src/tools/ast-edit/types.js.map +1 -0
- package/dist/src/tools/ast-edit/workspace-context-provider.d.ts +22 -0
- package/dist/src/tools/ast-edit/workspace-context-provider.js +39 -0
- package/dist/src/tools/ast-edit/workspace-context-provider.js.map +1 -0
- package/dist/src/tools/ast-edit.d.ts +43 -0
- package/dist/src/tools/ast-edit.js +183 -0
- package/dist/src/tools/ast-edit.js.map +1 -0
- package/dist/src/tools/ast-grep.d.ts +22 -0
- package/dist/src/tools/ast-grep.js +291 -0
- package/dist/src/tools/ast-grep.js.map +1 -0
- package/dist/src/tools/check-async-tasks.d.ts +46 -0
- package/dist/src/tools/check-async-tasks.js +241 -0
- package/dist/src/tools/check-async-tasks.js.map +1 -0
- package/dist/src/tools/codesearch.d.ts +25 -0
- package/dist/src/tools/codesearch.js +153 -0
- package/dist/src/tools/codesearch.js.map +1 -0
- package/dist/src/tools/delete_line_range.d.ts +41 -0
- package/dist/src/tools/delete_line_range.js +238 -0
- package/dist/src/tools/delete_line_range.js.map +1 -0
- package/dist/src/tools/direct-web-fetch.d.ts +22 -0
- package/dist/src/tools/direct-web-fetch.js +215 -0
- package/dist/src/tools/direct-web-fetch.js.map +1 -0
- package/dist/src/tools/edit-utils.d.ts +53 -0
- package/dist/src/tools/edit-utils.js +250 -0
- package/dist/src/tools/edit-utils.js.map +1 -0
- package/dist/src/tools/edit.d.ts +70 -0
- package/dist/src/tools/edit.js +816 -0
- package/dist/src/tools/edit.js.map +1 -0
- package/dist/src/tools/exa-web-search.d.ts +27 -0
- package/dist/src/tools/exa-web-search.js +153 -0
- package/dist/src/tools/exa-web-search.js.map +1 -0
- package/dist/src/tools/glob.d.ts +55 -0
- package/dist/src/tools/glob.js +284 -0
- package/dist/src/tools/glob.js.map +1 -0
- package/dist/src/tools/google-web-fetch.d.ts +34 -0
- package/dist/src/tools/google-web-fetch.js +417 -0
- package/dist/src/tools/google-web-fetch.js.map +1 -0
- package/dist/src/tools/google-web-search-invocation.d.ts +53 -0
- package/dist/src/tools/google-web-search-invocation.js +180 -0
- package/dist/src/tools/google-web-search-invocation.js.map +1 -0
- package/dist/src/tools/google-web-search.d.ts +16 -0
- package/dist/src/tools/google-web-search.js +34 -0
- package/dist/src/tools/google-web-search.js.map +1 -0
- package/dist/src/tools/grep.d.ts +56 -0
- package/dist/src/tools/grep.js +883 -0
- package/dist/src/tools/grep.js.map +1 -0
- package/dist/src/tools/insert_at_line.d.ts +41 -0
- package/dist/src/tools/insert_at_line.js +287 -0
- package/dist/src/tools/insert_at_line.js.map +1 -0
- package/dist/src/tools/list-subagents.d.ts +31 -0
- package/dist/src/tools/list-subagents.js +122 -0
- package/dist/src/tools/list-subagents.js.map +1 -0
- package/dist/src/tools/ls.d.ts +71 -0
- package/dist/src/tools/ls.js +238 -0
- package/dist/src/tools/ls.js.map +1 -0
- package/dist/src/tools/memoryTool.d.ts +66 -0
- package/dist/src/tools/memoryTool.js +435 -0
- package/dist/src/tools/memoryTool.js.map +1 -0
- package/dist/src/tools/modifiable-tool.d.ts +37 -0
- package/dist/src/tools/modifiable-tool.js +120 -0
- package/dist/src/tools/modifiable-tool.js.map +1 -0
- package/dist/src/tools/read-file.d.ts +49 -0
- package/dist/src/tools/read-file.js +279 -0
- package/dist/src/tools/read-file.js.map +1 -0
- package/dist/src/tools/read-many-files.d.ts +60 -0
- package/dist/src/tools/read-many-files.js +529 -0
- package/dist/src/tools/read-many-files.js.map +1 -0
- package/dist/src/tools/read_line_range.d.ts +47 -0
- package/dist/src/tools/read_line_range.js +248 -0
- package/dist/src/tools/read_line_range.js.map +1 -0
- package/dist/src/tools/ripGrep.d.ts +41 -0
- package/dist/src/tools/ripGrep.js +395 -0
- package/dist/src/tools/ripGrep.js.map +1 -0
- package/dist/src/tools/shell.d.ts +60 -0
- package/dist/src/tools/shell.js +735 -0
- package/dist/src/tools/shell.js.map +1 -0
- package/dist/src/tools/structural-analysis.d.ts +27 -0
- package/dist/src/tools/structural-analysis.js +1089 -0
- package/dist/src/tools/structural-analysis.js.map +1 -0
- package/dist/src/tools/stubs.d.ts +10 -0
- package/dist/src/tools/stubs.js +6 -0
- package/dist/src/tools/stubs.js.map +1 -0
- package/dist/src/tools/task.d.ts +41 -0
- package/dist/src/tools/task.js +195 -0
- package/dist/src/tools/task.js.map +1 -0
- package/dist/src/tools/todo-events.d.ts +22 -0
- package/dist/src/tools/todo-events.js +24 -0
- package/dist/src/tools/todo-events.js.map +1 -0
- package/dist/src/tools/todo-pause.d.ts +29 -0
- package/dist/src/tools/todo-pause.js +172 -0
- package/dist/src/tools/todo-pause.js.map +1 -0
- package/dist/src/tools/todo-read.d.ts +18 -0
- package/dist/src/tools/todo-read.js +98 -0
- package/dist/src/tools/todo-read.js.map +1 -0
- package/dist/src/tools/todo-store.d.ts +35 -0
- package/dist/src/tools/todo-store.js +124 -0
- package/dist/src/tools/todo-store.js.map +1 -0
- package/dist/src/tools/todo-write.d.ts +29 -0
- package/dist/src/tools/todo-write.js +366 -0
- package/dist/src/tools/todo-write.js.map +1 -0
- package/dist/src/tools/tool-registry.d.ts +156 -0
- package/dist/src/tools/tool-registry.js +623 -0
- package/dist/src/tools/tool-registry.js.map +1 -0
- package/dist/src/tools/tools.d.ts +403 -0
- package/dist/src/tools/tools.js +519 -0
- package/dist/src/tools/tools.js.map +1 -0
- package/dist/src/tools/write-file.d.ts +45 -0
- package/dist/src/tools/write-file.js +320 -0
- package/dist/src/tools/write-file.js.map +1 -0
- package/dist/src/types/index.d.ts +17 -0
- package/dist/src/types/index.js +9 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/types/provider-content-types.d.ts +56 -0
- package/dist/src/types/provider-content-types.js +6 -0
- package/dist/src/types/provider-content-types.js.map +1 -0
- package/dist/src/types/todo-schemas.d.ts +263 -0
- package/dist/src/types/todo-schemas.js +32 -0
- package/dist/src/types/todo-schemas.js.map +1 -0
- package/dist/src/types/tool-confirmation-types.d.ts +34 -0
- package/dist/src/types/tool-confirmation-types.js +29 -0
- package/dist/src/types/tool-confirmation-types.js.map +1 -0
- package/dist/src/types/tool-context.d.ts +31 -0
- package/dist/src/types/tool-context.js +6 -0
- package/dist/src/types/tool-context.js.map +1 -0
- package/dist/src/types/tool-error.d.ts +69 -0
- package/dist/src/types/tool-error.js +94 -0
- package/dist/src/types/tool-error.js.map +1 -0
- package/dist/src/types/tool-names.d.ts +57 -0
- package/dist/src/types/tool-names.js +64 -0
- package/dist/src/types/tool-names.js.map +1 -0
- package/dist/src/utils/EmojiFilter.d.ts +134 -0
- package/dist/src/utils/EmojiFilter.js +370 -0
- package/dist/src/utils/EmojiFilter.js.map +1 -0
- package/dist/src/utils/ast-grep-utils.d.ts +42 -0
- package/dist/src/utils/ast-grep-utils.js +140 -0
- package/dist/src/utils/ast-grep-utils.js.map +1 -0
- package/dist/src/utils/debugLogger.d.ts +11 -0
- package/dist/src/utils/debugLogger.js +16 -0
- package/dist/src/utils/debugLogger.js.map +1 -0
- package/dist/src/utils/diffOptions.d.ts +14 -0
- package/dist/src/utils/diffOptions.js +46 -0
- package/dist/src/utils/diffOptions.js.map +1 -0
- package/dist/src/utils/editor.d.ts +39 -0
- package/dist/src/utils/editor.js +212 -0
- package/dist/src/utils/editor.js.map +1 -0
- package/dist/src/utils/ensure-dirs.d.ts +10 -0
- package/dist/src/utils/ensure-dirs.js +16 -0
- package/dist/src/utils/ensure-dirs.js.map +1 -0
- package/dist/src/utils/errors.d.ts +59 -0
- package/dist/src/utils/errors.js +178 -0
- package/dist/src/utils/errors.js.map +1 -0
- package/dist/src/utils/fetch.d.ts +11 -0
- package/dist/src/utils/fetch.js +74 -0
- package/dist/src/utils/fetch.js.map +1 -0
- package/dist/src/utils/fileUtils.d.ts +32 -0
- package/dist/src/utils/fileUtils.js +363 -0
- package/dist/src/utils/fileUtils.js.map +1 -0
- package/dist/src/utils/fuzzy-replacer.d.ts +61 -0
- package/dist/src/utils/fuzzy-replacer.js +492 -0
- package/dist/src/utils/fuzzy-replacer.js.map +1 -0
- package/dist/src/utils/gitLineChanges.d.ts +12 -0
- package/dist/src/utils/gitLineChanges.js +171 -0
- package/dist/src/utils/gitLineChanges.js.map +1 -0
- package/dist/src/utils/gitUtils.d.ts +6 -0
- package/dist/src/utils/gitUtils.js +31 -0
- package/dist/src/utils/gitUtils.js.map +1 -0
- package/dist/src/utils/lsp-diagnostics-helper.d.ts +27 -0
- package/dist/src/utils/lsp-diagnostics-helper.js +62 -0
- package/dist/src/utils/lsp-diagnostics-helper.js.map +1 -0
- package/dist/src/utils/mediaUtils.d.ts +38 -0
- package/dist/src/utils/mediaUtils.js +22 -0
- package/dist/src/utils/mediaUtils.js.map +1 -0
- package/dist/src/utils/pathValidation.d.ts +7 -0
- package/dist/src/utils/pathValidation.js +39 -0
- package/dist/src/utils/pathValidation.js.map +1 -0
- package/dist/src/utils/paths.d.ts +7 -0
- package/dist/src/utils/paths.js +158 -0
- package/dist/src/utils/paths.js.map +1 -0
- package/dist/src/utils/resolveTextSearchTarget.d.ts +17 -0
- package/dist/src/utils/resolveTextSearchTarget.js +45 -0
- package/dist/src/utils/resolveTextSearchTarget.js.map +1 -0
- package/dist/src/utils/retry.d.ts +17 -0
- package/dist/src/utils/retry.js +185 -0
- package/dist/src/utils/retry.js.map +1 -0
- package/dist/src/utils/ripgrepPathResolver.d.ts +23 -0
- package/dist/src/utils/ripgrepPathResolver.js +179 -0
- package/dist/src/utils/ripgrepPathResolver.js.map +1 -0
- package/dist/src/utils/safeJsonStringify.d.ts +9 -0
- package/dist/src/utils/safeJsonStringify.js +21 -0
- package/dist/src/utils/safeJsonStringify.js.map +1 -0
- package/dist/src/utils/schemaValidator.d.ts +13 -0
- package/dist/src/utils/schemaValidator.js +275 -0
- package/dist/src/utils/schemaValidator.js.map +1 -0
- package/dist/src/utils/terminalSerializer.d.ts +33 -0
- package/dist/src/utils/terminalSerializer.js +6 -0
- package/dist/src/utils/terminalSerializer.js.map +1 -0
- package/dist/src/utils/todoContextTracker.d.ts +12 -0
- package/dist/src/utils/todoContextTracker.js +28 -0
- package/dist/src/utils/todoContextTracker.js.map +1 -0
- package/dist/src/utils/todoFormatter.d.ts +24 -0
- package/dist/src/utils/todoFormatter.js +157 -0
- package/dist/src/utils/todoFormatter.js.map +1 -0
- package/dist/src/utils/todoReminderService.d.ts +22 -0
- package/dist/src/utils/todoReminderService.js +43 -0
- package/dist/src/utils/todoReminderService.js.map +1 -0
- package/dist/src/utils/tool-key-storage-facade.d.ts +32 -0
- package/dist/src/utils/tool-key-storage-facade.js +56 -0
- package/dist/src/utils/tool-key-storage-facade.js.map +1 -0
- package/dist/src/utils/tool-key-storage-types.d.ts +56 -0
- package/dist/src/utils/tool-key-storage-types.js +56 -0
- package/dist/src/utils/tool-key-storage-types.js.map +1 -0
- package/dist/src/utils/toolOutputLimiter.d.ts +29 -0
- package/dist/src/utils/toolOutputLimiter.js +107 -0
- package/dist/src/utils/toolOutputLimiter.js.map +1 -0
- package/dist/src/utils/unicodeUtils.d.ts +55 -0
- package/dist/src/utils/unicodeUtils.js +129 -0
- package/dist/src/utils/unicodeUtils.js.map +1 -0
- package/package.json +75 -0
|
@@ -0,0 +1,623 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Kind, BaseTool, BaseToolInvocation, } from './tools.js';
|
|
7
|
+
import { spawn } from 'node:child_process';
|
|
8
|
+
import { StringDecoder } from 'node:string_decoder';
|
|
9
|
+
import { parse } from 'shell-quote';
|
|
10
|
+
import { ToolErrorType } from '../types/tool-error.js';
|
|
11
|
+
import { safeJsonStringify } from '../utils/safeJsonStringify.js';
|
|
12
|
+
import { debugLogger } from '../utils/debugLogger.js';
|
|
13
|
+
import { normalizeToolName } from '../formatters/toolNameUtils.js';
|
|
14
|
+
export const DISCOVERED_TOOL_PREFIX = 'discovered_tool_';
|
|
15
|
+
function isDiscoveredMcpTool(tool) {
|
|
16
|
+
return (typeof tool.serverName === 'string' &&
|
|
17
|
+
tool.serverName !== '');
|
|
18
|
+
}
|
|
19
|
+
export class DiscoveredTool extends BaseTool {
|
|
20
|
+
config;
|
|
21
|
+
description;
|
|
22
|
+
parameterSchema;
|
|
23
|
+
/**
|
|
24
|
+
* @plan PLAN-20260309-MESSAGEBUS-DI-REMEDIATION.P05
|
|
25
|
+
* @requirement REQ-D01-001.2
|
|
26
|
+
* @pseudocode lines 56-72
|
|
27
|
+
*/
|
|
28
|
+
constructor(config, name, description, parameterSchema, messageBus) {
|
|
29
|
+
const discoveryCmd = config.getToolDiscoveryCommand?.() ?? '';
|
|
30
|
+
const callCommand = config.getToolCallCommand?.() ?? '';
|
|
31
|
+
description += `
|
|
32
|
+
|
|
33
|
+
This tool was discovered from the project by executing the command \`${discoveryCmd}\` on project root.
|
|
34
|
+
When called, this tool will execute the command \`${callCommand} ${name}\` on project root.
|
|
35
|
+
Tool discovery and call commands can be configured in project or user settings.
|
|
36
|
+
|
|
37
|
+
When called, the tool call command is executed as a subprocess.
|
|
38
|
+
On success, tool output is returned as a json string.
|
|
39
|
+
Otherwise, the following information is returned:
|
|
40
|
+
|
|
41
|
+
Stdout: Output on stdout stream. Can be \`(empty)\` or partial.
|
|
42
|
+
Stderr: Output on stderr stream. Can be \`(empty)\` or partial.
|
|
43
|
+
Error: Error or \`(none)\` if no error was reported for the subprocess.
|
|
44
|
+
Exit Code: Exit code or \`(none)\` if terminated by signal.
|
|
45
|
+
Signal: Signal number or \`(none)\` if no signal was received.
|
|
46
|
+
`;
|
|
47
|
+
super(name, name, description, Kind.Other, parameterSchema, false, // isOutputMarkdown
|
|
48
|
+
false, // canUpdateOutput
|
|
49
|
+
messageBus);
|
|
50
|
+
this.config = config;
|
|
51
|
+
this.description = description;
|
|
52
|
+
this.parameterSchema = parameterSchema;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* @plan PLAN-20260309-MESSAGEBUS-DI-REMEDIATION.P05
|
|
56
|
+
* @requirement REQ-D01-001.2
|
|
57
|
+
* @pseudocode lines 56-72
|
|
58
|
+
*/
|
|
59
|
+
build(params) {
|
|
60
|
+
return new DiscoveredToolInvocation(this, params, this.requireMessageBus());
|
|
61
|
+
}
|
|
62
|
+
async execute(params, signal, _updateOutput) {
|
|
63
|
+
const callCommand = this.config.getToolCallCommand?.() ?? '';
|
|
64
|
+
const child = spawn(callCommand, [this.name]);
|
|
65
|
+
child.stdin.write(JSON.stringify(params));
|
|
66
|
+
child.stdin.end();
|
|
67
|
+
const { stdout, stderr, error, code, exitSignal } = await this.runChildProcess(child, signal);
|
|
68
|
+
return this.buildChildProcessResult(stdout, stderr, error, code, exitSignal);
|
|
69
|
+
}
|
|
70
|
+
async runChildProcess(child, signal) {
|
|
71
|
+
let stdout = '';
|
|
72
|
+
let stderr = '';
|
|
73
|
+
let error = null;
|
|
74
|
+
let code = null;
|
|
75
|
+
let exitSignal = null;
|
|
76
|
+
const abortHandler = () => {
|
|
77
|
+
if (!child.killed) {
|
|
78
|
+
child.kill('SIGTERM');
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
signal.addEventListener('abort', abortHandler);
|
|
82
|
+
try {
|
|
83
|
+
await new Promise((resolve) => {
|
|
84
|
+
const onStdout = (data) => {
|
|
85
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- BN4-C-P01: preserve defensive runtime boundary guard despite current static types.
|
|
86
|
+
stdout += data?.toString();
|
|
87
|
+
};
|
|
88
|
+
const onStderr = (data) => {
|
|
89
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- BN4-C-P01: preserve defensive runtime boundary guard despite current static types.
|
|
90
|
+
stderr += data?.toString();
|
|
91
|
+
};
|
|
92
|
+
const onError = (err) => {
|
|
93
|
+
error = err;
|
|
94
|
+
};
|
|
95
|
+
const onClose = (_code, _signal) => {
|
|
96
|
+
code = _code;
|
|
97
|
+
exitSignal = _signal;
|
|
98
|
+
cleanup();
|
|
99
|
+
resolve();
|
|
100
|
+
};
|
|
101
|
+
const cleanup = () => {
|
|
102
|
+
child.stdout.removeListener('data', onStdout);
|
|
103
|
+
child.stderr.removeListener('data', onStderr);
|
|
104
|
+
child.removeListener('error', onError);
|
|
105
|
+
child.removeListener('close', onClose);
|
|
106
|
+
if (child.connected) {
|
|
107
|
+
child.disconnect();
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
child.stdout.on('data', onStdout);
|
|
111
|
+
child.stderr.on('data', onStderr);
|
|
112
|
+
child.on('error', onError);
|
|
113
|
+
child.on('close', onClose);
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
finally {
|
|
117
|
+
signal.removeEventListener('abort', abortHandler);
|
|
118
|
+
}
|
|
119
|
+
return { stdout, stderr, error, code, exitSignal };
|
|
120
|
+
}
|
|
121
|
+
buildChildProcessResult(stdout, stderr, error, code, exitSignal) {
|
|
122
|
+
/* eslint-disable @typescript-eslint/no-unnecessary-condition -- BN4-C-P01: preserve defensive runtime boundary guard despite current static types. */
|
|
123
|
+
if (error !== null ||
|
|
124
|
+
code !== 0 ||
|
|
125
|
+
exitSignal !== null ||
|
|
126
|
+
stderr.length > 0) {
|
|
127
|
+
/* eslint-enable @typescript-eslint/no-unnecessary-condition */
|
|
128
|
+
const llmContent = [
|
|
129
|
+
`Stdout: ${stdout.length > 0 ? stdout : '(empty)'}`,
|
|
130
|
+
`Stderr: ${stderr.length > 0 ? stderr : '(empty)'}`,
|
|
131
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- BN4-C-P01: preserve defensive runtime boundary guard despite current static types.
|
|
132
|
+
`Error: ${error ?? '(none)'}`,
|
|
133
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- BN4-C-P01: preserve defensive runtime boundary guard despite current static types.
|
|
134
|
+
`Exit Code: ${code ?? '(none)'}`,
|
|
135
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- BN4-C-P01: preserve defensive runtime boundary guard despite current static types.
|
|
136
|
+
`Signal: ${exitSignal ?? '(none)'}`,
|
|
137
|
+
].join('\n');
|
|
138
|
+
return {
|
|
139
|
+
llmContent,
|
|
140
|
+
returnDisplay: llmContent,
|
|
141
|
+
error: {
|
|
142
|
+
message: llmContent,
|
|
143
|
+
type: ToolErrorType.DISCOVERED_TOOL_EXECUTION_ERROR,
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
llmContent: stdout,
|
|
149
|
+
returnDisplay: stdout,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
class DiscoveredToolInvocation extends BaseToolInvocation {
|
|
154
|
+
tool;
|
|
155
|
+
/**
|
|
156
|
+
* @plan PLAN-20260309-MESSAGEBUS-DI-REMEDIATION.P05
|
|
157
|
+
* @requirement REQ-D01-001.2
|
|
158
|
+
* @pseudocode lines 56-72
|
|
159
|
+
*/
|
|
160
|
+
constructor(tool, params, messageBus) {
|
|
161
|
+
super(params, messageBus);
|
|
162
|
+
this.tool = tool;
|
|
163
|
+
}
|
|
164
|
+
getDescription() {
|
|
165
|
+
return safeJsonStringify(this.params);
|
|
166
|
+
}
|
|
167
|
+
async execute(signal, updateOutput) {
|
|
168
|
+
return this.tool.execute(this.params, signal, updateOutput);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
export class ToolRegistry {
|
|
172
|
+
tools = new Map();
|
|
173
|
+
config;
|
|
174
|
+
logger = debugLogger;
|
|
175
|
+
discoveryLock = null;
|
|
176
|
+
messageBus;
|
|
177
|
+
/**
|
|
178
|
+
* @plan PLAN-20260309-MESSAGEBUS-DI-REMEDIATION.P11
|
|
179
|
+
* @requirement REQ-D01-002
|
|
180
|
+
* @requirement REQ-D01-003
|
|
181
|
+
* @pseudocode lines 122-133
|
|
182
|
+
*/
|
|
183
|
+
constructor(config, messageBus) {
|
|
184
|
+
this.config = config;
|
|
185
|
+
this.messageBus = messageBus;
|
|
186
|
+
}
|
|
187
|
+
getToolGovernance() {
|
|
188
|
+
const rawEphemerals = typeof this.config.getEphemeralSettings === 'function'
|
|
189
|
+
? this.config.getEphemeralSettings()
|
|
190
|
+
: undefined;
|
|
191
|
+
const ephemerals =
|
|
192
|
+
// eslint-disable-next-line sonarjs/expression-complexity -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
|
|
193
|
+
rawEphemerals !== null &&
|
|
194
|
+
rawEphemerals !== undefined &&
|
|
195
|
+
rawEphemerals !== false &&
|
|
196
|
+
rawEphemerals !== 0 &&
|
|
197
|
+
rawEphemerals !== ''
|
|
198
|
+
? rawEphemerals
|
|
199
|
+
: {};
|
|
200
|
+
const allowedRaw = Array.isArray(ephemerals['tools.allowed'])
|
|
201
|
+
? ephemerals['tools.allowed']
|
|
202
|
+
: [];
|
|
203
|
+
const disabledRaw = Array.isArray(ephemerals['tools.disabled'])
|
|
204
|
+
? ephemerals['tools.disabled']
|
|
205
|
+
: // eslint-disable-next-line sonarjs/no-nested-conditional -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
|
|
206
|
+
Array.isArray(ephemerals['disabled-tools'])
|
|
207
|
+
? ephemerals['disabled-tools']
|
|
208
|
+
: [];
|
|
209
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- BN4-C-P01: preserve defensive runtime boundary guard despite current static types.
|
|
210
|
+
const excludedRaw = this.config.getExcludeTools?.() ?? [];
|
|
211
|
+
return {
|
|
212
|
+
allowed: new Set(
|
|
213
|
+
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- intentional falsy coalescing: empty string normalized name should fall through to original name
|
|
214
|
+
allowedRaw.map((name) => normalizeToolName(name) || name)),
|
|
215
|
+
disabled: new Set(
|
|
216
|
+
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- intentional falsy coalescing: empty string normalized name should fall through to original name
|
|
217
|
+
disabledRaw.map((name) => normalizeToolName(name) || name)),
|
|
218
|
+
excluded: new Set(
|
|
219
|
+
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- intentional falsy coalescing: empty string normalized name should fall through to original name
|
|
220
|
+
excludedRaw.map((name) => normalizeToolName(name) || name)),
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
isToolActive(toolName, governance) {
|
|
224
|
+
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- intentional falsy coalescing: empty string normalized name should fall through to original name
|
|
225
|
+
const canonical = normalizeToolName(toolName) || toolName;
|
|
226
|
+
if (governance.excluded.has(canonical)) {
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
if (governance.disabled.has(canonical)) {
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
if (governance.allowed.size > 0 && !governance.allowed.has(canonical)) {
|
|
233
|
+
return false;
|
|
234
|
+
}
|
|
235
|
+
return true;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Registers a tool definition.
|
|
239
|
+
* @param tool - The tool object containing schema and execution logic.
|
|
240
|
+
*/
|
|
241
|
+
registerTool(tool) {
|
|
242
|
+
this.registerToolIntoMap(tool, this.tools);
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Unregisters a tool definition by name.
|
|
246
|
+
*
|
|
247
|
+
* @param name - The name of the tool to unregister.
|
|
248
|
+
*/
|
|
249
|
+
unregisterTool(name) {
|
|
250
|
+
this.tools.delete(name);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Sorts tools as:
|
|
254
|
+
* 1. Built in tools.
|
|
255
|
+
* 2. Discovered tools.
|
|
256
|
+
* 3. MCP tools ordered by server name.
|
|
257
|
+
*
|
|
258
|
+
* This is a stable sort in that ties preserve existing order.
|
|
259
|
+
*/
|
|
260
|
+
sortTools() {
|
|
261
|
+
const getPriority = (tool) => {
|
|
262
|
+
if (isDiscoveredMcpTool(tool))
|
|
263
|
+
return 2;
|
|
264
|
+
if (tool instanceof DiscoveredTool)
|
|
265
|
+
return 1;
|
|
266
|
+
return 0; // Built-in
|
|
267
|
+
};
|
|
268
|
+
this.tools = new Map(Array.from(this.tools.entries()).sort((a, b) => {
|
|
269
|
+
const toolA = a[1];
|
|
270
|
+
const toolB = b[1];
|
|
271
|
+
const priorityA = getPriority(toolA);
|
|
272
|
+
const priorityB = getPriority(toolB);
|
|
273
|
+
if (priorityA !== priorityB) {
|
|
274
|
+
return priorityA - priorityB;
|
|
275
|
+
}
|
|
276
|
+
if (priorityA === 2) {
|
|
277
|
+
const serverA = isDiscoveredMcpTool(toolA) ? toolA.serverName : '';
|
|
278
|
+
const serverB = isDiscoveredMcpTool(toolB) ? toolB.serverName : '';
|
|
279
|
+
return serverA.localeCompare(serverB);
|
|
280
|
+
}
|
|
281
|
+
return 0;
|
|
282
|
+
}));
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Builds a new tool map with only non-discovered tools (core tools).
|
|
286
|
+
* This is used for atomic updates to avoid race conditions.
|
|
287
|
+
*/
|
|
288
|
+
buildCoreToolsMap() {
|
|
289
|
+
const coreTools = new Map();
|
|
290
|
+
for (const [name, tool] of this.tools.entries()) {
|
|
291
|
+
if (!(tool instanceof DiscoveredTool || isDiscoveredMcpTool(tool))) {
|
|
292
|
+
coreTools.set(name, tool);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
return coreTools;
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Removes all tools from a specific MCP server.
|
|
299
|
+
* @param serverName The name of the server to remove tools from.
|
|
300
|
+
*/
|
|
301
|
+
removeMcpToolsByServer(serverName) {
|
|
302
|
+
for (const [name, tool] of this.tools.entries()) {
|
|
303
|
+
if (isDiscoveredMcpTool(tool) && tool.serverName === serverName) {
|
|
304
|
+
this.tools.delete(name);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Discovers tools from project (if available and configured).
|
|
310
|
+
* Can be called multiple times to update discovered tools.
|
|
311
|
+
* This will ONLY discover tools from the command line, NOT from MCP servers.
|
|
312
|
+
* Uses truly atomic updates to prevent race conditions.
|
|
313
|
+
*/
|
|
314
|
+
async discoverAllTools() {
|
|
315
|
+
await this.withDiscoveryLock(async () => {
|
|
316
|
+
const newTools = this.buildCoreToolsMap();
|
|
317
|
+
this.config.getPromptRegistry?.()?.clear();
|
|
318
|
+
await this.discoverAndRegisterToolsFromCommand(newTools);
|
|
319
|
+
this.tools = newTools;
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
async discoverAndRegisterToolsFromCommand(targetMap) {
|
|
323
|
+
const discoveryCmd = this.config.getToolDiscoveryCommand?.();
|
|
324
|
+
if (!discoveryCmd) {
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
try {
|
|
328
|
+
const stdout = await this.runDiscoveryCommand(discoveryCmd);
|
|
329
|
+
const functions = this.parseDiscoveredFunctions(stdout);
|
|
330
|
+
this.registerDiscoveredFunctions(functions, targetMap);
|
|
331
|
+
}
|
|
332
|
+
catch (e) {
|
|
333
|
+
this.logger.error(() => `Tool discovery command "${discoveryCmd}" failed:`, { error: e });
|
|
334
|
+
throw e;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
async runDiscoveryCommand(discoveryCmd) {
|
|
338
|
+
const cmdParts = parse(discoveryCmd);
|
|
339
|
+
if (cmdParts.length === 0) {
|
|
340
|
+
throw new Error('Tool discovery command is empty or contains only whitespace.');
|
|
341
|
+
}
|
|
342
|
+
const proc = spawn(cmdParts[0], cmdParts.slice(1));
|
|
343
|
+
let stdout = '';
|
|
344
|
+
const stdoutDecoder = new StringDecoder('utf8');
|
|
345
|
+
let stderr = '';
|
|
346
|
+
const stderrDecoder = new StringDecoder('utf8');
|
|
347
|
+
let sizeLimitExceeded = false;
|
|
348
|
+
const MAX_STDOUT_SIZE = 10 * 1024 * 1024; // 10MB limit
|
|
349
|
+
const MAX_STDERR_SIZE = 10 * 1024 * 1024; // 10MB limit
|
|
350
|
+
let stdoutByteLength = 0;
|
|
351
|
+
let stderrByteLength = 0;
|
|
352
|
+
proc.stdout.on('data', (data) => {
|
|
353
|
+
if (sizeLimitExceeded)
|
|
354
|
+
return;
|
|
355
|
+
if (stdoutByteLength + data.length > MAX_STDOUT_SIZE) {
|
|
356
|
+
sizeLimitExceeded = true;
|
|
357
|
+
proc.kill();
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
stdoutByteLength += data.length;
|
|
361
|
+
stdout += stdoutDecoder.write(data);
|
|
362
|
+
});
|
|
363
|
+
proc.stderr.on('data', (data) => {
|
|
364
|
+
if (sizeLimitExceeded)
|
|
365
|
+
return;
|
|
366
|
+
if (stderrByteLength + data.length > MAX_STDERR_SIZE) {
|
|
367
|
+
sizeLimitExceeded = true;
|
|
368
|
+
proc.kill();
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
stderrByteLength += data.length;
|
|
372
|
+
stderr += stderrDecoder.write(data);
|
|
373
|
+
});
|
|
374
|
+
await new Promise((resolve, reject) => {
|
|
375
|
+
proc.on('error', reject);
|
|
376
|
+
proc.on('close', (code) => {
|
|
377
|
+
stdout += stdoutDecoder.end();
|
|
378
|
+
stderr += stderrDecoder.end();
|
|
379
|
+
if (sizeLimitExceeded) {
|
|
380
|
+
reject(new Error(`Tool discovery command output exceeded size limit of ${MAX_STDOUT_SIZE} bytes.`));
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
if (code !== 0) {
|
|
384
|
+
this.logger.error(() => `Command failed with code ${code}`);
|
|
385
|
+
this.logger.error(() => stderr);
|
|
386
|
+
reject(new Error(`Tool discovery command failed with exit code ${code}`));
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
resolve();
|
|
390
|
+
});
|
|
391
|
+
});
|
|
392
|
+
return stdout;
|
|
393
|
+
}
|
|
394
|
+
parseDiscoveredFunctions(stdout) {
|
|
395
|
+
const functions = [];
|
|
396
|
+
const discoveredItems = JSON.parse(stdout.trim());
|
|
397
|
+
if (discoveredItems === null ||
|
|
398
|
+
discoveredItems === undefined ||
|
|
399
|
+
!Array.isArray(discoveredItems)) {
|
|
400
|
+
throw new Error('Tool discovery command did not return a JSON array of tools.');
|
|
401
|
+
}
|
|
402
|
+
for (const tool of discoveredItems) {
|
|
403
|
+
if (tool !== null && typeof tool === 'object') {
|
|
404
|
+
// eslint-disable-next-line sonarjs/nested-control-flow -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
|
|
405
|
+
if (Array.isArray(tool['function_declarations'])) {
|
|
406
|
+
functions.push(...tool['function_declarations']);
|
|
407
|
+
}
|
|
408
|
+
else if (Array.isArray(tool['functionDeclarations'])) {
|
|
409
|
+
functions.push(...tool['functionDeclarations']);
|
|
410
|
+
}
|
|
411
|
+
else if (typeof tool['name'] === 'string' && tool['name'] !== '') {
|
|
412
|
+
functions.push(tool);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
return functions;
|
|
417
|
+
}
|
|
418
|
+
registerDiscoveredFunctions(functions, targetMap) {
|
|
419
|
+
for (const func of functions) {
|
|
420
|
+
if (func.name === undefined || func.name === '') {
|
|
421
|
+
this.logger.warn(() => 'Discovered a tool with no name. Skipping.');
|
|
422
|
+
continue;
|
|
423
|
+
}
|
|
424
|
+
const parameters =
|
|
425
|
+
// eslint-disable-next-line sonarjs/expression-complexity -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
|
|
426
|
+
func.parametersJsonSchema !== undefined &&
|
|
427
|
+
func.parametersJsonSchema !== null &&
|
|
428
|
+
typeof func.parametersJsonSchema === 'object' &&
|
|
429
|
+
!Array.isArray(func.parametersJsonSchema)
|
|
430
|
+
? func.parametersJsonSchema
|
|
431
|
+
: {};
|
|
432
|
+
this.registerToolIntoMap(new DiscoveredTool(this.config, `discovered_tool_${func.name}`, func.description ?? '', parameters, this.messageBus), targetMap);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Gets schema transformation config based on current settings.
|
|
437
|
+
* Used to conditionally hide tool parameters that are disabled by settings.
|
|
438
|
+
*/
|
|
439
|
+
getSchemaTransforms() {
|
|
440
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- BN4-C-P01: preserve defensive runtime boundary guard despite current static types.
|
|
441
|
+
const settingsService = this.config.getSettingsService?.();
|
|
442
|
+
// Global setting from /settings (subagents.asyncEnabled)
|
|
443
|
+
let globalAsyncEnabled = true;
|
|
444
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- BN4-C-P01: preserve defensive runtime boundary guard despite current static types.
|
|
445
|
+
if (settingsService !== undefined) {
|
|
446
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- BN4-C-P01: preserve defensive runtime boundary guard despite current static types.
|
|
447
|
+
const globalSettings = settingsService.getAllGlobalSettings?.();
|
|
448
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- BN4-C-P01: preserve defensive runtime boundary guard despite current static types.
|
|
449
|
+
const subagentsSettings = globalSettings?.['subagents'];
|
|
450
|
+
globalAsyncEnabled = subagentsSettings?.asyncEnabled !== false;
|
|
451
|
+
}
|
|
452
|
+
// Profile setting from /set (subagents.async.enabled)
|
|
453
|
+
const profileAsyncEnabled =
|
|
454
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- BN4-C-P01: preserve defensive runtime boundary guard despite current static types.
|
|
455
|
+
settingsService?.get?.('subagents.async.enabled') !== false;
|
|
456
|
+
return {
|
|
457
|
+
hideTaskAsync: globalAsyncEnabled !== true || profileAsyncEnabled !== true,
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* Applies schema transformations based on settings.
|
|
462
|
+
* Removes parameters that are disabled by user/profile settings.
|
|
463
|
+
*/
|
|
464
|
+
applySchemaTransforms(schema, transforms) {
|
|
465
|
+
// Hide 'async' parameter from task tool when async subagents are disabled
|
|
466
|
+
if (schema.name === 'task' && transforms.hideTaskAsync) {
|
|
467
|
+
const newSchema = structuredClone(schema);
|
|
468
|
+
const jsonSchema = newSchema.parametersJsonSchema;
|
|
469
|
+
if (jsonSchema?.properties) {
|
|
470
|
+
delete jsonSchema.properties.async;
|
|
471
|
+
}
|
|
472
|
+
return newSchema;
|
|
473
|
+
}
|
|
474
|
+
return schema;
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* Retrieves the list of tool schemas (FunctionDeclaration array).
|
|
478
|
+
* Extracts the declarations from the ToolListUnion structure.
|
|
479
|
+
* Includes discovered (vs registered) tools if configured.
|
|
480
|
+
* Filters out disabled tools based on ephemeral settings.
|
|
481
|
+
* Applies schema transformations to hide disabled parameters.
|
|
482
|
+
* @returns An array of FunctionDeclarations.
|
|
483
|
+
*/
|
|
484
|
+
getFunctionDeclarations() {
|
|
485
|
+
const governance = this.getToolGovernance();
|
|
486
|
+
const transforms = this.getSchemaTransforms();
|
|
487
|
+
const declarations = [];
|
|
488
|
+
this.tools.forEach((tool) => {
|
|
489
|
+
if (this.isToolActive(tool.name, governance)) {
|
|
490
|
+
declarations.push(this.applySchemaTransforms(tool.schema, transforms));
|
|
491
|
+
}
|
|
492
|
+
});
|
|
493
|
+
return declarations;
|
|
494
|
+
}
|
|
495
|
+
/**
|
|
496
|
+
* Retrieves a filtered list of tool schemas based on a list of tool names.
|
|
497
|
+
* Applies schema transformations to hide disabled parameters.
|
|
498
|
+
* @param toolNames - An array of tool names to include.
|
|
499
|
+
* @returns An array of FunctionDeclarations for the specified tools.
|
|
500
|
+
*/
|
|
501
|
+
getFunctionDeclarationsFiltered(toolNames) {
|
|
502
|
+
const governance = this.getToolGovernance();
|
|
503
|
+
const transforms = this.getSchemaTransforms();
|
|
504
|
+
const declarations = [];
|
|
505
|
+
for (const name of toolNames) {
|
|
506
|
+
const tool = this.tools.get(name);
|
|
507
|
+
if (tool && this.isToolActive(tool.name, governance)) {
|
|
508
|
+
declarations.push(this.applySchemaTransforms(tool.schema, transforms));
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
return declarations;
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* Returns an array of all registered and discovered tool names.
|
|
515
|
+
*/
|
|
516
|
+
getAllToolNames() {
|
|
517
|
+
return Array.from(this.tools.keys());
|
|
518
|
+
}
|
|
519
|
+
/**
|
|
520
|
+
* Returns an array of all registered and discovered tool instances.
|
|
521
|
+
*/
|
|
522
|
+
getAllTools() {
|
|
523
|
+
const tools = Array.from(this.tools.values()).sort((a, b) => a.displayName.localeCompare(b.displayName));
|
|
524
|
+
return tools;
|
|
525
|
+
}
|
|
526
|
+
/**
|
|
527
|
+
* Returns an array of enabled tool instances (excludes disabled tools).
|
|
528
|
+
*/
|
|
529
|
+
getEnabledTools() {
|
|
530
|
+
const governance = this.getToolGovernance();
|
|
531
|
+
return Array.from(this.tools.values())
|
|
532
|
+
.filter((tool) => this.isToolActive(tool.name, governance))
|
|
533
|
+
.sort((a, b) => a.displayName.localeCompare(b.displayName));
|
|
534
|
+
}
|
|
535
|
+
/**
|
|
536
|
+
* Returns an array of tools registered from a specific MCP server.
|
|
537
|
+
*/
|
|
538
|
+
getToolsByServer(serverName) {
|
|
539
|
+
const serverTools = [];
|
|
540
|
+
for (const tool of this.tools.values()) {
|
|
541
|
+
if (isDiscoveredMcpTool(tool) && tool.serverName === serverName) {
|
|
542
|
+
serverTools.push(tool);
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
return serverTools.sort((a, b) => a.name.localeCompare(b.name));
|
|
546
|
+
}
|
|
547
|
+
/**
|
|
548
|
+
* Get the definition of a specific tool.
|
|
549
|
+
* @param name The name of the tool to retrieve
|
|
550
|
+
* @param context Optional context to inject into the tool instance
|
|
551
|
+
*/
|
|
552
|
+
getTool(name, context) {
|
|
553
|
+
// Try original name first (most common case)
|
|
554
|
+
let tool = this.tools.get(name);
|
|
555
|
+
// If not found, try normalized name for fuzzy matching
|
|
556
|
+
if (!tool) {
|
|
557
|
+
const normalizedName = normalizeToolName(name);
|
|
558
|
+
if (normalizedName && normalizedName !== name) {
|
|
559
|
+
tool = this.tools.get(normalizedName);
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
// If still not found and the name includes '__', try fallback lookup by fully qualified name
|
|
563
|
+
if (!tool && name.includes('__')) {
|
|
564
|
+
for (const t of this.tools.values()) {
|
|
565
|
+
if (isDiscoveredMcpTool(t) &&
|
|
566
|
+
typeof t.getFullyQualifiedName === 'function' &&
|
|
567
|
+
t.getFullyQualifiedName() === name) {
|
|
568
|
+
tool = t;
|
|
569
|
+
break;
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
if (!tool) {
|
|
574
|
+
const missingTool = void 0;
|
|
575
|
+
return missingTool;
|
|
576
|
+
}
|
|
577
|
+
const governance = this.getToolGovernance();
|
|
578
|
+
if (!this.isToolActive(tool.name, governance)) {
|
|
579
|
+
const inactiveTool = void 0;
|
|
580
|
+
return inactiveTool;
|
|
581
|
+
}
|
|
582
|
+
// Inject context into tool instance
|
|
583
|
+
if (context && 'context' in tool) {
|
|
584
|
+
tool.context = context;
|
|
585
|
+
}
|
|
586
|
+
return tool;
|
|
587
|
+
}
|
|
588
|
+
/**
|
|
589
|
+
* @plan PLAN-20260309-MESSAGEBUS-DI-REMEDIATION.P05
|
|
590
|
+
* @requirement REQ-D01-001.2
|
|
591
|
+
* @pseudocode lines 56-72
|
|
592
|
+
*/
|
|
593
|
+
registerToolIntoMap(tool, targetMap) {
|
|
594
|
+
// Normalize the tool name for consistent storage and lookup
|
|
595
|
+
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- intentional falsy coalescing: empty string tool name should fall through to original name
|
|
596
|
+
const normalizedName = normalizeToolName(tool.name) || tool.name;
|
|
597
|
+
if (targetMap.has(normalizedName) && !isDiscoveredMcpTool(tool)) {
|
|
598
|
+
// For non-MCP tools, log warning and overwrite
|
|
599
|
+
// For MCP tools, we assume they already have unique names from generateMcpToolName(serverName, toolName)
|
|
600
|
+
// so we simply overwrite (this should not happen in normal operation)
|
|
601
|
+
this.logger.warn(() => `Tool with name "${tool.name}" (normalized: "${normalizedName}") is already registered. Overwriting.`);
|
|
602
|
+
}
|
|
603
|
+
// Store the tool with the normalized name for consistent lookup
|
|
604
|
+
targetMap.set(normalizedName, tool);
|
|
605
|
+
}
|
|
606
|
+
async withDiscoveryLock(task) {
|
|
607
|
+
while (this.discoveryLock) {
|
|
608
|
+
await this.discoveryLock;
|
|
609
|
+
}
|
|
610
|
+
let release = () => { };
|
|
611
|
+
this.discoveryLock = new Promise((resolve) => {
|
|
612
|
+
release = () => resolve();
|
|
613
|
+
});
|
|
614
|
+
try {
|
|
615
|
+
return await task();
|
|
616
|
+
}
|
|
617
|
+
finally {
|
|
618
|
+
release();
|
|
619
|
+
this.discoveryLock = null;
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
//# sourceMappingURL=tool-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../../../src/tools/tool-registry.ts"],"names":[],"mappings":"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"}
|