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,144 @@
|
|
|
1
|
+
import { ToolName } from '../../../core/domain/cipher/tools/constants.js';
|
|
2
|
+
import { createBashExecTool } from './implementations/bash-exec-tool.js';
|
|
3
|
+
import { createBashOutputTool } from './implementations/bash-output-tool.js';
|
|
4
|
+
import { createCreateKnowledgeTopicTool } from './implementations/create-knowledge-topic-tool.js';
|
|
5
|
+
import { createDeleteMemoryTool } from './implementations/delete-memory-tool.js';
|
|
6
|
+
import { createDetectDomainsTool } from './implementations/detect-domains-tool.js';
|
|
7
|
+
import { createEditFileTool } from './implementations/edit-file-tool.js';
|
|
8
|
+
import { createEditMemoryTool } from './implementations/edit-memory-tool.js';
|
|
9
|
+
import { createFindKnowledgeTopicsTool } from './implementations/find-knowledge-topics-tool.js';
|
|
10
|
+
import { createGlobFilesTool } from './implementations/glob-files-tool.js';
|
|
11
|
+
import { createGrepContentTool } from './implementations/grep-content-tool.js';
|
|
12
|
+
import { createKillProcessTool } from './implementations/kill-process-tool.js';
|
|
13
|
+
import { createListMemoriesTool } from './implementations/list-memories-tool.js';
|
|
14
|
+
import { createReadFileTool } from './implementations/read-file-tool.js';
|
|
15
|
+
import { createReadMemoryTool } from './implementations/read-memory-tool.js';
|
|
16
|
+
import { createSearchHistoryTool } from './implementations/search-history-tool.js';
|
|
17
|
+
import { createWriteFileTool } from './implementations/write-file-tool.js';
|
|
18
|
+
import { createWriteMemoryTool } from './implementations/write-memory-tool.js';
|
|
19
|
+
import { createWriteTodosTool } from './implementations/write-todos-tool.js';
|
|
20
|
+
import { ToolMarker } from './tool-markers.js';
|
|
21
|
+
/**
|
|
22
|
+
* Helper function to safely retrieve a required service.
|
|
23
|
+
* Throws a descriptive error if the service is not available.
|
|
24
|
+
*
|
|
25
|
+
* @param service - The service to retrieve
|
|
26
|
+
* @param serviceName - Name of the service for error messages
|
|
27
|
+
* @returns The service if available
|
|
28
|
+
* @throws Error if service is undefined
|
|
29
|
+
*/
|
|
30
|
+
function getRequiredService(service, serviceName) {
|
|
31
|
+
if (!service) {
|
|
32
|
+
throw new Error(`Required service '${serviceName}' is not available. This is a bug.`);
|
|
33
|
+
}
|
|
34
|
+
return service;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Central registry of all tools.
|
|
38
|
+
* Maps tool names to their factory functions and required services.
|
|
39
|
+
*
|
|
40
|
+
* To add a new tool:
|
|
41
|
+
* 1. Add tool name to ToolName constants
|
|
42
|
+
* 2. Create tool implementation file
|
|
43
|
+
* 3. Add entry to this registry
|
|
44
|
+
*/
|
|
45
|
+
export const TOOL_REGISTRY = {
|
|
46
|
+
[ToolName.BASH_EXEC]: {
|
|
47
|
+
factory: (services) => createBashExecTool(getRequiredService(services.processService, 'processService')),
|
|
48
|
+
markers: [ToolMarker.Execution],
|
|
49
|
+
requiredServices: ['processService'],
|
|
50
|
+
},
|
|
51
|
+
[ToolName.BASH_OUTPUT]: {
|
|
52
|
+
factory: (services) => createBashOutputTool(getRequiredService(services.processService, 'processService')),
|
|
53
|
+
markers: [ToolMarker.Execution, ToolMarker.Optional],
|
|
54
|
+
requiredServices: ['processService'],
|
|
55
|
+
},
|
|
56
|
+
[ToolName.CREATE_KNOWLEDGE_TOPIC]: {
|
|
57
|
+
factory: () => createCreateKnowledgeTopicTool(),
|
|
58
|
+
markers: [ToolMarker.ContextBuilding],
|
|
59
|
+
outputGuidance: 'create_knowledge_topic',
|
|
60
|
+
requiredServices: [], // Uses DirectoryManager for file operations
|
|
61
|
+
},
|
|
62
|
+
[ToolName.DELETE_MEMORY]: {
|
|
63
|
+
factory: (services) => createDeleteMemoryTool(getRequiredService(services.memoryManager, 'memoryManager')),
|
|
64
|
+
markers: [ToolMarker.ContextBuilding],
|
|
65
|
+
outputGuidance: 'delete_memory',
|
|
66
|
+
requiredServices: ['memoryManager'],
|
|
67
|
+
},
|
|
68
|
+
[ToolName.DETECT_DOMAINS]: {
|
|
69
|
+
factory: () => createDetectDomainsTool(),
|
|
70
|
+
markers: [ToolMarker.ContextBuilding],
|
|
71
|
+
outputGuidance: 'detect_domains',
|
|
72
|
+
requiredServices: [], // No services required (validates LLM-detected domains)
|
|
73
|
+
},
|
|
74
|
+
[ToolName.EDIT_FILE]: {
|
|
75
|
+
factory: (services) => createEditFileTool(getRequiredService(services.fileSystemService, 'fileSystemService')),
|
|
76
|
+
markers: [ToolMarker.Modification],
|
|
77
|
+
requiredServices: ['fileSystemService'],
|
|
78
|
+
},
|
|
79
|
+
[ToolName.EDIT_MEMORY]: {
|
|
80
|
+
factory: (services) => createEditMemoryTool(getRequiredService(services.memoryManager, 'memoryManager')),
|
|
81
|
+
markers: [ToolMarker.ContextBuilding],
|
|
82
|
+
outputGuidance: 'edit_memory',
|
|
83
|
+
requiredServices: ['memoryManager'],
|
|
84
|
+
},
|
|
85
|
+
[ToolName.FIND_KNOWLEDGE_TOPICS]: {
|
|
86
|
+
factory: () => createFindKnowledgeTopicsTool(),
|
|
87
|
+
markers: [ToolMarker.ContextBuilding, ToolMarker.Discovery],
|
|
88
|
+
outputGuidance: 'find_knowledge_topics',
|
|
89
|
+
requiredServices: [], // Uses DirectoryManager for file operations
|
|
90
|
+
},
|
|
91
|
+
[ToolName.GLOB_FILES]: {
|
|
92
|
+
factory: (services) => createGlobFilesTool(getRequiredService(services.fileSystemService, 'fileSystemService')),
|
|
93
|
+
markers: [ToolMarker.Core, ToolMarker.Discovery],
|
|
94
|
+
requiredServices: ['fileSystemService'],
|
|
95
|
+
},
|
|
96
|
+
[ToolName.GREP_CONTENT]: {
|
|
97
|
+
factory: (services) => createGrepContentTool(getRequiredService(services.fileSystemService, 'fileSystemService')),
|
|
98
|
+
markers: [ToolMarker.Core, ToolMarker.Discovery],
|
|
99
|
+
requiredServices: ['fileSystemService'],
|
|
100
|
+
},
|
|
101
|
+
[ToolName.KILL_PROCESS]: {
|
|
102
|
+
factory: (services) => createKillProcessTool(getRequiredService(services.processService, 'processService')),
|
|
103
|
+
markers: [ToolMarker.Execution, ToolMarker.Optional],
|
|
104
|
+
requiredServices: ['processService'],
|
|
105
|
+
},
|
|
106
|
+
[ToolName.LIST_MEMORIES]: {
|
|
107
|
+
factory: (services) => createListMemoriesTool(getRequiredService(services.memoryManager, 'memoryManager')),
|
|
108
|
+
markers: [ToolMarker.ContextBuilding, ToolMarker.Discovery],
|
|
109
|
+
outputGuidance: 'list_memories',
|
|
110
|
+
requiredServices: ['memoryManager'],
|
|
111
|
+
},
|
|
112
|
+
[ToolName.READ_FILE]: {
|
|
113
|
+
factory: (services) => createReadFileTool(getRequiredService(services.fileSystemService, 'fileSystemService')),
|
|
114
|
+
markers: [ToolMarker.Core, ToolMarker.Discovery],
|
|
115
|
+
requiredServices: ['fileSystemService'],
|
|
116
|
+
},
|
|
117
|
+
[ToolName.READ_MEMORY]: {
|
|
118
|
+
factory: (services) => createReadMemoryTool(getRequiredService(services.memoryManager, 'memoryManager')),
|
|
119
|
+
markers: [ToolMarker.ContextBuilding, ToolMarker.Discovery],
|
|
120
|
+
outputGuidance: 'read_memory',
|
|
121
|
+
requiredServices: ['memoryManager'],
|
|
122
|
+
},
|
|
123
|
+
[ToolName.SEARCH_HISTORY]: {
|
|
124
|
+
factory: (_services) => createSearchHistoryTool(),
|
|
125
|
+
markers: [ToolMarker.ContextBuilding, ToolMarker.Discovery],
|
|
126
|
+
requiredServices: [], // No services required yet (stub implementation)
|
|
127
|
+
},
|
|
128
|
+
[ToolName.WRITE_FILE]: {
|
|
129
|
+
factory: (services) => createWriteFileTool(getRequiredService(services.fileSystemService, 'fileSystemService')),
|
|
130
|
+
markers: [ToolMarker.Modification],
|
|
131
|
+
requiredServices: ['fileSystemService'],
|
|
132
|
+
},
|
|
133
|
+
[ToolName.WRITE_MEMORY]: {
|
|
134
|
+
factory: (services) => createWriteMemoryTool(getRequiredService(services.memoryManager, 'memoryManager')),
|
|
135
|
+
markers: [ToolMarker.ContextBuilding],
|
|
136
|
+
outputGuidance: 'write_memory',
|
|
137
|
+
requiredServices: ['memoryManager'],
|
|
138
|
+
},
|
|
139
|
+
[ToolName.WRITE_TODOS]: {
|
|
140
|
+
factory: () => createWriteTodosTool(),
|
|
141
|
+
markers: [ToolMarker.Planning, ToolMarker.Core],
|
|
142
|
+
requiredServices: [], // No services required (stateless tool)
|
|
143
|
+
},
|
|
144
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ZodSchema } from 'zod';
|
|
2
|
+
import type { JSONSchema7 } from '../../../../core/domain/cipher/tools/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Convert a Zod schema to JSON Schema v7.
|
|
5
|
+
* Used to expose tool schemas to the LLM.
|
|
6
|
+
*
|
|
7
|
+
* @param zodSchema - Zod schema to convert
|
|
8
|
+
* @returns JSON Schema v7 representation
|
|
9
|
+
*/
|
|
10
|
+
export declare function convertZodToJsonSchema(zodSchema: ZodSchema): JSONSchema7;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { zodToJsonSchema } from 'zod-to-json-schema';
|
|
2
|
+
import { getErrorMessage } from '../../../../utils/error-helpers.js';
|
|
3
|
+
/**
|
|
4
|
+
* Convert a Zod schema to JSON Schema v7.
|
|
5
|
+
* Used to expose tool schemas to the LLM.
|
|
6
|
+
*
|
|
7
|
+
* @param zodSchema - Zod schema to convert
|
|
8
|
+
* @returns JSON Schema v7 representation
|
|
9
|
+
*/
|
|
10
|
+
export function convertZodToJsonSchema(zodSchema) {
|
|
11
|
+
try {
|
|
12
|
+
// Convert using zod-to-json-schema library
|
|
13
|
+
const jsonSchema = zodToJsonSchema(zodSchema, {
|
|
14
|
+
// Remove $schema field as it's not needed for tool definitions
|
|
15
|
+
$refStrategy: 'none',
|
|
16
|
+
});
|
|
17
|
+
// Cast to JSONSchema7 (zod-to-json-schema returns compatible format)
|
|
18
|
+
return jsonSchema;
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
// Fallback to basic object schema if conversion fails
|
|
22
|
+
console.warn(`Failed to convert Zod schema to JSON Schema: ${getErrorMessage(error)}`);
|
|
23
|
+
return {
|
|
24
|
+
additionalProperties: false,
|
|
25
|
+
properties: {},
|
|
26
|
+
type: 'object',
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error thrown when ByteRover workspace is not initialized.
|
|
3
|
+
*/
|
|
4
|
+
export declare class WorkspaceNotInitializedError extends Error {
|
|
5
|
+
/** The expected workspace directory path */
|
|
6
|
+
readonly expectedPath: string;
|
|
7
|
+
constructor(message: string, expectedPath: string);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Validates that the ByteRover workspace is properly initialized.
|
|
11
|
+
*
|
|
12
|
+
* Checks for the existence of:
|
|
13
|
+
* - `.brv` directory (created by `brv init`)
|
|
14
|
+
* - `.brv/blobs` directory (for blob storage)
|
|
15
|
+
*
|
|
16
|
+
* @param workingDirectory - The working directory to check (defaults to process.cwd())
|
|
17
|
+
* @throws WorkspaceNotInitializedError if workspace is not initialized
|
|
18
|
+
*/
|
|
19
|
+
export declare function validateWorkspaceInitialized(workingDirectory?: string): void;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Error thrown when ByteRover workspace is not initialized.
|
|
5
|
+
*/
|
|
6
|
+
export class WorkspaceNotInitializedError extends Error {
|
|
7
|
+
/** The expected workspace directory path */
|
|
8
|
+
expectedPath;
|
|
9
|
+
constructor(message, expectedPath) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.name = 'WorkspaceNotInitializedError';
|
|
12
|
+
this.expectedPath = expectedPath;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Validates that the ByteRover workspace is properly initialized.
|
|
17
|
+
*
|
|
18
|
+
* Checks for the existence of:
|
|
19
|
+
* - `.brv` directory (created by `brv init`)
|
|
20
|
+
* - `.brv/blobs` directory (for blob storage)
|
|
21
|
+
*
|
|
22
|
+
* @param workingDirectory - The working directory to check (defaults to process.cwd())
|
|
23
|
+
* @throws WorkspaceNotInitializedError if workspace is not initialized
|
|
24
|
+
*/
|
|
25
|
+
export function validateWorkspaceInitialized(workingDirectory) {
|
|
26
|
+
const cwd = workingDirectory ?? process.cwd();
|
|
27
|
+
const brvDir = join(cwd, '.brv');
|
|
28
|
+
const blobsDir = join(cwd, '.brv', 'blobs');
|
|
29
|
+
// Check if .brv directory exists
|
|
30
|
+
if (!existsSync(brvDir)) {
|
|
31
|
+
throw new WorkspaceNotInitializedError('Workspace not initialized', brvDir);
|
|
32
|
+
}
|
|
33
|
+
// Check if .brv/blobs directory exists
|
|
34
|
+
if (!existsSync(blobsDir)) {
|
|
35
|
+
throw new WorkspaceNotInitializedError('Blob storage directory not found', blobsDir);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ICodingAgentLogParser } from '../../../core/interfaces/cipher/i-coding-agent-log-parser.js';
|
|
2
|
+
import type { CodingAgentLogWatcherOptions, ICodingAgentLogWatcher } from '../../../core/interfaces/cipher/i-coding-agent-log-watcher.js';
|
|
3
|
+
import type { IFileWatcherService } from '../../../core/interfaces/i-file-watcher-service.js';
|
|
4
|
+
export declare class CodingAgentLogWatcher implements ICodingAgentLogWatcher {
|
|
5
|
+
private callback;
|
|
6
|
+
private readonly fileWatcher;
|
|
7
|
+
private readonly parser;
|
|
8
|
+
private watching;
|
|
9
|
+
constructor(fileWatcher: IFileWatcherService, parser: ICodingAgentLogParser);
|
|
10
|
+
isWatching(): boolean;
|
|
11
|
+
start(options: CodingAgentLogWatcherOptions): Promise<void>;
|
|
12
|
+
stop(): Promise<void>;
|
|
13
|
+
private handleFileEvent;
|
|
14
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export class CodingAgentLogWatcher {
|
|
2
|
+
callback;
|
|
3
|
+
fileWatcher;
|
|
4
|
+
parser;
|
|
5
|
+
watching;
|
|
6
|
+
constructor(fileWatcher, parser) {
|
|
7
|
+
this.watching = false;
|
|
8
|
+
this.fileWatcher = fileWatcher;
|
|
9
|
+
this.parser = parser;
|
|
10
|
+
}
|
|
11
|
+
isWatching() {
|
|
12
|
+
return this.watching;
|
|
13
|
+
}
|
|
14
|
+
async start(options) {
|
|
15
|
+
if (this.watching) {
|
|
16
|
+
throw new Error('Already watching. Stop the watcher before starting again.');
|
|
17
|
+
}
|
|
18
|
+
this.callback = options.onCleanSession;
|
|
19
|
+
this.watching = true;
|
|
20
|
+
this.fileWatcher.setFileEventHandler(async (event) => {
|
|
21
|
+
await this.handleFileEvent(event, options.codingAgentInfo.name);
|
|
22
|
+
});
|
|
23
|
+
await this.fileWatcher.start([options.codingAgentInfo.chatLogPath]);
|
|
24
|
+
}
|
|
25
|
+
async stop() {
|
|
26
|
+
if (!this.watching) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
await this.fileWatcher.stop();
|
|
30
|
+
this.callback = undefined;
|
|
31
|
+
this.watching = false;
|
|
32
|
+
}
|
|
33
|
+
async handleFileEvent(event, codingAgent) {
|
|
34
|
+
try {
|
|
35
|
+
if (event.type !== 'add' && event.type !== 'change') {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const sessions = await this.parser.parse(event.path, codingAgent);
|
|
39
|
+
if (this.callback !== undefined) {
|
|
40
|
+
for (const session of sessions) {
|
|
41
|
+
try {
|
|
42
|
+
// eslint-disable-next-line no-await-in-loop
|
|
43
|
+
await this.callback(session);
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
console.error(`[CodingAgentLogWatcher] Error in session callback: ${error}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
console.error(`[CodingAgentLogWatcher] Error processing file ${event.path}: ${error}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ContextFileContent } from '../../core/interfaces/i-context-file-reader.js';
|
|
2
|
+
import { CogitPushContext } from '../../core/domain/entities/cogit-push-context.js';
|
|
3
|
+
/**
|
|
4
|
+
* Parameters for mapping context files to push contexts.
|
|
5
|
+
*/
|
|
6
|
+
export type MapToPushContextsParams = {
|
|
7
|
+
/** Files to be added (new files) */
|
|
8
|
+
addedFiles: ContextFileContent[];
|
|
9
|
+
/** Paths of files to be deleted (only path needed, files no longer exist) */
|
|
10
|
+
deletedPaths: string[];
|
|
11
|
+
/** Files to be edited (modified files) */
|
|
12
|
+
modifiedFiles: ContextFileContent[];
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Maps context file contents to CogitPushContext instances for the CoGit API.
|
|
16
|
+
* Converts file reader output to the format expected by the push service.
|
|
17
|
+
*
|
|
18
|
+
* @param params - The mapping parameters containing files to process
|
|
19
|
+
* @returns Array of CogitPushContext instances ready for the push API
|
|
20
|
+
*/
|
|
21
|
+
export declare const mapToPushContexts: (params: MapToPushContextsParams) => CogitPushContext[];
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { CogitPushContext } from '../../core/domain/entities/cogit-push-context.js';
|
|
2
|
+
/**
|
|
3
|
+
* Maps context file contents to CogitPushContext instances for the CoGit API.
|
|
4
|
+
* Converts file reader output to the format expected by the push service.
|
|
5
|
+
*
|
|
6
|
+
* @param params - The mapping parameters containing files to process
|
|
7
|
+
* @returns Array of CogitPushContext instances ready for the push API
|
|
8
|
+
*/
|
|
9
|
+
export const mapToPushContexts = (params) => {
|
|
10
|
+
const addedContextFiles = params.addedFiles.map((file) => new CogitPushContext({
|
|
11
|
+
content: file.content,
|
|
12
|
+
operation: 'add',
|
|
13
|
+
path: `/${file.path}`,
|
|
14
|
+
tags: [],
|
|
15
|
+
title: file.title,
|
|
16
|
+
}));
|
|
17
|
+
const editedContextFiles = params.modifiedFiles.map((file) => new CogitPushContext({
|
|
18
|
+
content: file.content,
|
|
19
|
+
operation: 'edit',
|
|
20
|
+
path: `/${file.path}`,
|
|
21
|
+
tags: [],
|
|
22
|
+
title: file.title,
|
|
23
|
+
}));
|
|
24
|
+
const deletedContextFiles = params.deletedPaths.map((path) => new CogitPushContext({
|
|
25
|
+
content: '',
|
|
26
|
+
operation: 'delete',
|
|
27
|
+
path: `/${path}`,
|
|
28
|
+
tags: [],
|
|
29
|
+
title: '',
|
|
30
|
+
}));
|
|
31
|
+
return [...addedContextFiles, ...editedContextFiles, ...deletedContextFiles];
|
|
32
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ICogitPullService, PullParams } from '../../core/interfaces/i-cogit-pull-service.js';
|
|
2
|
+
import { CogitSnapshot } from '../../core/domain/entities/cogit-snapshot.js';
|
|
3
|
+
export type HttpCogitPullServiceConfig = {
|
|
4
|
+
apiBaseUrl: string;
|
|
5
|
+
timeout?: number;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* HTTP implementation of ICogitPullService for ByteRover CoGit service.
|
|
9
|
+
* Fetches context tree snapshots from a CoGit repository.
|
|
10
|
+
*/
|
|
11
|
+
export declare class HttpCogitPullService implements ICogitPullService {
|
|
12
|
+
private readonly config;
|
|
13
|
+
constructor(config: HttpCogitPullServiceConfig);
|
|
14
|
+
pull(params: PullParams): Promise<CogitSnapshot>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { CogitSnapshot } from '../../core/domain/entities/cogit-snapshot.js';
|
|
2
|
+
import { AuthenticatedHttpClient } from '../http/authenticated-http-client.js';
|
|
3
|
+
/**
|
|
4
|
+
* HTTP implementation of ICogitPullService for ByteRover CoGit service.
|
|
5
|
+
* Fetches context tree snapshots from a CoGit repository.
|
|
6
|
+
*/
|
|
7
|
+
export class HttpCogitPullService {
|
|
8
|
+
config;
|
|
9
|
+
constructor(config) {
|
|
10
|
+
this.config = {
|
|
11
|
+
...config,
|
|
12
|
+
timeout: config.timeout ?? 30_000,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
async pull(params) {
|
|
16
|
+
const baseUrl = `${this.config.apiBaseUrl}/organizations/${params.teamId}/projects/${params.spaceId}/git/snapshot`;
|
|
17
|
+
const url = `${baseUrl}?branch=${encodeURIComponent(params.branch)}`;
|
|
18
|
+
const httpClient = new AuthenticatedHttpClient(params.accessToken, params.sessionKey);
|
|
19
|
+
try {
|
|
20
|
+
const response = await httpClient.get(url, {
|
|
21
|
+
timeout: this.config.timeout,
|
|
22
|
+
});
|
|
23
|
+
return CogitSnapshot.fromJson(response);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
27
|
+
throw new Error(`Failed to pull from CoGit: ${message}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ICogitPushService, PushParams } from '../../core/interfaces/i-cogit-push-service.js';
|
|
2
|
+
import { CogitPushResponse } from '../../core/domain/entities/cogit-push-response.js';
|
|
3
|
+
export type HttpCogitPushServiceConfig = {
|
|
4
|
+
apiBaseUrl: string;
|
|
5
|
+
timeout?: number;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* HTTP implementation of ICogitPushService for ByteRover CoGit service.
|
|
9
|
+
* Implements a two-request SHA flow to handle concurrent updates.
|
|
10
|
+
*/
|
|
11
|
+
export declare class HttpCogitPushService implements ICogitPushService {
|
|
12
|
+
private readonly config;
|
|
13
|
+
constructor(config: HttpCogitPushServiceConfig);
|
|
14
|
+
push(params: PushParams): Promise<CogitPushResponse>;
|
|
15
|
+
private extractShaFromError;
|
|
16
|
+
private makeRequest;
|
|
17
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/* eslint-disable camelcase */
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import { CogitPushResponse } from '../../core/domain/entities/cogit-push-response.js';
|
|
4
|
+
import { getErrorMessage } from '../../utils/error-helpers.js';
|
|
5
|
+
/**
|
|
6
|
+
* Extracts the current SHA from an error response details field.
|
|
7
|
+
* Error format: "...Expected SHA 'xxx' but current SHA is 'yyy'..."
|
|
8
|
+
* @param details The error details string
|
|
9
|
+
* @returns The extracted SHA or undefined if not found
|
|
10
|
+
*/
|
|
11
|
+
const extractShaFromErrorDetails = (details) => {
|
|
12
|
+
const shaMatch = /SHA is '([a-f0-9]+)'/i.exec(details);
|
|
13
|
+
return shaMatch?.[1];
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* HTTP implementation of ICogitPushService for ByteRover CoGit service.
|
|
17
|
+
* Implements a two-request SHA flow to handle concurrent updates.
|
|
18
|
+
*/
|
|
19
|
+
export class HttpCogitPushService {
|
|
20
|
+
config;
|
|
21
|
+
constructor(config) {
|
|
22
|
+
this.config = {
|
|
23
|
+
...config,
|
|
24
|
+
timeout: config.timeout ?? 30_000,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
async push(params) {
|
|
28
|
+
const url = `${this.config.apiBaseUrl}/organizations/${params.teamId}/projects/${params.spaceId}/commits`;
|
|
29
|
+
const memories = params.contexts.map((context) => ({
|
|
30
|
+
content: context.content,
|
|
31
|
+
operation: context.operation,
|
|
32
|
+
path: context.path,
|
|
33
|
+
tags: [...context.tags],
|
|
34
|
+
title: context.title,
|
|
35
|
+
}));
|
|
36
|
+
// First request: Send with empty current_sha
|
|
37
|
+
// This is a temporary workaround to let CoGit determine the current SHA.
|
|
38
|
+
// In the future, we need to generate the SHA from the CLI.
|
|
39
|
+
try {
|
|
40
|
+
const response = await this.makeRequest({
|
|
41
|
+
accessToken: params.accessToken,
|
|
42
|
+
branch: params.branch,
|
|
43
|
+
currentSha: '',
|
|
44
|
+
memories,
|
|
45
|
+
sessionKey: params.sessionKey,
|
|
46
|
+
url,
|
|
47
|
+
});
|
|
48
|
+
return response;
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
// Try to extract SHA from error response
|
|
52
|
+
const sha = this.extractShaFromError(error);
|
|
53
|
+
if (!sha) {
|
|
54
|
+
throw new Error(`Failed to push to CoGit: ${getErrorMessage(error)}`);
|
|
55
|
+
}
|
|
56
|
+
// Second request: Retry with extracted SHA
|
|
57
|
+
try {
|
|
58
|
+
const response = await this.makeRequest({
|
|
59
|
+
accessToken: params.accessToken,
|
|
60
|
+
branch: params.branch,
|
|
61
|
+
currentSha: sha,
|
|
62
|
+
memories,
|
|
63
|
+
sessionKey: params.sessionKey,
|
|
64
|
+
url,
|
|
65
|
+
});
|
|
66
|
+
return response;
|
|
67
|
+
}
|
|
68
|
+
catch (retryError) {
|
|
69
|
+
throw new Error(`Failed to push to CoGit: ${getErrorMessage(retryError)}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
extractShaFromError(error) {
|
|
74
|
+
// Check if error has response data with details
|
|
75
|
+
if (error &&
|
|
76
|
+
typeof error === 'object' &&
|
|
77
|
+
'response' in error &&
|
|
78
|
+
error.response &&
|
|
79
|
+
typeof error.response === 'object' &&
|
|
80
|
+
'data' in error.response) {
|
|
81
|
+
const errorResponse = error.response.data;
|
|
82
|
+
if (errorResponse.details) {
|
|
83
|
+
return extractShaFromErrorDetails(errorResponse.details);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
async makeRequest(params) {
|
|
89
|
+
const requestBody = {
|
|
90
|
+
branch: params.branch,
|
|
91
|
+
current_sha: params.currentSha,
|
|
92
|
+
memories: params.memories,
|
|
93
|
+
};
|
|
94
|
+
// Directly use axios here because of the work around to get current SHA from CoGit's error response
|
|
95
|
+
const response = await axios.post(params.url, requestBody, {
|
|
96
|
+
headers: {
|
|
97
|
+
Authorization: `Bearer ${params.accessToken}`,
|
|
98
|
+
'x-byterover-session-id': params.sessionKey,
|
|
99
|
+
},
|
|
100
|
+
timeout: this.config.timeout,
|
|
101
|
+
});
|
|
102
|
+
return CogitPushResponse.fromJson(response.data);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -3,6 +3,8 @@ import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
|
3
3
|
import { join } from 'node:path';
|
|
4
4
|
import { BRV_DIR, PROJECT_CONFIG_FILE } from '../../constants.js';
|
|
5
5
|
import { BrvConfig } from '../../core/domain/entities/brv-config.js';
|
|
6
|
+
import { BrvConfigVersionError } from '../../core/domain/errors/brv-config-version-error.js';
|
|
7
|
+
import { getErrorMessage } from '../../utils/error-helpers.js';
|
|
6
8
|
/**
|
|
7
9
|
* File-based implementation of IProjectConfigStore.
|
|
8
10
|
* Stores configuration in .brv/config.json in the project directory.
|
|
@@ -23,21 +25,25 @@ export class ProjectConfigStore {
|
|
|
23
25
|
return BrvConfig.fromJson(json);
|
|
24
26
|
}
|
|
25
27
|
catch (error) {
|
|
26
|
-
|
|
28
|
+
if (error instanceof BrvConfigVersionError) {
|
|
29
|
+
throw error;
|
|
30
|
+
}
|
|
31
|
+
throw new Error(`Failed to read config from ${configPath}: ${getErrorMessage(error)}`);
|
|
27
32
|
}
|
|
28
33
|
}
|
|
29
34
|
async write(config, directory) {
|
|
30
35
|
const brDirPath = this.getBrvDirPath(directory);
|
|
31
36
|
const configPath = this.getConfigPath(directory);
|
|
32
37
|
try {
|
|
33
|
-
// Create .brv directory if
|
|
38
|
+
// Create .brv directory and blobs subdirectory if they don't exist
|
|
34
39
|
await mkdir(brDirPath, { recursive: true });
|
|
40
|
+
await mkdir(join(brDirPath, 'blobs'), { recursive: true });
|
|
35
41
|
// Write config.json
|
|
36
42
|
const content = JSON.stringify(config.toJson(), undefined, 2);
|
|
37
43
|
await writeFile(configPath, content, 'utf8');
|
|
38
44
|
}
|
|
39
45
|
catch (error) {
|
|
40
|
-
throw new Error(`Failed to write config to ${configPath}: ${error
|
|
46
|
+
throw new Error(`Failed to write config to ${configPath}: ${getErrorMessage(error)}`);
|
|
41
47
|
}
|
|
42
48
|
}
|
|
43
49
|
/**
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ContextFileContent, IContextFileReader } from '../../core/interfaces/i-context-file-reader.js';
|
|
2
|
+
export type FileContextFileReaderConfig = {
|
|
3
|
+
baseDirectory?: string;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* File-based implementation of IContextFileReader.
|
|
7
|
+
* Reads context.md files from the context tree and extracts their metadata.
|
|
8
|
+
*/
|
|
9
|
+
export declare class FileContextFileReader implements IContextFileReader {
|
|
10
|
+
private readonly config;
|
|
11
|
+
constructor(config?: FileContextFileReaderConfig);
|
|
12
|
+
read(relativePath: string, directory?: string): Promise<ContextFileContent | undefined>;
|
|
13
|
+
readMany(relativePaths: string[], directory?: string): Promise<ContextFileContent[]>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { BRV_DIR, CONTEXT_TREE_DIR } from '../../constants.js';
|
|
4
|
+
/**
|
|
5
|
+
* Extracts the title from the first markdown heading in the content.
|
|
6
|
+
* @param content - The file content
|
|
7
|
+
* @param fallbackTitle - The title to use if no heading is found
|
|
8
|
+
* @returns The extracted title or fallback
|
|
9
|
+
*/
|
|
10
|
+
const extractTitle = (content, fallbackTitle) => {
|
|
11
|
+
// Match the first line that starts with "# " (level 1 heading)
|
|
12
|
+
const match = /^# (.+)$/m.exec(content);
|
|
13
|
+
return match ? match[1].trim() : fallbackTitle;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* File-based implementation of IContextFileReader.
|
|
17
|
+
* Reads context.md files from the context tree and extracts their metadata.
|
|
18
|
+
*/
|
|
19
|
+
export class FileContextFileReader {
|
|
20
|
+
config;
|
|
21
|
+
constructor(config = {}) {
|
|
22
|
+
this.config = config;
|
|
23
|
+
}
|
|
24
|
+
async read(relativePath, directory) {
|
|
25
|
+
const baseDir = directory ?? this.config.baseDirectory ?? process.cwd();
|
|
26
|
+
const fullPath = join(baseDir, BRV_DIR, CONTEXT_TREE_DIR, relativePath);
|
|
27
|
+
try {
|
|
28
|
+
const content = await readFile(fullPath, 'utf8');
|
|
29
|
+
const title = extractTitle(content, relativePath);
|
|
30
|
+
return {
|
|
31
|
+
content,
|
|
32
|
+
path: relativePath,
|
|
33
|
+
title,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// File doesn't exist or can't be read
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async readMany(relativePaths, directory) {
|
|
42
|
+
const results = await Promise.all(relativePaths.map((path) => this.read(path, directory)));
|
|
43
|
+
// Filter out undefined results (files that couldn't be read)
|
|
44
|
+
return results.filter((result) => result !== undefined);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { IContextTreeService } from '../../core/interfaces/i-context-tree-service.js';
|
|
2
|
+
export type ContextTreeServiceConfig = {
|
|
3
|
+
baseDirectory?: string;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* File-based implementation of IContextTreeService.
|
|
7
|
+
* Provides operations for managing the context tree structure.
|
|
8
|
+
*/
|
|
9
|
+
export declare class FileContextTreeService implements IContextTreeService {
|
|
10
|
+
private readonly config;
|
|
11
|
+
constructor(config?: ContextTreeServiceConfig);
|
|
12
|
+
exists(directory?: string): Promise<boolean>;
|
|
13
|
+
initialize(directory?: string): Promise<string>;
|
|
14
|
+
}
|