byterover-cli 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -56
- package/bin/dev.js +1 -1
- package/dist/commands/cipher-agent/run.d.ts +111 -0
- package/dist/commands/cipher-agent/run.js +493 -0
- package/dist/commands/cipher-agent/set-prompt.d.ts +14 -0
- package/dist/commands/cipher-agent/set-prompt.js +53 -0
- package/dist/commands/cipher-agent/show-prompt.d.ts +11 -0
- package/dist/commands/cipher-agent/show-prompt.js +48 -0
- package/dist/commands/clear.d.ts +6 -0
- package/dist/commands/clear.js +36 -15
- package/dist/commands/curate.d.ts +74 -0
- package/dist/commands/curate.js +396 -0
- package/dist/commands/foo.d.ts +12 -0
- package/dist/commands/foo.js +61 -0
- package/dist/commands/gen-rules.d.ts +3 -0
- package/dist/commands/gen-rules.js +39 -20
- package/dist/commands/init.d.ts +48 -3
- package/dist/commands/init.js +242 -70
- package/dist/commands/login.js +9 -4
- package/dist/commands/pull.d.ts +33 -0
- package/dist/commands/pull.js +115 -0
- package/dist/commands/push.d.ts +13 -13
- package/dist/commands/push.js +81 -101
- package/dist/commands/query.d.ts +63 -0
- package/dist/commands/query.js +349 -0
- package/dist/commands/space/list.d.ts +5 -2
- package/dist/commands/space/list.js +60 -56
- package/dist/commands/space/switch.d.ts +16 -0
- package/dist/commands/space/switch.js +102 -53
- package/dist/commands/status.d.ts +5 -2
- package/dist/commands/status.js +43 -33
- package/dist/commands/watch.d.ts +23 -0
- package/dist/commands/watch.js +171 -0
- package/dist/config/auth.config.js +14 -2
- package/dist/config/context-tree-domains.d.ts +12 -0
- package/dist/config/context-tree-domains.js +29 -0
- package/dist/config/environment.d.ts +6 -0
- package/dist/config/environment.js +9 -2
- package/dist/constants.d.ts +5 -0
- package/dist/constants.js +6 -0
- package/dist/core/domain/cipher/agent/agent-state-machine.d.ts +128 -0
- package/dist/core/domain/cipher/agent/agent-state-machine.js +183 -0
- package/dist/core/domain/cipher/agent/agent-state.d.ts +77 -0
- package/dist/core/domain/cipher/agent/agent-state.js +59 -0
- package/dist/core/domain/cipher/agent/index.d.ts +7 -0
- package/dist/core/domain/cipher/agent/index.js +7 -0
- package/dist/core/domain/cipher/agent-events/index.d.ts +8 -0
- package/dist/core/domain/cipher/agent-events/index.js +7 -0
- package/dist/core/domain/cipher/agent-events/types.d.ts +419 -0
- package/dist/core/domain/cipher/agent-events/types.js +42 -0
- package/dist/core/domain/cipher/blob/types.d.ts +108 -0
- package/dist/core/domain/cipher/errors/blob-error.d.ts +36 -0
- package/dist/core/domain/cipher/errors/blob-error.js +68 -0
- package/dist/core/domain/cipher/errors/file-system-error.d.ts +211 -0
- package/dist/core/domain/cipher/errors/file-system-error.js +291 -0
- package/dist/core/domain/cipher/errors/llm-error.d.ts +120 -0
- package/dist/core/domain/cipher/errors/llm-error.js +161 -0
- package/dist/core/domain/cipher/errors/memory-error.d.ts +35 -0
- package/dist/core/domain/cipher/errors/memory-error.js +62 -0
- package/dist/core/domain/cipher/errors/process-error-code.d.ts +97 -0
- package/dist/core/domain/cipher/errors/process-error-code.js +98 -0
- package/dist/core/domain/cipher/errors/process-error.d.ts +135 -0
- package/dist/core/domain/cipher/errors/process-error.js +173 -0
- package/dist/core/domain/cipher/errors/session-error.d.ts +56 -0
- package/dist/core/domain/cipher/errors/session-error.js +74 -0
- package/dist/core/domain/cipher/errors/tool-error.d.ts +57 -0
- package/dist/core/domain/cipher/errors/tool-error.js +81 -0
- package/dist/core/domain/cipher/file-system/types.d.ts +203 -0
- package/dist/core/domain/cipher/memory/types.d.ts +102 -0
- package/dist/core/domain/cipher/memory/types.js +4 -0
- package/dist/core/domain/cipher/parsed-interaction.d.ts +47 -0
- package/dist/core/domain/cipher/parsed-interaction.js +25 -0
- package/dist/core/domain/cipher/process/types.d.ts +286 -0
- package/dist/core/domain/cipher/session/types.d.ts +54 -0
- package/dist/core/domain/cipher/storage/history-types.d.ts +38 -0
- package/dist/core/domain/cipher/system-prompt/types.d.ts +131 -0
- package/dist/core/domain/cipher/todos/index.d.ts +4 -0
- package/dist/core/domain/cipher/todos/index.js +4 -0
- package/dist/core/domain/cipher/todos/types.d.ts +57 -0
- package/dist/core/domain/cipher/todos/types.js +5 -0
- package/dist/core/domain/cipher/tools/constants.d.ts +28 -0
- package/dist/core/domain/cipher/tools/constants.js +24 -0
- package/dist/core/domain/cipher/tools/tool-error.d.ts +183 -0
- package/dist/core/domain/cipher/tools/tool-error.js +246 -0
- package/dist/core/domain/cipher/tools/types.d.ts +145 -0
- package/dist/core/domain/entities/brv-config.d.ts +42 -6
- package/dist/core/domain/entities/brv-config.js +115 -17
- package/dist/core/domain/entities/cogit-push-context.d.ts +38 -0
- package/dist/core/domain/entities/cogit-push-context.js +91 -0
- package/dist/core/domain/entities/cogit-push-response.d.ts +20 -0
- package/dist/core/domain/entities/cogit-push-response.js +31 -0
- package/dist/core/domain/entities/cogit-snapshot-author.d.ts +24 -0
- package/dist/core/domain/entities/cogit-snapshot-author.js +39 -0
- package/dist/core/domain/entities/cogit-snapshot-file.d.ts +34 -0
- package/dist/core/domain/entities/cogit-snapshot-file.js +59 -0
- package/dist/core/domain/entities/cogit-snapshot.d.ts +31 -0
- package/dist/core/domain/entities/cogit-snapshot.js +58 -0
- package/dist/core/domain/entities/context-tree-index.d.ts +26 -0
- package/dist/core/domain/entities/context-tree-index.js +27 -0
- package/dist/core/domain/entities/context-tree-snapshot.d.ts +56 -0
- package/dist/core/domain/entities/context-tree-snapshot.js +83 -0
- package/dist/core/domain/entities/event.d.ts +1 -1
- package/dist/core/domain/entities/event.js +3 -1
- package/dist/core/domain/entities/parser.d.ts +567 -0
- package/dist/core/domain/entities/parser.js +10 -0
- package/dist/core/domain/entities/playbook.d.ts +2 -23
- package/dist/core/domain/entities/playbook.js +2 -70
- package/dist/core/domain/errors/brv-config-version-error.d.ts +16 -0
- package/dist/core/domain/errors/brv-config-version-error.js +21 -0
- package/dist/core/domain/knowledge/directory-manager.d.ts +80 -0
- package/dist/core/domain/knowledge/directory-manager.js +145 -0
- package/dist/core/domain/knowledge/markdown-writer.d.ts +18 -0
- package/dist/core/domain/knowledge/markdown-writer.js +18 -0
- package/dist/core/domain/knowledge/relation-parser.d.ts +90 -0
- package/dist/core/domain/knowledge/relation-parser.js +131 -0
- package/dist/core/interfaces/cipher/cipher-services.d.ts +71 -0
- package/dist/core/interfaces/cipher/cipher-services.js +1 -0
- package/dist/core/interfaces/cipher/i-blob-storage.d.ts +78 -0
- package/dist/core/interfaces/cipher/i-blob-storage.js +1 -0
- package/dist/core/interfaces/cipher/i-chat-session.d.ts +62 -0
- package/dist/core/interfaces/cipher/i-chat-session.js +1 -0
- package/dist/core/interfaces/cipher/i-cipher-agent.d.ts +88 -0
- package/dist/core/interfaces/cipher/i-cipher-agent.js +1 -0
- package/dist/core/interfaces/cipher/i-coding-agent-log-parser.d.ts +20 -0
- package/dist/core/interfaces/cipher/i-coding-agent-log-parser.js +1 -0
- package/dist/core/interfaces/cipher/i-coding-agent-log-watcher.d.ts +31 -0
- package/dist/core/interfaces/cipher/i-coding-agent-log-watcher.js +1 -0
- package/dist/core/interfaces/cipher/i-content-generator.d.ts +120 -0
- package/dist/core/interfaces/cipher/i-content-generator.js +12 -0
- package/dist/core/interfaces/cipher/i-event-emitter.d.ts +76 -0
- package/dist/core/interfaces/cipher/i-event-emitter.js +1 -0
- package/dist/core/interfaces/cipher/i-file-system.d.ts +68 -0
- package/dist/core/interfaces/cipher/i-file-system.js +1 -0
- package/dist/core/interfaces/cipher/i-history-storage.d.ts +53 -0
- package/dist/core/interfaces/cipher/i-history-storage.js +1 -0
- package/dist/core/interfaces/cipher/i-llm-provider.d.ts +14 -0
- package/dist/core/interfaces/cipher/i-llm-provider.js +1 -0
- package/dist/core/interfaces/cipher/i-llm-service.d.ts +62 -0
- package/dist/core/interfaces/cipher/i-llm-service.js +1 -0
- package/dist/core/interfaces/cipher/i-logger.d.ts +78 -0
- package/dist/core/interfaces/cipher/i-logger.js +28 -0
- package/dist/core/interfaces/cipher/i-message-formatter.d.ts +44 -0
- package/dist/core/interfaces/cipher/i-message-formatter.js +1 -0
- package/dist/core/interfaces/cipher/i-policy-engine.d.ts +102 -0
- package/dist/core/interfaces/cipher/i-policy-engine.js +9 -0
- package/dist/core/interfaces/cipher/i-process-service.d.ts +65 -0
- package/dist/core/interfaces/cipher/i-process-service.js +1 -0
- package/dist/core/interfaces/cipher/i-system-prompt-contributor.d.ts +25 -0
- package/dist/core/interfaces/cipher/i-system-prompt-contributor.js +1 -0
- package/dist/core/interfaces/cipher/i-tokenizer.d.ts +15 -0
- package/dist/core/interfaces/cipher/i-tokenizer.js +1 -0
- package/dist/core/interfaces/cipher/i-tool-provider.d.ts +64 -0
- package/dist/core/interfaces/cipher/i-tool-provider.js +1 -0
- package/dist/core/interfaces/cipher/i-tool-scheduler.d.ts +103 -0
- package/dist/core/interfaces/cipher/i-tool-scheduler.js +11 -0
- package/dist/core/interfaces/cipher/llm-types.d.ts +46 -0
- package/dist/core/interfaces/cipher/llm-types.js +5 -0
- package/dist/core/interfaces/cipher/message-types.d.ts +118 -0
- package/dist/core/interfaces/cipher/message-types.js +5 -0
- package/dist/core/interfaces/cipher/tokenizer-types.d.ts +11 -0
- package/dist/core/interfaces/cipher/tokenizer-types.js +14 -0
- package/dist/core/interfaces/i-cogit-pull-service.d.ts +24 -0
- package/dist/core/interfaces/i-cogit-pull-service.js +1 -0
- package/dist/core/interfaces/i-cogit-push-service.d.ts +27 -0
- package/dist/core/interfaces/i-cogit-push-service.js +1 -0
- package/dist/core/interfaces/i-context-file-reader.d.ts +32 -0
- package/dist/core/interfaces/i-context-file-reader.js +1 -0
- package/dist/core/interfaces/i-context-tree-service.d.ts +21 -0
- package/dist/core/interfaces/i-context-tree-service.js +1 -0
- package/dist/core/interfaces/i-context-tree-snapshot-service.d.ts +36 -0
- package/dist/core/interfaces/i-context-tree-snapshot-service.js +1 -0
- package/dist/core/interfaces/i-context-tree-writer-service.d.ts +32 -0
- package/dist/core/interfaces/i-context-tree-writer-service.js +1 -0
- package/dist/core/interfaces/i-file-watcher-service.d.ts +41 -0
- package/dist/core/interfaces/i-file-watcher-service.js +1 -0
- package/dist/core/interfaces/parser/i-clean-parser-service.d.ts +18 -0
- package/dist/core/interfaces/parser/i-clean-parser-service.js +1 -0
- package/dist/core/interfaces/parser/i-raw-parser-service.d.ts +17 -0
- package/dist/core/interfaces/parser/i-raw-parser-service.js +1 -0
- package/dist/core/interfaces/parser/i-session-normalizer.d.ts +56 -0
- package/dist/core/interfaces/parser/i-session-normalizer.js +1 -0
- package/dist/hooks/command_not_found/handle-invalid-commands.d.ts +7 -0
- package/dist/hooks/command_not_found/handle-invalid-commands.js +32 -0
- package/dist/hooks/error/clean-errors.d.ts +7 -0
- package/dist/hooks/error/clean-errors.js +50 -0
- package/dist/hooks/init/welcome.js +72 -1
- package/dist/hooks/prerun/validate-brv-config-version.d.ts +28 -0
- package/dist/hooks/prerun/validate-brv-config-version.js +43 -0
- package/dist/infra/cipher/agent-service-factory.d.ts +86 -0
- package/dist/infra/cipher/agent-service-factory.js +212 -0
- package/dist/infra/cipher/blob/blob-storage-factory.d.ts +13 -0
- package/dist/infra/cipher/blob/blob-storage-factory.js +14 -0
- package/dist/infra/cipher/blob/index.d.ts +10 -0
- package/dist/infra/cipher/blob/index.js +12 -0
- package/dist/infra/cipher/blob/migrations.d.ts +63 -0
- package/dist/infra/cipher/blob/migrations.js +148 -0
- package/dist/infra/cipher/blob/sqlite-blob-storage.d.ts +82 -0
- package/dist/infra/cipher/blob/sqlite-blob-storage.js +307 -0
- package/dist/infra/cipher/cipher-agent-state-manager.d.ts +63 -0
- package/dist/infra/cipher/cipher-agent-state-manager.js +108 -0
- package/dist/infra/cipher/cipher-agent.d.ts +182 -0
- package/dist/infra/cipher/cipher-agent.js +317 -0
- package/dist/infra/cipher/command-parser.d.ts +23 -0
- package/dist/infra/cipher/command-parser.js +85 -0
- package/dist/infra/cipher/display/todo-display.d.ts +23 -0
- package/dist/infra/cipher/display/todo-display.js +129 -0
- package/dist/infra/cipher/events/event-emitter.d.ts +137 -0
- package/dist/infra/cipher/events/event-emitter.js +158 -0
- package/dist/infra/cipher/exit-codes.d.ts +44 -0
- package/dist/infra/cipher/exit-codes.js +58 -0
- package/dist/infra/cipher/file-system/file-system-service.d.ts +105 -0
- package/dist/infra/cipher/file-system/file-system-service.js +641 -0
- package/dist/infra/cipher/file-system/gitignore-filter.d.ts +77 -0
- package/dist/infra/cipher/file-system/gitignore-filter.js +120 -0
- package/dist/infra/cipher/file-system/glob-utils.d.ts +60 -0
- package/dist/infra/cipher/file-system/glob-utils.js +120 -0
- package/dist/infra/cipher/file-system/path-validator.d.ts +69 -0
- package/dist/infra/cipher/file-system/path-validator.js +184 -0
- package/dist/infra/cipher/grpc/internal-llm-grpc-service.d.ts +149 -0
- package/dist/infra/cipher/grpc/internal-llm-grpc-service.js +364 -0
- package/dist/infra/cipher/grpc/internal-llm-grpc.proto +94 -0
- package/dist/infra/cipher/interactive-commands.d.ts +16 -0
- package/dist/infra/cipher/interactive-commands.js +198 -0
- package/dist/infra/cipher/interactive-loop.d.ts +24 -0
- package/dist/infra/cipher/interactive-loop.js +352 -0
- package/dist/infra/cipher/llm/context/async-mutex.d.ts +59 -0
- package/dist/infra/cipher/llm/context/async-mutex.js +92 -0
- package/dist/infra/cipher/llm/context/compression/index.d.ts +6 -0
- package/dist/infra/cipher/llm/context/compression/index.js +5 -0
- package/dist/infra/cipher/llm/context/compression/middle-removal.d.ts +40 -0
- package/dist/infra/cipher/llm/context/compression/middle-removal.js +76 -0
- package/dist/infra/cipher/llm/context/compression/oldest-removal.d.ts +38 -0
- package/dist/infra/cipher/llm/context/compression/oldest-removal.js +53 -0
- package/dist/infra/cipher/llm/context/compression/types.d.ts +36 -0
- package/dist/infra/cipher/llm/context/compression/types.js +1 -0
- package/dist/infra/cipher/llm/context/context-manager.d.ts +234 -0
- package/dist/infra/cipher/llm/context/context-manager.js +419 -0
- package/dist/infra/cipher/llm/context/index.d.ts +2 -0
- package/dist/infra/cipher/llm/context/index.js +2 -0
- package/dist/infra/cipher/llm/context/loop-detector.d.ts +125 -0
- package/dist/infra/cipher/llm/context/loop-detector.js +194 -0
- package/dist/infra/cipher/llm/context/utils.d.ts +17 -0
- package/dist/infra/cipher/llm/context/utils.js +89 -0
- package/dist/infra/cipher/llm/formatters/claude-formatter.d.ts +54 -0
- package/dist/infra/cipher/llm/formatters/claude-formatter.js +182 -0
- package/dist/infra/cipher/llm/formatters/gemini-formatter.d.ts +69 -0
- package/dist/infra/cipher/llm/formatters/gemini-formatter.js +253 -0
- package/dist/infra/cipher/llm/formatters/openrouter-formatter.d.ts +47 -0
- package/dist/infra/cipher/llm/formatters/openrouter-formatter.js +238 -0
- package/dist/infra/cipher/llm/generators/byterover-content-generator.d.ts +92 -0
- package/dist/infra/cipher/llm/generators/byterover-content-generator.js +211 -0
- package/dist/infra/cipher/llm/generators/index.d.ts +13 -0
- package/dist/infra/cipher/llm/generators/index.js +13 -0
- package/dist/infra/cipher/llm/generators/logging-content-generator.d.ts +104 -0
- package/dist/infra/cipher/llm/generators/logging-content-generator.js +182 -0
- package/dist/infra/cipher/llm/generators/openrouter-content-generator.d.ts +93 -0
- package/dist/infra/cipher/llm/generators/openrouter-content-generator.js +254 -0
- package/dist/infra/cipher/llm/generators/retryable-content-generator.d.ts +90 -0
- package/dist/infra/cipher/llm/generators/retryable-content-generator.js +157 -0
- package/dist/infra/cipher/llm/index.d.ts +9 -0
- package/dist/infra/cipher/llm/index.js +13 -0
- package/dist/infra/cipher/llm/internal-llm-service.d.ts +308 -0
- package/dist/infra/cipher/llm/internal-llm-service.js +724 -0
- package/dist/infra/cipher/llm/openrouter-llm-service.d.ts +183 -0
- package/dist/infra/cipher/llm/openrouter-llm-service.js +386 -0
- package/dist/infra/cipher/llm/response-validator.d.ts +89 -0
- package/dist/infra/cipher/llm/response-validator.js +157 -0
- package/dist/infra/cipher/llm/retry/index.d.ts +10 -0
- package/dist/infra/cipher/llm/retry/index.js +10 -0
- package/dist/infra/cipher/llm/retry/retry-policy.d.ts +74 -0
- package/dist/infra/cipher/llm/retry/retry-policy.js +146 -0
- package/dist/infra/cipher/llm/retry/retry-with-backoff.d.ts +113 -0
- package/dist/infra/cipher/llm/retry/retry-with-backoff.js +247 -0
- package/dist/infra/cipher/llm/thought-parser.d.ts +145 -0
- package/dist/infra/cipher/llm/thought-parser.js +190 -0
- package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.d.ts +47 -0
- package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.js +55 -0
- package/dist/infra/cipher/llm/tokenizers/default-tokenizer.d.ts +31 -0
- package/dist/infra/cipher/llm/tokenizers/default-tokenizer.js +38 -0
- package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.d.ts +37 -0
- package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.js +45 -0
- package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.d.ts +29 -0
- package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.js +37 -0
- package/dist/infra/cipher/llm/tool-output-processor.d.ts +117 -0
- package/dist/infra/cipher/llm/tool-output-processor.js +153 -0
- package/dist/infra/cipher/logger/console-logger.d.ts +42 -0
- package/dist/infra/cipher/logger/console-logger.js +63 -0
- package/dist/infra/cipher/logger/event-based-logger.d.ts +54 -0
- package/dist/infra/cipher/logger/event-based-logger.js +92 -0
- package/dist/infra/cipher/memory/index.d.ts +6 -0
- package/dist/infra/cipher/memory/index.js +7 -0
- package/dist/infra/cipher/memory/memory-manager.d.ts +136 -0
- package/dist/infra/cipher/memory/memory-manager.js +523 -0
- package/dist/infra/cipher/parsers/coding-agent-log-parser.d.ts +24 -0
- package/dist/infra/cipher/parsers/coding-agent-log-parser.js +51 -0
- package/dist/infra/cipher/process/command-validator.d.ts +59 -0
- package/dist/infra/cipher/process/command-validator.js +266 -0
- package/dist/infra/cipher/process/index.d.ts +8 -0
- package/dist/infra/cipher/process/index.js +8 -0
- package/dist/infra/cipher/process/process-service.d.ts +95 -0
- package/dist/infra/cipher/process/process-service.js +439 -0
- package/dist/infra/cipher/session/chat-session.d.ts +80 -0
- package/dist/infra/cipher/session/chat-session.js +165 -0
- package/dist/infra/cipher/session/index.d.ts +6 -0
- package/dist/infra/cipher/session/index.js +5 -0
- package/dist/infra/cipher/session/session-event-forwarder.d.ts +37 -0
- package/dist/infra/cipher/session/session-event-forwarder.js +83 -0
- package/dist/infra/cipher/session/session-manager.d.ts +109 -0
- package/dist/infra/cipher/session/session-manager.js +172 -0
- package/dist/infra/cipher/storage/blob-history-storage.d.ts +76 -0
- package/dist/infra/cipher/storage/blob-history-storage.js +178 -0
- package/dist/infra/cipher/system-prompt/simple-prompt-factory.d.ts +105 -0
- package/dist/infra/cipher/system-prompt/simple-prompt-factory.js +290 -0
- package/dist/infra/cipher/tools/core-tool-scheduler.d.ts +99 -0
- package/dist/infra/cipher/tools/core-tool-scheduler.js +161 -0
- package/dist/infra/cipher/tools/default-policy-rules.d.ts +26 -0
- package/dist/infra/cipher/tools/default-policy-rules.js +125 -0
- package/dist/infra/cipher/tools/implementations/bash-exec-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/bash-exec-tool.js +93 -0
- package/dist/infra/cipher/tools/implementations/bash-output-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/bash-output-tool.js +47 -0
- package/dist/infra/cipher/tools/implementations/create-knowledge-topic-tool.d.ts +11 -0
- package/dist/infra/cipher/tools/implementations/create-knowledge-topic-tool.js +142 -0
- package/dist/infra/cipher/tools/implementations/delete-memory-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/delete-memory-tool.js +37 -0
- package/dist/infra/cipher/tools/implementations/detect-domains-tool.d.ts +7 -0
- package/dist/infra/cipher/tools/implementations/detect-domains-tool.js +73 -0
- package/dist/infra/cipher/tools/implementations/edit-file-tool.d.ts +13 -0
- package/dist/infra/cipher/tools/implementations/edit-file-tool.js +50 -0
- package/dist/infra/cipher/tools/implementations/edit-memory-tool.d.ts +13 -0
- package/dist/infra/cipher/tools/implementations/edit-memory-tool.js +53 -0
- package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.d.ts +7 -0
- package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.js +421 -0
- package/dist/infra/cipher/tools/implementations/glob-files-tool.d.ts +18 -0
- package/dist/infra/cipher/tools/implementations/glob-files-tool.js +70 -0
- package/dist/infra/cipher/tools/implementations/grep-content-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/grep-content-tool.js +77 -0
- package/dist/infra/cipher/tools/implementations/kill-process-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/kill-process-tool.js +55 -0
- package/dist/infra/cipher/tools/implementations/list-memories-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/list-memories-tool.js +63 -0
- package/dist/infra/cipher/tools/implementations/read-file-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/read-file-tool.js +54 -0
- package/dist/infra/cipher/tools/implementations/read-memory-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/read-memory-tool.js +39 -0
- package/dist/infra/cipher/tools/implementations/search-history-tool.d.ts +10 -0
- package/dist/infra/cipher/tools/implementations/search-history-tool.js +36 -0
- package/dist/infra/cipher/tools/implementations/write-file-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/write-file-tool.js +52 -0
- package/dist/infra/cipher/tools/implementations/write-memory-tool.d.ts +13 -0
- package/dist/infra/cipher/tools/implementations/write-memory-tool.js +52 -0
- package/dist/infra/cipher/tools/implementations/write-todos-tool.d.ts +10 -0
- package/dist/infra/cipher/tools/implementations/write-todos-tool.js +165 -0
- package/dist/infra/cipher/tools/index.d.ts +18 -0
- package/dist/infra/cipher/tools/index.js +19 -0
- package/dist/infra/cipher/tools/policy-engine.d.ts +80 -0
- package/dist/infra/cipher/tools/policy-engine.js +110 -0
- package/dist/infra/cipher/tools/tool-invocation-queue.d.ts +191 -0
- package/dist/infra/cipher/tools/tool-invocation-queue.js +254 -0
- package/dist/infra/cipher/tools/tool-invocation.d.ts +216 -0
- package/dist/infra/cipher/tools/tool-invocation.js +294 -0
- package/dist/infra/cipher/tools/tool-manager.d.ts +135 -0
- package/dist/infra/cipher/tools/tool-manager.js +209 -0
- package/dist/infra/cipher/tools/tool-markers.d.ts +48 -0
- package/dist/infra/cipher/tools/tool-markers.js +49 -0
- package/dist/infra/cipher/tools/tool-provider.d.ts +77 -0
- package/dist/infra/cipher/tools/tool-provider.js +196 -0
- package/dist/infra/cipher/tools/tool-registry.d.ts +52 -0
- package/dist/infra/cipher/tools/tool-registry.js +144 -0
- package/dist/infra/cipher/tools/utils/schema-converter.d.ts +10 -0
- package/dist/infra/cipher/tools/utils/schema-converter.js +29 -0
- package/dist/infra/cipher/validation/workspace-validator.d.ts +19 -0
- package/dist/infra/cipher/validation/workspace-validator.js +37 -0
- package/dist/infra/cipher/watcher/coding-agent-log-watcher.d.ts +14 -0
- package/dist/infra/cipher/watcher/coding-agent-log-watcher.js +55 -0
- package/dist/infra/cogit/context-tree-to-push-context-mapper.d.ts +21 -0
- package/dist/infra/cogit/context-tree-to-push-context-mapper.js +32 -0
- package/dist/infra/cogit/http-cogit-pull-service.d.ts +15 -0
- package/dist/infra/cogit/http-cogit-pull-service.js +30 -0
- package/dist/infra/cogit/http-cogit-push-service.d.ts +17 -0
- package/dist/infra/cogit/http-cogit-push-service.js +104 -0
- package/dist/infra/config/file-config-store.js +9 -3
- package/dist/infra/context-tree/file-context-file-reader.d.ts +14 -0
- package/dist/infra/context-tree/file-context-file-reader.js +46 -0
- package/dist/infra/context-tree/file-context-tree-service.d.ts +14 -0
- package/dist/infra/context-tree/file-context-tree-service.js +46 -0
- package/dist/infra/context-tree/file-context-tree-snapshot-service.d.ts +34 -0
- package/dist/infra/context-tree/file-context-tree-snapshot-service.js +117 -0
- package/dist/infra/context-tree/file-context-tree-writer-service.d.ts +22 -0
- package/dist/infra/context-tree/file-context-tree-writer-service.js +61 -0
- package/dist/infra/memory/http-memory-retrieval-service.js +2 -1
- package/dist/infra/memory/http-memory-storage-service.js +4 -3
- package/dist/infra/parsers/clean/clean-claude-service.d.ts +111 -0
- package/dist/infra/parsers/clean/clean-claude-service.js +271 -0
- package/dist/infra/parsers/clean/clean-codex-service.d.ts +231 -0
- package/dist/infra/parsers/clean/clean-codex-service.js +534 -0
- package/dist/infra/parsers/clean/clean-copilot-service.d.ts +255 -0
- package/dist/infra/parsers/clean/clean-copilot-service.js +729 -0
- package/dist/infra/parsers/clean/clean-cursor-service.d.ts +161 -0
- package/dist/infra/parsers/clean/clean-cursor-service.js +432 -0
- package/dist/infra/parsers/clean/clean-parser-service-factory.d.ts +54 -0
- package/dist/infra/parsers/clean/clean-parser-service-factory.js +80 -0
- package/dist/infra/parsers/clean/shared.d.ts +84 -0
- package/dist/infra/parsers/clean/shared.js +273 -0
- package/dist/infra/parsers/raw/raw-claude-service.d.ts +195 -0
- package/dist/infra/parsers/raw/raw-claude-service.js +548 -0
- package/dist/infra/parsers/raw/raw-codex-service.d.ts +313 -0
- package/dist/infra/parsers/raw/raw-codex-service.js +782 -0
- package/dist/infra/parsers/raw/raw-copilot-service.d.ts +196 -0
- package/dist/infra/parsers/raw/raw-copilot-service.js +558 -0
- package/dist/infra/parsers/raw/raw-cursor-service.d.ts +316 -0
- package/dist/infra/parsers/raw/raw-cursor-service.js +818 -0
- package/dist/infra/parsers/raw/raw-parser-service-factory.d.ts +54 -0
- package/dist/infra/parsers/raw/raw-parser-service-factory.js +81 -0
- package/dist/infra/space/http-space-service.js +2 -1
- package/dist/infra/team/http-team-service.js +2 -1
- package/dist/infra/user/http-user-service.js +2 -1
- package/dist/infra/watcher/file-watcher-service.d.ts +10 -0
- package/dist/infra/watcher/file-watcher-service.js +81 -0
- package/dist/infra/workspace/workspace-detector-service.d.ts +60 -0
- package/dist/infra/workspace/workspace-detector-service.js +165 -0
- package/dist/resources/prompts/curate-context-tree-curation.yml +48 -0
- package/dist/resources/prompts/modes/autonomous.yml +9 -0
- package/dist/resources/prompts/query-context-tree-retrieval.yml +49 -0
- package/dist/resources/prompts/reflection.yml +27 -0
- package/dist/resources/prompts/system-prompt.yml +82 -0
- package/dist/resources/prompts/tool-outputs.yml +30 -0
- package/dist/templates/README.md +6 -7
- package/dist/templates/sections/command-reference.md +40 -111
- package/dist/templates/sections/workflow.md +3 -30
- package/dist/utils/emoji-helpers.d.ts +38 -0
- package/dist/utils/emoji-helpers.js +42 -0
- package/dist/utils/error-handler.d.ts +51 -0
- package/dist/utils/error-handler.js +169 -0
- package/dist/utils/error-helpers.d.ts +30 -0
- package/dist/utils/error-helpers.js +47 -0
- package/dist/utils/file-helpers.d.ts +15 -0
- package/dist/utils/file-helpers.js +44 -0
- package/dist/utils/oclif-error-helpers.d.ts +40 -0
- package/dist/utils/oclif-error-helpers.js +46 -0
- package/dist/utils/tool-display-formatter.d.ts +53 -0
- package/dist/utils/tool-display-formatter.js +257 -0
- package/oclif.manifest.json +381 -141
- package/package.json +27 -6
- package/dist/commands/add.d.ts +0 -49
- package/dist/commands/add.js +0 -192
- package/dist/commands/complete.d.ts +0 -108
- package/dist/commands/complete.js +0 -340
- package/dist/commands/retrieve.d.ts +0 -26
- package/dist/commands/retrieve.js +0 -101
- package/dist/core/domain/entities/curator-output.d.ts +0 -14
- package/dist/core/domain/entities/curator-output.js +0 -23
- package/dist/core/domain/entities/delta-batch.d.ts +0 -30
- package/dist/core/domain/entities/delta-batch.js +0 -52
- package/dist/core/domain/entities/delta-operation.d.ts +0 -31
- package/dist/core/domain/entities/delta-operation.js +0 -50
- package/dist/core/domain/entities/executor-output.d.ts +0 -27
- package/dist/core/domain/entities/executor-output.js +0 -33
- package/dist/core/domain/entities/reflector-output.d.ts +0 -38
- package/dist/core/domain/entities/reflector-output.js +0 -44
- package/dist/core/interfaces/i-ace-prompt-builder.d.ts +0 -48
- package/dist/core/interfaces/i-bullet-content-store.d.ts +0 -36
- package/dist/core/interfaces/i-delta-store.d.ts +0 -15
- package/dist/core/interfaces/i-executor-output-store.d.ts +0 -14
- package/dist/core/interfaces/i-playbook-service.d.ts +0 -69
- package/dist/core/interfaces/i-playbook-store.d.ts +0 -38
- package/dist/core/interfaces/i-reflection-store.d.ts +0 -21
- package/dist/infra/ace/ace-file-utils.d.ts +0 -46
- package/dist/infra/ace/ace-file-utils.js +0 -83
- package/dist/infra/ace/ace-prompt-templates.d.ts +0 -13
- package/dist/infra/ace/ace-prompt-templates.js +0 -177
- package/dist/infra/ace/file-bullet-content-store.d.ts +0 -27
- package/dist/infra/ace/file-bullet-content-store.js +0 -89
- package/dist/infra/ace/file-delta-store.d.ts +0 -9
- package/dist/infra/ace/file-delta-store.js +0 -26
- package/dist/infra/ace/file-executor-output-store.d.ts +0 -9
- package/dist/infra/ace/file-executor-output-store.js +0 -26
- package/dist/infra/ace/file-playbook-store.d.ts +0 -29
- package/dist/infra/ace/file-playbook-store.js +0 -107
- package/dist/infra/ace/file-reflection-store.d.ts +0 -10
- package/dist/infra/ace/file-reflection-store.js +0 -55
- package/dist/infra/playbook/file-playbook-service.d.ts +0 -42
- package/dist/infra/playbook/file-playbook-service.js +0 -132
- /package/dist/core/{interfaces/i-ace-prompt-builder.js → domain/cipher/blob/types.js} +0 -0
- /package/dist/core/{interfaces/i-bullet-content-store.js → domain/cipher/file-system/types.js} +0 -0
- /package/dist/core/{interfaces/i-delta-store.js → domain/cipher/process/types.js} +0 -0
- /package/dist/core/{interfaces/i-executor-output-store.js → domain/cipher/session/types.js} +0 -0
- /package/dist/core/{interfaces/i-playbook-service.js → domain/cipher/storage/history-types.js} +0 -0
- /package/dist/core/{interfaces/i-playbook-store.js → domain/cipher/system-prompt/types.js} +0 -0
- /package/dist/core/{interfaces/i-reflection-store.js → domain/cipher/tools/types.js} +0 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ITokenizer } from '../../../../core/interfaces/cipher/i-tokenizer.js';
|
|
2
|
+
/**
|
|
3
|
+
* Default fallback tokenizer for unknown or unsupported models.
|
|
4
|
+
*
|
|
5
|
+
* This tokenizer provides a generic character-based approximation
|
|
6
|
+
* that can be used when no provider-specific tokenizer is available.
|
|
7
|
+
* It uses a simple heuristic that works reasonably well for English text.
|
|
8
|
+
*/
|
|
9
|
+
export declare class DefaultTokenizer implements ITokenizer {
|
|
10
|
+
/**
|
|
11
|
+
* Approximates token count using a character-based heuristic.
|
|
12
|
+
*
|
|
13
|
+
* Assumes roughly 4 characters per token, which is a common approximation
|
|
14
|
+
* for English text with modern tokenizers (like GPT, Claude, Gemini).
|
|
15
|
+
*
|
|
16
|
+
* This heuristic may be less accurate for:
|
|
17
|
+
* - Non-English languages (especially character-based languages)
|
|
18
|
+
* - Code (which often has different tokenization patterns)
|
|
19
|
+
* - Text with many special characters or formatting
|
|
20
|
+
*
|
|
21
|
+
* @param text - Text content to count tokens for
|
|
22
|
+
* @returns Approximate number of tokens
|
|
23
|
+
*/
|
|
24
|
+
countTokens(text: string): number;
|
|
25
|
+
/**
|
|
26
|
+
* Gets the provider name for this tokenizer.
|
|
27
|
+
*
|
|
28
|
+
* @returns 'default' as the provider identifier
|
|
29
|
+
*/
|
|
30
|
+
getProviderName(): string;
|
|
31
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default fallback tokenizer for unknown or unsupported models.
|
|
3
|
+
*
|
|
4
|
+
* This tokenizer provides a generic character-based approximation
|
|
5
|
+
* that can be used when no provider-specific tokenizer is available.
|
|
6
|
+
* It uses a simple heuristic that works reasonably well for English text.
|
|
7
|
+
*/
|
|
8
|
+
export class DefaultTokenizer {
|
|
9
|
+
/**
|
|
10
|
+
* Approximates token count using a character-based heuristic.
|
|
11
|
+
*
|
|
12
|
+
* Assumes roughly 4 characters per token, which is a common approximation
|
|
13
|
+
* for English text with modern tokenizers (like GPT, Claude, Gemini).
|
|
14
|
+
*
|
|
15
|
+
* This heuristic may be less accurate for:
|
|
16
|
+
* - Non-English languages (especially character-based languages)
|
|
17
|
+
* - Code (which often has different tokenization patterns)
|
|
18
|
+
* - Text with many special characters or formatting
|
|
19
|
+
*
|
|
20
|
+
* @param text - Text content to count tokens for
|
|
21
|
+
* @returns Approximate number of tokens
|
|
22
|
+
*/
|
|
23
|
+
countTokens(text) {
|
|
24
|
+
if (!text) {
|
|
25
|
+
return 0;
|
|
26
|
+
}
|
|
27
|
+
// Simple heuristic: ~4 characters per token
|
|
28
|
+
return Math.ceil(text.length / 4);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Gets the provider name for this tokenizer.
|
|
32
|
+
*
|
|
33
|
+
* @returns 'default' as the provider identifier
|
|
34
|
+
*/
|
|
35
|
+
getProviderName() {
|
|
36
|
+
return 'default';
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ITokenizer } from '../../../../core/interfaces/cipher/i-tokenizer.js';
|
|
2
|
+
/**
|
|
3
|
+
* Tokenizer for Google Gemini 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
|
+
* asynchronous nature of the official Gemini countTokens API.
|
|
8
|
+
*
|
|
9
|
+
* TODO: Consider these improvements:
|
|
10
|
+
* 1. Use the official @google/genai countTokens method (requires async handling)
|
|
11
|
+
* 2. Implement a WASM-based tokenizer for accurate synchronous counting
|
|
12
|
+
* 3. Cache token counts for frequently used text
|
|
13
|
+
* 4. Model-specific adjustments based on actual Gemini tokenization patterns
|
|
14
|
+
*/
|
|
15
|
+
export declare class GeminiTokenizer implements ITokenizer {
|
|
16
|
+
private readonly modelName;
|
|
17
|
+
/**
|
|
18
|
+
* Creates a new Gemini tokenizer instance.
|
|
19
|
+
*
|
|
20
|
+
* @param model - The Gemini model name (e.g., 'gemini-2.5-flash', 'gemini-pro')
|
|
21
|
+
* Currently not used for approximation, but stored for future improvements
|
|
22
|
+
*/
|
|
23
|
+
constructor(model: string);
|
|
24
|
+
/**
|
|
25
|
+
* Approximates the token count for Google Gemini models.
|
|
26
|
+
*
|
|
27
|
+
* Uses a rough character-based approximation: ~4 characters per token.
|
|
28
|
+
* This is based on common estimates for English text with modern tokenizers.
|
|
29
|
+
*
|
|
30
|
+
* IMPORTANT: This is NOT accurate for Gemini models and should be replaced
|
|
31
|
+
* with a proper implementation when possible.
|
|
32
|
+
*
|
|
33
|
+
* @param text - Text content to count tokens for
|
|
34
|
+
* @returns Approximate number of tokens
|
|
35
|
+
*/
|
|
36
|
+
countTokens(text: string): number;
|
|
37
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tokenizer for Google Gemini 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
|
+
* asynchronous nature of the official Gemini countTokens API.
|
|
7
|
+
*
|
|
8
|
+
* TODO: Consider these improvements:
|
|
9
|
+
* 1. Use the official @google/genai countTokens method (requires async handling)
|
|
10
|
+
* 2. Implement a WASM-based tokenizer for accurate synchronous counting
|
|
11
|
+
* 3. Cache token counts for frequently used text
|
|
12
|
+
* 4. Model-specific adjustments based on actual Gemini tokenization patterns
|
|
13
|
+
*/
|
|
14
|
+
export class GeminiTokenizer {
|
|
15
|
+
modelName;
|
|
16
|
+
/**
|
|
17
|
+
* Creates a new Gemini tokenizer instance.
|
|
18
|
+
*
|
|
19
|
+
* @param model - The Gemini model name (e.g., 'gemini-2.5-flash', 'gemini-pro')
|
|
20
|
+
* Currently not used for approximation, but stored for future improvements
|
|
21
|
+
*/
|
|
22
|
+
constructor(model) {
|
|
23
|
+
this.modelName = model;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Approximates the token count for Google Gemini models.
|
|
27
|
+
*
|
|
28
|
+
* Uses a rough character-based approximation: ~4 characters per token.
|
|
29
|
+
* This is based on common estimates for English text with modern tokenizers.
|
|
30
|
+
*
|
|
31
|
+
* IMPORTANT: This is NOT accurate for Gemini models and should be replaced
|
|
32
|
+
* with a proper implementation when possible.
|
|
33
|
+
*
|
|
34
|
+
* @param text - Text content to count tokens for
|
|
35
|
+
* @returns Approximate number of tokens
|
|
36
|
+
*/
|
|
37
|
+
countTokens(text) {
|
|
38
|
+
if (!text) {
|
|
39
|
+
return 0;
|
|
40
|
+
}
|
|
41
|
+
// Rough approximation: ~4 characters per token
|
|
42
|
+
// This is a simplified heuristic and varies by language and content type
|
|
43
|
+
return Math.ceil(text.length / 4);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ITokenizer } from '../../../../core/interfaces/cipher/i-tokenizer.js';
|
|
2
|
+
/**
|
|
3
|
+
* Tokenizer for OpenRouter API.
|
|
4
|
+
*
|
|
5
|
+
* OpenRouter supports multiple model providers (OpenAI, Anthropic, etc.),
|
|
6
|
+
* each with different tokenization schemes. This tokenizer provides a
|
|
7
|
+
* generic approximation that works reasonably well across different models.
|
|
8
|
+
*
|
|
9
|
+
* For more accurate token counting, model-specific tokenizers could be
|
|
10
|
+
* implemented based on the selected model's provider.
|
|
11
|
+
*/
|
|
12
|
+
export declare class OpenRouterTokenizer implements ITokenizer {
|
|
13
|
+
/**
|
|
14
|
+
* Approximates token count using a character-based heuristic.
|
|
15
|
+
*
|
|
16
|
+
* Uses ~4 characters per token, which is a common approximation
|
|
17
|
+
* for modern tokenizers (GPT, Claude, Gemini, etc.).
|
|
18
|
+
*
|
|
19
|
+
* @param text - Text content to count tokens for
|
|
20
|
+
* @returns Approximate number of tokens
|
|
21
|
+
*/
|
|
22
|
+
countTokens(text: string): number;
|
|
23
|
+
/**
|
|
24
|
+
* Gets the provider name for this tokenizer.
|
|
25
|
+
*
|
|
26
|
+
* @returns 'openrouter' as the provider identifier
|
|
27
|
+
*/
|
|
28
|
+
getProviderName(): string;
|
|
29
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tokenizer for OpenRouter API.
|
|
3
|
+
*
|
|
4
|
+
* OpenRouter supports multiple model providers (OpenAI, Anthropic, etc.),
|
|
5
|
+
* each with different tokenization schemes. This tokenizer provides a
|
|
6
|
+
* generic approximation that works reasonably well across different models.
|
|
7
|
+
*
|
|
8
|
+
* For more accurate token counting, model-specific tokenizers could be
|
|
9
|
+
* implemented based on the selected model's provider.
|
|
10
|
+
*/
|
|
11
|
+
export class OpenRouterTokenizer {
|
|
12
|
+
/**
|
|
13
|
+
* Approximates token count using a character-based heuristic.
|
|
14
|
+
*
|
|
15
|
+
* Uses ~4 characters per token, which is a common approximation
|
|
16
|
+
* for modern tokenizers (GPT, Claude, Gemini, etc.).
|
|
17
|
+
*
|
|
18
|
+
* @param text - Text content to count tokens for
|
|
19
|
+
* @returns Approximate number of tokens
|
|
20
|
+
*/
|
|
21
|
+
countTokens(text) {
|
|
22
|
+
if (!text) {
|
|
23
|
+
return 0;
|
|
24
|
+
}
|
|
25
|
+
// Simple heuristic: ~4 characters per token
|
|
26
|
+
// This works reasonably well for most OpenRouter models
|
|
27
|
+
return Math.ceil(text.length / 4);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Gets the provider name for this tokenizer.
|
|
31
|
+
*
|
|
32
|
+
* @returns 'openrouter' as the provider identifier
|
|
33
|
+
*/
|
|
34
|
+
getProviderName() {
|
|
35
|
+
return 'openrouter';
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Output Processing Layer
|
|
3
|
+
*
|
|
4
|
+
* Handles truncation and file saving for large tool outputs.
|
|
5
|
+
* Prevents context overflow by truncating outputs while preserving critical information.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Configuration for output truncation behavior
|
|
9
|
+
*/
|
|
10
|
+
export interface TruncationConfig {
|
|
11
|
+
/**
|
|
12
|
+
* Whether to enable truncation
|
|
13
|
+
* @default true
|
|
14
|
+
*/
|
|
15
|
+
enabled?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Number of lines to keep from the end of the output
|
|
18
|
+
* @default 250
|
|
19
|
+
*/
|
|
20
|
+
headLines?: number;
|
|
21
|
+
/**
|
|
22
|
+
* Number of lines to keep from the start of the output
|
|
23
|
+
* @default 250
|
|
24
|
+
*/
|
|
25
|
+
tailLines?: number;
|
|
26
|
+
/**
|
|
27
|
+
* Character threshold for triggering truncation
|
|
28
|
+
* @default 50000
|
|
29
|
+
*/
|
|
30
|
+
threshold?: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Result of output processing
|
|
34
|
+
*/
|
|
35
|
+
export interface ProcessedOutput {
|
|
36
|
+
/**
|
|
37
|
+
* Processed content (truncated if necessary)
|
|
38
|
+
*/
|
|
39
|
+
content: string;
|
|
40
|
+
/**
|
|
41
|
+
* Metadata about the processing
|
|
42
|
+
*/
|
|
43
|
+
metadata?: {
|
|
44
|
+
/**
|
|
45
|
+
* Original content length before truncation
|
|
46
|
+
*/
|
|
47
|
+
originalLength?: number;
|
|
48
|
+
/**
|
|
49
|
+
* Path to file where full output was saved
|
|
50
|
+
*/
|
|
51
|
+
savedToFile?: string;
|
|
52
|
+
/**
|
|
53
|
+
* Whether output was truncated
|
|
54
|
+
*/
|
|
55
|
+
truncated?: boolean;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Default truncation configuration
|
|
60
|
+
*/
|
|
61
|
+
export declare const DEFAULT_TRUNCATION_CONFIG: Required<TruncationConfig>;
|
|
62
|
+
/**
|
|
63
|
+
* Tool output processor with truncation and file saving capabilities
|
|
64
|
+
*/
|
|
65
|
+
export declare class ToolOutputProcessor {
|
|
66
|
+
private readonly config;
|
|
67
|
+
/**
|
|
68
|
+
* Create a new tool output processor
|
|
69
|
+
*
|
|
70
|
+
* @param config - Truncation configuration
|
|
71
|
+
*/
|
|
72
|
+
constructor(config?: TruncationConfig);
|
|
73
|
+
/**
|
|
74
|
+
* Process tool output with truncation and file saving
|
|
75
|
+
*
|
|
76
|
+
* If output exceeds threshold:
|
|
77
|
+
* 1. Saves full output to temp file
|
|
78
|
+
* 2. Returns truncated content (head + tail with omission notice)
|
|
79
|
+
* 3. Includes metadata about truncation
|
|
80
|
+
*
|
|
81
|
+
* @param toolName - Name of the tool that produced the output
|
|
82
|
+
* @param output - Raw tool output (any type, will be stringified)
|
|
83
|
+
* @returns Processed output with metadata
|
|
84
|
+
*/
|
|
85
|
+
processOutput(toolName: string, output: unknown): Promise<ProcessedOutput>;
|
|
86
|
+
/**
|
|
87
|
+
* Save content to a temporary file
|
|
88
|
+
*
|
|
89
|
+
* Creates a unique temp file for storing full tool output.
|
|
90
|
+
*
|
|
91
|
+
* @param toolName - Name of the tool
|
|
92
|
+
* @param content - Content to save
|
|
93
|
+
* @returns Path to saved file
|
|
94
|
+
*/
|
|
95
|
+
private saveToTempFile;
|
|
96
|
+
/**
|
|
97
|
+
* Safely stringify any value
|
|
98
|
+
*
|
|
99
|
+
* Handles circular references and special types.
|
|
100
|
+
*
|
|
101
|
+
* @param value - Value to stringify
|
|
102
|
+
* @returns String representation
|
|
103
|
+
*/
|
|
104
|
+
private stringify;
|
|
105
|
+
/**
|
|
106
|
+
* Truncate content keeping head and tail lines
|
|
107
|
+
*
|
|
108
|
+
* Format:
|
|
109
|
+
* [First N lines]
|
|
110
|
+
* ... [omission notice with line count and file reference] ...
|
|
111
|
+
* [Last N lines]
|
|
112
|
+
*
|
|
113
|
+
* @param content - Content to truncate
|
|
114
|
+
* @returns Truncated content
|
|
115
|
+
*/
|
|
116
|
+
private truncateContent;
|
|
117
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Output Processing Layer
|
|
3
|
+
*
|
|
4
|
+
* Handles truncation and file saving for large tool outputs.
|
|
5
|
+
* Prevents context overflow by truncating outputs while preserving critical information.
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync, promises as fsPromises, mkdirSync } from 'node:fs';
|
|
8
|
+
import { tmpdir } from 'node:os';
|
|
9
|
+
import { join } from 'node:path';
|
|
10
|
+
/**
|
|
11
|
+
* Default truncation configuration
|
|
12
|
+
*/
|
|
13
|
+
export const DEFAULT_TRUNCATION_CONFIG = {
|
|
14
|
+
enabled: true,
|
|
15
|
+
headLines: 250,
|
|
16
|
+
tailLines: 250,
|
|
17
|
+
threshold: 50_000,
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Tool output processor with truncation and file saving capabilities
|
|
21
|
+
*/
|
|
22
|
+
export class ToolOutputProcessor {
|
|
23
|
+
config;
|
|
24
|
+
/**
|
|
25
|
+
* Create a new tool output processor
|
|
26
|
+
*
|
|
27
|
+
* @param config - Truncation configuration
|
|
28
|
+
*/
|
|
29
|
+
constructor(config) {
|
|
30
|
+
this.config = {
|
|
31
|
+
...DEFAULT_TRUNCATION_CONFIG,
|
|
32
|
+
...config,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Process tool output with truncation and file saving
|
|
37
|
+
*
|
|
38
|
+
* If output exceeds threshold:
|
|
39
|
+
* 1. Saves full output to temp file
|
|
40
|
+
* 2. Returns truncated content (head + tail with omission notice)
|
|
41
|
+
* 3. Includes metadata about truncation
|
|
42
|
+
*
|
|
43
|
+
* @param toolName - Name of the tool that produced the output
|
|
44
|
+
* @param output - Raw tool output (any type, will be stringified)
|
|
45
|
+
* @returns Processed output with metadata
|
|
46
|
+
*/
|
|
47
|
+
async processOutput(toolName, output) {
|
|
48
|
+
// Convert output to string
|
|
49
|
+
const contentString = this.stringify(output);
|
|
50
|
+
const originalLength = contentString.length;
|
|
51
|
+
// Check if truncation is needed
|
|
52
|
+
if (!this.config.enabled || originalLength <= this.config.threshold) {
|
|
53
|
+
return {
|
|
54
|
+
content: contentString,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
// Save full output to temp file
|
|
58
|
+
const savedFilePath = await this.saveToTempFile(toolName, contentString);
|
|
59
|
+
// Truncate content
|
|
60
|
+
const truncatedContent = this.truncateContent(contentString);
|
|
61
|
+
return {
|
|
62
|
+
content: truncatedContent,
|
|
63
|
+
metadata: {
|
|
64
|
+
originalLength,
|
|
65
|
+
savedToFile: savedFilePath,
|
|
66
|
+
truncated: true,
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Save content to a temporary file
|
|
72
|
+
*
|
|
73
|
+
* Creates a unique temp file for storing full tool output.
|
|
74
|
+
*
|
|
75
|
+
* @param toolName - Name of the tool
|
|
76
|
+
* @param content - Content to save
|
|
77
|
+
* @returns Path to saved file
|
|
78
|
+
*/
|
|
79
|
+
async saveToTempFile(toolName, content) {
|
|
80
|
+
// Create temp directory if it doesn't exist
|
|
81
|
+
const tempDir = join(tmpdir(), 'byterover-tool-outputs');
|
|
82
|
+
if (!existsSync(tempDir)) {
|
|
83
|
+
mkdirSync(tempDir, { recursive: true });
|
|
84
|
+
}
|
|
85
|
+
// Generate unique filename
|
|
86
|
+
const timestamp = Date.now();
|
|
87
|
+
const sanitizedToolName = toolName.replaceAll(/[^a-z0-9-_]/gi, '_');
|
|
88
|
+
const filename = `${sanitizedToolName}_${timestamp}.txt`;
|
|
89
|
+
const filePath = join(tempDir, filename);
|
|
90
|
+
// Write content to file
|
|
91
|
+
await fsPromises.writeFile(filePath, content, 'utf8');
|
|
92
|
+
return filePath;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Safely stringify any value
|
|
96
|
+
*
|
|
97
|
+
* Handles circular references and special types.
|
|
98
|
+
*
|
|
99
|
+
* @param value - Value to stringify
|
|
100
|
+
* @returns String representation
|
|
101
|
+
*/
|
|
102
|
+
stringify(value) {
|
|
103
|
+
if (typeof value === 'string') {
|
|
104
|
+
return value;
|
|
105
|
+
}
|
|
106
|
+
if (value === null || value === undefined) {
|
|
107
|
+
return String(value);
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
// Try JSON.stringify with circular reference handling
|
|
111
|
+
return JSON.stringify(value, (_, val) => {
|
|
112
|
+
// Handle circular references by converting to string
|
|
113
|
+
if (typeof val === 'object' && val !== null) {
|
|
114
|
+
return val;
|
|
115
|
+
}
|
|
116
|
+
return val;
|
|
117
|
+
}, 2);
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
// Fallback to String() if JSON.stringify fails
|
|
121
|
+
return String(value);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Truncate content keeping head and tail lines
|
|
126
|
+
*
|
|
127
|
+
* Format:
|
|
128
|
+
* [First N lines]
|
|
129
|
+
* ... [omission notice with line count and file reference] ...
|
|
130
|
+
* [Last N lines]
|
|
131
|
+
*
|
|
132
|
+
* @param content - Content to truncate
|
|
133
|
+
* @returns Truncated content
|
|
134
|
+
*/
|
|
135
|
+
truncateContent(content) {
|
|
136
|
+
const lines = content.split('\n');
|
|
137
|
+
const totalLines = lines.length;
|
|
138
|
+
// Calculate how many lines to keep
|
|
139
|
+
const headLines = Math.min(this.config.headLines, totalLines);
|
|
140
|
+
const tailLines = Math.min(this.config.tailLines, totalLines);
|
|
141
|
+
// If content is small enough to fit, return as-is
|
|
142
|
+
if (headLines + tailLines >= totalLines) {
|
|
143
|
+
return content;
|
|
144
|
+
}
|
|
145
|
+
// Extract head and tail
|
|
146
|
+
const head = lines.slice(0, headLines).join('\n');
|
|
147
|
+
const tail = lines.slice(-tailLines).join('\n');
|
|
148
|
+
// Calculate omitted lines
|
|
149
|
+
const omittedLines = totalLines - headLines - tailLines;
|
|
150
|
+
const omissionNotice = `\n\n... [${omittedLines} lines omitted - full output saved to file] ...\n\n`;
|
|
151
|
+
return head + omissionNotice + tail;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { ILogger } from '../../../core/interfaces/cipher/i-logger.js';
|
|
2
|
+
/**
|
|
3
|
+
* Console-based logger implementation.
|
|
4
|
+
*
|
|
5
|
+
* This is a concrete logger that writes to the console with color formatting.
|
|
6
|
+
* Used at the command/presentation layer to display logs to the user.
|
|
7
|
+
*
|
|
8
|
+
* Design principles:
|
|
9
|
+
* - Only used in command layer (not in domain/infrastructure)
|
|
10
|
+
* - Formats messages with chalk for better UX
|
|
11
|
+
* - Includes timestamps for debugging
|
|
12
|
+
* - Can be swapped with other implementations (file, remote, etc.)
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const logger = new ConsoleLogger({ verbose: true });
|
|
17
|
+
* logger.info('Server started', { port: 3000 });
|
|
18
|
+
* // Output: [2025-01-26 10:30:45] INFO: Server started {"port":3000}
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare class ConsoleLogger implements ILogger {
|
|
22
|
+
private readonly verbose;
|
|
23
|
+
/**
|
|
24
|
+
* Create a new console logger.
|
|
25
|
+
*
|
|
26
|
+
* @param options - Logger options
|
|
27
|
+
* @param options.verbose - Enable verbose (debug) output
|
|
28
|
+
*/
|
|
29
|
+
constructor(options?: {
|
|
30
|
+
verbose?: boolean;
|
|
31
|
+
});
|
|
32
|
+
debug(message: string, context?: Record<string, unknown>): void;
|
|
33
|
+
error(message: string, context?: Record<string, unknown>): void;
|
|
34
|
+
info(message: string, context?: Record<string, unknown>): void;
|
|
35
|
+
warn(message: string, context?: Record<string, unknown>): void;
|
|
36
|
+
/**
|
|
37
|
+
* Format current timestamp for log messages.
|
|
38
|
+
*
|
|
39
|
+
* @returns Formatted timestamp string (YYYY-MM-DD HH:MM:SS)
|
|
40
|
+
*/
|
|
41
|
+
private formatTimestamp;
|
|
42
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
/**
|
|
3
|
+
* Console-based logger implementation.
|
|
4
|
+
*
|
|
5
|
+
* This is a concrete logger that writes to the console with color formatting.
|
|
6
|
+
* Used at the command/presentation layer to display logs to the user.
|
|
7
|
+
*
|
|
8
|
+
* Design principles:
|
|
9
|
+
* - Only used in command layer (not in domain/infrastructure)
|
|
10
|
+
* - Formats messages with chalk for better UX
|
|
11
|
+
* - Includes timestamps for debugging
|
|
12
|
+
* - Can be swapped with other implementations (file, remote, etc.)
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const logger = new ConsoleLogger({ verbose: true });
|
|
17
|
+
* logger.info('Server started', { port: 3000 });
|
|
18
|
+
* // Output: [2025-01-26 10:30:45] INFO: Server started {"port":3000}
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export class ConsoleLogger {
|
|
22
|
+
verbose;
|
|
23
|
+
/**
|
|
24
|
+
* Create a new console logger.
|
|
25
|
+
*
|
|
26
|
+
* @param options - Logger options
|
|
27
|
+
* @param options.verbose - Enable verbose (debug) output
|
|
28
|
+
*/
|
|
29
|
+
constructor(options = {}) {
|
|
30
|
+
this.verbose = options.verbose ?? false;
|
|
31
|
+
}
|
|
32
|
+
debug(message, context) {
|
|
33
|
+
if (!this.verbose)
|
|
34
|
+
return;
|
|
35
|
+
const timestamp = this.formatTimestamp();
|
|
36
|
+
const contextStr = context ? ` ${JSON.stringify(context)}` : '';
|
|
37
|
+
console.log(chalk.gray(`[${timestamp}] DEBUG: ${message}${contextStr}`));
|
|
38
|
+
}
|
|
39
|
+
error(message, context) {
|
|
40
|
+
const timestamp = this.formatTimestamp();
|
|
41
|
+
const contextStr = context ? ` ${JSON.stringify(context)}` : '';
|
|
42
|
+
console.error(chalk.red(`[${timestamp}] ERROR: ${message}${contextStr}`));
|
|
43
|
+
}
|
|
44
|
+
info(message, context) {
|
|
45
|
+
const timestamp = this.formatTimestamp();
|
|
46
|
+
const contextStr = context ? ` ${JSON.stringify(context)}` : '';
|
|
47
|
+
console.log(chalk.cyan(`[${timestamp}] INFO: ${message}${contextStr}`));
|
|
48
|
+
}
|
|
49
|
+
warn(message, context) {
|
|
50
|
+
const timestamp = this.formatTimestamp();
|
|
51
|
+
const contextStr = context ? ` ${JSON.stringify(context)}` : '';
|
|
52
|
+
console.warn(chalk.yellow(`[${timestamp}] WARN: ${message}${contextStr}`));
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Format current timestamp for log messages.
|
|
56
|
+
*
|
|
57
|
+
* @returns Formatted timestamp string (YYYY-MM-DD HH:MM:SS)
|
|
58
|
+
*/
|
|
59
|
+
formatTimestamp() {
|
|
60
|
+
const now = new Date();
|
|
61
|
+
return now.toISOString().replace('T', ' ').slice(0, 19);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { ILogger } from '../../../core/interfaces/cipher/i-logger.js';
|
|
2
|
+
import type { AgentEventBus } from '../events/event-emitter.js';
|
|
3
|
+
/**
|
|
4
|
+
* Event-based logger that emits cipher:log events instead of writing directly.
|
|
5
|
+
*
|
|
6
|
+
* This follows Clean Architecture by decoupling logging from infrastructure.
|
|
7
|
+
* The logger emits events that can be handled by any listener (console, file, remote, etc.).
|
|
8
|
+
*
|
|
9
|
+
* Design principles:
|
|
10
|
+
* - Domain/infrastructure layers use this logger
|
|
11
|
+
* - Events are emitted to AgentEventBus
|
|
12
|
+
* - Command layer listens to events and decides how to handle them
|
|
13
|
+
* - Supports optional source and sessionId for context tracking
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const logger = new EventBasedLogger(agentBus, 'MyService');
|
|
18
|
+
* logger.info('User logged in', { userId: '123' });
|
|
19
|
+
* // Emits: cipher:log { level: 'info', message: '...', source: 'MyService', ... }
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare class EventBasedLogger implements ILogger {
|
|
23
|
+
private readonly eventBus;
|
|
24
|
+
private readonly source?;
|
|
25
|
+
private readonly sessionId?;
|
|
26
|
+
/**
|
|
27
|
+
* Create a new event-based logger.
|
|
28
|
+
*
|
|
29
|
+
* @param eventBus - Agent event bus to emit log events to
|
|
30
|
+
* @param source - Optional source identifier (e.g., class name)
|
|
31
|
+
* @param sessionId - Optional session ID for session-scoped logs
|
|
32
|
+
*/
|
|
33
|
+
constructor(eventBus: AgentEventBus, source?: string | undefined, sessionId?: string | undefined);
|
|
34
|
+
debug(message: string, context?: Record<string, unknown>): void;
|
|
35
|
+
error(message: string, context?: Record<string, unknown>): void;
|
|
36
|
+
info(message: string, context?: Record<string, unknown>): void;
|
|
37
|
+
warn(message: string, context?: Record<string, unknown>): void;
|
|
38
|
+
/**
|
|
39
|
+
* Create a child logger with a different session ID.
|
|
40
|
+
* Useful for creating session-scoped loggers.
|
|
41
|
+
*
|
|
42
|
+
* @param sessionId - Session ID for the child logger
|
|
43
|
+
* @returns New logger instance with the specified session ID
|
|
44
|
+
*/
|
|
45
|
+
withSessionId(sessionId: string): EventBasedLogger;
|
|
46
|
+
/**
|
|
47
|
+
* Create a child logger with a different source.
|
|
48
|
+
* Useful for creating component-scoped loggers.
|
|
49
|
+
*
|
|
50
|
+
* @param source - Source identifier for the child logger
|
|
51
|
+
* @returns New logger instance with the specified source
|
|
52
|
+
*/
|
|
53
|
+
withSource(source: string): EventBasedLogger;
|
|
54
|
+
}
|