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
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
import { ToolName } from '../../../core/domain/cipher/tools/constants.js';
|
|
2
2
|
import { createBashExecTool } from './implementations/bash-exec-tool.js';
|
|
3
3
|
import { createBashOutputTool } from './implementations/bash-output-tool.js';
|
|
4
|
+
import { createBatchTool } from './implementations/batch-tool.js';
|
|
4
5
|
import { createCreateKnowledgeTopicTool } from './implementations/create-knowledge-topic-tool.js';
|
|
5
6
|
import { createCurateTool } from './implementations/curate-tool.js';
|
|
6
7
|
import { createDeleteMemoryTool } from './implementations/delete-memory-tool.js';
|
|
7
|
-
import { createDetectDomainsTool } from './implementations/detect-domains-tool.js';
|
|
8
8
|
import { createEditFileTool } from './implementations/edit-file-tool.js';
|
|
9
9
|
import { createEditMemoryTool } from './implementations/edit-memory-tool.js';
|
|
10
|
-
import {
|
|
10
|
+
// import {createFindKnowledgeTopicsTool} from './implementations/find-knowledge-topics-tool.js'
|
|
11
11
|
import { createGlobFilesTool } from './implementations/glob-files-tool.js';
|
|
12
12
|
import { createGrepContentTool } from './implementations/grep-content-tool.js';
|
|
13
13
|
import { createKillProcessTool } from './implementations/kill-process-tool.js';
|
|
14
|
+
import { createListDirectoryTool } from './implementations/list-directory-tool.js';
|
|
14
15
|
import { createListMemoriesTool } from './implementations/list-memories-tool.js';
|
|
15
16
|
import { createReadFileTool } from './implementations/read-file-tool.js';
|
|
16
17
|
import { createReadMemoryTool } from './implementations/read-memory-tool.js';
|
|
18
|
+
import { createReadTodosTool } from './implementations/read-todos-tool.js';
|
|
17
19
|
import { createSearchHistoryTool } from './implementations/search-history-tool.js';
|
|
20
|
+
import { createSpecAnalyzeTool } from './implementations/spec-analyze-tool.js';
|
|
21
|
+
import { createTaskTool } from './implementations/task-tool.js';
|
|
18
22
|
import { createWriteFileTool } from './implementations/write-file-tool.js';
|
|
19
23
|
import { createWriteMemoryTool } from './implementations/write-memory-tool.js';
|
|
20
24
|
import { createWriteTodosTool } from './implementations/write-todos-tool.js';
|
|
@@ -45,107 +49,145 @@ function getRequiredService(service, serviceName) {
|
|
|
45
49
|
*/
|
|
46
50
|
export const TOOL_REGISTRY = {
|
|
47
51
|
[ToolName.BASH_EXEC]: {
|
|
52
|
+
descriptionFile: 'bash_exec',
|
|
48
53
|
factory: (services) => createBashExecTool(getRequiredService(services.processService, 'processService')),
|
|
49
54
|
markers: [ToolMarker.Execution],
|
|
50
55
|
requiredServices: ['processService'],
|
|
51
56
|
},
|
|
52
57
|
[ToolName.BASH_OUTPUT]: {
|
|
58
|
+
descriptionFile: 'bash_output',
|
|
53
59
|
factory: (services) => createBashOutputTool(getRequiredService(services.processService, 'processService')),
|
|
54
60
|
markers: [ToolMarker.Execution, ToolMarker.Optional],
|
|
55
61
|
requiredServices: ['processService'],
|
|
56
62
|
},
|
|
63
|
+
[ToolName.BATCH]: {
|
|
64
|
+
descriptionFile: 'batch',
|
|
65
|
+
factory: (services) => createBatchTool(getRequiredService(services.getToolProvider, 'getToolProvider')),
|
|
66
|
+
markers: [ToolMarker.Execution, ToolMarker.Core],
|
|
67
|
+
requiredServices: ['getToolProvider'],
|
|
68
|
+
},
|
|
57
69
|
[ToolName.CREATE_KNOWLEDGE_TOPIC]: {
|
|
70
|
+
descriptionFile: 'create_knowledge_topic',
|
|
58
71
|
factory: () => createCreateKnowledgeTopicTool(),
|
|
59
72
|
markers: [ToolMarker.ContextBuilding],
|
|
60
73
|
outputGuidance: 'create_knowledge_topic',
|
|
61
74
|
requiredServices: [], // Uses DirectoryManager for file operations
|
|
62
75
|
},
|
|
63
76
|
[ToolName.CURATE]: {
|
|
77
|
+
descriptionFile: 'curate',
|
|
64
78
|
factory: () => createCurateTool(),
|
|
65
79
|
markers: [ToolMarker.ContextBuilding, ToolMarker.Modification],
|
|
66
80
|
outputGuidance: 'curate',
|
|
67
81
|
requiredServices: [], // Uses DirectoryManager and MarkdownWriter for file operations
|
|
68
82
|
},
|
|
69
83
|
[ToolName.DELETE_MEMORY]: {
|
|
84
|
+
descriptionFile: 'delete_memory',
|
|
70
85
|
factory: (services) => createDeleteMemoryTool(getRequiredService(services.memoryManager, 'memoryManager')),
|
|
71
86
|
markers: [ToolMarker.ContextBuilding],
|
|
72
87
|
outputGuidance: 'delete_memory',
|
|
73
88
|
requiredServices: ['memoryManager'],
|
|
74
89
|
},
|
|
75
|
-
[ToolName.DETECT_DOMAINS]: {
|
|
76
|
-
factory: () => createDetectDomainsTool(),
|
|
77
|
-
markers: [ToolMarker.ContextBuilding],
|
|
78
|
-
outputGuidance: 'detect_domains',
|
|
79
|
-
requiredServices: [], // No services required (validates LLM-detected domains)
|
|
80
|
-
},
|
|
81
90
|
[ToolName.EDIT_FILE]: {
|
|
91
|
+
descriptionFile: 'edit_file',
|
|
82
92
|
factory: (services) => createEditFileTool(getRequiredService(services.fileSystemService, 'fileSystemService')),
|
|
83
93
|
markers: [ToolMarker.Modification],
|
|
84
94
|
requiredServices: ['fileSystemService'],
|
|
85
95
|
},
|
|
86
96
|
[ToolName.EDIT_MEMORY]: {
|
|
97
|
+
descriptionFile: 'edit_memory',
|
|
87
98
|
factory: (services) => createEditMemoryTool(getRequiredService(services.memoryManager, 'memoryManager')),
|
|
88
99
|
markers: [ToolMarker.ContextBuilding],
|
|
89
100
|
outputGuidance: 'edit_memory',
|
|
90
101
|
requiredServices: ['memoryManager'],
|
|
91
102
|
},
|
|
92
|
-
[ToolName.FIND_KNOWLEDGE_TOPICS]: {
|
|
93
|
-
factory: () => createFindKnowledgeTopicsTool(),
|
|
94
|
-
markers: [ToolMarker.ContextBuilding, ToolMarker.Discovery],
|
|
95
|
-
outputGuidance: 'find_knowledge_topics',
|
|
96
|
-
requiredServices: [], // Uses DirectoryManager for file operations
|
|
97
|
-
},
|
|
98
103
|
[ToolName.GLOB_FILES]: {
|
|
104
|
+
descriptionFile: 'glob_files',
|
|
99
105
|
factory: (services) => createGlobFilesTool(getRequiredService(services.fileSystemService, 'fileSystemService')),
|
|
100
106
|
markers: [ToolMarker.Core, ToolMarker.Discovery],
|
|
101
107
|
requiredServices: ['fileSystemService'],
|
|
102
108
|
},
|
|
103
109
|
[ToolName.GREP_CONTENT]: {
|
|
110
|
+
descriptionFile: 'grep_content',
|
|
104
111
|
factory: (services) => createGrepContentTool(getRequiredService(services.fileSystemService, 'fileSystemService')),
|
|
105
112
|
markers: [ToolMarker.Core, ToolMarker.Discovery],
|
|
106
113
|
requiredServices: ['fileSystemService'],
|
|
107
114
|
},
|
|
108
115
|
[ToolName.KILL_PROCESS]: {
|
|
116
|
+
descriptionFile: 'kill_process',
|
|
109
117
|
factory: (services) => createKillProcessTool(getRequiredService(services.processService, 'processService')),
|
|
110
118
|
markers: [ToolMarker.Execution, ToolMarker.Optional],
|
|
111
119
|
requiredServices: ['processService'],
|
|
112
120
|
},
|
|
121
|
+
[ToolName.LIST_DIRECTORY]: {
|
|
122
|
+
descriptionFile: 'list_directory',
|
|
123
|
+
factory: (services) => createListDirectoryTool(getRequiredService(services.fileSystemService, 'fileSystemService')),
|
|
124
|
+
markers: [ToolMarker.Discovery],
|
|
125
|
+
requiredServices: ['fileSystemService'],
|
|
126
|
+
},
|
|
113
127
|
[ToolName.LIST_MEMORIES]: {
|
|
128
|
+
descriptionFile: 'list_memories',
|
|
114
129
|
factory: (services) => createListMemoriesTool(getRequiredService(services.memoryManager, 'memoryManager')),
|
|
115
130
|
markers: [ToolMarker.ContextBuilding, ToolMarker.Discovery],
|
|
116
131
|
outputGuidance: 'list_memories',
|
|
117
132
|
requiredServices: ['memoryManager'],
|
|
118
133
|
},
|
|
119
134
|
[ToolName.READ_FILE]: {
|
|
135
|
+
descriptionFile: 'read_file',
|
|
120
136
|
factory: (services) => createReadFileTool(getRequiredService(services.fileSystemService, 'fileSystemService')),
|
|
121
137
|
markers: [ToolMarker.Core, ToolMarker.Discovery],
|
|
122
138
|
requiredServices: ['fileSystemService'],
|
|
123
139
|
},
|
|
124
140
|
[ToolName.READ_MEMORY]: {
|
|
141
|
+
descriptionFile: 'read_memory',
|
|
125
142
|
factory: (services) => createReadMemoryTool(getRequiredService(services.memoryManager, 'memoryManager')),
|
|
126
143
|
markers: [ToolMarker.ContextBuilding, ToolMarker.Discovery],
|
|
127
144
|
outputGuidance: 'read_memory',
|
|
128
145
|
requiredServices: ['memoryManager'],
|
|
129
146
|
},
|
|
147
|
+
[ToolName.READ_TODOS]: {
|
|
148
|
+
descriptionFile: 'read_todos',
|
|
149
|
+
factory: (services) => createReadTodosTool(getRequiredService(services.todoStorage, 'todoStorage')),
|
|
150
|
+
markers: [ToolMarker.Planning, ToolMarker.Core],
|
|
151
|
+
requiredServices: ['todoStorage'],
|
|
152
|
+
},
|
|
130
153
|
[ToolName.SEARCH_HISTORY]: {
|
|
154
|
+
descriptionFile: 'search_history',
|
|
131
155
|
factory: (_services) => createSearchHistoryTool(),
|
|
132
156
|
markers: [ToolMarker.ContextBuilding, ToolMarker.Discovery],
|
|
133
157
|
requiredServices: [], // No services required yet (stub implementation)
|
|
134
158
|
},
|
|
159
|
+
[ToolName.SPEC_ANALYZE]: {
|
|
160
|
+
descriptionFile: 'spec_analyze',
|
|
161
|
+
factory: () => createSpecAnalyzeTool(),
|
|
162
|
+
markers: [ToolMarker.ContextBuilding],
|
|
163
|
+
outputGuidance: 'spec_analyze',
|
|
164
|
+
requiredServices: [], // No services required (validates LLM-detected domains)
|
|
165
|
+
},
|
|
166
|
+
[ToolName.TASK]: {
|
|
167
|
+
descriptionFile: 'task',
|
|
168
|
+
factory: (services) => createTaskTool({
|
|
169
|
+
getSessionManager: getRequiredService(services.getSessionManager, 'getSessionManager'),
|
|
170
|
+
}),
|
|
171
|
+
markers: [ToolMarker.Execution, ToolMarker.Planning],
|
|
172
|
+
requiredServices: ['getSessionManager'],
|
|
173
|
+
},
|
|
135
174
|
[ToolName.WRITE_FILE]: {
|
|
175
|
+
descriptionFile: 'write_file',
|
|
136
176
|
factory: (services) => createWriteFileTool(getRequiredService(services.fileSystemService, 'fileSystemService')),
|
|
137
177
|
markers: [ToolMarker.Modification],
|
|
138
178
|
requiredServices: ['fileSystemService'],
|
|
139
179
|
},
|
|
140
180
|
[ToolName.WRITE_MEMORY]: {
|
|
181
|
+
descriptionFile: 'write_memory',
|
|
141
182
|
factory: (services) => createWriteMemoryTool(getRequiredService(services.memoryManager, 'memoryManager')),
|
|
142
183
|
markers: [ToolMarker.ContextBuilding],
|
|
143
184
|
outputGuidance: 'write_memory',
|
|
144
185
|
requiredServices: ['memoryManager'],
|
|
145
186
|
},
|
|
146
187
|
[ToolName.WRITE_TODOS]: {
|
|
147
|
-
|
|
188
|
+
descriptionFile: 'write_todos',
|
|
189
|
+
factory: (services) => createWriteTodosTool(getRequiredService(services.todoStorage, 'todoStorage')),
|
|
148
190
|
markers: [ToolMarker.Planning, ToolMarker.Core],
|
|
149
|
-
requiredServices: [],
|
|
191
|
+
requiredServices: ['todoStorage'],
|
|
150
192
|
},
|
|
151
193
|
};
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
2
|
import { readdir, readFile, stat, writeFile } from 'node:fs/promises';
|
|
3
3
|
import { join, relative } from 'node:path';
|
|
4
|
-
import { BRV_DIR,
|
|
4
|
+
import { BRV_DIR, CONTEXT_FILE_EXTENSION, CONTEXT_TREE_DIR, README_FILE, SNAPSHOT_FILE } from '../../constants.js';
|
|
5
5
|
import { ContextTreeSnapshot, } from '../../core/domain/entities/context-tree-snapshot.js';
|
|
6
|
+
import { toUnixPath } from './path-utils.js';
|
|
6
7
|
/**
|
|
7
8
|
* File-based implementation of IContextTreeSnapshotService.
|
|
8
9
|
* Tracks context tree changes using content hashing.
|
|
@@ -86,7 +87,7 @@ export class FileContextTreeSnapshotService {
|
|
|
86
87
|
* Processes a single file and adds it to the files map.
|
|
87
88
|
*/
|
|
88
89
|
async processFile(fullPath, rootDir, files) {
|
|
89
|
-
const relativePath = relative(rootDir, fullPath);
|
|
90
|
+
const relativePath = toUnixPath(relative(rootDir, fullPath));
|
|
90
91
|
const [content, fileStat] = await Promise.all([readFile(fullPath), stat(fullPath)]);
|
|
91
92
|
files.set(relativePath, {
|
|
92
93
|
hash: this.computeHash(content),
|
|
@@ -108,8 +109,13 @@ export class FileContextTreeSnapshotService {
|
|
|
108
109
|
if (entry.isDirectory()) {
|
|
109
110
|
tasks.push(this.scanDirectory(fullPath, rootDir, files));
|
|
110
111
|
}
|
|
111
|
-
else if (entry.isFile() && entry.name
|
|
112
|
-
|
|
112
|
+
else if (entry.isFile() && entry.name.endsWith(CONTEXT_FILE_EXTENSION)) {
|
|
113
|
+
// Only ignore README.md at root level, track it in subdirectories
|
|
114
|
+
const isRoot = currentDir === rootDir;
|
|
115
|
+
const isReadmeAtRoot = entry.name === README_FILE && isRoot;
|
|
116
|
+
if (!isReadmeAtRoot) {
|
|
117
|
+
tasks.push(this.processFile(fullPath, rootDir, files));
|
|
118
|
+
}
|
|
113
119
|
}
|
|
114
120
|
}
|
|
115
121
|
await Promise.all(tasks);
|
|
@@ -16,9 +16,10 @@ export declare class FileContextTreeWriterService implements IContextTreeWriterS
|
|
|
16
16
|
constructor(dependencies: ContextTreeWriterServiceDependencies, config?: ContextTreeWriterServiceConfig);
|
|
17
17
|
sync(params: SyncParams): Promise<SyncResult>;
|
|
18
18
|
/**
|
|
19
|
-
* Normalizes a file path by
|
|
20
|
-
*
|
|
21
|
-
*
|
|
19
|
+
* Normalizes a file path by converting backslashes to forward slashes
|
|
20
|
+
* and removing leading slashes.
|
|
21
|
+
* Ensures cross-platform compatibility and handles legacy API responses
|
|
22
|
+
* that may include leading slashes or Windows-style backslashes.
|
|
22
23
|
*/
|
|
23
24
|
private normalizePath;
|
|
24
25
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { mkdir, readFile, unlink, writeFile } from 'node:fs/promises';
|
|
3
3
|
import { dirname, join } from 'node:path';
|
|
4
4
|
import { BRV_DIR, CONTEXT_TREE_DIR } from '../../constants.js';
|
|
5
|
+
import { toUnixPath } from './path-utils.js';
|
|
5
6
|
/**
|
|
6
7
|
* File-based implementation of IContextTreeWriterService.
|
|
7
8
|
* Synchronizes context tree files based on CoGit snapshot data.
|
|
@@ -53,11 +54,12 @@ export class FileContextTreeWriterService {
|
|
|
53
54
|
return { added, deleted, edited };
|
|
54
55
|
}
|
|
55
56
|
/**
|
|
56
|
-
* Normalizes a file path by
|
|
57
|
-
*
|
|
58
|
-
*
|
|
57
|
+
* Normalizes a file path by converting backslashes to forward slashes
|
|
58
|
+
* and removing leading slashes.
|
|
59
|
+
* Ensures cross-platform compatibility and handles legacy API responses
|
|
60
|
+
* that may include leading slashes or Windows-style backslashes.
|
|
59
61
|
*/
|
|
60
62
|
normalizePath(path) {
|
|
61
|
-
return path.replace(/^\/+/, '');
|
|
63
|
+
return toUnixPath(path).replace(/^\/+/, '');
|
|
62
64
|
}
|
|
63
65
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path utilities for context tree operations.
|
|
3
|
+
*
|
|
4
|
+
* Provides cross-platform path normalization to ensure all context tree paths
|
|
5
|
+
* use forward slashes regardless of the operating system.
|
|
6
|
+
*/
|
|
7
|
+
export { normalizeForComparison as toUnixPath } from '../cipher/process/path-utils.js';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path utilities for context tree operations.
|
|
3
|
+
*
|
|
4
|
+
* Provides cross-platform path normalization to ensure all context tree paths
|
|
5
|
+
* use forward slashes regardless of the operating system.
|
|
6
|
+
*/
|
|
7
|
+
export { normalizeForComparison as toUnixPath } from '../cipher/process/path-utils.js';
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { ICipherAgent } from '../../../core/interfaces/cipher/i-cipher-agent.js';
|
|
2
|
+
import type { CurateExecuteOptions, ICurateExecutor } from '../../../core/interfaces/executor/i-curate-executor.js';
|
|
3
|
+
/**
|
|
4
|
+
* CurateExecutor - Executes curate tasks with an injected CipherAgent.
|
|
5
|
+
*
|
|
6
|
+
* This is NOT a UseCase (which orchestrates business logic).
|
|
7
|
+
* It's an Executor that wraps agent.execute() with curate-specific options.
|
|
8
|
+
*
|
|
9
|
+
* Architecture:
|
|
10
|
+
* - TaskProcessor injects the long-lived CipherAgent
|
|
11
|
+
* - Event streaming is handled by agent-worker (subscribes to agentEventBus)
|
|
12
|
+
* - Executor focuses solely on curate execution
|
|
13
|
+
*/
|
|
14
|
+
export declare class CurateExecutor implements ICurateExecutor {
|
|
15
|
+
/**
|
|
16
|
+
* Maximum number of files allowed in --files flag
|
|
17
|
+
*/
|
|
18
|
+
private static readonly MAX_FILES;
|
|
19
|
+
/**
|
|
20
|
+
* Execute curate with an injected agent.
|
|
21
|
+
*
|
|
22
|
+
* @param agent - Long-lived CipherAgent (managed by caller)
|
|
23
|
+
* @param options - Execution options (content, file references)
|
|
24
|
+
* @returns Result string from agent execution
|
|
25
|
+
*/
|
|
26
|
+
executeWithAgent(agent: ICipherAgent, options: CurateExecuteOptions): Promise<string>;
|
|
27
|
+
/**
|
|
28
|
+
* Process file paths from --files flag.
|
|
29
|
+
*
|
|
30
|
+
* @param filePaths - Array of file paths (relative or absolute)
|
|
31
|
+
* @returns Formatted instructions for the agent to read the specified files,
|
|
32
|
+
* or undefined if validation fails
|
|
33
|
+
*/
|
|
34
|
+
private processFileReferences;
|
|
35
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { FileValidationError } from '../../../core/domain/errors/task-error.js';
|
|
2
|
+
import { validateFileForCurate } from '../../../utils/file-validator.js';
|
|
3
|
+
import { getAgentStorage } from '../../cipher/storage/agent-storage.js';
|
|
4
|
+
/**
|
|
5
|
+
* CurateExecutor - Executes curate tasks with an injected CipherAgent.
|
|
6
|
+
*
|
|
7
|
+
* This is NOT a UseCase (which orchestrates business logic).
|
|
8
|
+
* It's an Executor that wraps agent.execute() with curate-specific options.
|
|
9
|
+
*
|
|
10
|
+
* Architecture:
|
|
11
|
+
* - TaskProcessor injects the long-lived CipherAgent
|
|
12
|
+
* - Event streaming is handled by agent-worker (subscribes to agentEventBus)
|
|
13
|
+
* - Executor focuses solely on curate execution
|
|
14
|
+
*/
|
|
15
|
+
export class CurateExecutor {
|
|
16
|
+
/**
|
|
17
|
+
* Maximum number of files allowed in --files flag
|
|
18
|
+
*/
|
|
19
|
+
static MAX_FILES = 5;
|
|
20
|
+
/**
|
|
21
|
+
* Execute curate with an injected agent.
|
|
22
|
+
*
|
|
23
|
+
* @param agent - Long-lived CipherAgent (managed by caller)
|
|
24
|
+
* @param options - Execution options (content, file references)
|
|
25
|
+
* @returns Result string from agent execution
|
|
26
|
+
*/
|
|
27
|
+
async executeWithAgent(agent, options) {
|
|
28
|
+
const { content, files, taskId } = options;
|
|
29
|
+
// Initialize storage for execution tracking
|
|
30
|
+
const storage = await getAgentStorage();
|
|
31
|
+
let executionId = null;
|
|
32
|
+
try {
|
|
33
|
+
// Process file references if provided (validation + instructions)
|
|
34
|
+
const fileReferenceInstructions = this.processFileReferences(files ?? []);
|
|
35
|
+
if (fileReferenceInstructions === undefined) {
|
|
36
|
+
throw new FileValidationError();
|
|
37
|
+
}
|
|
38
|
+
// Create execution with status='running'
|
|
39
|
+
// Save in JSON format with all fields for tracking:
|
|
40
|
+
// - content: the context to curate
|
|
41
|
+
// - files: original file paths (if provided)
|
|
42
|
+
// - fileReferenceInstructions: generated instructions (if files provided and valid)
|
|
43
|
+
const executionInput = JSON.stringify({
|
|
44
|
+
content,
|
|
45
|
+
...(fileReferenceInstructions ? { fileReferenceInstructions } : {}),
|
|
46
|
+
...(files && files.length > 0 ? { files } : {}),
|
|
47
|
+
});
|
|
48
|
+
executionId = storage.createExecution('curate', executionInput);
|
|
49
|
+
// Build prompt with optional file reference instructions
|
|
50
|
+
const prompt = fileReferenceInstructions ? `${content}\n${fileReferenceInstructions}` : content;
|
|
51
|
+
// Execute with curate commandType
|
|
52
|
+
// Agent uses its default session (created during start())
|
|
53
|
+
const response = await agent.execute(prompt, {
|
|
54
|
+
executionContext: { commandType: 'curate' },
|
|
55
|
+
taskId,
|
|
56
|
+
});
|
|
57
|
+
// Mark execution as completed
|
|
58
|
+
storage.updateExecutionStatus(executionId, 'completed', response);
|
|
59
|
+
// Cleanup old executions
|
|
60
|
+
storage.cleanupOldExecutions(100);
|
|
61
|
+
return response;
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
// Mark execution as failed
|
|
65
|
+
if (executionId) {
|
|
66
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
67
|
+
storage.updateExecutionStatus(executionId, 'failed', undefined, errorMessage);
|
|
68
|
+
}
|
|
69
|
+
throw error;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Process file paths from --files flag.
|
|
74
|
+
*
|
|
75
|
+
* @param filePaths - Array of file paths (relative or absolute)
|
|
76
|
+
* @returns Formatted instructions for the agent to read the specified files,
|
|
77
|
+
* or undefined if validation fails
|
|
78
|
+
*/
|
|
79
|
+
processFileReferences(filePaths) {
|
|
80
|
+
if (!filePaths || filePaths.length === 0) {
|
|
81
|
+
return '';
|
|
82
|
+
}
|
|
83
|
+
// Truncate if exceeds max files
|
|
84
|
+
let processedPaths = filePaths;
|
|
85
|
+
if (filePaths.length > CurateExecutor.MAX_FILES) {
|
|
86
|
+
processedPaths = filePaths.slice(0, CurateExecutor.MAX_FILES);
|
|
87
|
+
}
|
|
88
|
+
// Get project root (current directory)
|
|
89
|
+
const projectRoot = process.cwd();
|
|
90
|
+
// Validate each file and collect errors
|
|
91
|
+
const validPaths = [];
|
|
92
|
+
const errors = [];
|
|
93
|
+
for (const filePath of processedPaths) {
|
|
94
|
+
const result = validateFileForCurate(filePath, projectRoot);
|
|
95
|
+
if (result.valid && result.normalizedPath) {
|
|
96
|
+
validPaths.push(result.normalizedPath);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
errors.push(result.error ?? `Invalid file: ${filePath}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// If there are any validation errors, return undefined
|
|
103
|
+
if (errors.length > 0) {
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
// Format instructions for the agent
|
|
107
|
+
const instructions = [
|
|
108
|
+
'\n## IMPORTANT: Critical Files to Read (--files flag)',
|
|
109
|
+
'',
|
|
110
|
+
'The user has explicitly specified these files as critical context that MUST be read before creating knowledge topics:',
|
|
111
|
+
'',
|
|
112
|
+
...validPaths.map((p) => `- ${p}`),
|
|
113
|
+
'',
|
|
114
|
+
'**MANDATORY INSTRUCTIONS:**',
|
|
115
|
+
'- You MUST use the `read_file` tool to read ALL of these files IN PARALLEL (in a single iteration) before proceeding to create knowledge topics',
|
|
116
|
+
'- These files contain essential context that will help you create comprehensive and accurate knowledge topics',
|
|
117
|
+
'- Read them in parallel to maximize efficiency - they do not depend on each other',
|
|
118
|
+
'- After reading all files, proceed with the normal workflow: detect domains, find existing knowledge, and create/update topics',
|
|
119
|
+
'',
|
|
120
|
+
];
|
|
121
|
+
return instructions.join('\n');
|
|
122
|
+
}
|
|
123
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ICipherAgent } from '../../../core/interfaces/cipher/i-cipher-agent.js';
|
|
2
|
+
import type { IQueryExecutor, QueryExecuteOptions } from '../../../core/interfaces/executor/i-query-executor.js';
|
|
3
|
+
/**
|
|
4
|
+
* QueryExecutor - Executes query tasks with an injected CipherAgent.
|
|
5
|
+
*
|
|
6
|
+
* This is NOT a UseCase (which orchestrates business logic).
|
|
7
|
+
* It's an Executor that wraps agent.execute() with query-specific options.
|
|
8
|
+
*
|
|
9
|
+
* Architecture:
|
|
10
|
+
* - TaskProcessor injects the long-lived CipherAgent
|
|
11
|
+
* - Event streaming is handled by agent-worker (subscribes to agentEventBus)
|
|
12
|
+
* - Executor focuses solely on query execution
|
|
13
|
+
*/
|
|
14
|
+
export declare class QueryExecutor implements IQueryExecutor {
|
|
15
|
+
/**
|
|
16
|
+
* Execute query with an injected agent.
|
|
17
|
+
*
|
|
18
|
+
* @param agent - Long-lived CipherAgent (managed by caller)
|
|
19
|
+
* @param options - Execution options (query)
|
|
20
|
+
* @returns Result string from agent execution
|
|
21
|
+
*/
|
|
22
|
+
executeWithAgent(agent: ICipherAgent, options: QueryExecuteOptions): Promise<string>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { getAgentStorage } from '../../cipher/storage/agent-storage.js';
|
|
2
|
+
/**
|
|
3
|
+
* QueryExecutor - Executes query tasks with an injected CipherAgent.
|
|
4
|
+
*
|
|
5
|
+
* This is NOT a UseCase (which orchestrates business logic).
|
|
6
|
+
* It's an Executor that wraps agent.execute() with query-specific options.
|
|
7
|
+
*
|
|
8
|
+
* Architecture:
|
|
9
|
+
* - TaskProcessor injects the long-lived CipherAgent
|
|
10
|
+
* - Event streaming is handled by agent-worker (subscribes to agentEventBus)
|
|
11
|
+
* - Executor focuses solely on query execution
|
|
12
|
+
*/
|
|
13
|
+
export class QueryExecutor {
|
|
14
|
+
/**
|
|
15
|
+
* Execute query with an injected agent.
|
|
16
|
+
*
|
|
17
|
+
* @param agent - Long-lived CipherAgent (managed by caller)
|
|
18
|
+
* @param options - Execution options (query)
|
|
19
|
+
* @returns Result string from agent execution
|
|
20
|
+
*/
|
|
21
|
+
async executeWithAgent(agent, options) {
|
|
22
|
+
const { query, taskId } = options;
|
|
23
|
+
// Initialize storage for execution tracking
|
|
24
|
+
const storage = await getAgentStorage();
|
|
25
|
+
let executionId = null;
|
|
26
|
+
try {
|
|
27
|
+
// Create execution with status='running'
|
|
28
|
+
executionId = storage.createExecution('query', query);
|
|
29
|
+
// Execute with query commandType
|
|
30
|
+
// Agent uses its default session (created during start())
|
|
31
|
+
const prompt = `Search the context tree for: ${query}`;
|
|
32
|
+
const response = await agent.execute(prompt, {
|
|
33
|
+
executionContext: { commandType: 'query' },
|
|
34
|
+
taskId,
|
|
35
|
+
});
|
|
36
|
+
// Mark execution as completed
|
|
37
|
+
storage.updateExecutionStatus(executionId, 'completed', response);
|
|
38
|
+
// Cleanup old executions
|
|
39
|
+
storage.cleanupOldExecutions(100);
|
|
40
|
+
return response;
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
// Mark execution as failed
|
|
44
|
+
if (executionId) {
|
|
45
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
46
|
+
storage.updateExecutionStatus(executionId, 'failed', undefined, errorMessage);
|
|
47
|
+
}
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { ICipherAgent } from '../../core/interfaces/cipher/i-cipher-agent.js';
|
|
2
|
+
import type { ILogger } from '../../core/interfaces/cipher/i-logger.js';
|
|
3
|
+
import type { ICurateExecutor } from '../../core/interfaces/executor/i-curate-executor.js';
|
|
4
|
+
import type { IQueryExecutor } from '../../core/interfaces/executor/i-query-executor.js';
|
|
5
|
+
/**
|
|
6
|
+
* Task input for processing.
|
|
7
|
+
* Agent uses its default session (Single-Session pattern).
|
|
8
|
+
*/
|
|
9
|
+
export type TaskInput = {
|
|
10
|
+
/** Task content/prompt */
|
|
11
|
+
content: string;
|
|
12
|
+
/** Optional file paths for curate --files */
|
|
13
|
+
files?: string[];
|
|
14
|
+
/** Task ID */
|
|
15
|
+
taskId: string;
|
|
16
|
+
/** Task type */
|
|
17
|
+
type: 'curate' | 'query';
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Configuration for TaskProcessor.
|
|
21
|
+
*/
|
|
22
|
+
export type TaskProcessorConfig = {
|
|
23
|
+
/** Curate executor instance (injected by agent-worker) */
|
|
24
|
+
curateExecutor: ICurateExecutor;
|
|
25
|
+
/** Logger instance */
|
|
26
|
+
logger?: ILogger;
|
|
27
|
+
/** Query executor instance (injected by agent-worker) */
|
|
28
|
+
queryExecutor: IQueryExecutor;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* TaskProcessor - Coordinates task execution with injected executors.
|
|
32
|
+
*
|
|
33
|
+
* Architecture:
|
|
34
|
+
* - TaskProcessor receives single agent reference via setAgent()
|
|
35
|
+
* - TaskProcessor passes agent to Executor.executeWithAgent()
|
|
36
|
+
* - Executor handles execution (validation, prompt building)
|
|
37
|
+
* - Event streaming handled by agent-worker (subscribes to agentEventBus)
|
|
38
|
+
*
|
|
39
|
+
* Flow: agent-worker → TaskProcessor.process() → Executor.executeWithAgent()
|
|
40
|
+
*/
|
|
41
|
+
export declare class TaskProcessor {
|
|
42
|
+
/**
|
|
43
|
+
* Single CipherAgent reference from agent-worker.
|
|
44
|
+
*/
|
|
45
|
+
private agent;
|
|
46
|
+
private readonly curateExecutor;
|
|
47
|
+
private readonly logger;
|
|
48
|
+
private readonly queryExecutor;
|
|
49
|
+
/** Track running tasks for cancellation */
|
|
50
|
+
private readonly runningTasks;
|
|
51
|
+
constructor(config: TaskProcessorConfig);
|
|
52
|
+
/**
|
|
53
|
+
* Cancel a running task.
|
|
54
|
+
*/
|
|
55
|
+
cancel(taskId: string): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Check if a task is running.
|
|
58
|
+
*/
|
|
59
|
+
isRunning(taskId: string): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Process a task and return the result.
|
|
62
|
+
*
|
|
63
|
+
* Architecture:
|
|
64
|
+
* - Calls Executor.executeWithAgent() with long-lived agent
|
|
65
|
+
* - Returns result string
|
|
66
|
+
* - Event streaming handled by agent-worker (agentEventBus)
|
|
67
|
+
*/
|
|
68
|
+
process(input: TaskInput): Promise<string>;
|
|
69
|
+
/**
|
|
70
|
+
* Set agent reference from agent-worker.
|
|
71
|
+
*/
|
|
72
|
+
setAgent(agent: ICipherAgent): void;
|
|
73
|
+
/**
|
|
74
|
+
* Execute task with the injected agent.
|
|
75
|
+
*/
|
|
76
|
+
private executeWithAgent;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Create a new TaskProcessor instance.
|
|
80
|
+
*/
|
|
81
|
+
export declare function createTaskProcessor(config: TaskProcessorConfig): TaskProcessor;
|