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
|
@@ -1,288 +1,97 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import { BRV_DIR, CONTEXT_FILE, CONTEXT_TREE_DIR } from '../../constants.js';
|
|
7
|
-
import { validateFileForCurate } from '../../utils/file-validator.js';
|
|
8
|
-
import { getAgentStorage } from '../cipher/storage/agent-storage.js';
|
|
9
|
-
import { WorkspaceNotInitializedError } from '../cipher/validation/workspace-validator.js';
|
|
10
|
-
// Full path to context tree
|
|
11
|
-
const CONTEXT_TREE_PATH = path.join(BRV_DIR, CONTEXT_TREE_DIR);
|
|
2
|
+
import { ConnectionError, ConnectionFailedError, InstanceCrashedError, NoInstanceRunningError } from '../../core/domain/errors/connection-error.js';
|
|
3
|
+
import { formatError } from '../../utils/error-handler.js';
|
|
4
|
+
import { getSandboxEnvironmentName, isSandboxEnvironment, isSandboxNetworkError } from '../../utils/sandbox-detector.js';
|
|
5
|
+
import { createTransportClientFactory } from '../transport/transport-client-factory.js';
|
|
12
6
|
export class CurateUseCase {
|
|
13
|
-
projectConfigStore;
|
|
14
7
|
terminal;
|
|
15
|
-
tokenStore;
|
|
16
8
|
trackingService;
|
|
9
|
+
transportClientFactoryCreator;
|
|
17
10
|
constructor(options) {
|
|
18
|
-
this.projectConfigStore = options.projectConfigStore;
|
|
19
11
|
this.terminal = options.terminal;
|
|
20
|
-
this.tokenStore = options.tokenStore;
|
|
21
12
|
this.trackingService = options.trackingService;
|
|
13
|
+
this.transportClientFactoryCreator = options.transportClientFactoryCreator ?? createTransportClientFactory;
|
|
22
14
|
}
|
|
23
|
-
|
|
24
|
-
* Create topic folder with context.md file
|
|
25
|
-
* @param targetPath - The parent path where the topic folder will be created
|
|
26
|
-
* @param topicName - The name of the topic folder to create
|
|
27
|
-
* @returns The path to the created context.md file
|
|
28
|
-
*/
|
|
29
|
-
createTopicWithContextFile(targetPath, topicName) {
|
|
30
|
-
const topicPath = path.join(targetPath, topicName);
|
|
31
|
-
const contextFilePath = path.join(topicPath, CONTEXT_FILE);
|
|
32
|
-
// Create the topic directory
|
|
33
|
-
fs.mkdirSync(topicPath, { recursive: true });
|
|
34
|
-
// Create the context.md file with initial content
|
|
35
|
-
const initialContent = `# ${topicName}\n\n<!-- Add your context here -->\n`;
|
|
36
|
-
fs.writeFileSync(contextFilePath, initialContent, 'utf8');
|
|
37
|
-
return contextFilePath;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Generate a unique session ID for the autonomous agent.
|
|
41
|
-
* Uses crypto.randomUUID() for guaranteed uniqueness (122 bits of entropy).
|
|
42
|
-
*/
|
|
43
|
-
generateSessionId() {
|
|
44
|
-
return randomUUID();
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Navigate through the context tree using file selector
|
|
48
|
-
* Returns the selected path relative to context-tree root
|
|
49
|
-
*/
|
|
50
|
-
async navigateContextTree() {
|
|
51
|
-
const contextTreePath = path.resolve(process.cwd(), CONTEXT_TREE_PATH);
|
|
52
|
-
// Ensure context tree directory exists
|
|
53
|
-
if (!fs.existsSync(contextTreePath)) {
|
|
54
|
-
fs.mkdirSync(contextTreePath, { recursive: true });
|
|
55
|
-
}
|
|
56
|
-
// Ensure predefined domains exist as directories
|
|
57
|
-
for (const domain of CONTEXT_TREE_DOMAINS) {
|
|
58
|
-
const domainPath = path.join(contextTreePath, domain.name);
|
|
59
|
-
if (!fs.existsSync(domainPath)) {
|
|
60
|
-
fs.mkdirSync(domainPath, { recursive: true });
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
while (true) {
|
|
64
|
-
try {
|
|
65
|
-
// eslint-disable-next-line no-await-in-loop
|
|
66
|
-
const selectedItem = await this.terminal.fileSelector({
|
|
67
|
-
allowCancel: true,
|
|
68
|
-
basePath: contextTreePath,
|
|
69
|
-
filter: (item) => item.isDirectory,
|
|
70
|
-
message: 'Target context location:',
|
|
71
|
-
pageSize: 15,
|
|
72
|
-
theme: {
|
|
73
|
-
labels: {
|
|
74
|
-
messages: {
|
|
75
|
-
cancel: 'Selection cancelled.',
|
|
76
|
-
empty: 'No sub-folders. Press Enter to add content here.',
|
|
77
|
-
},
|
|
78
|
-
},
|
|
79
|
-
},
|
|
80
|
-
type: 'directory',
|
|
81
|
-
});
|
|
82
|
-
// User cancelled
|
|
83
|
-
if (!selectedItem) {
|
|
84
|
-
return null;
|
|
85
|
-
}
|
|
86
|
-
// Restrict navigation to stay within the context tree
|
|
87
|
-
const normalizedItemPath = path.resolve(selectedItem.path);
|
|
88
|
-
const isValid = normalizedItemPath.startsWith(contextTreePath);
|
|
89
|
-
if (isValid) {
|
|
90
|
-
// Valid selection - proceed
|
|
91
|
-
return selectedItem.path;
|
|
92
|
-
}
|
|
93
|
-
// Invalid selection - retry
|
|
94
|
-
this.terminal.log('Invalid selection. Please choose a valid location within the context tree.');
|
|
95
|
-
}
|
|
96
|
-
catch {
|
|
97
|
-
// Error occurred
|
|
98
|
-
return null;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Open a file in the default editor
|
|
104
|
-
* @param filePath - The path to the file to open
|
|
105
|
-
*/
|
|
106
|
-
async openFile(filePath) {
|
|
107
|
-
await open(filePath);
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Prompt user to enter topic name with validation
|
|
111
|
-
* @param targetPath - The path where the topic folder will be created
|
|
112
|
-
* @returns The topic name or null if cancelled
|
|
113
|
-
*/
|
|
114
|
-
async promptForTopicName(targetPath) {
|
|
115
|
-
try {
|
|
116
|
-
const topicName = await this.terminal.input({
|
|
117
|
-
message: 'New topic name:',
|
|
118
|
-
validate: (value) => this.validateTopicName(value, targetPath),
|
|
119
|
-
});
|
|
120
|
-
return topicName.trim();
|
|
121
|
-
}
|
|
122
|
-
catch {
|
|
123
|
-
return null;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
async run(options) {
|
|
15
|
+
async run({ context, files, verbose = false }) {
|
|
127
16
|
await this.trackingService.track('mem:curate', { status: 'started' });
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
* Handle workspace not initialized error
|
|
133
|
-
*/
|
|
134
|
-
handleWorkspaceError(_error) {
|
|
135
|
-
const message = 'Project not initialized. Please run "/init" to select your team and workspace.';
|
|
136
|
-
this.terminal.log(message);
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Process file paths from --files flag
|
|
140
|
-
* @param filePaths - Array of file paths (relative or absolute)
|
|
141
|
-
* @returns Formatted instructions for the agent to read the specified files, or undefined if validation fails
|
|
142
|
-
*/
|
|
143
|
-
processFileReferences(filePaths) {
|
|
144
|
-
const MAX_FILES = 5;
|
|
145
|
-
if (!filePaths || filePaths.length === 0) {
|
|
146
|
-
return '';
|
|
17
|
+
if (!context) {
|
|
18
|
+
this.terminal.log('Context argument is required.');
|
|
19
|
+
this.terminal.log('Usage: brv curate "your context here"');
|
|
20
|
+
return;
|
|
147
21
|
}
|
|
148
|
-
|
|
149
|
-
if (filePaths.length > MAX_FILES) {
|
|
150
|
-
const ignored = filePaths.slice(MAX_FILES);
|
|
151
|
-
this.terminal.log(`\n⚠️ Only the first ${MAX_FILES} files will be processed. Ignoring: ${ignored.join(', ')}\n`);
|
|
152
|
-
filePaths = filePaths.slice(0, MAX_FILES);
|
|
153
|
-
}
|
|
154
|
-
// Get project root (current directory with .brv)
|
|
155
|
-
const projectRoot = process.cwd();
|
|
156
|
-
// Validate each file and collect errors
|
|
157
|
-
const validPaths = [];
|
|
158
|
-
const errors = [];
|
|
159
|
-
for (const filePath of filePaths) {
|
|
160
|
-
const result = validateFileForCurate(filePath, projectRoot);
|
|
161
|
-
if (result.valid && result.normalizedPath) {
|
|
162
|
-
validPaths.push(result.normalizedPath);
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
errors.push(` ✗ ${result.error}`);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
// If there are any validation errors, show them and return undefined
|
|
169
|
-
if (errors.length > 0) {
|
|
170
|
-
this.terminal.log('\n❌ File validation failed:\n');
|
|
171
|
-
this.terminal.log(errors.join('\n'));
|
|
172
|
-
this.terminal.log('');
|
|
173
|
-
this.terminal.log('Invalid files provided. Please fix the errors above and try again.');
|
|
174
|
-
return undefined;
|
|
175
|
-
}
|
|
176
|
-
// Format instructions for the agent
|
|
177
|
-
const instructions = [
|
|
178
|
-
'\n## IMPORTANT: Critical Files to Read (--files flag)',
|
|
179
|
-
'',
|
|
180
|
-
'The user has explicitly specified these files as critical context that MUST be read before creating knowledge topics:',
|
|
181
|
-
'',
|
|
182
|
-
...validPaths.map((p) => `- ${p}`),
|
|
183
|
-
'',
|
|
184
|
-
'**MANDATORY INSTRUCTIONS:**',
|
|
185
|
-
'- 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',
|
|
186
|
-
'- These files contain essential context that will help you create comprehensive and accurate knowledge topics',
|
|
187
|
-
'- Read them in parallel to maximize efficiency - they do not depend on each other',
|
|
188
|
-
'- After reading all files, proceed with the normal workflow: detect domains, find existing knowledge, and create/update topics',
|
|
189
|
-
'',
|
|
190
|
-
];
|
|
191
|
-
return instructions.join('\n');
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Run in autonomous mode - push to queue for background processing
|
|
195
|
-
*/
|
|
196
|
-
async runAutonomous(content, options) {
|
|
22
|
+
let client;
|
|
197
23
|
try {
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
this.terminal.log('Authentication required. Please run "/login" first.');
|
|
202
|
-
return;
|
|
24
|
+
const transportClientFactory = this.transportClientFactoryCreator();
|
|
25
|
+
if (verbose) {
|
|
26
|
+
this.terminal.log('Discovering running instance...');
|
|
203
27
|
}
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
throw new WorkspaceNotInitializedError('Project not initialized. Please run "/init" to select your team and workspace.', '.brv');
|
|
28
|
+
const { client: connectedClient } = await transportClientFactory.connect();
|
|
29
|
+
client = connectedClient;
|
|
30
|
+
if (verbose) {
|
|
31
|
+
this.terminal.log(`Connected to instance (clientId: ${client.getClientId()})`);
|
|
209
32
|
}
|
|
210
|
-
//
|
|
211
|
-
const
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
storage.createExecution('curate', JSON.stringify({
|
|
220
|
-
content,
|
|
221
|
-
fileReferenceInstructions,
|
|
222
|
-
flags: { apiKey: options.apiKey, model: options.model, verbose: options.verbose },
|
|
223
|
-
}));
|
|
224
|
-
// Simple output for agents - just confirm saved
|
|
33
|
+
// Generate taskId in UseCase (Application layer owns task creation)
|
|
34
|
+
const taskId = randomUUID();
|
|
35
|
+
// Send task:create - Transport routes to Agent, UseCase handles logic
|
|
36
|
+
await client.request('task:create', {
|
|
37
|
+
content: context,
|
|
38
|
+
...(files?.length ? { files } : {}),
|
|
39
|
+
taskId,
|
|
40
|
+
type: 'curate',
|
|
41
|
+
});
|
|
225
42
|
this.terminal.log('✓ Context queued for processing.');
|
|
226
|
-
// Track the event
|
|
227
43
|
await this.trackingService.track('mem:curate', { status: 'finished' });
|
|
228
44
|
}
|
|
229
45
|
catch (error) {
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
46
|
+
this.handleConnectionError(error);
|
|
47
|
+
await this.trackingService.track('mem:curate', { message: formatError(error), status: 'error' });
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
if (client) {
|
|
51
|
+
await client.disconnect();
|
|
233
52
|
}
|
|
234
|
-
// Display error
|
|
235
|
-
const errMsg = error instanceof Error ? error.message : 'Runtime error occurred';
|
|
236
|
-
await this.trackingService.track('mem:curate', { message: errMsg, status: 'error' });
|
|
237
|
-
this.terminal.error(errMsg);
|
|
238
53
|
}
|
|
239
54
|
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
this.terminal.log('\nOperation cancelled.');
|
|
249
|
-
return;
|
|
55
|
+
handleConnectionError(error) {
|
|
56
|
+
if (error instanceof NoInstanceRunningError) {
|
|
57
|
+
// Check if running in sandbox environment
|
|
58
|
+
if (isSandboxEnvironment()) {
|
|
59
|
+
const sandboxName = getSandboxEnvironmentName();
|
|
60
|
+
this.terminal.log(`Error: No ByteRover instance is running.\n` +
|
|
61
|
+
`⚠️ Sandbox environment detected (${sandboxName}).\n\n` +
|
|
62
|
+
`Please run 'brv' command in a separate terminal window/tab outside the sandbox first.`);
|
|
250
63
|
}
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
return;
|
|
64
|
+
else {
|
|
65
|
+
this.terminal.log('No ByteRover instance is running.\n\n' +
|
|
66
|
+
'Start a ByteRover instance by running "brv" in a separate terminal window/tab.\n' +
|
|
67
|
+
'The instance will keep running and handle your commands.');
|
|
256
68
|
}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
// Only allow letters, numbers, and hyphens
|
|
278
|
-
if (!/^[a-zA-Z0-9-]+$/.test(trimmed)) {
|
|
279
|
-
return 'Topic name can only contain letters (a-z, A-Z), numbers (0-9), and hyphens (-)';
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (error instanceof InstanceCrashedError) {
|
|
72
|
+
this.terminal.log('ByteRover instance has crashed.\n\nPlease restart with: brv');
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (error instanceof ConnectionFailedError) {
|
|
76
|
+
// Check if it's specifically a sandbox network restriction error
|
|
77
|
+
const isSandboxError = isSandboxNetworkError(error.originalError ?? error);
|
|
78
|
+
if (isSandboxError) {
|
|
79
|
+
const sandboxName = getSandboxEnvironmentName();
|
|
80
|
+
this.terminal.log(`Error: Failed to connect to ByteRover instance.\n` +
|
|
81
|
+
`Port: ${error.port ?? 'unknown'}\n` +
|
|
82
|
+
`⚠️ Sandbox network restriction detected (${sandboxName}).\n\n` +
|
|
83
|
+
`Please allow network access in the sandbox and retry the command.`);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
this.terminal.log(`Failed to connect to ByteRover instance: ${error.message}`);
|
|
87
|
+
}
|
|
88
|
+
return;
|
|
280
89
|
}
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
return `Topic "${trimmed}" already exists at this location`;
|
|
90
|
+
if (error instanceof ConnectionError) {
|
|
91
|
+
this.terminal.log(`Connection error: ${error.message}`);
|
|
92
|
+
return;
|
|
285
93
|
}
|
|
286
|
-
|
|
94
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
95
|
+
this.terminal.log(`Unexpected error: ${message}`);
|
|
287
96
|
}
|
|
288
97
|
}
|
|
@@ -105,7 +105,7 @@ export class InitUseCase {
|
|
|
105
105
|
return token;
|
|
106
106
|
}
|
|
107
107
|
async fetchAndSelectSpace(token, team) {
|
|
108
|
-
this.terminal.actionStart('
|
|
108
|
+
this.terminal.actionStart('Fetching all spaces');
|
|
109
109
|
const { spaces } = await this.spaceService.getSpaces(token.accessToken, token.sessionKey, team.id, { fetchAll: true });
|
|
110
110
|
this.terminal.actionStop();
|
|
111
111
|
if (spaces.length === 0) {
|
|
@@ -433,7 +433,7 @@ export class InitUseCase {
|
|
|
433
433
|
}
|
|
434
434
|
async syncFromRemoteOrInitialize(params) {
|
|
435
435
|
// Pull from remote - fail if network/API error
|
|
436
|
-
this.terminal.
|
|
436
|
+
this.terminal.actionStart('Syncing from ByteRover...');
|
|
437
437
|
try {
|
|
438
438
|
const coGitSnapshot = await this.cogitPullService.pull({
|
|
439
439
|
accessToken: params.token.accessToken,
|
|
@@ -464,6 +464,7 @@ export class InitUseCase {
|
|
|
464
464
|
await this.trackingService.track('init', { message: syncFailureErr, status: 'error' });
|
|
465
465
|
throw new Error(syncFailureErr);
|
|
466
466
|
}
|
|
467
|
+
this.terminal.actionStop();
|
|
467
468
|
}
|
|
468
469
|
/**
|
|
469
470
|
* Appends ByteRover rules to a file that has no ByteRover content.
|
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
import type { BrvConfig } from '../../core/domain/entities/brv-config.js';
|
|
2
|
-
import type { IProjectConfigStore } from '../../core/interfaces/i-project-config-store.js';
|
|
3
2
|
import type { ITerminal } from '../../core/interfaces/i-terminal.js';
|
|
4
|
-
import type { ITokenStore } from '../../core/interfaces/i-token-store.js';
|
|
5
3
|
import type { ITrackingService } from '../../core/interfaces/i-tracking-service.js';
|
|
6
4
|
import type { IQueryUseCase, QueryUseCaseRunOptions } from '../../core/interfaces/usecase/i-query-use-case.js';
|
|
7
|
-
import { CipherAgent } from '../cipher/
|
|
5
|
+
import { CipherAgent } from '../cipher/agent/index.js';
|
|
6
|
+
import { type TransportClientFactory } from '../transport/transport-client-factory.js';
|
|
7
|
+
export type TransportClientFactoryCreator = () => TransportClientFactory;
|
|
8
8
|
export interface QueryUseCaseOptions {
|
|
9
|
-
projectConfigStore: IProjectConfigStore;
|
|
10
9
|
terminal: ITerminal;
|
|
11
|
-
tokenStore: ITokenStore;
|
|
12
10
|
trackingService: ITrackingService;
|
|
11
|
+
/** Optional factory creator for dependency injection (defaults to createTransportClientFactory) */
|
|
12
|
+
transportClientFactoryCreator?: TransportClientFactoryCreator;
|
|
13
13
|
}
|
|
14
14
|
export declare class QueryUseCase implements IQueryUseCase {
|
|
15
|
-
private readonly projectConfigStore;
|
|
16
15
|
private readonly terminal;
|
|
17
|
-
private readonly tokenStore;
|
|
18
16
|
private readonly trackingService;
|
|
17
|
+
private readonly transportClientFactoryCreator;
|
|
19
18
|
constructor(options: QueryUseCaseOptions);
|
|
20
19
|
/**
|
|
21
20
|
* Create CipherAgent instance. Protected to allow test overrides.
|
|
@@ -28,51 +27,25 @@ export declare class QueryUseCase implements IQueryUseCase {
|
|
|
28
27
|
protected generateSessionId(): string;
|
|
29
28
|
run(options: QueryUseCaseRunOptions): Promise<void>;
|
|
30
29
|
/**
|
|
31
|
-
*
|
|
30
|
+
* Format a parsed object result into a concise summary.
|
|
32
31
|
*/
|
|
33
|
-
private
|
|
32
|
+
private formatParsedResult;
|
|
34
33
|
/**
|
|
35
|
-
*
|
|
34
|
+
* Format tool arguments for display.
|
|
35
|
+
* Extract the most meaningful value for human reading.
|
|
36
36
|
*/
|
|
37
|
-
private
|
|
37
|
+
private formatToolArgs;
|
|
38
38
|
/**
|
|
39
|
-
* Format
|
|
39
|
+
* Format tool result for display.
|
|
40
|
+
* Shows meaningful, concise summary - NEVER shows raw JSON.
|
|
40
41
|
*/
|
|
41
|
-
private
|
|
42
|
+
private formatToolResult;
|
|
42
43
|
/**
|
|
43
|
-
*
|
|
44
|
+
* Handle connection-related errors with user-friendly messages.
|
|
44
45
|
*/
|
|
45
|
-
private
|
|
46
|
+
private handleConnectionError;
|
|
46
47
|
/**
|
|
47
|
-
*
|
|
48
|
+
* Stream task results from the connected instance.
|
|
48
49
|
*/
|
|
49
|
-
private
|
|
50
|
-
/**
|
|
51
|
-
* Format tool result summary for display
|
|
52
|
-
*/
|
|
53
|
-
private formatToolResultSummary;
|
|
54
|
-
/**
|
|
55
|
-
* Format topics count from find_knowledge_topics result
|
|
56
|
-
*/
|
|
57
|
-
private formatTopicsCount;
|
|
58
|
-
/**
|
|
59
|
-
* Get user-friendly description for a tool
|
|
60
|
-
*
|
|
61
|
-
* @param toolName - Name of the tool
|
|
62
|
-
* @param args - Tool arguments
|
|
63
|
-
* @returns User-friendly description
|
|
64
|
-
*/
|
|
65
|
-
private getToolDescription;
|
|
66
|
-
/**
|
|
67
|
-
* Handle workspace not initialized error
|
|
68
|
-
*/
|
|
69
|
-
private handleWorkspaceError;
|
|
70
|
-
/**
|
|
71
|
-
* Setup event listeners for CipherAgent
|
|
72
|
-
*/
|
|
73
|
-
private setupEventListeners;
|
|
74
|
-
/**
|
|
75
|
-
* Setup tool call tracking to persist in database
|
|
76
|
-
*/
|
|
77
|
-
private setupToolCallTracking;
|
|
50
|
+
private streamTaskResults;
|
|
78
51
|
}
|