byterover-cli 0.4.0 → 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/entities/event.d.ts +1 -1
- package/dist/core/domain/entities/event.js +3 -1
- 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/hooks/init/welcome.js +9 -24
- 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 +10 -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 +73 -259
- package/dist/infra/usecase/init-use-case.js +19 -8
- package/dist/infra/usecase/login-use-case.js +9 -3
- package/dist/infra/usecase/query-use-case.d.ts +18 -45
- package/dist/infra/usecase/query-use-case.js +251 -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} +6 -5
- 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
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ToolExecutionResult } from '../../../../core/domain/cipher/tools/tool-error.js';
|
|
2
|
+
import type { ILogger } from '../../../../core/interfaces/cipher/i-logger.js';
|
|
3
|
+
import type { BeforeHookResult, IToolPlugin, ToolHookContext } from '../../../../core/interfaces/cipher/i-tool-plugin.js';
|
|
4
|
+
/**
|
|
5
|
+
* Example plugin that logs tool execution.
|
|
6
|
+
*
|
|
7
|
+
* Demonstrates how to implement the IToolPlugin interface
|
|
8
|
+
* for logging/auditing purposes.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* const logger = createLogger('tools')
|
|
13
|
+
* const loggingPlugin = new LoggingPlugin(logger)
|
|
14
|
+
* pluginManager.register(loggingPlugin)
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export declare class LoggingPlugin implements IToolPlugin {
|
|
18
|
+
readonly name = "logging";
|
|
19
|
+
readonly priority = 1;
|
|
20
|
+
private readonly logger;
|
|
21
|
+
constructor(logger: ILogger);
|
|
22
|
+
afterExecute(ctx: ToolHookContext, _args: Record<string, unknown>, result: ToolExecutionResult): void;
|
|
23
|
+
beforeExecute(ctx: ToolHookContext, args: Record<string, unknown>): BeforeHookResult;
|
|
24
|
+
/**
|
|
25
|
+
* Sanitize args for logging (truncate large values, redact sensitive data).
|
|
26
|
+
*/
|
|
27
|
+
private sanitizeArgs;
|
|
28
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Example plugin that logs tool execution.
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates how to implement the IToolPlugin interface
|
|
5
|
+
* for logging/auditing purposes.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* const logger = createLogger('tools')
|
|
10
|
+
* const loggingPlugin = new LoggingPlugin(logger)
|
|
11
|
+
* pluginManager.register(loggingPlugin)
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export class LoggingPlugin {
|
|
15
|
+
name = 'logging';
|
|
16
|
+
priority = 1; // Execute early to capture all events
|
|
17
|
+
logger;
|
|
18
|
+
constructor(logger) {
|
|
19
|
+
this.logger = logger;
|
|
20
|
+
}
|
|
21
|
+
afterExecute(ctx, _args, result) {
|
|
22
|
+
const duration = result.metadata?.durationMs ?? 'unknown';
|
|
23
|
+
if (result.success) {
|
|
24
|
+
this.logger.debug(`[Tool] ${ctx.toolName} completed in ${duration}ms`, {
|
|
25
|
+
callId: ctx.callId,
|
|
26
|
+
sessionId: ctx.sessionId,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
this.logger.warn(`[Tool] ${ctx.toolName} failed in ${duration}ms: ${result.errorMessage}`, {
|
|
31
|
+
callId: ctx.callId,
|
|
32
|
+
errorType: result.errorType,
|
|
33
|
+
sessionId: ctx.sessionId,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
beforeExecute(ctx, args) {
|
|
38
|
+
this.logger.debug(`[Tool] ${ctx.toolName} starting`, {
|
|
39
|
+
args: this.sanitizeArgs(args),
|
|
40
|
+
callId: ctx.callId,
|
|
41
|
+
sessionId: ctx.sessionId,
|
|
42
|
+
});
|
|
43
|
+
return { proceed: true };
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Sanitize args for logging (truncate large values, redact sensitive data).
|
|
47
|
+
*/
|
|
48
|
+
sanitizeArgs(args) {
|
|
49
|
+
const sanitized = {};
|
|
50
|
+
const maxLength = 200;
|
|
51
|
+
for (const [key, value] of Object.entries(args)) {
|
|
52
|
+
// Redact potentially sensitive fields
|
|
53
|
+
if (key.toLowerCase().includes('password') || key.toLowerCase().includes('secret')) {
|
|
54
|
+
sanitized[key] = '[REDACTED]';
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
// Truncate long strings
|
|
58
|
+
if (typeof value === 'string' && value.length > maxLength) {
|
|
59
|
+
sanitized[key] = `${value.slice(0, maxLength)}... (${value.length} chars)`;
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
sanitized[key] = value;
|
|
63
|
+
}
|
|
64
|
+
return sanitized;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { ToolExecutionResult } from '../../../../core/domain/cipher/tools/tool-error.js';
|
|
2
|
+
import type { IToolPlugin, ToolHookContext } from '../../../../core/interfaces/cipher/i-tool-plugin.js';
|
|
3
|
+
/**
|
|
4
|
+
* Result from triggering before hooks.
|
|
5
|
+
*/
|
|
6
|
+
export interface BeforeTriggerResult {
|
|
7
|
+
/** Modified arguments (may differ from original if plugins transformed them) */
|
|
8
|
+
args: Record<string, unknown>;
|
|
9
|
+
/** Whether to proceed with execution */
|
|
10
|
+
proceed: boolean;
|
|
11
|
+
/** Reason for blocking (if proceed is false) */
|
|
12
|
+
reason?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Manages tool execution plugins.
|
|
16
|
+
*
|
|
17
|
+
* Provides a plugin system for extending tool behavior with before/after hooks.
|
|
18
|
+
* Plugins are executed in priority order (lower priority = earlier execution).
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* const manager = new ToolPluginManager()
|
|
23
|
+
* manager.register(loggingPlugin)
|
|
24
|
+
* manager.register(validationPlugin)
|
|
25
|
+
*
|
|
26
|
+
* // Before execution
|
|
27
|
+
* const { proceed, args } = await manager.triggerBefore(ctx, originalArgs)
|
|
28
|
+
* if (!proceed) return error
|
|
29
|
+
*
|
|
30
|
+
* // Execute tool...
|
|
31
|
+
*
|
|
32
|
+
* // After execution
|
|
33
|
+
* await manager.triggerAfter(ctx, args, result)
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare class ToolPluginManager {
|
|
37
|
+
private static readonly DEFAULT_PRIORITY;
|
|
38
|
+
private plugins;
|
|
39
|
+
/**
|
|
40
|
+
* Get all registered plugins.
|
|
41
|
+
* @returns Array of registered plugins in priority order
|
|
42
|
+
*/
|
|
43
|
+
getPlugins(): readonly IToolPlugin[];
|
|
44
|
+
/**
|
|
45
|
+
* Register a plugin.
|
|
46
|
+
* Plugins are automatically sorted by priority after registration.
|
|
47
|
+
*
|
|
48
|
+
* @param plugin - Plugin to register
|
|
49
|
+
*/
|
|
50
|
+
register(plugin: IToolPlugin): void;
|
|
51
|
+
/**
|
|
52
|
+
* Trigger all afterExecute hooks.
|
|
53
|
+
* Errors in individual plugins are caught and logged but don't propagate.
|
|
54
|
+
*
|
|
55
|
+
* @param ctx - Hook context
|
|
56
|
+
* @param args - Arguments that were passed to the tool
|
|
57
|
+
* @param result - Tool execution result
|
|
58
|
+
*/
|
|
59
|
+
triggerAfter(ctx: ToolHookContext, args: Record<string, unknown>, result: ToolExecutionResult): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Trigger all beforeExecute hooks in priority order.
|
|
62
|
+
* If any plugin returns proceed: false, execution stops and returns that result.
|
|
63
|
+
* Arguments can be transformed by plugins (each receives the previous plugin's output).
|
|
64
|
+
*
|
|
65
|
+
* @param ctx - Hook context
|
|
66
|
+
* @param args - Original arguments
|
|
67
|
+
* @returns Result indicating whether to proceed and final arguments
|
|
68
|
+
*/
|
|
69
|
+
triggerBefore(ctx: ToolHookContext, args: Record<string, unknown>): Promise<BeforeTriggerResult>;
|
|
70
|
+
/**
|
|
71
|
+
* Unregister a plugin by name.
|
|
72
|
+
*
|
|
73
|
+
* @param name - Name of the plugin to unregister
|
|
74
|
+
* @returns True if a plugin was removed
|
|
75
|
+
*/
|
|
76
|
+
unregister(name: string): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Sort plugins by priority (ascending).
|
|
79
|
+
*/
|
|
80
|
+
private sortByPriority;
|
|
81
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manages tool execution plugins.
|
|
3
|
+
*
|
|
4
|
+
* Provides a plugin system for extending tool behavior with before/after hooks.
|
|
5
|
+
* Plugins are executed in priority order (lower priority = earlier execution).
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* const manager = new ToolPluginManager()
|
|
10
|
+
* manager.register(loggingPlugin)
|
|
11
|
+
* manager.register(validationPlugin)
|
|
12
|
+
*
|
|
13
|
+
* // Before execution
|
|
14
|
+
* const { proceed, args } = await manager.triggerBefore(ctx, originalArgs)
|
|
15
|
+
* if (!proceed) return error
|
|
16
|
+
*
|
|
17
|
+
* // Execute tool...
|
|
18
|
+
*
|
|
19
|
+
* // After execution
|
|
20
|
+
* await manager.triggerAfter(ctx, args, result)
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export class ToolPluginManager {
|
|
24
|
+
static DEFAULT_PRIORITY = 100;
|
|
25
|
+
plugins = [];
|
|
26
|
+
/**
|
|
27
|
+
* Get all registered plugins.
|
|
28
|
+
* @returns Array of registered plugins in priority order
|
|
29
|
+
*/
|
|
30
|
+
getPlugins() {
|
|
31
|
+
return this.plugins;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Register a plugin.
|
|
35
|
+
* Plugins are automatically sorted by priority after registration.
|
|
36
|
+
*
|
|
37
|
+
* @param plugin - Plugin to register
|
|
38
|
+
*/
|
|
39
|
+
register(plugin) {
|
|
40
|
+
this.plugins.push(plugin);
|
|
41
|
+
this.sortByPriority();
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Trigger all afterExecute hooks.
|
|
45
|
+
* Errors in individual plugins are caught and logged but don't propagate.
|
|
46
|
+
*
|
|
47
|
+
* @param ctx - Hook context
|
|
48
|
+
* @param args - Arguments that were passed to the tool
|
|
49
|
+
* @param result - Tool execution result
|
|
50
|
+
*/
|
|
51
|
+
async triggerAfter(ctx, args, result) {
|
|
52
|
+
const promises = this.plugins
|
|
53
|
+
.filter((plugin) => plugin.afterExecute)
|
|
54
|
+
.map(async (plugin) => {
|
|
55
|
+
try {
|
|
56
|
+
await plugin.afterExecute(ctx, args, result);
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
console.warn(`Plugin ${plugin.name} afterExecute failed:`, error);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
await Promise.all(promises);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Trigger all beforeExecute hooks in priority order.
|
|
66
|
+
* If any plugin returns proceed: false, execution stops and returns that result.
|
|
67
|
+
* Arguments can be transformed by plugins (each receives the previous plugin's output).
|
|
68
|
+
*
|
|
69
|
+
* @param ctx - Hook context
|
|
70
|
+
* @param args - Original arguments
|
|
71
|
+
* @returns Result indicating whether to proceed and final arguments
|
|
72
|
+
*/
|
|
73
|
+
async triggerBefore(ctx, args) {
|
|
74
|
+
const pluginsWithBefore = this.plugins.filter((plugin) => plugin.beforeExecute);
|
|
75
|
+
// Sequential execution required: each plugin may modify args for the next
|
|
76
|
+
const processPlugin = async (index, currentArgs) => {
|
|
77
|
+
if (index >= pluginsWithBefore.length) {
|
|
78
|
+
return {
|
|
79
|
+
args: currentArgs,
|
|
80
|
+
proceed: true,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
const plugin = pluginsWithBefore[index];
|
|
84
|
+
try {
|
|
85
|
+
const result = await plugin.beforeExecute(ctx, currentArgs);
|
|
86
|
+
if (!result.proceed) {
|
|
87
|
+
return {
|
|
88
|
+
args: currentArgs,
|
|
89
|
+
proceed: false,
|
|
90
|
+
reason: result.reason,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
const nextArgs = result.args ?? currentArgs;
|
|
94
|
+
return processPlugin(index + 1, nextArgs);
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
console.warn(`Plugin ${plugin.name} beforeExecute failed:`, error);
|
|
98
|
+
// Continue with next plugin on error
|
|
99
|
+
return processPlugin(index + 1, currentArgs);
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
return processPlugin(0, { ...args });
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Unregister a plugin by name.
|
|
106
|
+
*
|
|
107
|
+
* @param name - Name of the plugin to unregister
|
|
108
|
+
* @returns True if a plugin was removed
|
|
109
|
+
*/
|
|
110
|
+
unregister(name) {
|
|
111
|
+
const initialLength = this.plugins.length;
|
|
112
|
+
this.plugins = this.plugins.filter((p) => p.name !== name);
|
|
113
|
+
return this.plugins.length < initialLength;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Sort plugins by priority (ascending).
|
|
117
|
+
*/
|
|
118
|
+
sortByPriority() {
|
|
119
|
+
this.plugins.sort((a, b) => (a.priority ?? ToolPluginManager.DEFAULT_PRIORITY) -
|
|
120
|
+
(b.priority ?? ToolPluginManager.DEFAULT_PRIORITY));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ToolMetadataHandler } from './metadata-handler.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ToolMetadataHandler } from './metadata-handler.js';
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { MetadataCallback } from '../../../../core/domain/cipher/tools/types.js';
|
|
2
|
+
import type { SessionEventBus } from '../../events/event-emitter.js';
|
|
3
|
+
/**
|
|
4
|
+
* Handles real-time metadata streaming from tools during execution.
|
|
5
|
+
*
|
|
6
|
+
* Creates metadata callbacks that tools can use to push updates
|
|
7
|
+
* (e.g., streaming bash output) which are then emitted as events.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* const handler = new ToolMetadataHandler(eventBus)
|
|
12
|
+
* const callback = handler.createCallback('call_123', 'bash_exec')
|
|
13
|
+
*
|
|
14
|
+
* // Tool can now stream updates:
|
|
15
|
+
* callback({ output: 'Building...\n', description: 'Running npm build' })
|
|
16
|
+
* callback({ output: 'Done!\n', progress: 100 })
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare class ToolMetadataHandler {
|
|
20
|
+
private readonly eventBus;
|
|
21
|
+
constructor(eventBus: SessionEventBus);
|
|
22
|
+
/**
|
|
23
|
+
* Creates a metadata callback for a specific tool call.
|
|
24
|
+
* The callback will emit 'llmservice:toolMetadata' events when invoked.
|
|
25
|
+
*
|
|
26
|
+
* @param callId - Unique identifier for the tool call
|
|
27
|
+
* @param toolName - Name of the tool being executed
|
|
28
|
+
* @returns Callback function for the tool to push metadata updates
|
|
29
|
+
*/
|
|
30
|
+
createCallback(callId: string, toolName: string): MetadataCallback;
|
|
31
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handles real-time metadata streaming from tools during execution.
|
|
3
|
+
*
|
|
4
|
+
* Creates metadata callbacks that tools can use to push updates
|
|
5
|
+
* (e.g., streaming bash output) which are then emitted as events.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* const handler = new ToolMetadataHandler(eventBus)
|
|
10
|
+
* const callback = handler.createCallback('call_123', 'bash_exec')
|
|
11
|
+
*
|
|
12
|
+
* // Tool can now stream updates:
|
|
13
|
+
* callback({ output: 'Building...\n', description: 'Running npm build' })
|
|
14
|
+
* callback({ output: 'Done!\n', progress: 100 })
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export class ToolMetadataHandler {
|
|
18
|
+
eventBus;
|
|
19
|
+
constructor(eventBus) {
|
|
20
|
+
this.eventBus = eventBus;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Creates a metadata callback for a specific tool call.
|
|
24
|
+
* The callback will emit 'llmservice:toolMetadata' events when invoked.
|
|
25
|
+
*
|
|
26
|
+
* @param callId - Unique identifier for the tool call
|
|
27
|
+
* @param toolName - Name of the tool being executed
|
|
28
|
+
* @returns Callback function for the tool to push metadata updates
|
|
29
|
+
*/
|
|
30
|
+
createCallback(callId, toolName) {
|
|
31
|
+
return (update) => {
|
|
32
|
+
this.eventBus.emit('llmservice:toolMetadata', {
|
|
33
|
+
callId,
|
|
34
|
+
metadata: update,
|
|
35
|
+
toolName,
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loads tool descriptions from external .txt files.
|
|
3
|
+
*
|
|
4
|
+
* This service enables tool descriptions to be stored in external files
|
|
5
|
+
* for easier editing without code changes. It implements lazy loading
|
|
6
|
+
* with caching for performance, following the same pattern as SimplePromptFactory.
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Lazy loading: Descriptions are only loaded when requested
|
|
10
|
+
* - Caching: Loaded descriptions are cached to avoid repeated file reads
|
|
11
|
+
* - Fallback: Returns undefined if file not found, allowing inline fallback
|
|
12
|
+
* - Path resolution: Handles compiled dist vs source paths automatically
|
|
13
|
+
*/
|
|
14
|
+
export declare class ToolDescriptionLoader {
|
|
15
|
+
private readonly basePath;
|
|
16
|
+
private readonly cache;
|
|
17
|
+
/**
|
|
18
|
+
* Creates a new tool description loader.
|
|
19
|
+
*
|
|
20
|
+
* @param basePath - Base path for tool description files.
|
|
21
|
+
* Defaults to dist/resources/tools/ relative to this file.
|
|
22
|
+
*/
|
|
23
|
+
constructor(basePath?: string);
|
|
24
|
+
/**
|
|
25
|
+
* Clear the description cache.
|
|
26
|
+
* Useful for testing or hot-reloading descriptions.
|
|
27
|
+
*/
|
|
28
|
+
clearCache(): void;
|
|
29
|
+
/**
|
|
30
|
+
* Get the base path for tool descriptions.
|
|
31
|
+
*
|
|
32
|
+
* @returns The base path being used for loading descriptions
|
|
33
|
+
*/
|
|
34
|
+
getBasePath(): string;
|
|
35
|
+
/**
|
|
36
|
+
* Check if a description file exists for a tool.
|
|
37
|
+
*
|
|
38
|
+
* @param toolName - Name of the tool
|
|
39
|
+
* @returns True if the description file exists
|
|
40
|
+
*/
|
|
41
|
+
has(toolName: string): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Load description for a tool from its .txt file.
|
|
44
|
+
*
|
|
45
|
+
* @param toolName - Name of the tool (e.g., 'bash_exec')
|
|
46
|
+
* @returns Description text, or undefined if file not found
|
|
47
|
+
*/
|
|
48
|
+
load(toolName: string): string | undefined;
|
|
49
|
+
/**
|
|
50
|
+
* Preload descriptions for multiple tools.
|
|
51
|
+
* Useful for batch initialization.
|
|
52
|
+
*
|
|
53
|
+
* @param toolNames - Array of tool names to preload
|
|
54
|
+
* @returns Map of tool names to their descriptions (excludes not found)
|
|
55
|
+
*/
|
|
56
|
+
preload(toolNames: string[]): Map<string, string>;
|
|
57
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
/**
|
|
5
|
+
* Loads tool descriptions from external .txt files.
|
|
6
|
+
*
|
|
7
|
+
* This service enables tool descriptions to be stored in external files
|
|
8
|
+
* for easier editing without code changes. It implements lazy loading
|
|
9
|
+
* with caching for performance, following the same pattern as SimplePromptFactory.
|
|
10
|
+
*
|
|
11
|
+
* Features:
|
|
12
|
+
* - Lazy loading: Descriptions are only loaded when requested
|
|
13
|
+
* - Caching: Loaded descriptions are cached to avoid repeated file reads
|
|
14
|
+
* - Fallback: Returns undefined if file not found, allowing inline fallback
|
|
15
|
+
* - Path resolution: Handles compiled dist vs source paths automatically
|
|
16
|
+
*/
|
|
17
|
+
export class ToolDescriptionLoader {
|
|
18
|
+
basePath;
|
|
19
|
+
cache = new Map();
|
|
20
|
+
/**
|
|
21
|
+
* Creates a new tool description loader.
|
|
22
|
+
*
|
|
23
|
+
* @param basePath - Base path for tool description files.
|
|
24
|
+
* Defaults to dist/resources/tools/ relative to this file.
|
|
25
|
+
*/
|
|
26
|
+
constructor(basePath) {
|
|
27
|
+
const currentDir = path.dirname(fileURLToPath(import.meta.url));
|
|
28
|
+
// When compiled: dist/infra/cipher/tools/tool-description-loader.js
|
|
29
|
+
// Resources are at: dist/resources/tools/
|
|
30
|
+
// So we need to go up 3 levels: ../../../resources/tools
|
|
31
|
+
this.basePath = basePath ?? path.join(currentDir, '../../../resources/tools');
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Clear the description cache.
|
|
35
|
+
* Useful for testing or hot-reloading descriptions.
|
|
36
|
+
*/
|
|
37
|
+
clearCache() {
|
|
38
|
+
this.cache.clear();
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get the base path for tool descriptions.
|
|
42
|
+
*
|
|
43
|
+
* @returns The base path being used for loading descriptions
|
|
44
|
+
*/
|
|
45
|
+
getBasePath() {
|
|
46
|
+
return this.basePath;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Check if a description file exists for a tool.
|
|
50
|
+
*
|
|
51
|
+
* @param toolName - Name of the tool
|
|
52
|
+
* @returns True if the description file exists
|
|
53
|
+
*/
|
|
54
|
+
has(toolName) {
|
|
55
|
+
// Check cache first
|
|
56
|
+
if (this.cache.has(toolName)) {
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
// Check file system
|
|
60
|
+
const filePath = path.join(this.basePath, `${toolName}.txt`);
|
|
61
|
+
return fs.existsSync(filePath);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Load description for a tool from its .txt file.
|
|
65
|
+
*
|
|
66
|
+
* @param toolName - Name of the tool (e.g., 'bash_exec')
|
|
67
|
+
* @returns Description text, or undefined if file not found
|
|
68
|
+
*/
|
|
69
|
+
load(toolName) {
|
|
70
|
+
// Check cache first
|
|
71
|
+
if (this.cache.has(toolName)) {
|
|
72
|
+
return this.cache.get(toolName);
|
|
73
|
+
}
|
|
74
|
+
// Build file path
|
|
75
|
+
const filePath = path.join(this.basePath, `${toolName}.txt`);
|
|
76
|
+
// Check if file exists
|
|
77
|
+
if (!fs.existsSync(filePath)) {
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
// Load and cache the description
|
|
81
|
+
try {
|
|
82
|
+
const description = fs.readFileSync(filePath, 'utf8').trim();
|
|
83
|
+
this.cache.set(toolName, description);
|
|
84
|
+
return description;
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// Return undefined on read errors (e.g., permission issues)
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Preload descriptions for multiple tools.
|
|
93
|
+
* Useful for batch initialization.
|
|
94
|
+
*
|
|
95
|
+
* @param toolNames - Array of tool names to preload
|
|
96
|
+
* @returns Map of tool names to their descriptions (excludes not found)
|
|
97
|
+
*/
|
|
98
|
+
preload(toolNames) {
|
|
99
|
+
const loaded = new Map();
|
|
100
|
+
for (const toolName of toolNames) {
|
|
101
|
+
const description = this.load(toolName);
|
|
102
|
+
if (description !== undefined) {
|
|
103
|
+
loaded.set(toolName, description);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return loaded;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
@@ -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
3
|
import type { IToolScheduler } from '../../../core/interfaces/cipher/i-tool-scheduler.js';
|
|
4
|
+
import type { ToolPluginManager } from './plugins/plugin-manager.js';
|
|
4
5
|
import type { ToolMarker } from './tool-markers.js';
|
|
5
6
|
import { type ToolExecutionResult } from '../../../core/domain/cipher/tools/tool-error.js';
|
|
6
7
|
/**
|
|
@@ -11,6 +12,7 @@ import { type ToolExecutionResult } from '../../../core/domain/cipher/tools/tool
|
|
|
11
12
|
*
|
|
12
13
|
* Features:
|
|
13
14
|
* - Optional scheduler integration for policy-based execution
|
|
15
|
+
* - Optional plugin system for before/after execution hooks
|
|
14
16
|
* - Tool caching for performance
|
|
15
17
|
* - Structured error handling with classification
|
|
16
18
|
*
|
|
@@ -18,6 +20,11 @@ import { type ToolExecutionResult } from '../../../core/domain/cipher/tools/tool
|
|
|
18
20
|
* 1. Policy check (ALLOW/DENY)
|
|
19
21
|
* 2. Execution (if allowed)
|
|
20
22
|
*
|
|
23
|
+
* When a plugin manager is provided, execution flows through:
|
|
24
|
+
* 1. Before hooks (can modify args or block execution)
|
|
25
|
+
* 2. Tool execution
|
|
26
|
+
* 3. After hooks (for logging, auditing, etc.)
|
|
27
|
+
*
|
|
21
28
|
* Without a scheduler, tools execute directly via the provider.
|
|
22
29
|
*/
|
|
23
30
|
export declare class ToolManager {
|
|
@@ -30,6 +37,8 @@ export declare class ToolManager {
|
|
|
30
37
|
*/
|
|
31
38
|
private static readonly QUERY_TOOL_NAMES;
|
|
32
39
|
private cacheValid;
|
|
40
|
+
private callIdCounter;
|
|
41
|
+
private readonly pluginManager?;
|
|
33
42
|
private readonly scheduler?;
|
|
34
43
|
private readonly toolProvider;
|
|
35
44
|
private toolsCache;
|
|
@@ -38,8 +47,9 @@ export declare class ToolManager {
|
|
|
38
47
|
*
|
|
39
48
|
* @param toolProvider - Tool provider instance
|
|
40
49
|
* @param scheduler - Optional tool scheduler for policy-based execution
|
|
50
|
+
* @param pluginManager - Optional plugin manager for before/after hooks
|
|
41
51
|
*/
|
|
42
|
-
constructor(toolProvider: IToolProvider, scheduler?: IToolScheduler);
|
|
52
|
+
constructor(toolProvider: IToolProvider, scheduler?: IToolScheduler, pluginManager?: ToolPluginManager);
|
|
43
53
|
/**
|
|
44
54
|
* Execute a tool by name with structured error handling.
|
|
45
55
|
*
|
|
@@ -47,7 +57,12 @@ export declare class ToolManager {
|
|
|
47
57
|
* error classification, and metadata. This enables better error handling
|
|
48
58
|
* and provides actionable feedback to the LLM.
|
|
49
59
|
*
|
|
50
|
-
* When a
|
|
60
|
+
* When a plugin manager is configured, execution flows through:
|
|
61
|
+
* 1. Before hooks (can modify args or block execution)
|
|
62
|
+
* 2. Tool execution (via scheduler or provider)
|
|
63
|
+
* 3. After hooks (for logging, auditing, etc.)
|
|
64
|
+
*
|
|
65
|
+
* When a scheduler is configured, tool execution flows through:
|
|
51
66
|
* 1. Policy check (ALLOW/DENY)
|
|
52
67
|
* 2. Execution (if allowed)
|
|
53
68
|
*
|
|
@@ -56,9 +71,10 @@ export declare class ToolManager {
|
|
|
56
71
|
* @param toolName - Name of the tool to execute
|
|
57
72
|
* @param args - Tool arguments (validated by provider)
|
|
58
73
|
* @param sessionId - Optional session ID for context
|
|
74
|
+
* @param context - Optional execution context (includes metadata callback for streaming)
|
|
59
75
|
* @returns Structured tool execution result
|
|
60
76
|
*/
|
|
61
|
-
executeTool(toolName: string, args: Record<string, unknown>, sessionId?: string): Promise<ToolExecutionResult>;
|
|
77
|
+
executeTool(toolName: string, args: Record<string, unknown>, sessionId?: string, context?: ToolExecutionContext): Promise<ToolExecutionResult>;
|
|
62
78
|
/**
|
|
63
79
|
* Get all available tools in JSON Schema format.
|
|
64
80
|
* Results are cached for performance.
|
|
@@ -101,6 +117,20 @@ export declare class ToolManager {
|
|
|
101
117
|
* @returns Array of tool names with the specified marker
|
|
102
118
|
*/
|
|
103
119
|
getToolsByMarker(marker: ToolMarker): string[];
|
|
120
|
+
/**
|
|
121
|
+
* Get filtered tools based on agent configuration.
|
|
122
|
+
* Uses the agent registry to determine which tools are enabled/disabled for the agent.
|
|
123
|
+
*
|
|
124
|
+
* Tool filtering rules from agent.tools config:
|
|
125
|
+
* - `{ '*': false }` - Disable all tools
|
|
126
|
+
* - `{ '*': false, 'tool_name': true }` - Only enable specific tools
|
|
127
|
+
* - `{ 'tool_name': false }` - Disable specific tools, keep others enabled
|
|
128
|
+
* - `{}` or undefined - All tools enabled (default)
|
|
129
|
+
*
|
|
130
|
+
* @param agentName - The agent name (e.g., 'plan', 'query', 'curate')
|
|
131
|
+
* @returns Filtered tool set based on agent configuration
|
|
132
|
+
*/
|
|
133
|
+
getToolsForAgent(agentName: string): ToolSet;
|
|
104
134
|
/**
|
|
105
135
|
* Get filtered tools based on command type.
|
|
106
136
|
* For 'query' command, returns only read-only discovery tools.
|
|
@@ -133,6 +163,10 @@ export declare class ToolManager {
|
|
|
133
163
|
* - Manual cache clearing needed
|
|
134
164
|
*/
|
|
135
165
|
refresh(): void;
|
|
166
|
+
/**
|
|
167
|
+
* Generates a unique call ID for tool execution.
|
|
168
|
+
*/
|
|
169
|
+
private generateCallId;
|
|
136
170
|
/**
|
|
137
171
|
* Invalidates the tool cache.
|
|
138
172
|
* Next call to getAllTools() will rebuild the cache.
|