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
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Bullet } from './bullet.js';
|
|
2
2
|
/**
|
|
3
3
|
* The central knowledge repository that stores and manages bullets.
|
|
4
|
-
* Playbooks are organized into sections
|
|
5
|
-
* Playbooks are used as
|
|
4
|
+
* Playbooks are organized into sections.
|
|
5
|
+
* Playbooks are used as temporary notes then will be pushed to byterover for usage.
|
|
6
6
|
*/
|
|
7
7
|
export class Playbook {
|
|
8
8
|
bullets;
|
|
@@ -13,46 +13,6 @@ export class Playbook {
|
|
|
13
13
|
this.sections = new Map(sections);
|
|
14
14
|
this.nextId = nextId;
|
|
15
15
|
}
|
|
16
|
-
// ===== Static Factory Methods =====
|
|
17
|
-
/**
|
|
18
|
-
* Creates a Playbook instance from a JSON object
|
|
19
|
-
* @param json The playbook JSON data
|
|
20
|
-
* @param contentStore Optional content store for loading bullet content from files
|
|
21
|
-
* @param directory Optional directory for loading content files
|
|
22
|
-
*/
|
|
23
|
-
static async fromJson(json, contentStore, directory) {
|
|
24
|
-
const bullets = new Map();
|
|
25
|
-
const sections = new Map();
|
|
26
|
-
// Deserialize bullets
|
|
27
|
-
const bulletEntries = Object.entries(json.bullets ?? {});
|
|
28
|
-
// Load all content in parallel if needed
|
|
29
|
-
const contentPromises = bulletEntries.map(async ([id, bulletData]) => {
|
|
30
|
-
if (bulletData.content) {
|
|
31
|
-
return bulletData.content;
|
|
32
|
-
}
|
|
33
|
-
return contentStore.load(id, directory);
|
|
34
|
-
});
|
|
35
|
-
const contents = await Promise.all(contentPromises);
|
|
36
|
-
// Create bullets with loaded content
|
|
37
|
-
for (const [index, [id, bulletData]] of bulletEntries.entries()) {
|
|
38
|
-
bullets.set(id, Bullet.fromJson(bulletData, contents[index]));
|
|
39
|
-
}
|
|
40
|
-
// Deserialize sections
|
|
41
|
-
for (const [section, bulletIds] of Object.entries(json.sections ?? {})) {
|
|
42
|
-
sections.set(section, bulletIds);
|
|
43
|
-
}
|
|
44
|
-
return new Playbook(bullets, sections, json.nextId ?? 1);
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Deserializes from JSON string
|
|
48
|
-
* @param data The JSON string
|
|
49
|
-
* @param contentStore Optional content store for loading bullet content from files
|
|
50
|
-
* @param directory Optional directory for loading content files
|
|
51
|
-
*/
|
|
52
|
-
static async loads(data, contentStore, directory) {
|
|
53
|
-
const json = JSON.parse(data);
|
|
54
|
-
return Playbook.fromJson(json, contentStore, directory);
|
|
55
|
-
}
|
|
56
16
|
// ===== CRUD Operations =====
|
|
57
17
|
/**
|
|
58
18
|
* Adds a new bullet to the playbook
|
|
@@ -96,14 +56,6 @@ export class Playbook {
|
|
|
96
56
|
this.bullets.set(bulletId, updatedBullet);
|
|
97
57
|
return updatedBullet;
|
|
98
58
|
}
|
|
99
|
-
/**
|
|
100
|
-
* Applies a batch of delta operations to the playbook
|
|
101
|
-
*/
|
|
102
|
-
applyDelta(delta) {
|
|
103
|
-
for (const operation of delta.operations) {
|
|
104
|
-
this._applyOperation(operation);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
59
|
/**
|
|
108
60
|
* Converts playbook to markdown format for LLM prompts
|
|
109
61
|
*/
|
|
@@ -162,7 +114,6 @@ export class Playbook {
|
|
|
162
114
|
getSections() {
|
|
163
115
|
return [...this.sections.keys()].sort();
|
|
164
116
|
}
|
|
165
|
-
// ===== Delta Operations =====
|
|
166
117
|
/**
|
|
167
118
|
* Removes a bullet from the playbook
|
|
168
119
|
*/
|
|
@@ -249,25 +200,6 @@ export class Playbook {
|
|
|
249
200
|
this.bullets.set(bulletId, updatedBullet);
|
|
250
201
|
return updatedBullet;
|
|
251
202
|
}
|
|
252
|
-
_applyOperation(operation) {
|
|
253
|
-
switch (operation.type) {
|
|
254
|
-
case 'ADD': {
|
|
255
|
-
this.addBullet(operation.section, operation.content, operation.bulletId, operation.metadata);
|
|
256
|
-
break;
|
|
257
|
-
}
|
|
258
|
-
case 'REMOVE': {
|
|
259
|
-
this.removeBullet(operation.bulletId);
|
|
260
|
-
break;
|
|
261
|
-
}
|
|
262
|
-
case 'UPDATE': {
|
|
263
|
-
this.updateBullet(operation.bulletId, {
|
|
264
|
-
content: operation.content,
|
|
265
|
-
metadata: operation.metadata,
|
|
266
|
-
});
|
|
267
|
-
break;
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
203
|
// ===== Private Helpers =====
|
|
272
204
|
_generateId(section) {
|
|
273
205
|
// Convert section to prefix: "Common Errors" -> "common"
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error thrown when the BrvConfig version is missing or incompatible.
|
|
3
|
+
*
|
|
4
|
+
* This error is used to detect outdated `.brv/config.json` files that need
|
|
5
|
+
* to be reinitialized via `brv init`.
|
|
6
|
+
*/
|
|
7
|
+
export declare class BrvConfigVersionError extends Error {
|
|
8
|
+
/** The version found in the config file, or undefined if missing. */
|
|
9
|
+
readonly currentVersion: string | undefined;
|
|
10
|
+
/** The version expected by the current CLI. */
|
|
11
|
+
readonly expectedVersion: string;
|
|
12
|
+
constructor(params: {
|
|
13
|
+
currentVersion: string | undefined;
|
|
14
|
+
expectedVersion: string;
|
|
15
|
+
});
|
|
16
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error thrown when the BrvConfig version is missing or incompatible.
|
|
3
|
+
*
|
|
4
|
+
* This error is used to detect outdated `.brv/config.json` files that need
|
|
5
|
+
* to be reinitialized via `brv init`.
|
|
6
|
+
*/
|
|
7
|
+
export class BrvConfigVersionError extends Error {
|
|
8
|
+
/** The version found in the config file, or undefined if missing. */
|
|
9
|
+
currentVersion;
|
|
10
|
+
/** The version expected by the current CLI. */
|
|
11
|
+
expectedVersion;
|
|
12
|
+
constructor(params) {
|
|
13
|
+
const message = params.currentVersion
|
|
14
|
+
? `Config version mismatch (found: ${params.currentVersion}, expected: ${params.expectedVersion}). Please run 'brv init' to reinitialize.`
|
|
15
|
+
: `Config version missing. Please run 'brv init' to reinitialize.`;
|
|
16
|
+
super(message);
|
|
17
|
+
this.name = 'BrvConfigVersionError';
|
|
18
|
+
this.currentVersion = params.currentVersion;
|
|
19
|
+
this.expectedVersion = params.expectedVersion;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Result of ensuring knowledge structure exists.
|
|
3
|
+
*/
|
|
4
|
+
export interface EnsureStructureResult {
|
|
5
|
+
contextTreeExisted: boolean;
|
|
6
|
+
indexExisted: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Result of creating or updating a domain/topic.
|
|
10
|
+
*/
|
|
11
|
+
export interface CreateOrUpdateResult {
|
|
12
|
+
created: boolean;
|
|
13
|
+
skipped: boolean;
|
|
14
|
+
updated: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Manages directory and file operations for knowledge structure.
|
|
18
|
+
* Handles existing directories and files without recreating them.
|
|
19
|
+
*/
|
|
20
|
+
export declare const DirectoryManager: {
|
|
21
|
+
/**
|
|
22
|
+
* Create or update a domain folder.
|
|
23
|
+
* If domain exists, returns indication to update; if new, creates folder.
|
|
24
|
+
*
|
|
25
|
+
* @param domainPath - Full path to domain folder
|
|
26
|
+
* @returns Whether domain was created, updated, or skipped
|
|
27
|
+
*/
|
|
28
|
+
createOrUpdateDomain(domainPath: string): Promise<CreateOrUpdateResult>;
|
|
29
|
+
/**
|
|
30
|
+
* Create or update a topic folder.
|
|
31
|
+
* If topic exists, returns indication to update; if new, creates folder.
|
|
32
|
+
*
|
|
33
|
+
* @param topicPath - Full path to topic folder
|
|
34
|
+
* @returns Whether topic was created, updated, or skipped
|
|
35
|
+
*/
|
|
36
|
+
createOrUpdateTopic(topicPath: string): Promise<CreateOrUpdateResult>;
|
|
37
|
+
/**
|
|
38
|
+
* Ensure the base knowledge structure exists.
|
|
39
|
+
* Creates .brv/context-tree/ directory if it doesn't exist.
|
|
40
|
+
*
|
|
41
|
+
* @param basePath - Base path for knowledge storage (typically .brv/context-tree)
|
|
42
|
+
* @returns Information about what existed and what was created
|
|
43
|
+
*/
|
|
44
|
+
ensureKnowledgeStructure(basePath: string): Promise<EnsureStructureResult>;
|
|
45
|
+
/**
|
|
46
|
+
* Ensure parent directory exists for a file path.
|
|
47
|
+
*
|
|
48
|
+
* @param filePath - Path to file
|
|
49
|
+
*/
|
|
50
|
+
ensureParentDirectory(filePath: string): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Check if a file exists.
|
|
53
|
+
*
|
|
54
|
+
* @param filePath - Path to file
|
|
55
|
+
* @returns true if file exists, false otherwise
|
|
56
|
+
*/
|
|
57
|
+
fileExists(filePath: string): Promise<boolean>;
|
|
58
|
+
/**
|
|
59
|
+
* List all markdown files recursively in a directory.
|
|
60
|
+
*
|
|
61
|
+
* @param dirPath - Directory to scan
|
|
62
|
+
* @returns Array of absolute paths to .md files
|
|
63
|
+
*/
|
|
64
|
+
listMarkdownFiles(dirPath: string): Promise<string[]>;
|
|
65
|
+
/**
|
|
66
|
+
* Read a file's content.
|
|
67
|
+
*
|
|
68
|
+
* @param filePath - Path to file
|
|
69
|
+
* @returns File content as string
|
|
70
|
+
*/
|
|
71
|
+
readFile(filePath: string): Promise<string>;
|
|
72
|
+
/**
|
|
73
|
+
* Write a file atomically (write to temp, then rename).
|
|
74
|
+
* This ensures the file is never in a partially written state.
|
|
75
|
+
*
|
|
76
|
+
* @param filePath - Path to file
|
|
77
|
+
* @param content - Content to write
|
|
78
|
+
*/
|
|
79
|
+
writeFileAtomic(filePath: string, content: string): Promise<void>;
|
|
80
|
+
};
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import * as fs from 'node:fs/promises';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Manages directory and file operations for knowledge structure.
|
|
5
|
+
* Handles existing directories and files without recreating them.
|
|
6
|
+
*/
|
|
7
|
+
export const DirectoryManager = {
|
|
8
|
+
/**
|
|
9
|
+
* Create or update a domain folder.
|
|
10
|
+
* If domain exists, returns indication to update; if new, creates folder.
|
|
11
|
+
*
|
|
12
|
+
* @param domainPath - Full path to domain folder
|
|
13
|
+
* @returns Whether domain was created, updated, or skipped
|
|
14
|
+
*/
|
|
15
|
+
async createOrUpdateDomain(domainPath) {
|
|
16
|
+
try {
|
|
17
|
+
await fs.access(domainPath);
|
|
18
|
+
// Domain exists
|
|
19
|
+
return { created: false, skipped: false, updated: true };
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// Domain doesn't exist, create it
|
|
23
|
+
await fs.mkdir(domainPath, { recursive: true });
|
|
24
|
+
return { created: true, skipped: false, updated: false };
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
/**
|
|
28
|
+
* Create or update a topic folder.
|
|
29
|
+
* If topic exists, returns indication to update; if new, creates folder.
|
|
30
|
+
*
|
|
31
|
+
* @param topicPath - Full path to topic folder
|
|
32
|
+
* @returns Whether topic was created, updated, or skipped
|
|
33
|
+
*/
|
|
34
|
+
async createOrUpdateTopic(topicPath) {
|
|
35
|
+
try {
|
|
36
|
+
await fs.access(topicPath);
|
|
37
|
+
// Topic exists
|
|
38
|
+
return { created: false, skipped: false, updated: true };
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// Topic doesn't exist, create it
|
|
42
|
+
await fs.mkdir(topicPath, { recursive: true });
|
|
43
|
+
return { created: true, skipped: false, updated: false };
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
/**
|
|
47
|
+
* Ensure the base knowledge structure exists.
|
|
48
|
+
* Creates .brv/context-tree/ directory if it doesn't exist.
|
|
49
|
+
*
|
|
50
|
+
* @param basePath - Base path for knowledge storage (typically .brv/context-tree)
|
|
51
|
+
* @returns Information about what existed and what was created
|
|
52
|
+
*/
|
|
53
|
+
async ensureKnowledgeStructure(basePath) {
|
|
54
|
+
// Check if .brv/context-tree/ exists
|
|
55
|
+
let contextTreeExisted = false;
|
|
56
|
+
try {
|
|
57
|
+
await fs.access(basePath);
|
|
58
|
+
contextTreeExisted = true;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Directory doesn't exist, create it
|
|
62
|
+
await fs.mkdir(basePath, { recursive: true });
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
contextTreeExisted,
|
|
66
|
+
indexExisted: false, // No longer creating index.json
|
|
67
|
+
};
|
|
68
|
+
},
|
|
69
|
+
/**
|
|
70
|
+
* Ensure parent directory exists for a file path.
|
|
71
|
+
*
|
|
72
|
+
* @param filePath - Path to file
|
|
73
|
+
*/
|
|
74
|
+
async ensureParentDirectory(filePath) {
|
|
75
|
+
const parentDir = dirname(filePath);
|
|
76
|
+
await fs.mkdir(parentDir, { recursive: true });
|
|
77
|
+
},
|
|
78
|
+
/**
|
|
79
|
+
* Check if a file exists.
|
|
80
|
+
*
|
|
81
|
+
* @param filePath - Path to file
|
|
82
|
+
* @returns true if file exists, false otherwise
|
|
83
|
+
*/
|
|
84
|
+
async fileExists(filePath) {
|
|
85
|
+
try {
|
|
86
|
+
await fs.access(filePath);
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
/**
|
|
94
|
+
* List all markdown files recursively in a directory.
|
|
95
|
+
*
|
|
96
|
+
* @param dirPath - Directory to scan
|
|
97
|
+
* @returns Array of absolute paths to .md files
|
|
98
|
+
*/
|
|
99
|
+
async listMarkdownFiles(dirPath) {
|
|
100
|
+
const mdFiles = [];
|
|
101
|
+
const scanDirectory = async (currentPath) => {
|
|
102
|
+
try {
|
|
103
|
+
const entries = await fs.readdir(currentPath, { withFileTypes: true });
|
|
104
|
+
const subdirectories = [];
|
|
105
|
+
for (const entry of entries) {
|
|
106
|
+
const fullPath = join(currentPath, entry.name);
|
|
107
|
+
if (entry.isDirectory()) {
|
|
108
|
+
subdirectories.push(fullPath);
|
|
109
|
+
}
|
|
110
|
+
else if (entry.isFile() && entry.name.endsWith('.md')) {
|
|
111
|
+
mdFiles.push(fullPath);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Process subdirectories recursively
|
|
115
|
+
await Promise.all(subdirectories.map((subdir) => scanDirectory(subdir)));
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
// Directory doesn't exist or not accessible, skip it
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
await scanDirectory(dirPath);
|
|
122
|
+
return mdFiles;
|
|
123
|
+
},
|
|
124
|
+
/**
|
|
125
|
+
* Read a file's content.
|
|
126
|
+
*
|
|
127
|
+
* @param filePath - Path to file
|
|
128
|
+
* @returns File content as string
|
|
129
|
+
*/
|
|
130
|
+
async readFile(filePath) {
|
|
131
|
+
return fs.readFile(filePath, 'utf8');
|
|
132
|
+
},
|
|
133
|
+
/**
|
|
134
|
+
* Write a file atomically (write to temp, then rename).
|
|
135
|
+
* This ensures the file is never in a partially written state.
|
|
136
|
+
*
|
|
137
|
+
* @param filePath - Path to file
|
|
138
|
+
* @param content - Content to write
|
|
139
|
+
*/
|
|
140
|
+
async writeFileAtomic(filePath, content) {
|
|
141
|
+
const tempPath = `${filePath}.tmp`;
|
|
142
|
+
await fs.writeFile(tempPath, content, 'utf8');
|
|
143
|
+
await fs.rename(tempPath, filePath);
|
|
144
|
+
},
|
|
145
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context data for generating context.md files.
|
|
3
|
+
*/
|
|
4
|
+
export interface ContextData {
|
|
5
|
+
name: string;
|
|
6
|
+
relations?: string[];
|
|
7
|
+
snippets: string[];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Generates Markdown files for knowledge context.
|
|
11
|
+
*/
|
|
12
|
+
export declare const MarkdownWriter: {
|
|
13
|
+
/**
|
|
14
|
+
* Generate context.md content with snippets and optional relations.
|
|
15
|
+
* Used for both topics and subtopics in the knowledge hierarchy.
|
|
16
|
+
*/
|
|
17
|
+
generateContext(data: ContextData): string;
|
|
18
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { generateRelationsSection } from './relation-parser.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generates Markdown files for knowledge context.
|
|
4
|
+
*/
|
|
5
|
+
export const MarkdownWriter = {
|
|
6
|
+
/**
|
|
7
|
+
* Generate context.md content with snippets and optional relations.
|
|
8
|
+
* Used for both topics and subtopics in the knowledge hierarchy.
|
|
9
|
+
*/
|
|
10
|
+
generateContext(data) {
|
|
11
|
+
const snippets = data.snippets || [];
|
|
12
|
+
const relations = data.relations || [];
|
|
13
|
+
const relationsSection = generateRelationsSection(relations);
|
|
14
|
+
return `${relationsSection}
|
|
15
|
+
${snippets.length > 0 ? snippets.map(s => `${s}`).join('\n\n---\n\n') : 'No context available.'}
|
|
16
|
+
`;
|
|
17
|
+
},
|
|
18
|
+
};
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utilities for parsing and managing context relations.
|
|
3
|
+
* Relations are expressed using @ notation: @domain/topic or @domain/topic/subtopic
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Parse relations from context.md content.
|
|
7
|
+
* Extracts all @domain/topic or @domain/topic/subtopic references.
|
|
8
|
+
*
|
|
9
|
+
* @param content - Markdown content to parse
|
|
10
|
+
* @returns Array of unique relation paths (without @ prefix)
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* const content = `
|
|
15
|
+
* ## Relations
|
|
16
|
+
* @code_style/error-handling
|
|
17
|
+
* @structure/api-endpoints
|
|
18
|
+
* `
|
|
19
|
+
* parseRelations(content) // ['code_style/error-handling', 'structure/api-endpoints']
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare function parseRelations(content: string): string[];
|
|
23
|
+
/**
|
|
24
|
+
* Validate a relation path format.
|
|
25
|
+
* Valid formats: domain/topic or domain/topic/subtopic
|
|
26
|
+
*
|
|
27
|
+
* @param path - Relation path to validate (without @ prefix)
|
|
28
|
+
* @returns True if path format is valid
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* validateRelationPath('code_style/error-handling') // true
|
|
33
|
+
* validateRelationPath('code_style/error-handling/try-catch') // true
|
|
34
|
+
* validateRelationPath('invalid') // false
|
|
35
|
+
* validateRelationPath('too/many/parts/here') // false
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export declare function validateRelationPath(path: string): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Resolve a relation path to an absolute file system path.
|
|
41
|
+
*
|
|
42
|
+
* @param basePath - Base path to context tree (e.g., '.brv/context-tree')
|
|
43
|
+
* @param relation - Relation path (e.g., 'domain/topic' or 'domain/topic/subtopic')
|
|
44
|
+
* @returns Absolute path to the context.md file
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```ts
|
|
48
|
+
* resolveRelationPath('.brv/context-tree', 'code_style/error-handling')
|
|
49
|
+
* // => '.brv/context-tree/code_style/error-handling/context.md'
|
|
50
|
+
*
|
|
51
|
+
* resolveRelationPath('.brv/context-tree', 'structure/api/endpoints')
|
|
52
|
+
* // => '.brv/context-tree/structure/api/endpoints/context.md'
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export declare function resolveRelationPath(basePath: string, relation: string): string;
|
|
56
|
+
/**
|
|
57
|
+
* Format a relation path using @ notation.
|
|
58
|
+
*
|
|
59
|
+
* @param domain - Domain name
|
|
60
|
+
* @param topic - Topic name
|
|
61
|
+
* @param subtopic - Optional subtopic name
|
|
62
|
+
* @returns Formatted relation string with @ prefix
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```ts
|
|
66
|
+
* formatRelation('code_style', 'error-handling')
|
|
67
|
+
* // => '@code_style/error-handling'
|
|
68
|
+
*
|
|
69
|
+
* formatRelation('structure', 'api', 'endpoints')
|
|
70
|
+
* // => '@structure/api/endpoints'
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export declare function formatRelation(domain: string, topic: string, subtopic?: string): string;
|
|
74
|
+
/**
|
|
75
|
+
* Generate the Relations section for context.md.
|
|
76
|
+
* Returns empty string if no relations provided.
|
|
77
|
+
*
|
|
78
|
+
* @param relations - Array of relation paths (without @ prefix)
|
|
79
|
+
* @returns Markdown formatted Relations section or empty string
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```ts
|
|
83
|
+
* generateRelationsSection(['code_style/error-handling', 'structure/api'])
|
|
84
|
+
* // => '\n## Relations\n@code_style/error-handling\n@structure/api\n'
|
|
85
|
+
*
|
|
86
|
+
* generateRelationsSection([])
|
|
87
|
+
* // => ''
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
export declare function generateRelationsSection(relations: string[]): string;
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utilities for parsing and managing context relations.
|
|
3
|
+
* Relations are expressed using @ notation: @domain/topic or @domain/topic/subtopic
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Regular expression to match relation paths in markdown content.
|
|
7
|
+
* Matches: @domain/topic or @domain/topic/subtopic
|
|
8
|
+
*/
|
|
9
|
+
const RELATION_PATTERN = /@([\w-]+)\/([\w-]+)(?:\/([\w-]+))?/g;
|
|
10
|
+
/**
|
|
11
|
+
* Parse relations from context.md content.
|
|
12
|
+
* Extracts all @domain/topic or @domain/topic/subtopic references.
|
|
13
|
+
*
|
|
14
|
+
* @param content - Markdown content to parse
|
|
15
|
+
* @returns Array of unique relation paths (without @ prefix)
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* const content = `
|
|
20
|
+
* ## Relations
|
|
21
|
+
* @code_style/error-handling
|
|
22
|
+
* @structure/api-endpoints
|
|
23
|
+
* `
|
|
24
|
+
* parseRelations(content) // ['code_style/error-handling', 'structure/api-endpoints']
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export function parseRelations(content) {
|
|
28
|
+
const relations = new Set();
|
|
29
|
+
// Extract all @domain/topic or @domain/topic/subtopic patterns
|
|
30
|
+
const matches = content.matchAll(RELATION_PATTERN);
|
|
31
|
+
for (const match of matches) {
|
|
32
|
+
const [, domain, topic, subtopic] = match;
|
|
33
|
+
const relation = subtopic
|
|
34
|
+
? `${domain}/${topic}/${subtopic}`
|
|
35
|
+
: `${domain}/${topic}`;
|
|
36
|
+
relations.add(relation);
|
|
37
|
+
}
|
|
38
|
+
return [...relations];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Validate a relation path format.
|
|
42
|
+
* Valid formats: domain/topic or domain/topic/subtopic
|
|
43
|
+
*
|
|
44
|
+
* @param path - Relation path to validate (without @ prefix)
|
|
45
|
+
* @returns True if path format is valid
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```ts
|
|
49
|
+
* validateRelationPath('code_style/error-handling') // true
|
|
50
|
+
* validateRelationPath('code_style/error-handling/try-catch') // true
|
|
51
|
+
* validateRelationPath('invalid') // false
|
|
52
|
+
* validateRelationPath('too/many/parts/here') // false
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export function validateRelationPath(path) {
|
|
56
|
+
const parts = path.split('/');
|
|
57
|
+
// Must have 2 or 3 parts: domain/topic or domain/topic/subtopic
|
|
58
|
+
if (parts.length < 2 || parts.length > 3) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
// Each part must be non-empty and contain only valid characters
|
|
62
|
+
const validPartPattern = /^[\w-]+$/;
|
|
63
|
+
return parts.every(part => validPartPattern.test(part));
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Resolve a relation path to an absolute file system path.
|
|
67
|
+
*
|
|
68
|
+
* @param basePath - Base path to context tree (e.g., '.brv/context-tree')
|
|
69
|
+
* @param relation - Relation path (e.g., 'domain/topic' or 'domain/topic/subtopic')
|
|
70
|
+
* @returns Absolute path to the context.md file
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```ts
|
|
74
|
+
* resolveRelationPath('.brv/context-tree', 'code_style/error-handling')
|
|
75
|
+
* // => '.brv/context-tree/code_style/error-handling/context.md'
|
|
76
|
+
*
|
|
77
|
+
* resolveRelationPath('.brv/context-tree', 'structure/api/endpoints')
|
|
78
|
+
* // => '.brv/context-tree/structure/api/endpoints/context.md'
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export function resolveRelationPath(basePath, relation) {
|
|
82
|
+
const parts = relation.split('/');
|
|
83
|
+
return `${basePath}/${parts.join('/')}/context.md`;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Format a relation path using @ notation.
|
|
87
|
+
*
|
|
88
|
+
* @param domain - Domain name
|
|
89
|
+
* @param topic - Topic name
|
|
90
|
+
* @param subtopic - Optional subtopic name
|
|
91
|
+
* @returns Formatted relation string with @ prefix
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```ts
|
|
95
|
+
* formatRelation('code_style', 'error-handling')
|
|
96
|
+
* // => '@code_style/error-handling'
|
|
97
|
+
*
|
|
98
|
+
* formatRelation('structure', 'api', 'endpoints')
|
|
99
|
+
* // => '@structure/api/endpoints'
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
export function formatRelation(domain, topic, subtopic) {
|
|
103
|
+
return subtopic
|
|
104
|
+
? `@${domain}/${topic}/${subtopic}`
|
|
105
|
+
: `@${domain}/${topic}`;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Generate the Relations section for context.md.
|
|
109
|
+
* Returns empty string if no relations provided.
|
|
110
|
+
*
|
|
111
|
+
* @param relations - Array of relation paths (without @ prefix)
|
|
112
|
+
* @returns Markdown formatted Relations section or empty string
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```ts
|
|
116
|
+
* generateRelationsSection(['code_style/error-handling', 'structure/api'])
|
|
117
|
+
* // => '\n## Relations\n@code_style/error-handling\n@structure/api\n'
|
|
118
|
+
*
|
|
119
|
+
* generateRelationsSection([])
|
|
120
|
+
* // => ''
|
|
121
|
+
* ```
|
|
122
|
+
*/
|
|
123
|
+
export function generateRelationsSection(relations) {
|
|
124
|
+
if (relations.length === 0) {
|
|
125
|
+
return '';
|
|
126
|
+
}
|
|
127
|
+
const formattedRelations = relations
|
|
128
|
+
.map(rel => `@${rel}`)
|
|
129
|
+
.join('\n');
|
|
130
|
+
return `\n## Relations\n${formattedRelations}\n`;
|
|
131
|
+
}
|