byterover-cli 0.4.1 → 1.0.0
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/README.md +1 -9
- package/dist/commands/curate.d.ts +1 -3
- package/dist/commands/curate.js +14 -51
- package/dist/commands/main.d.ts +8 -0
- package/dist/commands/main.js +29 -8
- package/dist/commands/query.d.ts +1 -3
- package/dist/commands/query.js +8 -35
- package/dist/config/context-tree-domains.d.ts +5 -0
- package/dist/config/context-tree-domains.js +6 -1
- package/dist/config/environment.js +9 -9
- package/dist/constants.d.ts +14 -0
- package/dist/constants.js +18 -0
- package/dist/core/domain/cipher/agent/agent-info.d.ts +199 -0
- package/dist/core/domain/cipher/agent/agent-info.js +143 -0
- package/dist/core/domain/cipher/agent/agent-registry.d.ts +96 -0
- package/dist/core/domain/cipher/agent/agent-registry.js +254 -0
- package/dist/core/domain/cipher/agent/index.d.ts +4 -1
- package/dist/core/domain/cipher/agent/index.js +7 -1
- package/dist/core/domain/cipher/agent-events/types.d.ts +355 -2
- package/dist/core/domain/cipher/agent-events/types.js +11 -0
- package/dist/core/domain/cipher/errors/error-normalizer.d.ts +156 -0
- package/dist/core/domain/cipher/errors/error-normalizer.js +379 -0
- package/dist/core/domain/cipher/errors/file-system-error.d.ts +2 -1
- package/dist/core/domain/cipher/errors/file-system-error.js +3 -2
- package/dist/core/domain/cipher/errors/system-prompt-error-codes.d.ts +79 -0
- package/dist/core/domain/cipher/errors/system-prompt-error-codes.js +80 -0
- package/dist/core/domain/cipher/errors/system-prompt-error.d.ts +114 -0
- package/dist/core/domain/cipher/errors/system-prompt-error.js +144 -0
- package/dist/core/domain/cipher/file-system/types.d.ts +57 -0
- package/dist/core/domain/cipher/llm/error-codes.d.ts +51 -0
- package/dist/core/domain/cipher/llm/error-codes.js +51 -0
- package/dist/core/domain/cipher/llm/index.d.ts +9 -0
- package/dist/core/domain/cipher/llm/index.js +13 -0
- package/dist/core/domain/cipher/llm/registry.d.ts +113 -0
- package/dist/core/domain/cipher/llm/registry.js +244 -0
- package/dist/core/domain/cipher/llm/schemas.d.ts +155 -0
- package/dist/core/domain/cipher/llm/schemas.js +151 -0
- package/dist/core/domain/cipher/llm/types.d.ts +121 -0
- package/dist/core/domain/cipher/llm/types.js +60 -0
- package/dist/core/domain/cipher/storage/message-storage-types.d.ts +114 -5
- package/dist/core/domain/cipher/streaming/types.d.ts +119 -0
- package/dist/core/domain/cipher/streaming/types.js +16 -0
- package/dist/core/domain/cipher/system-prompt/types.d.ts +44 -0
- package/dist/core/domain/cipher/todos/types.d.ts +34 -0
- package/dist/core/domain/cipher/tools/constants.d.ts +5 -2
- package/dist/core/domain/cipher/tools/constants.js +5 -2
- package/dist/core/domain/cipher/tools/types.d.ts +31 -0
- package/dist/core/domain/errors/connection-error.d.ts +33 -0
- package/dist/core/domain/errors/connection-error.js +54 -0
- package/dist/core/domain/errors/core-process-error.d.ts +27 -0
- package/dist/core/domain/errors/core-process-error.js +43 -0
- package/dist/core/domain/errors/task-error.d.ts +64 -0
- package/dist/core/domain/errors/task-error.js +116 -0
- package/dist/core/domain/errors/transport-error.d.ts +72 -0
- package/dist/core/domain/errors/transport-error.js +114 -0
- package/dist/core/domain/instance/index.d.ts +1 -0
- package/dist/core/domain/instance/index.js +1 -0
- package/dist/core/domain/instance/types.d.ts +57 -0
- package/dist/core/domain/instance/types.js +72 -0
- package/dist/core/domain/knowledge/directory-manager.d.ts +16 -0
- package/dist/core/domain/knowledge/directory-manager.js +31 -0
- package/dist/core/domain/transport/index.d.ts +2 -0
- package/dist/core/domain/transport/index.js +2 -0
- package/dist/core/domain/transport/schemas.d.ts +1149 -0
- package/dist/core/domain/transport/schemas.js +554 -0
- package/dist/core/domain/transport/types.d.ts +67 -0
- package/dist/core/domain/transport/types.js +7 -0
- package/dist/core/interfaces/cipher/cipher-services.d.ts +15 -3
- package/dist/core/interfaces/cipher/i-chat-session.d.ts +47 -5
- package/dist/core/interfaces/cipher/i-cipher-agent.d.ts +39 -4
- package/dist/core/interfaces/cipher/i-content-generator.d.ts +3 -5
- package/dist/core/interfaces/cipher/i-file-system.d.ts +12 -1
- package/dist/core/interfaces/cipher/i-llm-service.d.ts +4 -5
- package/dist/core/interfaces/cipher/i-todo-storage.d.ts +24 -0
- package/dist/core/interfaces/cipher/i-todo-storage.js +1 -0
- package/dist/core/interfaces/cipher/i-tool-plugin.d.ts +90 -0
- package/dist/core/interfaces/cipher/i-tool-plugin.js +1 -0
- package/dist/core/interfaces/cipher/i-tool-provider.d.ts +3 -2
- package/dist/core/interfaces/cipher/i-tool-scheduler.d.ts +4 -0
- package/dist/core/interfaces/cipher/index.d.ts +35 -0
- package/dist/core/interfaces/cipher/index.js +11 -0
- package/dist/core/interfaces/cipher/message-factory.d.ts +155 -0
- package/dist/core/interfaces/cipher/message-factory.js +252 -0
- package/dist/core/interfaces/cipher/message-type-guards.d.ts +139 -0
- package/dist/core/interfaces/cipher/message-type-guards.js +173 -0
- package/dist/core/interfaces/cipher/message-types.d.ts +279 -5
- package/dist/core/interfaces/cipher/message-types.js +6 -0
- package/dist/core/interfaces/cipher/sanitization-types.d.ts +147 -0
- package/dist/core/interfaces/cipher/sanitization-types.js +46 -0
- package/dist/core/interfaces/executor/i-curate-executor.d.ts +34 -0
- package/dist/core/interfaces/executor/i-curate-executor.js +1 -0
- package/dist/core/interfaces/executor/i-query-executor.d.ts +32 -0
- package/dist/core/interfaces/executor/i-query-executor.js +1 -0
- package/dist/core/interfaces/executor/index.d.ts +2 -0
- package/dist/core/interfaces/executor/index.js +2 -0
- package/dist/core/interfaces/instance/i-instance-discovery.d.ts +45 -0
- package/dist/core/interfaces/instance/i-instance-discovery.js +1 -0
- package/dist/core/interfaces/instance/i-instance-manager.d.ts +58 -0
- package/dist/core/interfaces/instance/i-instance-manager.js +1 -0
- package/dist/core/interfaces/instance/index.d.ts +2 -0
- package/dist/core/interfaces/instance/index.js +2 -0
- package/dist/core/interfaces/noop-implementations.d.ts +53 -0
- package/dist/core/interfaces/noop-implementations.js +62 -0
- package/dist/core/interfaces/transport/i-transport-client.d.ts +97 -0
- package/dist/core/interfaces/transport/i-transport-client.js +1 -0
- package/dist/core/interfaces/transport/i-transport-server.d.ts +93 -0
- package/dist/core/interfaces/transport/i-transport-server.js +1 -0
- package/dist/core/interfaces/transport/index.d.ts +2 -0
- package/dist/core/interfaces/transport/index.js +2 -0
- package/dist/infra/cipher/agent/agent-error-codes.d.ts +16 -0
- package/dist/infra/cipher/agent/agent-error-codes.js +17 -0
- package/dist/infra/cipher/agent/agent-error.d.ts +54 -0
- package/dist/infra/cipher/agent/agent-error.js +79 -0
- package/dist/infra/cipher/agent/agent-schemas.d.ts +264 -0
- package/dist/infra/cipher/agent/agent-schemas.js +97 -0
- package/dist/infra/cipher/agent/agent-state-manager.d.ts +140 -0
- package/dist/infra/cipher/agent/agent-state-manager.js +275 -0
- package/dist/infra/cipher/agent/base-agent.d.ts +118 -0
- package/dist/infra/cipher/agent/base-agent.js +240 -0
- package/dist/infra/cipher/agent/cipher-agent.d.ts +165 -0
- package/dist/infra/cipher/agent/cipher-agent.js +546 -0
- package/dist/infra/cipher/agent/index.d.ts +22 -0
- package/dist/infra/cipher/agent/index.js +24 -0
- package/dist/infra/cipher/agent/service-initializer.d.ts +79 -0
- package/dist/infra/cipher/{agent-service-factory.js → agent/service-initializer.js} +117 -68
- package/dist/infra/cipher/agent/types.d.ts +35 -0
- package/dist/infra/cipher/agent/types.js +1 -0
- package/dist/infra/cipher/blob/blob-reference-resolver.d.ts +107 -0
- package/dist/infra/cipher/blob/blob-reference-resolver.js +228 -0
- package/dist/infra/cipher/blob/blob-reference-utils.d.ts +117 -0
- package/dist/infra/cipher/blob/blob-reference-utils.js +230 -0
- package/dist/infra/cipher/consumer/consumer-lock.js +1 -0
- package/dist/infra/cipher/consumer/consumer-service.js +1 -0
- package/dist/infra/cipher/consumer/execution-consumer.d.ts +6 -1
- package/dist/infra/cipher/consumer/execution-consumer.js +54 -16
- package/dist/infra/cipher/consumer/index.d.ts +1 -1
- package/dist/infra/cipher/consumer/index.js +2 -1
- package/dist/infra/cipher/consumer/queue-polling-service.js +1 -0
- package/dist/infra/cipher/file-system/binary-utils.d.ts +43 -0
- package/dist/infra/cipher/file-system/binary-utils.js +164 -0
- package/dist/infra/cipher/file-system/context-tree-file-system-factory.d.ts +9 -0
- package/dist/infra/cipher/file-system/context-tree-file-system-factory.js +24 -0
- package/dist/infra/cipher/file-system/file-system-service.d.ts +17 -1
- package/dist/infra/cipher/file-system/file-system-service.js +327 -36
- package/dist/infra/cipher/file-system/path-validator.d.ts +32 -0
- package/dist/infra/cipher/file-system/path-validator.js +111 -6
- package/dist/infra/cipher/interactive-loop.js +41 -33
- package/dist/infra/cipher/llm/capability-cache.d.ts +87 -0
- package/dist/infra/cipher/llm/capability-cache.js +125 -0
- package/dist/infra/cipher/llm/context/compaction/compaction-service.d.ts +32 -0
- package/dist/infra/cipher/llm/context/compaction/compaction-service.js +44 -3
- package/dist/infra/cipher/llm/context/compression/enhanced-compaction.d.ts +112 -0
- package/dist/infra/cipher/llm/context/compression/enhanced-compaction.js +175 -0
- package/dist/infra/cipher/llm/context/compression/filter-compacted.d.ts +83 -0
- package/dist/infra/cipher/llm/context/compression/filter-compacted.js +150 -0
- package/dist/infra/cipher/llm/context/compression/index.d.ts +5 -0
- package/dist/infra/cipher/llm/context/compression/index.js +6 -0
- package/dist/infra/cipher/llm/context/compression/reactive-overflow.d.ts +107 -0
- package/dist/infra/cipher/llm/context/compression/reactive-overflow.js +272 -0
- package/dist/infra/cipher/llm/context/context-manager.d.ts +47 -1
- package/dist/infra/cipher/llm/context/context-manager.js +129 -0
- package/dist/infra/cipher/llm/context/utils.js +17 -4
- package/dist/infra/cipher/llm/generators/byterover-content-generator.js +4 -2
- package/dist/infra/cipher/llm/internal-llm-service.d.ts +50 -17
- package/dist/infra/cipher/llm/internal-llm-service.js +273 -50
- package/dist/infra/cipher/llm/openrouter-llm-service.d.ts +6 -8
- package/dist/infra/cipher/llm/openrouter-llm-service.js +14 -16
- package/dist/infra/cipher/llm/retry/retry-policy.d.ts +1 -0
- package/dist/infra/cipher/llm/retry/retry-policy.js +11 -0
- package/dist/infra/cipher/llm/retry/retry-with-backoff.js +3 -2
- package/dist/infra/cipher/llm/sanitization/base64-utils.d.ts +102 -0
- package/dist/infra/cipher/llm/sanitization/base64-utils.js +182 -0
- package/dist/infra/cipher/llm/sanitization/index.d.ts +12 -0
- package/dist/infra/cipher/llm/sanitization/index.js +13 -0
- package/dist/infra/cipher/llm/sanitization/tool-sanitizer.d.ts +74 -0
- package/dist/infra/cipher/llm/sanitization/tool-sanitizer.js +398 -0
- package/dist/infra/cipher/llm/stream-processor.d.ts +158 -0
- package/dist/infra/cipher/llm/stream-processor.js +276 -0
- package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.d.ts +13 -20
- package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.js +17 -24
- package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.d.ts +12 -11
- package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.js +16 -15
- package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.d.ts +15 -7
- package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.js +22 -10
- package/dist/infra/cipher/llm/tool-output-processor.d.ts +51 -0
- package/dist/infra/cipher/llm/tool-output-processor.js +139 -0
- package/dist/infra/cipher/process/command-validator.d.ts +23 -0
- package/dist/infra/cipher/process/command-validator.js +75 -0
- package/dist/infra/cipher/process/path-utils.d.ts +66 -0
- package/dist/infra/cipher/process/path-utils.js +94 -0
- package/dist/infra/cipher/process/process-service.d.ts +32 -0
- package/dist/infra/cipher/process/process-service.js +98 -17
- package/dist/infra/cipher/session/chat-session.d.ts +56 -7
- package/dist/infra/cipher/session/chat-session.js +163 -13
- package/dist/infra/cipher/session/index.d.ts +1 -0
- package/dist/infra/cipher/session/index.js +2 -0
- package/dist/infra/cipher/session/message-queue.d.ts +65 -0
- package/dist/infra/cipher/session/message-queue.js +90 -0
- package/dist/infra/cipher/session/session-manager.d.ts +106 -5
- package/dist/infra/cipher/session/session-manager.js +254 -7
- package/dist/infra/cipher/session/session-status.d.ts +137 -0
- package/dist/infra/cipher/session/session-status.js +184 -0
- package/dist/infra/cipher/session/title-generator.d.ts +8 -0
- package/dist/infra/cipher/session/title-generator.js +31 -0
- package/dist/infra/cipher/storage/message-storage-service.d.ts +65 -2
- package/dist/infra/cipher/storage/message-storage-service.js +300 -54
- package/dist/infra/cipher/storage/tool-part-factory.d.ts +116 -0
- package/dist/infra/cipher/storage/tool-part-factory.js +197 -0
- package/dist/infra/cipher/system-prompt/contributor-schemas.d.ts +516 -0
- package/dist/infra/cipher/system-prompt/contributor-schemas.js +85 -0
- package/dist/infra/cipher/system-prompt/contributors/agent-prompt-contributor.d.ts +59 -0
- package/dist/infra/cipher/system-prompt/contributors/agent-prompt-contributor.js +131 -0
- package/dist/infra/cipher/system-prompt/contributors/companion-contributor.d.ts +54 -0
- package/dist/infra/cipher/system-prompt/contributors/companion-contributor.js +107 -0
- package/dist/infra/cipher/system-prompt/contributors/context-tree-structure-contributor.d.ts +68 -0
- package/dist/infra/cipher/system-prompt/contributors/context-tree-structure-contributor.js +179 -0
- package/dist/infra/cipher/system-prompt/contributors/datetime-contributor.d.ts +25 -0
- package/dist/infra/cipher/system-prompt/contributors/datetime-contributor.js +29 -0
- package/dist/infra/cipher/system-prompt/contributors/environment-contributor.d.ts +25 -0
- package/dist/infra/cipher/system-prompt/contributors/environment-contributor.js +54 -0
- package/dist/infra/cipher/system-prompt/contributors/file-contributor.d.ts +60 -0
- package/dist/infra/cipher/system-prompt/contributors/file-contributor.js +128 -0
- package/dist/infra/cipher/system-prompt/contributors/index.d.ts +13 -0
- package/dist/infra/cipher/system-prompt/contributors/index.js +8 -0
- package/dist/infra/cipher/system-prompt/contributors/memory-contributor.d.ts +40 -0
- package/dist/infra/cipher/system-prompt/contributors/memory-contributor.js +56 -0
- package/dist/infra/cipher/system-prompt/contributors/static-contributor.d.ts +26 -0
- package/dist/infra/cipher/system-prompt/contributors/static-contributor.js +31 -0
- package/dist/infra/cipher/system-prompt/environment-context-builder.d.ts +112 -0
- package/dist/infra/cipher/system-prompt/environment-context-builder.js +256 -0
- package/dist/infra/cipher/system-prompt/prompt-cache.d.ts +102 -0
- package/dist/infra/cipher/system-prompt/prompt-cache.js +156 -0
- package/dist/infra/cipher/system-prompt/schemas.d.ts +151 -0
- package/dist/infra/cipher/system-prompt/schemas.js +94 -0
- package/dist/infra/cipher/system-prompt/system-prompt-manager.d.ts +136 -0
- package/dist/infra/cipher/system-prompt/system-prompt-manager.js +307 -0
- package/dist/infra/cipher/todos/todo-storage-service.d.ts +26 -0
- package/dist/infra/cipher/todos/todo-storage-service.js +28 -0
- package/dist/infra/cipher/tools/core-tool-scheduler.js +5 -1
- package/dist/infra/cipher/tools/default-policy-rules.js +1 -1
- package/dist/infra/cipher/tools/implementations/bash-exec-tool.d.ts +1 -0
- package/dist/infra/cipher/tools/implementations/bash-exec-tool.js +27 -10
- package/dist/infra/cipher/tools/implementations/bash-output-tool.js +1 -5
- package/dist/infra/cipher/tools/implementations/batch-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/batch-tool.js +142 -0
- package/dist/infra/cipher/tools/implementations/curate-tool.js +195 -68
- package/dist/infra/cipher/tools/implementations/list-directory-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/list-directory-tool.js +52 -0
- package/dist/infra/cipher/tools/implementations/read-file-tool.d.ts +8 -1
- package/dist/infra/cipher/tools/implementations/read-file-tool.js +17 -7
- package/dist/infra/cipher/tools/implementations/read-todos-tool.d.ts +11 -0
- package/dist/infra/cipher/tools/implementations/read-todos-tool.js +39 -0
- package/dist/infra/cipher/tools/implementations/{detect-domains-tool.d.ts → spec-analyze-tool.d.ts} +1 -1
- package/dist/infra/cipher/tools/implementations/{detect-domains-tool.js → spec-analyze-tool.js} +9 -7
- package/dist/infra/cipher/tools/implementations/task-tool.d.ts +34 -0
- package/dist/infra/cipher/tools/implementations/task-tool.js +207 -0
- package/dist/infra/cipher/tools/implementations/write-todos-tool.d.ts +4 -1
- package/dist/infra/cipher/tools/implementations/write-todos-tool.js +19 -63
- package/dist/infra/cipher/tools/index.d.ts +1 -1
- package/dist/infra/cipher/tools/index.js +1 -1
- package/dist/infra/cipher/tools/plugins/index.d.ts +3 -0
- package/dist/infra/cipher/tools/plugins/index.js +2 -0
- package/dist/infra/cipher/tools/plugins/logging-plugin.d.ts +28 -0
- package/dist/infra/cipher/tools/plugins/logging-plugin.js +66 -0
- package/dist/infra/cipher/tools/plugins/plugin-manager.d.ts +81 -0
- package/dist/infra/cipher/tools/plugins/plugin-manager.js +122 -0
- package/dist/infra/cipher/tools/streaming/index.d.ts +1 -0
- package/dist/infra/cipher/tools/streaming/index.js +1 -0
- package/dist/infra/cipher/tools/streaming/metadata-handler.d.ts +31 -0
- package/dist/infra/cipher/tools/streaming/metadata-handler.js +39 -0
- package/dist/infra/cipher/tools/tool-description-loader.d.ts +57 -0
- package/dist/infra/cipher/tools/tool-description-loader.js +108 -0
- package/dist/infra/cipher/tools/tool-manager.d.ts +38 -4
- package/dist/infra/cipher/tools/tool-manager.js +107 -11
- package/dist/infra/cipher/tools/tool-provider-getter.d.ts +6 -0
- package/dist/infra/cipher/tools/tool-provider-getter.js +1 -0
- package/dist/infra/cipher/tools/tool-provider.d.ts +32 -7
- package/dist/infra/cipher/tools/tool-provider.js +81 -25
- package/dist/infra/cipher/tools/tool-registry.d.ts +23 -0
- package/dist/infra/cipher/tools/tool-registry.js +58 -16
- package/dist/infra/context-tree/file-context-tree-snapshot-service.js +10 -4
- package/dist/infra/context-tree/file-context-tree-writer-service.d.ts +4 -3
- package/dist/infra/context-tree/file-context-tree-writer-service.js +6 -4
- package/dist/infra/context-tree/path-utils.d.ts +7 -0
- package/dist/infra/context-tree/path-utils.js +7 -0
- package/dist/infra/core/executors/curate-executor.d.ts +35 -0
- package/dist/infra/core/executors/curate-executor.js +123 -0
- package/dist/infra/core/executors/index.d.ts +2 -0
- package/dist/infra/core/executors/index.js +2 -0
- package/dist/infra/core/executors/query-executor.d.ts +23 -0
- package/dist/infra/core/executors/query-executor.js +51 -0
- package/dist/infra/core/task-processor.d.ts +81 -0
- package/dist/infra/core/task-processor.js +115 -0
- package/dist/infra/instance/file-instance-discovery.d.ts +31 -0
- package/dist/infra/instance/file-instance-discovery.js +84 -0
- package/dist/infra/instance/file-instance-manager.d.ts +46 -0
- package/dist/infra/instance/file-instance-manager.js +123 -0
- package/dist/infra/instance/index.d.ts +3 -0
- package/dist/infra/instance/index.js +3 -0
- package/dist/infra/instance/process-utils.d.ts +14 -0
- package/dist/infra/instance/process-utils.js +39 -0
- package/dist/infra/process/agent-worker.d.ts +20 -0
- package/dist/infra/process/agent-worker.js +602 -0
- package/dist/infra/process/index.d.ts +12 -0
- package/dist/infra/process/index.js +11 -0
- package/dist/infra/process/ipc-types.d.ts +55 -0
- package/dist/infra/process/ipc-types.js +12 -0
- package/dist/infra/process/process-manager.d.ts +154 -0
- package/dist/infra/process/process-manager.js +471 -0
- package/dist/infra/process/task-queue-manager.d.ts +123 -0
- package/dist/infra/process/task-queue-manager.js +226 -0
- package/dist/infra/process/transport-handlers.d.ts +124 -0
- package/dist/infra/process/transport-handlers.js +348 -0
- package/dist/infra/process/transport-worker.d.ts +20 -0
- package/dist/infra/process/transport-worker.js +168 -0
- package/dist/infra/repl/commands/curate-command.js +0 -5
- package/dist/infra/repl/commands/query-command.js +0 -3
- package/dist/infra/repl/repl-startup.d.ts +4 -0
- package/dist/infra/repl/repl-startup.js +8 -1
- package/dist/infra/repl/transport-client-helper.d.ts +9 -0
- package/dist/infra/repl/transport-client-helper.js +96 -0
- package/dist/infra/transport/index.d.ts +4 -0
- package/dist/infra/transport/index.js +4 -0
- package/dist/infra/transport/port-utils.d.ts +42 -0
- package/dist/infra/transport/port-utils.js +84 -0
- package/dist/infra/transport/socket-io-transport-client.d.ts +45 -0
- package/dist/infra/transport/socket-io-transport-client.js +270 -0
- package/dist/infra/transport/socket-io-transport-server.d.ts +35 -0
- package/dist/infra/transport/socket-io-transport-server.js +207 -0
- package/dist/infra/transport/transport-client-factory.d.ts +76 -0
- package/dist/infra/transport/transport-client-factory.js +168 -0
- package/dist/infra/transport/transport-factory.d.ts +33 -0
- package/dist/infra/transport/transport-factory.js +59 -0
- package/dist/infra/usecase/curate-use-case.d.ts +8 -55
- package/dist/infra/usecase/curate-use-case.js +71 -262
- package/dist/infra/usecase/init-use-case.js +3 -2
- package/dist/infra/usecase/query-use-case.d.ts +18 -45
- package/dist/infra/usecase/query-use-case.js +250 -326
- package/dist/infra/usecase/status-use-case.js +1 -1
- package/dist/resources/prompts/{curate-context-tree-curation.yml → curate.yml} +25 -22
- package/dist/resources/prompts/explore.yml +78 -0
- package/dist/resources/prompts/plan.yml +114 -0
- package/dist/resources/prompts/reflection.yml +1 -1
- package/dist/resources/prompts/system-prompt.yml +15 -8
- package/dist/resources/prompts/tool-outputs.yml +0 -5
- package/dist/resources/tools/bash_exec.txt +98 -0
- package/dist/resources/tools/bash_output.txt +40 -0
- package/dist/resources/tools/batch.txt +28 -0
- package/dist/resources/tools/create_knowledge_topic.txt +23 -0
- package/dist/resources/tools/curate.txt +22 -0
- package/dist/resources/tools/delete_memory.txt +1 -0
- package/dist/resources/tools/detect_domains.txt +11 -0
- package/dist/resources/tools/edit_file.txt +1 -0
- package/dist/resources/tools/edit_memory.txt +1 -0
- package/dist/resources/tools/glob_files.txt +20 -0
- package/dist/resources/tools/grep_content.txt +18 -0
- package/dist/resources/tools/kill_process.txt +16 -0
- package/dist/resources/tools/list_directory.txt +16 -0
- package/dist/resources/tools/list_memories.txt +1 -0
- package/dist/resources/tools/read_file.txt +31 -0
- package/dist/resources/tools/read_memory.txt +1 -0
- package/dist/resources/tools/read_todos.txt +17 -0
- package/dist/resources/tools/search_history.txt +1 -0
- package/dist/resources/tools/task.txt +23 -0
- package/dist/resources/tools/write_file.txt +1 -0
- package/dist/resources/tools/write_memory.txt +1 -0
- package/dist/resources/tools/write_todos.txt +29 -0
- package/dist/tui/app.js +9 -13
- package/dist/tui/components/command-details.d.ts +14 -0
- package/dist/tui/components/command-details.js +35 -0
- package/dist/tui/components/execution/execution-changes.d.ts +5 -0
- package/dist/tui/components/execution/execution-changes.js +19 -4
- package/dist/tui/components/execution/execution-content.d.ts +4 -2
- package/dist/tui/components/execution/execution-content.js +26 -13
- package/dist/tui/components/execution/execution-input.js +3 -3
- package/dist/tui/components/execution/execution-progress.d.ts +2 -2
- package/dist/tui/components/execution/execution-progress.js +8 -6
- package/dist/tui/components/execution/log-item.d.ts +3 -4
- package/dist/tui/components/execution/log-item.js +2 -5
- package/dist/tui/components/footer.js +9 -4
- package/dist/tui/components/header.d.ts +3 -3
- package/dist/tui/components/header.js +5 -3
- package/dist/tui/components/index.d.ts +1 -0
- package/dist/tui/components/index.js +1 -0
- package/dist/tui/components/onboarding/copyable-prompt.d.ts +5 -3
- package/dist/tui/components/onboarding/copyable-prompt.js +7 -8
- package/dist/tui/components/onboarding/onboarding-flow.js +35 -25
- package/dist/tui/components/scrollable-list.js +12 -10
- package/dist/tui/components/suggestions.js +39 -41
- package/dist/tui/components/tab-bar.d.ts +2 -1
- package/dist/tui/components/tab-bar.js +3 -4
- package/dist/tui/constants.d.ts +0 -5
- package/dist/tui/constants.js +0 -5
- package/dist/tui/contexts/auth-context.js +9 -2
- package/dist/tui/contexts/{use-commands.js → commands-context.js} +3 -3
- package/dist/tui/contexts/index.d.ts +6 -1
- package/dist/tui/contexts/index.js +6 -1
- package/dist/tui/contexts/onboarding-context.d.ts +1 -1
- package/dist/tui/contexts/onboarding-context.js +9 -9
- package/dist/tui/contexts/tasks-context.d.ts +84 -0
- package/dist/tui/contexts/tasks-context.js +218 -0
- package/dist/tui/contexts/transport-context.d.ts +29 -0
- package/dist/tui/contexts/transport-context.js +82 -0
- package/dist/tui/hooks/index.d.ts +10 -6
- package/dist/tui/hooks/index.js +7 -6
- package/dist/tui/hooks/use-activity-logs.d.ts +3 -11
- package/dist/tui/hooks/use-activity-logs.js +87 -34
- package/dist/tui/hooks/use-auth-polling.d.ts +24 -0
- package/dist/tui/hooks/use-auth-polling.js +104 -0
- package/dist/tui/hooks/use-slash-command-processor.js +0 -1
- package/dist/tui/hooks/use-slash-completion.js +1 -1
- package/dist/tui/hooks/use-tab-navigation.d.ts +2 -1
- package/dist/tui/hooks/use-tab-navigation.js +16 -7
- package/dist/tui/hooks/use-terminal-breakpoint.d.ts +21 -0
- package/dist/tui/hooks/use-terminal-breakpoint.js +38 -0
- package/dist/tui/hooks/use-ui-heights.d.ts +120 -0
- package/dist/tui/hooks/use-ui-heights.js +88 -0
- package/dist/tui/providers/app-providers.js +2 -6
- package/dist/tui/types/commands.d.ts +0 -26
- package/dist/tui/types/index.d.ts +1 -1
- package/dist/tui/types/ui.d.ts +9 -4
- package/dist/tui/utils/line.d.ts +11 -0
- package/dist/tui/utils/line.js +16 -0
- package/dist/tui/utils/log.d.ts +27 -0
- package/dist/tui/utils/log.js +114 -0
- package/dist/tui/views/command-view.d.ts +7 -0
- package/dist/tui/views/command-view.js +103 -80
- package/dist/tui/views/login-view.js +7 -4
- package/dist/tui/views/logs-view.d.ts +13 -0
- package/dist/tui/views/logs-view.js +27 -52
- package/dist/utils/connection-error-handler.d.ts +16 -0
- package/dist/utils/connection-error-handler.js +49 -0
- package/dist/utils/crash-log.d.ts +14 -0
- package/dist/utils/crash-log.js +19 -0
- package/dist/utils/file-helpers.d.ts +14 -0
- package/dist/utils/file-helpers.js +21 -0
- package/dist/utils/global-logs-path.d.ts +11 -0
- package/dist/utils/global-logs-path.js +37 -0
- package/dist/utils/process-logger.d.ts +53 -0
- package/dist/utils/process-logger.js +253 -0
- package/dist/utils/sandbox-detector.d.ts +31 -0
- package/dist/utils/sandbox-detector.js +122 -0
- package/oclif.manifest.json +10 -198
- package/package.json +5 -1
- package/dist/commands/cipher-agent/run.d.ts +0 -142
- package/dist/commands/cipher-agent/run.js +0 -555
- package/dist/commands/cipher-agent/set-prompt.d.ts +0 -16
- package/dist/commands/cipher-agent/set-prompt.js +0 -58
- package/dist/commands/cipher-agent/show-prompt.d.ts +0 -13
- package/dist/commands/cipher-agent/show-prompt.js +0 -53
- package/dist/commands/foo.d.ts +0 -14
- package/dist/commands/foo.js +0 -66
- package/dist/infra/cipher/agent-service-factory.d.ts +0 -93
- package/dist/infra/cipher/cipher-agent-state-manager.d.ts +0 -63
- package/dist/infra/cipher/cipher-agent-state-manager.js +0 -108
- package/dist/infra/cipher/cipher-agent.d.ts +0 -182
- package/dist/infra/cipher/cipher-agent.js +0 -317
- package/dist/infra/cipher/system-prompt/simple-prompt-factory.d.ts +0 -106
- package/dist/infra/cipher/system-prompt/simple-prompt-factory.js +0 -297
- package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.d.ts +0 -7
- package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.js +0 -424
- package/dist/resources/prompts/modes/autonomous.yml +0 -9
- package/dist/resources/prompts/query-context-tree-retrieval.yml +0 -48
- package/dist/tui/contexts/consumer.d.ts +0 -31
- package/dist/tui/contexts/consumer.js +0 -56
- package/dist/tui/hooks/use-consumer.d.ts +0 -12
- package/dist/tui/hooks/use-consumer.js +0 -50
- package/dist/tui/hooks/use-queue-polling.d.ts +0 -31
- package/dist/tui/hooks/use-queue-polling.js +0 -90
- /package/dist/tui/contexts/{use-commands.d.ts → commands-context.d.ts} +0 -0
- /package/dist/tui/contexts/{use-mode.d.ts → mode-context.d.ts} +0 -0
- /package/dist/tui/contexts/{use-mode.js → mode-context.js} +0 -0
- /package/dist/tui/contexts/{use-theme.d.ts → theme-context.d.ts} +0 -0
- /package/dist/tui/contexts/{use-theme.js → theme-context.js} +0 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getAgentRegistry } from '../../../core/domain/cipher/agent/agent-registry.js';
|
|
1
2
|
import { ToolError, ToolErrorType, ToolErrorUtils } from '../../../core/domain/cipher/tools/tool-error.js';
|
|
2
3
|
/**
|
|
3
4
|
* Tool Manager for CipherAgent
|
|
@@ -7,6 +8,7 @@ import { ToolError, ToolErrorType, ToolErrorUtils } from '../../../core/domain/c
|
|
|
7
8
|
*
|
|
8
9
|
* Features:
|
|
9
10
|
* - Optional scheduler integration for policy-based execution
|
|
11
|
+
* - Optional plugin system for before/after execution hooks
|
|
10
12
|
* - Tool caching for performance
|
|
11
13
|
* - Structured error handling with classification
|
|
12
14
|
*
|
|
@@ -14,6 +16,11 @@ import { ToolError, ToolErrorType, ToolErrorUtils } from '../../../core/domain/c
|
|
|
14
16
|
* 1. Policy check (ALLOW/DENY)
|
|
15
17
|
* 2. Execution (if allowed)
|
|
16
18
|
*
|
|
19
|
+
* When a plugin manager is provided, execution flows through:
|
|
20
|
+
* 1. Before hooks (can modify args or block execution)
|
|
21
|
+
* 2. Tool execution
|
|
22
|
+
* 3. After hooks (for logging, auditing, etc.)
|
|
23
|
+
*
|
|
17
24
|
* Without a scheduler, tools execute directly via the provider.
|
|
18
25
|
*/
|
|
19
26
|
export class ToolManager {
|
|
@@ -22,7 +29,6 @@ export class ToolManager {
|
|
|
22
29
|
*/
|
|
23
30
|
static CURATE_TOOL_NAMES = [
|
|
24
31
|
'detect_domains',
|
|
25
|
-
'find_knowledge_topics',
|
|
26
32
|
'read_file',
|
|
27
33
|
'grep_content',
|
|
28
34
|
'glob_files',
|
|
@@ -32,12 +38,14 @@ export class ToolManager {
|
|
|
32
38
|
* Read-only tools allowed for query operations
|
|
33
39
|
*/
|
|
34
40
|
static QUERY_TOOL_NAMES = [
|
|
35
|
-
'find_knowledge_topics',
|
|
36
41
|
'read_file',
|
|
37
42
|
'grep_content',
|
|
38
43
|
'glob_files',
|
|
44
|
+
'task',
|
|
39
45
|
];
|
|
40
46
|
cacheValid = false;
|
|
47
|
+
callIdCounter = 0;
|
|
48
|
+
pluginManager;
|
|
41
49
|
scheduler;
|
|
42
50
|
toolProvider;
|
|
43
51
|
toolsCache = {};
|
|
@@ -46,10 +54,12 @@ export class ToolManager {
|
|
|
46
54
|
*
|
|
47
55
|
* @param toolProvider - Tool provider instance
|
|
48
56
|
* @param scheduler - Optional tool scheduler for policy-based execution
|
|
57
|
+
* @param pluginManager - Optional plugin manager for before/after hooks
|
|
49
58
|
*/
|
|
50
|
-
constructor(toolProvider, scheduler) {
|
|
59
|
+
constructor(toolProvider, scheduler, pluginManager) {
|
|
51
60
|
this.toolProvider = toolProvider;
|
|
52
61
|
this.scheduler = scheduler;
|
|
62
|
+
this.pluginManager = pluginManager;
|
|
53
63
|
}
|
|
54
64
|
/**
|
|
55
65
|
* Execute a tool by name with structured error handling.
|
|
@@ -58,7 +68,12 @@ export class ToolManager {
|
|
|
58
68
|
* error classification, and metadata. This enables better error handling
|
|
59
69
|
* and provides actionable feedback to the LLM.
|
|
60
70
|
*
|
|
61
|
-
* When a
|
|
71
|
+
* When a plugin manager is configured, execution flows through:
|
|
72
|
+
* 1. Before hooks (can modify args or block execution)
|
|
73
|
+
* 2. Tool execution (via scheduler or provider)
|
|
74
|
+
* 3. After hooks (for logging, auditing, etc.)
|
|
75
|
+
*
|
|
76
|
+
* When a scheduler is configured, tool execution flows through:
|
|
62
77
|
* 1. Policy check (ALLOW/DENY)
|
|
63
78
|
* 2. Execution (if allowed)
|
|
64
79
|
*
|
|
@@ -67,29 +82,65 @@ export class ToolManager {
|
|
|
67
82
|
* @param toolName - Name of the tool to execute
|
|
68
83
|
* @param args - Tool arguments (validated by provider)
|
|
69
84
|
* @param sessionId - Optional session ID for context
|
|
85
|
+
* @param context - Optional execution context (includes metadata callback for streaming)
|
|
70
86
|
* @returns Structured tool execution result
|
|
71
87
|
*/
|
|
72
|
-
async executeTool(toolName, args, sessionId) {
|
|
88
|
+
async executeTool(toolName, args, sessionId, context) {
|
|
73
89
|
const startTime = Date.now();
|
|
90
|
+
const callId = this.generateCallId();
|
|
91
|
+
const hookContext = {
|
|
92
|
+
callId,
|
|
93
|
+
sessionId: sessionId ?? 'default',
|
|
94
|
+
toolName,
|
|
95
|
+
};
|
|
96
|
+
// Merge sessionId into context if not already present
|
|
97
|
+
const effectiveContext = {
|
|
98
|
+
...context,
|
|
99
|
+
sessionId: context?.sessionId ?? sessionId,
|
|
100
|
+
};
|
|
74
101
|
try {
|
|
75
102
|
// Check if tool exists before execution
|
|
76
103
|
if (!this.hasTool(toolName)) {
|
|
77
104
|
throw new ToolError(`Tool '${toolName}' not found`, ToolErrorType.TOOL_NOT_FOUND, toolName, { context: { availableTools: this.getToolNames() } });
|
|
78
105
|
}
|
|
106
|
+
// Run before hooks (can modify args or block execution)
|
|
107
|
+
let effectiveArgs = args;
|
|
108
|
+
if (this.pluginManager) {
|
|
109
|
+
const beforeResult = await this.pluginManager.triggerBefore(hookContext, args);
|
|
110
|
+
if (!beforeResult.proceed) {
|
|
111
|
+
const errorResult = ToolErrorUtils.createErrorResult(new ToolError(beforeResult.reason ?? 'Execution blocked by plugin', ToolErrorType.PERMISSION_DENIED, toolName), { durationMs: Date.now() - startTime });
|
|
112
|
+
await this.pluginManager.triggerAfter(hookContext, args, errorResult);
|
|
113
|
+
return errorResult;
|
|
114
|
+
}
|
|
115
|
+
effectiveArgs = beforeResult.args;
|
|
116
|
+
}
|
|
79
117
|
// Execute tool via scheduler (with policy check) or directly via provider
|
|
80
118
|
const result = this.scheduler
|
|
81
|
-
? await this.scheduler.execute(toolName,
|
|
82
|
-
|
|
119
|
+
? await this.scheduler.execute(toolName, effectiveArgs, {
|
|
120
|
+
sessionId: sessionId ?? 'default',
|
|
121
|
+
taskId: effectiveContext.taskId,
|
|
122
|
+
})
|
|
123
|
+
: await this.toolProvider.executeTool(toolName, effectiveArgs, sessionId, effectiveContext);
|
|
83
124
|
const durationMs = Date.now() - startTime;
|
|
84
|
-
//
|
|
85
|
-
|
|
125
|
+
// Create success result
|
|
126
|
+
const successResult = ToolErrorUtils.createSuccess(result, { durationMs });
|
|
127
|
+
// Run after hooks
|
|
128
|
+
if (this.pluginManager) {
|
|
129
|
+
await this.pluginManager.triggerAfter(hookContext, effectiveArgs, successResult);
|
|
130
|
+
}
|
|
131
|
+
return successResult;
|
|
86
132
|
}
|
|
87
133
|
catch (error) {
|
|
88
134
|
const durationMs = Date.now() - startTime;
|
|
89
135
|
// Classify error
|
|
90
136
|
const toolError = ToolErrorUtils.classify(error, toolName);
|
|
91
|
-
//
|
|
92
|
-
|
|
137
|
+
// Create error result
|
|
138
|
+
const errorResult = ToolErrorUtils.createErrorResult(toolError, { durationMs });
|
|
139
|
+
// Run after hooks even on error
|
|
140
|
+
if (this.pluginManager) {
|
|
141
|
+
await this.pluginManager.triggerAfter(hookContext, args, errorResult);
|
|
142
|
+
}
|
|
143
|
+
return errorResult;
|
|
93
144
|
}
|
|
94
145
|
}
|
|
95
146
|
/**
|
|
@@ -162,6 +213,44 @@ export class ToolManager {
|
|
|
162
213
|
getToolsByMarker(marker) {
|
|
163
214
|
return this.toolProvider.getToolsByMarker(marker);
|
|
164
215
|
}
|
|
216
|
+
/**
|
|
217
|
+
* Get filtered tools based on agent configuration.
|
|
218
|
+
* Uses the agent registry to determine which tools are enabled/disabled for the agent.
|
|
219
|
+
*
|
|
220
|
+
* Tool filtering rules from agent.tools config:
|
|
221
|
+
* - `{ '*': false }` - Disable all tools
|
|
222
|
+
* - `{ '*': false, 'tool_name': true }` - Only enable specific tools
|
|
223
|
+
* - `{ 'tool_name': false }` - Disable specific tools, keep others enabled
|
|
224
|
+
* - `{}` or undefined - All tools enabled (default)
|
|
225
|
+
*
|
|
226
|
+
* @param agentName - The agent name (e.g., 'plan', 'query', 'curate')
|
|
227
|
+
* @returns Filtered tool set based on agent configuration
|
|
228
|
+
*/
|
|
229
|
+
getToolsForAgent(agentName) {
|
|
230
|
+
const registry = getAgentRegistry();
|
|
231
|
+
const agent = registry.get(agentName);
|
|
232
|
+
if (!agent) {
|
|
233
|
+
// Unknown agent - return all tools
|
|
234
|
+
return this.getAllTools();
|
|
235
|
+
}
|
|
236
|
+
const allTools = this.getAllTools();
|
|
237
|
+
const toolConfig = agent.tools;
|
|
238
|
+
// If no tool config or empty, return all tools
|
|
239
|
+
if (!toolConfig || Object.keys(toolConfig).length === 0) {
|
|
240
|
+
return allTools;
|
|
241
|
+
}
|
|
242
|
+
// Check for wildcard disable
|
|
243
|
+
const wildcardValue = toolConfig['*'];
|
|
244
|
+
const filteredTools = {};
|
|
245
|
+
for (const [toolName, toolDef] of Object.entries(allTools)) {
|
|
246
|
+
// Get specific config for this tool, or use wildcard, or default to true
|
|
247
|
+
const isEnabled = toolConfig[toolName] ?? wildcardValue ?? true;
|
|
248
|
+
if (isEnabled) {
|
|
249
|
+
filteredTools[toolName] = toolDef;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return filteredTools;
|
|
253
|
+
}
|
|
165
254
|
/**
|
|
166
255
|
* Get filtered tools based on command type.
|
|
167
256
|
* For 'query' command, returns only read-only discovery tools.
|
|
@@ -225,6 +314,13 @@ export class ToolManager {
|
|
|
225
314
|
refresh() {
|
|
226
315
|
this.invalidateCache();
|
|
227
316
|
}
|
|
317
|
+
/**
|
|
318
|
+
* Generates a unique call ID for tool execution.
|
|
319
|
+
*/
|
|
320
|
+
generateCallId() {
|
|
321
|
+
this.callIdCounter++;
|
|
322
|
+
return `call_${Date.now()}_${this.callIdCounter}`;
|
|
323
|
+
}
|
|
228
324
|
/**
|
|
229
325
|
* Invalidates the tool cache.
|
|
230
326
|
* Next call to getAllTools() will rebuild the cache.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { IToolProvider } from '../../../core/interfaces/cipher/i-tool-provider.js';
|
|
2
|
+
/**
|
|
3
|
+
* Lazy getter for ToolProvider to avoid circular dependencies.
|
|
4
|
+
* Used by batch tool to execute other tools at runtime.
|
|
5
|
+
*/
|
|
6
|
+
export type ToolProviderGetter = () => IToolProvider;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type { ToolSet } from '../../../core/domain/cipher/tools/types.js';
|
|
1
|
+
import type { ToolExecutionContext, ToolSet } from '../../../core/domain/cipher/tools/types.js';
|
|
2
2
|
import type { IToolProvider } from '../../../core/interfaces/cipher/i-tool-provider.js';
|
|
3
|
-
import type {
|
|
3
|
+
import type { SystemPromptManager } from '../system-prompt/system-prompt-manager.js';
|
|
4
|
+
import type { ToolDescriptionLoader } from './tool-description-loader.js';
|
|
4
5
|
import type { ToolServices } from './tool-registry.js';
|
|
5
6
|
import { ToolMarker } from './tool-markers.js';
|
|
6
7
|
/**
|
|
@@ -12,18 +13,20 @@ import { ToolMarker } from './tool-markers.js';
|
|
|
12
13
|
* 2. Execution phase (via invocation)
|
|
13
14
|
*/
|
|
14
15
|
export declare class ToolProvider implements IToolProvider {
|
|
16
|
+
private readonly descriptionLoader?;
|
|
15
17
|
private initialized;
|
|
16
18
|
private invocationBuilder?;
|
|
17
|
-
private
|
|
18
|
-
private readonly
|
|
19
|
+
private services;
|
|
20
|
+
private readonly systemPromptManager?;
|
|
19
21
|
private readonly toolMarkers;
|
|
20
22
|
private readonly tools;
|
|
21
23
|
/**
|
|
22
24
|
* Creates a new tool provider
|
|
23
25
|
* @param services - Services available to tools
|
|
24
|
-
* @param
|
|
26
|
+
* @param systemPromptManager - Optional system prompt manager for tool output guidance
|
|
27
|
+
* @param descriptionLoader - Optional loader for external tool descriptions
|
|
25
28
|
*/
|
|
26
|
-
constructor(services: ToolServices,
|
|
29
|
+
constructor(services: ToolServices, systemPromptManager?: SystemPromptManager, descriptionLoader?: ToolDescriptionLoader);
|
|
27
30
|
/**
|
|
28
31
|
* Execute a tool with the given arguments using builder/invocation pattern.
|
|
29
32
|
*
|
|
@@ -34,12 +37,13 @@ export declare class ToolProvider implements IToolProvider {
|
|
|
34
37
|
* @param toolName - Name of the tool to execute
|
|
35
38
|
* @param args - Tool arguments
|
|
36
39
|
* @param sessionId - Optional session ID for context
|
|
40
|
+
* @param context - Optional execution context (includes metadata callback for streaming)
|
|
37
41
|
* @returns Tool execution result
|
|
38
42
|
* @throws ToolNotFoundError if tool doesn't exist
|
|
39
43
|
* @throws ToolValidationError if input validation fails
|
|
40
44
|
* @throws ToolExecutionError if execution fails
|
|
41
45
|
*/
|
|
42
|
-
executeTool(toolName: string, args: Record<string, unknown>, sessionId?: string): Promise<unknown>;
|
|
46
|
+
executeTool(toolName: string, args: Record<string, unknown>, sessionId?: string, context?: ToolExecutionContext): Promise<unknown>;
|
|
43
47
|
/**
|
|
44
48
|
* Get all registered tools in JSON Schema format.
|
|
45
49
|
*/
|
|
@@ -67,11 +71,32 @@ export declare class ToolProvider implements IToolProvider {
|
|
|
67
71
|
/**
|
|
68
72
|
* Initialize the tool provider.
|
|
69
73
|
* Registers all tools whose required services are available.
|
|
74
|
+
* If a description loader is provided, tool descriptions are loaded from external files.
|
|
70
75
|
*/
|
|
71
76
|
initialize(): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Update services and re-register tools that depend on newly available services.
|
|
79
|
+
* This is used to inject services that are created after ToolProvider initialization
|
|
80
|
+
* (e.g., SessionManager which is created after ToolProvider).
|
|
81
|
+
*
|
|
82
|
+
* @param additionalServices - Additional services to add
|
|
83
|
+
*/
|
|
84
|
+
updateServices(additionalServices: Partial<ToolServices>): void;
|
|
72
85
|
/**
|
|
73
86
|
* Ensures the provider is initialized.
|
|
74
87
|
* @throws ToolProviderNotInitializedError if not initialized
|
|
75
88
|
*/
|
|
76
89
|
private ensureInitialized;
|
|
90
|
+
/**
|
|
91
|
+
* Loads description from external file if configured.
|
|
92
|
+
* @param descriptionFile - The description file name (without .txt extension)
|
|
93
|
+
* @returns The loaded description or undefined if not available
|
|
94
|
+
*/
|
|
95
|
+
private loadExternalDescription;
|
|
96
|
+
/**
|
|
97
|
+
* Registers a single tool if all required services are available.
|
|
98
|
+
* @param toolName - Name of the tool to register
|
|
99
|
+
* @param entry - Registry entry for the tool
|
|
100
|
+
*/
|
|
101
|
+
private registerToolIfAvailable;
|
|
77
102
|
}
|
|
@@ -12,20 +12,23 @@ import { convertZodToJsonSchema } from './utils/schema-converter.js';
|
|
|
12
12
|
* 2. Execution phase (via invocation)
|
|
13
13
|
*/
|
|
14
14
|
export class ToolProvider {
|
|
15
|
+
descriptionLoader;
|
|
15
16
|
initialized = false;
|
|
16
17
|
invocationBuilder;
|
|
17
|
-
promptFactory;
|
|
18
18
|
services;
|
|
19
|
+
systemPromptManager;
|
|
19
20
|
toolMarkers = new Set();
|
|
20
21
|
tools = new Map();
|
|
21
22
|
/**
|
|
22
23
|
* Creates a new tool provider
|
|
23
24
|
* @param services - Services available to tools
|
|
24
|
-
* @param
|
|
25
|
+
* @param systemPromptManager - Optional system prompt manager for tool output guidance
|
|
26
|
+
* @param descriptionLoader - Optional loader for external tool descriptions
|
|
25
27
|
*/
|
|
26
|
-
constructor(services,
|
|
28
|
+
constructor(services, systemPromptManager, descriptionLoader) {
|
|
27
29
|
this.services = services;
|
|
28
|
-
this.
|
|
30
|
+
this.systemPromptManager = systemPromptManager;
|
|
31
|
+
this.descriptionLoader = descriptionLoader;
|
|
29
32
|
}
|
|
30
33
|
/**
|
|
31
34
|
* Execute a tool with the given arguments using builder/invocation pattern.
|
|
@@ -37,21 +40,26 @@ export class ToolProvider {
|
|
|
37
40
|
* @param toolName - Name of the tool to execute
|
|
38
41
|
* @param args - Tool arguments
|
|
39
42
|
* @param sessionId - Optional session ID for context
|
|
43
|
+
* @param context - Optional execution context (includes metadata callback for streaming)
|
|
40
44
|
* @returns Tool execution result
|
|
41
45
|
* @throws ToolNotFoundError if tool doesn't exist
|
|
42
46
|
* @throws ToolValidationError if input validation fails
|
|
43
47
|
* @throws ToolExecutionError if execution fails
|
|
44
48
|
*/
|
|
45
|
-
async executeTool(toolName, args, sessionId) {
|
|
49
|
+
async executeTool(toolName, args, sessionId, context) {
|
|
46
50
|
this.ensureInitialized();
|
|
47
51
|
if (!this.invocationBuilder) {
|
|
48
52
|
throw new ToolProviderNotInitializedError();
|
|
49
53
|
}
|
|
50
54
|
try {
|
|
51
55
|
// Phase 1: Build and validate invocation
|
|
52
|
-
|
|
56
|
+
// Merge sessionId into context for backward compatibility
|
|
57
|
+
const effectiveContext = {
|
|
58
|
+
...context,
|
|
59
|
+
sessionId: context?.sessionId ?? sessionId,
|
|
60
|
+
};
|
|
53
61
|
const invocation = this.invocationBuilder.build(`tool_call_${Date.now()}`, // Generate unique ID
|
|
54
|
-
toolName, args,
|
|
62
|
+
toolName, args, effectiveContext);
|
|
55
63
|
// Phase 2: Execute validated invocation
|
|
56
64
|
const executionResult = await invocation.execute();
|
|
57
65
|
// Handle execution result
|
|
@@ -64,8 +72,8 @@ export class ToolProvider {
|
|
|
64
72
|
}
|
|
65
73
|
// Check if this tool has output guidance configured
|
|
66
74
|
const registryEntry = TOOL_REGISTRY[toolName];
|
|
67
|
-
if (registryEntry?.outputGuidance && this.
|
|
68
|
-
const guidance = this.
|
|
75
|
+
if (registryEntry?.outputGuidance && this.systemPromptManager) {
|
|
76
|
+
const guidance = this.systemPromptManager.getToolOutputGuidance(registryEntry.outputGuidance);
|
|
69
77
|
if (guidance) {
|
|
70
78
|
// Return structured result with guidance
|
|
71
79
|
return {
|
|
@@ -156,6 +164,7 @@ export class ToolProvider {
|
|
|
156
164
|
/**
|
|
157
165
|
* Initialize the tool provider.
|
|
158
166
|
* Registers all tools whose required services are available.
|
|
167
|
+
* If a description loader is provided, tool descriptions are loaded from external files.
|
|
159
168
|
*/
|
|
160
169
|
async initialize() {
|
|
161
170
|
if (this.initialized) {
|
|
@@ -163,27 +172,35 @@ export class ToolProvider {
|
|
|
163
172
|
}
|
|
164
173
|
// Register tools from registry
|
|
165
174
|
for (const [toolName, entry] of Object.entries(TOOL_REGISTRY)) {
|
|
166
|
-
|
|
167
|
-
const allServicesAvailable = entry.requiredServices.every((serviceName) => this.services[serviceName] !== undefined);
|
|
168
|
-
if (allServicesAvailable) {
|
|
169
|
-
try {
|
|
170
|
-
const tool = entry.factory(this.services);
|
|
171
|
-
this.tools.set(toolName, tool);
|
|
172
|
-
// Collect markers from registered tools
|
|
173
|
-
for (const marker of entry.markers) {
|
|
174
|
-
this.toolMarkers.add(marker);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
catch (error) {
|
|
178
|
-
// Log error but don't fail initialization
|
|
179
|
-
console.error(`Failed to register tool ${toolName}:`, error);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
175
|
+
this.registerToolIfAvailable(toolName, entry);
|
|
182
176
|
}
|
|
183
177
|
// Initialize invocation builder with registered tools
|
|
184
178
|
this.invocationBuilder = new ToolInvocationBuilder(this.tools);
|
|
185
179
|
this.initialized = true;
|
|
186
180
|
}
|
|
181
|
+
/**
|
|
182
|
+
* Update services and re-register tools that depend on newly available services.
|
|
183
|
+
* This is used to inject services that are created after ToolProvider initialization
|
|
184
|
+
* (e.g., SessionManager which is created after ToolProvider).
|
|
185
|
+
*
|
|
186
|
+
* @param additionalServices - Additional services to add
|
|
187
|
+
*/
|
|
188
|
+
updateServices(additionalServices) {
|
|
189
|
+
// Merge new services into existing services
|
|
190
|
+
this.services = { ...this.services, ...additionalServices };
|
|
191
|
+
// Re-register tools that may now have their required services available
|
|
192
|
+
for (const [toolName, entry] of Object.entries(TOOL_REGISTRY)) {
|
|
193
|
+
// Skip if tool is already registered
|
|
194
|
+
if (this.tools.has(toolName)) {
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
this.registerToolIfAvailable(toolName, entry);
|
|
198
|
+
}
|
|
199
|
+
// Update invocation builder with any newly registered tools
|
|
200
|
+
if (this.initialized && this.invocationBuilder) {
|
|
201
|
+
this.invocationBuilder = new ToolInvocationBuilder(this.tools);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
187
204
|
/**
|
|
188
205
|
* Ensures the provider is initialized.
|
|
189
206
|
* @throws ToolProviderNotInitializedError if not initialized
|
|
@@ -193,4 +210,43 @@ export class ToolProvider {
|
|
|
193
210
|
throw new ToolProviderNotInitializedError();
|
|
194
211
|
}
|
|
195
212
|
}
|
|
213
|
+
/**
|
|
214
|
+
* Loads description from external file if configured.
|
|
215
|
+
* @param descriptionFile - The description file name (without .txt extension)
|
|
216
|
+
* @returns The loaded description or undefined if not available
|
|
217
|
+
*/
|
|
218
|
+
loadExternalDescription(descriptionFile) {
|
|
219
|
+
if (!descriptionFile || !this.descriptionLoader) {
|
|
220
|
+
return undefined;
|
|
221
|
+
}
|
|
222
|
+
return this.descriptionLoader.load(descriptionFile);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Registers a single tool if all required services are available.
|
|
226
|
+
* @param toolName - Name of the tool to register
|
|
227
|
+
* @param entry - Registry entry for the tool
|
|
228
|
+
*/
|
|
229
|
+
registerToolIfAvailable(toolName, entry) {
|
|
230
|
+
const allServicesAvailable = entry.requiredServices.every((serviceName) => this.services[serviceName] !== undefined);
|
|
231
|
+
if (!allServicesAvailable) {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
try {
|
|
235
|
+
const tool = entry.factory(this.services);
|
|
236
|
+
// Override description from external file if available
|
|
237
|
+
const fileDescription = this.loadExternalDescription(entry.descriptionFile);
|
|
238
|
+
if (fileDescription) {
|
|
239
|
+
tool.description = fileDescription;
|
|
240
|
+
}
|
|
241
|
+
this.tools.set(toolName, tool);
|
|
242
|
+
// Collect markers from registered tools
|
|
243
|
+
for (const marker of entry.markers) {
|
|
244
|
+
this.toolMarkers.add(marker);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
// Log error but don't fail initialization
|
|
249
|
+
console.error(`Failed to register tool ${toolName}:`, error);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
196
252
|
}
|
|
@@ -2,7 +2,10 @@ import type { KnownTool } from '../../../core/domain/cipher/tools/constants.js';
|
|
|
2
2
|
import type { Tool } from '../../../core/domain/cipher/tools/types.js';
|
|
3
3
|
import type { IFileSystem } from '../../../core/interfaces/cipher/i-file-system.js';
|
|
4
4
|
import type { IProcessService } from '../../../core/interfaces/cipher/i-process-service.js';
|
|
5
|
+
import type { ITodoStorage } from '../../../core/interfaces/cipher/i-todo-storage.js';
|
|
5
6
|
import type { MemoryManager } from '../memory/memory-manager.js';
|
|
7
|
+
import type { SessionManager } from '../session/session-manager.js';
|
|
8
|
+
import type { ToolProviderGetter } from './tool-provider-getter.js';
|
|
6
9
|
import { ToolMarker } from './tool-markers.js';
|
|
7
10
|
/**
|
|
8
11
|
* Service dependencies available to tools.
|
|
@@ -11,10 +14,23 @@ import { ToolMarker } from './tool-markers.js';
|
|
|
11
14
|
export interface ToolServices {
|
|
12
15
|
/** File system service for file operations */
|
|
13
16
|
fileSystemService?: IFileSystem;
|
|
17
|
+
/**
|
|
18
|
+
* Lazy getter for session manager (avoids circular dependency).
|
|
19
|
+
* SessionManager is created after ToolProvider, so we need a getter.
|
|
20
|
+
* Used by task tool for subagent delegation.
|
|
21
|
+
*/
|
|
22
|
+
getSessionManager?: () => SessionManager | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Lazy getter for tool provider (avoids circular dependency).
|
|
25
|
+
* Used by batch tool to execute other tools.
|
|
26
|
+
*/
|
|
27
|
+
getToolProvider?: ToolProviderGetter;
|
|
14
28
|
/** Memory manager for agent memory operations */
|
|
15
29
|
memoryManager?: MemoryManager;
|
|
16
30
|
/** Process service for command execution */
|
|
17
31
|
processService?: IProcessService;
|
|
32
|
+
/** Todo storage service for session-based todo persistence */
|
|
33
|
+
todoStorage?: ITodoStorage;
|
|
18
34
|
}
|
|
19
35
|
/**
|
|
20
36
|
* Tool factory function type.
|
|
@@ -26,6 +42,13 @@ export type ToolFactory = (services: ToolServices) => Tool;
|
|
|
26
42
|
* Defines the factory, required services, semantic markers, and optional output guidance for each tool.
|
|
27
43
|
*/
|
|
28
44
|
export interface ToolRegistryEntry {
|
|
45
|
+
/**
|
|
46
|
+
* Optional external description file name (without .txt extension).
|
|
47
|
+
* If specified, the ToolProvider will load the description from
|
|
48
|
+
* src/resources/tools/{descriptionFile}.txt instead of using the inline description.
|
|
49
|
+
* Example: 'bash_exec' will load from 'src/resources/tools/bash_exec.txt'
|
|
50
|
+
*/
|
|
51
|
+
descriptionFile?: string;
|
|
29
52
|
/** Factory function to create the tool */
|
|
30
53
|
factory: ToolFactory;
|
|
31
54
|
/** Semantic markers for this tool (enables smart filtering and conditional prompts) */
|