byterover-cli 0.4.1 → 1.0.1
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
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Schema for prompt configuration loaded from YAML files.
|
|
4
|
+
*
|
|
5
|
+
* Either 'prompt' (single template) or 'prompts' (named templates) is required.
|
|
6
|
+
*
|
|
7
|
+
* Handles mapping from YAML snake_case (excluded_tools) to TypeScript camelCase (excludedTools).
|
|
8
|
+
*/
|
|
9
|
+
export const PromptConfigSchema = z
|
|
10
|
+
.preprocess((data) => {
|
|
11
|
+
if (typeof data === 'object' && data !== null && !Array.isArray(data)) {
|
|
12
|
+
const processed = { ...data };
|
|
13
|
+
// Map excluded_tools (YAML) to excludedTools (TypeScript)
|
|
14
|
+
if ('excluded_tools' in processed && !('excludedTools' in processed)) {
|
|
15
|
+
processed.excludedTools = processed.excluded_tools;
|
|
16
|
+
delete processed.excluded_tools;
|
|
17
|
+
}
|
|
18
|
+
return processed;
|
|
19
|
+
}
|
|
20
|
+
return data;
|
|
21
|
+
}, z
|
|
22
|
+
.object({
|
|
23
|
+
description: z.string().optional().describe('Human-readable description of this prompt'),
|
|
24
|
+
excludedTools: z.array(z.string()).optional().describe('Tools to exclude from this prompt mode'),
|
|
25
|
+
prompt: z.string().optional().describe('Main prompt template content'),
|
|
26
|
+
prompts: z.record(z.string()).optional().describe('Named prompt templates (e.g., for reflection types)'),
|
|
27
|
+
})
|
|
28
|
+
.strict()
|
|
29
|
+
.refine((data) => data.prompt !== undefined || data.prompts !== undefined, {
|
|
30
|
+
message: "Either 'prompt' or 'prompts' field is required",
|
|
31
|
+
})
|
|
32
|
+
.describe('Prompt configuration loaded from YAML'));
|
|
33
|
+
/**
|
|
34
|
+
* Schema for conversation metadata.
|
|
35
|
+
*/
|
|
36
|
+
export const ConversationMetadataSchema = z
|
|
37
|
+
.object({
|
|
38
|
+
conversationId: z.string().optional().describe('Unique identifier for the conversation'),
|
|
39
|
+
title: z.string().optional().describe('Title or topic of the conversation'),
|
|
40
|
+
})
|
|
41
|
+
.strict();
|
|
42
|
+
/**
|
|
43
|
+
* Schema for build context passed to system prompt builder.
|
|
44
|
+
*
|
|
45
|
+
* Contains runtime information needed to construct the system prompt.
|
|
46
|
+
*/
|
|
47
|
+
export const BuildContextSchema = z
|
|
48
|
+
.object({
|
|
49
|
+
availableMarkers: z.record(z.string()).optional().describe('Available markers and their descriptions'),
|
|
50
|
+
availableTools: z.array(z.string()).optional().describe('List of available tool names'),
|
|
51
|
+
commandType: z.enum(['curate', 'query']).optional().describe('Type of command being executed'),
|
|
52
|
+
conversationMetadata: ConversationMetadataSchema.optional().describe('Metadata about the current conversation'),
|
|
53
|
+
environmentContext: z.any().optional().describe('Environment context object (validated separately)'),
|
|
54
|
+
fileReferenceInstructions: z.string().optional().describe('Instructions for file reference handling'),
|
|
55
|
+
memoryManager: z.any().optional().describe('Memory manager instance (runtime dependency)'),
|
|
56
|
+
})
|
|
57
|
+
.strict()
|
|
58
|
+
.describe('Runtime context for building system prompts');
|
|
59
|
+
/**
|
|
60
|
+
* Schema for environment context builder options.
|
|
61
|
+
*/
|
|
62
|
+
export const EnvironmentContextOptionsSchema = z
|
|
63
|
+
.object({
|
|
64
|
+
includeBrvStructure: z
|
|
65
|
+
.boolean()
|
|
66
|
+
.optional()
|
|
67
|
+
.default(true)
|
|
68
|
+
.describe('Whether to include .brv directory structure explanation'),
|
|
69
|
+
includeFileTree: z.boolean().optional().default(true).describe('Whether to include project file tree'),
|
|
70
|
+
maxFileTreeDepth: z.number().int().positive().optional().default(3).describe('Maximum depth for file tree traversal'),
|
|
71
|
+
maxFileTreeEntries: z
|
|
72
|
+
.number()
|
|
73
|
+
.int()
|
|
74
|
+
.positive()
|
|
75
|
+
.optional()
|
|
76
|
+
.default(100)
|
|
77
|
+
.describe('Maximum number of entries in file tree'),
|
|
78
|
+
workingDirectory: z.string().min(1).describe('Absolute path to the working directory'),
|
|
79
|
+
})
|
|
80
|
+
.strict()
|
|
81
|
+
.describe('Options for building environment context');
|
|
82
|
+
/**
|
|
83
|
+
* Schema for reflection prompt context.
|
|
84
|
+
*/
|
|
85
|
+
export const ReflectionContextSchema = z
|
|
86
|
+
.object({
|
|
87
|
+
currentIteration: z.number().int().positive().optional().describe('Current iteration number'),
|
|
88
|
+
maxIterations: z.number().int().positive().optional().describe('Maximum iterations allowed'),
|
|
89
|
+
type: z
|
|
90
|
+
.enum(['completion_check', 'final_iteration', 'mid_point_check', 'near_max_iterations'])
|
|
91
|
+
.describe('Type of reflection prompt to build'),
|
|
92
|
+
})
|
|
93
|
+
.strict()
|
|
94
|
+
.describe('Context for building reflection prompts');
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import type { ContributorContext, SystemPromptContributor } from '../../../core/domain/cipher/system-prompt/types.js';
|
|
2
|
+
import type { ValidatedContributorConfig } from './contributor-schemas.js';
|
|
3
|
+
/**
|
|
4
|
+
* Reflection prompt type for iteration-based prompts.
|
|
5
|
+
*/
|
|
6
|
+
export type ReflectionType = 'completion_check' | 'final_iteration' | 'mid_point_check' | 'near_max_iterations';
|
|
7
|
+
/**
|
|
8
|
+
* Context for building reflection prompts.
|
|
9
|
+
*/
|
|
10
|
+
export interface ReflectionContext {
|
|
11
|
+
/** Current iteration number (required for near_max_iterations and mid_point_check) */
|
|
12
|
+
currentIteration?: number;
|
|
13
|
+
/** Maximum iterations allowed (required for near_max_iterations and mid_point_check) */
|
|
14
|
+
maxIterations?: number;
|
|
15
|
+
/** Type of reflection prompt to build */
|
|
16
|
+
type: ReflectionType;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Options for SystemPromptManager configuration.
|
|
20
|
+
*/
|
|
21
|
+
export interface SystemPromptManagerOptions {
|
|
22
|
+
/** Base path for file contributors (defaults to current directory) */
|
|
23
|
+
basePath?: string;
|
|
24
|
+
/** Whether to validate contributor configs with Zod (default: true) */
|
|
25
|
+
validateConfig?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* SystemPromptManager orchestrates contributor-based prompt composition.
|
|
29
|
+
*
|
|
30
|
+
* Features:
|
|
31
|
+
* - Registers and manages multiple contributors
|
|
32
|
+
* - Builds prompts in parallel for performance
|
|
33
|
+
* - Validates contributor configurations with Zod
|
|
34
|
+
* - Sorts contributors by priority
|
|
35
|
+
*/
|
|
36
|
+
export declare class SystemPromptManager {
|
|
37
|
+
private readonly basePath;
|
|
38
|
+
private contributors;
|
|
39
|
+
private readonly validateConfig;
|
|
40
|
+
/**
|
|
41
|
+
* Creates a new SystemPromptManager.
|
|
42
|
+
*
|
|
43
|
+
* @param options - Configuration options
|
|
44
|
+
*/
|
|
45
|
+
constructor(options?: SystemPromptManagerOptions);
|
|
46
|
+
/**
|
|
47
|
+
* Build the complete system prompt using all contributors in parallel.
|
|
48
|
+
*
|
|
49
|
+
* Contributors are executed concurrently and their outputs are
|
|
50
|
+
* concatenated in priority order.
|
|
51
|
+
*
|
|
52
|
+
* @param context - Runtime context with dependencies
|
|
53
|
+
* @returns Complete system prompt string
|
|
54
|
+
*/
|
|
55
|
+
build(context: ContributorContext): Promise<string>;
|
|
56
|
+
/**
|
|
57
|
+
* Build a system prompt specifically for an agent.
|
|
58
|
+
*
|
|
59
|
+
* This method builds the prompt by:
|
|
60
|
+
* 1. Getting the agent configuration from the registry
|
|
61
|
+
* 2. Loading the agent's prompt (from promptFile or inline prompt)
|
|
62
|
+
* 3. Combining it with base contributors (datetime, environment, etc.)
|
|
63
|
+
*
|
|
64
|
+
* @param agentName - Name of the agent (e.g., 'plan', 'query', 'curate')
|
|
65
|
+
* @param context - Runtime context with dependencies
|
|
66
|
+
* @returns Complete system prompt for the agent
|
|
67
|
+
*/
|
|
68
|
+
buildForAgent(agentName: string, context: ContributorContext): Promise<string>;
|
|
69
|
+
/**
|
|
70
|
+
* Build a reflection prompt for completion checking.
|
|
71
|
+
*
|
|
72
|
+
* @param context - Context with iteration information
|
|
73
|
+
* @returns Formatted reflection prompt
|
|
74
|
+
*/
|
|
75
|
+
buildReflectionPrompt(context: ReflectionContext): string;
|
|
76
|
+
/**
|
|
77
|
+
* Clear all registered contributors.
|
|
78
|
+
*/
|
|
79
|
+
clearContributors(): void;
|
|
80
|
+
/**
|
|
81
|
+
* Get the list of registered contributors.
|
|
82
|
+
*
|
|
83
|
+
* @returns Array of contributors (copy)
|
|
84
|
+
*/
|
|
85
|
+
getContributors(): SystemPromptContributor[];
|
|
86
|
+
/**
|
|
87
|
+
* Get tool-specific output guidance for a tool.
|
|
88
|
+
*
|
|
89
|
+
* @param toolName - The name of the tool (e.g., 'write_memory')
|
|
90
|
+
* @returns The guidance text if available, null otherwise
|
|
91
|
+
*/
|
|
92
|
+
getToolOutputGuidance(toolName: string): null | string;
|
|
93
|
+
/**
|
|
94
|
+
* Register a single contributor directly.
|
|
95
|
+
*
|
|
96
|
+
* @param contributor - Contributor instance to register
|
|
97
|
+
*/
|
|
98
|
+
registerContributor(contributor: SystemPromptContributor): void;
|
|
99
|
+
/**
|
|
100
|
+
* Register contributors from configuration objects.
|
|
101
|
+
*
|
|
102
|
+
* Validates configs with Zod if validateConfig is enabled,
|
|
103
|
+
* creates contributor instances, and sorts by priority.
|
|
104
|
+
*
|
|
105
|
+
* @param configs - Array of contributor configuration objects
|
|
106
|
+
*/
|
|
107
|
+
registerContributors(configs: ValidatedContributorConfig[]): void;
|
|
108
|
+
/**
|
|
109
|
+
* Create a contributor instance from configuration.
|
|
110
|
+
*
|
|
111
|
+
* @param config - Validated contributor configuration
|
|
112
|
+
* @returns Contributor instance
|
|
113
|
+
*/
|
|
114
|
+
private createContributor;
|
|
115
|
+
/**
|
|
116
|
+
* Load and parse a YAML file from the base path.
|
|
117
|
+
*
|
|
118
|
+
* @param filename - Relative filename to load
|
|
119
|
+
* @returns Parsed YAML content
|
|
120
|
+
*/
|
|
121
|
+
private loadYamlFile;
|
|
122
|
+
/**
|
|
123
|
+
* Render a template string with variable substitution.
|
|
124
|
+
*
|
|
125
|
+
* Uses simple {{variable}} syntax.
|
|
126
|
+
*
|
|
127
|
+
* @param template - Template string with {{variable}} placeholders
|
|
128
|
+
* @param variables - Variables to substitute
|
|
129
|
+
* @returns Rendered string
|
|
130
|
+
*/
|
|
131
|
+
private renderTemplate;
|
|
132
|
+
/**
|
|
133
|
+
* Sort contributors by priority (lower = first).
|
|
134
|
+
*/
|
|
135
|
+
private sortContributors;
|
|
136
|
+
}
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import { load as loadYaml } from 'js-yaml';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { getAgentRegistry } from '../../../core/domain/cipher/agent/agent-registry.js';
|
|
6
|
+
import { SystemPromptError } from '../../../core/domain/cipher/errors/system-prompt-error.js';
|
|
7
|
+
import { ContributorConfigSchema } from './contributor-schemas.js';
|
|
8
|
+
import { AgentPromptContributor, DateTimeContributor, EnvironmentContributor, FileContributor, MemoryContributor, StaticContributor, } from './contributors/index.js';
|
|
9
|
+
/**
|
|
10
|
+
* SystemPromptManager orchestrates contributor-based prompt composition.
|
|
11
|
+
*
|
|
12
|
+
* Features:
|
|
13
|
+
* - Registers and manages multiple contributors
|
|
14
|
+
* - Builds prompts in parallel for performance
|
|
15
|
+
* - Validates contributor configurations with Zod
|
|
16
|
+
* - Sorts contributors by priority
|
|
17
|
+
*/
|
|
18
|
+
export class SystemPromptManager {
|
|
19
|
+
basePath;
|
|
20
|
+
contributors = [];
|
|
21
|
+
validateConfig;
|
|
22
|
+
/**
|
|
23
|
+
* Creates a new SystemPromptManager.
|
|
24
|
+
*
|
|
25
|
+
* @param options - Configuration options
|
|
26
|
+
*/
|
|
27
|
+
constructor(options = {}) {
|
|
28
|
+
this.basePath = options.basePath ?? '';
|
|
29
|
+
this.validateConfig = options.validateConfig ?? true;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Build the complete system prompt using all contributors in parallel.
|
|
33
|
+
*
|
|
34
|
+
* Contributors are executed concurrently and their outputs are
|
|
35
|
+
* concatenated in priority order.
|
|
36
|
+
*
|
|
37
|
+
* @param context - Runtime context with dependencies
|
|
38
|
+
* @returns Complete system prompt string
|
|
39
|
+
*/
|
|
40
|
+
async build(context) {
|
|
41
|
+
if (this.contributors.length === 0) {
|
|
42
|
+
return '';
|
|
43
|
+
}
|
|
44
|
+
// Execute all contributors in parallel
|
|
45
|
+
const results = await Promise.all(this.contributors.map(async (contributor) => {
|
|
46
|
+
try {
|
|
47
|
+
const content = await contributor.getContent(context);
|
|
48
|
+
return { content, error: null, id: contributor.id };
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
return {
|
|
52
|
+
content: '',
|
|
53
|
+
error: error instanceof Error ? error.message : String(error),
|
|
54
|
+
id: contributor.id,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}));
|
|
58
|
+
// Check for errors
|
|
59
|
+
const errors = results.filter((r) => r.error !== null);
|
|
60
|
+
if (errors.length > 0) {
|
|
61
|
+
const firstError = errors[0];
|
|
62
|
+
throw SystemPromptError.contributorExecutionFailed(firstError.id, firstError.error);
|
|
63
|
+
}
|
|
64
|
+
// Combine content from all contributors
|
|
65
|
+
return results
|
|
66
|
+
.map((r) => r.content)
|
|
67
|
+
.filter(Boolean)
|
|
68
|
+
.join('\n\n');
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Build a system prompt specifically for an agent.
|
|
72
|
+
*
|
|
73
|
+
* This method builds the prompt by:
|
|
74
|
+
* 1. Getting the agent configuration from the registry
|
|
75
|
+
* 2. Loading the agent's prompt (from promptFile or inline prompt)
|
|
76
|
+
* 3. Combining it with base contributors (datetime, environment, etc.)
|
|
77
|
+
*
|
|
78
|
+
* @param agentName - Name of the agent (e.g., 'plan', 'query', 'curate')
|
|
79
|
+
* @param context - Runtime context with dependencies
|
|
80
|
+
* @returns Complete system prompt for the agent
|
|
81
|
+
*/
|
|
82
|
+
async buildForAgent(agentName, context) {
|
|
83
|
+
const registry = getAgentRegistry();
|
|
84
|
+
const agent = registry.get(agentName);
|
|
85
|
+
if (!agent) {
|
|
86
|
+
// Unknown agent - fall back to default build
|
|
87
|
+
return this.build(context);
|
|
88
|
+
}
|
|
89
|
+
// Create agent prompt contributor
|
|
90
|
+
const agentContributor = new AgentPromptContributor('agent', 5, {
|
|
91
|
+
basePath: this.basePath,
|
|
92
|
+
cache: true,
|
|
93
|
+
});
|
|
94
|
+
// Build context with agent name for the contributor
|
|
95
|
+
const agentContext = {
|
|
96
|
+
...context,
|
|
97
|
+
agentName,
|
|
98
|
+
};
|
|
99
|
+
// Get agent-specific prompt
|
|
100
|
+
const agentPrompt = await agentContributor.getContent(agentContext);
|
|
101
|
+
// If agent has no custom prompt, use default build
|
|
102
|
+
if (!agentPrompt) {
|
|
103
|
+
return this.build(context);
|
|
104
|
+
}
|
|
105
|
+
// Build base prompt from existing contributors
|
|
106
|
+
const basePrompt = await this.build(context);
|
|
107
|
+
// Combine: agent prompt takes precedence, then base prompt
|
|
108
|
+
// Agent prompt comes first as it defines the agent's role
|
|
109
|
+
if (basePrompt) {
|
|
110
|
+
return `${agentPrompt}\n\n${basePrompt}`;
|
|
111
|
+
}
|
|
112
|
+
return agentPrompt;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Build a reflection prompt for completion checking.
|
|
116
|
+
*
|
|
117
|
+
* @param context - Context with iteration information
|
|
118
|
+
* @returns Formatted reflection prompt
|
|
119
|
+
*/
|
|
120
|
+
buildReflectionPrompt(context) {
|
|
121
|
+
const reflectionConfig = this.loadYamlFile('reflection.yml');
|
|
122
|
+
if (!reflectionConfig.prompts) {
|
|
123
|
+
throw SystemPromptError.configMissingField('prompts', 'reflection.yml');
|
|
124
|
+
}
|
|
125
|
+
const template = reflectionConfig.prompts[context.type];
|
|
126
|
+
if (!template) {
|
|
127
|
+
throw SystemPromptError.configMissingField(`prompts.${context.type}`, 'reflection.yml');
|
|
128
|
+
}
|
|
129
|
+
if (context.type === 'near_max_iterations' && context.currentIteration && context.maxIterations) {
|
|
130
|
+
/* eslint-disable camelcase */
|
|
131
|
+
return this.renderTemplate(template, {
|
|
132
|
+
current_iteration: context.currentIteration.toString(),
|
|
133
|
+
max_iterations: context.maxIterations.toString(),
|
|
134
|
+
});
|
|
135
|
+
/* eslint-enable camelcase */
|
|
136
|
+
}
|
|
137
|
+
if (context.type === 'mid_point_check' && context.currentIteration && context.maxIterations) {
|
|
138
|
+
const remaining = context.maxIterations - context.currentIteration;
|
|
139
|
+
/* eslint-disable camelcase */
|
|
140
|
+
return this.renderTemplate(template, {
|
|
141
|
+
current_iteration: context.currentIteration.toString(),
|
|
142
|
+
remaining_iterations: remaining.toString(),
|
|
143
|
+
});
|
|
144
|
+
/* eslint-enable camelcase */
|
|
145
|
+
}
|
|
146
|
+
return template;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Clear all registered contributors.
|
|
150
|
+
*/
|
|
151
|
+
clearContributors() {
|
|
152
|
+
this.contributors = [];
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Get the list of registered contributors.
|
|
156
|
+
*
|
|
157
|
+
* @returns Array of contributors (copy)
|
|
158
|
+
*/
|
|
159
|
+
getContributors() {
|
|
160
|
+
return [...this.contributors];
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Get tool-specific output guidance for a tool.
|
|
164
|
+
*
|
|
165
|
+
* @param toolName - The name of the tool (e.g., 'write_memory')
|
|
166
|
+
* @returns The guidance text if available, null otherwise
|
|
167
|
+
*/
|
|
168
|
+
getToolOutputGuidance(toolName) {
|
|
169
|
+
try {
|
|
170
|
+
const toolOutputsConfig = this.loadYamlFile('tool-outputs.yml');
|
|
171
|
+
if (toolOutputsConfig.prompts) {
|
|
172
|
+
const promptKey = `${toolName}_output`;
|
|
173
|
+
const guidance = toolOutputsConfig.prompts[promptKey];
|
|
174
|
+
if (guidance) {
|
|
175
|
+
return guidance;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Register a single contributor directly.
|
|
186
|
+
*
|
|
187
|
+
* @param contributor - Contributor instance to register
|
|
188
|
+
*/
|
|
189
|
+
registerContributor(contributor) {
|
|
190
|
+
this.contributors.push(contributor);
|
|
191
|
+
this.sortContributors();
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Register contributors from configuration objects.
|
|
195
|
+
*
|
|
196
|
+
* Validates configs with Zod if validateConfig is enabled,
|
|
197
|
+
* creates contributor instances, and sorts by priority.
|
|
198
|
+
*
|
|
199
|
+
* @param configs - Array of contributor configuration objects
|
|
200
|
+
*/
|
|
201
|
+
registerContributors(configs) {
|
|
202
|
+
for (const config of configs) {
|
|
203
|
+
// Validate config if enabled
|
|
204
|
+
if (this.validateConfig) {
|
|
205
|
+
const parseResult = ContributorConfigSchema.safeParse(config);
|
|
206
|
+
if (!parseResult.success) {
|
|
207
|
+
const errorMessages = parseResult.error.errors
|
|
208
|
+
.map((err) => `${err.path.join('.')}: ${err.message}`)
|
|
209
|
+
.join('; ');
|
|
210
|
+
throw SystemPromptError.configInvalid(errorMessages, parseResult.error.errors);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
// Skip disabled contributors
|
|
214
|
+
if (config.enabled === false) {
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
const contributor = this.createContributor(config);
|
|
218
|
+
this.contributors.push(contributor);
|
|
219
|
+
}
|
|
220
|
+
this.sortContributors();
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Create a contributor instance from configuration.
|
|
224
|
+
*
|
|
225
|
+
* @param config - Validated contributor configuration
|
|
226
|
+
* @returns Contributor instance
|
|
227
|
+
*/
|
|
228
|
+
createContributor(config) {
|
|
229
|
+
switch (config.type) {
|
|
230
|
+
case 'dateTime': {
|
|
231
|
+
return new DateTimeContributor(config.id, config.priority);
|
|
232
|
+
}
|
|
233
|
+
case 'environment': {
|
|
234
|
+
return new EnvironmentContributor(config.id, config.priority);
|
|
235
|
+
}
|
|
236
|
+
case 'file': {
|
|
237
|
+
return new FileContributor(config.id, config.priority, config.filepath, {
|
|
238
|
+
basePath: this.basePath,
|
|
239
|
+
cache: config.options?.cache,
|
|
240
|
+
validateMtime: config.options?.validateMtime,
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
case 'memory': {
|
|
244
|
+
return new MemoryContributor(config.id, config.priority, {
|
|
245
|
+
includeTags: config.options?.includeTags,
|
|
246
|
+
limit: config.options?.limit,
|
|
247
|
+
pinnedOnly: config.options?.pinnedOnly,
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
case 'static': {
|
|
251
|
+
return new StaticContributor(config.id, config.priority, config.content);
|
|
252
|
+
}
|
|
253
|
+
default: {
|
|
254
|
+
// Exhaustive check - TypeScript will error if we miss a case
|
|
255
|
+
const _exhaustive = config;
|
|
256
|
+
throw SystemPromptError.contributorInvalidConfig(_exhaustive);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Load and parse a YAML file from the base path.
|
|
262
|
+
*
|
|
263
|
+
* @param filename - Relative filename to load
|
|
264
|
+
* @returns Parsed YAML content
|
|
265
|
+
*/
|
|
266
|
+
loadYamlFile(filename) {
|
|
267
|
+
const currentDir = path.dirname(fileURLToPath(import.meta.url));
|
|
268
|
+
const defaultBasePath = path.join(currentDir, '../../../resources/prompts');
|
|
269
|
+
const basePath = this.basePath || defaultBasePath;
|
|
270
|
+
const fullPath = path.join(basePath, filename);
|
|
271
|
+
if (!fs.existsSync(fullPath)) {
|
|
272
|
+
throw SystemPromptError.fileNotFound(fullPath);
|
|
273
|
+
}
|
|
274
|
+
let yamlContent;
|
|
275
|
+
try {
|
|
276
|
+
yamlContent = fs.readFileSync(fullPath, 'utf8');
|
|
277
|
+
}
|
|
278
|
+
catch (error) {
|
|
279
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
280
|
+
throw SystemPromptError.fileReadFailed(fullPath, reason);
|
|
281
|
+
}
|
|
282
|
+
return loadYaml(yamlContent);
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Render a template string with variable substitution.
|
|
286
|
+
*
|
|
287
|
+
* Uses simple {{variable}} syntax.
|
|
288
|
+
*
|
|
289
|
+
* @param template - Template string with {{variable}} placeholders
|
|
290
|
+
* @param variables - Variables to substitute
|
|
291
|
+
* @returns Rendered string
|
|
292
|
+
*/
|
|
293
|
+
renderTemplate(template, variables) {
|
|
294
|
+
let result = template;
|
|
295
|
+
for (const [key, value] of Object.entries(variables)) {
|
|
296
|
+
const regex = new RegExp(`{{\\s*${key}\\s*}}`, 'g');
|
|
297
|
+
result = result.replaceAll(regex, value ?? '');
|
|
298
|
+
}
|
|
299
|
+
return result;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Sort contributors by priority (lower = first).
|
|
303
|
+
*/
|
|
304
|
+
sortContributors() {
|
|
305
|
+
this.contributors.sort((a, b) => a.priority - b.priority);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Todo } from '../../../core/domain/cipher/todos/types.js';
|
|
2
|
+
import type { ITodoStorage } from '../../../core/interfaces/cipher/i-todo-storage.js';
|
|
3
|
+
/**
|
|
4
|
+
* In-memory implementation of todo storage.
|
|
5
|
+
*
|
|
6
|
+
* Stores todos per session in a Map. Data is lost when process restarts.
|
|
7
|
+
* Use a persistent implementation if you need todos to survive restarts.
|
|
8
|
+
*/
|
|
9
|
+
export declare class TodoStorageService implements ITodoStorage {
|
|
10
|
+
private storage;
|
|
11
|
+
/**
|
|
12
|
+
* Get todos for a specific session.
|
|
13
|
+
*
|
|
14
|
+
* @param sessionId - Unique session identifier
|
|
15
|
+
* @returns Promise that resolves to array of todos, empty array if not found
|
|
16
|
+
*/
|
|
17
|
+
get(sessionId: string): Promise<Todo[]>;
|
|
18
|
+
/**
|
|
19
|
+
* Update (replace) todos for a specific session.
|
|
20
|
+
*
|
|
21
|
+
* @param sessionId - Unique session identifier
|
|
22
|
+
* @param todos - Array of todos to store
|
|
23
|
+
* @returns Promise that resolves when todos are saved
|
|
24
|
+
*/
|
|
25
|
+
update(sessionId: string, todos: Todo[]): Promise<void>;
|
|
26
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory implementation of todo storage.
|
|
3
|
+
*
|
|
4
|
+
* Stores todos per session in a Map. Data is lost when process restarts.
|
|
5
|
+
* Use a persistent implementation if you need todos to survive restarts.
|
|
6
|
+
*/
|
|
7
|
+
export class TodoStorageService {
|
|
8
|
+
storage = new Map();
|
|
9
|
+
/**
|
|
10
|
+
* Get todos for a specific session.
|
|
11
|
+
*
|
|
12
|
+
* @param sessionId - Unique session identifier
|
|
13
|
+
* @returns Promise that resolves to array of todos, empty array if not found
|
|
14
|
+
*/
|
|
15
|
+
async get(sessionId) {
|
|
16
|
+
return this.storage.get(sessionId) ?? [];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Update (replace) todos for a specific session.
|
|
20
|
+
*
|
|
21
|
+
* @param sessionId - Unique session identifier
|
|
22
|
+
* @param todos - Array of todos to store
|
|
23
|
+
* @returns Promise that resolves when todos are saved
|
|
24
|
+
*/
|
|
25
|
+
async update(sessionId, todos) {
|
|
26
|
+
this.storage.set(sessionId, todos);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -91,7 +91,11 @@ export class CoreToolScheduler {
|
|
|
91
91
|
this.updateStatus(execution, 'executing');
|
|
92
92
|
execution.startedAt = new Date();
|
|
93
93
|
try {
|
|
94
|
-
|
|
94
|
+
// Pass full context (including taskId) to toolProvider for subagent billing
|
|
95
|
+
const result = await this.toolProvider.executeTool(toolName, args, context.sessionId, {
|
|
96
|
+
sessionId: context.sessionId,
|
|
97
|
+
taskId: context.taskId,
|
|
98
|
+
});
|
|
95
99
|
this.updateStatus(execution, 'completed');
|
|
96
100
|
execution.result = result;
|
|
97
101
|
execution.completedAt = new Date();
|
|
@@ -71,7 +71,7 @@ export const DEFAULT_POLICY_RULES = [
|
|
|
71
71
|
decision: 'ALLOW',
|
|
72
72
|
name: 'allow-read-tools',
|
|
73
73
|
reason: 'Read operations are safe',
|
|
74
|
-
toolPattern: /^(read_file|glob_files|grep_content|list_memories|read_memory|search_history
|
|
74
|
+
toolPattern: /^(read_file|glob_files|grep_content|list_memories|read_memory|search_history)$/,
|
|
75
75
|
},
|
|
76
76
|
/**
|
|
77
77
|
* Allow all write operations (autonomous mode).
|
|
@@ -5,6 +5,7 @@ import type { IProcessService } from '../../../../core/interfaces/cipher/i-proce
|
|
|
5
5
|
*
|
|
6
6
|
* Executes shell commands with security validation and approval for dangerous commands.
|
|
7
7
|
* Supports both foreground (wait for completion) and background (return immediately) execution.
|
|
8
|
+
* When a metadata callback is provided, streams output updates in real-time.
|
|
8
9
|
*
|
|
9
10
|
* @param processService - Process service for command execution
|
|
10
11
|
* @returns bash_exec tool instance
|