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
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ByteRover Content Generator.
|
|
3
|
+
*
|
|
4
|
+
* Implements IContentGenerator using ByteRover gRPC service.
|
|
5
|
+
* Supports both Claude and Gemini models through the unified gRPC interface.
|
|
6
|
+
*/
|
|
7
|
+
import { ClaudeMessageFormatter } from '../formatters/claude-formatter.js';
|
|
8
|
+
import { GeminiMessageFormatter } from '../formatters/gemini-formatter.js';
|
|
9
|
+
import { ThinkingConfigManager } from '../thought-parser.js';
|
|
10
|
+
import { ClaudeTokenizer } from '../tokenizers/claude-tokenizer.js';
|
|
11
|
+
import { GeminiTokenizer } from '../tokenizers/gemini-tokenizer.js';
|
|
12
|
+
/**
|
|
13
|
+
* ByteRover Content Generator.
|
|
14
|
+
*
|
|
15
|
+
* Wraps ByteRoverLlmGrpcService and implements IContentGenerator.
|
|
16
|
+
* Handles:
|
|
17
|
+
* - Provider detection (Claude vs Gemini)
|
|
18
|
+
* - Message formatting via provider-specific formatters
|
|
19
|
+
* - Token estimation via provider-specific tokenizers
|
|
20
|
+
* - Response parsing to unified format
|
|
21
|
+
*/
|
|
22
|
+
export class ByteRoverContentGenerator {
|
|
23
|
+
config;
|
|
24
|
+
formatter;
|
|
25
|
+
grpcService;
|
|
26
|
+
providerType;
|
|
27
|
+
tokenizer;
|
|
28
|
+
/**
|
|
29
|
+
* Create a new ByteRover Content Generator.
|
|
30
|
+
*
|
|
31
|
+
* @param grpcService - Configured gRPC service for LLM API calls
|
|
32
|
+
* @param config - Generator configuration
|
|
33
|
+
*/
|
|
34
|
+
constructor(grpcService, config) {
|
|
35
|
+
this.grpcService = grpcService;
|
|
36
|
+
this.config = {
|
|
37
|
+
maxTokens: config.maxTokens ?? 8192,
|
|
38
|
+
model: config.model,
|
|
39
|
+
temperature: config.temperature ?? 0.7,
|
|
40
|
+
thinkingConfig: config.thinkingConfig,
|
|
41
|
+
};
|
|
42
|
+
// Detect provider type from model name
|
|
43
|
+
this.providerType = this.detectProviderType(this.config.model);
|
|
44
|
+
// Initialize formatter and tokenizer based on provider type
|
|
45
|
+
if (this.providerType === 'claude') {
|
|
46
|
+
this.formatter = new ClaudeMessageFormatter();
|
|
47
|
+
this.tokenizer = new ClaudeTokenizer(this.config.model);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
this.formatter = new GeminiMessageFormatter();
|
|
51
|
+
this.tokenizer = new GeminiTokenizer(this.config.model);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Estimate tokens synchronously using character-based approximation.
|
|
56
|
+
*
|
|
57
|
+
* @param content - Text to estimate tokens for
|
|
58
|
+
* @returns Estimated token count
|
|
59
|
+
*/
|
|
60
|
+
estimateTokensSync(content) {
|
|
61
|
+
return this.tokenizer.countTokens(content);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Generate content (non-streaming).
|
|
65
|
+
*
|
|
66
|
+
* @param request - Generation request
|
|
67
|
+
* @returns Generated content response
|
|
68
|
+
*/
|
|
69
|
+
async generateContent(request) {
|
|
70
|
+
// Format messages for provider
|
|
71
|
+
const formattedMessages = this.formatter.format(request.contents);
|
|
72
|
+
// Build generation config
|
|
73
|
+
const genConfig = this.buildGenerationConfig(request.tools ?? {}, request.systemPrompt ?? '', formattedMessages);
|
|
74
|
+
// Call gRPC service
|
|
75
|
+
const contents = this.providerType === 'claude' ? genConfig : formattedMessages;
|
|
76
|
+
const config = this.providerType === 'claude' ? {} : genConfig;
|
|
77
|
+
// Build execution metadata from request
|
|
78
|
+
const executionMetadata = {
|
|
79
|
+
sessionId: request.sessionId,
|
|
80
|
+
...(request.mode && { mode: request.mode }),
|
|
81
|
+
...(request.executionContext && { executionContext: request.executionContext }),
|
|
82
|
+
};
|
|
83
|
+
const rawResponse = await this.grpcService.generateContent(contents, config, this.config.model, executionMetadata);
|
|
84
|
+
// Parse response to internal format
|
|
85
|
+
const messages = this.formatter.parseResponse(rawResponse);
|
|
86
|
+
const lastMessage = messages.at(-1);
|
|
87
|
+
if (!lastMessage) {
|
|
88
|
+
return {
|
|
89
|
+
content: '',
|
|
90
|
+
finishReason: 'error',
|
|
91
|
+
rawResponse,
|
|
92
|
+
toolCalls: [],
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
// Extract content and tool calls
|
|
96
|
+
const content = this.extractTextContent(lastMessage);
|
|
97
|
+
const toolCalls = lastMessage.toolCalls ?? [];
|
|
98
|
+
// Determine finish reason
|
|
99
|
+
let finishReason = 'stop';
|
|
100
|
+
if (toolCalls.length > 0) {
|
|
101
|
+
finishReason = 'tool_calls';
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
content,
|
|
105
|
+
finishReason,
|
|
106
|
+
rawResponse,
|
|
107
|
+
toolCalls,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Generate content with streaming.
|
|
112
|
+
*
|
|
113
|
+
* Note: The current gRPC service collects all chunks before returning.
|
|
114
|
+
* This implementation yields the complete response as a single chunk.
|
|
115
|
+
* True streaming can be implemented when the gRPC service exposes the stream.
|
|
116
|
+
*
|
|
117
|
+
* @param request - Generation request
|
|
118
|
+
* @yields Content chunks as they are generated
|
|
119
|
+
* @returns Async generator yielding content chunks
|
|
120
|
+
*/
|
|
121
|
+
async *generateContentStream(request) {
|
|
122
|
+
// For now, use non-streaming and yield complete response
|
|
123
|
+
// True streaming can be added when gRPC service exposes the stream
|
|
124
|
+
const response = await this.generateContent(request);
|
|
125
|
+
yield {
|
|
126
|
+
content: response.content,
|
|
127
|
+
finishReason: response.finishReason,
|
|
128
|
+
isComplete: true,
|
|
129
|
+
toolCalls: response.toolCalls,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Build Claude-specific generation configuration.
|
|
134
|
+
*/
|
|
135
|
+
buildClaudeConfig(tools, systemPrompt, messages) {
|
|
136
|
+
/* eslint-disable camelcase */
|
|
137
|
+
const claudeTools = Object.entries(tools).map(([name, schema]) => ({
|
|
138
|
+
description: schema.description ?? '',
|
|
139
|
+
input_schema: schema.parameters,
|
|
140
|
+
name,
|
|
141
|
+
}));
|
|
142
|
+
return {
|
|
143
|
+
max_tokens: this.config.maxTokens,
|
|
144
|
+
messages,
|
|
145
|
+
model: this.config.model,
|
|
146
|
+
system: systemPrompt,
|
|
147
|
+
temperature: this.config.temperature,
|
|
148
|
+
...(claudeTools.length > 0 && { tools: claudeTools }),
|
|
149
|
+
};
|
|
150
|
+
/* eslint-enable camelcase */
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Build Gemini-specific generation configuration.
|
|
154
|
+
*/
|
|
155
|
+
buildGeminiConfig(tools, systemPrompt) {
|
|
156
|
+
const toolDefinitions = Object.entries(tools).map(([name, schema]) => ({
|
|
157
|
+
description: schema.description ?? '',
|
|
158
|
+
name,
|
|
159
|
+
parameters: schema.parameters,
|
|
160
|
+
}));
|
|
161
|
+
const baseConfig = {
|
|
162
|
+
maxOutputTokens: this.config.maxTokens,
|
|
163
|
+
temperature: this.config.temperature,
|
|
164
|
+
topP: 1,
|
|
165
|
+
...(systemPrompt && { systemInstruction: { parts: [{ text: systemPrompt }] } }),
|
|
166
|
+
...(toolDefinitions.length > 0 && {
|
|
167
|
+
tools: [
|
|
168
|
+
{
|
|
169
|
+
functionDeclarations: toolDefinitions,
|
|
170
|
+
},
|
|
171
|
+
],
|
|
172
|
+
}),
|
|
173
|
+
};
|
|
174
|
+
// Add thinking configuration for Gemini models
|
|
175
|
+
const thinkingConfig = ThinkingConfigManager.mergeConfig(this.config.model, this.config.thinkingConfig);
|
|
176
|
+
if (thinkingConfig) {
|
|
177
|
+
baseConfig.thinkingConfig = thinkingConfig;
|
|
178
|
+
}
|
|
179
|
+
return baseConfig;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Build generation config for the appropriate provider.
|
|
183
|
+
*/
|
|
184
|
+
buildGenerationConfig(tools, systemPrompt, messages) {
|
|
185
|
+
if (this.providerType === 'claude') {
|
|
186
|
+
return this.buildClaudeConfig(tools, systemPrompt, messages);
|
|
187
|
+
}
|
|
188
|
+
return this.buildGeminiConfig(tools, systemPrompt);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Detect provider type from model name.
|
|
192
|
+
*/
|
|
193
|
+
detectProviderType(model) {
|
|
194
|
+
return model.toLowerCase().startsWith('claude') ? 'claude' : 'gemini';
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Extract text content from an internal message.
|
|
198
|
+
*/
|
|
199
|
+
extractTextContent(message) {
|
|
200
|
+
if (typeof message.content === 'string') {
|
|
201
|
+
return message.content;
|
|
202
|
+
}
|
|
203
|
+
if (Array.isArray(message.content)) {
|
|
204
|
+
return message.content
|
|
205
|
+
.filter((part) => part.type === 'text')
|
|
206
|
+
.map((part) => (part.type === 'text' ? part.text : ''))
|
|
207
|
+
.join('');
|
|
208
|
+
}
|
|
209
|
+
return '';
|
|
210
|
+
}
|
|
211
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content Generator exports.
|
|
3
|
+
*
|
|
4
|
+
* This module provides content generators implementing IContentGenerator:
|
|
5
|
+
* - ByteRoverContentGenerator: Uses ByteRover gRPC service
|
|
6
|
+
* - OpenRouterContentGenerator: Uses OpenRouter API (OpenAI-compatible)
|
|
7
|
+
* - LoggingContentGenerator: Decorator for debug logging
|
|
8
|
+
* - RetryableContentGenerator: Decorator for retry with backoff
|
|
9
|
+
*/
|
|
10
|
+
export { ByteRoverContentGenerator, type ByteRoverContentGeneratorConfig } from './byterover-content-generator.js';
|
|
11
|
+
export { LoggingContentGenerator, type LoggingOptions } from './logging-content-generator.js';
|
|
12
|
+
export { OpenRouterContentGenerator, type OpenRouterContentGeneratorConfig } from './openrouter-content-generator.js';
|
|
13
|
+
export { RetryableContentGenerator, type RetryableOptions } from './retryable-content-generator.js';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content Generator exports.
|
|
3
|
+
*
|
|
4
|
+
* This module provides content generators implementing IContentGenerator:
|
|
5
|
+
* - ByteRoverContentGenerator: Uses ByteRover gRPC service
|
|
6
|
+
* - OpenRouterContentGenerator: Uses OpenRouter API (OpenAI-compatible)
|
|
7
|
+
* - LoggingContentGenerator: Decorator for debug logging
|
|
8
|
+
* - RetryableContentGenerator: Decorator for retry with backoff
|
|
9
|
+
*/
|
|
10
|
+
export { ByteRoverContentGenerator } from './byterover-content-generator.js';
|
|
11
|
+
export { LoggingContentGenerator } from './logging-content-generator.js';
|
|
12
|
+
export { OpenRouterContentGenerator } from './openrouter-content-generator.js';
|
|
13
|
+
export { RetryableContentGenerator } from './retryable-content-generator.js';
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logging Content Generator Decorator.
|
|
3
|
+
*
|
|
4
|
+
* Wraps any IContentGenerator to add debug logging capabilities.
|
|
5
|
+
* Logs request/response metadata, timing, and errors.
|
|
6
|
+
*/
|
|
7
|
+
import type { GenerateContentChunk, GenerateContentRequest, GenerateContentResponse, IContentGenerator } from '../../../../core/interfaces/cipher/i-content-generator.js';
|
|
8
|
+
import type { SessionEventBus } from '../../events/event-emitter.js';
|
|
9
|
+
/**
|
|
10
|
+
* Logging options for the decorator.
|
|
11
|
+
*/
|
|
12
|
+
export interface LoggingOptions {
|
|
13
|
+
/** Log individual streaming chunks */
|
|
14
|
+
logChunks?: boolean;
|
|
15
|
+
/** Log request details */
|
|
16
|
+
logRequests?: boolean;
|
|
17
|
+
/** Log response details */
|
|
18
|
+
logResponses?: boolean;
|
|
19
|
+
/** Enable verbose logging (all options) */
|
|
20
|
+
verbose?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Logging Content Generator.
|
|
24
|
+
*
|
|
25
|
+
* Decorator that wraps any IContentGenerator to add logging capabilities.
|
|
26
|
+
* Useful for debugging, monitoring, and performance analysis.
|
|
27
|
+
*
|
|
28
|
+
* Features:
|
|
29
|
+
* - Request/response logging with configurable verbosity
|
|
30
|
+
* - Timing information for all operations
|
|
31
|
+
* - Error logging with context
|
|
32
|
+
* - Event emission via SessionEventBus
|
|
33
|
+
*/
|
|
34
|
+
export declare class LoggingContentGenerator implements IContentGenerator {
|
|
35
|
+
private readonly eventBus?;
|
|
36
|
+
private readonly inner;
|
|
37
|
+
private readonly options;
|
|
38
|
+
/**
|
|
39
|
+
* Create a new Logging Content Generator.
|
|
40
|
+
*
|
|
41
|
+
* @param inner - The wrapped content generator
|
|
42
|
+
* @param eventBus - Optional event bus for emitting events
|
|
43
|
+
* @param options - Logging options
|
|
44
|
+
*/
|
|
45
|
+
constructor(inner: IContentGenerator, eventBus?: SessionEventBus, options?: LoggingOptions);
|
|
46
|
+
/**
|
|
47
|
+
* Estimate tokens (delegates to inner generator).
|
|
48
|
+
*
|
|
49
|
+
* @param content - Text to estimate tokens for
|
|
50
|
+
* @returns Estimated token count
|
|
51
|
+
*/
|
|
52
|
+
estimateTokensSync(content: string): number;
|
|
53
|
+
/**
|
|
54
|
+
* Generate content with logging.
|
|
55
|
+
*
|
|
56
|
+
* @param request - Generation request
|
|
57
|
+
* @returns Generated content response
|
|
58
|
+
*/
|
|
59
|
+
generateContent(request: GenerateContentRequest): Promise<GenerateContentResponse>;
|
|
60
|
+
/**
|
|
61
|
+
* Generate content with streaming and logging.
|
|
62
|
+
*
|
|
63
|
+
* @param request - Generation request
|
|
64
|
+
* @yields Content chunks as they are generated
|
|
65
|
+
* @returns Async generator yielding content chunks
|
|
66
|
+
*/
|
|
67
|
+
generateContentStream(request: GenerateContentRequest): AsyncGenerator<GenerateContentChunk>;
|
|
68
|
+
/**
|
|
69
|
+
* Generate a unique request ID for tracking.
|
|
70
|
+
*/
|
|
71
|
+
private generateRequestId;
|
|
72
|
+
/**
|
|
73
|
+
* Log a streaming chunk.
|
|
74
|
+
*/
|
|
75
|
+
private logChunk;
|
|
76
|
+
/**
|
|
77
|
+
* Log an error that occurred during generation.
|
|
78
|
+
*/
|
|
79
|
+
private logError;
|
|
80
|
+
/**
|
|
81
|
+
* Log a generation request.
|
|
82
|
+
*/
|
|
83
|
+
private logRequest;
|
|
84
|
+
/**
|
|
85
|
+
* Log a generation response.
|
|
86
|
+
*/
|
|
87
|
+
private logResponse;
|
|
88
|
+
/**
|
|
89
|
+
* Log streaming completion.
|
|
90
|
+
*/
|
|
91
|
+
private logStreamComplete;
|
|
92
|
+
/**
|
|
93
|
+
* Check if chunks should be logged.
|
|
94
|
+
*/
|
|
95
|
+
private shouldLogChunks;
|
|
96
|
+
/**
|
|
97
|
+
* Check if requests should be logged.
|
|
98
|
+
*/
|
|
99
|
+
private shouldLogRequests;
|
|
100
|
+
/**
|
|
101
|
+
* Check if responses should be logged.
|
|
102
|
+
*/
|
|
103
|
+
private shouldLogResponses;
|
|
104
|
+
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logging Content Generator Decorator.
|
|
3
|
+
*
|
|
4
|
+
* Wraps any IContentGenerator to add debug logging capabilities.
|
|
5
|
+
* Logs request/response metadata, timing, and errors.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Logging Content Generator.
|
|
9
|
+
*
|
|
10
|
+
* Decorator that wraps any IContentGenerator to add logging capabilities.
|
|
11
|
+
* Useful for debugging, monitoring, and performance analysis.
|
|
12
|
+
*
|
|
13
|
+
* Features:
|
|
14
|
+
* - Request/response logging with configurable verbosity
|
|
15
|
+
* - Timing information for all operations
|
|
16
|
+
* - Error logging with context
|
|
17
|
+
* - Event emission via SessionEventBus
|
|
18
|
+
*/
|
|
19
|
+
export class LoggingContentGenerator {
|
|
20
|
+
eventBus;
|
|
21
|
+
inner;
|
|
22
|
+
options;
|
|
23
|
+
/**
|
|
24
|
+
* Create a new Logging Content Generator.
|
|
25
|
+
*
|
|
26
|
+
* @param inner - The wrapped content generator
|
|
27
|
+
* @param eventBus - Optional event bus for emitting events
|
|
28
|
+
* @param options - Logging options
|
|
29
|
+
*/
|
|
30
|
+
constructor(inner, eventBus, options = {}) {
|
|
31
|
+
this.inner = inner;
|
|
32
|
+
this.eventBus = eventBus;
|
|
33
|
+
this.options = options;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Estimate tokens (delegates to inner generator).
|
|
37
|
+
*
|
|
38
|
+
* @param content - Text to estimate tokens for
|
|
39
|
+
* @returns Estimated token count
|
|
40
|
+
*/
|
|
41
|
+
estimateTokensSync(content) {
|
|
42
|
+
return this.inner.estimateTokensSync(content);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Generate content with logging.
|
|
46
|
+
*
|
|
47
|
+
* @param request - Generation request
|
|
48
|
+
* @returns Generated content response
|
|
49
|
+
*/
|
|
50
|
+
async generateContent(request) {
|
|
51
|
+
const startTime = Date.now();
|
|
52
|
+
const requestId = this.generateRequestId();
|
|
53
|
+
this.logRequest(requestId, request);
|
|
54
|
+
this.eventBus?.emit('llmservice:thinking');
|
|
55
|
+
try {
|
|
56
|
+
const response = await this.inner.generateContent(request);
|
|
57
|
+
this.logResponse(requestId, response, Date.now() - startTime);
|
|
58
|
+
return response;
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
this.logError(requestId, error, Date.now() - startTime);
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Generate content with streaming and logging.
|
|
67
|
+
*
|
|
68
|
+
* @param request - Generation request
|
|
69
|
+
* @yields Content chunks as they are generated
|
|
70
|
+
* @returns Async generator yielding content chunks
|
|
71
|
+
*/
|
|
72
|
+
async *generateContentStream(request) {
|
|
73
|
+
const startTime = Date.now();
|
|
74
|
+
const requestId = this.generateRequestId();
|
|
75
|
+
this.logRequest(requestId, request);
|
|
76
|
+
this.eventBus?.emit('llmservice:thinking');
|
|
77
|
+
try {
|
|
78
|
+
let chunkCount = 0;
|
|
79
|
+
let totalContentLength = 0;
|
|
80
|
+
for await (const chunk of this.inner.generateContentStream(request)) {
|
|
81
|
+
chunkCount++;
|
|
82
|
+
if (chunk.content) {
|
|
83
|
+
totalContentLength += chunk.content.length;
|
|
84
|
+
}
|
|
85
|
+
if (this.shouldLogChunks()) {
|
|
86
|
+
this.logChunk(requestId, chunk, chunkCount);
|
|
87
|
+
}
|
|
88
|
+
yield chunk;
|
|
89
|
+
}
|
|
90
|
+
this.logStreamComplete(requestId, chunkCount, totalContentLength, Date.now() - startTime);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
this.logError(requestId, error, Date.now() - startTime);
|
|
94
|
+
throw error;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Generate a unique request ID for tracking.
|
|
99
|
+
*/
|
|
100
|
+
generateRequestId() {
|
|
101
|
+
return Math.random().toString(36).slice(2, 8);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Log a streaming chunk.
|
|
105
|
+
*/
|
|
106
|
+
logChunk(requestId, chunk, index) {
|
|
107
|
+
console.debug(`[LLM:${requestId}] Chunk #${index}`, {
|
|
108
|
+
contentLength: chunk.content?.length ?? 0,
|
|
109
|
+
finishReason: chunk.finishReason,
|
|
110
|
+
hasToolCalls: Boolean(chunk.toolCalls?.length),
|
|
111
|
+
isComplete: chunk.isComplete,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Log an error that occurred during generation.
|
|
116
|
+
*/
|
|
117
|
+
logError(requestId, error, durationMs) {
|
|
118
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
119
|
+
console.error(`[LLM:${requestId}] Error after ${durationMs}ms:`, errorMessage);
|
|
120
|
+
this.eventBus?.emit('llmservice:error', {
|
|
121
|
+
error: errorMessage,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Log a generation request.
|
|
126
|
+
*/
|
|
127
|
+
logRequest(requestId, request) {
|
|
128
|
+
if (!this.shouldLogRequests()) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
console.debug(`[LLM:${requestId}] Request`, {
|
|
132
|
+
hasSystemPrompt: Boolean(request.systemPrompt),
|
|
133
|
+
hasTools: Boolean(request.tools && Object.keys(request.tools).length > 0),
|
|
134
|
+
maxTokens: request.config.maxTokens,
|
|
135
|
+
messageCount: request.contents.length,
|
|
136
|
+
model: request.model,
|
|
137
|
+
temperature: request.config.temperature,
|
|
138
|
+
toolCount: request.tools ? Object.keys(request.tools).length : 0,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Log a generation response.
|
|
143
|
+
*/
|
|
144
|
+
logResponse(requestId, response, durationMs) {
|
|
145
|
+
if (!this.shouldLogResponses()) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
console.debug(`[LLM:${requestId}] Response in ${durationMs}ms`, {
|
|
149
|
+
contentLength: response.content.length,
|
|
150
|
+
finishReason: response.finishReason,
|
|
151
|
+
toolCalls: response.toolCalls?.length ?? 0,
|
|
152
|
+
usage: response.usage,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Log streaming completion.
|
|
157
|
+
*/
|
|
158
|
+
logStreamComplete(requestId, chunkCount, totalContentLength, durationMs) {
|
|
159
|
+
console.debug(`[LLM:${requestId}] Stream complete in ${durationMs}ms`, {
|
|
160
|
+
chunkCount,
|
|
161
|
+
totalContentLength,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Check if chunks should be logged.
|
|
166
|
+
*/
|
|
167
|
+
shouldLogChunks() {
|
|
168
|
+
return this.options.logChunks === true || this.options.verbose === true;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Check if requests should be logged.
|
|
172
|
+
*/
|
|
173
|
+
shouldLogRequests() {
|
|
174
|
+
return this.options.logRequests === true || this.options.verbose === true;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Check if responses should be logged.
|
|
178
|
+
*/
|
|
179
|
+
shouldLogResponses() {
|
|
180
|
+
return this.options.logResponses === true || this.options.verbose === true;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenRouter Content Generator.
|
|
3
|
+
*
|
|
4
|
+
* Implements IContentGenerator using OpenRouter API (OpenAI-compatible).
|
|
5
|
+
* Supports various models available through OpenRouter.
|
|
6
|
+
*/
|
|
7
|
+
import type { GenerateContentChunk, GenerateContentRequest, GenerateContentResponse, IContentGenerator } from '../../../../core/interfaces/cipher/i-content-generator.js';
|
|
8
|
+
/**
|
|
9
|
+
* Configuration for OpenRouter Content Generator.
|
|
10
|
+
*/
|
|
11
|
+
export interface OpenRouterContentGeneratorConfig {
|
|
12
|
+
/** OpenRouter API key */
|
|
13
|
+
apiKey: string;
|
|
14
|
+
/** Base URL for OpenRouter API */
|
|
15
|
+
baseUrl?: string;
|
|
16
|
+
/** HTTP Referer header for OpenRouter */
|
|
17
|
+
httpReferer?: string;
|
|
18
|
+
/** Maximum tokens in the response */
|
|
19
|
+
maxTokens?: number;
|
|
20
|
+
/** Model identifier */
|
|
21
|
+
model?: string;
|
|
22
|
+
/** Site name for X-Title header */
|
|
23
|
+
siteName?: string;
|
|
24
|
+
/** Temperature for randomness */
|
|
25
|
+
temperature?: number;
|
|
26
|
+
/** Request timeout in milliseconds */
|
|
27
|
+
timeout?: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* OpenRouter Content Generator.
|
|
31
|
+
*
|
|
32
|
+
* Wraps OpenAI client configured for OpenRouter and implements IContentGenerator.
|
|
33
|
+
* Provides:
|
|
34
|
+
* - Non-streaming content generation
|
|
35
|
+
* - Streaming content generation (true streaming via OpenAI SDK)
|
|
36
|
+
* - Token estimation
|
|
37
|
+
*/
|
|
38
|
+
export declare class OpenRouterContentGenerator implements IContentGenerator {
|
|
39
|
+
private readonly client;
|
|
40
|
+
private readonly config;
|
|
41
|
+
private readonly formatter;
|
|
42
|
+
private readonly tokenizer;
|
|
43
|
+
/**
|
|
44
|
+
* Create a new OpenRouter Content Generator.
|
|
45
|
+
*
|
|
46
|
+
* @param config - Generator configuration
|
|
47
|
+
*/
|
|
48
|
+
constructor(config: OpenRouterContentGeneratorConfig);
|
|
49
|
+
/**
|
|
50
|
+
* Estimate tokens synchronously using character-based approximation.
|
|
51
|
+
*
|
|
52
|
+
* @param content - Text to estimate tokens for
|
|
53
|
+
* @returns Estimated token count
|
|
54
|
+
*/
|
|
55
|
+
estimateTokensSync(content: string): number;
|
|
56
|
+
/**
|
|
57
|
+
* Generate content (non-streaming).
|
|
58
|
+
*
|
|
59
|
+
* @param request - Generation request
|
|
60
|
+
* @returns Generated content response
|
|
61
|
+
*/
|
|
62
|
+
generateContent(request: GenerateContentRequest): Promise<GenerateContentResponse>;
|
|
63
|
+
/**
|
|
64
|
+
* Generate content with streaming.
|
|
65
|
+
*
|
|
66
|
+
* Uses OpenAI SDK's native streaming support for real-time content generation.
|
|
67
|
+
*
|
|
68
|
+
* @param request - Generation request
|
|
69
|
+
* @yields Content chunks as they are generated
|
|
70
|
+
* @returns Async generator yielding content chunks
|
|
71
|
+
*/
|
|
72
|
+
generateContentStream(request: GenerateContentRequest): AsyncGenerator<GenerateContentChunk>;
|
|
73
|
+
/**
|
|
74
|
+
* Build tool calls array from accumulated tool calls.
|
|
75
|
+
*/
|
|
76
|
+
private buildToolCallsArray;
|
|
77
|
+
/**
|
|
78
|
+
* Build tools array from ToolSet.
|
|
79
|
+
*/
|
|
80
|
+
private buildTools;
|
|
81
|
+
/**
|
|
82
|
+
* Determine finish reason from OpenAI finish reason.
|
|
83
|
+
*/
|
|
84
|
+
private determineFinishReason;
|
|
85
|
+
/**
|
|
86
|
+
* Extract text content from an internal message.
|
|
87
|
+
*/
|
|
88
|
+
private extractTextContent;
|
|
89
|
+
/**
|
|
90
|
+
* Process tool call deltas and accumulate them.
|
|
91
|
+
*/
|
|
92
|
+
private processToolCallDeltas;
|
|
93
|
+
}
|