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
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook to handle command not found errors
|
|
3
|
+
* Provides helpful error messages when users type invalid commands or subcommands
|
|
4
|
+
*/
|
|
5
|
+
const hook = async function (options) {
|
|
6
|
+
const { id } = options;
|
|
7
|
+
// Check if it's a cipher-agent subcommand typo
|
|
8
|
+
if (id?.startsWith('cipher-agent:')) {
|
|
9
|
+
const invalidSubcommand = id.replace('cipher-agent:', '');
|
|
10
|
+
this.log();
|
|
11
|
+
this.log(`Unknown cipher-agent command: "${invalidSubcommand}"`);
|
|
12
|
+
this.log();
|
|
13
|
+
this.log('USAGE');
|
|
14
|
+
this.log(' $ brv cipher-agent COMMAND');
|
|
15
|
+
this.log();
|
|
16
|
+
this.log('COMMANDS');
|
|
17
|
+
this.log(' cipher-agent run Run CipherAgent in interactive or single-execution mode');
|
|
18
|
+
this.log(' cipher-agent set-prompt Set custom system prompt for CipherAgent');
|
|
19
|
+
this.log(' cipher-agent show-prompt Show the current CipherAgent system prompt');
|
|
20
|
+
this.log();
|
|
21
|
+
// Exit with error code
|
|
22
|
+
this.exit(1);
|
|
23
|
+
}
|
|
24
|
+
// Default error message for other commands
|
|
25
|
+
this.log();
|
|
26
|
+
this.log(`Command "${id}" not found`);
|
|
27
|
+
this.log();
|
|
28
|
+
this.log('Run "brv --help" to see available commands');
|
|
29
|
+
this.log();
|
|
30
|
+
this.exit(1);
|
|
31
|
+
};
|
|
32
|
+
export default hook;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook to handle errors and provide clean error messages
|
|
3
|
+
* Hides stack traces for user-facing errors
|
|
4
|
+
*/
|
|
5
|
+
const hook = async function (options) {
|
|
6
|
+
const { error } = options;
|
|
7
|
+
// Type guard for Error objects
|
|
8
|
+
if (!(error instanceof Error)) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
// Suppress oclif's default error output (stack traces)
|
|
12
|
+
// Type assertion needed to delete dynamic property
|
|
13
|
+
delete error.oclif;
|
|
14
|
+
// Handle validation errors (missing args, invalid flags, etc.)
|
|
15
|
+
if (error.message.includes('Missing') && error.message.includes('required arg')) {
|
|
16
|
+
// Extract the clean error message without stack trace
|
|
17
|
+
const lines = error.message.split('\n');
|
|
18
|
+
const errorLine = lines[0];
|
|
19
|
+
const argLine = lines[1];
|
|
20
|
+
// Use process.stderr.write to avoid oclif formatting (no › prefix)
|
|
21
|
+
process.stderr.write('\n');
|
|
22
|
+
process.stderr.write(errorLine + '\n');
|
|
23
|
+
if (argLine) {
|
|
24
|
+
process.stderr.write(argLine + '\n');
|
|
25
|
+
}
|
|
26
|
+
process.stderr.write('\n');
|
|
27
|
+
process.stderr.write('See more help with --help\n');
|
|
28
|
+
process.stderr.write('\n');
|
|
29
|
+
// Prevent default error handling
|
|
30
|
+
this.exit(2);
|
|
31
|
+
}
|
|
32
|
+
// For user-facing errors (network, auth, etc.), show clean message only
|
|
33
|
+
// Check if error is already formatted with emoji prefix (❌, ⚠️, etc.)
|
|
34
|
+
const isUserFacingError = error.message.startsWith('❌') || error.message.startsWith('⚠️') || error.message.includes('Network error');
|
|
35
|
+
if (isUserFacingError) {
|
|
36
|
+
// Just show the clean error message, no "See more help"
|
|
37
|
+
process.stderr.write('\n');
|
|
38
|
+
process.stderr.write(error.message + '\n');
|
|
39
|
+
process.stderr.write('\n');
|
|
40
|
+
this.exit(1);
|
|
41
|
+
}
|
|
42
|
+
// For other errors (unknown errors), show message + help hint
|
|
43
|
+
process.stderr.write('\n');
|
|
44
|
+
process.stderr.write(error.message + '\n');
|
|
45
|
+
process.stderr.write('\n');
|
|
46
|
+
process.stderr.write('See more help with --help\n');
|
|
47
|
+
process.stderr.write('\n');
|
|
48
|
+
this.exit(1);
|
|
49
|
+
};
|
|
50
|
+
export default hook;
|
|
@@ -1,6 +1,72 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import { DOCS_URL } from '../../constants.js';
|
|
3
|
+
/**
|
|
4
|
+
* Validates Node.js version compatibility
|
|
5
|
+
* @returns Error message if incompatible, warning message if untested, null if compatible
|
|
6
|
+
*/
|
|
7
|
+
function checkNodeVersion() {
|
|
8
|
+
const nodeVersion = process.version;
|
|
9
|
+
const versionMatch = nodeVersion.match(/^v(\d+)\.(\d+)\.(\d+)/);
|
|
10
|
+
if (!versionMatch) {
|
|
11
|
+
return {
|
|
12
|
+
message: `Unable to determine Node.js version. Current version: ${nodeVersion}`,
|
|
13
|
+
type: 'warning',
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
const [, major, minor] = versionMatch;
|
|
17
|
+
const majorVersion = Number.parseInt(major, 10);
|
|
18
|
+
const minorVersion = Number.parseInt(minor, 10);
|
|
19
|
+
// Minimum supported version: Node 18
|
|
20
|
+
if (majorVersion < 18) {
|
|
21
|
+
return {
|
|
22
|
+
message: `Node.js ${majorVersion}.${minorVersion} is not supported.\n` +
|
|
23
|
+
'ByteRover CLI requires Node.js 18 or higher.\n' +
|
|
24
|
+
`Current version: ${nodeVersion}\n\n` +
|
|
25
|
+
'Please upgrade Node.js:\n' +
|
|
26
|
+
' - Using nvm: nvm install 22 && nvm use 22\n' +
|
|
27
|
+
' - Download from: https://nodejs.org/',
|
|
28
|
+
type: 'error',
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
// Recommended versions: Node 18, 20, 22
|
|
32
|
+
// Node 24+ may have compatibility issues with native modules (better-sqlite3, grpc)
|
|
33
|
+
if (majorVersion >= 24) {
|
|
34
|
+
return {
|
|
35
|
+
message: `Node.js ${majorVersion}.${minorVersion} has not been fully tested with ByteRover CLI.\n` +
|
|
36
|
+
`Current version: ${nodeVersion}\n` +
|
|
37
|
+
'Recommended versions: Node.js 18.x, 20.x, or 22.x (LTS)\n\n' +
|
|
38
|
+
'Some native dependencies (sqlite, grpc) may not work correctly.\n' +
|
|
39
|
+
'If you encounter errors, please switch to a recommended version:\n' +
|
|
40
|
+
' - Using nvm: nvm install 22 && nvm use 22',
|
|
41
|
+
type: 'warning',
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
// All checks passed
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
3
47
|
const hook = async function (options) {
|
|
48
|
+
// Check Node.js version compatibility first
|
|
49
|
+
const versionCheck = checkNodeVersion();
|
|
50
|
+
if (versionCheck) {
|
|
51
|
+
if (versionCheck.type === 'error') {
|
|
52
|
+
// Critical error - incompatible Node version
|
|
53
|
+
// Use process.stderr to show clean error without stack trace
|
|
54
|
+
process.stderr.write('\n');
|
|
55
|
+
process.stderr.write(chalk.red('❌ Incompatible Node.js version\n\n'));
|
|
56
|
+
process.stderr.write(versionCheck.message);
|
|
57
|
+
process.stderr.write('\n\n');
|
|
58
|
+
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
else if (versionCheck.type === 'warning') {
|
|
62
|
+
// Warning - untested version, but allow to continue
|
|
63
|
+
// Use process.stderr to show clean warning without stack trace
|
|
64
|
+
process.stderr.write('\n');
|
|
65
|
+
process.stderr.write(chalk.yellow('⚠️ Node.js version warning\n\n'));
|
|
66
|
+
process.stderr.write(chalk.yellow(versionCheck.message));
|
|
67
|
+
process.stderr.write('\n\n');
|
|
68
|
+
}
|
|
69
|
+
}
|
|
4
70
|
// Detect root help commands only (not command-specific help)
|
|
5
71
|
const isRootHelp = (options.id === undefined && options.argv.length === 0) || // bare `brv`
|
|
6
72
|
(options.id === '--help' && options.argv.length === 0) || // `brv --help`
|
|
@@ -22,7 +88,12 @@ const hook = async function (options) {
|
|
|
22
88
|
' 2. Link your workspace:',
|
|
23
89
|
' brv init',
|
|
24
90
|
'',
|
|
25
|
-
'After setup, run `brv status` to confirm connection
|
|
91
|
+
'After setup, run `brv status` to confirm your connection.',
|
|
92
|
+
'',
|
|
93
|
+
' Explore commands:',
|
|
94
|
+
' • `brv curate` - Organize and curate your context tree',
|
|
95
|
+
' • `brv query` - Search and query your context tree',
|
|
96
|
+
' • `brv push` - Push your context tree to ByteRover',
|
|
26
97
|
].join('\n');
|
|
27
98
|
const docsLink = `For more information, run 'brv --help', 'brv [command] --help' or visit ${DOCS_URL}`;
|
|
28
99
|
this.log(`\n${logo}\n\n${onboardingText}\n\n${docsLink}\n\n`);
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Hook } from '@oclif/core';
|
|
2
|
+
import type { IProjectConfigStore } from '../../core/interfaces/i-project-config-store.js';
|
|
3
|
+
/**
|
|
4
|
+
* Commands that should skip config version validation.
|
|
5
|
+
* These commands either don't need config or create/recreate it.
|
|
6
|
+
*/
|
|
7
|
+
export declare const SKIP_COMMANDS: Set<string>;
|
|
8
|
+
/**
|
|
9
|
+
* Context for hook error handling.
|
|
10
|
+
*/
|
|
11
|
+
type HookErrorContext = {
|
|
12
|
+
error: (message: string, options: {
|
|
13
|
+
exit: number;
|
|
14
|
+
}) => void;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Core validation logic extracted for testability.
|
|
18
|
+
* @param commandId - The command being executed
|
|
19
|
+
* @param configStore - The config store to use for reading config
|
|
20
|
+
* @param errorContext - Context with error function to call on version errors
|
|
21
|
+
*/
|
|
22
|
+
export declare const validateBrvConfigVersion: (commandId: string, configStore: IProjectConfigStore, errorContext: HookErrorContext) => Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Prerun hook that validates the .brv/config.json version before command execution.
|
|
25
|
+
* Throws an error if the config version is missing or mismatched, prompting users to re-run `brv init`.
|
|
26
|
+
*/
|
|
27
|
+
declare const hook: Hook<'prerun'>;
|
|
28
|
+
export default hook;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { BrvConfigVersionError } from '../../core/domain/errors/brv-config-version-error.js';
|
|
2
|
+
import { ProjectConfigStore } from '../../infra/config/file-config-store.js';
|
|
3
|
+
/**
|
|
4
|
+
* Commands that should skip config version validation.
|
|
5
|
+
* These commands either don't need config or create/recreate it.
|
|
6
|
+
*/
|
|
7
|
+
export const SKIP_COMMANDS = new Set(['--help', 'help', 'init', 'login', 'logout']);
|
|
8
|
+
/**
|
|
9
|
+
* Core validation logic extracted for testability.
|
|
10
|
+
* @param commandId - The command being executed
|
|
11
|
+
* @param configStore - The config store to use for reading config
|
|
12
|
+
* @param errorContext - Context with error function to call on version errors
|
|
13
|
+
*/
|
|
14
|
+
export const validateBrvConfigVersion = async (commandId, configStore, errorContext) => {
|
|
15
|
+
// Skip version check for commands that don't need config
|
|
16
|
+
if (SKIP_COMMANDS.has(commandId)) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
// If config doesn't exist, let the command handle it
|
|
21
|
+
const exists = await configStore.exists();
|
|
22
|
+
if (!exists) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
// read() will throw BrvConfigVersionError if version is invalid
|
|
26
|
+
await configStore.read();
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
if (error instanceof BrvConfigVersionError) {
|
|
30
|
+
errorContext.error(error.message, { exit: 1 });
|
|
31
|
+
}
|
|
32
|
+
// Re-throw other errors (corrupted JSON, etc.)
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Prerun hook that validates the .brv/config.json version before command execution.
|
|
38
|
+
* Throws an error if the config version is missing or mismatched, prompting users to re-run `brv init`.
|
|
39
|
+
*/
|
|
40
|
+
const hook = async function (options) {
|
|
41
|
+
await validateBrvConfigVersion(options.Command.id, new ProjectConfigStore(), this);
|
|
42
|
+
};
|
|
43
|
+
export default hook;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { BlobStorageConfig } from '../../core/domain/cipher/blob/types.js';
|
|
2
|
+
import type { FileSystemConfig } from '../../core/domain/cipher/file-system/types.js';
|
|
3
|
+
import type { CipherAgentServices, SessionServices } from '../../core/interfaces/cipher/cipher-services.js';
|
|
4
|
+
/**
|
|
5
|
+
* LLM configuration for CipherAgent
|
|
6
|
+
*/
|
|
7
|
+
export interface CipherLLMConfig {
|
|
8
|
+
accessToken: string;
|
|
9
|
+
apiKey?: string;
|
|
10
|
+
blobStorageConfig?: Partial<BlobStorageConfig>;
|
|
11
|
+
fileSystemConfig?: Partial<FileSystemConfig>;
|
|
12
|
+
grpcEndpoint: string;
|
|
13
|
+
httpReferer?: string;
|
|
14
|
+
maxIterations?: number;
|
|
15
|
+
maxTokens?: number;
|
|
16
|
+
model: string;
|
|
17
|
+
openRouterApiKey?: string;
|
|
18
|
+
projectId: string;
|
|
19
|
+
region?: string;
|
|
20
|
+
sessionKey: string;
|
|
21
|
+
siteName?: string;
|
|
22
|
+
temperature?: number;
|
|
23
|
+
topK?: number;
|
|
24
|
+
topP?: number;
|
|
25
|
+
verbose?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* gRPC configuration for ByteRover LLM service
|
|
29
|
+
*/
|
|
30
|
+
export interface ByteRoverGrpcConfig {
|
|
31
|
+
accessToken: string;
|
|
32
|
+
grpcEndpoint: string;
|
|
33
|
+
projectId: string;
|
|
34
|
+
region?: string;
|
|
35
|
+
sessionKey: string;
|
|
36
|
+
spaceId: string;
|
|
37
|
+
teamId: string;
|
|
38
|
+
timeout?: number;
|
|
39
|
+
}
|
|
40
|
+
export type { CipherAgentServices, SessionManagerConfig, SessionServices, } from '../../core/interfaces/cipher/cipher-services.js';
|
|
41
|
+
/**
|
|
42
|
+
* Creates shared services for CipherAgent.
|
|
43
|
+
* These services are singletons shared across all sessions.
|
|
44
|
+
*
|
|
45
|
+
* Following Dexto's pattern: shared services are created once at agent level,
|
|
46
|
+
* while session-specific services (LLM, EventBus) are created per session.
|
|
47
|
+
*
|
|
48
|
+
* @param llmConfig - LLM configuration
|
|
49
|
+
* @returns Initialized shared services
|
|
50
|
+
*/
|
|
51
|
+
export declare function createCipherAgentServices(llmConfig: CipherLLMConfig): Promise<CipherAgentServices>;
|
|
52
|
+
/**
|
|
53
|
+
* Creates session-specific services for a ChatSession.
|
|
54
|
+
*
|
|
55
|
+
* Following Dexto's pattern: each session gets its own LLM service and event bus
|
|
56
|
+
* for conversation isolation, while using shared services for tools/prompts.
|
|
57
|
+
*
|
|
58
|
+
* Generator composition order (innermost to outermost):
|
|
59
|
+
* 1. Base generator (ByteRoverContentGenerator or OpenRouterContentGenerator)
|
|
60
|
+
* 2. RetryableContentGenerator - handles transient errors with backoff
|
|
61
|
+
* 3. LoggingContentGenerator - debug logging (if verbose enabled)
|
|
62
|
+
*
|
|
63
|
+
* @param sessionId - Unique session identifier
|
|
64
|
+
* @param sharedServices - Shared services from agent
|
|
65
|
+
* @param grpcConfig - gRPC configuration
|
|
66
|
+
* @param llmConfig - LLM service configuration
|
|
67
|
+
* @param llmConfig.openRouterApiKey - Optional OpenRouter API key for OpenRouter service
|
|
68
|
+
* @param llmConfig.httpReferer - Optional HTTP Referer for OpenRouter rankings
|
|
69
|
+
* @param llmConfig.siteName - Optional site name for OpenRouter rankings
|
|
70
|
+
* @param llmConfig.maxIterations - Maximum iterations for agentic loop
|
|
71
|
+
* @param llmConfig.maxTokens - Maximum output tokens
|
|
72
|
+
* @param llmConfig.model - LLM model identifier
|
|
73
|
+
* @param llmConfig.temperature - Temperature for generation
|
|
74
|
+
* @param llmConfig.verbose - Enable verbose debug output
|
|
75
|
+
* @returns Initialized session services
|
|
76
|
+
*/
|
|
77
|
+
export declare function createSessionServices(sessionId: string, sharedServices: CipherAgentServices, grpcConfig: ByteRoverGrpcConfig, llmConfig: {
|
|
78
|
+
httpReferer?: string;
|
|
79
|
+
maxIterations?: number;
|
|
80
|
+
maxTokens?: number;
|
|
81
|
+
model: string;
|
|
82
|
+
openRouterApiKey?: string;
|
|
83
|
+
siteName?: string;
|
|
84
|
+
temperature?: number;
|
|
85
|
+
verbose?: boolean;
|
|
86
|
+
}): SessionServices;
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { createBlobStorage } from './blob/blob-storage-factory.js';
|
|
3
|
+
import { AgentEventBus, SessionEventBus } from './events/event-emitter.js';
|
|
4
|
+
import { FileSystemService } from './file-system/file-system-service.js';
|
|
5
|
+
import { ByteRoverLlmGrpcService } from './grpc/internal-llm-grpc-service.js';
|
|
6
|
+
import { ByteRoverContentGenerator, LoggingContentGenerator, RetryableContentGenerator } from './llm/generators/index.js';
|
|
7
|
+
import { ByteRoverLLMService } from './llm/internal-llm-service.js';
|
|
8
|
+
import { OpenRouterLLMService } from './llm/openrouter-llm-service.js';
|
|
9
|
+
import { DEFAULT_RETRY_POLICY } from './llm/retry/retry-policy.js';
|
|
10
|
+
import { EventBasedLogger } from './logger/event-based-logger.js';
|
|
11
|
+
import { MemoryManager } from './memory/memory-manager.js';
|
|
12
|
+
import { ProcessService } from './process/process-service.js';
|
|
13
|
+
import { BlobHistoryStorage } from './storage/blob-history-storage.js';
|
|
14
|
+
import { SimplePromptFactory } from './system-prompt/simple-prompt-factory.js';
|
|
15
|
+
import { CoreToolScheduler } from './tools/core-tool-scheduler.js';
|
|
16
|
+
import { DEFAULT_POLICY_RULES } from './tools/default-policy-rules.js';
|
|
17
|
+
import { PolicyEngine } from './tools/policy-engine.js';
|
|
18
|
+
import { ToolManager } from './tools/tool-manager.js';
|
|
19
|
+
import { ToolProvider } from './tools/tool-provider.js';
|
|
20
|
+
/**
|
|
21
|
+
* Creates shared services for CipherAgent.
|
|
22
|
+
* These services are singletons shared across all sessions.
|
|
23
|
+
*
|
|
24
|
+
* Following Dexto's pattern: shared services are created once at agent level,
|
|
25
|
+
* while session-specific services (LLM, EventBus) are created per session.
|
|
26
|
+
*
|
|
27
|
+
* @param llmConfig - LLM configuration
|
|
28
|
+
* @returns Initialized shared services
|
|
29
|
+
*/
|
|
30
|
+
export async function createCipherAgentServices(llmConfig) {
|
|
31
|
+
// 1. Agent event bus (global)
|
|
32
|
+
const agentEventBus = new AgentEventBus();
|
|
33
|
+
// 2. Logger (depends on event bus)
|
|
34
|
+
const logger = new EventBasedLogger(agentEventBus, 'CipherAgent');
|
|
35
|
+
// 3. File system service (no dependencies)
|
|
36
|
+
const fileSystemService = new FileSystemService(llmConfig.fileSystemConfig);
|
|
37
|
+
await fileSystemService.initialize();
|
|
38
|
+
// 4. Process service (no dependencies)
|
|
39
|
+
// Use the same working directory as FileSystemService to ensure consistency
|
|
40
|
+
const workingDirectory = llmConfig.fileSystemConfig?.workingDirectory ?? process.cwd();
|
|
41
|
+
const processService = new ProcessService({
|
|
42
|
+
allowedCommands: [],
|
|
43
|
+
blockedCommands: [],
|
|
44
|
+
environment: {},
|
|
45
|
+
maxConcurrentProcesses: 5,
|
|
46
|
+
maxOutputBuffer: 1_048_576, // 1MB (1024 * 1024)
|
|
47
|
+
maxTimeout: 600_000, // 10 minutes
|
|
48
|
+
securityLevel: 'permissive', // Permissive mode: relies on working directory confinement
|
|
49
|
+
workingDirectory,
|
|
50
|
+
});
|
|
51
|
+
await processService.initialize();
|
|
52
|
+
// 5. Blob storage (no dependencies)
|
|
53
|
+
// Always uses SQLite for performance and ACID transactions
|
|
54
|
+
const blobStorage = createBlobStorage(llmConfig.blobStorageConfig ?? {
|
|
55
|
+
maxBlobSize: 100 * 1024 * 1024, // 100MB
|
|
56
|
+
maxTotalSize: 1024 * 1024 * 1024, // 1GB
|
|
57
|
+
storageDir: join(workingDirectory, '.brv', 'blobs'),
|
|
58
|
+
});
|
|
59
|
+
await blobStorage.initialize();
|
|
60
|
+
// 6. Memory system (depends on BlobStorage, Logger)
|
|
61
|
+
const memoryLogger = logger.withSource('MemoryManager');
|
|
62
|
+
const memoryManager = new MemoryManager(blobStorage, memoryLogger);
|
|
63
|
+
// 7. Simple prompt factory - SHARED across sessions
|
|
64
|
+
// Created early so it can be used by ToolProvider
|
|
65
|
+
const verbose = llmConfig.verbose ?? false;
|
|
66
|
+
const promptFactory = new SimplePromptFactory(undefined, verbose);
|
|
67
|
+
// 8. Tool system (depends on FileSystemService, ProcessService, MemoryManager, PromptFactory)
|
|
68
|
+
const toolProvider = new ToolProvider({
|
|
69
|
+
fileSystemService,
|
|
70
|
+
memoryManager,
|
|
71
|
+
processService,
|
|
72
|
+
}, promptFactory);
|
|
73
|
+
await toolProvider.initialize();
|
|
74
|
+
// 8. Policy engine with default rules for autonomous execution
|
|
75
|
+
const policyEngine = new PolicyEngine({ defaultDecision: 'ALLOW' });
|
|
76
|
+
policyEngine.addRules(DEFAULT_POLICY_RULES);
|
|
77
|
+
// 9. Tool scheduler (orchestrates policy check → execution)
|
|
78
|
+
const toolScheduler = new CoreToolScheduler(toolProvider, policyEngine, undefined, {
|
|
79
|
+
verbose,
|
|
80
|
+
});
|
|
81
|
+
// 10. Tool manager (with scheduler for policy-based execution)
|
|
82
|
+
const toolManager = new ToolManager(toolProvider, toolScheduler);
|
|
83
|
+
await toolManager.initialize();
|
|
84
|
+
// 11. History storage (depends on BlobStorage) - SHARED across sessions
|
|
85
|
+
const historyStorage = new BlobHistoryStorage(blobStorage);
|
|
86
|
+
// Log successful initialization
|
|
87
|
+
logger.info('CipherAgent services initialized successfully', {
|
|
88
|
+
model: llmConfig.model,
|
|
89
|
+
verbose: llmConfig.verbose,
|
|
90
|
+
workingDirectory,
|
|
91
|
+
});
|
|
92
|
+
return {
|
|
93
|
+
agentEventBus,
|
|
94
|
+
blobStorage,
|
|
95
|
+
fileSystemService,
|
|
96
|
+
historyStorage,
|
|
97
|
+
memoryManager,
|
|
98
|
+
policyEngine,
|
|
99
|
+
processService,
|
|
100
|
+
promptFactory,
|
|
101
|
+
toolManager,
|
|
102
|
+
toolProvider,
|
|
103
|
+
toolScheduler,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Creates session-specific services for a ChatSession.
|
|
108
|
+
*
|
|
109
|
+
* Following Dexto's pattern: each session gets its own LLM service and event bus
|
|
110
|
+
* for conversation isolation, while using shared services for tools/prompts.
|
|
111
|
+
*
|
|
112
|
+
* Generator composition order (innermost to outermost):
|
|
113
|
+
* 1. Base generator (ByteRoverContentGenerator or OpenRouterContentGenerator)
|
|
114
|
+
* 2. RetryableContentGenerator - handles transient errors with backoff
|
|
115
|
+
* 3. LoggingContentGenerator - debug logging (if verbose enabled)
|
|
116
|
+
*
|
|
117
|
+
* @param sessionId - Unique session identifier
|
|
118
|
+
* @param sharedServices - Shared services from agent
|
|
119
|
+
* @param grpcConfig - gRPC configuration
|
|
120
|
+
* @param llmConfig - LLM service configuration
|
|
121
|
+
* @param llmConfig.openRouterApiKey - Optional OpenRouter API key for OpenRouter service
|
|
122
|
+
* @param llmConfig.httpReferer - Optional HTTP Referer for OpenRouter rankings
|
|
123
|
+
* @param llmConfig.siteName - Optional site name for OpenRouter rankings
|
|
124
|
+
* @param llmConfig.maxIterations - Maximum iterations for agentic loop
|
|
125
|
+
* @param llmConfig.maxTokens - Maximum output tokens
|
|
126
|
+
* @param llmConfig.model - LLM model identifier
|
|
127
|
+
* @param llmConfig.temperature - Temperature for generation
|
|
128
|
+
* @param llmConfig.verbose - Enable verbose debug output
|
|
129
|
+
* @returns Initialized session services
|
|
130
|
+
*/
|
|
131
|
+
export function createSessionServices(sessionId, sharedServices, grpcConfig, llmConfig) {
|
|
132
|
+
// 1. Create session-specific event bus
|
|
133
|
+
const sessionEventBus = new SessionEventBus();
|
|
134
|
+
// 2. Create session-scoped logger
|
|
135
|
+
const sessionLogger = new EventBasedLogger(sharedServices.agentEventBus, 'LLMService', sessionId);
|
|
136
|
+
// 3. Create LLM service based on configuration
|
|
137
|
+
// Priority: OpenRouter > ByteRover gRPC
|
|
138
|
+
let llmService;
|
|
139
|
+
if (llmConfig.openRouterApiKey) {
|
|
140
|
+
// Use OpenRouter service when OpenRouter API key is provided
|
|
141
|
+
// OpenRouterLLMService still uses old pattern (to be migrated later)
|
|
142
|
+
llmService = new OpenRouterLLMService(sessionId, {
|
|
143
|
+
apiKey: llmConfig.openRouterApiKey,
|
|
144
|
+
httpReferer: llmConfig.httpReferer,
|
|
145
|
+
maxIterations: llmConfig.maxIterations ?? 50,
|
|
146
|
+
maxTokens: llmConfig.maxTokens ?? 8192,
|
|
147
|
+
model: llmConfig.model ?? 'google/gemini-2.5-pro',
|
|
148
|
+
siteName: llmConfig.siteName,
|
|
149
|
+
temperature: llmConfig.temperature ?? 0.7,
|
|
150
|
+
verbose: llmConfig.verbose ?? false,
|
|
151
|
+
}, {
|
|
152
|
+
logger: sessionLogger,
|
|
153
|
+
memoryManager: sharedServices.memoryManager, // SHARED
|
|
154
|
+
sessionEventBus,
|
|
155
|
+
systemPromptManager: sharedServices.promptFactory, // SHARED
|
|
156
|
+
toolManager: sharedServices.toolManager, // SHARED
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
// Use gRPC backend service (default) with new generator pattern
|
|
161
|
+
// Step 1: Create gRPC service
|
|
162
|
+
const grpcService = new ByteRoverLlmGrpcService({
|
|
163
|
+
accessToken: grpcConfig.accessToken,
|
|
164
|
+
grpcEndpoint: grpcConfig.grpcEndpoint,
|
|
165
|
+
projectId: grpcConfig.projectId,
|
|
166
|
+
region: grpcConfig.region,
|
|
167
|
+
sessionKey: grpcConfig.sessionKey,
|
|
168
|
+
spaceId: grpcConfig.spaceId,
|
|
169
|
+
teamId: grpcConfig.teamId,
|
|
170
|
+
timeout: grpcConfig.timeout,
|
|
171
|
+
});
|
|
172
|
+
// Step 2: Create base content generator
|
|
173
|
+
let generator = new ByteRoverContentGenerator(grpcService, {
|
|
174
|
+
maxTokens: llmConfig.maxTokens ?? 8192,
|
|
175
|
+
model: llmConfig.model ?? 'gemini-2.5-pro',
|
|
176
|
+
temperature: llmConfig.temperature ?? 0.7,
|
|
177
|
+
});
|
|
178
|
+
// Step 3: Wrap with retry decorator
|
|
179
|
+
generator = new RetryableContentGenerator(generator, {
|
|
180
|
+
eventBus: sessionEventBus,
|
|
181
|
+
policy: DEFAULT_RETRY_POLICY,
|
|
182
|
+
});
|
|
183
|
+
// Step 4: Wrap with logging decorator (always, for spinner events)
|
|
184
|
+
generator = new LoggingContentGenerator(generator, sessionEventBus, {
|
|
185
|
+
logChunks: llmConfig.verbose,
|
|
186
|
+
logRequests: llmConfig.verbose,
|
|
187
|
+
logResponses: llmConfig.verbose,
|
|
188
|
+
verbose: llmConfig.verbose,
|
|
189
|
+
});
|
|
190
|
+
// Step 5: Create LLM service with composed generator
|
|
191
|
+
llmService = new ByteRoverLLMService(sessionId, generator, {
|
|
192
|
+
maxIterations: llmConfig.maxIterations ?? 50,
|
|
193
|
+
maxTokens: llmConfig.maxTokens ?? 8192,
|
|
194
|
+
model: llmConfig.model ?? 'gemini-2.5-pro',
|
|
195
|
+
temperature: llmConfig.temperature ?? 0.7,
|
|
196
|
+
verbose: llmConfig.verbose ?? false,
|
|
197
|
+
}, {
|
|
198
|
+
historyStorage: sharedServices.historyStorage, // SHARED
|
|
199
|
+
logger: sessionLogger,
|
|
200
|
+
memoryManager: sharedServices.memoryManager, // SHARED
|
|
201
|
+
promptFactory: sharedServices.promptFactory, // SHARED
|
|
202
|
+
sessionEventBus,
|
|
203
|
+
toolManager: sharedServices.toolManager, // SHARED
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
// Event forwarding is handled by ChatSession.setupEventForwarding()
|
|
207
|
+
// to ensure proper cleanup when sessions are disposed
|
|
208
|
+
return {
|
|
209
|
+
llmService,
|
|
210
|
+
sessionEventBus,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { BlobStorageConfig } from '../../../core/domain/cipher/blob/types.js';
|
|
2
|
+
import type { IBlobStorage } from '../../../core/interfaces/cipher/i-blob-storage.js';
|
|
3
|
+
/**
|
|
4
|
+
* Factory function to create blob storage backend.
|
|
5
|
+
* Always uses SQLite for better performance, single file, and ACID transactions.
|
|
6
|
+
*
|
|
7
|
+
* @param config - Blob storage configuration
|
|
8
|
+
* @returns SQLite blob storage implementation
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* const storage = createBlobStorage({ storageDir: '.brv/blobs' });
|
|
12
|
+
*/
|
|
13
|
+
export declare function createBlobStorage(config?: Partial<BlobStorageConfig>): IBlobStorage;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SqliteBlobStorage } from './sqlite-blob-storage.js';
|
|
2
|
+
/**
|
|
3
|
+
* Factory function to create blob storage backend.
|
|
4
|
+
* Always uses SQLite for better performance, single file, and ACID transactions.
|
|
5
|
+
*
|
|
6
|
+
* @param config - Blob storage configuration
|
|
7
|
+
* @returns SQLite blob storage implementation
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* const storage = createBlobStorage({ storageDir: '.brv/blobs' });
|
|
11
|
+
*/
|
|
12
|
+
export function createBlobStorage(config) {
|
|
13
|
+
return new SqliteBlobStorage(config);
|
|
14
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Blob storage module
|
|
3
|
+
* Provides persistent storage for binary/large data blobs using SQLite
|
|
4
|
+
*/
|
|
5
|
+
export type { BlobMetadata, BlobStats, BlobStorageConfig, StoredBlob } from '../../../core/domain/cipher/blob/types.js';
|
|
6
|
+
export { BlobError, BlobErrorCode } from '../../../core/domain/cipher/errors/blob-error.js';
|
|
7
|
+
export type { IBlobStorage } from '../../../core/interfaces/cipher/i-blob-storage.js';
|
|
8
|
+
export { createBlobStorage } from './blob-storage-factory.js';
|
|
9
|
+
export * as BlobMigrations from './migrations.js';
|
|
10
|
+
export { SqliteBlobStorage } from './sqlite-blob-storage.js';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Blob storage module
|
|
3
|
+
* Provides persistent storage for binary/large data blobs using SQLite
|
|
4
|
+
*/
|
|
5
|
+
// Re-export errors from core
|
|
6
|
+
export { BlobError, BlobErrorCode } from '../../../core/domain/cipher/errors/blob-error.js';
|
|
7
|
+
// Factory (always returns SQLite implementation)
|
|
8
|
+
export { createBlobStorage } from './blob-storage-factory.js';
|
|
9
|
+
// Migration system
|
|
10
|
+
export * as BlobMigrations from './migrations.js';
|
|
11
|
+
// SQLite storage implementation
|
|
12
|
+
export { SqliteBlobStorage } from './sqlite-blob-storage.js';
|