byterover-cli 0.2.0 → 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 +53 -2
- package/dist/commands/init.js +279 -66
- package/dist/commands/login.js +9 -4
- package/dist/commands/logout.d.ts +16 -0
- package/dist/commands/logout.js +61 -0
- 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 +4 -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/i-rule-template-service.d.ts +0 -4
- package/dist/core/interfaces/i-rule-template-service.js +1 -4
- 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/rule/constants.d.ts +4 -0
- package/dist/infra/rule/constants.js +4 -0
- package/dist/infra/rule/rule-template-service.js +1 -1
- package/dist/infra/rule/rule-writer-service.js +1 -5
- 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 -93
- 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 +422 -142
- package/package.json +29 -10
- 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,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retry with Backoff Utility.
|
|
3
|
+
*
|
|
4
|
+
* Provides a generic retry mechanism with exponential backoff for async operations.
|
|
5
|
+
* Used by RetryableContentGenerator and can be used for other retry scenarios.
|
|
6
|
+
*/
|
|
7
|
+
import { calculateRetryDelay, DEFAULT_RETRY_POLICY, isRetryableError, } from './retry-policy.js';
|
|
8
|
+
/**
|
|
9
|
+
* Sleep for a specified duration.
|
|
10
|
+
*
|
|
11
|
+
* @param ms - Duration in milliseconds
|
|
12
|
+
* @param signal - Optional abort signal
|
|
13
|
+
* @returns Promise that resolves after the delay
|
|
14
|
+
*/
|
|
15
|
+
async function sleep(ms, signal) {
|
|
16
|
+
return new Promise((resolve, reject) => {
|
|
17
|
+
if (signal?.aborted) {
|
|
18
|
+
reject(new Error('Retry aborted'));
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const timeout = setTimeout(resolve, ms);
|
|
22
|
+
signal?.addEventListener('abort', () => {
|
|
23
|
+
clearTimeout(timeout);
|
|
24
|
+
reject(new Error('Retry aborted'));
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Execute an async operation with retry and exponential backoff.
|
|
30
|
+
*
|
|
31
|
+
* @param operation - The async operation to execute
|
|
32
|
+
* @param options - Retry options
|
|
33
|
+
* @returns Promise resolving to the operation result or throwing after all retries exhausted
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* const result = await withRetry(
|
|
38
|
+
* () => fetchData(),
|
|
39
|
+
* {
|
|
40
|
+
* policy: DEFAULT_RETRY_POLICY,
|
|
41
|
+
* onRetry: ({ attempt, delayMs }) => {
|
|
42
|
+
* console.log(`Retry ${attempt}, waiting ${delayMs}ms`)
|
|
43
|
+
* }
|
|
44
|
+
* }
|
|
45
|
+
* )
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export async function withRetry(operation, options = {}) {
|
|
49
|
+
const policy = options.policy ?? DEFAULT_RETRY_POLICY;
|
|
50
|
+
const maxAttempts = policy.maxRetries + 1;
|
|
51
|
+
return attemptWithRetry({
|
|
52
|
+
attempt: 1,
|
|
53
|
+
maxAttempts,
|
|
54
|
+
operation,
|
|
55
|
+
options,
|
|
56
|
+
policy,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Internal helper to attempt retry recursively.
|
|
61
|
+
*/
|
|
62
|
+
async function attemptWithRetry(config) {
|
|
63
|
+
const { attempt, maxAttempts, operation, options, policy } = config;
|
|
64
|
+
// Check if aborted
|
|
65
|
+
if (options.signal?.aborted) {
|
|
66
|
+
throw new Error('Retry aborted');
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
return await operation();
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
// Check if this is the last attempt
|
|
73
|
+
if (attempt >= maxAttempts) {
|
|
74
|
+
const context = {
|
|
75
|
+
attempt,
|
|
76
|
+
delayMs: 0,
|
|
77
|
+
error,
|
|
78
|
+
maxAttempts,
|
|
79
|
+
};
|
|
80
|
+
options.onExhausted?.(context);
|
|
81
|
+
throw error;
|
|
82
|
+
}
|
|
83
|
+
// Check if error is retryable
|
|
84
|
+
const isRetryable = options.isRetryable?.(error) ?? isRetryableError(error, policy);
|
|
85
|
+
if (!isRetryable) {
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
// Calculate delay and invoke callback
|
|
89
|
+
const delayMs = calculateRetryDelay(attempt, policy);
|
|
90
|
+
const context = {
|
|
91
|
+
attempt,
|
|
92
|
+
delayMs,
|
|
93
|
+
error,
|
|
94
|
+
maxAttempts,
|
|
95
|
+
};
|
|
96
|
+
options.onRetry?.(context);
|
|
97
|
+
// Wait before retrying
|
|
98
|
+
await sleep(delayMs, options.signal);
|
|
99
|
+
// Recursively attempt again
|
|
100
|
+
return attemptWithRetry({
|
|
101
|
+
attempt: attempt + 1,
|
|
102
|
+
maxAttempts,
|
|
103
|
+
operation,
|
|
104
|
+
options,
|
|
105
|
+
policy,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Execute an async operation with retry and return a detailed result.
|
|
111
|
+
*
|
|
112
|
+
* Unlike `withRetry`, this function never throws and always returns a result object.
|
|
113
|
+
*
|
|
114
|
+
* @param operation - The async operation to execute
|
|
115
|
+
* @param options - Retry options
|
|
116
|
+
* @returns Promise resolving to a RetryResult object
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* ```typescript
|
|
120
|
+
* const { success, result, error, attempts } = await withRetryResult(
|
|
121
|
+
* () => fetchData(),
|
|
122
|
+
* { policy: DEFAULT_RETRY_POLICY }
|
|
123
|
+
* )
|
|
124
|
+
*
|
|
125
|
+
* if (success) {
|
|
126
|
+
* console.log('Data:', result)
|
|
127
|
+
* } else {
|
|
128
|
+
* console.error('Failed after', attempts, 'attempts:', error)
|
|
129
|
+
* }
|
|
130
|
+
* ```
|
|
131
|
+
*/
|
|
132
|
+
export async function withRetryResult(operation, options = {}) {
|
|
133
|
+
const policy = options.policy ?? DEFAULT_RETRY_POLICY;
|
|
134
|
+
const maxAttempts = policy.maxRetries + 1;
|
|
135
|
+
const startTime = Date.now();
|
|
136
|
+
return attemptWithRetryResult({
|
|
137
|
+
attempt: 1,
|
|
138
|
+
maxAttempts,
|
|
139
|
+
operation,
|
|
140
|
+
options,
|
|
141
|
+
policy,
|
|
142
|
+
startTime,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Internal helper to attempt retry recursively with result tracking.
|
|
147
|
+
*/
|
|
148
|
+
async function attemptWithRetryResult(config) {
|
|
149
|
+
const { attempt, maxAttempts, operation, options, policy, startTime } = config;
|
|
150
|
+
// Check if aborted
|
|
151
|
+
if (options.signal?.aborted) {
|
|
152
|
+
return {
|
|
153
|
+
attempts: attempt,
|
|
154
|
+
error: new Error('Retry aborted'),
|
|
155
|
+
success: false,
|
|
156
|
+
totalTimeMs: Date.now() - startTime,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
try {
|
|
160
|
+
const result = await operation();
|
|
161
|
+
return {
|
|
162
|
+
attempts: attempt,
|
|
163
|
+
result,
|
|
164
|
+
success: true,
|
|
165
|
+
totalTimeMs: Date.now() - startTime,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
// Check if this is the last attempt
|
|
170
|
+
if (attempt >= maxAttempts) {
|
|
171
|
+
const context = {
|
|
172
|
+
attempt,
|
|
173
|
+
delayMs: 0,
|
|
174
|
+
error,
|
|
175
|
+
maxAttempts,
|
|
176
|
+
};
|
|
177
|
+
options.onExhausted?.(context);
|
|
178
|
+
return {
|
|
179
|
+
attempts: attempt,
|
|
180
|
+
error,
|
|
181
|
+
success: false,
|
|
182
|
+
totalTimeMs: Date.now() - startTime,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
// Check if error is retryable
|
|
186
|
+
const isRetryable = options.isRetryable?.(error) ?? isRetryableError(error, policy);
|
|
187
|
+
if (!isRetryable) {
|
|
188
|
+
return {
|
|
189
|
+
attempts: attempt,
|
|
190
|
+
error,
|
|
191
|
+
success: false,
|
|
192
|
+
totalTimeMs: Date.now() - startTime,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
// Calculate delay and invoke callback
|
|
196
|
+
const delayMs = calculateRetryDelay(attempt, policy);
|
|
197
|
+
const context = {
|
|
198
|
+
attempt,
|
|
199
|
+
delayMs,
|
|
200
|
+
error,
|
|
201
|
+
maxAttempts,
|
|
202
|
+
};
|
|
203
|
+
options.onRetry?.(context);
|
|
204
|
+
// Wait before retrying
|
|
205
|
+
try {
|
|
206
|
+
await sleep(delayMs, options.signal);
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
// Aborted during sleep
|
|
210
|
+
return {
|
|
211
|
+
attempts: attempt,
|
|
212
|
+
error: new Error('Retry aborted'),
|
|
213
|
+
success: false,
|
|
214
|
+
totalTimeMs: Date.now() - startTime,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
// Recursively attempt again
|
|
218
|
+
return attemptWithRetryResult({
|
|
219
|
+
attempt: attempt + 1,
|
|
220
|
+
maxAttempts,
|
|
221
|
+
operation,
|
|
222
|
+
options,
|
|
223
|
+
policy,
|
|
224
|
+
startTime,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Create a retryable version of an async function.
|
|
230
|
+
*
|
|
231
|
+
* @param fn - The async function to wrap
|
|
232
|
+
* @param options - Retry options
|
|
233
|
+
* @returns A new function that will retry on failure
|
|
234
|
+
*
|
|
235
|
+
* @example
|
|
236
|
+
* ```typescript
|
|
237
|
+
* const retryableFetch = makeRetryable(
|
|
238
|
+
* (url: string) => fetch(url).then(r => r.json()),
|
|
239
|
+
* { policy: DEFAULT_RETRY_POLICY }
|
|
240
|
+
* )
|
|
241
|
+
*
|
|
242
|
+
* const data = await retryableFetch('https://api.example.com/data')
|
|
243
|
+
* ```
|
|
244
|
+
*/
|
|
245
|
+
export function makeRetryable(fn, options = {}) {
|
|
246
|
+
return (...args) => withRetry(() => fn(...args), options);
|
|
247
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thought Parsing Utilities
|
|
3
|
+
*
|
|
4
|
+
* Handles parsing and processing of thinking/thought signatures from Gemini models.
|
|
5
|
+
* Thoughts represent the model's reasoning process before generating responses or tool calls.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Parsed thought summary with subject and description
|
|
9
|
+
*/
|
|
10
|
+
export interface ThoughtSummary {
|
|
11
|
+
/**
|
|
12
|
+
* Description or details of the thought
|
|
13
|
+
*/
|
|
14
|
+
description: string;
|
|
15
|
+
/**
|
|
16
|
+
* Subject of the thought (extracted from **subject** format)
|
|
17
|
+
*/
|
|
18
|
+
subject: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Thinking configuration for Gemini models
|
|
22
|
+
*/
|
|
23
|
+
export interface ThinkingConfig {
|
|
24
|
+
/**
|
|
25
|
+
* Whether to include thoughts in responses
|
|
26
|
+
* @default false
|
|
27
|
+
*/
|
|
28
|
+
includeThoughts?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Thinking token budget for Gemini 2.x models
|
|
31
|
+
* @default 512
|
|
32
|
+
*/
|
|
33
|
+
thinkingBudget?: number;
|
|
34
|
+
/**
|
|
35
|
+
* Thinking level for Gemini 3.x models
|
|
36
|
+
* @default 'HIGH'
|
|
37
|
+
*/
|
|
38
|
+
thinkingLevel?: ThinkingLevel;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Thinking levels for Gemini 3.x models
|
|
42
|
+
*/
|
|
43
|
+
export declare enum ThinkingLevel {
|
|
44
|
+
HIGH = "HIGH",
|
|
45
|
+
LOW = "LOW",
|
|
46
|
+
MEDIUM = "MEDIUM",
|
|
47
|
+
UNSPECIFIED = "THINKING_LEVEL_UNSPECIFIED"
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Default thinking mode token budget
|
|
51
|
+
*/
|
|
52
|
+
export declare const DEFAULT_THINKING_BUDGET = 512;
|
|
53
|
+
/**
|
|
54
|
+
* Synthetic thought signature used for Preview models
|
|
55
|
+
*/
|
|
56
|
+
export declare const SYNTHETIC_THOUGHT_SIGNATURE = "skip_thought_signature_validator";
|
|
57
|
+
/**
|
|
58
|
+
* Utility object for parsing thoughts from LLM responses
|
|
59
|
+
*/
|
|
60
|
+
export declare const ThoughtParser: {
|
|
61
|
+
/**
|
|
62
|
+
* Delimiters for subject extraction
|
|
63
|
+
*/
|
|
64
|
+
readonly END_DELIMITER: "**";
|
|
65
|
+
/**
|
|
66
|
+
* Extract just the description from thought text
|
|
67
|
+
*
|
|
68
|
+
* @param text - Thought text
|
|
69
|
+
* @returns Description string
|
|
70
|
+
*/
|
|
71
|
+
readonly extractDescription: (text: string) => string;
|
|
72
|
+
/**
|
|
73
|
+
* Extract just the subject from thought text
|
|
74
|
+
*
|
|
75
|
+
* @param text - Thought text
|
|
76
|
+
* @returns Subject string or empty if no subject found
|
|
77
|
+
*/
|
|
78
|
+
readonly extractSubject: (text: string) => string;
|
|
79
|
+
/**
|
|
80
|
+
* Check if text contains a thought subject
|
|
81
|
+
*
|
|
82
|
+
* @param text - Text to check
|
|
83
|
+
* @returns True if text contains **subject** format
|
|
84
|
+
*/
|
|
85
|
+
readonly hasSubject: (text: string) => boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Parse thought text into subject and description.
|
|
88
|
+
*
|
|
89
|
+
* Extracts subject from **subject** format:
|
|
90
|
+
* - Text between ** ** becomes the subject
|
|
91
|
+
* - Rest of the text becomes the description
|
|
92
|
+
*
|
|
93
|
+
* @param rawText - Raw thought text from LLM
|
|
94
|
+
* @returns Parsed thought summary
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```typescript
|
|
98
|
+
* const thought = ThoughtParser.parse("**Analyzing code** Let me review the structure")
|
|
99
|
+
* // Returns: { subject: "Analyzing code", description: "Let me review the structure" }
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
readonly parse: (rawText: string) => ThoughtSummary;
|
|
103
|
+
/**
|
|
104
|
+
* Delimiters for subject extraction
|
|
105
|
+
*/
|
|
106
|
+
readonly START_DELIMITER: "**";
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* Utility object for managing thinking configuration
|
|
110
|
+
*/
|
|
111
|
+
export declare const ThinkingConfigManager: {
|
|
112
|
+
/**
|
|
113
|
+
* Get thinking config based on model version
|
|
114
|
+
*
|
|
115
|
+
* - Gemini 3.x: Uses thinkingLevel
|
|
116
|
+
* - Gemini 2.x: Uses thinkingBudget
|
|
117
|
+
* - Other models: No thinking config
|
|
118
|
+
*
|
|
119
|
+
* @param model - Model identifier
|
|
120
|
+
* @returns Thinking configuration or undefined
|
|
121
|
+
*/
|
|
122
|
+
readonly getConfigForModel: (model: string) => ThinkingConfig | undefined;
|
|
123
|
+
/**
|
|
124
|
+
* Check if model is a preview model requiring thought signatures
|
|
125
|
+
*
|
|
126
|
+
* @param model - Model identifier
|
|
127
|
+
* @returns True if model is preview
|
|
128
|
+
*/
|
|
129
|
+
readonly isPreviewModel: (model: string) => boolean;
|
|
130
|
+
/**
|
|
131
|
+
* Merge user config with model defaults
|
|
132
|
+
*
|
|
133
|
+
* @param model - Model identifier
|
|
134
|
+
* @param userConfig - User-provided config (optional)
|
|
135
|
+
* @returns Merged configuration
|
|
136
|
+
*/
|
|
137
|
+
readonly mergeConfig: (model: string, userConfig?: ThinkingConfig) => ThinkingConfig | undefined;
|
|
138
|
+
/**
|
|
139
|
+
* Check if model supports thinking
|
|
140
|
+
*
|
|
141
|
+
* @param model - Model identifier
|
|
142
|
+
* @returns True if model supports thinking
|
|
143
|
+
*/
|
|
144
|
+
readonly supportsThinking: (model: string) => boolean;
|
|
145
|
+
};
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thought Parsing Utilities
|
|
3
|
+
*
|
|
4
|
+
* Handles parsing and processing of thinking/thought signatures from Gemini models.
|
|
5
|
+
* Thoughts represent the model's reasoning process before generating responses or tool calls.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Thinking levels for Gemini 3.x models
|
|
9
|
+
*/
|
|
10
|
+
export var ThinkingLevel;
|
|
11
|
+
(function (ThinkingLevel) {
|
|
12
|
+
ThinkingLevel["HIGH"] = "HIGH";
|
|
13
|
+
ThinkingLevel["LOW"] = "LOW";
|
|
14
|
+
ThinkingLevel["MEDIUM"] = "MEDIUM";
|
|
15
|
+
ThinkingLevel["UNSPECIFIED"] = "THINKING_LEVEL_UNSPECIFIED";
|
|
16
|
+
})(ThinkingLevel || (ThinkingLevel = {}));
|
|
17
|
+
/**
|
|
18
|
+
* Default thinking mode token budget
|
|
19
|
+
*/
|
|
20
|
+
export const DEFAULT_THINKING_BUDGET = 512;
|
|
21
|
+
/**
|
|
22
|
+
* Synthetic thought signature used for Preview models
|
|
23
|
+
*/
|
|
24
|
+
export const SYNTHETIC_THOUGHT_SIGNATURE = 'skip_thought_signature_validator';
|
|
25
|
+
/**
|
|
26
|
+
* Utility object for parsing thoughts from LLM responses
|
|
27
|
+
*/
|
|
28
|
+
export const ThoughtParser = {
|
|
29
|
+
/**
|
|
30
|
+
* Delimiters for subject extraction
|
|
31
|
+
*/
|
|
32
|
+
END_DELIMITER: '**',
|
|
33
|
+
/**
|
|
34
|
+
* Extract just the description from thought text
|
|
35
|
+
*
|
|
36
|
+
* @param text - Thought text
|
|
37
|
+
* @returns Description string
|
|
38
|
+
*/
|
|
39
|
+
extractDescription(text) {
|
|
40
|
+
const { description } = this.parse(text);
|
|
41
|
+
return description;
|
|
42
|
+
},
|
|
43
|
+
/**
|
|
44
|
+
* Extract just the subject from thought text
|
|
45
|
+
*
|
|
46
|
+
* @param text - Thought text
|
|
47
|
+
* @returns Subject string or empty if no subject found
|
|
48
|
+
*/
|
|
49
|
+
extractSubject(text) {
|
|
50
|
+
const { subject } = this.parse(text);
|
|
51
|
+
return subject;
|
|
52
|
+
},
|
|
53
|
+
/**
|
|
54
|
+
* Check if text contains a thought subject
|
|
55
|
+
*
|
|
56
|
+
* @param text - Text to check
|
|
57
|
+
* @returns True if text contains **subject** format
|
|
58
|
+
*/
|
|
59
|
+
hasSubject(text) {
|
|
60
|
+
if (!text)
|
|
61
|
+
return false;
|
|
62
|
+
const startIndex = text.indexOf(this.START_DELIMITER);
|
|
63
|
+
if (startIndex === -1)
|
|
64
|
+
return false;
|
|
65
|
+
const endIndex = text.indexOf(this.END_DELIMITER, startIndex + this.START_DELIMITER.length);
|
|
66
|
+
return endIndex !== -1;
|
|
67
|
+
},
|
|
68
|
+
/**
|
|
69
|
+
* Parse thought text into subject and description.
|
|
70
|
+
*
|
|
71
|
+
* Extracts subject from **subject** format:
|
|
72
|
+
* - Text between ** ** becomes the subject
|
|
73
|
+
* - Rest of the text becomes the description
|
|
74
|
+
*
|
|
75
|
+
* @param rawText - Raw thought text from LLM
|
|
76
|
+
* @returns Parsed thought summary
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```typescript
|
|
80
|
+
* const thought = ThoughtParser.parse("**Analyzing code** Let me review the structure")
|
|
81
|
+
* // Returns: { subject: "Analyzing code", description: "Let me review the structure" }
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
parse(rawText) {
|
|
85
|
+
if (!rawText) {
|
|
86
|
+
return { description: '', subject: '' };
|
|
87
|
+
}
|
|
88
|
+
const startIndex = rawText.indexOf(this.START_DELIMITER);
|
|
89
|
+
// No delimiter found - entire text is description
|
|
90
|
+
if (startIndex === -1) {
|
|
91
|
+
return { description: rawText.trim(), subject: '' };
|
|
92
|
+
}
|
|
93
|
+
const endIndex = rawText.indexOf(this.END_DELIMITER, startIndex + this.START_DELIMITER.length);
|
|
94
|
+
// End delimiter not found - entire text is description
|
|
95
|
+
if (endIndex === -1) {
|
|
96
|
+
return { description: rawText.trim(), subject: '' };
|
|
97
|
+
}
|
|
98
|
+
// Extract subject from between delimiters
|
|
99
|
+
const subject = rawText
|
|
100
|
+
.slice(startIndex + this.START_DELIMITER.length, endIndex)
|
|
101
|
+
.trim();
|
|
102
|
+
// Rest is description (before start + after end)
|
|
103
|
+
const description = (rawText.slice(0, startIndex) +
|
|
104
|
+
rawText.slice(endIndex + this.END_DELIMITER.length)).trim();
|
|
105
|
+
return { description, subject };
|
|
106
|
+
},
|
|
107
|
+
/**
|
|
108
|
+
* Delimiters for subject extraction
|
|
109
|
+
*/
|
|
110
|
+
START_DELIMITER: '**',
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* Utility object for managing thinking configuration
|
|
114
|
+
*/
|
|
115
|
+
export const ThinkingConfigManager = {
|
|
116
|
+
/**
|
|
117
|
+
* Get thinking config based on model version
|
|
118
|
+
*
|
|
119
|
+
* - Gemini 3.x: Uses thinkingLevel
|
|
120
|
+
* - Gemini 2.x: Uses thinkingBudget
|
|
121
|
+
* - Other models: No thinking config
|
|
122
|
+
*
|
|
123
|
+
* @param model - Model identifier
|
|
124
|
+
* @returns Thinking configuration or undefined
|
|
125
|
+
*/
|
|
126
|
+
getConfigForModel(model) {
|
|
127
|
+
const lowerModel = model.toLowerCase();
|
|
128
|
+
// Only Gemini models support thinking
|
|
129
|
+
if (!lowerModel.includes('gemini')) {
|
|
130
|
+
return undefined;
|
|
131
|
+
}
|
|
132
|
+
// Gemini 3.x models
|
|
133
|
+
if (lowerModel.startsWith('gemini-3') || lowerModel.includes('gemini-3')) {
|
|
134
|
+
return {
|
|
135
|
+
includeThoughts: false,
|
|
136
|
+
thinkingLevel: ThinkingLevel.HIGH,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
// Gemini 2.x models
|
|
140
|
+
if (lowerModel.startsWith('gemini-2') || lowerModel.includes('gemini-2')) {
|
|
141
|
+
return {
|
|
142
|
+
includeThoughts: false,
|
|
143
|
+
thinkingBudget: DEFAULT_THINKING_BUDGET,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
// Other Gemini models - use budget as default
|
|
147
|
+
return {
|
|
148
|
+
includeThoughts: false,
|
|
149
|
+
thinkingBudget: DEFAULT_THINKING_BUDGET,
|
|
150
|
+
};
|
|
151
|
+
},
|
|
152
|
+
/**
|
|
153
|
+
* Check if model is a preview model requiring thought signatures
|
|
154
|
+
*
|
|
155
|
+
* @param model - Model identifier
|
|
156
|
+
* @returns True if model is preview
|
|
157
|
+
*/
|
|
158
|
+
isPreviewModel(model) {
|
|
159
|
+
return model.toLowerCase().includes('preview');
|
|
160
|
+
},
|
|
161
|
+
/**
|
|
162
|
+
* Merge user config with model defaults
|
|
163
|
+
*
|
|
164
|
+
* @param model - Model identifier
|
|
165
|
+
* @param userConfig - User-provided config (optional)
|
|
166
|
+
* @returns Merged configuration
|
|
167
|
+
*/
|
|
168
|
+
mergeConfig(model, userConfig) {
|
|
169
|
+
const modelDefaults = this.getConfigForModel(model);
|
|
170
|
+
if (!modelDefaults) {
|
|
171
|
+
return userConfig;
|
|
172
|
+
}
|
|
173
|
+
if (!userConfig) {
|
|
174
|
+
return modelDefaults;
|
|
175
|
+
}
|
|
176
|
+
return {
|
|
177
|
+
...modelDefaults,
|
|
178
|
+
...userConfig,
|
|
179
|
+
};
|
|
180
|
+
},
|
|
181
|
+
/**
|
|
182
|
+
* Check if model supports thinking
|
|
183
|
+
*
|
|
184
|
+
* @param model - Model identifier
|
|
185
|
+
* @returns True if model supports thinking
|
|
186
|
+
*/
|
|
187
|
+
supportsThinking(model) {
|
|
188
|
+
return model.toLowerCase().includes('gemini');
|
|
189
|
+
},
|
|
190
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { ITokenizer } from '../../../../core/interfaces/cipher/i-tokenizer.js';
|
|
2
|
+
/**
|
|
3
|
+
* Tokenizer for Anthropic Claude models - CURRENTLY USING APPROXIMATION.
|
|
4
|
+
*
|
|
5
|
+
* This implementation uses a character-based approximation rather than
|
|
6
|
+
* accurate token counting. This is a temporary solution due to the
|
|
7
|
+
* complexity of integrating Anthropic's token counting API.
|
|
8
|
+
*
|
|
9
|
+
* Claude models use a tokenizer similar to GPT's, with approximately
|
|
10
|
+
* 3.5-4 characters per token for English text. We use 3.5 as a middle ground.
|
|
11
|
+
*
|
|
12
|
+
* TODO: Consider these improvements:
|
|
13
|
+
* 1. Use Anthropic's official token counting API (requires async handling or separate service)
|
|
14
|
+
* 2. Implement a WASM-based tokenizer for accurate synchronous counting
|
|
15
|
+
* 3. Cache token counts for frequently used text
|
|
16
|
+
* 4. Model-specific adjustments based on actual Claude tokenization patterns
|
|
17
|
+
*
|
|
18
|
+
* Reference: https://docs.anthropic.com/en/docs/about-claude/models
|
|
19
|
+
*/
|
|
20
|
+
export declare class ClaudeTokenizer implements ITokenizer {
|
|
21
|
+
private readonly modelName;
|
|
22
|
+
/**
|
|
23
|
+
* Creates a new Claude tokenizer instance.
|
|
24
|
+
*
|
|
25
|
+
* @param model - The Claude model name (e.g., 'claude-3-5-sonnet-20241022', 'claude-3-opus-20240229')
|
|
26
|
+
* Currently not used for approximation, but stored for future improvements
|
|
27
|
+
*/
|
|
28
|
+
constructor(model: string);
|
|
29
|
+
/**
|
|
30
|
+
* Approximates the token count for Anthropic Claude models.
|
|
31
|
+
*
|
|
32
|
+
* Uses a character-based approximation: ~3.5 characters per token.
|
|
33
|
+
* This is based on Anthropic's documentation and common patterns for
|
|
34
|
+
* English text with Claude's tokenizer.
|
|
35
|
+
*
|
|
36
|
+
* IMPORTANT: This is NOT accurate for Claude models and should be replaced
|
|
37
|
+
* with a proper implementation when possible. The actual token count can vary
|
|
38
|
+
* significantly based on:
|
|
39
|
+
* - Language (non-English text may have different ratios)
|
|
40
|
+
* - Content type (code vs prose)
|
|
41
|
+
* - Special characters and formatting
|
|
42
|
+
*
|
|
43
|
+
* @param text - Text content to count tokens for
|
|
44
|
+
* @returns Approximate number of tokens
|
|
45
|
+
*/
|
|
46
|
+
countTokens(text: string): number;
|
|
47
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tokenizer for Anthropic Claude models - CURRENTLY USING APPROXIMATION.
|
|
3
|
+
*
|
|
4
|
+
* This implementation uses a character-based approximation rather than
|
|
5
|
+
* accurate token counting. This is a temporary solution due to the
|
|
6
|
+
* complexity of integrating Anthropic's token counting API.
|
|
7
|
+
*
|
|
8
|
+
* Claude models use a tokenizer similar to GPT's, with approximately
|
|
9
|
+
* 3.5-4 characters per token for English text. We use 3.5 as a middle ground.
|
|
10
|
+
*
|
|
11
|
+
* TODO: Consider these improvements:
|
|
12
|
+
* 1. Use Anthropic's official token counting API (requires async handling or separate service)
|
|
13
|
+
* 2. Implement a WASM-based tokenizer for accurate synchronous counting
|
|
14
|
+
* 3. Cache token counts for frequently used text
|
|
15
|
+
* 4. Model-specific adjustments based on actual Claude tokenization patterns
|
|
16
|
+
*
|
|
17
|
+
* Reference: https://docs.anthropic.com/en/docs/about-claude/models
|
|
18
|
+
*/
|
|
19
|
+
export class ClaudeTokenizer {
|
|
20
|
+
modelName;
|
|
21
|
+
/**
|
|
22
|
+
* Creates a new Claude tokenizer instance.
|
|
23
|
+
*
|
|
24
|
+
* @param model - The Claude model name (e.g., 'claude-3-5-sonnet-20241022', 'claude-3-opus-20240229')
|
|
25
|
+
* Currently not used for approximation, but stored for future improvements
|
|
26
|
+
*/
|
|
27
|
+
constructor(model) {
|
|
28
|
+
this.modelName = model;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Approximates the token count for Anthropic Claude models.
|
|
32
|
+
*
|
|
33
|
+
* Uses a character-based approximation: ~3.5 characters per token.
|
|
34
|
+
* This is based on Anthropic's documentation and common patterns for
|
|
35
|
+
* English text with Claude's tokenizer.
|
|
36
|
+
*
|
|
37
|
+
* IMPORTANT: This is NOT accurate for Claude models and should be replaced
|
|
38
|
+
* with a proper implementation when possible. The actual token count can vary
|
|
39
|
+
* significantly based on:
|
|
40
|
+
* - Language (non-English text may have different ratios)
|
|
41
|
+
* - Content type (code vs prose)
|
|
42
|
+
* - Special characters and formatting
|
|
43
|
+
*
|
|
44
|
+
* @param text - Text content to count tokens for
|
|
45
|
+
* @returns Approximate number of tokens
|
|
46
|
+
*/
|
|
47
|
+
countTokens(text) {
|
|
48
|
+
if (!text) {
|
|
49
|
+
return 0;
|
|
50
|
+
}
|
|
51
|
+
// Approximation: ~3.5 characters per token
|
|
52
|
+
// Claude's tokenizer is similar to GPT's, typically more efficient than 4 chars/token
|
|
53
|
+
return Math.ceil(text.length / 3.5);
|
|
54
|
+
}
|
|
55
|
+
}
|