byterover-cli 0.2.1 → 0.3.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 +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 +63 -3
- package/dist/commands/init.js +285 -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,5 +1,5 @@
|
|
|
1
1
|
import { confirm, search } from '@inquirer/prompts';
|
|
2
|
-
import { Command } from '@oclif/core';
|
|
2
|
+
import { Command, Flags } from '@oclif/core';
|
|
3
3
|
import { AGENT_VALUES } from '../core/domain/entities/agent.js';
|
|
4
4
|
import { RuleExistsError } from '../core/domain/errors/rule-error.js';
|
|
5
5
|
import { FsFileService } from '../infra/file/fs-file-service.js';
|
|
@@ -19,6 +19,12 @@ const AGENTS = AGENT_VALUES.map((agent) => ({
|
|
|
19
19
|
export default class GenRules extends Command {
|
|
20
20
|
static description = 'Generate rule instructions for coding agents to work with ByteRover correctly';
|
|
21
21
|
static examples = ['<%= config.bin %> <%= command.id %>'];
|
|
22
|
+
static flags = {
|
|
23
|
+
agent: Flags.string({
|
|
24
|
+
char: 'a',
|
|
25
|
+
description: 'Agent to generate rules for (optional, will prompt if not provided)',
|
|
26
|
+
}),
|
|
27
|
+
};
|
|
22
28
|
createServices() {
|
|
23
29
|
const fileService = new FsFileService();
|
|
24
30
|
const templateLoader = new FsTemplateLoader(fileService);
|
|
@@ -58,32 +64,45 @@ export default class GenRules extends Command {
|
|
|
58
64
|
});
|
|
59
65
|
}
|
|
60
66
|
async run() {
|
|
67
|
+
const { flags } = await this.parse(GenRules);
|
|
61
68
|
const { ruleWriterService, trackingService } = this.createServices();
|
|
62
|
-
// Track rule generation
|
|
63
|
-
await trackingService.track('rule:generate');
|
|
64
|
-
// Interactive selection with search
|
|
65
|
-
const answer = await this.promptForAgentSelection();
|
|
66
|
-
this.log(`Generating rules for: ${answer}`);
|
|
67
69
|
try {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
70
|
+
// Track rule generation
|
|
71
|
+
await trackingService.track('rule:generate');
|
|
72
|
+
// Use provided agent or prompt for selection
|
|
73
|
+
const answer = flags.agent ? flags.agent : await this.promptForAgentSelection();
|
|
74
|
+
this.log(`Generating rules for: ${answer}`);
|
|
75
|
+
try {
|
|
76
|
+
await ruleWriterService.writeRule(answer, false);
|
|
77
|
+
this.log(`✅ Successfully generated rule file for ${answer}`);
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
if (error instanceof RuleExistsError) {
|
|
81
|
+
const overwrite = await this.promptForOverwriteConfirmation(answer);
|
|
82
|
+
if (overwrite) {
|
|
83
|
+
// Retry with forced=true
|
|
84
|
+
await ruleWriterService.writeRule(answer, true);
|
|
85
|
+
this.log(`✅ Successfully generated rule file for ${answer}`);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
this.log(`Skipping rule file generation for ${answer}`);
|
|
89
|
+
}
|
|
78
90
|
}
|
|
79
91
|
else {
|
|
80
|
-
|
|
92
|
+
// Non-recoverable error - throw to let oclif handle display
|
|
93
|
+
this.error(`Failed to generate rule file: ${error instanceof Error ? error.message : String(error)}`);
|
|
81
94
|
}
|
|
82
95
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
// Handle user cancelling any prompt (Ctrl+C or closing stdin)
|
|
99
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
100
|
+
if (errorMessage.includes('User force closed') || errorMessage.includes('force closed')) {
|
|
101
|
+
this.log('Cancelled.');
|
|
102
|
+
return;
|
|
86
103
|
}
|
|
104
|
+
// For other errors, throw to let oclif handle display
|
|
105
|
+
this.error(error instanceof Error ? error.message : 'An error occurred');
|
|
87
106
|
}
|
|
88
107
|
}
|
|
89
108
|
}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -1,30 +1,90 @@
|
|
|
1
1
|
import { Command } from '@oclif/core';
|
|
2
|
+
import type { AuthToken } from '../core/domain/entities/auth-token.js';
|
|
2
3
|
import type { Space } from '../core/domain/entities/space.js';
|
|
3
4
|
import type { Team } from '../core/domain/entities/team.js';
|
|
4
|
-
import type {
|
|
5
|
+
import type { ICogitPullService } from '../core/interfaces/i-cogit-pull-service.js';
|
|
6
|
+
import type { IContextTreeService } from '../core/interfaces/i-context-tree-service.js';
|
|
7
|
+
import type { IContextTreeSnapshotService } from '../core/interfaces/i-context-tree-snapshot-service.js';
|
|
8
|
+
import type { IContextTreeWriterService } from '../core/interfaces/i-context-tree-writer-service.js';
|
|
5
9
|
import type { IProjectConfigStore } from '../core/interfaces/i-project-config-store.js';
|
|
10
|
+
import type { IRuleWriterService } from '../core/interfaces/i-rule-writer-service.js';
|
|
6
11
|
import type { ISpaceService } from '../core/interfaces/i-space-service.js';
|
|
7
12
|
import type { ITeamService } from '../core/interfaces/i-team-service.js';
|
|
8
13
|
import type { ITokenStore } from '../core/interfaces/i-token-store.js';
|
|
14
|
+
import { type Agent } from '../core/domain/entities/agent.js';
|
|
9
15
|
import { BrvConfig } from '../core/domain/entities/brv-config.js';
|
|
10
16
|
import { ITrackingService } from '../core/interfaces/i-tracking-service.js';
|
|
17
|
+
/**
|
|
18
|
+
* Represents a legacy config that exists but has version issues.
|
|
19
|
+
* Used to display config info during re-initialization prompt.
|
|
20
|
+
*/
|
|
21
|
+
export type LegacyProjectConfigInfo = {
|
|
22
|
+
/**
|
|
23
|
+
* undefined = missing, string = mismatched
|
|
24
|
+
*/
|
|
25
|
+
currentVersion: string | undefined;
|
|
26
|
+
spaceName: string;
|
|
27
|
+
teamName: string;
|
|
28
|
+
type: 'legacy';
|
|
29
|
+
};
|
|
11
30
|
export default class Init extends Command {
|
|
12
31
|
static description: string;
|
|
13
32
|
static examples: string[];
|
|
14
33
|
static flags: {
|
|
15
34
|
force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
16
35
|
};
|
|
36
|
+
protected aceDirectoryExists(baseDir?: string): Promise<boolean>;
|
|
17
37
|
protected cleanupBeforeReInitialization(): Promise<void>;
|
|
18
|
-
protected confirmReInitialization(config: BrvConfig): Promise<boolean>;
|
|
38
|
+
protected confirmReInitialization(config: BrvConfig | LegacyProjectConfigInfo): Promise<boolean>;
|
|
19
39
|
protected createServices(): {
|
|
20
|
-
|
|
40
|
+
cogitPullService: ICogitPullService;
|
|
41
|
+
contextTreeService: IContextTreeService;
|
|
42
|
+
contextTreeSnapshotService: IContextTreeSnapshotService;
|
|
43
|
+
contextTreeWriterService: IContextTreeWriterService;
|
|
21
44
|
projectConfigStore: IProjectConfigStore;
|
|
45
|
+
ruleWriterService: IRuleWriterService;
|
|
22
46
|
spaceService: ISpaceService;
|
|
23
47
|
teamService: ITeamService;
|
|
24
48
|
tokenStore: ITokenStore;
|
|
25
49
|
trackingService: ITrackingService;
|
|
26
50
|
};
|
|
51
|
+
protected detectWorkspacesForAgent(agent: Agent): {
|
|
52
|
+
chatLogPath: string;
|
|
53
|
+
cwd: string;
|
|
54
|
+
};
|
|
55
|
+
protected ensureAuthenticated(tokenStore: ITokenStore): Promise<AuthToken>;
|
|
56
|
+
protected fetchAndSelectSpace(spaceService: ISpaceService, token: AuthToken, team: Team): Promise<Space | undefined>;
|
|
57
|
+
protected fetchAndSelectTeam(teamService: ITeamService, token: AuthToken): Promise<Team | undefined>;
|
|
58
|
+
protected generateRulesForAgent(ruleWriterService: IRuleWriterService, agent: Agent): Promise<void>;
|
|
59
|
+
protected getExistingConfig(projectConfigStore: IProjectConfigStore): Promise<BrvConfig | LegacyProjectConfigInfo | undefined>;
|
|
60
|
+
protected initializeMemoryContextDir(name: string, initFn: () => Promise<string>): Promise<void>;
|
|
61
|
+
protected isLegacyProjectConfig(config: BrvConfig | LegacyProjectConfigInfo): config is LegacyProjectConfigInfo;
|
|
62
|
+
protected promptAceDeprecationRemoval(): Promise<boolean>;
|
|
63
|
+
/**
|
|
64
|
+
* Prompts the user to select an agent.
|
|
65
|
+
* This method is protected to allow test overrides.
|
|
66
|
+
* @returns The selected agent
|
|
67
|
+
*/
|
|
68
|
+
protected promptForAgentSelection(): Promise<Agent>;
|
|
69
|
+
/**
|
|
70
|
+
* Prompts the user to confirm overwriting an existing rule file.
|
|
71
|
+
* This method is protected to allow test overrides.
|
|
72
|
+
*/
|
|
73
|
+
protected promptForOverwriteConfirmation(agent: Agent): Promise<boolean>;
|
|
27
74
|
protected promptForSpaceSelection(spaces: Space[]): Promise<Space>;
|
|
28
75
|
protected promptForTeamSelection(teams: Team[]): Promise<Team>;
|
|
76
|
+
protected removeAceDirectory(baseDir?: string): Promise<void>;
|
|
29
77
|
run(): Promise<void>;
|
|
78
|
+
protected syncFromRemoteOrInitialize(params: {
|
|
79
|
+
cogitPullService: ICogitPullService;
|
|
80
|
+
contextTreeService: IContextTreeService;
|
|
81
|
+
contextTreeSnapshotService: IContextTreeSnapshotService;
|
|
82
|
+
contextTreeWriterService: IContextTreeWriterService;
|
|
83
|
+
projectConfig: {
|
|
84
|
+
spaceId: string;
|
|
85
|
+
teamId: string;
|
|
86
|
+
};
|
|
87
|
+
token: AuthToken;
|
|
88
|
+
}): Promise<void>;
|
|
89
|
+
private logSuccess;
|
|
30
90
|
}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,18 +1,29 @@
|
|
|
1
|
-
import { confirm, select } from '@inquirer/prompts';
|
|
1
|
+
import { confirm, search, select } from '@inquirer/prompts';
|
|
2
2
|
import { Command, Flags, ux } from '@oclif/core';
|
|
3
|
-
import { rm } from 'node:fs/promises';
|
|
3
|
+
import { access, readFile, rm } from 'node:fs/promises';
|
|
4
4
|
import { join } from 'node:path';
|
|
5
5
|
import { getCurrentConfig } from '../config/environment.js';
|
|
6
|
-
import { BRV_DIR, PROJECT_CONFIG_FILE } from '../constants.js';
|
|
6
|
+
import { ACE_DIR, BRV_CONFIG_VERSION, BRV_DIR, DEFAULT_BRANCH, PROJECT_CONFIG_FILE } from '../constants.js';
|
|
7
|
+
import { AGENT_VALUES } from '../core/domain/entities/agent.js';
|
|
7
8
|
import { BrvConfig } from '../core/domain/entities/brv-config.js';
|
|
9
|
+
import { BrvConfigVersionError } from '../core/domain/errors/brv-config-version-error.js';
|
|
10
|
+
import { RuleExistsError } from '../core/domain/errors/rule-error.js';
|
|
11
|
+
import { HttpCogitPullService } from '../infra/cogit/http-cogit-pull-service.js';
|
|
8
12
|
import { ProjectConfigStore } from '../infra/config/file-config-store.js';
|
|
9
|
-
import {
|
|
13
|
+
import { FileContextTreeService } from '../infra/context-tree/file-context-tree-service.js';
|
|
14
|
+
import { FileContextTreeSnapshotService } from '../infra/context-tree/file-context-tree-snapshot-service.js';
|
|
15
|
+
import { FileContextTreeWriterService } from '../infra/context-tree/file-context-tree-writer-service.js';
|
|
16
|
+
import { FsFileService } from '../infra/file/fs-file-service.js';
|
|
17
|
+
import { RuleTemplateService } from '../infra/rule/rule-template-service.js';
|
|
18
|
+
import { RuleWriterService } from '../infra/rule/rule-writer-service.js';
|
|
10
19
|
import { HttpSpaceService } from '../infra/space/http-space-service.js';
|
|
11
20
|
import { KeychainTokenStore } from '../infra/storage/keychain-token-store.js';
|
|
12
21
|
import { HttpTeamService } from '../infra/team/http-team-service.js';
|
|
22
|
+
import { FsTemplateLoader } from '../infra/template/fs-template-loader.js';
|
|
13
23
|
import { MixpanelTrackingService } from '../infra/tracking/mixpanel-tracking-service.js';
|
|
24
|
+
import { WorkspaceDetectorService } from '../infra/workspace/workspace-detector-service.js';
|
|
14
25
|
export default class Init extends Command {
|
|
15
|
-
static description = `Initialize a project with ByteRover (creates ${BRV_DIR}/${PROJECT_CONFIG_FILE} with team/space selection and initializes
|
|
26
|
+
static description = `Initialize a project with ByteRover (creates ${BRV_DIR}/${PROJECT_CONFIG_FILE} with team/space selection and initializes Context Tree)`;
|
|
16
27
|
static examples = [
|
|
17
28
|
'<%= config.bin %> <%= command.id %>',
|
|
18
29
|
'# Re-initialize if config exists (will show current config and exit):\n<%= config.bin %> <%= command.id %>',
|
|
@@ -25,6 +36,17 @@ export default class Init extends Command {
|
|
|
25
36
|
description: 'Force re-initialization without confirmation prompt',
|
|
26
37
|
}),
|
|
27
38
|
};
|
|
39
|
+
async aceDirectoryExists(baseDir) {
|
|
40
|
+
const dir = baseDir ?? process.cwd();
|
|
41
|
+
const acePath = join(dir, BRV_DIR, ACE_DIR);
|
|
42
|
+
try {
|
|
43
|
+
await access(acePath);
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
28
50
|
async cleanupBeforeReInitialization() {
|
|
29
51
|
const brvDir = join(process.cwd(), BRV_DIR);
|
|
30
52
|
this.log('\n Cleaning up existing ByteRover directory...');
|
|
@@ -35,18 +57,24 @@ export default class Init extends Command {
|
|
|
35
57
|
}
|
|
36
58
|
catch (error) {
|
|
37
59
|
ux.action.stop('✗');
|
|
38
|
-
|
|
60
|
+
throw new Error(`Failed to remove ${BRV_DIR}/: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
39
61
|
}
|
|
40
62
|
}
|
|
41
63
|
async confirmReInitialization(config) {
|
|
42
|
-
this.
|
|
64
|
+
if (this.isLegacyProjectConfig(config)) {
|
|
65
|
+
const versionStatus = config.currentVersion === undefined ? 'missing' : `${config.currentVersion} → ${BRV_CONFIG_VERSION}`;
|
|
66
|
+
this.log(`\n⚠️ Project has an outdated configuration (version: ${versionStatus})`);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
this.log('\n Project is already initialized');
|
|
70
|
+
}
|
|
43
71
|
this.log(` Team: ${config.teamName}`);
|
|
44
72
|
this.log(` Space: ${config.spaceName}`);
|
|
45
73
|
this.log(` Config: ${join(process.cwd(), BRV_DIR, PROJECT_CONFIG_FILE)}`);
|
|
46
74
|
this.log('\n Re-initializing will:');
|
|
47
75
|
this.log(` - Remove the entire ${BRV_DIR}/ directory and all its contents`);
|
|
48
76
|
this.log(' - Allow you to select a new team/space');
|
|
49
|
-
this.log(' - Create a fresh configuration and
|
|
77
|
+
this.log(' - Create a fresh configuration and Context Tree');
|
|
50
78
|
this.log(' - Regenerate rule instructions\n');
|
|
51
79
|
return confirm({
|
|
52
80
|
default: false,
|
|
@@ -57,9 +85,19 @@ export default class Init extends Command {
|
|
|
57
85
|
const envConfig = getCurrentConfig();
|
|
58
86
|
const tokenStore = new KeychainTokenStore();
|
|
59
87
|
const trackingService = new MixpanelTrackingService(tokenStore);
|
|
88
|
+
const fileService = new FsFileService();
|
|
89
|
+
const templateLoader = new FsTemplateLoader(fileService);
|
|
90
|
+
const ruleTemplateService = new RuleTemplateService(templateLoader);
|
|
91
|
+
const contextTreeSnapshotService = new FileContextTreeSnapshotService();
|
|
60
92
|
return {
|
|
61
|
-
|
|
93
|
+
cogitPullService: new HttpCogitPullService({
|
|
94
|
+
apiBaseUrl: envConfig.cogitApiBaseUrl,
|
|
95
|
+
}),
|
|
96
|
+
contextTreeService: new FileContextTreeService(),
|
|
97
|
+
contextTreeSnapshotService,
|
|
98
|
+
contextTreeWriterService: new FileContextTreeWriterService({ snapshotService: contextTreeSnapshotService }),
|
|
62
99
|
projectConfigStore: new ProjectConfigStore(),
|
|
100
|
+
ruleWriterService: new RuleWriterService(fileService, ruleTemplateService),
|
|
63
101
|
spaceService: new HttpSpaceService({
|
|
64
102
|
apiBaseUrl: envConfig.apiBaseUrl,
|
|
65
103
|
}),
|
|
@@ -70,6 +108,155 @@ export default class Init extends Command {
|
|
|
70
108
|
trackingService,
|
|
71
109
|
};
|
|
72
110
|
}
|
|
111
|
+
detectWorkspacesForAgent(agent) {
|
|
112
|
+
const detector = new WorkspaceDetectorService();
|
|
113
|
+
const result = detector.detectWorkspaces(agent);
|
|
114
|
+
return {
|
|
115
|
+
chatLogPath: result.chatLogPath,
|
|
116
|
+
cwd: result.cwd,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
async ensureAuthenticated(tokenStore) {
|
|
120
|
+
const token = await tokenStore.load();
|
|
121
|
+
if (token === undefined) {
|
|
122
|
+
this.error('Not authenticated. Please run "brv login" first.');
|
|
123
|
+
}
|
|
124
|
+
if (!token.isValid()) {
|
|
125
|
+
this.error('Authentication token expired. Please run "brv login" again.');
|
|
126
|
+
}
|
|
127
|
+
return token;
|
|
128
|
+
}
|
|
129
|
+
async fetchAndSelectSpace(spaceService, token, team) {
|
|
130
|
+
ux.action.start('\nFetching all spaces');
|
|
131
|
+
const { spaces } = await spaceService.getSpaces(token.accessToken, token.sessionKey, team.id, { fetchAll: true });
|
|
132
|
+
ux.action.stop();
|
|
133
|
+
if (spaces.length === 0) {
|
|
134
|
+
this.log(`No spaces found in team "${team.getDisplayName()}"`);
|
|
135
|
+
this.log(`Please visit ${getCurrentConfig().webAppUrl} to create your first space for ${team.getDisplayName()}.`);
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
138
|
+
this.log();
|
|
139
|
+
return this.promptForSpaceSelection(spaces);
|
|
140
|
+
}
|
|
141
|
+
async fetchAndSelectTeam(teamService, token) {
|
|
142
|
+
ux.action.start('Fetching all teams');
|
|
143
|
+
const { teams } = await teamService.getTeams(token.accessToken, token.sessionKey, { fetchAll: true });
|
|
144
|
+
ux.action.stop();
|
|
145
|
+
if (teams.length === 0) {
|
|
146
|
+
this.log('No teams found.');
|
|
147
|
+
this.log(`Please visit ${getCurrentConfig().webAppUrl} to create your first team.`);
|
|
148
|
+
return undefined;
|
|
149
|
+
}
|
|
150
|
+
this.log();
|
|
151
|
+
return this.promptForTeamSelection(teams);
|
|
152
|
+
}
|
|
153
|
+
async generateRulesForAgent(ruleWriterService, agent) {
|
|
154
|
+
this.log(`Generating rules for: ${agent}`);
|
|
155
|
+
try {
|
|
156
|
+
await ruleWriterService.writeRule(agent, false);
|
|
157
|
+
this.log(`✅ Successfully generated rule file for ${agent}`);
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
if (error instanceof RuleExistsError) {
|
|
161
|
+
const overwrite = await this.promptForOverwriteConfirmation(agent);
|
|
162
|
+
if (overwrite) {
|
|
163
|
+
await ruleWriterService.writeRule(agent, true);
|
|
164
|
+
this.log(`✅ Successfully generated rule file for ${agent}`);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
this.log(`Skipping rule file generation for ${agent}`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
throw error;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
async getExistingConfig(projectConfigStore) {
|
|
176
|
+
const exists = await projectConfigStore.exists();
|
|
177
|
+
if (!exists)
|
|
178
|
+
return undefined;
|
|
179
|
+
try {
|
|
180
|
+
const projectConfig = await projectConfigStore.read();
|
|
181
|
+
if (projectConfig === undefined) {
|
|
182
|
+
throw new Error('Configuration file exists but cannot be read. Please check .brv/config.json');
|
|
183
|
+
}
|
|
184
|
+
return projectConfig;
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
if (error instanceof BrvConfigVersionError) {
|
|
188
|
+
// Legacy/outdated config - read raw JSON for display info
|
|
189
|
+
const configPath = join(process.cwd(), BRV_DIR, PROJECT_CONFIG_FILE);
|
|
190
|
+
const content = await readFile(configPath, 'utf8');
|
|
191
|
+
// As type assertion here since rawJson is default to any/unknown anyway
|
|
192
|
+
const rawJson = JSON.parse(content);
|
|
193
|
+
return {
|
|
194
|
+
currentVersion: error.currentVersion,
|
|
195
|
+
spaceName: typeof rawJson.spaceName === 'string' ? rawJson.spaceName : 'Unknown',
|
|
196
|
+
teamName: typeof rawJson.teamName === 'string' ? rawJson.teamName : 'Unknown',
|
|
197
|
+
type: 'legacy',
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
// Re-throw other errors
|
|
201
|
+
throw error;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
async initializeMemoryContextDir(name, initFn) {
|
|
205
|
+
this.log(`\nInitializing ${name}...`);
|
|
206
|
+
try {
|
|
207
|
+
const path = await initFn();
|
|
208
|
+
this.log(`✓ ${name} initialized in ${path}`);
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
this.warn(`${name} initialization skipped: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
isLegacyProjectConfig(config) {
|
|
215
|
+
return 'type' in config && config.type === 'legacy';
|
|
216
|
+
}
|
|
217
|
+
async promptAceDeprecationRemoval() {
|
|
218
|
+
this.log('\n The ACE system is being deprecated.');
|
|
219
|
+
this.log(' ByteRover is migrating to the new Context Tree system for improved');
|
|
220
|
+
this.log(' memory organization and retrieval.');
|
|
221
|
+
this.log('');
|
|
222
|
+
this.log(' We detected an existing ACE folder at .brv/ace/');
|
|
223
|
+
this.log(' This folder and all its contents can be safely removed.\n');
|
|
224
|
+
return confirm({
|
|
225
|
+
default: true,
|
|
226
|
+
message: 'Remove the ACE folder and its contents?',
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Prompts the user to select an agent.
|
|
231
|
+
* This method is protected to allow test overrides.
|
|
232
|
+
* @returns The selected agent
|
|
233
|
+
*/
|
|
234
|
+
async promptForAgentSelection() {
|
|
235
|
+
const AGENTS = AGENT_VALUES.map((agent) => ({
|
|
236
|
+
name: agent,
|
|
237
|
+
value: agent,
|
|
238
|
+
}));
|
|
239
|
+
const answer = await search({
|
|
240
|
+
message: 'Which agent you are using (type to search):',
|
|
241
|
+
async source(input) {
|
|
242
|
+
if (!input)
|
|
243
|
+
return AGENTS;
|
|
244
|
+
return AGENTS.filter((agent) => agent.name.toLowerCase().includes(input.toLowerCase()) ||
|
|
245
|
+
agent.value.toLowerCase().includes(input.toLowerCase()));
|
|
246
|
+
},
|
|
247
|
+
});
|
|
248
|
+
return answer;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Prompts the user to confirm overwriting an existing rule file.
|
|
252
|
+
* This method is protected to allow test overrides.
|
|
253
|
+
*/
|
|
254
|
+
async promptForOverwriteConfirmation(agent) {
|
|
255
|
+
return confirm({
|
|
256
|
+
default: true,
|
|
257
|
+
message: `Rule file already exists for ${agent}. Overwrite?`,
|
|
258
|
+
});
|
|
259
|
+
}
|
|
73
260
|
async promptForSpaceSelection(spaces) {
|
|
74
261
|
const selectedSpaceId = await select({
|
|
75
262
|
choices: spaces.map((space) => ({
|
|
@@ -98,84 +285,112 @@ export default class Init extends Command {
|
|
|
98
285
|
}
|
|
99
286
|
return selectedTeam;
|
|
100
287
|
}
|
|
288
|
+
async removeAceDirectory(baseDir) {
|
|
289
|
+
const dir = baseDir ?? process.cwd();
|
|
290
|
+
const acePath = join(dir, BRV_DIR, ACE_DIR);
|
|
291
|
+
await rm(acePath, { force: true, recursive: true });
|
|
292
|
+
}
|
|
101
293
|
async run() {
|
|
102
|
-
const { flags } = await this.parse(Init);
|
|
103
294
|
try {
|
|
104
|
-
const {
|
|
105
|
-
const
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
if (!flags.force) {
|
|
112
|
-
const confirmed = await this.confirmReInitialization(currentConfig);
|
|
113
|
-
if (!confirmed) {
|
|
114
|
-
this.log('\nCancelled. Project configuration unchanged.');
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
try {
|
|
295
|
+
const { flags } = await this.parse(Init);
|
|
296
|
+
const { cogitPullService, contextTreeService, contextTreeSnapshotService, contextTreeWriterService, projectConfigStore, ruleWriterService, spaceService, teamService, tokenStore, trackingService, } = this.createServices();
|
|
297
|
+
const authToken = await this.ensureAuthenticated(tokenStore);
|
|
298
|
+
const existingConfig = await this.getExistingConfig(projectConfigStore);
|
|
299
|
+
if (existingConfig) {
|
|
300
|
+
const shouldCleanup = flags.force ? true : await this.confirmReInitialization(existingConfig);
|
|
301
|
+
if (shouldCleanup) {
|
|
119
302
|
await this.cleanupBeforeReInitialization();
|
|
303
|
+
this.log('\n');
|
|
120
304
|
}
|
|
121
|
-
|
|
122
|
-
this.
|
|
305
|
+
else {
|
|
306
|
+
this.log('\nCancelled. Project configuration unchanged.');
|
|
307
|
+
return;
|
|
123
308
|
}
|
|
124
|
-
this.log('\n'); // Spacing before continuing with init flow
|
|
125
309
|
}
|
|
126
310
|
this.log('Initializing ByteRover project...\n');
|
|
127
|
-
const
|
|
128
|
-
if (
|
|
129
|
-
this.error('Not authenticated. Please run "brv login" first.');
|
|
130
|
-
}
|
|
131
|
-
if (!token.isValid()) {
|
|
132
|
-
this.error('Authentication token expired. Please run "brv login" again.');
|
|
133
|
-
}
|
|
134
|
-
ux.action.start('Fetching all teams');
|
|
135
|
-
const teamResult = await teamService.getTeams(token.accessToken, token.sessionKey, { fetchAll: true });
|
|
136
|
-
ux.action.stop();
|
|
137
|
-
const { teams } = teamResult;
|
|
138
|
-
if (teams.length === 0) {
|
|
139
|
-
this.log('No teams found.');
|
|
140
|
-
this.log(`Please visit ${getCurrentConfig().webAppUrl} to create your first team.`);
|
|
311
|
+
const selectedTeam = await this.fetchAndSelectTeam(teamService, authToken);
|
|
312
|
+
if (!selectedTeam)
|
|
141
313
|
return;
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
const selectedTeam = await this.promptForTeamSelection(teams);
|
|
145
|
-
ux.action.start('Fetching all spaces');
|
|
146
|
-
const spaceResult = await spaceService.getSpaces(token.accessToken, token.sessionKey, selectedTeam.id, {
|
|
147
|
-
fetchAll: true,
|
|
148
|
-
});
|
|
149
|
-
ux.action.stop();
|
|
150
|
-
const { spaces } = spaceResult;
|
|
151
|
-
if (spaces.length === 0) {
|
|
152
|
-
this.log(`No spaces found in team "${selectedTeam.getDisplayName()}"`);
|
|
153
|
-
this.log(`Please visit ${getCurrentConfig().webAppUrl} to create your first space for ${selectedTeam.getDisplayName()}.`);
|
|
314
|
+
const selectedSpace = await this.fetchAndSelectSpace(spaceService, authToken, selectedTeam);
|
|
315
|
+
if (!selectedSpace)
|
|
154
316
|
return;
|
|
317
|
+
// Handle ACE deprecation - check for existing ACE folder and offer removal
|
|
318
|
+
const aceExists = await this.aceDirectoryExists();
|
|
319
|
+
if (aceExists) {
|
|
320
|
+
const shouldRemoveAce = await this.promptAceDeprecationRemoval();
|
|
321
|
+
if (shouldRemoveAce) {
|
|
322
|
+
await this.removeAceDirectory();
|
|
323
|
+
this.log('✓ ACE folder removed');
|
|
324
|
+
}
|
|
155
325
|
}
|
|
326
|
+
// Sync from remote or initialize context tree with templates
|
|
327
|
+
await this.syncFromRemoteOrInitialize({
|
|
328
|
+
cogitPullService,
|
|
329
|
+
contextTreeService,
|
|
330
|
+
contextTreeSnapshotService,
|
|
331
|
+
contextTreeWriterService,
|
|
332
|
+
projectConfig: { spaceId: selectedSpace.id, teamId: selectedTeam.id },
|
|
333
|
+
token: authToken,
|
|
334
|
+
});
|
|
156
335
|
this.log();
|
|
157
|
-
const
|
|
158
|
-
|
|
336
|
+
const selectedAgent = await this.promptForAgentSelection();
|
|
337
|
+
this.log('Detecting workspaces...');
|
|
338
|
+
const { chatLogPath, cwd } = this.detectWorkspacesForAgent(selectedAgent);
|
|
339
|
+
this.log(`✓ Detected workspace: ${cwd}`);
|
|
340
|
+
const config = BrvConfig.fromSpace({
|
|
341
|
+
chatLogPath,
|
|
342
|
+
cwd,
|
|
343
|
+
ide: selectedAgent,
|
|
344
|
+
space: selectedSpace,
|
|
345
|
+
});
|
|
159
346
|
await projectConfigStore.write(config);
|
|
160
|
-
this.log('\nInitializing ACE context...');
|
|
161
|
-
try {
|
|
162
|
-
const playbookPath = await playbookService.initialize();
|
|
163
|
-
this.log(`✓ ACE playbook initialized in ${playbookPath}`);
|
|
164
|
-
}
|
|
165
|
-
catch (error) {
|
|
166
|
-
// Warn but don't fail if ACE init fails
|
|
167
|
-
this.warn(`ACE initialization skipped: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
168
|
-
}
|
|
169
347
|
this.log(`\nGenerate rule instructions for coding agents to work with ByteRover correctly`);
|
|
170
348
|
this.log();
|
|
171
|
-
await this.
|
|
349
|
+
await this.generateRulesForAgent(ruleWriterService, selectedAgent);
|
|
350
|
+
await trackingService.track('rule:generate');
|
|
172
351
|
await trackingService.track('space:init');
|
|
173
|
-
this.
|
|
174
|
-
this.log(`✓ Connected to space: ${selectedSpace.getDisplayName()}`);
|
|
175
|
-
this.log(`✓ Configuration saved to: ${BRV_DIR}/${PROJECT_CONFIG_FILE}`);
|
|
352
|
+
this.logSuccess(selectedSpace);
|
|
176
353
|
}
|
|
177
354
|
catch (error) {
|
|
178
|
-
this.error(error instanceof Error ? error.message : '
|
|
355
|
+
this.error(`Initialization failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
179
356
|
}
|
|
180
357
|
}
|
|
358
|
+
async syncFromRemoteOrInitialize(params) {
|
|
359
|
+
// Pull from remote - fail if network/API error
|
|
360
|
+
this.log('\nSyncing from ByteRover...');
|
|
361
|
+
try {
|
|
362
|
+
const coGitSnapshot = await params.cogitPullService.pull({
|
|
363
|
+
accessToken: params.token.accessToken,
|
|
364
|
+
branch: DEFAULT_BRANCH,
|
|
365
|
+
sessionKey: params.token.sessionKey,
|
|
366
|
+
spaceId: params.projectConfig.spaceId,
|
|
367
|
+
teamId: params.projectConfig.teamId,
|
|
368
|
+
});
|
|
369
|
+
// Check if space is "empty" (no files, or only README.md placeholder)
|
|
370
|
+
// CoGit follows Git semantics - empty repos have a README.md placeholder
|
|
371
|
+
const isEmptySpace = coGitSnapshot.files.length === 0 ||
|
|
372
|
+
(coGitSnapshot.files.length === 1 && coGitSnapshot.files[0].path === '/README.md');
|
|
373
|
+
if (isEmptySpace) {
|
|
374
|
+
// Remote is empty - ignore placeholder, create templates with empty snapshot
|
|
375
|
+
await this.initializeMemoryContextDir('context tree', () => params.contextTreeService.initialize());
|
|
376
|
+
await params.contextTreeSnapshotService.initEmptySnapshot();
|
|
377
|
+
this.log('✓ Context tree initialized');
|
|
378
|
+
}
|
|
379
|
+
else {
|
|
380
|
+
// Remote has real data - sync it to local
|
|
381
|
+
await params.contextTreeWriterService.sync({ files: [...coGitSnapshot.files] });
|
|
382
|
+
await params.contextTreeSnapshotService.saveSnapshot();
|
|
383
|
+
this.log(`✓ Synced ${coGitSnapshot.files.length} context files from remote`);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
catch (error) {
|
|
387
|
+
throw new Error(`Failed to sync from ByteRover: ${error instanceof Error ? error.message : 'Unknown error'}. Please try again.`);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
logSuccess(space) {
|
|
391
|
+
this.log(`\n✓ Project initialized successfully!`);
|
|
392
|
+
this.log(`✓ Connected to space: ${space.getDisplayName()}`);
|
|
393
|
+
this.log(`✓ Configuration saved to: ${BRV_DIR}/${PROJECT_CONFIG_FILE}`);
|
|
394
|
+
this.log("NOTE: It's recommended to add .brv/ to your .gitignore file since ByteRover already takes care of memory/context versioning for you.");
|
|
395
|
+
}
|
|
181
396
|
}
|
package/dist/commands/login.js
CHANGED
|
@@ -85,15 +85,20 @@ export default class Login extends Command {
|
|
|
85
85
|
this.log('Successfully authenticated!');
|
|
86
86
|
}
|
|
87
87
|
catch (error) {
|
|
88
|
-
|
|
88
|
+
// Throw error to let oclif handle display
|
|
89
|
+
const errorMessage = error instanceof Error ? error.message : 'Authentication failed';
|
|
90
|
+
this.error(errorMessage);
|
|
89
91
|
}
|
|
90
92
|
}
|
|
91
93
|
catch (error) {
|
|
92
94
|
if (error instanceof DiscoveryError) {
|
|
93
|
-
|
|
94
|
-
'Please check your network connection and try again.'
|
|
95
|
+
const errorMessage = `Failed to configure authentication: ${error.message}\n` +
|
|
96
|
+
'Please check your network connection and try again.';
|
|
97
|
+
this.error(errorMessage);
|
|
95
98
|
}
|
|
96
|
-
|
|
99
|
+
// Throw error to let oclif handle display
|
|
100
|
+
const errorMessage = error instanceof Error ? error.message : 'Authentication failed';
|
|
101
|
+
this.error(errorMessage);
|
|
97
102
|
}
|
|
98
103
|
finally {
|
|
99
104
|
// Always cleanup server
|