byterover-cli 0.2.1 → 0.3.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 +56 -56
- package/bin/dev.js +1 -1
- package/dist/commands/cipher-agent/run.d.ts +111 -0
- package/dist/commands/cipher-agent/run.js +493 -0
- package/dist/commands/cipher-agent/set-prompt.d.ts +14 -0
- package/dist/commands/cipher-agent/set-prompt.js +53 -0
- package/dist/commands/cipher-agent/show-prompt.d.ts +11 -0
- package/dist/commands/cipher-agent/show-prompt.js +48 -0
- package/dist/commands/clear.d.ts +6 -0
- package/dist/commands/clear.js +36 -15
- package/dist/commands/curate.d.ts +74 -0
- package/dist/commands/curate.js +396 -0
- package/dist/commands/foo.d.ts +12 -0
- package/dist/commands/foo.js +61 -0
- package/dist/commands/gen-rules.d.ts +3 -0
- package/dist/commands/gen-rules.js +39 -20
- package/dist/commands/init.d.ts +48 -3
- package/dist/commands/init.js +242 -70
- package/dist/commands/login.js +9 -4
- package/dist/commands/pull.d.ts +33 -0
- package/dist/commands/pull.js +115 -0
- package/dist/commands/push.d.ts +13 -13
- package/dist/commands/push.js +81 -101
- package/dist/commands/query.d.ts +63 -0
- package/dist/commands/query.js +349 -0
- package/dist/commands/space/list.d.ts +5 -2
- package/dist/commands/space/list.js +60 -56
- package/dist/commands/space/switch.d.ts +16 -0
- package/dist/commands/space/switch.js +102 -53
- package/dist/commands/status.d.ts +5 -2
- package/dist/commands/status.js +43 -33
- package/dist/commands/watch.d.ts +23 -0
- package/dist/commands/watch.js +171 -0
- package/dist/config/auth.config.js +14 -2
- package/dist/config/context-tree-domains.d.ts +12 -0
- package/dist/config/context-tree-domains.js +29 -0
- package/dist/config/environment.d.ts +6 -0
- package/dist/config/environment.js +9 -2
- package/dist/constants.d.ts +5 -0
- package/dist/constants.js +6 -0
- package/dist/core/domain/cipher/agent/agent-state-machine.d.ts +128 -0
- package/dist/core/domain/cipher/agent/agent-state-machine.js +183 -0
- package/dist/core/domain/cipher/agent/agent-state.d.ts +77 -0
- package/dist/core/domain/cipher/agent/agent-state.js +59 -0
- package/dist/core/domain/cipher/agent/index.d.ts +7 -0
- package/dist/core/domain/cipher/agent/index.js +7 -0
- package/dist/core/domain/cipher/agent-events/index.d.ts +8 -0
- package/dist/core/domain/cipher/agent-events/index.js +7 -0
- package/dist/core/domain/cipher/agent-events/types.d.ts +419 -0
- package/dist/core/domain/cipher/agent-events/types.js +42 -0
- package/dist/core/domain/cipher/blob/types.d.ts +108 -0
- package/dist/core/domain/cipher/errors/blob-error.d.ts +36 -0
- package/dist/core/domain/cipher/errors/blob-error.js +68 -0
- package/dist/core/domain/cipher/errors/file-system-error.d.ts +211 -0
- package/dist/core/domain/cipher/errors/file-system-error.js +291 -0
- package/dist/core/domain/cipher/errors/llm-error.d.ts +120 -0
- package/dist/core/domain/cipher/errors/llm-error.js +161 -0
- package/dist/core/domain/cipher/errors/memory-error.d.ts +35 -0
- package/dist/core/domain/cipher/errors/memory-error.js +62 -0
- package/dist/core/domain/cipher/errors/process-error-code.d.ts +97 -0
- package/dist/core/domain/cipher/errors/process-error-code.js +98 -0
- package/dist/core/domain/cipher/errors/process-error.d.ts +135 -0
- package/dist/core/domain/cipher/errors/process-error.js +173 -0
- package/dist/core/domain/cipher/errors/session-error.d.ts +56 -0
- package/dist/core/domain/cipher/errors/session-error.js +74 -0
- package/dist/core/domain/cipher/errors/tool-error.d.ts +57 -0
- package/dist/core/domain/cipher/errors/tool-error.js +81 -0
- package/dist/core/domain/cipher/file-system/types.d.ts +203 -0
- package/dist/core/domain/cipher/memory/types.d.ts +102 -0
- package/dist/core/domain/cipher/memory/types.js +4 -0
- package/dist/core/domain/cipher/parsed-interaction.d.ts +47 -0
- package/dist/core/domain/cipher/parsed-interaction.js +25 -0
- package/dist/core/domain/cipher/process/types.d.ts +286 -0
- package/dist/core/domain/cipher/session/types.d.ts +54 -0
- package/dist/core/domain/cipher/storage/history-types.d.ts +38 -0
- package/dist/core/domain/cipher/system-prompt/types.d.ts +131 -0
- package/dist/core/domain/cipher/todos/index.d.ts +4 -0
- package/dist/core/domain/cipher/todos/index.js +4 -0
- package/dist/core/domain/cipher/todos/types.d.ts +57 -0
- package/dist/core/domain/cipher/todos/types.js +5 -0
- package/dist/core/domain/cipher/tools/constants.d.ts +28 -0
- package/dist/core/domain/cipher/tools/constants.js +24 -0
- package/dist/core/domain/cipher/tools/tool-error.d.ts +183 -0
- package/dist/core/domain/cipher/tools/tool-error.js +246 -0
- package/dist/core/domain/cipher/tools/types.d.ts +145 -0
- package/dist/core/domain/entities/brv-config.d.ts +42 -6
- package/dist/core/domain/entities/brv-config.js +115 -17
- package/dist/core/domain/entities/cogit-push-context.d.ts +38 -0
- package/dist/core/domain/entities/cogit-push-context.js +91 -0
- package/dist/core/domain/entities/cogit-push-response.d.ts +20 -0
- package/dist/core/domain/entities/cogit-push-response.js +31 -0
- package/dist/core/domain/entities/cogit-snapshot-author.d.ts +24 -0
- package/dist/core/domain/entities/cogit-snapshot-author.js +39 -0
- package/dist/core/domain/entities/cogit-snapshot-file.d.ts +34 -0
- package/dist/core/domain/entities/cogit-snapshot-file.js +59 -0
- package/dist/core/domain/entities/cogit-snapshot.d.ts +31 -0
- package/dist/core/domain/entities/cogit-snapshot.js +58 -0
- package/dist/core/domain/entities/context-tree-index.d.ts +26 -0
- package/dist/core/domain/entities/context-tree-index.js +27 -0
- package/dist/core/domain/entities/context-tree-snapshot.d.ts +56 -0
- package/dist/core/domain/entities/context-tree-snapshot.js +83 -0
- package/dist/core/domain/entities/event.d.ts +1 -1
- package/dist/core/domain/entities/event.js +3 -1
- package/dist/core/domain/entities/parser.d.ts +567 -0
- package/dist/core/domain/entities/parser.js +10 -0
- package/dist/core/domain/entities/playbook.d.ts +2 -23
- package/dist/core/domain/entities/playbook.js +2 -70
- package/dist/core/domain/errors/brv-config-version-error.d.ts +16 -0
- package/dist/core/domain/errors/brv-config-version-error.js +21 -0
- package/dist/core/domain/knowledge/directory-manager.d.ts +80 -0
- package/dist/core/domain/knowledge/directory-manager.js +145 -0
- package/dist/core/domain/knowledge/markdown-writer.d.ts +18 -0
- package/dist/core/domain/knowledge/markdown-writer.js +18 -0
- package/dist/core/domain/knowledge/relation-parser.d.ts +90 -0
- package/dist/core/domain/knowledge/relation-parser.js +131 -0
- package/dist/core/interfaces/cipher/cipher-services.d.ts +71 -0
- package/dist/core/interfaces/cipher/cipher-services.js +1 -0
- package/dist/core/interfaces/cipher/i-blob-storage.d.ts +78 -0
- package/dist/core/interfaces/cipher/i-blob-storage.js +1 -0
- package/dist/core/interfaces/cipher/i-chat-session.d.ts +62 -0
- package/dist/core/interfaces/cipher/i-chat-session.js +1 -0
- package/dist/core/interfaces/cipher/i-cipher-agent.d.ts +88 -0
- package/dist/core/interfaces/cipher/i-cipher-agent.js +1 -0
- package/dist/core/interfaces/cipher/i-coding-agent-log-parser.d.ts +20 -0
- package/dist/core/interfaces/cipher/i-coding-agent-log-parser.js +1 -0
- package/dist/core/interfaces/cipher/i-coding-agent-log-watcher.d.ts +31 -0
- package/dist/core/interfaces/cipher/i-coding-agent-log-watcher.js +1 -0
- package/dist/core/interfaces/cipher/i-content-generator.d.ts +120 -0
- package/dist/core/interfaces/cipher/i-content-generator.js +12 -0
- package/dist/core/interfaces/cipher/i-event-emitter.d.ts +76 -0
- package/dist/core/interfaces/cipher/i-event-emitter.js +1 -0
- package/dist/core/interfaces/cipher/i-file-system.d.ts +68 -0
- package/dist/core/interfaces/cipher/i-file-system.js +1 -0
- package/dist/core/interfaces/cipher/i-history-storage.d.ts +53 -0
- package/dist/core/interfaces/cipher/i-history-storage.js +1 -0
- package/dist/core/interfaces/cipher/i-llm-provider.d.ts +14 -0
- package/dist/core/interfaces/cipher/i-llm-provider.js +1 -0
- package/dist/core/interfaces/cipher/i-llm-service.d.ts +62 -0
- package/dist/core/interfaces/cipher/i-llm-service.js +1 -0
- package/dist/core/interfaces/cipher/i-logger.d.ts +78 -0
- package/dist/core/interfaces/cipher/i-logger.js +28 -0
- package/dist/core/interfaces/cipher/i-message-formatter.d.ts +44 -0
- package/dist/core/interfaces/cipher/i-message-formatter.js +1 -0
- package/dist/core/interfaces/cipher/i-policy-engine.d.ts +102 -0
- package/dist/core/interfaces/cipher/i-policy-engine.js +9 -0
- package/dist/core/interfaces/cipher/i-process-service.d.ts +65 -0
- package/dist/core/interfaces/cipher/i-process-service.js +1 -0
- package/dist/core/interfaces/cipher/i-system-prompt-contributor.d.ts +25 -0
- package/dist/core/interfaces/cipher/i-system-prompt-contributor.js +1 -0
- package/dist/core/interfaces/cipher/i-tokenizer.d.ts +15 -0
- package/dist/core/interfaces/cipher/i-tokenizer.js +1 -0
- package/dist/core/interfaces/cipher/i-tool-provider.d.ts +64 -0
- package/dist/core/interfaces/cipher/i-tool-provider.js +1 -0
- package/dist/core/interfaces/cipher/i-tool-scheduler.d.ts +103 -0
- package/dist/core/interfaces/cipher/i-tool-scheduler.js +11 -0
- package/dist/core/interfaces/cipher/llm-types.d.ts +46 -0
- package/dist/core/interfaces/cipher/llm-types.js +5 -0
- package/dist/core/interfaces/cipher/message-types.d.ts +118 -0
- package/dist/core/interfaces/cipher/message-types.js +5 -0
- package/dist/core/interfaces/cipher/tokenizer-types.d.ts +11 -0
- package/dist/core/interfaces/cipher/tokenizer-types.js +14 -0
- package/dist/core/interfaces/i-cogit-pull-service.d.ts +24 -0
- package/dist/core/interfaces/i-cogit-pull-service.js +1 -0
- package/dist/core/interfaces/i-cogit-push-service.d.ts +27 -0
- package/dist/core/interfaces/i-cogit-push-service.js +1 -0
- package/dist/core/interfaces/i-context-file-reader.d.ts +32 -0
- package/dist/core/interfaces/i-context-file-reader.js +1 -0
- package/dist/core/interfaces/i-context-tree-service.d.ts +21 -0
- package/dist/core/interfaces/i-context-tree-service.js +1 -0
- package/dist/core/interfaces/i-context-tree-snapshot-service.d.ts +36 -0
- package/dist/core/interfaces/i-context-tree-snapshot-service.js +1 -0
- package/dist/core/interfaces/i-context-tree-writer-service.d.ts +32 -0
- package/dist/core/interfaces/i-context-tree-writer-service.js +1 -0
- package/dist/core/interfaces/i-file-watcher-service.d.ts +41 -0
- package/dist/core/interfaces/i-file-watcher-service.js +1 -0
- package/dist/core/interfaces/parser/i-clean-parser-service.d.ts +18 -0
- package/dist/core/interfaces/parser/i-clean-parser-service.js +1 -0
- package/dist/core/interfaces/parser/i-raw-parser-service.d.ts +17 -0
- package/dist/core/interfaces/parser/i-raw-parser-service.js +1 -0
- package/dist/core/interfaces/parser/i-session-normalizer.d.ts +56 -0
- package/dist/core/interfaces/parser/i-session-normalizer.js +1 -0
- package/dist/hooks/command_not_found/handle-invalid-commands.d.ts +7 -0
- package/dist/hooks/command_not_found/handle-invalid-commands.js +32 -0
- package/dist/hooks/error/clean-errors.d.ts +7 -0
- package/dist/hooks/error/clean-errors.js +50 -0
- package/dist/hooks/init/welcome.js +72 -1
- package/dist/hooks/prerun/validate-brv-config-version.d.ts +28 -0
- package/dist/hooks/prerun/validate-brv-config-version.js +43 -0
- package/dist/infra/cipher/agent-service-factory.d.ts +86 -0
- package/dist/infra/cipher/agent-service-factory.js +212 -0
- package/dist/infra/cipher/blob/blob-storage-factory.d.ts +13 -0
- package/dist/infra/cipher/blob/blob-storage-factory.js +14 -0
- package/dist/infra/cipher/blob/index.d.ts +10 -0
- package/dist/infra/cipher/blob/index.js +12 -0
- package/dist/infra/cipher/blob/migrations.d.ts +63 -0
- package/dist/infra/cipher/blob/migrations.js +148 -0
- package/dist/infra/cipher/blob/sqlite-blob-storage.d.ts +82 -0
- package/dist/infra/cipher/blob/sqlite-blob-storage.js +307 -0
- package/dist/infra/cipher/cipher-agent-state-manager.d.ts +63 -0
- package/dist/infra/cipher/cipher-agent-state-manager.js +108 -0
- package/dist/infra/cipher/cipher-agent.d.ts +182 -0
- package/dist/infra/cipher/cipher-agent.js +317 -0
- package/dist/infra/cipher/command-parser.d.ts +23 -0
- package/dist/infra/cipher/command-parser.js +85 -0
- package/dist/infra/cipher/display/todo-display.d.ts +23 -0
- package/dist/infra/cipher/display/todo-display.js +129 -0
- package/dist/infra/cipher/events/event-emitter.d.ts +137 -0
- package/dist/infra/cipher/events/event-emitter.js +158 -0
- package/dist/infra/cipher/exit-codes.d.ts +44 -0
- package/dist/infra/cipher/exit-codes.js +58 -0
- package/dist/infra/cipher/file-system/file-system-service.d.ts +105 -0
- package/dist/infra/cipher/file-system/file-system-service.js +641 -0
- package/dist/infra/cipher/file-system/gitignore-filter.d.ts +77 -0
- package/dist/infra/cipher/file-system/gitignore-filter.js +120 -0
- package/dist/infra/cipher/file-system/glob-utils.d.ts +60 -0
- package/dist/infra/cipher/file-system/glob-utils.js +120 -0
- package/dist/infra/cipher/file-system/path-validator.d.ts +69 -0
- package/dist/infra/cipher/file-system/path-validator.js +184 -0
- package/dist/infra/cipher/grpc/internal-llm-grpc-service.d.ts +149 -0
- package/dist/infra/cipher/grpc/internal-llm-grpc-service.js +364 -0
- package/dist/infra/cipher/grpc/internal-llm-grpc.proto +94 -0
- package/dist/infra/cipher/interactive-commands.d.ts +16 -0
- package/dist/infra/cipher/interactive-commands.js +198 -0
- package/dist/infra/cipher/interactive-loop.d.ts +24 -0
- package/dist/infra/cipher/interactive-loop.js +352 -0
- package/dist/infra/cipher/llm/context/async-mutex.d.ts +59 -0
- package/dist/infra/cipher/llm/context/async-mutex.js +92 -0
- package/dist/infra/cipher/llm/context/compression/index.d.ts +6 -0
- package/dist/infra/cipher/llm/context/compression/index.js +5 -0
- package/dist/infra/cipher/llm/context/compression/middle-removal.d.ts +40 -0
- package/dist/infra/cipher/llm/context/compression/middle-removal.js +76 -0
- package/dist/infra/cipher/llm/context/compression/oldest-removal.d.ts +38 -0
- package/dist/infra/cipher/llm/context/compression/oldest-removal.js +53 -0
- package/dist/infra/cipher/llm/context/compression/types.d.ts +36 -0
- package/dist/infra/cipher/llm/context/compression/types.js +1 -0
- package/dist/infra/cipher/llm/context/context-manager.d.ts +234 -0
- package/dist/infra/cipher/llm/context/context-manager.js +419 -0
- package/dist/infra/cipher/llm/context/index.d.ts +2 -0
- package/dist/infra/cipher/llm/context/index.js +2 -0
- package/dist/infra/cipher/llm/context/loop-detector.d.ts +125 -0
- package/dist/infra/cipher/llm/context/loop-detector.js +194 -0
- package/dist/infra/cipher/llm/context/utils.d.ts +17 -0
- package/dist/infra/cipher/llm/context/utils.js +89 -0
- package/dist/infra/cipher/llm/formatters/claude-formatter.d.ts +54 -0
- package/dist/infra/cipher/llm/formatters/claude-formatter.js +182 -0
- package/dist/infra/cipher/llm/formatters/gemini-formatter.d.ts +69 -0
- package/dist/infra/cipher/llm/formatters/gemini-formatter.js +253 -0
- package/dist/infra/cipher/llm/formatters/openrouter-formatter.d.ts +47 -0
- package/dist/infra/cipher/llm/formatters/openrouter-formatter.js +238 -0
- package/dist/infra/cipher/llm/generators/byterover-content-generator.d.ts +92 -0
- package/dist/infra/cipher/llm/generators/byterover-content-generator.js +211 -0
- package/dist/infra/cipher/llm/generators/index.d.ts +13 -0
- package/dist/infra/cipher/llm/generators/index.js +13 -0
- package/dist/infra/cipher/llm/generators/logging-content-generator.d.ts +104 -0
- package/dist/infra/cipher/llm/generators/logging-content-generator.js +182 -0
- package/dist/infra/cipher/llm/generators/openrouter-content-generator.d.ts +93 -0
- package/dist/infra/cipher/llm/generators/openrouter-content-generator.js +254 -0
- package/dist/infra/cipher/llm/generators/retryable-content-generator.d.ts +90 -0
- package/dist/infra/cipher/llm/generators/retryable-content-generator.js +157 -0
- package/dist/infra/cipher/llm/index.d.ts +9 -0
- package/dist/infra/cipher/llm/index.js +13 -0
- package/dist/infra/cipher/llm/internal-llm-service.d.ts +308 -0
- package/dist/infra/cipher/llm/internal-llm-service.js +724 -0
- package/dist/infra/cipher/llm/openrouter-llm-service.d.ts +183 -0
- package/dist/infra/cipher/llm/openrouter-llm-service.js +386 -0
- package/dist/infra/cipher/llm/response-validator.d.ts +89 -0
- package/dist/infra/cipher/llm/response-validator.js +157 -0
- package/dist/infra/cipher/llm/retry/index.d.ts +10 -0
- package/dist/infra/cipher/llm/retry/index.js +10 -0
- package/dist/infra/cipher/llm/retry/retry-policy.d.ts +74 -0
- package/dist/infra/cipher/llm/retry/retry-policy.js +146 -0
- package/dist/infra/cipher/llm/retry/retry-with-backoff.d.ts +113 -0
- package/dist/infra/cipher/llm/retry/retry-with-backoff.js +247 -0
- package/dist/infra/cipher/llm/thought-parser.d.ts +145 -0
- package/dist/infra/cipher/llm/thought-parser.js +190 -0
- package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.d.ts +47 -0
- package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.js +55 -0
- package/dist/infra/cipher/llm/tokenizers/default-tokenizer.d.ts +31 -0
- package/dist/infra/cipher/llm/tokenizers/default-tokenizer.js +38 -0
- package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.d.ts +37 -0
- package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.js +45 -0
- package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.d.ts +29 -0
- package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.js +37 -0
- package/dist/infra/cipher/llm/tool-output-processor.d.ts +117 -0
- package/dist/infra/cipher/llm/tool-output-processor.js +153 -0
- package/dist/infra/cipher/logger/console-logger.d.ts +42 -0
- package/dist/infra/cipher/logger/console-logger.js +63 -0
- package/dist/infra/cipher/logger/event-based-logger.d.ts +54 -0
- package/dist/infra/cipher/logger/event-based-logger.js +92 -0
- package/dist/infra/cipher/memory/index.d.ts +6 -0
- package/dist/infra/cipher/memory/index.js +7 -0
- package/dist/infra/cipher/memory/memory-manager.d.ts +136 -0
- package/dist/infra/cipher/memory/memory-manager.js +523 -0
- package/dist/infra/cipher/parsers/coding-agent-log-parser.d.ts +24 -0
- package/dist/infra/cipher/parsers/coding-agent-log-parser.js +51 -0
- package/dist/infra/cipher/process/command-validator.d.ts +59 -0
- package/dist/infra/cipher/process/command-validator.js +266 -0
- package/dist/infra/cipher/process/index.d.ts +8 -0
- package/dist/infra/cipher/process/index.js +8 -0
- package/dist/infra/cipher/process/process-service.d.ts +95 -0
- package/dist/infra/cipher/process/process-service.js +439 -0
- package/dist/infra/cipher/session/chat-session.d.ts +80 -0
- package/dist/infra/cipher/session/chat-session.js +165 -0
- package/dist/infra/cipher/session/index.d.ts +6 -0
- package/dist/infra/cipher/session/index.js +5 -0
- package/dist/infra/cipher/session/session-event-forwarder.d.ts +37 -0
- package/dist/infra/cipher/session/session-event-forwarder.js +83 -0
- package/dist/infra/cipher/session/session-manager.d.ts +109 -0
- package/dist/infra/cipher/session/session-manager.js +172 -0
- package/dist/infra/cipher/storage/blob-history-storage.d.ts +76 -0
- package/dist/infra/cipher/storage/blob-history-storage.js +178 -0
- package/dist/infra/cipher/system-prompt/simple-prompt-factory.d.ts +105 -0
- package/dist/infra/cipher/system-prompt/simple-prompt-factory.js +290 -0
- package/dist/infra/cipher/tools/core-tool-scheduler.d.ts +99 -0
- package/dist/infra/cipher/tools/core-tool-scheduler.js +161 -0
- package/dist/infra/cipher/tools/default-policy-rules.d.ts +26 -0
- package/dist/infra/cipher/tools/default-policy-rules.js +125 -0
- package/dist/infra/cipher/tools/implementations/bash-exec-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/bash-exec-tool.js +93 -0
- package/dist/infra/cipher/tools/implementations/bash-output-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/bash-output-tool.js +47 -0
- package/dist/infra/cipher/tools/implementations/create-knowledge-topic-tool.d.ts +11 -0
- package/dist/infra/cipher/tools/implementations/create-knowledge-topic-tool.js +142 -0
- package/dist/infra/cipher/tools/implementations/delete-memory-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/delete-memory-tool.js +37 -0
- package/dist/infra/cipher/tools/implementations/detect-domains-tool.d.ts +7 -0
- package/dist/infra/cipher/tools/implementations/detect-domains-tool.js +73 -0
- package/dist/infra/cipher/tools/implementations/edit-file-tool.d.ts +13 -0
- package/dist/infra/cipher/tools/implementations/edit-file-tool.js +50 -0
- package/dist/infra/cipher/tools/implementations/edit-memory-tool.d.ts +13 -0
- package/dist/infra/cipher/tools/implementations/edit-memory-tool.js +53 -0
- package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.d.ts +7 -0
- package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.js +421 -0
- package/dist/infra/cipher/tools/implementations/glob-files-tool.d.ts +18 -0
- package/dist/infra/cipher/tools/implementations/glob-files-tool.js +70 -0
- package/dist/infra/cipher/tools/implementations/grep-content-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/grep-content-tool.js +77 -0
- package/dist/infra/cipher/tools/implementations/kill-process-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/kill-process-tool.js +55 -0
- package/dist/infra/cipher/tools/implementations/list-memories-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/list-memories-tool.js +63 -0
- package/dist/infra/cipher/tools/implementations/read-file-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/read-file-tool.js +54 -0
- package/dist/infra/cipher/tools/implementations/read-memory-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/read-memory-tool.js +39 -0
- package/dist/infra/cipher/tools/implementations/search-history-tool.d.ts +10 -0
- package/dist/infra/cipher/tools/implementations/search-history-tool.js +36 -0
- package/dist/infra/cipher/tools/implementations/write-file-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/write-file-tool.js +52 -0
- package/dist/infra/cipher/tools/implementations/write-memory-tool.d.ts +13 -0
- package/dist/infra/cipher/tools/implementations/write-memory-tool.js +52 -0
- package/dist/infra/cipher/tools/implementations/write-todos-tool.d.ts +10 -0
- package/dist/infra/cipher/tools/implementations/write-todos-tool.js +165 -0
- package/dist/infra/cipher/tools/index.d.ts +18 -0
- package/dist/infra/cipher/tools/index.js +19 -0
- package/dist/infra/cipher/tools/policy-engine.d.ts +80 -0
- package/dist/infra/cipher/tools/policy-engine.js +110 -0
- package/dist/infra/cipher/tools/tool-invocation-queue.d.ts +191 -0
- package/dist/infra/cipher/tools/tool-invocation-queue.js +254 -0
- package/dist/infra/cipher/tools/tool-invocation.d.ts +216 -0
- package/dist/infra/cipher/tools/tool-invocation.js +294 -0
- package/dist/infra/cipher/tools/tool-manager.d.ts +135 -0
- package/dist/infra/cipher/tools/tool-manager.js +209 -0
- package/dist/infra/cipher/tools/tool-markers.d.ts +48 -0
- package/dist/infra/cipher/tools/tool-markers.js +49 -0
- package/dist/infra/cipher/tools/tool-provider.d.ts +77 -0
- package/dist/infra/cipher/tools/tool-provider.js +196 -0
- package/dist/infra/cipher/tools/tool-registry.d.ts +52 -0
- package/dist/infra/cipher/tools/tool-registry.js +144 -0
- package/dist/infra/cipher/tools/utils/schema-converter.d.ts +10 -0
- package/dist/infra/cipher/tools/utils/schema-converter.js +29 -0
- package/dist/infra/cipher/validation/workspace-validator.d.ts +19 -0
- package/dist/infra/cipher/validation/workspace-validator.js +37 -0
- package/dist/infra/cipher/watcher/coding-agent-log-watcher.d.ts +14 -0
- package/dist/infra/cipher/watcher/coding-agent-log-watcher.js +55 -0
- package/dist/infra/cogit/context-tree-to-push-context-mapper.d.ts +21 -0
- package/dist/infra/cogit/context-tree-to-push-context-mapper.js +32 -0
- package/dist/infra/cogit/http-cogit-pull-service.d.ts +15 -0
- package/dist/infra/cogit/http-cogit-pull-service.js +30 -0
- package/dist/infra/cogit/http-cogit-push-service.d.ts +17 -0
- package/dist/infra/cogit/http-cogit-push-service.js +104 -0
- package/dist/infra/config/file-config-store.js +9 -3
- package/dist/infra/context-tree/file-context-file-reader.d.ts +14 -0
- package/dist/infra/context-tree/file-context-file-reader.js +46 -0
- package/dist/infra/context-tree/file-context-tree-service.d.ts +14 -0
- package/dist/infra/context-tree/file-context-tree-service.js +46 -0
- package/dist/infra/context-tree/file-context-tree-snapshot-service.d.ts +34 -0
- package/dist/infra/context-tree/file-context-tree-snapshot-service.js +117 -0
- package/dist/infra/context-tree/file-context-tree-writer-service.d.ts +22 -0
- package/dist/infra/context-tree/file-context-tree-writer-service.js +61 -0
- package/dist/infra/memory/http-memory-retrieval-service.js +2 -1
- package/dist/infra/memory/http-memory-storage-service.js +4 -3
- package/dist/infra/parsers/clean/clean-claude-service.d.ts +111 -0
- package/dist/infra/parsers/clean/clean-claude-service.js +271 -0
- package/dist/infra/parsers/clean/clean-codex-service.d.ts +231 -0
- package/dist/infra/parsers/clean/clean-codex-service.js +534 -0
- package/dist/infra/parsers/clean/clean-copilot-service.d.ts +255 -0
- package/dist/infra/parsers/clean/clean-copilot-service.js +729 -0
- package/dist/infra/parsers/clean/clean-cursor-service.d.ts +161 -0
- package/dist/infra/parsers/clean/clean-cursor-service.js +432 -0
- package/dist/infra/parsers/clean/clean-parser-service-factory.d.ts +54 -0
- package/dist/infra/parsers/clean/clean-parser-service-factory.js +80 -0
- package/dist/infra/parsers/clean/shared.d.ts +84 -0
- package/dist/infra/parsers/clean/shared.js +273 -0
- package/dist/infra/parsers/raw/raw-claude-service.d.ts +195 -0
- package/dist/infra/parsers/raw/raw-claude-service.js +548 -0
- package/dist/infra/parsers/raw/raw-codex-service.d.ts +313 -0
- package/dist/infra/parsers/raw/raw-codex-service.js +782 -0
- package/dist/infra/parsers/raw/raw-copilot-service.d.ts +196 -0
- package/dist/infra/parsers/raw/raw-copilot-service.js +558 -0
- package/dist/infra/parsers/raw/raw-cursor-service.d.ts +316 -0
- package/dist/infra/parsers/raw/raw-cursor-service.js +818 -0
- package/dist/infra/parsers/raw/raw-parser-service-factory.d.ts +54 -0
- package/dist/infra/parsers/raw/raw-parser-service-factory.js +81 -0
- package/dist/infra/space/http-space-service.js +2 -1
- package/dist/infra/team/http-team-service.js +2 -1
- package/dist/infra/user/http-user-service.js +2 -1
- package/dist/infra/watcher/file-watcher-service.d.ts +10 -0
- package/dist/infra/watcher/file-watcher-service.js +81 -0
- package/dist/infra/workspace/workspace-detector-service.d.ts +60 -0
- package/dist/infra/workspace/workspace-detector-service.js +165 -0
- package/dist/resources/prompts/curate-context-tree-curation.yml +48 -0
- package/dist/resources/prompts/modes/autonomous.yml +9 -0
- package/dist/resources/prompts/query-context-tree-retrieval.yml +49 -0
- package/dist/resources/prompts/reflection.yml +27 -0
- package/dist/resources/prompts/system-prompt.yml +82 -0
- package/dist/resources/prompts/tool-outputs.yml +30 -0
- package/dist/templates/README.md +6 -7
- package/dist/templates/sections/command-reference.md +40 -111
- package/dist/templates/sections/workflow.md +3 -30
- package/dist/utils/emoji-helpers.d.ts +38 -0
- package/dist/utils/emoji-helpers.js +42 -0
- package/dist/utils/error-handler.d.ts +51 -0
- package/dist/utils/error-handler.js +169 -0
- package/dist/utils/error-helpers.d.ts +30 -0
- package/dist/utils/error-helpers.js +47 -0
- package/dist/utils/file-helpers.d.ts +15 -0
- package/dist/utils/file-helpers.js +44 -0
- package/dist/utils/oclif-error-helpers.d.ts +40 -0
- package/dist/utils/oclif-error-helpers.js +46 -0
- package/dist/utils/tool-display-formatter.d.ts +53 -0
- package/dist/utils/tool-display-formatter.js +257 -0
- package/oclif.manifest.json +381 -141
- package/package.json +27 -6
- package/dist/commands/add.d.ts +0 -49
- package/dist/commands/add.js +0 -192
- package/dist/commands/complete.d.ts +0 -108
- package/dist/commands/complete.js +0 -340
- package/dist/commands/retrieve.d.ts +0 -26
- package/dist/commands/retrieve.js +0 -101
- package/dist/core/domain/entities/curator-output.d.ts +0 -14
- package/dist/core/domain/entities/curator-output.js +0 -23
- package/dist/core/domain/entities/delta-batch.d.ts +0 -30
- package/dist/core/domain/entities/delta-batch.js +0 -52
- package/dist/core/domain/entities/delta-operation.d.ts +0 -31
- package/dist/core/domain/entities/delta-operation.js +0 -50
- package/dist/core/domain/entities/executor-output.d.ts +0 -27
- package/dist/core/domain/entities/executor-output.js +0 -33
- package/dist/core/domain/entities/reflector-output.d.ts +0 -38
- package/dist/core/domain/entities/reflector-output.js +0 -44
- package/dist/core/interfaces/i-ace-prompt-builder.d.ts +0 -48
- package/dist/core/interfaces/i-bullet-content-store.d.ts +0 -36
- package/dist/core/interfaces/i-delta-store.d.ts +0 -15
- package/dist/core/interfaces/i-executor-output-store.d.ts +0 -14
- package/dist/core/interfaces/i-playbook-service.d.ts +0 -69
- package/dist/core/interfaces/i-playbook-store.d.ts +0 -38
- package/dist/core/interfaces/i-reflection-store.d.ts +0 -21
- package/dist/infra/ace/ace-file-utils.d.ts +0 -46
- package/dist/infra/ace/ace-file-utils.js +0 -83
- package/dist/infra/ace/ace-prompt-templates.d.ts +0 -13
- package/dist/infra/ace/ace-prompt-templates.js +0 -177
- package/dist/infra/ace/file-bullet-content-store.d.ts +0 -27
- package/dist/infra/ace/file-bullet-content-store.js +0 -89
- package/dist/infra/ace/file-delta-store.d.ts +0 -9
- package/dist/infra/ace/file-delta-store.js +0 -26
- package/dist/infra/ace/file-executor-output-store.d.ts +0 -9
- package/dist/infra/ace/file-executor-output-store.js +0 -26
- package/dist/infra/ace/file-playbook-store.d.ts +0 -29
- package/dist/infra/ace/file-playbook-store.js +0 -107
- package/dist/infra/ace/file-reflection-store.d.ts +0 -10
- package/dist/infra/ace/file-reflection-store.js +0 -55
- package/dist/infra/playbook/file-playbook-service.d.ts +0 -42
- package/dist/infra/playbook/file-playbook-service.js +0 -132
- /package/dist/core/{interfaces/i-ace-prompt-builder.js → domain/cipher/blob/types.js} +0 -0
- /package/dist/core/{interfaces/i-bullet-content-store.js → domain/cipher/file-system/types.js} +0 -0
- /package/dist/core/{interfaces/i-delta-store.js → domain/cipher/process/types.js} +0 -0
- /package/dist/core/{interfaces/i-executor-output-store.js → domain/cipher/session/types.js} +0 -0
- /package/dist/core/{interfaces/i-playbook-service.js → domain/cipher/storage/history-types.js} +0 -0
- /package/dist/core/{interfaces/i-playbook-store.js → domain/cipher/system-prompt/types.js} +0 -0
- /package/dist/core/{interfaces/i-reflection-store.js → domain/cipher/tools/types.js} +0 -0
|
@@ -1,18 +1,33 @@
|
|
|
1
|
-
import { select } from '@inquirer/prompts';
|
|
1
|
+
import { search, select } from '@inquirer/prompts';
|
|
2
2
|
import { Command, ux } from '@oclif/core';
|
|
3
3
|
import { getCurrentConfig } from '../../config/environment.js';
|
|
4
4
|
import { BRV_DIR, PROJECT_CONFIG_FILE } from '../../constants.js';
|
|
5
|
+
import { AGENT_VALUES } from '../../core/domain/entities/agent.js';
|
|
5
6
|
import { BrvConfig } from '../../core/domain/entities/brv-config.js';
|
|
7
|
+
import { ExitCode, ExitError, exitWithCode } from '../../infra/cipher/exit-codes.js';
|
|
6
8
|
import { ProjectConfigStore } from '../../infra/config/file-config-store.js';
|
|
7
9
|
import { HttpSpaceService } from '../../infra/space/http-space-service.js';
|
|
8
10
|
import { KeychainTokenStore } from '../../infra/storage/keychain-token-store.js';
|
|
9
11
|
import { HttpTeamService } from '../../infra/team/http-team-service.js';
|
|
12
|
+
import { WorkspaceDetectorService } from '../../infra/workspace/workspace-detector-service.js';
|
|
10
13
|
export default class SpaceSwitch extends Command {
|
|
11
14
|
static description = `Switch to a different team or space (updates ${BRV_DIR}/${PROJECT_CONFIG_FILE})`;
|
|
12
15
|
static examples = [
|
|
13
16
|
'<%= config.bin %> <%= command.id %>',
|
|
14
17
|
'# Shows current configuration, then prompts for new team/space selection',
|
|
15
18
|
];
|
|
19
|
+
async catch(error) {
|
|
20
|
+
// Check if error is ExitError (message already displayed)
|
|
21
|
+
if (error instanceof ExitError) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
// Backwards compatibility: also check oclif.exit property
|
|
25
|
+
if (error.oclif?.exit !== undefined) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// For unexpected errors, show the message
|
|
29
|
+
this.error(error instanceof Error ? error.message : 'Switch failed');
|
|
30
|
+
}
|
|
16
31
|
createServices() {
|
|
17
32
|
const envConfig = getCurrentConfig();
|
|
18
33
|
return {
|
|
@@ -26,6 +41,35 @@ export default class SpaceSwitch extends Command {
|
|
|
26
41
|
tokenStore: new KeychainTokenStore(),
|
|
27
42
|
};
|
|
28
43
|
}
|
|
44
|
+
detectWorkspacesForAgent(agent) {
|
|
45
|
+
const detector = new WorkspaceDetectorService();
|
|
46
|
+
const result = detector.detectWorkspaces(agent);
|
|
47
|
+
return {
|
|
48
|
+
chatLogPath: result.chatLogPath,
|
|
49
|
+
cwd: result.cwd,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Prompts the user to select an agent.
|
|
54
|
+
* This method is protected to allow test overrides.
|
|
55
|
+
* @returns The selected agent
|
|
56
|
+
*/
|
|
57
|
+
async promptForAgentSelection() {
|
|
58
|
+
const AGENTS = AGENT_VALUES.map((agent) => ({
|
|
59
|
+
name: agent,
|
|
60
|
+
value: agent,
|
|
61
|
+
}));
|
|
62
|
+
const answer = await search({
|
|
63
|
+
message: 'Which agent you are using (type to search):',
|
|
64
|
+
async source(input) {
|
|
65
|
+
if (!input)
|
|
66
|
+
return AGENTS;
|
|
67
|
+
return AGENTS.filter((agent) => agent.name.toLowerCase().includes(input.toLowerCase()) ||
|
|
68
|
+
agent.value.toLowerCase().includes(input.toLowerCase()));
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
return answer;
|
|
72
|
+
}
|
|
29
73
|
async promptForSpaceSelection(spaces) {
|
|
30
74
|
const selectedSpaceId = await select({
|
|
31
75
|
choices: spaces.map((space) => ({
|
|
@@ -36,7 +80,7 @@ export default class SpaceSwitch extends Command {
|
|
|
36
80
|
});
|
|
37
81
|
const selectedSpace = spaces.find((space) => space.id === selectedSpaceId);
|
|
38
82
|
if (!selectedSpace) {
|
|
39
|
-
|
|
83
|
+
exitWithCode(ExitCode.VALIDATION_ERROR, 'Space selection failed');
|
|
40
84
|
}
|
|
41
85
|
return selectedSpace;
|
|
42
86
|
}
|
|
@@ -50,62 +94,67 @@ export default class SpaceSwitch extends Command {
|
|
|
50
94
|
});
|
|
51
95
|
const selectedTeam = teams.find((team) => team.id === selectedTeamId);
|
|
52
96
|
if (!selectedTeam) {
|
|
53
|
-
|
|
97
|
+
exitWithCode(ExitCode.VALIDATION_ERROR, 'Team selection failed');
|
|
54
98
|
}
|
|
55
99
|
return selectedTeam;
|
|
56
100
|
}
|
|
57
101
|
async run() {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
this.error('Authentication token expired. Please run "brv login" again.');
|
|
77
|
-
}
|
|
78
|
-
// Fetch all teams
|
|
79
|
-
ux.action.start('Fetching all teams');
|
|
80
|
-
const teamResult = await teamService.getTeams(token.accessToken, token.sessionKey, { fetchAll: true });
|
|
81
|
-
ux.action.stop();
|
|
82
|
-
if (teamResult.teams.length === 0) {
|
|
83
|
-
this.error('No teams found. Please create a team in the ByteRover dashboard first.');
|
|
84
|
-
}
|
|
85
|
-
// Prompt for team selection
|
|
86
|
-
this.log();
|
|
87
|
-
const selectedTeam = await this.promptForTeamSelection(teamResult.teams);
|
|
88
|
-
// Fetch spaces for selected team
|
|
89
|
-
ux.action.start('Fetching all spaces');
|
|
90
|
-
const spaceResult = await spaceService.getSpaces(token.accessToken, token.sessionKey, selectedTeam.id, {
|
|
91
|
-
fetchAll: true,
|
|
92
|
-
});
|
|
93
|
-
ux.action.stop();
|
|
94
|
-
if (spaceResult.spaces.length === 0) {
|
|
95
|
-
this.error(`No spaces found in team "${selectedTeam.getDisplayName()}". Please create a space in the ByteRover dashboard first.`);
|
|
96
|
-
}
|
|
97
|
-
// Prompt for space selection
|
|
98
|
-
this.log();
|
|
99
|
-
const selectedSpace = await this.promptForSpaceSelection(spaceResult.spaces);
|
|
100
|
-
// Update configuration
|
|
101
|
-
const newConfig = BrvConfig.fromSpace(selectedSpace);
|
|
102
|
-
await projectConfigStore.write(newConfig);
|
|
103
|
-
// Display success
|
|
104
|
-
this.log(`\n✓ Successfully switched to space: ${selectedSpace.getDisplayName()}`);
|
|
105
|
-
this.log(`✓ Configuration updated in: ${BRV_DIR}/${PROJECT_CONFIG_FILE}`);
|
|
102
|
+
const { projectConfigStore, spaceService, teamService, tokenStore } = this.createServices();
|
|
103
|
+
// Check project initialization (MUST exist for switch)
|
|
104
|
+
const currentConfig = await projectConfigStore.read();
|
|
105
|
+
if (!currentConfig) {
|
|
106
|
+
exitWithCode(ExitCode.VALIDATION_ERROR, 'Project not initialized. Please run "brv init" first.');
|
|
107
|
+
}
|
|
108
|
+
// Show current configuration
|
|
109
|
+
this.log('Current configuration:');
|
|
110
|
+
this.log(` Team: ${currentConfig.teamName}`);
|
|
111
|
+
this.log(` Space: ${currentConfig.spaceName}`);
|
|
112
|
+
this.log();
|
|
113
|
+
// Validate authentication
|
|
114
|
+
const token = await tokenStore.load();
|
|
115
|
+
if (!token) {
|
|
116
|
+
exitWithCode(ExitCode.VALIDATION_ERROR, 'Not authenticated. Please run "brv login" first.');
|
|
117
|
+
}
|
|
118
|
+
if (!token.isValid()) {
|
|
119
|
+
exitWithCode(ExitCode.VALIDATION_ERROR, 'Authentication token expired. Please run "brv login" again.');
|
|
106
120
|
}
|
|
107
|
-
|
|
108
|
-
|
|
121
|
+
// Fetch all teams
|
|
122
|
+
ux.action.start('Fetching all teams');
|
|
123
|
+
const teamResult = await teamService.getTeams(token.accessToken, token.sessionKey, { fetchAll: true });
|
|
124
|
+
ux.action.stop();
|
|
125
|
+
if (teamResult.teams.length === 0) {
|
|
126
|
+
exitWithCode(ExitCode.VALIDATION_ERROR, 'No teams found. Please create a team in the ByteRover dashboard first.');
|
|
109
127
|
}
|
|
128
|
+
// Prompt for team selection
|
|
129
|
+
this.log();
|
|
130
|
+
const selectedTeam = await this.promptForTeamSelection(teamResult.teams);
|
|
131
|
+
// Fetch spaces for selected team
|
|
132
|
+
ux.action.start('Fetching all spaces');
|
|
133
|
+
const spaceResult = await spaceService.getSpaces(token.accessToken, token.sessionKey, selectedTeam.id, {
|
|
134
|
+
fetchAll: true,
|
|
135
|
+
});
|
|
136
|
+
ux.action.stop();
|
|
137
|
+
if (spaceResult.spaces.length === 0) {
|
|
138
|
+
exitWithCode(ExitCode.VALIDATION_ERROR, `No spaces found in team "${selectedTeam.getDisplayName()}". Please create a space in the ByteRover dashboard first.`);
|
|
139
|
+
}
|
|
140
|
+
// Prompt for space selection
|
|
141
|
+
this.log();
|
|
142
|
+
const selectedSpace = await this.promptForSpaceSelection(spaceResult.spaces);
|
|
143
|
+
// Prompt for agent selection
|
|
144
|
+
this.log();
|
|
145
|
+
const selectedAgent = await this.promptForAgentSelection();
|
|
146
|
+
this.log();
|
|
147
|
+
const { chatLogPath, cwd } = this.detectWorkspacesForAgent(selectedAgent);
|
|
148
|
+
// Update configuration
|
|
149
|
+
const newConfig = BrvConfig.fromSpace({
|
|
150
|
+
chatLogPath,
|
|
151
|
+
cwd,
|
|
152
|
+
ide: selectedAgent,
|
|
153
|
+
space: selectedSpace,
|
|
154
|
+
});
|
|
155
|
+
await projectConfigStore.write(newConfig);
|
|
156
|
+
// Display success
|
|
157
|
+
this.log(`\n✓ Successfully switched to space: ${selectedSpace.getDisplayName()}`);
|
|
158
|
+
this.log(`✓ Configuration updated in: ${BRV_DIR}/${PROJECT_CONFIG_FILE}`);
|
|
110
159
|
}
|
|
111
160
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Command } from '@oclif/core';
|
|
2
|
-
import type {
|
|
2
|
+
import type { IContextTreeService } from '../core/interfaces/i-context-tree-service.js';
|
|
3
|
+
import type { IContextTreeSnapshotService } from '../core/interfaces/i-context-tree-snapshot-service.js';
|
|
3
4
|
import type { IProjectConfigStore } from '../core/interfaces/i-project-config-store.js';
|
|
4
5
|
import type { ITokenStore } from '../core/interfaces/i-token-store.js';
|
|
5
6
|
import { ITrackingService } from '../core/interfaces/i-tracking-service.js';
|
|
@@ -12,8 +13,10 @@ export default class Status extends Command {
|
|
|
12
13
|
static flags: {
|
|
13
14
|
format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
15
|
};
|
|
16
|
+
catch(error: Error): Promise<void>;
|
|
15
17
|
protected createServices(): {
|
|
16
|
-
|
|
18
|
+
contextTreeService: IContextTreeService;
|
|
19
|
+
contextTreeSnapshotService: IContextTreeSnapshotService;
|
|
17
20
|
projectConfigStore: IProjectConfigStore;
|
|
18
21
|
tokenStore: ITokenStore;
|
|
19
22
|
trackingService: ITrackingService;
|
package/dist/commands/status.js
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import { Args, Command, Flags } from '@oclif/core';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { BRV_DIR, CONTEXT_TREE_DIR } from '../constants.js';
|
|
5
5
|
import { ProjectConfigStore } from '../infra/config/file-config-store.js';
|
|
6
|
+
import { FileContextTreeService } from '../infra/context-tree/file-context-tree-service.js';
|
|
7
|
+
import { FileContextTreeSnapshotService } from '../infra/context-tree/file-context-tree-snapshot-service.js';
|
|
6
8
|
import { KeychainTokenStore } from '../infra/storage/keychain-token-store.js';
|
|
7
9
|
import { MixpanelTrackingService } from '../infra/tracking/mixpanel-tracking-service.js';
|
|
10
|
+
import { getErrorMessage } from '../utils/error-helpers.js';
|
|
8
11
|
export default class Status extends Command {
|
|
9
12
|
static args = {
|
|
10
13
|
directory: Args.string({ description: 'Project directory (defaults to current directory)', required: false }),
|
|
11
14
|
};
|
|
12
|
-
static description = 'Show CLI status and project information. Display local
|
|
15
|
+
static description = 'Show CLI status and project information. Display local context tree managed by ByteRover CLI';
|
|
13
16
|
static examples = [
|
|
14
17
|
'<%= config.bin %> <%= command.id %>',
|
|
15
18
|
'# Check status after login:\n<%= config.bin %> login\n<%= config.bin %> <%= command.id %>',
|
|
@@ -26,19 +29,25 @@ export default class Status extends Command {
|
|
|
26
29
|
options: ['table', 'json'],
|
|
27
30
|
}),
|
|
28
31
|
};
|
|
32
|
+
// Override catch to prevent oclif from displaying errors again
|
|
33
|
+
async catch(error) {
|
|
34
|
+
// Status command should always succeed and just show status
|
|
35
|
+
// Any errors are already handled and logged in run()
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
29
38
|
createServices() {
|
|
30
39
|
const tokenStore = new KeychainTokenStore();
|
|
31
40
|
const trackingService = new MixpanelTrackingService(tokenStore);
|
|
32
41
|
return {
|
|
33
|
-
|
|
42
|
+
contextTreeService: new FileContextTreeService(),
|
|
43
|
+
contextTreeSnapshotService: new FileContextTreeSnapshotService(),
|
|
34
44
|
projectConfigStore: new ProjectConfigStore(),
|
|
35
45
|
tokenStore,
|
|
36
46
|
trackingService,
|
|
37
47
|
};
|
|
38
48
|
}
|
|
39
49
|
async run() {
|
|
40
|
-
const {
|
|
41
|
-
const { args, flags } = await this.parse(Status);
|
|
50
|
+
const { contextTreeService, contextTreeSnapshotService, projectConfigStore, tokenStore } = this.createServices();
|
|
42
51
|
this.log(`CLI Version: ${this.config.version}`);
|
|
43
52
|
try {
|
|
44
53
|
const token = await tokenStore.load();
|
|
@@ -54,7 +63,7 @@ export default class Status extends Command {
|
|
|
54
63
|
}
|
|
55
64
|
catch (error) {
|
|
56
65
|
this.log('Status: Unable to check authentication status');
|
|
57
|
-
this.warn(`Warning: ${error
|
|
66
|
+
this.warn(`Warning: ${getErrorMessage(error)}`);
|
|
58
67
|
}
|
|
59
68
|
const cwd = process.cwd();
|
|
60
69
|
this.log(`Current Directory: ${cwd}`);
|
|
@@ -75,41 +84,42 @@ export default class Status extends Command {
|
|
|
75
84
|
}
|
|
76
85
|
catch (error) {
|
|
77
86
|
this.log('Project Status: Unable to read project configuration');
|
|
78
|
-
this.warn(`Warning: ${error
|
|
87
|
+
this.warn(`Warning: ${getErrorMessage(error)}`);
|
|
79
88
|
}
|
|
89
|
+
// Context tree status
|
|
80
90
|
try {
|
|
81
|
-
const
|
|
82
|
-
if (!
|
|
83
|
-
this.
|
|
91
|
+
const contextTreeExists = await contextTreeService.exists();
|
|
92
|
+
if (!contextTreeExists) {
|
|
93
|
+
this.log('Context Tree: Not initialized');
|
|
94
|
+
return;
|
|
84
95
|
}
|
|
85
|
-
|
|
86
|
-
if (
|
|
87
|
-
|
|
96
|
+
const hasSnapshot = await contextTreeSnapshotService.hasSnapshot();
|
|
97
|
+
// Auto-create empty snapshot if none exists (all files will show as "added")
|
|
98
|
+
if (!hasSnapshot) {
|
|
99
|
+
await contextTreeSnapshotService.initEmptySnapshot();
|
|
88
100
|
}
|
|
89
|
-
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
this.log('Playbook is empty. Use "brv add" commands to add knowledge.');
|
|
101
|
+
const changes = await contextTreeSnapshotService.getChanges();
|
|
102
|
+
const hasChanges = changes.added.length > 0 || changes.modified.length > 0 || changes.deleted.length > 0;
|
|
103
|
+
if (!hasChanges) {
|
|
104
|
+
this.log('Context Tree: No changes');
|
|
94
105
|
return;
|
|
95
106
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}
|
|
107
|
+
const contextTreeRelPath = join(BRV_DIR, CONTEXT_TREE_DIR);
|
|
108
|
+
const formatPath = (file) => join(contextTreeRelPath, file);
|
|
109
|
+
// Build unified list with status, sort by path ascending
|
|
110
|
+
const allChanges = [
|
|
111
|
+
...changes.modified.map((f) => ({ color: chalk.red, path: f, status: 'modified:' })),
|
|
112
|
+
...changes.added.map((f) => ({ color: chalk.red, path: f, status: 'new file:' })),
|
|
113
|
+
...changes.deleted.map((f) => ({ color: chalk.red, path: f, status: 'deleted:' })),
|
|
114
|
+
].sort((a, b) => a.path.localeCompare(b.path));
|
|
115
|
+
this.log('Context Tree Changes:');
|
|
116
|
+
for (const change of allChanges) {
|
|
117
|
+
this.log(`\t${change.color(`${change.status.padEnd(10)} ${formatPath(change.path)}`)}`);
|
|
108
118
|
}
|
|
109
|
-
this.log(`\nUse "brv push" to push playbook to ByteRover memory storage.`);
|
|
110
119
|
}
|
|
111
120
|
catch (error) {
|
|
112
|
-
this.
|
|
121
|
+
this.log('Context Tree: Unable to check status');
|
|
122
|
+
this.warn(`Warning: ${error instanceof Error ? error.message : 'Context Tree unable to check status'}`);
|
|
113
123
|
}
|
|
114
124
|
}
|
|
115
125
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
import type { IFileWatcherService } from '../core/interfaces/i-file-watcher-service.js';
|
|
3
|
+
import type { IProjectConfigStore } from '../core/interfaces/i-project-config-store.js';
|
|
4
|
+
export default class Watch extends Command {
|
|
5
|
+
static description: string;
|
|
6
|
+
static examples: string[];
|
|
7
|
+
static flags: {
|
|
8
|
+
clean: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
debounce: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
paths: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
};
|
|
12
|
+
static hidden: boolean;
|
|
13
|
+
private lastParseTime;
|
|
14
|
+
private parsingInProgress;
|
|
15
|
+
private pendingParse;
|
|
16
|
+
protected createServices(): {
|
|
17
|
+
fileWatcherService: IFileWatcherService;
|
|
18
|
+
projectConfigStore: IProjectConfigStore;
|
|
19
|
+
};
|
|
20
|
+
run(): Promise<void>;
|
|
21
|
+
protected waitForShutdownSignal(): Promise<void>;
|
|
22
|
+
private triggerParsing;
|
|
23
|
+
}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { Command, Flags } from '@oclif/core';
|
|
2
|
+
import { isDevelopment } from '../config/environment.js';
|
|
3
|
+
import { ProjectConfigStore } from '../infra/config/file-config-store.js';
|
|
4
|
+
import { CleanParserServiceFactory } from '../infra/parsers/clean/clean-parser-service-factory.js';
|
|
5
|
+
import { RawParserServiceFactory } from '../infra/parsers/raw/raw-parser-service-factory.js';
|
|
6
|
+
import { FileWatcherService } from '../infra/watcher/file-watcher-service.js';
|
|
7
|
+
export default class Watch extends Command {
|
|
8
|
+
static description = 'Watch file system directories for changes and trigger parsing pipeline [Development only]';
|
|
9
|
+
static examples = [
|
|
10
|
+
'<%= config.bin %> <%= command.id %> --paths ./agent-logs',
|
|
11
|
+
'<%= config.bin %> <%= command.id %> --paths ./logs,./outputs,./workspace',
|
|
12
|
+
'<%= config.bin %> <%= command.id %> -p ./src,./lib',
|
|
13
|
+
'# Use chat log path from config (if IDE was configured during init):',
|
|
14
|
+
'<%= config.bin %> <%= command.id %>',
|
|
15
|
+
];
|
|
16
|
+
static flags = {
|
|
17
|
+
clean: Flags.boolean({
|
|
18
|
+
allowNo: true,
|
|
19
|
+
default: true,
|
|
20
|
+
description: 'Run clean parsing after raw parsing (default: true)',
|
|
21
|
+
}),
|
|
22
|
+
debounce: Flags.integer({
|
|
23
|
+
default: 2000,
|
|
24
|
+
description: 'Debounce time in milliseconds before triggering parsing (default: 2000)',
|
|
25
|
+
}),
|
|
26
|
+
paths: Flags.string({
|
|
27
|
+
char: 'p',
|
|
28
|
+
description: 'Comma-separated list of directories to watch (defaults to configured chat log path)',
|
|
29
|
+
required: false,
|
|
30
|
+
}),
|
|
31
|
+
};
|
|
32
|
+
static hidden = !isDevelopment();
|
|
33
|
+
lastParseTime = 0;
|
|
34
|
+
parsingInProgress = false;
|
|
35
|
+
pendingParse = false;
|
|
36
|
+
createServices() {
|
|
37
|
+
return {
|
|
38
|
+
fileWatcherService: new FileWatcherService(),
|
|
39
|
+
projectConfigStore: new ProjectConfigStore(),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
async run() {
|
|
43
|
+
if (!isDevelopment()) {
|
|
44
|
+
this.error('This command is only available in development environment');
|
|
45
|
+
}
|
|
46
|
+
const { flags } = await this.parse(Watch);
|
|
47
|
+
const { fileWatcherService, projectConfigStore } = this.createServices();
|
|
48
|
+
let paths = [];
|
|
49
|
+
let ideConfig = null;
|
|
50
|
+
// Use explicit paths if provided
|
|
51
|
+
if (flags.paths) {
|
|
52
|
+
paths = flags.paths.split(',').map((p) => p.trim());
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
// Try to load chat log path from config
|
|
56
|
+
try {
|
|
57
|
+
const configExists = await projectConfigStore.exists();
|
|
58
|
+
if (configExists) {
|
|
59
|
+
const config = await projectConfigStore.read();
|
|
60
|
+
if (config?.chatLogPath && config?.ide) {
|
|
61
|
+
paths = [config.chatLogPath];
|
|
62
|
+
ideConfig = config.ide;
|
|
63
|
+
this.log(`ℹ Using chat log path from config (${config.ide})`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// Silently ignore config loading errors
|
|
69
|
+
}
|
|
70
|
+
if (paths.length === 0) {
|
|
71
|
+
this.error('No paths specified. Either:\n' +
|
|
72
|
+
' 1. Use --paths flag: brv watch --paths ./logs,./outputs\n' +
|
|
73
|
+
' 2. Run "brv init" to configure IDE and detect workspaces');
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
// Set up file event handler with parsing pipeline
|
|
78
|
+
fileWatcherService.setFileEventHandler(async (event) => {
|
|
79
|
+
this.log(`[${event.type}] ${event.path}`);
|
|
80
|
+
// Only trigger parsing if IDE is configured
|
|
81
|
+
if (ideConfig && (event.type === 'add' || event.type === 'change' || event.type === 'unlink')) {
|
|
82
|
+
this.pendingParse = true;
|
|
83
|
+
// Debounce parsing to avoid too frequent triggers
|
|
84
|
+
if (!this.parsingInProgress && Date.now() - this.lastParseTime > flags.debounce) {
|
|
85
|
+
this.triggerParsing(ideConfig, paths[0]).catch((error) => {
|
|
86
|
+
this.warn(`⚠️ Parsing error: ${error instanceof Error ? error.message : String(error)}`);
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
await fileWatcherService.start(paths);
|
|
92
|
+
this.log(`\n🔍 Watching paths: ${paths.join(', ')}`);
|
|
93
|
+
if (ideConfig) {
|
|
94
|
+
this.log(`📊 Parsing pipeline enabled for: ${ideConfig}`);
|
|
95
|
+
}
|
|
96
|
+
this.log('Press Ctrl+C to stop...\n');
|
|
97
|
+
await this.waitForShutdownSignal();
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
this.error(error instanceof Error ? error.message : 'Unknown Error');
|
|
101
|
+
}
|
|
102
|
+
finally {
|
|
103
|
+
await fileWatcherService.stop();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
async waitForShutdownSignal() {
|
|
107
|
+
return new Promise((resolve) => {
|
|
108
|
+
const handleSignal = () => {
|
|
109
|
+
this.log('\nShutting down watcher...');
|
|
110
|
+
process.off('SIGINT', handleSignal);
|
|
111
|
+
process.off('SIGTERM', handleSignal);
|
|
112
|
+
resolve();
|
|
113
|
+
};
|
|
114
|
+
process.on('SIGINT', handleSignal);
|
|
115
|
+
process.on('SIGTERM', handleSignal);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
async triggerParsing(ide, chatLogPath) {
|
|
119
|
+
if (this.parsingInProgress) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
this.parsingInProgress = true;
|
|
123
|
+
this.pendingParse = false;
|
|
124
|
+
this.lastParseTime = Date.now();
|
|
125
|
+
try {
|
|
126
|
+
// Normalize IDE name for factory
|
|
127
|
+
// Validate IDE is supported
|
|
128
|
+
if (!RawParserServiceFactory.isSupported(ide)) {
|
|
129
|
+
this.warn(`⚠️ Unsupported IDE: ${ide}`);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
this.log('\n📥 Parsing triggered...');
|
|
133
|
+
// Raw parsing phase
|
|
134
|
+
let isRawSuccess = false;
|
|
135
|
+
try {
|
|
136
|
+
// Cast is safe because we already validated with isSupported()
|
|
137
|
+
isRawSuccess = await RawParserServiceFactory.parseConversations(ide, chatLogPath);
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
this.warn(`⚠️ Raw parsing error: ${error instanceof Error ? error.message : String(error)}`);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
// Clean parsing phase (if enabled)
|
|
144
|
+
const { flags } = await this.parse(Watch);
|
|
145
|
+
if (isRawSuccess && flags.clean) {
|
|
146
|
+
try {
|
|
147
|
+
const rawOutputDir = `${process.cwd()}/.brv/logs/${ide}/raw`;
|
|
148
|
+
const cleanSessions = await CleanParserServiceFactory.parseConversations(ide, rawOutputDir);
|
|
149
|
+
if (cleanSessions.length > 0) {
|
|
150
|
+
this.log('✅ Clean parsing complete\n');
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
this.warn('⚠️ Clean parsing failed');
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
this.warn(`⚠️ Clean parsing error: ${error instanceof Error ? error.message : String(error)}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
finally {
|
|
162
|
+
this.parsingInProgress = false;
|
|
163
|
+
// If more files were added while parsing, queue another parse
|
|
164
|
+
if (this.pendingParse) {
|
|
165
|
+
this.triggerParsing(ide, chatLogPath).catch((error) => {
|
|
166
|
+
this.warn(`⚠️ Parsing error: ${error instanceof Error ? error.message : String(error)}`);
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
@@ -23,8 +23,20 @@ export const getAuthConfig = async (discoveryService) => {
|
|
|
23
23
|
// Fallback to hardcoded environment-specific URLs
|
|
24
24
|
authorizationUrl = envConfig.authorizationUrl;
|
|
25
25
|
tokenUrl = envConfig.tokenUrl;
|
|
26
|
-
// Warn user about fallback
|
|
27
|
-
|
|
26
|
+
// Warn user about fallback with user-friendly error message
|
|
27
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
28
|
+
const isNetworkError = errorMessage.includes('ENOTFOUND') ||
|
|
29
|
+
errorMessage.includes('ECONNREFUSED') ||
|
|
30
|
+
errorMessage.includes('ETIMEDOUT') ||
|
|
31
|
+
errorMessage.includes('getaddrinfo') ||
|
|
32
|
+
errorMessage.includes('network');
|
|
33
|
+
if (isNetworkError) {
|
|
34
|
+
// Throw error and let command handle exit
|
|
35
|
+
throw new Error('❌ Network error: Unable to connect to ByteRover servers. Please check your internet connection and try again.');
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
console.warn(`Warning: OIDC discovery failed, using fallback URLs for ${ENVIRONMENT} environment.`, errorMessage);
|
|
39
|
+
}
|
|
28
40
|
}
|
|
29
41
|
return {
|
|
30
42
|
authorizationUrl,
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain configurations for the context tree structure.
|
|
3
|
+
* Each domain represents a specific area of knowledge in the project.
|
|
4
|
+
*/
|
|
5
|
+
export interface DomainConfig {
|
|
6
|
+
description: string;
|
|
7
|
+
name: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Predefined domains that will be scaffolded during project initialization.
|
|
11
|
+
*/
|
|
12
|
+
export declare const CONTEXT_TREE_DOMAINS: DomainConfig[];
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Predefined domains that will be scaffolded during project initialization.
|
|
3
|
+
*/
|
|
4
|
+
export const CONTEXT_TREE_DOMAINS = [
|
|
5
|
+
{
|
|
6
|
+
description: 'Ensure all code follows style guidelines and quality standards',
|
|
7
|
+
name: 'code_style',
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
description: 'UI libraries, themes, and design guidelines',
|
|
11
|
+
name: 'design',
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
description: 'Project structure, components, and related context',
|
|
15
|
+
name: 'structure',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
description: 'Security and compliance information',
|
|
19
|
+
name: 'compliance',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
description: 'Testing implementation context',
|
|
23
|
+
name: 'testing',
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
description: 'Bug fixing logic and procedures',
|
|
27
|
+
name: 'bug_fixes',
|
|
28
|
+
},
|
|
29
|
+
];
|
|
@@ -17,6 +17,7 @@ type EnvironmentConfig = {
|
|
|
17
17
|
clientId: string;
|
|
18
18
|
cogitApiBaseUrl: string;
|
|
19
19
|
issuerUrl: string;
|
|
20
|
+
llmGrpcEndpoint: string;
|
|
20
21
|
memoraApiBaseUrl: string;
|
|
21
22
|
mixpanelToken: string;
|
|
22
23
|
scopes: string[];
|
|
@@ -33,4 +34,9 @@ export declare const ENV_CONFIG: Record<Environment, EnvironmentConfig>;
|
|
|
33
34
|
* @returns The environment configuration.
|
|
34
35
|
*/
|
|
35
36
|
export declare const getCurrentConfig: () => EnvironmentConfig;
|
|
37
|
+
/**
|
|
38
|
+
* Check if the current environment is development.
|
|
39
|
+
* @returns True if in development mode, false otherwise.
|
|
40
|
+
*/
|
|
41
|
+
export declare const isDevelopment: () => boolean;
|
|
36
42
|
export {};
|