toolpack-sdk 0.1.0-SNAPSHOT
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 +201 -0
- package/README.md +815 -0
- package/dist/client/base-agent-context.d.ts +16 -0
- package/dist/client/base-agent-context.d.ts.map +1 -0
- package/dist/client/base-agent-context.js +26 -0
- package/dist/client/base-agent-context.js.map +1 -0
- package/dist/client/index.d.ts +142 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +1246 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/query-classifier.d.ts +27 -0
- package/dist/client/query-classifier.d.ts.map +1 -0
- package/dist/client/query-classifier.js +98 -0
- package/dist/client/query-classifier.js.map +1 -0
- package/dist/client/tool-orchestrator.d.ts +42 -0
- package/dist/client/tool-orchestrator.d.ts.map +1 -0
- package/dist/client/tool-orchestrator.js +156 -0
- package/dist/client/tool-orchestrator.js.map +1 -0
- package/dist/errors/index.d.ts +31 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +72 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/client.d.ts +56 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +290 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/index.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +10 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/types.d.ts +31 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +3 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/modes/built-in-modes.d.ts +29 -0
- package/dist/modes/built-in-modes.d.ts.map +1 -0
- package/dist/modes/built-in-modes.js +106 -0
- package/dist/modes/built-in-modes.js.map +1 -0
- package/dist/modes/create-mode.d.ts +59 -0
- package/dist/modes/create-mode.d.ts.map +1 -0
- package/dist/modes/create-mode.js +35 -0
- package/dist/modes/create-mode.js.map +1 -0
- package/dist/modes/index.d.ts +5 -0
- package/dist/modes/index.d.ts.map +1 -0
- package/dist/modes/index.js +13 -0
- package/dist/modes/index.js.map +1 -0
- package/dist/modes/mode-registry.d.ts +50 -0
- package/dist/modes/mode-registry.d.ts.map +1 -0
- package/dist/modes/mode-registry.js +127 -0
- package/dist/modes/mode-registry.js.map +1 -0
- package/dist/modes/mode-types.d.ts +82 -0
- package/dist/modes/mode-types.d.ts.map +1 -0
- package/dist/modes/mode-types.js +3 -0
- package/dist/modes/mode-types.js.map +1 -0
- package/dist/providers/anthropic/index.d.ts +38 -0
- package/dist/providers/anthropic/index.d.ts.map +1 -0
- package/dist/providers/anthropic/index.js +390 -0
- package/dist/providers/anthropic/index.js.map +1 -0
- package/dist/providers/base/index.d.ts +54 -0
- package/dist/providers/base/index.d.ts.map +1 -0
- package/dist/providers/base/index.js +56 -0
- package/dist/providers/base/index.js.map +1 -0
- package/dist/providers/config.d.ts +58 -0
- package/dist/providers/config.d.ts.map +1 -0
- package/dist/providers/config.js +106 -0
- package/dist/providers/config.js.map +1 -0
- package/dist/providers/gemini/index.d.ts +27 -0
- package/dist/providers/gemini/index.d.ts.map +1 -0
- package/dist/providers/gemini/index.js +391 -0
- package/dist/providers/gemini/index.js.map +1 -0
- package/dist/providers/index.d.ts +11 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +40 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/media-utils.d.ts +21 -0
- package/dist/providers/media-utils.d.ts.map +1 -0
- package/dist/providers/media-utils.js +129 -0
- package/dist/providers/media-utils.js.map +1 -0
- package/dist/providers/ollama/adapter.d.ts +67 -0
- package/dist/providers/ollama/adapter.d.ts.map +1 -0
- package/dist/providers/ollama/adapter.js +371 -0
- package/dist/providers/ollama/adapter.js.map +1 -0
- package/dist/providers/ollama/http.d.ts +9 -0
- package/dist/providers/ollama/http.d.ts.map +1 -0
- package/dist/providers/ollama/http.js +125 -0
- package/dist/providers/ollama/http.js.map +1 -0
- package/dist/providers/ollama/index.d.ts +4 -0
- package/dist/providers/ollama/index.d.ts.map +1 -0
- package/dist/providers/ollama/index.js +11 -0
- package/dist/providers/ollama/index.js.map +1 -0
- package/dist/providers/ollama/provider.d.ts +38 -0
- package/dist/providers/ollama/provider.d.ts.map +1 -0
- package/dist/providers/ollama/provider.js +165 -0
- package/dist/providers/ollama/provider.js.map +1 -0
- package/dist/providers/ollama/slm-healer.d.ts +46 -0
- package/dist/providers/ollama/slm-healer.d.ts.map +1 -0
- package/dist/providers/ollama/slm-healer.js +214 -0
- package/dist/providers/ollama/slm-healer.js.map +1 -0
- package/dist/providers/ollama/slm-registry.d.ts +47 -0
- package/dist/providers/ollama/slm-registry.d.ts.map +1 -0
- package/dist/providers/ollama/slm-registry.js +101 -0
- package/dist/providers/ollama/slm-registry.js.map +1 -0
- package/dist/providers/openai/index.d.ts +22 -0
- package/dist/providers/openai/index.d.ts.map +1 -0
- package/dist/providers/openai/index.js +393 -0
- package/dist/providers/openai/index.js.map +1 -0
- package/dist/providers/provider-logger.d.ts +29 -0
- package/dist/providers/provider-logger.d.ts.map +1 -0
- package/dist/providers/provider-logger.js +86 -0
- package/dist/providers/provider-logger.js.map +1 -0
- package/dist/toolpack.d.ts +142 -0
- package/dist/toolpack.d.ts.map +1 -0
- package/dist/toolpack.js +485 -0
- package/dist/toolpack.js.map +1 -0
- package/dist/tools/cloud-tools/index.d.ts +7 -0
- package/dist/tools/cloud-tools/index.d.ts.map +1 -0
- package/dist/tools/cloud-tools/index.js +34 -0
- package/dist/tools/cloud-tools/index.js.map +1 -0
- package/dist/tools/cloud-tools/providers/netlify.d.ts +9 -0
- package/dist/tools/cloud-tools/providers/netlify.d.ts.map +1 -0
- package/dist/tools/cloud-tools/providers/netlify.js +19 -0
- package/dist/tools/cloud-tools/providers/netlify.js.map +1 -0
- package/dist/tools/cloud-tools/tools/deploy/index.d.ts +3 -0
- package/dist/tools/cloud-tools/tools/deploy/index.d.ts.map +1 -0
- package/dist/tools/cloud-tools/tools/deploy/index.js +38 -0
- package/dist/tools/cloud-tools/tools/deploy/index.js.map +1 -0
- package/dist/tools/cloud-tools/tools/deploy/schema.d.ts +3 -0
- package/dist/tools/cloud-tools/tools/deploy/schema.d.ts.map +1 -0
- package/dist/tools/cloud-tools/tools/deploy/schema.js +22 -0
- package/dist/tools/cloud-tools/tools/deploy/schema.js.map +1 -0
- package/dist/tools/cloud-tools/tools/list/index.d.ts +3 -0
- package/dist/tools/cloud-tools/tools/list/index.d.ts.map +1 -0
- package/dist/tools/cloud-tools/tools/list/index.js +42 -0
- package/dist/tools/cloud-tools/tools/list/index.js.map +1 -0
- package/dist/tools/cloud-tools/tools/list/schema.d.ts +3 -0
- package/dist/tools/cloud-tools/tools/list/schema.d.ts.map +1 -0
- package/dist/tools/cloud-tools/tools/list/schema.js +19 -0
- package/dist/tools/cloud-tools/tools/list/schema.js.map +1 -0
- package/dist/tools/cloud-tools/tools/status/index.d.ts +3 -0
- package/dist/tools/cloud-tools/tools/status/index.d.ts.map +1 -0
- package/dist/tools/cloud-tools/tools/status/index.js +32 -0
- package/dist/tools/cloud-tools/tools/status/index.js.map +1 -0
- package/dist/tools/cloud-tools/tools/status/schema.d.ts +3 -0
- package/dist/tools/cloud-tools/tools/status/schema.d.ts.map +1 -0
- package/dist/tools/cloud-tools/tools/status/schema.js +18 -0
- package/dist/tools/cloud-tools/tools/status/schema.js.map +1 -0
- package/dist/tools/coding-tools/index.d.ts +15 -0
- package/dist/tools/coding-tools/index.d.ts.map +1 -0
- package/dist/tools/coding-tools/index.js +84 -0
- package/dist/tools/coding-tools/index.js.map +1 -0
- package/dist/tools/coding-tools/parsers/babel-parser.d.ts +16 -0
- package/dist/tools/coding-tools/parsers/babel-parser.d.ts.map +1 -0
- package/dist/tools/coding-tools/parsers/babel-parser.js +589 -0
- package/dist/tools/coding-tools/parsers/babel-parser.js.map +1 -0
- package/dist/tools/coding-tools/parsers/file-index.d.ts +16 -0
- package/dist/tools/coding-tools/parsers/file-index.d.ts.map +1 -0
- package/dist/tools/coding-tools/parsers/file-index.js +98 -0
- package/dist/tools/coding-tools/parsers/file-index.js.map +1 -0
- package/dist/tools/coding-tools/parsers/grammar-manager.d.ts +9 -0
- package/dist/tools/coding-tools/parsers/grammar-manager.d.ts.map +1 -0
- package/dist/tools/coding-tools/parsers/grammar-manager.js +112 -0
- package/dist/tools/coding-tools/parsers/grammar-manager.js.map +1 -0
- package/dist/tools/coding-tools/parsers/language-detector.d.ts +3 -0
- package/dist/tools/coding-tools/parsers/language-detector.d.ts.map +1 -0
- package/dist/tools/coding-tools/parsers/language-detector.js +43 -0
- package/dist/tools/coding-tools/parsers/language-detector.js.map +1 -0
- package/dist/tools/coding-tools/parsers/parser-factory.d.ts +10 -0
- package/dist/tools/coding-tools/parsers/parser-factory.d.ts.map +1 -0
- package/dist/tools/coding-tools/parsers/parser-factory.js +37 -0
- package/dist/tools/coding-tools/parsers/parser-factory.js.map +1 -0
- package/dist/tools/coding-tools/parsers/parsing-context.d.ts +15 -0
- package/dist/tools/coding-tools/parsers/parsing-context.d.ts.map +1 -0
- package/dist/tools/coding-tools/parsers/parsing-context.js +118 -0
- package/dist/tools/coding-tools/parsers/parsing-context.js.map +1 -0
- package/dist/tools/coding-tools/parsers/queries/cpp.d.ts +3 -0
- package/dist/tools/coding-tools/parsers/queries/cpp.d.ts.map +1 -0
- package/dist/tools/coding-tools/parsers/queries/cpp.js +33 -0
- package/dist/tools/coding-tools/parsers/queries/cpp.js.map +1 -0
- package/dist/tools/coding-tools/parsers/queries/go.d.ts +3 -0
- package/dist/tools/coding-tools/parsers/queries/go.d.ts.map +1 -0
- package/dist/tools/coding-tools/parsers/queries/go.js +39 -0
- package/dist/tools/coding-tools/parsers/queries/go.js.map +1 -0
- package/dist/tools/coding-tools/parsers/queries/index.d.ts +10 -0
- package/dist/tools/coding-tools/parsers/queries/index.d.ts.map +1 -0
- package/dist/tools/coding-tools/parsers/queries/index.js +9 -0
- package/dist/tools/coding-tools/parsers/queries/index.js.map +1 -0
- package/dist/tools/coding-tools/parsers/queries/java.d.ts +3 -0
- package/dist/tools/coding-tools/parsers/queries/java.d.ts.map +1 -0
- package/dist/tools/coding-tools/parsers/queries/java.js +32 -0
- package/dist/tools/coding-tools/parsers/queries/java.js.map +1 -0
- package/dist/tools/coding-tools/parsers/queries/python.d.ts +3 -0
- package/dist/tools/coding-tools/parsers/queries/python.d.ts.map +1 -0
- package/dist/tools/coding-tools/parsers/queries/python.js +29 -0
- package/dist/tools/coding-tools/parsers/queries/python.js.map +1 -0
- package/dist/tools/coding-tools/parsers/queries/rust.d.ts +3 -0
- package/dist/tools/coding-tools/parsers/queries/rust.d.ts.map +1 -0
- package/dist/tools/coding-tools/parsers/queries/rust.js +33 -0
- package/dist/tools/coding-tools/parsers/queries/rust.js.map +1 -0
- package/dist/tools/coding-tools/parsers/shared.d.ts +7 -0
- package/dist/tools/coding-tools/parsers/shared.d.ts.map +1 -0
- package/dist/tools/coding-tools/parsers/shared.js +10 -0
- package/dist/tools/coding-tools/parsers/shared.js.map +1 -0
- package/dist/tools/coding-tools/parsers/tree-sitter-parser.d.ts +24 -0
- package/dist/tools/coding-tools/parsers/tree-sitter-parser.d.ts.map +1 -0
- package/dist/tools/coding-tools/parsers/tree-sitter-parser.js +210 -0
- package/dist/tools/coding-tools/parsers/tree-sitter-parser.js.map +1 -0
- package/dist/tools/coding-tools/parsers/types.d.ts +81 -0
- package/dist/tools/coding-tools/parsers/types.d.ts.map +1 -0
- package/dist/tools/coding-tools/parsers/types.js +3 -0
- package/dist/tools/coding-tools/parsers/types.js.map +1 -0
- package/dist/tools/coding-tools/tools/extract-function/index.d.ts +3 -0
- package/dist/tools/coding-tools/tools/extract-function/index.d.ts.map +1 -0
- package/dist/tools/coding-tools/tools/extract-function/index.js +64 -0
- package/dist/tools/coding-tools/tools/extract-function/index.js.map +1 -0
- package/dist/tools/coding-tools/tools/extract-function/schema.d.ts +15 -0
- package/dist/tools/coding-tools/tools/extract-function/schema.d.ts.map +1 -0
- package/dist/tools/coding-tools/tools/extract-function/schema.js +38 -0
- package/dist/tools/coding-tools/tools/extract-function/schema.js.map +1 -0
- package/dist/tools/coding-tools/tools/find-references/index.d.ts +3 -0
- package/dist/tools/coding-tools/tools/find-references/index.d.ts.map +1 -0
- package/dist/tools/coding-tools/tools/find-references/index.js +70 -0
- package/dist/tools/coding-tools/tools/find-references/index.js.map +1 -0
- package/dist/tools/coding-tools/tools/find-references/schema.d.ts +7 -0
- package/dist/tools/coding-tools/tools/find-references/schema.d.ts.map +1 -0
- package/dist/tools/coding-tools/tools/find-references/schema.js +26 -0
- package/dist/tools/coding-tools/tools/find-references/schema.js.map +1 -0
- package/dist/tools/coding-tools/tools/find-symbol/index.d.ts +3 -0
- package/dist/tools/coding-tools/tools/find-symbol/index.d.ts.map +1 -0
- package/dist/tools/coding-tools/tools/find-symbol/index.js +85 -0
- package/dist/tools/coding-tools/tools/find-symbol/index.js.map +1 -0
- package/dist/tools/coding-tools/tools/find-symbol/schema.d.ts +7 -0
- package/dist/tools/coding-tools/tools/find-symbol/schema.d.ts.map +1 -0
- package/dist/tools/coding-tools/tools/find-symbol/schema.js +26 -0
- package/dist/tools/coding-tools/tools/find-symbol/schema.js.map +1 -0
- package/dist/tools/coding-tools/tools/get-call-hierarchy/index.d.ts +3 -0
- package/dist/tools/coding-tools/tools/get-call-hierarchy/index.d.ts.map +1 -0
- package/dist/tools/coding-tools/tools/get-call-hierarchy/index.js +55 -0
- package/dist/tools/coding-tools/tools/get-call-hierarchy/index.js.map +1 -0
- package/dist/tools/coding-tools/tools/get-call-hierarchy/schema.d.ts +12 -0
- package/dist/tools/coding-tools/tools/get-call-hierarchy/schema.d.ts.map +1 -0
- package/dist/tools/coding-tools/tools/get-call-hierarchy/schema.js +26 -0
- package/dist/tools/coding-tools/tools/get-call-hierarchy/schema.js.map +1 -0
- package/dist/tools/coding-tools/tools/get-diagnostics/index.d.ts +3 -0
- package/dist/tools/coding-tools/tools/get-diagnostics/index.d.ts.map +1 -0
- package/dist/tools/coding-tools/tools/get-diagnostics/index.js +51 -0
- package/dist/tools/coding-tools/tools/get-diagnostics/index.js.map +1 -0
- package/dist/tools/coding-tools/tools/get-diagnostics/schema.d.ts +10 -0
- package/dist/tools/coding-tools/tools/get-diagnostics/schema.d.ts.map +1 -0
- package/dist/tools/coding-tools/tools/get-diagnostics/schema.js +18 -0
- package/dist/tools/coding-tools/tools/get-diagnostics/schema.js.map +1 -0
- package/dist/tools/coding-tools/tools/get-exports/index.d.ts +3 -0
- package/dist/tools/coding-tools/tools/get-exports/index.d.ts.map +1 -0
- package/dist/tools/coding-tools/tools/get-exports/index.js +51 -0
- package/dist/tools/coding-tools/tools/get-exports/index.js.map +1 -0
- package/dist/tools/coding-tools/tools/get-exports/schema.d.ts +10 -0
- package/dist/tools/coding-tools/tools/get-exports/schema.d.ts.map +1 -0
- package/dist/tools/coding-tools/tools/get-exports/schema.js +18 -0
- package/dist/tools/coding-tools/tools/get-exports/schema.js.map +1 -0
- package/dist/tools/coding-tools/tools/get-imports/index.d.ts +3 -0
- package/dist/tools/coding-tools/tools/get-imports/index.d.ts.map +1 -0
- package/dist/tools/coding-tools/tools/get-imports/index.js +37 -0
- package/dist/tools/coding-tools/tools/get-imports/index.js.map +1 -0
- package/dist/tools/coding-tools/tools/get-imports/schema.d.ts +7 -0
- package/dist/tools/coding-tools/tools/get-imports/schema.d.ts.map +1 -0
- package/dist/tools/coding-tools/tools/get-imports/schema.js +18 -0
- package/dist/tools/coding-tools/tools/get-imports/schema.js.map +1 -0
- package/dist/tools/coding-tools/tools/get-outline/index.d.ts +3 -0
- package/dist/tools/coding-tools/tools/get-outline/index.d.ts.map +1 -0
- package/dist/tools/coding-tools/tools/get-outline/index.js +51 -0
- package/dist/tools/coding-tools/tools/get-outline/index.js.map +1 -0
- package/dist/tools/coding-tools/tools/get-outline/schema.d.ts +10 -0
- package/dist/tools/coding-tools/tools/get-outline/schema.d.ts.map +1 -0
- package/dist/tools/coding-tools/tools/get-outline/schema.js +18 -0
- package/dist/tools/coding-tools/tools/get-outline/schema.js.map +1 -0
- package/dist/tools/coding-tools/tools/get-symbols/index.d.ts +3 -0
- package/dist/tools/coding-tools/tools/get-symbols/index.d.ts.map +1 -0
- package/dist/tools/coding-tools/tools/get-symbols/index.js +38 -0
- package/dist/tools/coding-tools/tools/get-symbols/index.js.map +1 -0
- package/dist/tools/coding-tools/tools/get-symbols/schema.d.ts +7 -0
- package/dist/tools/coding-tools/tools/get-symbols/schema.d.ts.map +1 -0
- package/dist/tools/coding-tools/tools/get-symbols/schema.js +22 -0
- package/dist/tools/coding-tools/tools/get-symbols/schema.js.map +1 -0
- package/dist/tools/coding-tools/tools/go-to-definition/index.d.ts +3 -0
- package/dist/tools/coding-tools/tools/go-to-definition/index.d.ts.map +1 -0
- package/dist/tools/coding-tools/tools/go-to-definition/index.js +100 -0
- package/dist/tools/coding-tools/tools/go-to-definition/index.js.map +1 -0
- package/dist/tools/coding-tools/tools/go-to-definition/schema.d.ts +7 -0
- package/dist/tools/coding-tools/tools/go-to-definition/schema.d.ts.map +1 -0
- package/dist/tools/coding-tools/tools/go-to-definition/schema.js +30 -0
- package/dist/tools/coding-tools/tools/go-to-definition/schema.js.map +1 -0
- package/dist/tools/coding-tools/tools/multi-file-edit/index.d.ts +3 -0
- package/dist/tools/coding-tools/tools/multi-file-edit/index.d.ts.map +1 -0
- package/dist/tools/coding-tools/tools/multi-file-edit/index.js +90 -0
- package/dist/tools/coding-tools/tools/multi-file-edit/index.js.map +1 -0
- package/dist/tools/coding-tools/tools/multi-file-edit/schema.d.ts +7 -0
- package/dist/tools/coding-tools/tools/multi-file-edit/schema.d.ts.map +1 -0
- package/dist/tools/coding-tools/tools/multi-file-edit/schema.js +38 -0
- package/dist/tools/coding-tools/tools/multi-file-edit/schema.js.map +1 -0
- package/dist/tools/coding-tools/tools/refactor-rename/index.d.ts +3 -0
- package/dist/tools/coding-tools/tools/refactor-rename/index.d.ts.map +1 -0
- package/dist/tools/coding-tools/tools/refactor-rename/index.js +144 -0
- package/dist/tools/coding-tools/tools/refactor-rename/index.js.map +1 -0
- package/dist/tools/coding-tools/tools/refactor-rename/schema.d.ts +7 -0
- package/dist/tools/coding-tools/tools/refactor-rename/schema.d.ts.map +1 -0
- package/dist/tools/coding-tools/tools/refactor-rename/schema.js +30 -0
- package/dist/tools/coding-tools/tools/refactor-rename/schema.js.map +1 -0
- package/dist/tools/config-loader.d.ts +11 -0
- package/dist/tools/config-loader.d.ts.map +1 -0
- package/dist/tools/config-loader.js +120 -0
- package/dist/tools/config-loader.js.map +1 -0
- package/dist/tools/create-tool-project.d.ts +14 -0
- package/dist/tools/create-tool-project.d.ts.map +1 -0
- package/dist/tools/create-tool-project.js +46 -0
- package/dist/tools/create-tool-project.js.map +1 -0
- package/dist/tools/db-tools/adapters/base.d.ts +26 -0
- package/dist/tools/db-tools/adapters/base.d.ts.map +1 -0
- package/dist/tools/db-tools/adapters/base.js +11 -0
- package/dist/tools/db-tools/adapters/base.js.map +1 -0
- package/dist/tools/db-tools/adapters/factory.d.ts +5 -0
- package/dist/tools/db-tools/adapters/factory.d.ts.map +1 -0
- package/dist/tools/db-tools/adapters/factory.js +25 -0
- package/dist/tools/db-tools/adapters/factory.js.map +1 -0
- package/dist/tools/db-tools/adapters/mysql.d.ts +9 -0
- package/dist/tools/db-tools/adapters/mysql.d.ts.map +1 -0
- package/dist/tools/db-tools/adapters/mysql.js +65 -0
- package/dist/tools/db-tools/adapters/mysql.js.map +1 -0
- package/dist/tools/db-tools/adapters/postgres.d.ts +14 -0
- package/dist/tools/db-tools/adapters/postgres.d.ts.map +1 -0
- package/dist/tools/db-tools/adapters/postgres.js +74 -0
- package/dist/tools/db-tools/adapters/postgres.js.map +1 -0
- package/dist/tools/db-tools/adapters/sqlite.d.ts +13 -0
- package/dist/tools/db-tools/adapters/sqlite.d.ts.map +1 -0
- package/dist/tools/db-tools/adapters/sqlite.js +117 -0
- package/dist/tools/db-tools/adapters/sqlite.js.map +1 -0
- package/dist/tools/db-tools/index.d.ts +11 -0
- package/dist/tools/db-tools/index.d.ts.map +1 -0
- package/dist/tools/db-tools/index.js +50 -0
- package/dist/tools/db-tools/index.js.map +1 -0
- package/dist/tools/db-tools/tools/count/index.d.ts +3 -0
- package/dist/tools/db-tools/tools/count/index.d.ts.map +1 -0
- package/dist/tools/db-tools/tools/count/index.js +32 -0
- package/dist/tools/db-tools/tools/count/index.js.map +1 -0
- package/dist/tools/db-tools/tools/count/schema.d.ts +3 -0
- package/dist/tools/db-tools/tools/count/schema.d.ts.map +1 -0
- package/dist/tools/db-tools/tools/count/schema.js +22 -0
- package/dist/tools/db-tools/tools/count/schema.js.map +1 -0
- package/dist/tools/db-tools/tools/delete/index.d.ts +3 -0
- package/dist/tools/db-tools/tools/delete/index.d.ts.map +1 -0
- package/dist/tools/db-tools/tools/delete/index.js +27 -0
- package/dist/tools/db-tools/tools/delete/index.js.map +1 -0
- package/dist/tools/db-tools/tools/delete/schema.d.ts +3 -0
- package/dist/tools/db-tools/tools/delete/schema.d.ts.map +1 -0
- package/dist/tools/db-tools/tools/delete/schema.js +22 -0
- package/dist/tools/db-tools/tools/delete/schema.js.map +1 -0
- package/dist/tools/db-tools/tools/insert/index.d.ts +3 -0
- package/dist/tools/db-tools/tools/insert/index.d.ts.map +1 -0
- package/dist/tools/db-tools/tools/insert/index.js +33 -0
- package/dist/tools/db-tools/tools/insert/index.js.map +1 -0
- package/dist/tools/db-tools/tools/insert/schema.d.ts +3 -0
- package/dist/tools/db-tools/tools/insert/schema.d.ts.map +1 -0
- package/dist/tools/db-tools/tools/insert/schema.js +22 -0
- package/dist/tools/db-tools/tools/insert/schema.js.map +1 -0
- package/dist/tools/db-tools/tools/query/index.d.ts +3 -0
- package/dist/tools/db-tools/tools/query/index.d.ts.map +1 -0
- package/dist/tools/db-tools/tools/query/index.js +29 -0
- package/dist/tools/db-tools/tools/query/index.js.map +1 -0
- package/dist/tools/db-tools/tools/query/schema.d.ts +3 -0
- package/dist/tools/db-tools/tools/query/schema.d.ts.map +1 -0
- package/dist/tools/db-tools/tools/query/schema.js +24 -0
- package/dist/tools/db-tools/tools/query/schema.js.map +1 -0
- package/dist/tools/db-tools/tools/schema/index.d.ts +3 -0
- package/dist/tools/db-tools/tools/schema/index.d.ts.map +1 -0
- package/dist/tools/db-tools/tools/schema/index.js +25 -0
- package/dist/tools/db-tools/tools/schema/index.js.map +1 -0
- package/dist/tools/db-tools/tools/schema/schema.d.ts +3 -0
- package/dist/tools/db-tools/tools/schema/schema.d.ts.map +1 -0
- package/dist/tools/db-tools/tools/schema/schema.js +18 -0
- package/dist/tools/db-tools/tools/schema/schema.js.map +1 -0
- package/dist/tools/db-tools/tools/tables/index.d.ts +3 -0
- package/dist/tools/db-tools/tools/tables/index.d.ts.map +1 -0
- package/dist/tools/db-tools/tools/tables/index.js +24 -0
- package/dist/tools/db-tools/tools/tables/index.js.map +1 -0
- package/dist/tools/db-tools/tools/tables/schema.d.ts +3 -0
- package/dist/tools/db-tools/tools/tables/schema.d.ts.map +1 -0
- package/dist/tools/db-tools/tools/tables/schema.js +14 -0
- package/dist/tools/db-tools/tools/tables/schema.js.map +1 -0
- package/dist/tools/db-tools/tools/update/index.d.ts +3 -0
- package/dist/tools/db-tools/tools/update/index.d.ts.map +1 -0
- package/dist/tools/db-tools/tools/update/index.js +33 -0
- package/dist/tools/db-tools/tools/update/index.js.map +1 -0
- package/dist/tools/db-tools/tools/update/schema.d.ts +3 -0
- package/dist/tools/db-tools/tools/update/schema.d.ts.map +1 -0
- package/dist/tools/db-tools/tools/update/schema.js +26 -0
- package/dist/tools/db-tools/tools/update/schema.js.map +1 -0
- package/dist/tools/diff-tools/index.d.ts +7 -0
- package/dist/tools/diff-tools/index.d.ts.map +1 -0
- package/dist/tools/diff-tools/index.js +34 -0
- package/dist/tools/diff-tools/index.js.map +1 -0
- package/dist/tools/diff-tools/tools/apply/index.d.ts +3 -0
- package/dist/tools/diff-tools/tools/apply/index.d.ts.map +1 -0
- package/dist/tools/diff-tools/tools/apply/index.js +63 -0
- package/dist/tools/diff-tools/tools/apply/index.js.map +1 -0
- package/dist/tools/diff-tools/tools/apply/schema.d.ts +3 -0
- package/dist/tools/diff-tools/tools/apply/schema.d.ts.map +1 -0
- package/dist/tools/diff-tools/tools/apply/schema.js +18 -0
- package/dist/tools/diff-tools/tools/apply/schema.js.map +1 -0
- package/dist/tools/diff-tools/tools/create/index.d.ts +3 -0
- package/dist/tools/diff-tools/tools/create/index.d.ts.map +1 -0
- package/dist/tools/diff-tools/tools/create/index.js +59 -0
- package/dist/tools/diff-tools/tools/create/index.js.map +1 -0
- package/dist/tools/diff-tools/tools/create/schema.d.ts +3 -0
- package/dist/tools/diff-tools/tools/create/schema.d.ts.map +1 -0
- package/dist/tools/diff-tools/tools/create/schema.js +27 -0
- package/dist/tools/diff-tools/tools/create/schema.js.map +1 -0
- package/dist/tools/diff-tools/tools/preview/index.d.ts +3 -0
- package/dist/tools/diff-tools/tools/preview/index.d.ts.map +1 -0
- package/dist/tools/diff-tools/tools/preview/index.js +62 -0
- package/dist/tools/diff-tools/tools/preview/index.js.map +1 -0
- package/dist/tools/diff-tools/tools/preview/schema.d.ts +3 -0
- package/dist/tools/diff-tools/tools/preview/schema.d.ts.map +1 -0
- package/dist/tools/diff-tools/tools/preview/schema.js +18 -0
- package/dist/tools/diff-tools/tools/preview/schema.js.map +1 -0
- package/dist/tools/exec-tools/index.d.ts +9 -0
- package/dist/tools/exec-tools/index.d.ts.map +1 -0
- package/dist/tools/exec-tools/index.js +42 -0
- package/dist/tools/exec-tools/index.js.map +1 -0
- package/dist/tools/exec-tools/process-registry.d.ts +23 -0
- package/dist/tools/exec-tools/process-registry.d.ts.map +1 -0
- package/dist/tools/exec-tools/process-registry.js +66 -0
- package/dist/tools/exec-tools/process-registry.js.map +1 -0
- package/dist/tools/exec-tools/tools/kill/index.d.ts +3 -0
- package/dist/tools/exec-tools/tools/kill/index.d.ts.map +1 -0
- package/dist/tools/exec-tools/tools/kill/index.js +31 -0
- package/dist/tools/exec-tools/tools/kill/index.js.map +1 -0
- package/dist/tools/exec-tools/tools/kill/schema.d.ts +7 -0
- package/dist/tools/exec-tools/tools/kill/schema.d.ts.map +1 -0
- package/dist/tools/exec-tools/tools/kill/schema.js +18 -0
- package/dist/tools/exec-tools/tools/kill/schema.js.map +1 -0
- package/dist/tools/exec-tools/tools/list-processes/index.d.ts +3 -0
- package/dist/tools/exec-tools/tools/list-processes/index.d.ts.map +1 -0
- package/dist/tools/exec-tools/tools/list-processes/index.js +21 -0
- package/dist/tools/exec-tools/tools/list-processes/index.js.map +1 -0
- package/dist/tools/exec-tools/tools/list-processes/schema.d.ts +7 -0
- package/dist/tools/exec-tools/tools/list-processes/schema.d.ts.map +1 -0
- package/dist/tools/exec-tools/tools/list-processes/schema.js +12 -0
- package/dist/tools/exec-tools/tools/list-processes/schema.js.map +1 -0
- package/dist/tools/exec-tools/tools/read-output/index.d.ts +3 -0
- package/dist/tools/exec-tools/tools/read-output/index.d.ts.map +1 -0
- package/dist/tools/exec-tools/tools/read-output/index.js +32 -0
- package/dist/tools/exec-tools/tools/read-output/index.js.map +1 -0
- package/dist/tools/exec-tools/tools/read-output/schema.d.ts +7 -0
- package/dist/tools/exec-tools/tools/read-output/schema.d.ts.map +1 -0
- package/dist/tools/exec-tools/tools/read-output/schema.js +18 -0
- package/dist/tools/exec-tools/tools/read-output/schema.js.map +1 -0
- package/dist/tools/exec-tools/tools/run/index.d.ts +3 -0
- package/dist/tools/exec-tools/tools/run/index.d.ts.map +1 -0
- package/dist/tools/exec-tools/tools/run/index.js +38 -0
- package/dist/tools/exec-tools/tools/run/index.js.map +1 -0
- package/dist/tools/exec-tools/tools/run/schema.d.ts +7 -0
- package/dist/tools/exec-tools/tools/run/schema.d.ts.map +1 -0
- package/dist/tools/exec-tools/tools/run/schema.js +27 -0
- package/dist/tools/exec-tools/tools/run/schema.js.map +1 -0
- package/dist/tools/exec-tools/tools/run-background/index.d.ts +3 -0
- package/dist/tools/exec-tools/tools/run-background/index.d.ts.map +1 -0
- package/dist/tools/exec-tools/tools/run-background/index.js +35 -0
- package/dist/tools/exec-tools/tools/run-background/index.js.map +1 -0
- package/dist/tools/exec-tools/tools/run-background/schema.d.ts +7 -0
- package/dist/tools/exec-tools/tools/run-background/schema.d.ts.map +1 -0
- package/dist/tools/exec-tools/tools/run-background/schema.js +22 -0
- package/dist/tools/exec-tools/tools/run-background/schema.js.map +1 -0
- package/dist/tools/exec-tools/tools/run-shell/index.d.ts +3 -0
- package/dist/tools/exec-tools/tools/run-shell/index.d.ts.map +1 -0
- package/dist/tools/exec-tools/tools/run-shell/index.js +46 -0
- package/dist/tools/exec-tools/tools/run-shell/index.js.map +1 -0
- package/dist/tools/exec-tools/tools/run-shell/schema.d.ts +7 -0
- package/dist/tools/exec-tools/tools/run-shell/schema.d.ts.map +1 -0
- package/dist/tools/exec-tools/tools/run-shell/schema.js +27 -0
- package/dist/tools/exec-tools/tools/run-shell/schema.js.map +1 -0
- package/dist/tools/fs-tools/index.d.ts +21 -0
- package/dist/tools/fs-tools/index.d.ts.map +1 -0
- package/dist/tools/fs-tools/index.js +86 -0
- package/dist/tools/fs-tools/index.js.map +1 -0
- package/dist/tools/fs-tools/tools/append-file/index.d.ts +3 -0
- package/dist/tools/fs-tools/tools/append-file/index.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/append-file/index.js +66 -0
- package/dist/tools/fs-tools/tools/append-file/index.js.map +1 -0
- package/dist/tools/fs-tools/tools/append-file/schema.d.ts +7 -0
- package/dist/tools/fs-tools/tools/append-file/schema.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/append-file/schema.js +27 -0
- package/dist/tools/fs-tools/tools/append-file/schema.js.map +1 -0
- package/dist/tools/fs-tools/tools/batch-read/index.d.ts +3 -0
- package/dist/tools/fs-tools/tools/batch-read/index.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/batch-read/index.js +54 -0
- package/dist/tools/fs-tools/tools/batch-read/index.js.map +1 -0
- package/dist/tools/fs-tools/tools/batch-read/schema.d.ts +7 -0
- package/dist/tools/fs-tools/tools/batch-read/schema.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/batch-read/schema.js +27 -0
- package/dist/tools/fs-tools/tools/batch-read/schema.js.map +1 -0
- package/dist/tools/fs-tools/tools/batch-write/index.d.ts +3 -0
- package/dist/tools/fs-tools/tools/batch-write/index.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/batch-write/index.js +75 -0
- package/dist/tools/fs-tools/tools/batch-write/index.js.map +1 -0
- package/dist/tools/fs-tools/tools/batch-write/schema.d.ts +7 -0
- package/dist/tools/fs-tools/tools/batch-write/schema.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/batch-write/schema.js +37 -0
- package/dist/tools/fs-tools/tools/batch-write/schema.js.map +1 -0
- package/dist/tools/fs-tools/tools/copy/index.d.ts +3 -0
- package/dist/tools/fs-tools/tools/copy/index.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/copy/index.js +85 -0
- package/dist/tools/fs-tools/tools/copy/index.js.map +1 -0
- package/dist/tools/fs-tools/tools/copy/schema.d.ts +7 -0
- package/dist/tools/fs-tools/tools/copy/schema.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/copy/schema.js +22 -0
- package/dist/tools/fs-tools/tools/copy/schema.js.map +1 -0
- package/dist/tools/fs-tools/tools/create-dir/index.d.ts +3 -0
- package/dist/tools/fs-tools/tools/create-dir/index.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/create-dir/index.js +63 -0
- package/dist/tools/fs-tools/tools/create-dir/index.js.map +1 -0
- package/dist/tools/fs-tools/tools/create-dir/schema.d.ts +7 -0
- package/dist/tools/fs-tools/tools/create-dir/schema.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/create-dir/schema.js +23 -0
- package/dist/tools/fs-tools/tools/create-dir/schema.js.map +1 -0
- package/dist/tools/fs-tools/tools/delete-dir/index.d.ts +3 -0
- package/dist/tools/fs-tools/tools/delete-dir/index.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/delete-dir/index.js +36 -0
- package/dist/tools/fs-tools/tools/delete-dir/index.js.map +1 -0
- package/dist/tools/fs-tools/tools/delete-dir/schema.d.ts +7 -0
- package/dist/tools/fs-tools/tools/delete-dir/schema.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/delete-dir/schema.js +22 -0
- package/dist/tools/fs-tools/tools/delete-dir/schema.js.map +1 -0
- package/dist/tools/fs-tools/tools/delete-file/index.d.ts +3 -0
- package/dist/tools/fs-tools/tools/delete-file/index.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/delete-file/index.js +62 -0
- package/dist/tools/fs-tools/tools/delete-file/index.js.map +1 -0
- package/dist/tools/fs-tools/tools/delete-file/schema.d.ts +7 -0
- package/dist/tools/fs-tools/tools/delete-file/schema.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/delete-file/schema.js +18 -0
- package/dist/tools/fs-tools/tools/delete-file/schema.js.map +1 -0
- package/dist/tools/fs-tools/tools/exists/index.d.ts +3 -0
- package/dist/tools/fs-tools/tools/exists/index.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/exists/index.js +55 -0
- package/dist/tools/fs-tools/tools/exists/index.js.map +1 -0
- package/dist/tools/fs-tools/tools/exists/schema.d.ts +7 -0
- package/dist/tools/fs-tools/tools/exists/schema.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/exists/schema.js +18 -0
- package/dist/tools/fs-tools/tools/exists/schema.js.map +1 -0
- package/dist/tools/fs-tools/tools/glob/index.d.ts +3 -0
- package/dist/tools/fs-tools/tools/glob/index.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/glob/index.js +46 -0
- package/dist/tools/fs-tools/tools/glob/index.js.map +1 -0
- package/dist/tools/fs-tools/tools/glob/schema.d.ts +7 -0
- package/dist/tools/fs-tools/tools/glob/schema.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/glob/schema.js +39 -0
- package/dist/tools/fs-tools/tools/glob/schema.js.map +1 -0
- package/dist/tools/fs-tools/tools/list-dir/index.d.ts +3 -0
- package/dist/tools/fs-tools/tools/list-dir/index.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/list-dir/index.js +82 -0
- package/dist/tools/fs-tools/tools/list-dir/index.js.map +1 -0
- package/dist/tools/fs-tools/tools/list-dir/schema.d.ts +7 -0
- package/dist/tools/fs-tools/tools/list-dir/schema.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/list-dir/schema.js +23 -0
- package/dist/tools/fs-tools/tools/list-dir/schema.js.map +1 -0
- package/dist/tools/fs-tools/tools/move/index.d.ts +3 -0
- package/dist/tools/fs-tools/tools/move/index.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/move/index.js +68 -0
- package/dist/tools/fs-tools/tools/move/index.js.map +1 -0
- package/dist/tools/fs-tools/tools/move/schema.d.ts +7 -0
- package/dist/tools/fs-tools/tools/move/schema.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/move/schema.js +22 -0
- package/dist/tools/fs-tools/tools/move/schema.js.map +1 -0
- package/dist/tools/fs-tools/tools/read-file/index.d.ts +3 -0
- package/dist/tools/fs-tools/tools/read-file/index.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/read-file/index.js +63 -0
- package/dist/tools/fs-tools/tools/read-file/index.js.map +1 -0
- package/dist/tools/fs-tools/tools/read-file/schema.d.ts +7 -0
- package/dist/tools/fs-tools/tools/read-file/schema.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/read-file/schema.js +23 -0
- package/dist/tools/fs-tools/tools/read-file/schema.js.map +1 -0
- package/dist/tools/fs-tools/tools/read-file-range/index.d.ts +3 -0
- package/dist/tools/fs-tools/tools/read-file-range/index.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/read-file-range/index.js +84 -0
- package/dist/tools/fs-tools/tools/read-file-range/index.js.map +1 -0
- package/dist/tools/fs-tools/tools/read-file-range/schema.d.ts +7 -0
- package/dist/tools/fs-tools/tools/read-file-range/schema.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/read-file-range/schema.js +26 -0
- package/dist/tools/fs-tools/tools/read-file-range/schema.js.map +1 -0
- package/dist/tools/fs-tools/tools/replace-in-file/index.d.ts +3 -0
- package/dist/tools/fs-tools/tools/replace-in-file/index.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/replace-in-file/index.js +82 -0
- package/dist/tools/fs-tools/tools/replace-in-file/index.js.map +1 -0
- package/dist/tools/fs-tools/tools/replace-in-file/schema.d.ts +7 -0
- package/dist/tools/fs-tools/tools/replace-in-file/schema.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/replace-in-file/schema.js +26 -0
- package/dist/tools/fs-tools/tools/replace-in-file/schema.js.map +1 -0
- package/dist/tools/fs-tools/tools/search/index.d.ts +3 -0
- package/dist/tools/fs-tools/tools/search/index.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/search/index.js +119 -0
- package/dist/tools/fs-tools/tools/search/index.js.map +1 -0
- package/dist/tools/fs-tools/tools/search/schema.d.ts +7 -0
- package/dist/tools/fs-tools/tools/search/schema.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/search/schema.js +42 -0
- package/dist/tools/fs-tools/tools/search/schema.js.map +1 -0
- package/dist/tools/fs-tools/tools/stat/index.d.ts +3 -0
- package/dist/tools/fs-tools/tools/stat/index.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/stat/index.js +66 -0
- package/dist/tools/fs-tools/tools/stat/index.js.map +1 -0
- package/dist/tools/fs-tools/tools/stat/schema.d.ts +7 -0
- package/dist/tools/fs-tools/tools/stat/schema.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/stat/schema.js +18 -0
- package/dist/tools/fs-tools/tools/stat/schema.js.map +1 -0
- package/dist/tools/fs-tools/tools/tree/index.d.ts +3 -0
- package/dist/tools/fs-tools/tools/tree/index.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/tree/index.js +92 -0
- package/dist/tools/fs-tools/tools/tree/index.js.map +1 -0
- package/dist/tools/fs-tools/tools/tree/schema.d.ts +7 -0
- package/dist/tools/fs-tools/tools/tree/schema.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/tree/schema.js +23 -0
- package/dist/tools/fs-tools/tools/tree/schema.js.map +1 -0
- package/dist/tools/fs-tools/tools/write-file/index.d.ts +3 -0
- package/dist/tools/fs-tools/tools/write-file/index.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/write-file/index.js +66 -0
- package/dist/tools/fs-tools/tools/write-file/index.js.map +1 -0
- package/dist/tools/fs-tools/tools/write-file/schema.d.ts +7 -0
- package/dist/tools/fs-tools/tools/write-file/schema.d.ts.map +1 -0
- package/dist/tools/fs-tools/tools/write-file/schema.js +27 -0
- package/dist/tools/fs-tools/tools/write-file/schema.js.map +1 -0
- package/dist/tools/git-tools/index.d.ts +13 -0
- package/dist/tools/git-tools/index.d.ts.map +1 -0
- package/dist/tools/git-tools/index.js +58 -0
- package/dist/tools/git-tools/index.js.map +1 -0
- package/dist/tools/git-tools/tools/add/index.d.ts +3 -0
- package/dist/tools/git-tools/tools/add/index.d.ts.map +1 -0
- package/dist/tools/git-tools/tools/add/index.js +24 -0
- package/dist/tools/git-tools/tools/add/index.js.map +1 -0
- package/dist/tools/git-tools/tools/add/schema.d.ts +3 -0
- package/dist/tools/git-tools/tools/add/schema.d.ts.map +1 -0
- package/dist/tools/git-tools/tools/add/schema.js +14 -0
- package/dist/tools/git-tools/tools/add/schema.js.map +1 -0
- package/dist/tools/git-tools/tools/blame/index.d.ts +3 -0
- package/dist/tools/git-tools/tools/blame/index.d.ts.map +1 -0
- package/dist/tools/git-tools/tools/blame/index.js +24 -0
- package/dist/tools/git-tools/tools/blame/index.js.map +1 -0
- package/dist/tools/git-tools/tools/blame/schema.d.ts +3 -0
- package/dist/tools/git-tools/tools/blame/schema.d.ts.map +1 -0
- package/dist/tools/git-tools/tools/blame/schema.js +14 -0
- package/dist/tools/git-tools/tools/blame/schema.js.map +1 -0
- package/dist/tools/git-tools/tools/branch-create/index.d.ts +3 -0
- package/dist/tools/git-tools/tools/branch-create/index.d.ts.map +1 -0
- package/dist/tools/git-tools/tools/branch-create/index.js +42 -0
- package/dist/tools/git-tools/tools/branch-create/index.js.map +1 -0
- package/dist/tools/git-tools/tools/branch-create/schema.d.ts +3 -0
- package/dist/tools/git-tools/tools/branch-create/schema.d.ts.map +1 -0
- package/dist/tools/git-tools/tools/branch-create/schema.js +23 -0
- package/dist/tools/git-tools/tools/branch-create/schema.js.map +1 -0
- package/dist/tools/git-tools/tools/branch-list/index.d.ts +3 -0
- package/dist/tools/git-tools/tools/branch-list/index.d.ts.map +1 -0
- package/dist/tools/git-tools/tools/branch-list/index.js +25 -0
- package/dist/tools/git-tools/tools/branch-list/index.js.map +1 -0
- package/dist/tools/git-tools/tools/branch-list/schema.d.ts +3 -0
- package/dist/tools/git-tools/tools/branch-list/schema.d.ts.map +1 -0
- package/dist/tools/git-tools/tools/branch-list/schema.js +14 -0
- package/dist/tools/git-tools/tools/branch-list/schema.js.map +1 -0
- package/dist/tools/git-tools/tools/checkout/index.d.ts +3 -0
- package/dist/tools/git-tools/tools/checkout/index.d.ts.map +1 -0
- package/dist/tools/git-tools/tools/checkout/index.js +24 -0
- package/dist/tools/git-tools/tools/checkout/index.js.map +1 -0
- package/dist/tools/git-tools/tools/checkout/schema.d.ts +3 -0
- package/dist/tools/git-tools/tools/checkout/schema.d.ts.map +1 -0
- package/dist/tools/git-tools/tools/checkout/schema.js +14 -0
- package/dist/tools/git-tools/tools/checkout/schema.js.map +1 -0
- package/dist/tools/git-tools/tools/commit/index.d.ts +3 -0
- package/dist/tools/git-tools/tools/commit/index.d.ts.map +1 -0
- package/dist/tools/git-tools/tools/commit/index.js +29 -0
- package/dist/tools/git-tools/tools/commit/index.js.map +1 -0
- package/dist/tools/git-tools/tools/commit/schema.d.ts +3 -0
- package/dist/tools/git-tools/tools/commit/schema.d.ts.map +1 -0
- package/dist/tools/git-tools/tools/commit/schema.js +14 -0
- package/dist/tools/git-tools/tools/commit/schema.js.map +1 -0
- package/dist/tools/git-tools/tools/diff/index.d.ts +3 -0
- package/dist/tools/git-tools/tools/diff/index.d.ts.map +1 -0
- package/dist/tools/git-tools/tools/diff/index.js +35 -0
- package/dist/tools/git-tools/tools/diff/index.js.map +1 -0
- package/dist/tools/git-tools/tools/diff/schema.d.ts +3 -0
- package/dist/tools/git-tools/tools/diff/schema.d.ts.map +1 -0
- package/dist/tools/git-tools/tools/diff/schema.js +18 -0
- package/dist/tools/git-tools/tools/diff/schema.js.map +1 -0
- package/dist/tools/git-tools/tools/log/index.d.ts +3 -0
- package/dist/tools/git-tools/tools/log/index.d.ts.map +1 -0
- package/dist/tools/git-tools/tools/log/index.js +35 -0
- package/dist/tools/git-tools/tools/log/index.js.map +1 -0
- package/dist/tools/git-tools/tools/log/schema.d.ts +3 -0
- package/dist/tools/git-tools/tools/log/schema.d.ts.map +1 -0
- package/dist/tools/git-tools/tools/log/schema.js +18 -0
- package/dist/tools/git-tools/tools/log/schema.js.map +1 -0
- package/dist/tools/git-tools/tools/status/index.d.ts +3 -0
- package/dist/tools/git-tools/tools/status/index.d.ts.map +1 -0
- package/dist/tools/git-tools/tools/status/index.js +50 -0
- package/dist/tools/git-tools/tools/status/index.js.map +1 -0
- package/dist/tools/git-tools/tools/status/schema.d.ts +3 -0
- package/dist/tools/git-tools/tools/status/schema.d.ts.map +1 -0
- package/dist/tools/git-tools/tools/status/schema.js +13 -0
- package/dist/tools/git-tools/tools/status/schema.js.map +1 -0
- package/dist/tools/git-tools/utils.d.ts +3 -0
- package/dist/tools/git-tools/utils.d.ts.map +1 -0
- package/dist/tools/git-tools/utils.js +13 -0
- package/dist/tools/git-tools/utils.js.map +1 -0
- package/dist/tools/http-tools/index.d.ts +8 -0
- package/dist/tools/http-tools/index.d.ts.map +1 -0
- package/dist/tools/http-tools/index.js +33 -0
- package/dist/tools/http-tools/index.js.map +1 -0
- package/dist/tools/http-tools/tools/delete/index.d.ts +3 -0
- package/dist/tools/http-tools/tools/delete/index.d.ts.map +1 -0
- package/dist/tools/http-tools/tools/delete/index.js +34 -0
- package/dist/tools/http-tools/tools/delete/index.js.map +1 -0
- package/dist/tools/http-tools/tools/delete/schema.d.ts +7 -0
- package/dist/tools/http-tools/tools/delete/schema.d.ts.map +1 -0
- package/dist/tools/http-tools/tools/delete/schema.js +22 -0
- package/dist/tools/http-tools/tools/delete/schema.js.map +1 -0
- package/dist/tools/http-tools/tools/download/index.d.ts +3 -0
- package/dist/tools/http-tools/tools/download/index.d.ts.map +1 -0
- package/dist/tools/http-tools/tools/download/index.js +77 -0
- package/dist/tools/http-tools/tools/download/index.js.map +1 -0
- package/dist/tools/http-tools/tools/download/schema.d.ts +7 -0
- package/dist/tools/http-tools/tools/download/schema.d.ts.map +1 -0
- package/dist/tools/http-tools/tools/download/schema.js +26 -0
- package/dist/tools/http-tools/tools/download/schema.js.map +1 -0
- package/dist/tools/http-tools/tools/get/index.d.ts +3 -0
- package/dist/tools/http-tools/tools/get/index.d.ts.map +1 -0
- package/dist/tools/http-tools/tools/get/index.js +37 -0
- package/dist/tools/http-tools/tools/get/index.js.map +1 -0
- package/dist/tools/http-tools/tools/get/schema.d.ts +7 -0
- package/dist/tools/http-tools/tools/get/schema.d.ts.map +1 -0
- package/dist/tools/http-tools/tools/get/schema.js +22 -0
- package/dist/tools/http-tools/tools/get/schema.js.map +1 -0
- package/dist/tools/http-tools/tools/post/index.d.ts +3 -0
- package/dist/tools/http-tools/tools/post/index.d.ts.map +1 -0
- package/dist/tools/http-tools/tools/post/index.js +46 -0
- package/dist/tools/http-tools/tools/post/index.js.map +1 -0
- package/dist/tools/http-tools/tools/post/schema.d.ts +7 -0
- package/dist/tools/http-tools/tools/post/schema.d.ts.map +1 -0
- package/dist/tools/http-tools/tools/post/schema.js +26 -0
- package/dist/tools/http-tools/tools/post/schema.js.map +1 -0
- package/dist/tools/http-tools/tools/put/index.d.ts +3 -0
- package/dist/tools/http-tools/tools/put/index.d.ts.map +1 -0
- package/dist/tools/http-tools/tools/put/index.js +45 -0
- package/dist/tools/http-tools/tools/put/index.js.map +1 -0
- package/dist/tools/http-tools/tools/put/schema.d.ts +7 -0
- package/dist/tools/http-tools/tools/put/schema.d.ts.map +1 -0
- package/dist/tools/http-tools/tools/put/schema.js +26 -0
- package/dist/tools/http-tools/tools/put/schema.js.map +1 -0
- package/dist/tools/index.d.ts +17 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +120 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/registry.d.ts +108 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +217 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/router.d.ts +40 -0
- package/dist/tools/router.d.ts.map +1 -0
- package/dist/tools/router.js +127 -0
- package/dist/tools/router.js.map +1 -0
- package/dist/tools/search/bm25-engine.d.ts +65 -0
- package/dist/tools/search/bm25-engine.d.ts.map +1 -0
- package/dist/tools/search/bm25-engine.js +218 -0
- package/dist/tools/search/bm25-engine.js.map +1 -0
- package/dist/tools/search/index.d.ts +11 -0
- package/dist/tools/search/index.d.ts.map +1 -0
- package/dist/tools/search/index.js +21 -0
- package/dist/tools/search/index.js.map +1 -0
- package/dist/tools/search/system-prompt.d.ts +20 -0
- package/dist/tools/search/system-prompt.d.ts.map +1 -0
- package/dist/tools/search/system-prompt.js +62 -0
- package/dist/tools/search/system-prompt.js.map +1 -0
- package/dist/tools/search/tool-cache.d.ts +56 -0
- package/dist/tools/search/tool-cache.d.ts.map +1 -0
- package/dist/tools/search/tool-cache.js +107 -0
- package/dist/tools/search/tool-cache.js.map +1 -0
- package/dist/tools/search/tool-search.d.ts +21 -0
- package/dist/tools/search/tool-search.d.ts.map +1 -0
- package/dist/tools/search/tool-search.js +66 -0
- package/dist/tools/search/tool-search.js.map +1 -0
- package/dist/tools/system-tools/index.d.ts +8 -0
- package/dist/tools/system-tools/index.d.ts.map +1 -0
- package/dist/tools/system-tools/index.js +39 -0
- package/dist/tools/system-tools/index.js.map +1 -0
- package/dist/tools/system-tools/tools/cwd/index.d.ts +3 -0
- package/dist/tools/system-tools/tools/cwd/index.d.ts.map +1 -0
- package/dist/tools/system-tools/tools/cwd/index.js +16 -0
- package/dist/tools/system-tools/tools/cwd/index.js.map +1 -0
- package/dist/tools/system-tools/tools/cwd/schema.d.ts +7 -0
- package/dist/tools/system-tools/tools/cwd/schema.d.ts.map +1 -0
- package/dist/tools/system-tools/tools/cwd/schema.js +12 -0
- package/dist/tools/system-tools/tools/cwd/schema.js.map +1 -0
- package/dist/tools/system-tools/tools/disk-usage/index.d.ts +3 -0
- package/dist/tools/system-tools/tools/disk-usage/index.d.ts.map +1 -0
- package/dist/tools/system-tools/tools/disk-usage/index.js +41 -0
- package/dist/tools/system-tools/tools/disk-usage/index.js.map +1 -0
- package/dist/tools/system-tools/tools/disk-usage/schema.d.ts +7 -0
- package/dist/tools/system-tools/tools/disk-usage/schema.d.ts.map +1 -0
- package/dist/tools/system-tools/tools/disk-usage/schema.js +18 -0
- package/dist/tools/system-tools/tools/disk-usage/schema.js.map +1 -0
- package/dist/tools/system-tools/tools/env/index.d.ts +3 -0
- package/dist/tools/system-tools/tools/env/index.d.ts.map +1 -0
- package/dist/tools/system-tools/tools/env/index.js +32 -0
- package/dist/tools/system-tools/tools/env/index.js.map +1 -0
- package/dist/tools/system-tools/tools/env/schema.d.ts +7 -0
- package/dist/tools/system-tools/tools/env/schema.d.ts.map +1 -0
- package/dist/tools/system-tools/tools/env/schema.js +17 -0
- package/dist/tools/system-tools/tools/env/schema.js.map +1 -0
- package/dist/tools/system-tools/tools/info/index.d.ts +3 -0
- package/dist/tools/system-tools/tools/info/index.d.ts.map +1 -0
- package/dist/tools/system-tools/tools/info/index.js +68 -0
- package/dist/tools/system-tools/tools/info/index.js.map +1 -0
- package/dist/tools/system-tools/tools/info/schema.d.ts +7 -0
- package/dist/tools/system-tools/tools/info/schema.d.ts.map +1 -0
- package/dist/tools/system-tools/tools/info/schema.js +12 -0
- package/dist/tools/system-tools/tools/info/schema.js.map +1 -0
- package/dist/tools/system-tools/tools/set-env/index.d.ts +3 -0
- package/dist/tools/system-tools/tools/set-env/index.d.ts.map +1 -0
- package/dist/tools/system-tools/tools/set-env/index.js +29 -0
- package/dist/tools/system-tools/tools/set-env/index.js.map +1 -0
- package/dist/tools/system-tools/tools/set-env/schema.d.ts +7 -0
- package/dist/tools/system-tools/tools/set-env/schema.d.ts.map +1 -0
- package/dist/tools/system-tools/tools/set-env/schema.js +22 -0
- package/dist/tools/system-tools/tools/set-env/schema.js.map +1 -0
- package/dist/tools/types.d.ts +118 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +27 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/web-tools/index.d.ts +12 -0
- package/dist/tools/web-tools/index.d.ts.map +1 -0
- package/dist/tools/web-tools/index.js +53 -0
- package/dist/tools/web-tools/index.js.map +1 -0
- package/dist/tools/web-tools/tools/extract-links/index.d.ts +3 -0
- package/dist/tools/web-tools/tools/extract-links/index.d.ts.map +1 -0
- package/dist/tools/web-tools/tools/extract-links/index.js +125 -0
- package/dist/tools/web-tools/tools/extract-links/index.js.map +1 -0
- package/dist/tools/web-tools/tools/extract-links/schema.d.ts +7 -0
- package/dist/tools/web-tools/tools/extract-links/schema.d.ts.map +1 -0
- package/dist/tools/web-tools/tools/extract-links/schema.js +27 -0
- package/dist/tools/web-tools/tools/extract-links/schema.js.map +1 -0
- package/dist/tools/web-tools/tools/feed/index.d.ts +3 -0
- package/dist/tools/web-tools/tools/feed/index.d.ts.map +1 -0
- package/dist/tools/web-tools/tools/feed/index.js +41 -0
- package/dist/tools/web-tools/tools/feed/index.js.map +1 -0
- package/dist/tools/web-tools/tools/feed/schema.d.ts +7 -0
- package/dist/tools/web-tools/tools/feed/schema.d.ts.map +1 -0
- package/dist/tools/web-tools/tools/feed/schema.js +28 -0
- package/dist/tools/web-tools/tools/feed/schema.js.map +1 -0
- package/dist/tools/web-tools/tools/fetch/extractor.d.ts +37 -0
- package/dist/tools/web-tools/tools/fetch/extractor.d.ts.map +1 -0
- package/dist/tools/web-tools/tools/fetch/extractor.js +196 -0
- package/dist/tools/web-tools/tools/fetch/extractor.js.map +1 -0
- package/dist/tools/web-tools/tools/fetch/index.d.ts +3 -0
- package/dist/tools/web-tools/tools/fetch/index.d.ts.map +1 -0
- package/dist/tools/web-tools/tools/fetch/index.js +65 -0
- package/dist/tools/web-tools/tools/fetch/index.js.map +1 -0
- package/dist/tools/web-tools/tools/fetch/schema.d.ts +7 -0
- package/dist/tools/web-tools/tools/fetch/schema.d.ts.map +1 -0
- package/dist/tools/web-tools/tools/fetch/schema.js +33 -0
- package/dist/tools/web-tools/tools/fetch/schema.js.map +1 -0
- package/dist/tools/web-tools/tools/map/index.d.ts +3 -0
- package/dist/tools/web-tools/tools/map/index.d.ts.map +1 -0
- package/dist/tools/web-tools/tools/map/index.js +101 -0
- package/dist/tools/web-tools/tools/map/index.js.map +1 -0
- package/dist/tools/web-tools/tools/map/schema.d.ts +7 -0
- package/dist/tools/web-tools/tools/map/schema.d.ts.map +1 -0
- package/dist/tools/web-tools/tools/map/schema.js +23 -0
- package/dist/tools/web-tools/tools/map/schema.js.map +1 -0
- package/dist/tools/web-tools/tools/metadata/index.d.ts +3 -0
- package/dist/tools/web-tools/tools/metadata/index.d.ts.map +1 -0
- package/dist/tools/web-tools/tools/metadata/index.js +113 -0
- package/dist/tools/web-tools/tools/metadata/index.js.map +1 -0
- package/dist/tools/web-tools/tools/metadata/schema.d.ts +7 -0
- package/dist/tools/web-tools/tools/metadata/schema.d.ts.map +1 -0
- package/dist/tools/web-tools/tools/metadata/schema.js +23 -0
- package/dist/tools/web-tools/tools/metadata/schema.js.map +1 -0
- package/dist/tools/web-tools/tools/scrape/index.d.ts +3 -0
- package/dist/tools/web-tools/tools/scrape/index.d.ts.map +1 -0
- package/dist/tools/web-tools/tools/scrape/index.js +249 -0
- package/dist/tools/web-tools/tools/scrape/index.js.map +1 -0
- package/dist/tools/web-tools/tools/scrape/schema.d.ts +7 -0
- package/dist/tools/web-tools/tools/scrape/schema.d.ts.map +1 -0
- package/dist/tools/web-tools/tools/scrape/schema.js +42 -0
- package/dist/tools/web-tools/tools/scrape/schema.js.map +1 -0
- package/dist/tools/web-tools/tools/screenshot/index.d.ts +3 -0
- package/dist/tools/web-tools/tools/screenshot/index.d.ts.map +1 -0
- package/dist/tools/web-tools/tools/screenshot/index.js +57 -0
- package/dist/tools/web-tools/tools/screenshot/index.js.map +1 -0
- package/dist/tools/web-tools/tools/screenshot/schema.d.ts +7 -0
- package/dist/tools/web-tools/tools/screenshot/schema.d.ts.map +1 -0
- package/dist/tools/web-tools/tools/screenshot/schema.js +37 -0
- package/dist/tools/web-tools/tools/screenshot/schema.js.map +1 -0
- package/dist/tools/web-tools/tools/search/index.d.ts +3 -0
- package/dist/tools/web-tools/tools/search/index.d.ts.map +1 -0
- package/dist/tools/web-tools/tools/search/index.js +252 -0
- package/dist/tools/web-tools/tools/search/index.js.map +1 -0
- package/dist/tools/web-tools/tools/search/schema.d.ts +7 -0
- package/dist/tools/web-tools/tools/search/schema.d.ts.map +1 -0
- package/dist/tools/web-tools/tools/search/schema.js +38 -0
- package/dist/tools/web-tools/tools/search/schema.js.map +1 -0
- package/dist/tools/web-tools/tools/sitemap/index.d.ts +3 -0
- package/dist/tools/web-tools/tools/sitemap/index.d.ts.map +1 -0
- package/dist/tools/web-tools/tools/sitemap/index.js +153 -0
- package/dist/tools/web-tools/tools/sitemap/index.js.map +1 -0
- package/dist/tools/web-tools/tools/sitemap/schema.d.ts +7 -0
- package/dist/tools/web-tools/tools/sitemap/schema.d.ts.map +1 -0
- package/dist/tools/web-tools/tools/sitemap/schema.js +28 -0
- package/dist/tools/web-tools/tools/sitemap/schema.js.map +1 -0
- package/dist/tools/web-tools/utils/puppeteer-loader.d.ts +6 -0
- package/dist/tools/web-tools/utils/puppeteer-loader.d.ts.map +1 -0
- package/dist/tools/web-tools/utils/puppeteer-loader.js +17 -0
- package/dist/tools/web-tools/utils/puppeteer-loader.js.map +1 -0
- package/dist/tools/web-tools/utils/rss-loader.d.ts +10 -0
- package/dist/tools/web-tools/utils/rss-loader.d.ts.map +1 -0
- package/dist/tools/web-tools/utils/rss-loader.js +17 -0
- package/dist/tools/web-tools/utils/rss-loader.js.map +1 -0
- package/dist/types/index.d.ts +221 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/global-config-loader.d.ts +13 -0
- package/dist/utils/global-config-loader.d.ts.map +1 -0
- package/dist/utils/global-config-loader.js +83 -0
- package/dist/utils/global-config-loader.js.map +1 -0
- package/dist/utils/home-config.d.ts +40 -0
- package/dist/utils/home-config.d.ts.map +1 -0
- package/dist/utils/home-config.js +112 -0
- package/dist/utils/home-config.js.map +1 -0
- package/dist/utils/runtime-config-loader.d.ts +22 -0
- package/dist/utils/runtime-config-loader.d.ts.map +1 -0
- package/dist/utils/runtime-config-loader.js +168 -0
- package/dist/utils/runtime-config-loader.js.map +1 -0
- package/dist/workflows/index.d.ts +6 -0
- package/dist/workflows/index.d.ts.map +1 -0
- package/dist/workflows/index.js +22 -0
- package/dist/workflows/index.js.map +1 -0
- package/dist/workflows/planning/plan-types.d.ts +50 -0
- package/dist/workflows/planning/plan-types.d.ts.map +1 -0
- package/dist/workflows/planning/plan-types.js +3 -0
- package/dist/workflows/planning/plan-types.js.map +1 -0
- package/dist/workflows/planning/planner.d.ts +20 -0
- package/dist/workflows/planning/planner.d.ts.map +1 -0
- package/dist/workflows/planning/planner.js +132 -0
- package/dist/workflows/planning/planner.js.map +1 -0
- package/dist/workflows/steps/step-executor.d.ts +32 -0
- package/dist/workflows/steps/step-executor.d.ts.map +1 -0
- package/dist/workflows/steps/step-executor.js +212 -0
- package/dist/workflows/steps/step-executor.js.map +1 -0
- package/dist/workflows/steps/step-tracker.d.ts +14 -0
- package/dist/workflows/steps/step-tracker.d.ts.map +1 -0
- package/dist/workflows/steps/step-tracker.js +72 -0
- package/dist/workflows/steps/step-tracker.js.map +1 -0
- package/dist/workflows/workflow-executor.d.ts +95 -0
- package/dist/workflows/workflow-executor.d.ts.map +1 -0
- package/dist/workflows/workflow-executor.js +741 -0
- package/dist/workflows/workflow-executor.js.map +1 -0
- package/dist/workflows/workflow-types.d.ts +102 -0
- package/dist/workflows/workflow-types.d.ts.map +1 -0
- package/dist/workflows/workflow-types.js +12 -0
- package/dist/workflows/workflow-types.js.map +1 -0
- package/package.json +105 -0
|
@@ -0,0 +1,1246 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AIClient = void 0;
|
|
4
|
+
const events_1 = require("events");
|
|
5
|
+
const errors_1 = require("../errors");
|
|
6
|
+
const router_js_1 = require("../tools/router.js");
|
|
7
|
+
const types_js_1 = require("../tools/types.js");
|
|
8
|
+
const index_js_1 = require("../tools/search/index.js");
|
|
9
|
+
const base_agent_context_js_1 = require("./base-agent-context.js");
|
|
10
|
+
const query_classifier_js_1 = require("./query-classifier.js");
|
|
11
|
+
const tool_orchestrator_js_1 = require("./tool-orchestrator.js");
|
|
12
|
+
const provider_logger_1 = require("../providers/provider-logger");
|
|
13
|
+
let REQUEST_SEQ = 0;
|
|
14
|
+
function newRequestId() {
|
|
15
|
+
REQUEST_SEQ += 1;
|
|
16
|
+
return `${Date.now()}-${REQUEST_SEQ}`;
|
|
17
|
+
}
|
|
18
|
+
function logRequestMessages(requestId, messages) {
|
|
19
|
+
if (!(0, provider_logger_1.isVerbose)())
|
|
20
|
+
return;
|
|
21
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] Messages (${messages.length}):`);
|
|
22
|
+
messages.forEach((m, i) => {
|
|
23
|
+
const preview = (0, provider_logger_1.safePreview)(m.content, 300);
|
|
24
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] #${i} role=${m.role} content=${preview}`);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
function extractLastUserText(messages) {
|
|
28
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
29
|
+
const m = messages[i];
|
|
30
|
+
if (m?.role !== 'user')
|
|
31
|
+
continue;
|
|
32
|
+
const c = m?.content;
|
|
33
|
+
if (typeof c === 'string')
|
|
34
|
+
return c;
|
|
35
|
+
if (Array.isArray(c)) {
|
|
36
|
+
return c
|
|
37
|
+
.map((p) => (p?.type === 'text' ? p.text : ''))
|
|
38
|
+
.filter(Boolean)
|
|
39
|
+
.join('\n');
|
|
40
|
+
}
|
|
41
|
+
return '';
|
|
42
|
+
}
|
|
43
|
+
return '';
|
|
44
|
+
}
|
|
45
|
+
function inferNeedsTools(messages) {
|
|
46
|
+
const text = extractLastUserText(messages).toLowerCase();
|
|
47
|
+
if (!text)
|
|
48
|
+
return false;
|
|
49
|
+
const patterns = [
|
|
50
|
+
/\b(list|show|print|display)\b.*\b(files|folders|directory|dir)\b/,
|
|
51
|
+
/\b(current|this)\b.*\b(directory|folder|repo|repository)\b/,
|
|
52
|
+
/\b(read|open|view)\b.*\b(file|log|config|json|yaml|env)\b/,
|
|
53
|
+
/\b(write|create|update|modify|edit|patch|delete|remove|rename|move|copy)\b.*\b(file|folder|directory)\b/,
|
|
54
|
+
/\b(run|execute)\b.*\b(command|shell|script|tests?)\b/,
|
|
55
|
+
/\b(http|get|post|put|delete|download|fetch|curl)\b/,
|
|
56
|
+
/\b(web|search|scrape|crawl|map)\b/,
|
|
57
|
+
/https?:\/\//, // Contains a URL
|
|
58
|
+
];
|
|
59
|
+
return patterns.some(r => r.test(text));
|
|
60
|
+
}
|
|
61
|
+
function isAfterToolCall(messages, maxDistance) {
|
|
62
|
+
// Find the last tool call in the conversation
|
|
63
|
+
let lastToolCallIndex = -1;
|
|
64
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
65
|
+
const msg = messages[i];
|
|
66
|
+
if (msg.role === 'tool' || (msg.role === 'assistant' && msg.tool_calls && msg.tool_calls.length > 0)) {
|
|
67
|
+
lastToolCallIndex = i;
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (lastToolCallIndex === -1)
|
|
72
|
+
return false;
|
|
73
|
+
// Check if current message is within maxDistance messages after the tool call
|
|
74
|
+
const distance = messages.length - 1 - lastToolCallIndex;
|
|
75
|
+
return distance > 0 && distance <= maxDistance;
|
|
76
|
+
}
|
|
77
|
+
function getFastModelForProvider(providerName) {
|
|
78
|
+
const defaultFastModels = {
|
|
79
|
+
openai: 'gpt-4.1-mini',
|
|
80
|
+
anthropic: 'claude-3-haiku-20240307',
|
|
81
|
+
gemini: 'gemini-2.0-flash-exp',
|
|
82
|
+
ollama: 'llama3.2',
|
|
83
|
+
};
|
|
84
|
+
return defaultFastModels[providerName] || 'default';
|
|
85
|
+
}
|
|
86
|
+
function extractToolContext(messages) {
|
|
87
|
+
// Extract context from recent tool calls (last 2 tool rounds)
|
|
88
|
+
const toolInfo = [];
|
|
89
|
+
let toolRoundsFound = 0;
|
|
90
|
+
for (let i = messages.length - 1; i >= 0 && toolRoundsFound < 2; i--) {
|
|
91
|
+
const msg = messages[i];
|
|
92
|
+
// Extract from assistant's tool calls
|
|
93
|
+
if (msg.role === 'assistant' && msg.tool_calls && msg.tool_calls.length > 0) {
|
|
94
|
+
toolRoundsFound++;
|
|
95
|
+
for (const toolCall of msg.tool_calls) {
|
|
96
|
+
const toolName = toolCall.function?.name || 'unknown';
|
|
97
|
+
const args = toolCall.function?.arguments;
|
|
98
|
+
// Extract relevant context from arguments
|
|
99
|
+
let context = `Tool: ${toolName}`;
|
|
100
|
+
if (args) {
|
|
101
|
+
try {
|
|
102
|
+
const parsedArgs = typeof args === 'string' ? JSON.parse(args) : args;
|
|
103
|
+
// Extract URLs, file paths, sections, queries
|
|
104
|
+
if (parsedArgs.url)
|
|
105
|
+
context += ` (URL: ${parsedArgs.url})`;
|
|
106
|
+
if (parsedArgs.file_path)
|
|
107
|
+
context += ` (File: ${parsedArgs.file_path})`;
|
|
108
|
+
if (parsedArgs.section)
|
|
109
|
+
context += ` (Section: ${parsedArgs.section})`;
|
|
110
|
+
if (parsedArgs.query)
|
|
111
|
+
context += ` (Query: ${parsedArgs.query})`;
|
|
112
|
+
if (parsedArgs.command)
|
|
113
|
+
context += ` (Command: ${parsedArgs.command.substring(0, 50)})`;
|
|
114
|
+
}
|
|
115
|
+
catch (e) {
|
|
116
|
+
// Ignore parse errors
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
toolInfo.push(context);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return toolInfo.length > 0 ? toolInfo.join(', ') : 'None';
|
|
124
|
+
}
|
|
125
|
+
async function inferNeedsToolsWithAI(provider, providerName, messages, fastModel) {
|
|
126
|
+
const requestId = newRequestId();
|
|
127
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] inferNeedsToolsWithAI() provider=${providerName} model=${fastModel}`);
|
|
128
|
+
// Extract tool context from recent tool calls
|
|
129
|
+
const toolContext = extractToolContext(messages);
|
|
130
|
+
// Get the last user message
|
|
131
|
+
const lastUserMessage = messages.filter((m) => m.role === 'user').slice(-1)[0];
|
|
132
|
+
const userMessage = lastUserMessage?.content || '';
|
|
133
|
+
// Build context-aware prompt
|
|
134
|
+
const prompt = `Recent tool usage: ${toolContext}
|
|
135
|
+
|
|
136
|
+
User's new message: "${userMessage}"
|
|
137
|
+
|
|
138
|
+
Does this message:
|
|
139
|
+
1. Ask about the same topic/context as recent tools? OR
|
|
140
|
+
2. Request new information that requires external tools (web search, file access, commands)?
|
|
141
|
+
|
|
142
|
+
If the message is general knowledge (math, definitions, explanations) or completely unrelated to recent tool context, answer NO.
|
|
143
|
+
If it asks about the same context OR needs new external information, answer YES.
|
|
144
|
+
|
|
145
|
+
Answer only: YES or NO`;
|
|
146
|
+
try {
|
|
147
|
+
const response = await provider.generate({
|
|
148
|
+
model: fastModel,
|
|
149
|
+
messages: [{ role: 'user', content: prompt }],
|
|
150
|
+
max_tokens: 10,
|
|
151
|
+
temperature: 0,
|
|
152
|
+
});
|
|
153
|
+
const answer = (response.content || '').trim().toUpperCase();
|
|
154
|
+
const needsTools = answer.startsWith('YES');
|
|
155
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] inferNeedsToolsWithAI() context="${toolContext}" message="${userMessage.substring(0, 50)}" result=${needsTools} (raw: ${answer})`);
|
|
156
|
+
return needsTools;
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] inferNeedsToolsWithAI() error=${error} - falling back to false`);
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
function inferLookupOnly(messages) {
|
|
164
|
+
const text = extractLastUserText(messages).toLowerCase();
|
|
165
|
+
if (!text)
|
|
166
|
+
return false;
|
|
167
|
+
const lookupPatterns = [
|
|
168
|
+
/\b(list|show|print|display)\b.*\b(files|folders|directory|dir)\b/,
|
|
169
|
+
/\b(current|this)\b.*\b(directory|folder|repo|repository)\b/,
|
|
170
|
+
/\b(read|open|view)\b.*\b(file|log|config|json|yaml|env)\b/,
|
|
171
|
+
];
|
|
172
|
+
const mutatingPatterns = [
|
|
173
|
+
/\b(write|create|update|modify|edit|patch|delete|remove|rename|move|copy)\b/,
|
|
174
|
+
/\b(run|execute)\b.*\b(command|shell|script|tests?)\b/,
|
|
175
|
+
/\b(http|get|post|put|delete|download|fetch|curl)\b/,
|
|
176
|
+
/\b(web|search|scrape|crawl)\b/,
|
|
177
|
+
];
|
|
178
|
+
return lookupPatterns.some(r => r.test(text)) && !mutatingPatterns.some(r => r.test(text));
|
|
179
|
+
}
|
|
180
|
+
const TOOL_RESULT_MAX_CHARS = (() => {
|
|
181
|
+
const raw = process.env.TOOLPACK_SDK_TOOL_RESULT_MAX_CHARS;
|
|
182
|
+
const n = raw ? Number(raw) : NaN;
|
|
183
|
+
return Number.isFinite(n) && n > 0 ? n : 20_000;
|
|
184
|
+
})();
|
|
185
|
+
class AIClient extends events_1.EventEmitter {
|
|
186
|
+
providers;
|
|
187
|
+
defaultProvider;
|
|
188
|
+
toolRegistry;
|
|
189
|
+
toolsConfig;
|
|
190
|
+
toolRouter;
|
|
191
|
+
bm25Engine;
|
|
192
|
+
queryClassifier;
|
|
193
|
+
toolOrchestrator;
|
|
194
|
+
activeMode = null;
|
|
195
|
+
overrideSystemPrompt;
|
|
196
|
+
disableBaseContext;
|
|
197
|
+
constructor(config) {
|
|
198
|
+
super();
|
|
199
|
+
this.providers = new Map(Object.entries(config.providers));
|
|
200
|
+
this.defaultProvider = config.defaultProvider;
|
|
201
|
+
this.toolRegistry = config.toolRegistry;
|
|
202
|
+
this.toolsConfig = config.toolsConfig || types_js_1.DEFAULT_TOOLS_CONFIG;
|
|
203
|
+
this.toolRouter = new router_js_1.ToolRouter();
|
|
204
|
+
this.bm25Engine = new index_js_1.BM25SearchEngine();
|
|
205
|
+
this.queryClassifier = new query_classifier_js_1.QueryClassifier();
|
|
206
|
+
this.toolOrchestrator = new tool_orchestrator_js_1.ToolOrchestrator();
|
|
207
|
+
this.overrideSystemPrompt = config.systemPrompt;
|
|
208
|
+
this.disableBaseContext = config.disableBaseContext || false;
|
|
209
|
+
// Index tools for BM25 search if registry is provided
|
|
210
|
+
if (this.toolRegistry) {
|
|
211
|
+
this.bm25Engine.index(this.toolRegistry.getAll());
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Register a new provider instance.
|
|
216
|
+
*/
|
|
217
|
+
registerProvider(name, provider) {
|
|
218
|
+
this.providers.set(name, provider);
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get a provider by name, or the default if none specified.
|
|
222
|
+
*/
|
|
223
|
+
getProvider(name) {
|
|
224
|
+
const providerName = name || this.defaultProvider;
|
|
225
|
+
if (!providerName) {
|
|
226
|
+
throw new errors_1.SDKError('No provider specified and no default provider configured', 'NO_PROVIDER_CONFIGURED', 400);
|
|
227
|
+
}
|
|
228
|
+
const provider = this.providers.get(providerName);
|
|
229
|
+
if (!provider) {
|
|
230
|
+
throw new errors_1.SDKError(`Provider '${providerName}' not found`, 'PROVIDER_NOT_FOUND', 404);
|
|
231
|
+
}
|
|
232
|
+
return provider;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Set the default provider for this client.
|
|
236
|
+
*/
|
|
237
|
+
setDefaultProvider(name) {
|
|
238
|
+
if (!this.providers.has(name)) {
|
|
239
|
+
throw new errors_1.SDKError(`Provider '${name}' not found`, 'PROVIDER_NOT_FOUND', 404);
|
|
240
|
+
}
|
|
241
|
+
this.defaultProvider = name;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Get the tool registry.
|
|
245
|
+
*/
|
|
246
|
+
getToolRegistry() {
|
|
247
|
+
return this.toolRegistry;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Get all registered providers.
|
|
251
|
+
* Returns a copy of the internal map to prevent direct mutation.
|
|
252
|
+
*/
|
|
253
|
+
getProviders() {
|
|
254
|
+
return new Map(this.providers);
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Set or replace the tool registry.
|
|
258
|
+
*/
|
|
259
|
+
setToolRegistry(registry) {
|
|
260
|
+
this.toolRegistry = registry;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Update tools config.
|
|
264
|
+
*/
|
|
265
|
+
setToolsConfig(config) {
|
|
266
|
+
this.toolsConfig = config;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Set the override system prompt directly via code.
|
|
270
|
+
*/
|
|
271
|
+
setSystemPrompt(prompt) {
|
|
272
|
+
this.overrideSystemPrompt = prompt;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Set the active mode. Pass null to clear.
|
|
276
|
+
*/
|
|
277
|
+
setMode(mode) {
|
|
278
|
+
this.activeMode = mode;
|
|
279
|
+
(0, provider_logger_1.log)(`[AIClient] Mode set to: ${mode ? mode.displayName : 'none (cleared)'}`);
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Get the currently active mode.
|
|
283
|
+
*/
|
|
284
|
+
getMode() {
|
|
285
|
+
return this.activeMode;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Re-index tools for BM25 search.
|
|
289
|
+
* Call this after adding/removing tools from the registry.
|
|
290
|
+
*/
|
|
291
|
+
reindexTools() {
|
|
292
|
+
if (this.toolRegistry) {
|
|
293
|
+
this.bm25Engine.index(this.toolRegistry.getAll());
|
|
294
|
+
(0, provider_logger_1.log)(`[AIClient] Re-indexed ${this.bm25Engine.getIndexedCount()} tools for BM25 search`);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Clear the tool discovery cache (call when starting a new conversation).
|
|
299
|
+
*/
|
|
300
|
+
clearToolDiscoveryCache() {
|
|
301
|
+
this.toolRouter.clearDiscoveryCache();
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* unified generate completion
|
|
305
|
+
* When tools are enabled and autoExecute is true, handles the full
|
|
306
|
+
* tool call → execute → send result → get final answer loop.
|
|
307
|
+
*/
|
|
308
|
+
async generate(request, providerName) {
|
|
309
|
+
const provider = this.getProvider(providerName);
|
|
310
|
+
try {
|
|
311
|
+
const requestId = newRequestId();
|
|
312
|
+
// System prompt injection chain (base → override → mode)
|
|
313
|
+
let modeAwareRequest = this.injectBaseAgentContext(request);
|
|
314
|
+
modeAwareRequest = this.injectOverrideSystemPrompt(modeAwareRequest);
|
|
315
|
+
modeAwareRequest = this.injectModeSystemPrompt(modeAwareRequest);
|
|
316
|
+
// Resolve tools to send with the request
|
|
317
|
+
const resolvedProviderName = providerName || this.defaultProvider;
|
|
318
|
+
const enrichedRequest = await this.enrichRequestWithTools(modeAwareRequest);
|
|
319
|
+
const policy = (process.env.TOOLPACK_SDK_TOOL_CHOICE_POLICY || this.toolsConfig.toolChoicePolicy || 'auto');
|
|
320
|
+
const hasTools = (enrichedRequest.tools?.length || 0) > 0;
|
|
321
|
+
const toolChoiceWasSet = enrichedRequest.tool_choice != null;
|
|
322
|
+
// Hybrid tool detection: regex first, then AI for follow-ups
|
|
323
|
+
let needsTools = inferNeedsTools(enrichedRequest.messages);
|
|
324
|
+
const intelligentDetection = this.toolsConfig.intelligentToolDetection;
|
|
325
|
+
let aiInferenceUsed = false;
|
|
326
|
+
if (!needsTools && intelligentDetection?.enabled && hasTools) {
|
|
327
|
+
const afterToolCall = isAfterToolCall(enrichedRequest.messages, intelligentDetection.maxFollowUpMessages);
|
|
328
|
+
if (afterToolCall) {
|
|
329
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] Message is after tool call, using AI to infer tool needs`);
|
|
330
|
+
const fastModel = getFastModelForProvider(resolvedProviderName || 'openai');
|
|
331
|
+
needsTools = await inferNeedsToolsWithAI(provider, resolvedProviderName || 'openai', enrichedRequest.messages, fastModel);
|
|
332
|
+
aiInferenceUsed = true;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
const lookupOnly = inferLookupOnly(enrichedRequest.messages);
|
|
336
|
+
const shouldForceRequired = !toolChoiceWasSet && hasTools && (policy === 'required' || (policy === 'required_for_actions' && needsTools));
|
|
337
|
+
const shouldForceNone = !toolChoiceWasSet && hasTools && aiInferenceUsed && !needsTools;
|
|
338
|
+
if (shouldForceRequired) {
|
|
339
|
+
enrichedRequest.tool_choice = 'required';
|
|
340
|
+
}
|
|
341
|
+
else if (shouldForceNone) {
|
|
342
|
+
enrichedRequest.tool_choice = 'none';
|
|
343
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] AI inference determined no tools needed, setting tool_choice=none`);
|
|
344
|
+
}
|
|
345
|
+
const providerClass = provider?.constructor?.name || 'UnknownProvider';
|
|
346
|
+
const outboundReq = { ...enrichedRequest, __toolpack_request_id: requestId };
|
|
347
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] generate() start provider=${resolvedProviderName} class=${providerClass} model=${enrichedRequest.model} messages=${enrichedRequest.messages.length} tools=${enrichedRequest.tools?.length || 0} tool_choice=${enrichedRequest.tool_choice ?? 'unset'} policy=${policy} needsTools=${needsTools} autoExecute=${this.toolsConfig.enabled && this.toolsConfig.autoExecute}`);
|
|
348
|
+
logRequestMessages(requestId, enrichedRequest.messages);
|
|
349
|
+
let response = await provider.generate(outboundReq);
|
|
350
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] generate() initial response finish_reason=${response.finish_reason ?? 'unknown'} tool_calls=${response.tool_calls?.length || 0} content_preview=${(0, provider_logger_1.safePreview)(response.content || '', 200)}`);
|
|
351
|
+
// Auto-execute tool call loop
|
|
352
|
+
if (this.toolsConfig.enabled && this.toolsConfig.autoExecute && this.toolRegistry) {
|
|
353
|
+
// Classify query to adjust maxToolRounds
|
|
354
|
+
const userMessage = extractLastUserText(enrichedRequest.messages);
|
|
355
|
+
const classification = this.queryClassifier.classify(userMessage);
|
|
356
|
+
const baseMaxRounds = this.toolsConfig.maxToolRounds;
|
|
357
|
+
const maxRounds = this.queryClassifier.getToolRoundsAdjustment(classification, baseMaxRounds);
|
|
358
|
+
if (maxRounds !== baseMaxRounds) {
|
|
359
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] Query classified as ${classification.type} (confidence: ${classification.confidence.toFixed(2)}), adjusted maxToolRounds: ${baseMaxRounds} → ${maxRounds}`);
|
|
360
|
+
}
|
|
361
|
+
else {
|
|
362
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] Query classified as ${classification.type} (confidence: ${classification.confidence.toFixed(2)}), keeping maxToolRounds: ${maxRounds}`);
|
|
363
|
+
}
|
|
364
|
+
let rounds = 0;
|
|
365
|
+
const messages = [...enrichedRequest.messages];
|
|
366
|
+
if (response.tool_calls && response.tool_calls.length > 0) {
|
|
367
|
+
(0, provider_logger_1.log)(`[AIClient] Received ${response.tool_calls.length} tool call(s): ${response.tool_calls.map(tc => tc.name).join(', ')}`);
|
|
368
|
+
}
|
|
369
|
+
while (response.tool_calls && response.tool_calls.length > 0 && rounds < maxRounds) {
|
|
370
|
+
rounds++;
|
|
371
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] generate() tool round ${rounds}/${maxRounds} tool_calls=${response.tool_calls.length}`);
|
|
372
|
+
// Add assistant message with tool calls to conversation
|
|
373
|
+
messages.push({
|
|
374
|
+
role: 'assistant',
|
|
375
|
+
content: response.content || '',
|
|
376
|
+
tool_calls: response.tool_calls.map(tc => ({
|
|
377
|
+
id: tc.id,
|
|
378
|
+
type: 'function',
|
|
379
|
+
function: {
|
|
380
|
+
name: tc.name,
|
|
381
|
+
arguments: JSON.stringify(tc.arguments),
|
|
382
|
+
},
|
|
383
|
+
})),
|
|
384
|
+
});
|
|
385
|
+
// Execute tools with smart parallel/sequential orchestration
|
|
386
|
+
const useParallel = this.toolOrchestrator.shouldUseParallelExecution(response.tool_calls);
|
|
387
|
+
// Apply fan-out limits for web.fetch to prevent context overflow
|
|
388
|
+
const MAX_WEB_FETCH_CALLS = 3;
|
|
389
|
+
let toolCallsToExecute = response.tool_calls;
|
|
390
|
+
const webFetchCalls = response.tool_calls.filter(tc => tc.name === 'web.fetch');
|
|
391
|
+
if (webFetchCalls.length > MAX_WEB_FETCH_CALLS) {
|
|
392
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] Limiting web.fetch calls from ${webFetchCalls.length} → ${MAX_WEB_FETCH_CALLS} to prevent context overflow`);
|
|
393
|
+
const limitedWebFetch = webFetchCalls.slice(0, MAX_WEB_FETCH_CALLS);
|
|
394
|
+
const otherCalls = response.tool_calls.filter(tc => tc.name !== 'web.fetch');
|
|
395
|
+
toolCallsToExecute = [...otherCalls, ...limitedWebFetch];
|
|
396
|
+
// Add placeholder responses for excluded web.fetch calls to avoid orphaned tool_call_ids
|
|
397
|
+
const excludedWebFetch = webFetchCalls.slice(MAX_WEB_FETCH_CALLS);
|
|
398
|
+
for (const tc of excludedWebFetch) {
|
|
399
|
+
messages.push({
|
|
400
|
+
role: 'tool',
|
|
401
|
+
tool_call_id: tc.id,
|
|
402
|
+
content: '[Skipped: web.fetch fan-out limit exceeded]',
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
// Track tool output budget for this round
|
|
407
|
+
const MAX_TOOL_OUTPUT_PER_ROUND = 50_000;
|
|
408
|
+
let roundOutputSize = 0;
|
|
409
|
+
if (useParallel) {
|
|
410
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] Using parallel execution for ${toolCallsToExecute.length} tools`);
|
|
411
|
+
const toolResults = await this.toolOrchestrator.executeWithDependencies(toolCallsToExecute, (toolCall) => this.executeTool(toolCall), 5 // maxConcurrent
|
|
412
|
+
);
|
|
413
|
+
// Add results in original order with budget tracking
|
|
414
|
+
let parallelBudgetExceeded = false;
|
|
415
|
+
for (const toolCall of toolCallsToExecute) {
|
|
416
|
+
if (parallelBudgetExceeded) {
|
|
417
|
+
messages.push({
|
|
418
|
+
role: 'tool',
|
|
419
|
+
tool_call_id: toolCall.id,
|
|
420
|
+
content: '[Skipped: tool output budget exceeded for this round]',
|
|
421
|
+
});
|
|
422
|
+
continue;
|
|
423
|
+
}
|
|
424
|
+
const result = toolResults.get(toolCall.id);
|
|
425
|
+
const resultStr = typeof result === 'string' ? result : JSON.stringify(result);
|
|
426
|
+
// Check budget before adding
|
|
427
|
+
if (roundOutputSize + resultStr.length > MAX_TOOL_OUTPUT_PER_ROUND) {
|
|
428
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] Tool output budget exceeded (${MAX_TOOL_OUTPUT_PER_ROUND} chars), adding placeholder for remaining tools`);
|
|
429
|
+
messages.push({
|
|
430
|
+
role: 'tool',
|
|
431
|
+
tool_call_id: toolCall.id,
|
|
432
|
+
content: '[Skipped: tool output budget exceeded for this round]',
|
|
433
|
+
});
|
|
434
|
+
parallelBudgetExceeded = true;
|
|
435
|
+
continue;
|
|
436
|
+
}
|
|
437
|
+
const content = typeof result === 'string' && result.length > TOOL_RESULT_MAX_CHARS
|
|
438
|
+
? `${result.slice(0, TOOL_RESULT_MAX_CHARS)}\n[TRUNCATED tool result: ${result.length} chars]`
|
|
439
|
+
: result;
|
|
440
|
+
const contentStr = typeof content === 'string' ? content : JSON.stringify(content);
|
|
441
|
+
roundOutputSize += contentStr.length;
|
|
442
|
+
messages.push({
|
|
443
|
+
role: 'tool',
|
|
444
|
+
tool_call_id: toolCall.id,
|
|
445
|
+
content,
|
|
446
|
+
});
|
|
447
|
+
}
|
|
448
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] Round tool output size: ${roundOutputSize} chars (budget: ${MAX_TOOL_OUTPUT_PER_ROUND})`);
|
|
449
|
+
}
|
|
450
|
+
else {
|
|
451
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] Using sequential execution for ${toolCallsToExecute.length} tools`);
|
|
452
|
+
// Sequential execution with budget tracking
|
|
453
|
+
let seqBudgetExceeded = false;
|
|
454
|
+
for (const toolCall of toolCallsToExecute) {
|
|
455
|
+
if (seqBudgetExceeded) {
|
|
456
|
+
messages.push({
|
|
457
|
+
role: 'tool',
|
|
458
|
+
tool_call_id: toolCall.id,
|
|
459
|
+
content: '[Skipped: tool output budget exceeded for this round]',
|
|
460
|
+
});
|
|
461
|
+
continue;
|
|
462
|
+
}
|
|
463
|
+
const result = await this.executeTool(toolCall);
|
|
464
|
+
const resultStr = typeof result === 'string' ? result : JSON.stringify(result);
|
|
465
|
+
// Check budget before adding
|
|
466
|
+
if (roundOutputSize + resultStr.length > MAX_TOOL_OUTPUT_PER_ROUND) {
|
|
467
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] Tool output budget exceeded (${MAX_TOOL_OUTPUT_PER_ROUND} chars), adding placeholder for remaining tools`);
|
|
468
|
+
messages.push({
|
|
469
|
+
role: 'tool',
|
|
470
|
+
tool_call_id: toolCall.id,
|
|
471
|
+
content: '[Skipped: tool output budget exceeded for this round]',
|
|
472
|
+
});
|
|
473
|
+
seqBudgetExceeded = true;
|
|
474
|
+
continue;
|
|
475
|
+
}
|
|
476
|
+
const content = typeof result === 'string' && result.length > TOOL_RESULT_MAX_CHARS
|
|
477
|
+
? `${result.slice(0, TOOL_RESULT_MAX_CHARS)}\n[TRUNCATED tool result: ${result.length} chars]`
|
|
478
|
+
: result;
|
|
479
|
+
const contentStr = typeof content === 'string' ? content : JSON.stringify(content);
|
|
480
|
+
roundOutputSize += contentStr.length;
|
|
481
|
+
messages.push({
|
|
482
|
+
role: 'tool',
|
|
483
|
+
tool_call_id: toolCall.id,
|
|
484
|
+
content,
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] Round tool output size: ${roundOutputSize} chars (budget: ${MAX_TOOL_OUTPUT_PER_ROUND})`);
|
|
488
|
+
}
|
|
489
|
+
// Call the model again with updated messages
|
|
490
|
+
const rawFollowupReq = { ...enrichedRequest, messages, __toolpack_request_id: requestId };
|
|
491
|
+
// Re-enrich to include any tools discovered in the previous round
|
|
492
|
+
const followupReq = await this.enrichRequestWithTools(rawFollowupReq);
|
|
493
|
+
if (followupReq.tool_choice === 'required') {
|
|
494
|
+
followupReq.tool_choice = lookupOnly ? 'none' : 'auto';
|
|
495
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] generate() followup tool_choice override required->${followupReq.tool_choice}`);
|
|
496
|
+
}
|
|
497
|
+
if ((0, provider_logger_1.isVerbose)()) {
|
|
498
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] generate() followup request messages=${messages.length}`);
|
|
499
|
+
logRequestMessages(requestId, messages);
|
|
500
|
+
}
|
|
501
|
+
response = await provider.generate(followupReq);
|
|
502
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] generate() followup response finish_reason=${response.finish_reason ?? 'unknown'} tool_calls=${response.tool_calls?.length || 0} content_preview=${(0, provider_logger_1.safePreview)(response.content || '', 200)}`);
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
return response;
|
|
506
|
+
}
|
|
507
|
+
catch (error) {
|
|
508
|
+
throw this.wrapError(error);
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
/**
|
|
512
|
+
* unified stream completion
|
|
513
|
+
* When tools are enabled and autoExecute is true, handles tool calls
|
|
514
|
+
* by collecting them, executing, and re-calling the model.
|
|
515
|
+
*/
|
|
516
|
+
async *stream(request, providerName) {
|
|
517
|
+
const provider = this.getProvider(providerName);
|
|
518
|
+
try {
|
|
519
|
+
const requestId = newRequestId();
|
|
520
|
+
const resolvedProviderName = providerName || this.defaultProvider;
|
|
521
|
+
// System prompt injection chain (base → override → mode)
|
|
522
|
+
let modeAwareRequest = this.injectBaseAgentContext(request);
|
|
523
|
+
modeAwareRequest = this.injectOverrideSystemPrompt(modeAwareRequest);
|
|
524
|
+
modeAwareRequest = this.injectModeSystemPrompt(modeAwareRequest);
|
|
525
|
+
const enrichedRequest = await this.enrichRequestWithTools(modeAwareRequest);
|
|
526
|
+
const policy = (process.env.TOOLPACK_SDK_TOOL_CHOICE_POLICY || this.toolsConfig.toolChoicePolicy || 'auto');
|
|
527
|
+
const hasTools = (enrichedRequest.tools?.length || 0) > 0;
|
|
528
|
+
const toolChoiceWasSet = enrichedRequest.tool_choice != null;
|
|
529
|
+
// Hybrid tool detection: regex first, then AI for follow-ups
|
|
530
|
+
let needsTools = inferNeedsTools(enrichedRequest.messages);
|
|
531
|
+
const intelligentDetection = this.toolsConfig.intelligentToolDetection;
|
|
532
|
+
let aiInferenceUsed = false;
|
|
533
|
+
if (!needsTools && intelligentDetection?.enabled && hasTools) {
|
|
534
|
+
const afterToolCall = isAfterToolCall(enrichedRequest.messages, intelligentDetection.maxFollowUpMessages);
|
|
535
|
+
if (afterToolCall) {
|
|
536
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] Message is after tool call, using AI to infer tool needs`);
|
|
537
|
+
const fastModel = getFastModelForProvider(resolvedProviderName || 'openai');
|
|
538
|
+
needsTools = await inferNeedsToolsWithAI(provider, resolvedProviderName || 'openai', enrichedRequest.messages, fastModel);
|
|
539
|
+
aiInferenceUsed = true;
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
const lookupOnly = inferLookupOnly(enrichedRequest.messages);
|
|
543
|
+
const shouldForceRequired = !toolChoiceWasSet && hasTools && (policy === 'required' || (policy === 'required_for_actions' && needsTools));
|
|
544
|
+
const shouldForceNone = !toolChoiceWasSet && hasTools && aiInferenceUsed && !needsTools;
|
|
545
|
+
if (shouldForceRequired) {
|
|
546
|
+
enrichedRequest.tool_choice = 'required';
|
|
547
|
+
}
|
|
548
|
+
else if (shouldForceNone) {
|
|
549
|
+
enrichedRequest.tool_choice = 'none';
|
|
550
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] AI inference determined no tools needed, setting tool_choice=none`);
|
|
551
|
+
}
|
|
552
|
+
const providerClass = provider?.constructor?.name || 'UnknownProvider';
|
|
553
|
+
const baseReq = { ...enrichedRequest, __toolpack_request_id: requestId };
|
|
554
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] stream() start provider=${resolvedProviderName} class=${providerClass} model=${enrichedRequest.model} messages=${enrichedRequest.messages.length} tools=${enrichedRequest.tools?.length || 0} tool_choice=${enrichedRequest.tool_choice ?? 'unset'} policy=${policy} needsTools=${needsTools} autoExecute=${this.toolsConfig.enabled && this.toolsConfig.autoExecute}`);
|
|
555
|
+
logRequestMessages(requestId, enrichedRequest.messages);
|
|
556
|
+
if (!this.toolsConfig.enabled || !this.toolsConfig.autoExecute || !this.toolRegistry) {
|
|
557
|
+
yield* provider.stream(baseReq);
|
|
558
|
+
return;
|
|
559
|
+
}
|
|
560
|
+
const messages = [...enrichedRequest.messages];
|
|
561
|
+
let rounds = 0;
|
|
562
|
+
// Classify query to adjust maxToolRounds (same as generate())
|
|
563
|
+
const userMessage = extractLastUserText(enrichedRequest.messages);
|
|
564
|
+
const classification = this.queryClassifier.classify(userMessage);
|
|
565
|
+
const baseMaxRounds = this.toolsConfig.maxToolRounds;
|
|
566
|
+
const maxRounds = this.queryClassifier.getToolRoundsAdjustment(classification, baseMaxRounds);
|
|
567
|
+
if (maxRounds !== baseMaxRounds) {
|
|
568
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] stream() Query classified as ${classification.type} (confidence: ${classification.confidence.toFixed(2)}), adjusted maxToolRounds: ${baseMaxRounds} → ${maxRounds}`);
|
|
569
|
+
}
|
|
570
|
+
while (rounds <= maxRounds) {
|
|
571
|
+
// Check for abort signal at start of each round
|
|
572
|
+
if (request.signal?.aborted) {
|
|
573
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] stream() aborted by signal`);
|
|
574
|
+
return;
|
|
575
|
+
}
|
|
576
|
+
let accumulatedContent = '';
|
|
577
|
+
const pendingToolCalls = [];
|
|
578
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] stream() round_start ${rounds + 1}/${maxRounds}`);
|
|
579
|
+
let lastFinishReason = null;
|
|
580
|
+
const rawRoundReq = { ...baseReq, messages };
|
|
581
|
+
// Re-enrich to include any newly discovered tools from previous rounds
|
|
582
|
+
const roundReq = await this.enrichRequestWithTools(rawRoundReq);
|
|
583
|
+
if (rounds > 0 && roundReq.tool_choice === 'required') {
|
|
584
|
+
roundReq.tool_choice = lookupOnly ? 'none' : 'auto';
|
|
585
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] stream() round_${rounds + 1} tool_choice override required->${roundReq.tool_choice}`);
|
|
586
|
+
}
|
|
587
|
+
for await (const chunk of provider.stream(roundReq)) {
|
|
588
|
+
// Check for abort signal during streaming
|
|
589
|
+
if (request.signal?.aborted) {
|
|
590
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] stream() aborted by signal during chunk processing`);
|
|
591
|
+
return;
|
|
592
|
+
}
|
|
593
|
+
if (chunk.tool_calls && chunk.tool_calls.length > 0) {
|
|
594
|
+
pendingToolCalls.push(...chunk.tool_calls);
|
|
595
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] stream() tool_calls_chunk count=${chunk.tool_calls.length} names=${chunk.tool_calls.map(tc => tc.name).join(', ')}`);
|
|
596
|
+
// Yield tool calls in the chunk so consumers can track them
|
|
597
|
+
yield chunk;
|
|
598
|
+
}
|
|
599
|
+
if (chunk.delta) {
|
|
600
|
+
accumulatedContent += chunk.delta;
|
|
601
|
+
yield chunk;
|
|
602
|
+
}
|
|
603
|
+
if (chunk.finish_reason) {
|
|
604
|
+
lastFinishReason = chunk.finish_reason;
|
|
605
|
+
}
|
|
606
|
+
if (chunk.finish_reason === 'stop') {
|
|
607
|
+
yield chunk;
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] stream() round_end finish_reason=${lastFinishReason ?? 'unknown'} accumulated_len=${accumulatedContent.length} tool_calls_total=${pendingToolCalls.length} content_preview=${(0, provider_logger_1.safePreview)(accumulatedContent, 200)}`);
|
|
611
|
+
// If no tool calls, we're done
|
|
612
|
+
if (pendingToolCalls.length === 0) {
|
|
613
|
+
break;
|
|
614
|
+
}
|
|
615
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] stream() received ${pendingToolCalls.length} tool call(s): ${pendingToolCalls.map(tc => tc.name).join(', ')}`);
|
|
616
|
+
rounds++;
|
|
617
|
+
if (rounds > maxRounds) {
|
|
618
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] stream() max tool rounds (${maxRounds}) reached`);
|
|
619
|
+
break;
|
|
620
|
+
}
|
|
621
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] stream() tool round ${rounds}/${maxRounds}`);
|
|
622
|
+
// Add assistant message and tool results to conversation
|
|
623
|
+
messages.push({
|
|
624
|
+
role: 'assistant',
|
|
625
|
+
content: accumulatedContent || '',
|
|
626
|
+
tool_calls: pendingToolCalls.map(tc => ({
|
|
627
|
+
id: tc.id,
|
|
628
|
+
type: 'function',
|
|
629
|
+
function: {
|
|
630
|
+
name: tc.name,
|
|
631
|
+
arguments: JSON.stringify(tc.arguments),
|
|
632
|
+
},
|
|
633
|
+
})),
|
|
634
|
+
});
|
|
635
|
+
// Apply fan-out limits for web.fetch to prevent context overflow
|
|
636
|
+
const MAX_WEB_FETCH_CALLS = 3;
|
|
637
|
+
let toolCallsToExecute = pendingToolCalls;
|
|
638
|
+
const webFetchCalls = pendingToolCalls.filter(tc => tc.name === 'web.fetch');
|
|
639
|
+
if (webFetchCalls.length > MAX_WEB_FETCH_CALLS) {
|
|
640
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] Limiting web.fetch calls from ${webFetchCalls.length} → ${MAX_WEB_FETCH_CALLS} to prevent context overflow`);
|
|
641
|
+
const limitedWebFetch = webFetchCalls.slice(0, MAX_WEB_FETCH_CALLS);
|
|
642
|
+
const otherCalls = pendingToolCalls.filter(tc => tc.name !== 'web.fetch');
|
|
643
|
+
toolCallsToExecute = [...otherCalls, ...limitedWebFetch];
|
|
644
|
+
// Add placeholder responses for excluded web.fetch calls to avoid orphaned tool_call_ids
|
|
645
|
+
const excludedWebFetch = webFetchCalls.slice(MAX_WEB_FETCH_CALLS);
|
|
646
|
+
for (const tc of excludedWebFetch) {
|
|
647
|
+
messages.push({
|
|
648
|
+
role: 'tool',
|
|
649
|
+
tool_call_id: tc.id,
|
|
650
|
+
content: '[Skipped: web.fetch fan-out limit exceeded]',
|
|
651
|
+
});
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
// Track tool output budget for this round
|
|
655
|
+
const MAX_TOOL_OUTPUT_PER_ROUND = 50_000;
|
|
656
|
+
let roundOutputSize = 0;
|
|
657
|
+
let budgetExceeded = false;
|
|
658
|
+
// Collect heartbeat chunks to yield while tools execute
|
|
659
|
+
const heartbeatChunks = [];
|
|
660
|
+
for (const toolCall of toolCallsToExecute) {
|
|
661
|
+
if (budgetExceeded) {
|
|
662
|
+
// Still must add a tool response for every tool_call to satisfy OpenAI API
|
|
663
|
+
messages.push({
|
|
664
|
+
role: 'tool',
|
|
665
|
+
tool_call_id: toolCall.id,
|
|
666
|
+
content: '[Skipped: tool output budget exceeded for this round]',
|
|
667
|
+
});
|
|
668
|
+
continue;
|
|
669
|
+
}
|
|
670
|
+
const startTime = Date.now();
|
|
671
|
+
// Execute tool with heartbeat: yield empty chunks periodically
|
|
672
|
+
// so UI consumers (e.g. terminal animations) stay alive
|
|
673
|
+
let toolDone = false;
|
|
674
|
+
const heartbeatInterval = setInterval(() => {
|
|
675
|
+
if (!toolDone)
|
|
676
|
+
heartbeatChunks.push({ delta: '' });
|
|
677
|
+
}, 500);
|
|
678
|
+
const result = await this.executeTool(toolCall);
|
|
679
|
+
toolDone = true;
|
|
680
|
+
clearInterval(heartbeatInterval);
|
|
681
|
+
const duration = Date.now() - startTime;
|
|
682
|
+
// Yield any queued heartbeat chunks
|
|
683
|
+
while (heartbeatChunks.length > 0) {
|
|
684
|
+
yield heartbeatChunks.shift();
|
|
685
|
+
}
|
|
686
|
+
// Extra yield point for event loop
|
|
687
|
+
await new Promise(resolve => setTimeout(resolve, 0));
|
|
688
|
+
const resultStr = typeof result === 'string' ? result : JSON.stringify(result);
|
|
689
|
+
// Check budget before adding
|
|
690
|
+
if (roundOutputSize + resultStr.length > MAX_TOOL_OUTPUT_PER_ROUND) {
|
|
691
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] Tool output budget exceeded (${MAX_TOOL_OUTPUT_PER_ROUND} chars), adding placeholder for remaining tools`);
|
|
692
|
+
messages.push({
|
|
693
|
+
role: 'tool',
|
|
694
|
+
tool_call_id: toolCall.id,
|
|
695
|
+
content: '[Skipped: tool output budget exceeded for this round]',
|
|
696
|
+
});
|
|
697
|
+
budgetExceeded = true;
|
|
698
|
+
continue;
|
|
699
|
+
}
|
|
700
|
+
const content = typeof result === 'string' && result.length > TOOL_RESULT_MAX_CHARS
|
|
701
|
+
? `${result.slice(0, TOOL_RESULT_MAX_CHARS)}\n[TRUNCATED tool result: ${result.length} chars]`
|
|
702
|
+
: result;
|
|
703
|
+
const contentStr = typeof content === 'string' ? content : JSON.stringify(content);
|
|
704
|
+
roundOutputSize += contentStr.length;
|
|
705
|
+
messages.push({
|
|
706
|
+
role: 'tool',
|
|
707
|
+
tool_call_id: toolCall.id,
|
|
708
|
+
content,
|
|
709
|
+
});
|
|
710
|
+
// Yield a chunk with the tool result so consumers can track it
|
|
711
|
+
yield {
|
|
712
|
+
delta: '',
|
|
713
|
+
tool_calls: [{
|
|
714
|
+
...toolCall,
|
|
715
|
+
result: typeof content === 'string' ? content : JSON.stringify(content),
|
|
716
|
+
duration,
|
|
717
|
+
}],
|
|
718
|
+
};
|
|
719
|
+
}
|
|
720
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] Round tool output size: ${roundOutputSize} chars (budget: ${MAX_TOOL_OUTPUT_PER_ROUND})`);
|
|
721
|
+
if ((0, provider_logger_1.isVerbose)()) {
|
|
722
|
+
(0, provider_logger_1.log)(`[AIClient][${requestId}] stream() after_tools messages=${messages.length}`);
|
|
723
|
+
logRequestMessages(requestId, messages);
|
|
724
|
+
}
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
catch (error) {
|
|
728
|
+
throw this.wrapError(error);
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
/**
|
|
732
|
+
* unified embed
|
|
733
|
+
*/
|
|
734
|
+
async embed(request, providerName) {
|
|
735
|
+
const provider = this.getProvider(providerName);
|
|
736
|
+
try {
|
|
737
|
+
return await provider.embed(request);
|
|
738
|
+
}
|
|
739
|
+
catch (error) {
|
|
740
|
+
throw this.wrapError(error);
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
/**
|
|
744
|
+
* Enrich a request with tools based on the router config.
|
|
745
|
+
* Applies mode-based tool filtering when an active mode is set.
|
|
746
|
+
*/
|
|
747
|
+
async enrichRequestWithTools(request) {
|
|
748
|
+
// If mode blocks ALL tools, return request with no tools
|
|
749
|
+
if (this.activeMode?.blockAllTools) {
|
|
750
|
+
(0, provider_logger_1.log)(`[AIClient] Mode "${this.activeMode.displayName}" blocks all tools`);
|
|
751
|
+
return request;
|
|
752
|
+
}
|
|
753
|
+
if (!this.toolsConfig.enabled || !this.toolRegistry) {
|
|
754
|
+
(0, provider_logger_1.log)(`[AIClient] Tools disabled or no registry`);
|
|
755
|
+
return request;
|
|
756
|
+
}
|
|
757
|
+
// Merge mode-specific tool search config with global config
|
|
758
|
+
let resolvedToolsConfig = this.toolsConfig;
|
|
759
|
+
if (this.activeMode?.toolSearch && this.toolsConfig.toolSearch) {
|
|
760
|
+
resolvedToolsConfig = {
|
|
761
|
+
...this.toolsConfig,
|
|
762
|
+
toolSearch: {
|
|
763
|
+
...this.toolsConfig.toolSearch,
|
|
764
|
+
...(this.activeMode.toolSearch.enabled !== undefined ? { enabled: this.activeMode.toolSearch.enabled } : {}),
|
|
765
|
+
...(this.activeMode.toolSearch.alwaysLoadedTools ? { alwaysLoadedTools: this.activeMode.toolSearch.alwaysLoadedTools } : {}),
|
|
766
|
+
...(this.activeMode.toolSearch.alwaysLoadedCategories ? { alwaysLoadedCategories: this.activeMode.toolSearch.alwaysLoadedCategories } : {}),
|
|
767
|
+
}
|
|
768
|
+
};
|
|
769
|
+
(0, provider_logger_1.log)(`[AIClient] Merged mode toolSearch config: enabled=${resolvedToolsConfig.toolSearch?.enabled}, alwaysLoadedTools=${resolvedToolsConfig.toolSearch?.alwaysLoadedTools?.length || 0}`);
|
|
770
|
+
}
|
|
771
|
+
// If the request already has tools, only add newly discovered tools when tool.search mode is enabled
|
|
772
|
+
if (request.tools && request.tools.length > 0) {
|
|
773
|
+
if (!resolvedToolsConfig.toolSearch?.enabled || !this.toolRegistry) {
|
|
774
|
+
(0, provider_logger_1.log)(`[AIClient] Request already has ${request.tools.length} tools`);
|
|
775
|
+
return request;
|
|
776
|
+
}
|
|
777
|
+
let schemas = await this.toolRouter.resolve(request.messages, this.toolRegistry, resolvedToolsConfig);
|
|
778
|
+
(0, provider_logger_1.log)(`[AIClient] Resolved ${schemas.length} tools to send: ${schemas.map(s => s.name).join(', ') || 'none'}`);
|
|
779
|
+
if (this.activeMode && schemas.length > 0) {
|
|
780
|
+
const beforeCount = schemas.length;
|
|
781
|
+
schemas = this.filterSchemasByMode(schemas, this.activeMode);
|
|
782
|
+
const filteredCount = beforeCount - schemas.length;
|
|
783
|
+
if (filteredCount > 0) {
|
|
784
|
+
(0, provider_logger_1.log)(`[AIClient] Mode "${this.activeMode.displayName}" filtered out ${filteredCount} tools`);
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
const existingToolNames = new Set(request.tools.map(tool => tool.function.name));
|
|
788
|
+
const newTools = schemas
|
|
789
|
+
.filter(schema => !existingToolNames.has(schema.name))
|
|
790
|
+
.map(schema => ({
|
|
791
|
+
type: 'function',
|
|
792
|
+
function: {
|
|
793
|
+
name: schema.name,
|
|
794
|
+
description: schema.description,
|
|
795
|
+
parameters: schema.parameters,
|
|
796
|
+
},
|
|
797
|
+
}));
|
|
798
|
+
if (newTools.length === 0) {
|
|
799
|
+
(0, provider_logger_1.log)(`[AIClient] Request already has ${request.tools.length} tools (no new discoveries)`);
|
|
800
|
+
return request;
|
|
801
|
+
}
|
|
802
|
+
let enrichedRequest = {
|
|
803
|
+
...request,
|
|
804
|
+
tools: [...request.tools, ...newTools],
|
|
805
|
+
};
|
|
806
|
+
if (resolvedToolsConfig.toolSearch?.enabled && this.toolRegistry) {
|
|
807
|
+
enrichedRequest = this.injectToolSearchPrompt(enrichedRequest);
|
|
808
|
+
}
|
|
809
|
+
return enrichedRequest;
|
|
810
|
+
}
|
|
811
|
+
let schemas = await this.toolRouter.resolve(request.messages, this.toolRegistry, resolvedToolsConfig);
|
|
812
|
+
(0, provider_logger_1.log)(`[AIClient] Resolved ${schemas.length} tools to send: ${schemas.map(s => s.name).join(', ') || 'none'}`);
|
|
813
|
+
// Apply mode-based filtering
|
|
814
|
+
if (this.activeMode && schemas.length > 0) {
|
|
815
|
+
const beforeCount = schemas.length;
|
|
816
|
+
schemas = this.filterSchemasByMode(schemas, this.activeMode);
|
|
817
|
+
const filteredCount = beforeCount - schemas.length;
|
|
818
|
+
if (filteredCount > 0) {
|
|
819
|
+
(0, provider_logger_1.log)(`[AIClient] Mode "${this.activeMode.displayName}" filtered out ${filteredCount} tools`);
|
|
820
|
+
}
|
|
821
|
+
}
|
|
822
|
+
if (schemas.length === 0) {
|
|
823
|
+
return request;
|
|
824
|
+
}
|
|
825
|
+
const tools = schemas.map(s => ({
|
|
826
|
+
type: 'function',
|
|
827
|
+
function: {
|
|
828
|
+
name: s.name,
|
|
829
|
+
description: s.description,
|
|
830
|
+
parameters: s.parameters,
|
|
831
|
+
},
|
|
832
|
+
}));
|
|
833
|
+
let enrichedRequest = { ...request, tools };
|
|
834
|
+
// Inject Tool Search system prompt if enabled
|
|
835
|
+
if (this.toolsConfig.toolSearch?.enabled && this.toolRegistry) {
|
|
836
|
+
enrichedRequest = this.injectToolSearchPrompt(enrichedRequest);
|
|
837
|
+
}
|
|
838
|
+
return enrichedRequest;
|
|
839
|
+
}
|
|
840
|
+
/**
|
|
841
|
+
* Filter tool schemas based on mode permissions.
|
|
842
|
+
* blockedTools/blockedToolCategories always take precedence.
|
|
843
|
+
*/
|
|
844
|
+
filterSchemasByMode(schemas, mode) {
|
|
845
|
+
return schemas.filter(schema => {
|
|
846
|
+
// Check explicit blocks first (highest priority)
|
|
847
|
+
if (mode.blockedTools.includes(schema.name))
|
|
848
|
+
return false;
|
|
849
|
+
if (mode.blockedToolCategories.includes(schema.category))
|
|
850
|
+
return false;
|
|
851
|
+
// If allowlists are specified, tool must match at least one
|
|
852
|
+
const hasAllowedTools = mode.allowedTools.length > 0;
|
|
853
|
+
const hasAllowedCategories = mode.allowedToolCategories.length > 0;
|
|
854
|
+
if (hasAllowedTools || hasAllowedCategories) {
|
|
855
|
+
const nameAllowed = hasAllowedTools && mode.allowedTools.includes(schema.name);
|
|
856
|
+
const categoryAllowed = hasAllowedCategories && mode.allowedToolCategories.includes(schema.category);
|
|
857
|
+
return nameAllowed || categoryAllowed;
|
|
858
|
+
}
|
|
859
|
+
// No allowlists = everything is allowed (minus blocks)
|
|
860
|
+
return true;
|
|
861
|
+
});
|
|
862
|
+
}
|
|
863
|
+
/**
|
|
864
|
+
* Inject the active mode's system prompt into the request messages.
|
|
865
|
+
* For the "All" mode (empty systemPrompt), this is a no-op.
|
|
866
|
+
*/
|
|
867
|
+
injectModeSystemPrompt(request) {
|
|
868
|
+
if (!this.activeMode || !this.activeMode.systemPrompt) {
|
|
869
|
+
(0, provider_logger_1.log)(`[AIClient] injectModeSystemPrompt: No active mode or empty systemPrompt. activeMode=${this.activeMode?.name}, systemPrompt=${this.activeMode?.systemPrompt?.substring(0, 50)}`);
|
|
870
|
+
return request;
|
|
871
|
+
}
|
|
872
|
+
const modePrompt = this.activeMode.systemPrompt;
|
|
873
|
+
(0, provider_logger_1.log)(`[AIClient] injectModeSystemPrompt: Injecting mode prompt for ${this.activeMode.name}, length=${modePrompt.length}`);
|
|
874
|
+
const hasSystemMessage = request.messages.some(m => m.role === 'system');
|
|
875
|
+
if (hasSystemMessage) {
|
|
876
|
+
// Prepend mode prompt to existing system message
|
|
877
|
+
const messages = request.messages.map(m => {
|
|
878
|
+
if (m.role === 'system') {
|
|
879
|
+
const existingContent = typeof m.content === 'string' ? m.content : '';
|
|
880
|
+
return {
|
|
881
|
+
...m,
|
|
882
|
+
content: `${existingContent}\n\n${modePrompt}`
|
|
883
|
+
};
|
|
884
|
+
}
|
|
885
|
+
return m;
|
|
886
|
+
});
|
|
887
|
+
return { ...request, messages };
|
|
888
|
+
}
|
|
889
|
+
else {
|
|
890
|
+
return {
|
|
891
|
+
...request,
|
|
892
|
+
messages: [
|
|
893
|
+
{ role: 'system', content: modePrompt },
|
|
894
|
+
...request.messages
|
|
895
|
+
]
|
|
896
|
+
};
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
/**
|
|
900
|
+
* Inject the overriding system prompt (from AIClientConfig) into the request.
|
|
901
|
+
*/
|
|
902
|
+
injectOverrideSystemPrompt(request) {
|
|
903
|
+
if (!this.overrideSystemPrompt) {
|
|
904
|
+
return request;
|
|
905
|
+
}
|
|
906
|
+
const prompt = this.overrideSystemPrompt;
|
|
907
|
+
const hasSystemMessage = request.messages.some(m => m.role === 'system');
|
|
908
|
+
if (hasSystemMessage) {
|
|
909
|
+
const messages = request.messages.map(m => {
|
|
910
|
+
if (m.role === 'system') {
|
|
911
|
+
const existingContent = typeof m.content === 'string' ? m.content : '';
|
|
912
|
+
return {
|
|
913
|
+
...m,
|
|
914
|
+
content: `${existingContent}\n\n${prompt}`
|
|
915
|
+
};
|
|
916
|
+
}
|
|
917
|
+
return m;
|
|
918
|
+
});
|
|
919
|
+
return { ...request, messages };
|
|
920
|
+
}
|
|
921
|
+
else {
|
|
922
|
+
return {
|
|
923
|
+
...request,
|
|
924
|
+
messages: [{ role: 'system', content: prompt }, ...request.messages]
|
|
925
|
+
};
|
|
926
|
+
}
|
|
927
|
+
}
|
|
928
|
+
/**
|
|
929
|
+
* Inject the Base Agent Context into the request.
|
|
930
|
+
* Tells the agent its CWD, tools, and to be proactive.
|
|
931
|
+
*/
|
|
932
|
+
injectBaseAgentContext(request) {
|
|
933
|
+
// Check if active mode has per-mode baseContext config
|
|
934
|
+
let includeWd = true;
|
|
935
|
+
let includeCategories = true;
|
|
936
|
+
let customContext;
|
|
937
|
+
const disabled = this.disableBaseContext;
|
|
938
|
+
if (this.activeMode?.baseContext === false) {
|
|
939
|
+
// Mode explicitly disables base context entirely
|
|
940
|
+
return request;
|
|
941
|
+
}
|
|
942
|
+
else if (this.activeMode?.baseContext) {
|
|
943
|
+
// Mode has fine-grained base context config
|
|
944
|
+
includeWd = this.activeMode.baseContext.includeWorkingDirectory !== false;
|
|
945
|
+
includeCategories = this.activeMode.baseContext.includeToolCategories !== false;
|
|
946
|
+
customContext = this.activeMode.baseContext.custom;
|
|
947
|
+
}
|
|
948
|
+
const baseContext = customContext || (0, base_agent_context_js_1.generateBaseAgentContext)({
|
|
949
|
+
workingDirectory: process.cwd(),
|
|
950
|
+
toolCategories: this.toolRegistry ? this.toolRegistry.getCategories() : [],
|
|
951
|
+
disabled,
|
|
952
|
+
includeWorkingDirectory: includeWd,
|
|
953
|
+
includeToolCategories: includeCategories,
|
|
954
|
+
});
|
|
955
|
+
if (!baseContext) {
|
|
956
|
+
return request;
|
|
957
|
+
}
|
|
958
|
+
const hasSystemMessage = request.messages.some(m => m.role === 'system');
|
|
959
|
+
if (hasSystemMessage) {
|
|
960
|
+
const messages = request.messages.map(m => {
|
|
961
|
+
if (m.role === 'system') {
|
|
962
|
+
const existingContent = typeof m.content === 'string' ? m.content : '';
|
|
963
|
+
return {
|
|
964
|
+
...m,
|
|
965
|
+
content: `${baseContext}\n\n${existingContent}`
|
|
966
|
+
};
|
|
967
|
+
}
|
|
968
|
+
return m;
|
|
969
|
+
});
|
|
970
|
+
return { ...request, messages };
|
|
971
|
+
}
|
|
972
|
+
else {
|
|
973
|
+
return {
|
|
974
|
+
...request,
|
|
975
|
+
messages: [{ role: 'system', content: baseContext }, ...request.messages]
|
|
976
|
+
};
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
/**
|
|
980
|
+
* Inject Tool Search system prompt to guide AI to use tool.search.
|
|
981
|
+
*/
|
|
982
|
+
injectToolSearchPrompt(request) {
|
|
983
|
+
if (!this.toolRegistry)
|
|
984
|
+
return request;
|
|
985
|
+
// Check if system message already exists
|
|
986
|
+
const hasSystemMessage = request.messages.some(m => m.role === 'system');
|
|
987
|
+
const toolSearchInstructions = `
|
|
988
|
+
IMPORTANT: Tool Discovery Instructions
|
|
989
|
+
|
|
990
|
+
You have access to a limited set of tools. If you need a tool that is not in your current list, you MUST use the 'tool.search' tool to discover it.
|
|
991
|
+
|
|
992
|
+
${(0, index_js_1.generateToolCategoriesPrompt)(this.toolRegistry)}
|
|
993
|
+
|
|
994
|
+
When you need a tool:
|
|
995
|
+
1. Check if it's in your current tool list
|
|
996
|
+
2. If NOT found, call tool.search with a descriptive query (e.g., "delete file", "run command", "http request")
|
|
997
|
+
3. After discovering tools, you can call them directly in subsequent turns
|
|
998
|
+
|
|
999
|
+
NEVER guess or hallucinate tool names. ALWAYS use tool.search to discover tools you don't have.
|
|
1000
|
+
`.trim();
|
|
1001
|
+
if (hasSystemMessage) {
|
|
1002
|
+
// Append to existing system message
|
|
1003
|
+
const messages = request.messages.map(m => {
|
|
1004
|
+
if (m.role === 'system') {
|
|
1005
|
+
const existingContent = typeof m.content === 'string' ? m.content : '';
|
|
1006
|
+
return {
|
|
1007
|
+
...m,
|
|
1008
|
+
content: `${existingContent}\n\n${toolSearchInstructions}`
|
|
1009
|
+
};
|
|
1010
|
+
}
|
|
1011
|
+
return m;
|
|
1012
|
+
});
|
|
1013
|
+
return { ...request, messages };
|
|
1014
|
+
}
|
|
1015
|
+
else {
|
|
1016
|
+
// Prepend new system message
|
|
1017
|
+
return {
|
|
1018
|
+
...request,
|
|
1019
|
+
messages: [
|
|
1020
|
+
{ role: 'system', content: toolSearchInstructions },
|
|
1021
|
+
...request.messages
|
|
1022
|
+
]
|
|
1023
|
+
};
|
|
1024
|
+
}
|
|
1025
|
+
}
|
|
1026
|
+
/**
|
|
1027
|
+
* Execute a single tool call via the registry.
|
|
1028
|
+
* Emits 'tool:started', 'tool:completed', and 'tool:failed' events.
|
|
1029
|
+
*/
|
|
1030
|
+
async executeTool(toolCall) {
|
|
1031
|
+
const startTime = Date.now();
|
|
1032
|
+
// Emit started event
|
|
1033
|
+
this.emit('tool:started', {
|
|
1034
|
+
toolName: toolCall.name,
|
|
1035
|
+
toolCallId: toolCall.id,
|
|
1036
|
+
status: 'started',
|
|
1037
|
+
args: toolCall.arguments,
|
|
1038
|
+
});
|
|
1039
|
+
(0, provider_logger_1.log)(`[AIClient] Executing tool: ${toolCall.name} with args: ${(0, provider_logger_1.safePreview)(toolCall.arguments, 500)}`);
|
|
1040
|
+
if (!this.toolRegistry) {
|
|
1041
|
+
const error = 'No tool registry configured';
|
|
1042
|
+
this.emit('tool:failed', {
|
|
1043
|
+
toolName: toolCall.name,
|
|
1044
|
+
toolCallId: toolCall.id,
|
|
1045
|
+
status: 'failed',
|
|
1046
|
+
error,
|
|
1047
|
+
duration: Date.now() - startTime,
|
|
1048
|
+
});
|
|
1049
|
+
return JSON.stringify({ error });
|
|
1050
|
+
}
|
|
1051
|
+
// Special handling for tool.search (BM25 search)
|
|
1052
|
+
if ((0, index_js_1.isToolSearchTool)(toolCall.name)) {
|
|
1053
|
+
const result = this.executeToolSearch(toolCall.arguments);
|
|
1054
|
+
const duration = Date.now() - startTime;
|
|
1055
|
+
this.emit('tool:completed', {
|
|
1056
|
+
toolName: toolCall.name,
|
|
1057
|
+
toolCallId: toolCall.id,
|
|
1058
|
+
status: 'completed',
|
|
1059
|
+
result: typeof result === 'string' ? result.substring(0, 200) : JSON.stringify(result).substring(0, 200),
|
|
1060
|
+
duration,
|
|
1061
|
+
});
|
|
1062
|
+
// Emit log event for tool.search
|
|
1063
|
+
this.emit('tool:log', {
|
|
1064
|
+
id: toolCall.id,
|
|
1065
|
+
name: toolCall.name,
|
|
1066
|
+
arguments: toolCall.arguments,
|
|
1067
|
+
result,
|
|
1068
|
+
duration,
|
|
1069
|
+
status: 'success',
|
|
1070
|
+
timestamp: Date.now(),
|
|
1071
|
+
});
|
|
1072
|
+
return result;
|
|
1073
|
+
}
|
|
1074
|
+
const tool = this.toolRegistry.get(toolCall.name);
|
|
1075
|
+
if (!tool) {
|
|
1076
|
+
(0, provider_logger_1.log)(`[AIClient] Tool '${toolCall.name}' not found in registry`);
|
|
1077
|
+
// Fuzzy match: detect common hallucination patterns
|
|
1078
|
+
const suggestion = this.findSimilarToolName(toolCall.name);
|
|
1079
|
+
const errorMsg = suggestion
|
|
1080
|
+
? `Tool '${toolCall.name}' not found. Did you mean '${suggestion}'? Use tool.search to discover available tools.`
|
|
1081
|
+
: `Tool '${toolCall.name}' not found. Use tool.search to discover available tools.`;
|
|
1082
|
+
this.emit('tool:failed', {
|
|
1083
|
+
toolName: toolCall.name,
|
|
1084
|
+
toolCallId: toolCall.id,
|
|
1085
|
+
status: 'failed',
|
|
1086
|
+
error: errorMsg,
|
|
1087
|
+
duration: Date.now() - startTime,
|
|
1088
|
+
});
|
|
1089
|
+
return JSON.stringify({ error: errorMsg });
|
|
1090
|
+
}
|
|
1091
|
+
try {
|
|
1092
|
+
const ctx = {
|
|
1093
|
+
workspaceRoot: process.cwd(),
|
|
1094
|
+
config: this.toolsConfig?.additionalConfigurations ?? {},
|
|
1095
|
+
log: (msg) => (0, provider_logger_1.log)(`[Tool] ${msg}`),
|
|
1096
|
+
};
|
|
1097
|
+
const result = await tool.execute(toolCall.arguments, ctx);
|
|
1098
|
+
const duration = Date.now() - startTime;
|
|
1099
|
+
// Emit completed event
|
|
1100
|
+
this.emit('tool:completed', {
|
|
1101
|
+
toolName: toolCall.name,
|
|
1102
|
+
toolCallId: toolCall.id,
|
|
1103
|
+
status: 'completed',
|
|
1104
|
+
result: typeof result === 'string' ? result.substring(0, 200) : JSON.stringify(result).substring(0, 200),
|
|
1105
|
+
duration,
|
|
1106
|
+
});
|
|
1107
|
+
// Emit log event with full details for history/logging
|
|
1108
|
+
this.emit('tool:log', {
|
|
1109
|
+
id: toolCall.id,
|
|
1110
|
+
name: toolCall.name,
|
|
1111
|
+
arguments: toolCall.arguments,
|
|
1112
|
+
result,
|
|
1113
|
+
duration,
|
|
1114
|
+
status: 'success',
|
|
1115
|
+
timestamp: Date.now(),
|
|
1116
|
+
});
|
|
1117
|
+
(0, provider_logger_1.log)(`[AIClient] Tool ${toolCall.name} executed successfully in ${duration}ms result_len=${result?.length ?? 0}`);
|
|
1118
|
+
if ((0, provider_logger_1.isVerbose)()) {
|
|
1119
|
+
(0, provider_logger_1.log)(`[AIClient] Tool ${toolCall.name} result_preview=${(0, provider_logger_1.safePreview)(result, 400)}`);
|
|
1120
|
+
}
|
|
1121
|
+
return result;
|
|
1122
|
+
}
|
|
1123
|
+
catch (error) {
|
|
1124
|
+
const duration = Date.now() - startTime;
|
|
1125
|
+
const errorMsg = error.message || 'Tool execution failed';
|
|
1126
|
+
// Emit failed event
|
|
1127
|
+
this.emit('tool:failed', {
|
|
1128
|
+
toolName: toolCall.name,
|
|
1129
|
+
toolCallId: toolCall.id,
|
|
1130
|
+
status: 'failed',
|
|
1131
|
+
error: errorMsg,
|
|
1132
|
+
duration,
|
|
1133
|
+
});
|
|
1134
|
+
// Emit log event for errors too
|
|
1135
|
+
this.emit('tool:log', {
|
|
1136
|
+
id: toolCall.id,
|
|
1137
|
+
name: toolCall.name,
|
|
1138
|
+
arguments: toolCall.arguments,
|
|
1139
|
+
result: JSON.stringify({ error: errorMsg }),
|
|
1140
|
+
duration,
|
|
1141
|
+
status: 'error',
|
|
1142
|
+
timestamp: Date.now(),
|
|
1143
|
+
});
|
|
1144
|
+
(0, provider_logger_1.log)(`[AIClient] Tool ${toolCall.name} failed: ${(0, provider_logger_1.safePreview)(errorMsg, 300)}`);
|
|
1145
|
+
return JSON.stringify({ error: errorMsg });
|
|
1146
|
+
}
|
|
1147
|
+
}
|
|
1148
|
+
/**
|
|
1149
|
+
* Find similar tool name to detect hallucinations.
|
|
1150
|
+
* Detects common patterns like underscore vs dot (fs_delete_file vs fs.delete_file).
|
|
1151
|
+
*/
|
|
1152
|
+
findSimilarToolName(hallucinatedName) {
|
|
1153
|
+
if (!this.toolRegistry)
|
|
1154
|
+
return null;
|
|
1155
|
+
const allTools = this.toolRegistry.getAll();
|
|
1156
|
+
// Pattern 1: underscore → dot (fs_delete_file → fs.delete_file)
|
|
1157
|
+
const withDot = hallucinatedName.replace(/_/g, '.');
|
|
1158
|
+
if (allTools.some(t => t.name === withDot)) {
|
|
1159
|
+
return withDot;
|
|
1160
|
+
}
|
|
1161
|
+
// Pattern 2: dot → underscore (fs.delete.file → fs.delete_file)
|
|
1162
|
+
const withUnderscore = hallucinatedName.replace(/\./g, '_');
|
|
1163
|
+
if (allTools.some(t => t.name === withUnderscore)) {
|
|
1164
|
+
return withUnderscore;
|
|
1165
|
+
}
|
|
1166
|
+
// Pattern 3: camelCase → dot.case (fsDeleteFile → fs.delete_file)
|
|
1167
|
+
const fromCamelCase = hallucinatedName
|
|
1168
|
+
.replace(/([a-z])([A-Z])/g, '$1_$2')
|
|
1169
|
+
.toLowerCase()
|
|
1170
|
+
.replace(/_/g, '.');
|
|
1171
|
+
if (allTools.some(t => t.name === fromCamelCase)) {
|
|
1172
|
+
return fromCamelCase;
|
|
1173
|
+
}
|
|
1174
|
+
// Pattern 4: Levenshtein distance for typos
|
|
1175
|
+
let bestMatch = null;
|
|
1176
|
+
let minDistance = Infinity;
|
|
1177
|
+
for (const tool of allTools) {
|
|
1178
|
+
const distance = this.levenshteinDistance(hallucinatedName.toLowerCase(), tool.name.toLowerCase());
|
|
1179
|
+
// Only suggest if very close (1-2 character difference)
|
|
1180
|
+
if (distance <= 2 && distance < minDistance) {
|
|
1181
|
+
minDistance = distance;
|
|
1182
|
+
bestMatch = tool.name;
|
|
1183
|
+
}
|
|
1184
|
+
}
|
|
1185
|
+
return bestMatch;
|
|
1186
|
+
}
|
|
1187
|
+
/**
|
|
1188
|
+
* Calculate Levenshtein distance between two strings.
|
|
1189
|
+
*/
|
|
1190
|
+
levenshteinDistance(a, b) {
|
|
1191
|
+
const matrix = [];
|
|
1192
|
+
for (let i = 0; i <= b.length; i++) {
|
|
1193
|
+
matrix[i] = [i];
|
|
1194
|
+
}
|
|
1195
|
+
for (let j = 0; j <= a.length; j++) {
|
|
1196
|
+
matrix[0][j] = j;
|
|
1197
|
+
}
|
|
1198
|
+
for (let i = 1; i <= b.length; i++) {
|
|
1199
|
+
for (let j = 1; j <= a.length; j++) {
|
|
1200
|
+
if (b.charAt(i - 1) === a.charAt(j - 1)) {
|
|
1201
|
+
matrix[i][j] = matrix[i - 1][j - 1];
|
|
1202
|
+
}
|
|
1203
|
+
else {
|
|
1204
|
+
matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j] + 1);
|
|
1205
|
+
}
|
|
1206
|
+
}
|
|
1207
|
+
}
|
|
1208
|
+
return matrix[b.length][a.length];
|
|
1209
|
+
}
|
|
1210
|
+
/**
|
|
1211
|
+
* Execute tool.search using BM25 engine.
|
|
1212
|
+
*/
|
|
1213
|
+
executeToolSearch(args) {
|
|
1214
|
+
const { query, category } = args;
|
|
1215
|
+
const limit = this.toolsConfig.toolSearch?.searchResultLimit ?? 5;
|
|
1216
|
+
(0, provider_logger_1.log)(`[AIClient] Executing tool.search: query="${query}" category=${category || 'all'} limit=${limit}`);
|
|
1217
|
+
const results = this.bm25Engine.search(query, { limit, category });
|
|
1218
|
+
// Record discovered tools in the cache
|
|
1219
|
+
const toolNames = results.map(r => r.toolName);
|
|
1220
|
+
this.toolRouter.getDiscoveryCache().recordDiscovery(query, toolNames);
|
|
1221
|
+
(0, provider_logger_1.log)(`[AIClient] tool.search found ${results.length} tools: ${toolNames.join(', ') || 'none'}`);
|
|
1222
|
+
return JSON.stringify({
|
|
1223
|
+
query,
|
|
1224
|
+
found: results.length,
|
|
1225
|
+
tools: results.map(r => ({
|
|
1226
|
+
name: r.tool.name,
|
|
1227
|
+
displayName: r.tool.displayName,
|
|
1228
|
+
description: r.tool.description,
|
|
1229
|
+
category: r.tool.category,
|
|
1230
|
+
parameters: r.tool.parameters,
|
|
1231
|
+
relevanceScore: Math.round(r.score * 100) / 100,
|
|
1232
|
+
})),
|
|
1233
|
+
hint: results.length > 0
|
|
1234
|
+
? `Found ${results.length} tools. You can now call any of these tools directly.`
|
|
1235
|
+
: `No tools found for "${query}". Try a different search term.`,
|
|
1236
|
+
});
|
|
1237
|
+
}
|
|
1238
|
+
wrapError(error) {
|
|
1239
|
+
if (error instanceof errors_1.SDKError) {
|
|
1240
|
+
return error;
|
|
1241
|
+
}
|
|
1242
|
+
return new errors_1.ProviderError(error.message || 'Unknown provider error', 'UNKNOWN_PROVIDER_ERROR', 500, error);
|
|
1243
|
+
}
|
|
1244
|
+
}
|
|
1245
|
+
exports.AIClient = AIClient;
|
|
1246
|
+
//# sourceMappingURL=index.js.map
|