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,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clean Parser Service Factory
|
|
3
|
+
* Routes IDE-based clean parsing requests to the appropriate clean parser service
|
|
4
|
+
* Supports: Claude Code, Cursor, GitHub Copilot, Codex
|
|
5
|
+
*/
|
|
6
|
+
import { ClaudeCleanService } from './clean-claude-service.js';
|
|
7
|
+
import { CodexCleanService } from './clean-codex-service.js';
|
|
8
|
+
import { CopilotCleanService } from './clean-copilot-service.js';
|
|
9
|
+
import { CursorCleanService } from './clean-cursor-service.js';
|
|
10
|
+
/**
|
|
11
|
+
* Clean Parser Service Factory
|
|
12
|
+
* Creates and returns appropriate clean parser service for the given IDE
|
|
13
|
+
*/
|
|
14
|
+
export class CleanParserServiceFactory {
|
|
15
|
+
static SUPPORTED_IDES = ['Claude Code', 'Cursor', 'Github Copilot', 'Codex'];
|
|
16
|
+
/**
|
|
17
|
+
* Create a clean parser service for the specified IDE
|
|
18
|
+
*
|
|
19
|
+
* Factory method that instantiates the appropriate clean parser service
|
|
20
|
+
* based on the provided IDE type. Routes to specialized service classes.
|
|
21
|
+
*
|
|
22
|
+
* @param ide - The IDE type: 'Claude Code', 'Cursor', 'Github Copilot', or 'Codex'
|
|
23
|
+
* @returns The appropriate clean parser service instance
|
|
24
|
+
* @throws Error if IDE is not supported
|
|
25
|
+
*/
|
|
26
|
+
static createCleanParserService(ide) {
|
|
27
|
+
switch (ide) {
|
|
28
|
+
case 'Claude Code': {
|
|
29
|
+
return new ClaudeCleanService(ide);
|
|
30
|
+
}
|
|
31
|
+
case 'Codex': {
|
|
32
|
+
return new CodexCleanService(ide);
|
|
33
|
+
}
|
|
34
|
+
case 'Cursor': {
|
|
35
|
+
return new CursorCleanService(ide);
|
|
36
|
+
}
|
|
37
|
+
case 'Github Copilot': {
|
|
38
|
+
return new CopilotCleanService(ide);
|
|
39
|
+
}
|
|
40
|
+
default: {
|
|
41
|
+
throw new Error(`Unsupported IDE: ${ide}. Supported IDEs are: claude, cursor, copilot, codex`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get list of supported IDEs
|
|
47
|
+
*
|
|
48
|
+
* Returns array of all IDE types that have corresponding clean parser services.
|
|
49
|
+
*
|
|
50
|
+
* @returns Array of supported IDE type strings
|
|
51
|
+
*/
|
|
52
|
+
static getSupportedIDEs() {
|
|
53
|
+
return [...this.SUPPORTED_IDES];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Check if IDE is supported
|
|
57
|
+
*
|
|
58
|
+
* Validates whether the provided IDE string corresponds to a supported IDE.
|
|
59
|
+
*
|
|
60
|
+
* @param ide - IDE name to validate
|
|
61
|
+
* @returns True if IDE is in supported list, false otherwise
|
|
62
|
+
*/
|
|
63
|
+
static isSupported(ide) {
|
|
64
|
+
return this.getSupportedIDEs().includes(ide);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Parse and clean conversations for the specified IDE
|
|
68
|
+
*
|
|
69
|
+
* Creates appropriate service and delegates to its parse method to transform
|
|
70
|
+
* raw session data into clean normalized format. Returns sessions in-memory.
|
|
71
|
+
*
|
|
72
|
+
* @param ide - The IDE type (Claude Code, Cursor, Github Copilot, Codex)
|
|
73
|
+
* @param rawDir - Path to directory containing raw session files
|
|
74
|
+
* @returns Promise resolving to array of clean normalized sessions
|
|
75
|
+
*/
|
|
76
|
+
static async parseConversations(ide, rawDir) {
|
|
77
|
+
const service = this.createCleanParserService(ide);
|
|
78
|
+
return service.parse(rawDir);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared transformation utilities for all clean parsers
|
|
3
|
+
* Provides centralized session normalization implementation
|
|
4
|
+
*/
|
|
5
|
+
import { CleanMessage, CleanSession, ContentBlock, SessionType } from '../../../core/domain/entities/parser.js';
|
|
6
|
+
import { ISessionNormalizer } from '../../../core/interfaces/parser/i-session-normalizer.js';
|
|
7
|
+
/**
|
|
8
|
+
* Session Normalizer implementation
|
|
9
|
+
* Provides shared normalization utilities for all clean parsers
|
|
10
|
+
*/
|
|
11
|
+
export declare class SessionNormalizer implements ISessionNormalizer {
|
|
12
|
+
/**
|
|
13
|
+
* Add turn_id to each message based on timestamp order
|
|
14
|
+
*
|
|
15
|
+
* Assigns sequential turn_id values (1-based) to all messages to track
|
|
16
|
+
* their order in the conversation.
|
|
17
|
+
*
|
|
18
|
+
* @param messages - Array of messages to assign turn IDs to
|
|
19
|
+
* @returns Array of messages with turn_id property added
|
|
20
|
+
*/
|
|
21
|
+
addTurnIds(messages: CleanMessage[]): CleanMessage[];
|
|
22
|
+
/**
|
|
23
|
+
* Combine tool_use and tool_result messages
|
|
24
|
+
*
|
|
25
|
+
* Merges separate tool_use and tool_result content blocks into single blocks
|
|
26
|
+
* with embedded output. Removes standalone tool_result blocks after combining.
|
|
27
|
+
* Two-pass algorithm: first collect results by ID, then merge with tool_use blocks.
|
|
28
|
+
*
|
|
29
|
+
* @param messages - Array of clean messages to process
|
|
30
|
+
* @returns Array of messages with combined tool execution blocks
|
|
31
|
+
*/
|
|
32
|
+
combineToolResults(messages: CleanMessage[]): CleanMessage[];
|
|
33
|
+
/**
|
|
34
|
+
* Extract unique workspace paths from session messages and metadata
|
|
35
|
+
*
|
|
36
|
+
* Collects workspace paths from multiple sources: existing paths, message cwd properties,
|
|
37
|
+
* and metadata cwd property. Removes duplicates and sorts alphabetically.
|
|
38
|
+
*
|
|
39
|
+
* @param messages - Array of clean messages to extract paths from
|
|
40
|
+
* @param metadata - Session metadata object (may contain cwd property)
|
|
41
|
+
* @param existingPaths - Optional pre-existing paths to include
|
|
42
|
+
* @returns Sorted array of unique workspace paths
|
|
43
|
+
*/
|
|
44
|
+
extractWorkspacePaths(messages: CleanMessage[], metadata: unknown, existingPaths?: string[]): string[];
|
|
45
|
+
/**
|
|
46
|
+
* Normalize message content to always be an array of content blocks
|
|
47
|
+
*
|
|
48
|
+
* Converts various content formats (string, array, object) into a standardized
|
|
49
|
+
* array of ContentBlock objects for consistent processing.
|
|
50
|
+
*
|
|
51
|
+
* @param content - Content to normalize (can be string, array of blocks, object, or any value)
|
|
52
|
+
* @returns Array of normalized ContentBlock objects
|
|
53
|
+
*/
|
|
54
|
+
normalizeContent(content: unknown): ContentBlock[];
|
|
55
|
+
/**
|
|
56
|
+
* Normalize a single content block
|
|
57
|
+
*
|
|
58
|
+
* Converts a block into a properly typed ContentBlock. Infers the block type
|
|
59
|
+
* from its properties if not explicitly specified (text, thinking, tool_use, tool_result).
|
|
60
|
+
*
|
|
61
|
+
* @param block - Block to normalize (string, object, or any value)
|
|
62
|
+
* @returns Normalized ContentBlock with proper type inference
|
|
63
|
+
*/
|
|
64
|
+
normalizeContentBlock(block: unknown): ContentBlock;
|
|
65
|
+
/**
|
|
66
|
+
* Normalize Claude session format
|
|
67
|
+
*
|
|
68
|
+
* Transforms raw session data into standardized CleanSession format. Normalizes message
|
|
69
|
+
* content to content blocks, combines tool calls with results, assigns turn IDs,
|
|
70
|
+
* and extracts workspace paths. Handles sessions from Claude, Copilot, Cursor, and Codex.
|
|
71
|
+
*
|
|
72
|
+
* @param session - Raw session object with messages and metadata
|
|
73
|
+
* @param sessionType - Type of session (Claude, Copilot, Cursor, Codex)
|
|
74
|
+
* @returns Normalized CleanSession with standardized format
|
|
75
|
+
*/
|
|
76
|
+
normalizeSession(session: Record<string, unknown>, sessionType?: SessionType): CleanSession;
|
|
77
|
+
}
|
|
78
|
+
export declare const sessionNormalizer: SessionNormalizer;
|
|
79
|
+
export declare function normalizeClaudeSession(session: Record<string, unknown>, sessionType?: SessionType): CleanSession;
|
|
80
|
+
export declare function normalizeContent(content: unknown): ContentBlock[];
|
|
81
|
+
export declare function normalizeContentBlock(block: unknown): ContentBlock;
|
|
82
|
+
export declare function combineToolResults(messages: CleanMessage[]): CleanMessage[];
|
|
83
|
+
export declare function addTurnIds(messages: CleanMessage[]): CleanMessage[];
|
|
84
|
+
export declare function extractWorkspacePaths(messages: CleanMessage[], metadata: unknown, existingPaths?: string[]): string[];
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared transformation utilities for all clean parsers
|
|
3
|
+
* Provides centralized session normalization implementation
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Session Normalizer implementation
|
|
7
|
+
* Provides shared normalization utilities for all clean parsers
|
|
8
|
+
*/
|
|
9
|
+
export class SessionNormalizer {
|
|
10
|
+
/**
|
|
11
|
+
* Add turn_id to each message based on timestamp order
|
|
12
|
+
*
|
|
13
|
+
* Assigns sequential turn_id values (1-based) to all messages to track
|
|
14
|
+
* their order in the conversation.
|
|
15
|
+
*
|
|
16
|
+
* @param messages - Array of messages to assign turn IDs to
|
|
17
|
+
* @returns Array of messages with turn_id property added
|
|
18
|
+
*/
|
|
19
|
+
addTurnIds(messages) {
|
|
20
|
+
return messages.map((msg, index) => ({
|
|
21
|
+
...msg,
|
|
22
|
+
// eslint-disable-next-line camelcase
|
|
23
|
+
turn_id: index + 1,
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Combine tool_use and tool_result messages
|
|
28
|
+
*
|
|
29
|
+
* Merges separate tool_use and tool_result content blocks into single blocks
|
|
30
|
+
* with embedded output. Removes standalone tool_result blocks after combining.
|
|
31
|
+
* Two-pass algorithm: first collect results by ID, then merge with tool_use blocks.
|
|
32
|
+
*
|
|
33
|
+
* @param messages - Array of clean messages to process
|
|
34
|
+
* @returns Array of messages with combined tool execution blocks
|
|
35
|
+
*/
|
|
36
|
+
combineToolResults(messages) {
|
|
37
|
+
const combined = [];
|
|
38
|
+
const toolResults = {};
|
|
39
|
+
// First pass: collect tool results by tool_use_id
|
|
40
|
+
for (const msg of messages) {
|
|
41
|
+
for (const block of msg.content) {
|
|
42
|
+
if (block.type === 'tool_result') {
|
|
43
|
+
const toolBlock = block;
|
|
44
|
+
toolResults[toolBlock.tool_use_id] = toolBlock;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Second pass: combine tool_use with results
|
|
49
|
+
for (const msg of messages) {
|
|
50
|
+
const combinedContent = [];
|
|
51
|
+
for (const block of msg.content) {
|
|
52
|
+
if (block.type === 'tool_use') {
|
|
53
|
+
const toolBlock = block;
|
|
54
|
+
if (toolBlock.id && toolResults[toolBlock.id]) {
|
|
55
|
+
// Attach result to tool_use, preserving tool_use_id
|
|
56
|
+
const result = toolResults[toolBlock.id];
|
|
57
|
+
const resultData = { ...result };
|
|
58
|
+
delete resultData.tool_use_id;
|
|
59
|
+
combinedContent.push({
|
|
60
|
+
...toolBlock,
|
|
61
|
+
output: resultData,
|
|
62
|
+
// eslint-disable-next-line camelcase
|
|
63
|
+
tool_use_id: toolBlock.id,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
combinedContent.push(block);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else if (block.type !== 'tool_result') {
|
|
71
|
+
// Skip tool_result blocks (they're now merged)
|
|
72
|
+
combinedContent.push(block);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (combinedContent.length > 0) {
|
|
76
|
+
combined.push({
|
|
77
|
+
...msg,
|
|
78
|
+
content: combinedContent,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return combined;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Extract unique workspace paths from session messages and metadata
|
|
86
|
+
*
|
|
87
|
+
* Collects workspace paths from multiple sources: existing paths, message cwd properties,
|
|
88
|
+
* and metadata cwd property. Removes duplicates and sorts alphabetically.
|
|
89
|
+
*
|
|
90
|
+
* @param messages - Array of clean messages to extract paths from
|
|
91
|
+
* @param metadata - Session metadata object (may contain cwd property)
|
|
92
|
+
* @param existingPaths - Optional pre-existing paths to include
|
|
93
|
+
* @returns Sorted array of unique workspace paths
|
|
94
|
+
*/
|
|
95
|
+
extractWorkspacePaths(messages, metadata, existingPaths) {
|
|
96
|
+
const paths = new Set();
|
|
97
|
+
// Start with existing paths if provided
|
|
98
|
+
if (existingPaths && Array.isArray(existingPaths)) {
|
|
99
|
+
for (const p of existingPaths) {
|
|
100
|
+
if (p && typeof p === 'string') {
|
|
101
|
+
paths.add(p);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Extract from messages
|
|
106
|
+
for (const msg of messages) {
|
|
107
|
+
const { cwd } = msg;
|
|
108
|
+
if (cwd && typeof cwd === 'string') {
|
|
109
|
+
paths.add(cwd);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Extract from metadata
|
|
113
|
+
if (typeof metadata === 'object' && metadata !== null) {
|
|
114
|
+
const metaObj = metadata;
|
|
115
|
+
if (metaObj.cwd && typeof metaObj.cwd === 'string') {
|
|
116
|
+
paths.add(metaObj.cwd);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return [...paths].sort();
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Normalize message content to always be an array of content blocks
|
|
123
|
+
*
|
|
124
|
+
* Converts various content formats (string, array, object) into a standardized
|
|
125
|
+
* array of ContentBlock objects for consistent processing.
|
|
126
|
+
*
|
|
127
|
+
* @param content - Content to normalize (can be string, array of blocks, object, or any value)
|
|
128
|
+
* @returns Array of normalized ContentBlock objects
|
|
129
|
+
*/
|
|
130
|
+
normalizeContent(content) {
|
|
131
|
+
if (Array.isArray(content)) {
|
|
132
|
+
return content.map((block) => this.normalizeContentBlock(block));
|
|
133
|
+
}
|
|
134
|
+
if (typeof content === 'string') {
|
|
135
|
+
return [
|
|
136
|
+
{
|
|
137
|
+
text: content,
|
|
138
|
+
type: 'text',
|
|
139
|
+
},
|
|
140
|
+
];
|
|
141
|
+
}
|
|
142
|
+
if (typeof content === 'object' && content !== null) {
|
|
143
|
+
return [this.normalizeContentBlock(content)];
|
|
144
|
+
}
|
|
145
|
+
return [];
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Normalize a single content block
|
|
149
|
+
*
|
|
150
|
+
* Converts a block into a properly typed ContentBlock. Infers the block type
|
|
151
|
+
* from its properties if not explicitly specified (text, thinking, tool_use, tool_result).
|
|
152
|
+
*
|
|
153
|
+
* @param block - Block to normalize (string, object, or any value)
|
|
154
|
+
* @returns Normalized ContentBlock with proper type inference
|
|
155
|
+
*/
|
|
156
|
+
normalizeContentBlock(block) {
|
|
157
|
+
if (typeof block === 'string') {
|
|
158
|
+
return {
|
|
159
|
+
text: block,
|
|
160
|
+
type: 'text',
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
if (typeof block !== 'object' || block === null) {
|
|
164
|
+
return { text: String(block), type: 'text' };
|
|
165
|
+
}
|
|
166
|
+
const blockObj = block;
|
|
167
|
+
const normalized = { ...blockObj };
|
|
168
|
+
// Remove redundant 'signature' property
|
|
169
|
+
delete normalized.signature;
|
|
170
|
+
// Ensure proper type for content blocks
|
|
171
|
+
if (!normalized.type) {
|
|
172
|
+
if ('text' in normalized) {
|
|
173
|
+
normalized.type = 'text';
|
|
174
|
+
}
|
|
175
|
+
else if ('thinking' in normalized) {
|
|
176
|
+
normalized.type = 'thinking';
|
|
177
|
+
}
|
|
178
|
+
else if ('name' in normalized && 'input' in normalized) {
|
|
179
|
+
normalized.type = 'tool_use';
|
|
180
|
+
}
|
|
181
|
+
else if ('tool_use_id' in normalized) {
|
|
182
|
+
normalized.type = 'tool_result';
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
normalized.type = 'text';
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return normalized;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Normalize Claude session format
|
|
192
|
+
*
|
|
193
|
+
* Transforms raw session data into standardized CleanSession format. Normalizes message
|
|
194
|
+
* content to content blocks, combines tool calls with results, assigns turn IDs,
|
|
195
|
+
* and extracts workspace paths. Handles sessions from Claude, Copilot, Cursor, and Codex.
|
|
196
|
+
*
|
|
197
|
+
* @param session - Raw session object with messages and metadata
|
|
198
|
+
* @param sessionType - Type of session (Claude, Copilot, Cursor, Codex)
|
|
199
|
+
* @returns Normalized CleanSession with standardized format
|
|
200
|
+
*/
|
|
201
|
+
normalizeSession(session, sessionType = 'Claude') {
|
|
202
|
+
// Normalize messages
|
|
203
|
+
const rawMessages = session.messages || [];
|
|
204
|
+
let normalizedMessages = rawMessages.map((rawMsg) => {
|
|
205
|
+
const msg = rawMsg;
|
|
206
|
+
const msgType = msg.type || 'user';
|
|
207
|
+
const timestamp = msg.timestamp || new Date().toISOString();
|
|
208
|
+
// Normalize content to array format
|
|
209
|
+
const contentArray = this.normalizeContent(msg.content);
|
|
210
|
+
// Set default type for content blocks based on message type
|
|
211
|
+
const processedContent = contentArray.map((block) => {
|
|
212
|
+
if (msgType === 'user' && !block.type) {
|
|
213
|
+
return { ...block, type: 'text' };
|
|
214
|
+
}
|
|
215
|
+
if (msgType === 'assistant' && !block.type) {
|
|
216
|
+
return { ...block, type: 'thinking' };
|
|
217
|
+
}
|
|
218
|
+
return block;
|
|
219
|
+
});
|
|
220
|
+
const normalizedMsg = {
|
|
221
|
+
content: processedContent,
|
|
222
|
+
timestamp,
|
|
223
|
+
type: msgType,
|
|
224
|
+
};
|
|
225
|
+
// Copy over other properties except content, type, and timestamp
|
|
226
|
+
for (const [key, value] of Object.entries(msg)) {
|
|
227
|
+
if (key !== 'content' && key !== 'type' && key !== 'timestamp' && value !== undefined) {
|
|
228
|
+
;
|
|
229
|
+
normalizedMsg[key] = value;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return normalizedMsg;
|
|
233
|
+
});
|
|
234
|
+
// Combine tool_use and tool_result messages
|
|
235
|
+
normalizedMessages = this.combineToolResults(normalizedMessages);
|
|
236
|
+
// Add turn_id based on timestamp order
|
|
237
|
+
normalizedMessages = this.addTurnIds(normalizedMessages);
|
|
238
|
+
// Extract unique workspace paths - preserve existing ones if already set
|
|
239
|
+
const existingPaths = session.workspacePaths || undefined;
|
|
240
|
+
const workspacePaths = this.extractWorkspacePaths(normalizedMessages, session.metadata, existingPaths);
|
|
241
|
+
// Return normalized session
|
|
242
|
+
return {
|
|
243
|
+
id: session.id || '',
|
|
244
|
+
messages: normalizedMessages,
|
|
245
|
+
metadata: session.metadata,
|
|
246
|
+
timestamp: session.timestamp || Date.now(),
|
|
247
|
+
title: session.title || '',
|
|
248
|
+
type: sessionType,
|
|
249
|
+
workspacePaths: workspacePaths.length > 0 ? workspacePaths : [],
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
// Export singleton instance for convenience
|
|
254
|
+
export const sessionNormalizer = new SessionNormalizer();
|
|
255
|
+
// Re-export standalone functions for backward compatibility
|
|
256
|
+
export function normalizeClaudeSession(session, sessionType = 'Claude') {
|
|
257
|
+
return sessionNormalizer.normalizeSession(session, sessionType);
|
|
258
|
+
}
|
|
259
|
+
export function normalizeContent(content) {
|
|
260
|
+
return sessionNormalizer.normalizeContent(content);
|
|
261
|
+
}
|
|
262
|
+
export function normalizeContentBlock(block) {
|
|
263
|
+
return sessionNormalizer.normalizeContentBlock(block);
|
|
264
|
+
}
|
|
265
|
+
export function combineToolResults(messages) {
|
|
266
|
+
return sessionNormalizer.combineToolResults(messages);
|
|
267
|
+
}
|
|
268
|
+
export function addTurnIds(messages) {
|
|
269
|
+
return sessionNormalizer.addTurnIds(messages);
|
|
270
|
+
}
|
|
271
|
+
export function extractWorkspacePaths(messages, metadata, existingPaths) {
|
|
272
|
+
return sessionNormalizer.extractWorkspacePaths(messages, metadata, existingPaths);
|
|
273
|
+
}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code Raw Service
|
|
3
|
+
* Consolidates ClaudeCodeParser + ClaudeRawParser
|
|
4
|
+
* Parses JSONL transcript files from ~/.claude/projects/
|
|
5
|
+
*/
|
|
6
|
+
import { Agent } from '../../../core/domain/entities/agent.js';
|
|
7
|
+
import { IRawParserService } from '../../../core/interfaces/parser/i-raw-parser-service.js';
|
|
8
|
+
/**
|
|
9
|
+
* Claude Raw Service - Wraps parser and handles file I/O and output management
|
|
10
|
+
*/
|
|
11
|
+
export declare class ClaudeRawService implements IRawParserService {
|
|
12
|
+
private ide;
|
|
13
|
+
/**
|
|
14
|
+
* Initialize Claude Raw Service
|
|
15
|
+
*
|
|
16
|
+
* @param ide - The IDE type (Claude Code)
|
|
17
|
+
*/
|
|
18
|
+
constructor(ide: Agent);
|
|
19
|
+
/**
|
|
20
|
+
* Main entry point - Parse Claude Code sessions from a custom directory
|
|
21
|
+
*
|
|
22
|
+
* Parses all JSONL transcript files from a custom Claude projects directory,
|
|
23
|
+
* extracts session information, and writes normalized JSON files to output directory.
|
|
24
|
+
* Organizes output by Claude project folder name. Returns success status.
|
|
25
|
+
*
|
|
26
|
+
* @param customDir - Path to directory containing Claude Code session files
|
|
27
|
+
* @param outputDir - Optional output directory (defaults to process.cwd()/.brv/logs/{ide}/raw)
|
|
28
|
+
* @returns Promise resolving to true if parsing succeeded, false otherwise
|
|
29
|
+
*/
|
|
30
|
+
parse(customDir: string, outputDir?: string): Promise<boolean>;
|
|
31
|
+
/**
|
|
32
|
+
* Calculate aggregate session metadata from transcript entries
|
|
33
|
+
*
|
|
34
|
+
* Aggregates token usage (input, output, cache), counts message types, extracts workspace,
|
|
35
|
+
* workspace path, and timestamps. Returns comprehensive metadata about the session including
|
|
36
|
+
* duration, token costs, and message counts for analysis and reporting.
|
|
37
|
+
*
|
|
38
|
+
* @param entries - Array of transcript entries from JSONL file
|
|
39
|
+
* @param messages - Parsed messages array (for count verification)
|
|
40
|
+
* @param logPath - Log file path (used to extract workspace information)
|
|
41
|
+
* @returns RawClaudeSessionMetadata object with aggregated statistics
|
|
42
|
+
*/
|
|
43
|
+
private calculateMetadata;
|
|
44
|
+
/**
|
|
45
|
+
* Convert Claude Code transcript entries to normalized messages
|
|
46
|
+
*
|
|
47
|
+
* Transforms raw JSONL transcript entries (user, assistant, system) into standardized
|
|
48
|
+
* RawClaudeRawMessage objects with preserved content, timestamps, and token counts.
|
|
49
|
+
* Filters out invalid entries without content.
|
|
50
|
+
*
|
|
51
|
+
* @param entries - Array of RawClaudeTranscriptEntry objects from JSONL file
|
|
52
|
+
* @returns Array of normalized RawClaudeRawMessage objects
|
|
53
|
+
*/
|
|
54
|
+
private convertToMessages;
|
|
55
|
+
/**
|
|
56
|
+
* Create normalized message from transcript entry
|
|
57
|
+
*
|
|
58
|
+
* Converts a single transcript entry (user or assistant) into a normalized message.
|
|
59
|
+
* Extracts content blocks, preserving array structure for multi-block content but
|
|
60
|
+
* converting single text blocks to plain strings for backward compatibility.
|
|
61
|
+
* Includes token counts if available and preserves cwd if present.
|
|
62
|
+
*
|
|
63
|
+
* @param entry - Transcript entry with message content
|
|
64
|
+
* @param type - Message type: 'user' or 'assistant'
|
|
65
|
+
* @returns Normalized RawClaudeRawMessage object
|
|
66
|
+
* @throws Error if message field is missing
|
|
67
|
+
*/
|
|
68
|
+
private createMessageFromEntry;
|
|
69
|
+
/**
|
|
70
|
+
* Create or get subdirectory within output directory
|
|
71
|
+
*
|
|
72
|
+
* Creates a subdirectory within the output directory if it doesn't exist.
|
|
73
|
+
* Uses recursive mode to create parent directories as needed.
|
|
74
|
+
*
|
|
75
|
+
* @param outputDir - Base output directory path
|
|
76
|
+
* @param subdirName - Name of subdirectory to create
|
|
77
|
+
* @returns Full path to the created or existing subdirectory
|
|
78
|
+
*/
|
|
79
|
+
private createSubdirectory;
|
|
80
|
+
/**
|
|
81
|
+
* Create system message from transcript entry
|
|
82
|
+
*
|
|
83
|
+
* Converts a system-type transcript entry into a normalized message object.
|
|
84
|
+
* System messages typically contain metadata or initial instructions.
|
|
85
|
+
* Preserves cwd if present in the entry.
|
|
86
|
+
*
|
|
87
|
+
* @param entry - Transcript entry with type='system'
|
|
88
|
+
* @returns Normalized RawClaudeRawMessage with type='system'
|
|
89
|
+
*/
|
|
90
|
+
private createSystemMessage;
|
|
91
|
+
/**
|
|
92
|
+
* Extract and normalize content blocks from message
|
|
93
|
+
*
|
|
94
|
+
* Handles multiple content formats: null/undefined (empty array), strings (wrapped as text block),
|
|
95
|
+
* arrays of blocks/strings (normalized to ContentBlock array), objects with type (treated as block),
|
|
96
|
+
* and other objects (stringified as text). Produces consistent ContentBlock array output.
|
|
97
|
+
*
|
|
98
|
+
* @param content - Raw message content in various formats
|
|
99
|
+
* @returns Array of normalized ContentBlock objects
|
|
100
|
+
*/
|
|
101
|
+
private extractContentBlocks;
|
|
102
|
+
/**
|
|
103
|
+
* Extract session ID from Claude Code log file path
|
|
104
|
+
*
|
|
105
|
+
* Parses the filename from the log path to extract the session ID.
|
|
106
|
+
* Claude Code session IDs are typically UUIDs in the JSONL filename.
|
|
107
|
+
* Removes the .jsonl extension to get the session ID.
|
|
108
|
+
*
|
|
109
|
+
* @param logPath - Path to Claude Code session log file
|
|
110
|
+
* @returns Session ID extracted from the filename
|
|
111
|
+
*/
|
|
112
|
+
private extractSessionId;
|
|
113
|
+
/**
|
|
114
|
+
* Extract and sort session start and end timestamps
|
|
115
|
+
*
|
|
116
|
+
* Collects timestamps from transcript entries, filters out empty values,
|
|
117
|
+
* sorts them chronologically, and returns first (startedAt) and last (endedAt).
|
|
118
|
+
* Returns default current timestamp if no valid timestamps found.
|
|
119
|
+
*
|
|
120
|
+
* @param entries - Array of transcript entries with optional timestamp fields
|
|
121
|
+
* @returns RawClaudeTimestamps object with startedAt and optional endedAt ISO timestamp strings
|
|
122
|
+
*/
|
|
123
|
+
private extractTimestamps;
|
|
124
|
+
/**
|
|
125
|
+
* Extract session title from first user message
|
|
126
|
+
*
|
|
127
|
+
* Uses the first line of the first user message as the session title.
|
|
128
|
+
* Truncates to TITLE_MAX_LENGTH (100 chars) and appends "..." if truncated.
|
|
129
|
+
* Returns default title if no user messages found or first message is not text.
|
|
130
|
+
*
|
|
131
|
+
* @param messages - Array of parsed session messages
|
|
132
|
+
* @returns Session title string (max 100 characters)
|
|
133
|
+
*/
|
|
134
|
+
private extractTitle;
|
|
135
|
+
/**
|
|
136
|
+
* Extract workspace information from Claude Code log file path
|
|
137
|
+
*
|
|
138
|
+
* Parses the log path to extract workspace information. Claude Code stores projects
|
|
139
|
+
* in ~/.claude/projects/-path-to-workspace format where slashes are replaced with dashes.
|
|
140
|
+
* Extracts and reconstructs the original workspace path and repository name.
|
|
141
|
+
* Returns default path object if extraction fails.
|
|
142
|
+
*
|
|
143
|
+
* @param logPath - Claude Code session log file path
|
|
144
|
+
* @returns RawClaudeWorkspaceMetadata with workspace path and optional repository name/url
|
|
145
|
+
*/
|
|
146
|
+
private extractWorkspace;
|
|
147
|
+
/**
|
|
148
|
+
* Get the output directory path for raw parser results
|
|
149
|
+
*
|
|
150
|
+
* Returns the standardized output directory path for storing raw parsed sessions.
|
|
151
|
+
* Directory is relative to current working directory under .brv/logs/{ide}/raw
|
|
152
|
+
*
|
|
153
|
+
* @param ide - IDE agent type (used as directory component)
|
|
154
|
+
* @param override - Optional custom output directory (overrides default)
|
|
155
|
+
* @returns Full path to raw output directory
|
|
156
|
+
*/
|
|
157
|
+
private getOutputDir;
|
|
158
|
+
/**
|
|
159
|
+
* Parse all Claude Code session logs in a directory
|
|
160
|
+
*
|
|
161
|
+
* Finds all JSONL files in the directory (excluding combined files), parses them in parallel,
|
|
162
|
+
* and returns array of successfully parsed sessions sorted by start time.
|
|
163
|
+
* Collects and reports any parse errors without failing completely.
|
|
164
|
+
*
|
|
165
|
+
* @param dirPath - Path to directory containing JSONL session files
|
|
166
|
+
* @returns Promise resolving to array of parsed RawClaudeRawSession objects
|
|
167
|
+
* @throws Error if directory cannot be read
|
|
168
|
+
*/
|
|
169
|
+
private parseSessionDirectory;
|
|
170
|
+
/**
|
|
171
|
+
* Parse a single Claude Code session log file
|
|
172
|
+
*
|
|
173
|
+
* Validates log file format, reads JSONL content, parses each line as a transcript entry,
|
|
174
|
+
* converts entries to messages, calculates session metadata, and extracts session title.
|
|
175
|
+
* Throws detailed error if log file is invalid or unparseable.
|
|
176
|
+
*
|
|
177
|
+
* @param logPath - Absolute path to Claude Code session JSONL file
|
|
178
|
+
* @returns Promise resolving to parsed RawClaudeRawSession object
|
|
179
|
+
* @throws Error if file is invalid or cannot be parsed
|
|
180
|
+
*/
|
|
181
|
+
private parseSessionLog;
|
|
182
|
+
/**
|
|
183
|
+
* Validate Claude Code log file format and existence
|
|
184
|
+
*
|
|
185
|
+
* Checks three validation criteria:
|
|
186
|
+
* 1. Path contains /.claude/projects/ directory marker
|
|
187
|
+
* 2. File has .jsonl extension
|
|
188
|
+
* 3. File exists on filesystem
|
|
189
|
+
* Returns false silently if any check fails.
|
|
190
|
+
*
|
|
191
|
+
* @param logPath - Path to file to validate
|
|
192
|
+
* @returns Promise resolving to true if file is valid Claude Code log file, false otherwise
|
|
193
|
+
*/
|
|
194
|
+
private validateLogFile;
|
|
195
|
+
}
|