byterover-cli 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -56
- package/bin/dev.js +1 -1
- package/dist/commands/cipher-agent/run.d.ts +111 -0
- package/dist/commands/cipher-agent/run.js +493 -0
- package/dist/commands/cipher-agent/set-prompt.d.ts +14 -0
- package/dist/commands/cipher-agent/set-prompt.js +53 -0
- package/dist/commands/cipher-agent/show-prompt.d.ts +11 -0
- package/dist/commands/cipher-agent/show-prompt.js +48 -0
- package/dist/commands/clear.d.ts +6 -0
- package/dist/commands/clear.js +36 -15
- package/dist/commands/curate.d.ts +74 -0
- package/dist/commands/curate.js +396 -0
- package/dist/commands/foo.d.ts +12 -0
- package/dist/commands/foo.js +61 -0
- package/dist/commands/gen-rules.d.ts +3 -0
- package/dist/commands/gen-rules.js +39 -20
- package/dist/commands/init.d.ts +53 -2
- package/dist/commands/init.js +279 -66
- package/dist/commands/login.js +9 -4
- package/dist/commands/logout.d.ts +16 -0
- package/dist/commands/logout.js +61 -0
- package/dist/commands/pull.d.ts +33 -0
- package/dist/commands/pull.js +115 -0
- package/dist/commands/push.d.ts +13 -13
- package/dist/commands/push.js +81 -101
- package/dist/commands/query.d.ts +63 -0
- package/dist/commands/query.js +349 -0
- package/dist/commands/space/list.d.ts +5 -2
- package/dist/commands/space/list.js +60 -56
- package/dist/commands/space/switch.d.ts +16 -0
- package/dist/commands/space/switch.js +102 -53
- package/dist/commands/status.d.ts +5 -2
- package/dist/commands/status.js +43 -33
- package/dist/commands/watch.d.ts +23 -0
- package/dist/commands/watch.js +171 -0
- package/dist/config/auth.config.js +14 -2
- package/dist/config/context-tree-domains.d.ts +12 -0
- package/dist/config/context-tree-domains.js +29 -0
- package/dist/config/environment.d.ts +6 -0
- package/dist/config/environment.js +9 -2
- package/dist/constants.d.ts +5 -0
- package/dist/constants.js +6 -0
- package/dist/core/domain/cipher/agent/agent-state-machine.d.ts +128 -0
- package/dist/core/domain/cipher/agent/agent-state-machine.js +183 -0
- package/dist/core/domain/cipher/agent/agent-state.d.ts +77 -0
- package/dist/core/domain/cipher/agent/agent-state.js +59 -0
- package/dist/core/domain/cipher/agent/index.d.ts +7 -0
- package/dist/core/domain/cipher/agent/index.js +7 -0
- package/dist/core/domain/cipher/agent-events/index.d.ts +8 -0
- package/dist/core/domain/cipher/agent-events/index.js +7 -0
- package/dist/core/domain/cipher/agent-events/types.d.ts +419 -0
- package/dist/core/domain/cipher/agent-events/types.js +42 -0
- package/dist/core/domain/cipher/blob/types.d.ts +108 -0
- package/dist/core/domain/cipher/errors/blob-error.d.ts +36 -0
- package/dist/core/domain/cipher/errors/blob-error.js +68 -0
- package/dist/core/domain/cipher/errors/file-system-error.d.ts +211 -0
- package/dist/core/domain/cipher/errors/file-system-error.js +291 -0
- package/dist/core/domain/cipher/errors/llm-error.d.ts +120 -0
- package/dist/core/domain/cipher/errors/llm-error.js +161 -0
- package/dist/core/domain/cipher/errors/memory-error.d.ts +35 -0
- package/dist/core/domain/cipher/errors/memory-error.js +62 -0
- package/dist/core/domain/cipher/errors/process-error-code.d.ts +97 -0
- package/dist/core/domain/cipher/errors/process-error-code.js +98 -0
- package/dist/core/domain/cipher/errors/process-error.d.ts +135 -0
- package/dist/core/domain/cipher/errors/process-error.js +173 -0
- package/dist/core/domain/cipher/errors/session-error.d.ts +56 -0
- package/dist/core/domain/cipher/errors/session-error.js +74 -0
- package/dist/core/domain/cipher/errors/tool-error.d.ts +57 -0
- package/dist/core/domain/cipher/errors/tool-error.js +81 -0
- package/dist/core/domain/cipher/file-system/types.d.ts +203 -0
- package/dist/core/domain/cipher/memory/types.d.ts +102 -0
- package/dist/core/domain/cipher/memory/types.js +4 -0
- package/dist/core/domain/cipher/parsed-interaction.d.ts +47 -0
- package/dist/core/domain/cipher/parsed-interaction.js +25 -0
- package/dist/core/domain/cipher/process/types.d.ts +286 -0
- package/dist/core/domain/cipher/session/types.d.ts +54 -0
- package/dist/core/domain/cipher/storage/history-types.d.ts +38 -0
- package/dist/core/domain/cipher/system-prompt/types.d.ts +131 -0
- package/dist/core/domain/cipher/todos/index.d.ts +4 -0
- package/dist/core/domain/cipher/todos/index.js +4 -0
- package/dist/core/domain/cipher/todos/types.d.ts +57 -0
- package/dist/core/domain/cipher/todos/types.js +5 -0
- package/dist/core/domain/cipher/tools/constants.d.ts +28 -0
- package/dist/core/domain/cipher/tools/constants.js +24 -0
- package/dist/core/domain/cipher/tools/tool-error.d.ts +183 -0
- package/dist/core/domain/cipher/tools/tool-error.js +246 -0
- package/dist/core/domain/cipher/tools/types.d.ts +145 -0
- package/dist/core/domain/entities/brv-config.d.ts +42 -6
- package/dist/core/domain/entities/brv-config.js +115 -17
- package/dist/core/domain/entities/cogit-push-context.d.ts +38 -0
- package/dist/core/domain/entities/cogit-push-context.js +91 -0
- package/dist/core/domain/entities/cogit-push-response.d.ts +20 -0
- package/dist/core/domain/entities/cogit-push-response.js +31 -0
- package/dist/core/domain/entities/cogit-snapshot-author.d.ts +24 -0
- package/dist/core/domain/entities/cogit-snapshot-author.js +39 -0
- package/dist/core/domain/entities/cogit-snapshot-file.d.ts +34 -0
- package/dist/core/domain/entities/cogit-snapshot-file.js +59 -0
- package/dist/core/domain/entities/cogit-snapshot.d.ts +31 -0
- package/dist/core/domain/entities/cogit-snapshot.js +58 -0
- package/dist/core/domain/entities/context-tree-index.d.ts +26 -0
- package/dist/core/domain/entities/context-tree-index.js +27 -0
- package/dist/core/domain/entities/context-tree-snapshot.d.ts +56 -0
- package/dist/core/domain/entities/context-tree-snapshot.js +83 -0
- package/dist/core/domain/entities/event.d.ts +1 -1
- package/dist/core/domain/entities/event.js +4 -1
- package/dist/core/domain/entities/parser.d.ts +567 -0
- package/dist/core/domain/entities/parser.js +10 -0
- package/dist/core/domain/entities/playbook.d.ts +2 -23
- package/dist/core/domain/entities/playbook.js +2 -70
- package/dist/core/domain/errors/brv-config-version-error.d.ts +16 -0
- package/dist/core/domain/errors/brv-config-version-error.js +21 -0
- package/dist/core/domain/knowledge/directory-manager.d.ts +80 -0
- package/dist/core/domain/knowledge/directory-manager.js +145 -0
- package/dist/core/domain/knowledge/markdown-writer.d.ts +18 -0
- package/dist/core/domain/knowledge/markdown-writer.js +18 -0
- package/dist/core/domain/knowledge/relation-parser.d.ts +90 -0
- package/dist/core/domain/knowledge/relation-parser.js +131 -0
- package/dist/core/interfaces/cipher/cipher-services.d.ts +71 -0
- package/dist/core/interfaces/cipher/cipher-services.js +1 -0
- package/dist/core/interfaces/cipher/i-blob-storage.d.ts +78 -0
- package/dist/core/interfaces/cipher/i-blob-storage.js +1 -0
- package/dist/core/interfaces/cipher/i-chat-session.d.ts +62 -0
- package/dist/core/interfaces/cipher/i-chat-session.js +1 -0
- package/dist/core/interfaces/cipher/i-cipher-agent.d.ts +88 -0
- package/dist/core/interfaces/cipher/i-cipher-agent.js +1 -0
- package/dist/core/interfaces/cipher/i-coding-agent-log-parser.d.ts +20 -0
- package/dist/core/interfaces/cipher/i-coding-agent-log-parser.js +1 -0
- package/dist/core/interfaces/cipher/i-coding-agent-log-watcher.d.ts +31 -0
- package/dist/core/interfaces/cipher/i-coding-agent-log-watcher.js +1 -0
- package/dist/core/interfaces/cipher/i-content-generator.d.ts +120 -0
- package/dist/core/interfaces/cipher/i-content-generator.js +12 -0
- package/dist/core/interfaces/cipher/i-event-emitter.d.ts +76 -0
- package/dist/core/interfaces/cipher/i-event-emitter.js +1 -0
- package/dist/core/interfaces/cipher/i-file-system.d.ts +68 -0
- package/dist/core/interfaces/cipher/i-file-system.js +1 -0
- package/dist/core/interfaces/cipher/i-history-storage.d.ts +53 -0
- package/dist/core/interfaces/cipher/i-history-storage.js +1 -0
- package/dist/core/interfaces/cipher/i-llm-provider.d.ts +14 -0
- package/dist/core/interfaces/cipher/i-llm-provider.js +1 -0
- package/dist/core/interfaces/cipher/i-llm-service.d.ts +62 -0
- package/dist/core/interfaces/cipher/i-llm-service.js +1 -0
- package/dist/core/interfaces/cipher/i-logger.d.ts +78 -0
- package/dist/core/interfaces/cipher/i-logger.js +28 -0
- package/dist/core/interfaces/cipher/i-message-formatter.d.ts +44 -0
- package/dist/core/interfaces/cipher/i-message-formatter.js +1 -0
- package/dist/core/interfaces/cipher/i-policy-engine.d.ts +102 -0
- package/dist/core/interfaces/cipher/i-policy-engine.js +9 -0
- package/dist/core/interfaces/cipher/i-process-service.d.ts +65 -0
- package/dist/core/interfaces/cipher/i-process-service.js +1 -0
- package/dist/core/interfaces/cipher/i-system-prompt-contributor.d.ts +25 -0
- package/dist/core/interfaces/cipher/i-system-prompt-contributor.js +1 -0
- package/dist/core/interfaces/cipher/i-tokenizer.d.ts +15 -0
- package/dist/core/interfaces/cipher/i-tokenizer.js +1 -0
- package/dist/core/interfaces/cipher/i-tool-provider.d.ts +64 -0
- package/dist/core/interfaces/cipher/i-tool-provider.js +1 -0
- package/dist/core/interfaces/cipher/i-tool-scheduler.d.ts +103 -0
- package/dist/core/interfaces/cipher/i-tool-scheduler.js +11 -0
- package/dist/core/interfaces/cipher/llm-types.d.ts +46 -0
- package/dist/core/interfaces/cipher/llm-types.js +5 -0
- package/dist/core/interfaces/cipher/message-types.d.ts +118 -0
- package/dist/core/interfaces/cipher/message-types.js +5 -0
- package/dist/core/interfaces/cipher/tokenizer-types.d.ts +11 -0
- package/dist/core/interfaces/cipher/tokenizer-types.js +14 -0
- package/dist/core/interfaces/i-cogit-pull-service.d.ts +24 -0
- package/dist/core/interfaces/i-cogit-pull-service.js +1 -0
- package/dist/core/interfaces/i-cogit-push-service.d.ts +27 -0
- package/dist/core/interfaces/i-cogit-push-service.js +1 -0
- package/dist/core/interfaces/i-context-file-reader.d.ts +32 -0
- package/dist/core/interfaces/i-context-file-reader.js +1 -0
- package/dist/core/interfaces/i-context-tree-service.d.ts +21 -0
- package/dist/core/interfaces/i-context-tree-service.js +1 -0
- package/dist/core/interfaces/i-context-tree-snapshot-service.d.ts +36 -0
- package/dist/core/interfaces/i-context-tree-snapshot-service.js +1 -0
- package/dist/core/interfaces/i-context-tree-writer-service.d.ts +32 -0
- package/dist/core/interfaces/i-context-tree-writer-service.js +1 -0
- package/dist/core/interfaces/i-file-watcher-service.d.ts +41 -0
- package/dist/core/interfaces/i-file-watcher-service.js +1 -0
- package/dist/core/interfaces/i-rule-template-service.d.ts +0 -4
- package/dist/core/interfaces/i-rule-template-service.js +1 -4
- package/dist/core/interfaces/parser/i-clean-parser-service.d.ts +18 -0
- package/dist/core/interfaces/parser/i-clean-parser-service.js +1 -0
- package/dist/core/interfaces/parser/i-raw-parser-service.d.ts +17 -0
- package/dist/core/interfaces/parser/i-raw-parser-service.js +1 -0
- package/dist/core/interfaces/parser/i-session-normalizer.d.ts +56 -0
- package/dist/core/interfaces/parser/i-session-normalizer.js +1 -0
- package/dist/hooks/command_not_found/handle-invalid-commands.d.ts +7 -0
- package/dist/hooks/command_not_found/handle-invalid-commands.js +32 -0
- package/dist/hooks/error/clean-errors.d.ts +7 -0
- package/dist/hooks/error/clean-errors.js +50 -0
- package/dist/hooks/init/welcome.js +72 -1
- package/dist/hooks/prerun/validate-brv-config-version.d.ts +28 -0
- package/dist/hooks/prerun/validate-brv-config-version.js +43 -0
- package/dist/infra/cipher/agent-service-factory.d.ts +86 -0
- package/dist/infra/cipher/agent-service-factory.js +212 -0
- package/dist/infra/cipher/blob/blob-storage-factory.d.ts +13 -0
- package/dist/infra/cipher/blob/blob-storage-factory.js +14 -0
- package/dist/infra/cipher/blob/index.d.ts +10 -0
- package/dist/infra/cipher/blob/index.js +12 -0
- package/dist/infra/cipher/blob/migrations.d.ts +63 -0
- package/dist/infra/cipher/blob/migrations.js +148 -0
- package/dist/infra/cipher/blob/sqlite-blob-storage.d.ts +82 -0
- package/dist/infra/cipher/blob/sqlite-blob-storage.js +307 -0
- package/dist/infra/cipher/cipher-agent-state-manager.d.ts +63 -0
- package/dist/infra/cipher/cipher-agent-state-manager.js +108 -0
- package/dist/infra/cipher/cipher-agent.d.ts +182 -0
- package/dist/infra/cipher/cipher-agent.js +317 -0
- package/dist/infra/cipher/command-parser.d.ts +23 -0
- package/dist/infra/cipher/command-parser.js +85 -0
- package/dist/infra/cipher/display/todo-display.d.ts +23 -0
- package/dist/infra/cipher/display/todo-display.js +129 -0
- package/dist/infra/cipher/events/event-emitter.d.ts +137 -0
- package/dist/infra/cipher/events/event-emitter.js +158 -0
- package/dist/infra/cipher/exit-codes.d.ts +44 -0
- package/dist/infra/cipher/exit-codes.js +58 -0
- package/dist/infra/cipher/file-system/file-system-service.d.ts +105 -0
- package/dist/infra/cipher/file-system/file-system-service.js +641 -0
- package/dist/infra/cipher/file-system/gitignore-filter.d.ts +77 -0
- package/dist/infra/cipher/file-system/gitignore-filter.js +120 -0
- package/dist/infra/cipher/file-system/glob-utils.d.ts +60 -0
- package/dist/infra/cipher/file-system/glob-utils.js +120 -0
- package/dist/infra/cipher/file-system/path-validator.d.ts +69 -0
- package/dist/infra/cipher/file-system/path-validator.js +184 -0
- package/dist/infra/cipher/grpc/internal-llm-grpc-service.d.ts +149 -0
- package/dist/infra/cipher/grpc/internal-llm-grpc-service.js +364 -0
- package/dist/infra/cipher/grpc/internal-llm-grpc.proto +94 -0
- package/dist/infra/cipher/interactive-commands.d.ts +16 -0
- package/dist/infra/cipher/interactive-commands.js +198 -0
- package/dist/infra/cipher/interactive-loop.d.ts +24 -0
- package/dist/infra/cipher/interactive-loop.js +352 -0
- package/dist/infra/cipher/llm/context/async-mutex.d.ts +59 -0
- package/dist/infra/cipher/llm/context/async-mutex.js +92 -0
- package/dist/infra/cipher/llm/context/compression/index.d.ts +6 -0
- package/dist/infra/cipher/llm/context/compression/index.js +5 -0
- package/dist/infra/cipher/llm/context/compression/middle-removal.d.ts +40 -0
- package/dist/infra/cipher/llm/context/compression/middle-removal.js +76 -0
- package/dist/infra/cipher/llm/context/compression/oldest-removal.d.ts +38 -0
- package/dist/infra/cipher/llm/context/compression/oldest-removal.js +53 -0
- package/dist/infra/cipher/llm/context/compression/types.d.ts +36 -0
- package/dist/infra/cipher/llm/context/compression/types.js +1 -0
- package/dist/infra/cipher/llm/context/context-manager.d.ts +234 -0
- package/dist/infra/cipher/llm/context/context-manager.js +419 -0
- package/dist/infra/cipher/llm/context/index.d.ts +2 -0
- package/dist/infra/cipher/llm/context/index.js +2 -0
- package/dist/infra/cipher/llm/context/loop-detector.d.ts +125 -0
- package/dist/infra/cipher/llm/context/loop-detector.js +194 -0
- package/dist/infra/cipher/llm/context/utils.d.ts +17 -0
- package/dist/infra/cipher/llm/context/utils.js +89 -0
- package/dist/infra/cipher/llm/formatters/claude-formatter.d.ts +54 -0
- package/dist/infra/cipher/llm/formatters/claude-formatter.js +182 -0
- package/dist/infra/cipher/llm/formatters/gemini-formatter.d.ts +69 -0
- package/dist/infra/cipher/llm/formatters/gemini-formatter.js +253 -0
- package/dist/infra/cipher/llm/formatters/openrouter-formatter.d.ts +47 -0
- package/dist/infra/cipher/llm/formatters/openrouter-formatter.js +238 -0
- package/dist/infra/cipher/llm/generators/byterover-content-generator.d.ts +92 -0
- package/dist/infra/cipher/llm/generators/byterover-content-generator.js +211 -0
- package/dist/infra/cipher/llm/generators/index.d.ts +13 -0
- package/dist/infra/cipher/llm/generators/index.js +13 -0
- package/dist/infra/cipher/llm/generators/logging-content-generator.d.ts +104 -0
- package/dist/infra/cipher/llm/generators/logging-content-generator.js +182 -0
- package/dist/infra/cipher/llm/generators/openrouter-content-generator.d.ts +93 -0
- package/dist/infra/cipher/llm/generators/openrouter-content-generator.js +254 -0
- package/dist/infra/cipher/llm/generators/retryable-content-generator.d.ts +90 -0
- package/dist/infra/cipher/llm/generators/retryable-content-generator.js +157 -0
- package/dist/infra/cipher/llm/index.d.ts +9 -0
- package/dist/infra/cipher/llm/index.js +13 -0
- package/dist/infra/cipher/llm/internal-llm-service.d.ts +308 -0
- package/dist/infra/cipher/llm/internal-llm-service.js +724 -0
- package/dist/infra/cipher/llm/openrouter-llm-service.d.ts +183 -0
- package/dist/infra/cipher/llm/openrouter-llm-service.js +386 -0
- package/dist/infra/cipher/llm/response-validator.d.ts +89 -0
- package/dist/infra/cipher/llm/response-validator.js +157 -0
- package/dist/infra/cipher/llm/retry/index.d.ts +10 -0
- package/dist/infra/cipher/llm/retry/index.js +10 -0
- package/dist/infra/cipher/llm/retry/retry-policy.d.ts +74 -0
- package/dist/infra/cipher/llm/retry/retry-policy.js +146 -0
- package/dist/infra/cipher/llm/retry/retry-with-backoff.d.ts +113 -0
- package/dist/infra/cipher/llm/retry/retry-with-backoff.js +247 -0
- package/dist/infra/cipher/llm/thought-parser.d.ts +145 -0
- package/dist/infra/cipher/llm/thought-parser.js +190 -0
- package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.d.ts +47 -0
- package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.js +55 -0
- package/dist/infra/cipher/llm/tokenizers/default-tokenizer.d.ts +31 -0
- package/dist/infra/cipher/llm/tokenizers/default-tokenizer.js +38 -0
- package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.d.ts +37 -0
- package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.js +45 -0
- package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.d.ts +29 -0
- package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.js +37 -0
- package/dist/infra/cipher/llm/tool-output-processor.d.ts +117 -0
- package/dist/infra/cipher/llm/tool-output-processor.js +153 -0
- package/dist/infra/cipher/logger/console-logger.d.ts +42 -0
- package/dist/infra/cipher/logger/console-logger.js +63 -0
- package/dist/infra/cipher/logger/event-based-logger.d.ts +54 -0
- package/dist/infra/cipher/logger/event-based-logger.js +92 -0
- package/dist/infra/cipher/memory/index.d.ts +6 -0
- package/dist/infra/cipher/memory/index.js +7 -0
- package/dist/infra/cipher/memory/memory-manager.d.ts +136 -0
- package/dist/infra/cipher/memory/memory-manager.js +523 -0
- package/dist/infra/cipher/parsers/coding-agent-log-parser.d.ts +24 -0
- package/dist/infra/cipher/parsers/coding-agent-log-parser.js +51 -0
- package/dist/infra/cipher/process/command-validator.d.ts +59 -0
- package/dist/infra/cipher/process/command-validator.js +266 -0
- package/dist/infra/cipher/process/index.d.ts +8 -0
- package/dist/infra/cipher/process/index.js +8 -0
- package/dist/infra/cipher/process/process-service.d.ts +95 -0
- package/dist/infra/cipher/process/process-service.js +439 -0
- package/dist/infra/cipher/session/chat-session.d.ts +80 -0
- package/dist/infra/cipher/session/chat-session.js +165 -0
- package/dist/infra/cipher/session/index.d.ts +6 -0
- package/dist/infra/cipher/session/index.js +5 -0
- package/dist/infra/cipher/session/session-event-forwarder.d.ts +37 -0
- package/dist/infra/cipher/session/session-event-forwarder.js +83 -0
- package/dist/infra/cipher/session/session-manager.d.ts +109 -0
- package/dist/infra/cipher/session/session-manager.js +172 -0
- package/dist/infra/cipher/storage/blob-history-storage.d.ts +76 -0
- package/dist/infra/cipher/storage/blob-history-storage.js +178 -0
- package/dist/infra/cipher/system-prompt/simple-prompt-factory.d.ts +105 -0
- package/dist/infra/cipher/system-prompt/simple-prompt-factory.js +290 -0
- package/dist/infra/cipher/tools/core-tool-scheduler.d.ts +99 -0
- package/dist/infra/cipher/tools/core-tool-scheduler.js +161 -0
- package/dist/infra/cipher/tools/default-policy-rules.d.ts +26 -0
- package/dist/infra/cipher/tools/default-policy-rules.js +125 -0
- package/dist/infra/cipher/tools/implementations/bash-exec-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/bash-exec-tool.js +93 -0
- package/dist/infra/cipher/tools/implementations/bash-output-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/bash-output-tool.js +47 -0
- package/dist/infra/cipher/tools/implementations/create-knowledge-topic-tool.d.ts +11 -0
- package/dist/infra/cipher/tools/implementations/create-knowledge-topic-tool.js +142 -0
- package/dist/infra/cipher/tools/implementations/delete-memory-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/delete-memory-tool.js +37 -0
- package/dist/infra/cipher/tools/implementations/detect-domains-tool.d.ts +7 -0
- package/dist/infra/cipher/tools/implementations/detect-domains-tool.js +73 -0
- package/dist/infra/cipher/tools/implementations/edit-file-tool.d.ts +13 -0
- package/dist/infra/cipher/tools/implementations/edit-file-tool.js +50 -0
- package/dist/infra/cipher/tools/implementations/edit-memory-tool.d.ts +13 -0
- package/dist/infra/cipher/tools/implementations/edit-memory-tool.js +53 -0
- package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.d.ts +7 -0
- package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.js +421 -0
- package/dist/infra/cipher/tools/implementations/glob-files-tool.d.ts +18 -0
- package/dist/infra/cipher/tools/implementations/glob-files-tool.js +70 -0
- package/dist/infra/cipher/tools/implementations/grep-content-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/grep-content-tool.js +77 -0
- package/dist/infra/cipher/tools/implementations/kill-process-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/kill-process-tool.js +55 -0
- package/dist/infra/cipher/tools/implementations/list-memories-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/list-memories-tool.js +63 -0
- package/dist/infra/cipher/tools/implementations/read-file-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/read-file-tool.js +54 -0
- package/dist/infra/cipher/tools/implementations/read-memory-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/read-memory-tool.js +39 -0
- package/dist/infra/cipher/tools/implementations/search-history-tool.d.ts +10 -0
- package/dist/infra/cipher/tools/implementations/search-history-tool.js +36 -0
- package/dist/infra/cipher/tools/implementations/write-file-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/write-file-tool.js +52 -0
- package/dist/infra/cipher/tools/implementations/write-memory-tool.d.ts +13 -0
- package/dist/infra/cipher/tools/implementations/write-memory-tool.js +52 -0
- package/dist/infra/cipher/tools/implementations/write-todos-tool.d.ts +10 -0
- package/dist/infra/cipher/tools/implementations/write-todos-tool.js +165 -0
- package/dist/infra/cipher/tools/index.d.ts +18 -0
- package/dist/infra/cipher/tools/index.js +19 -0
- package/dist/infra/cipher/tools/policy-engine.d.ts +80 -0
- package/dist/infra/cipher/tools/policy-engine.js +110 -0
- package/dist/infra/cipher/tools/tool-invocation-queue.d.ts +191 -0
- package/dist/infra/cipher/tools/tool-invocation-queue.js +254 -0
- package/dist/infra/cipher/tools/tool-invocation.d.ts +216 -0
- package/dist/infra/cipher/tools/tool-invocation.js +294 -0
- package/dist/infra/cipher/tools/tool-manager.d.ts +135 -0
- package/dist/infra/cipher/tools/tool-manager.js +209 -0
- package/dist/infra/cipher/tools/tool-markers.d.ts +48 -0
- package/dist/infra/cipher/tools/tool-markers.js +49 -0
- package/dist/infra/cipher/tools/tool-provider.d.ts +77 -0
- package/dist/infra/cipher/tools/tool-provider.js +196 -0
- package/dist/infra/cipher/tools/tool-registry.d.ts +52 -0
- package/dist/infra/cipher/tools/tool-registry.js +144 -0
- package/dist/infra/cipher/tools/utils/schema-converter.d.ts +10 -0
- package/dist/infra/cipher/tools/utils/schema-converter.js +29 -0
- package/dist/infra/cipher/validation/workspace-validator.d.ts +19 -0
- package/dist/infra/cipher/validation/workspace-validator.js +37 -0
- package/dist/infra/cipher/watcher/coding-agent-log-watcher.d.ts +14 -0
- package/dist/infra/cipher/watcher/coding-agent-log-watcher.js +55 -0
- package/dist/infra/cogit/context-tree-to-push-context-mapper.d.ts +21 -0
- package/dist/infra/cogit/context-tree-to-push-context-mapper.js +32 -0
- package/dist/infra/cogit/http-cogit-pull-service.d.ts +15 -0
- package/dist/infra/cogit/http-cogit-pull-service.js +30 -0
- package/dist/infra/cogit/http-cogit-push-service.d.ts +17 -0
- package/dist/infra/cogit/http-cogit-push-service.js +104 -0
- package/dist/infra/config/file-config-store.js +9 -3
- package/dist/infra/context-tree/file-context-file-reader.d.ts +14 -0
- package/dist/infra/context-tree/file-context-file-reader.js +46 -0
- package/dist/infra/context-tree/file-context-tree-service.d.ts +14 -0
- package/dist/infra/context-tree/file-context-tree-service.js +46 -0
- package/dist/infra/context-tree/file-context-tree-snapshot-service.d.ts +34 -0
- package/dist/infra/context-tree/file-context-tree-snapshot-service.js +117 -0
- package/dist/infra/context-tree/file-context-tree-writer-service.d.ts +22 -0
- package/dist/infra/context-tree/file-context-tree-writer-service.js +61 -0
- package/dist/infra/memory/http-memory-retrieval-service.js +2 -1
- package/dist/infra/memory/http-memory-storage-service.js +4 -3
- package/dist/infra/parsers/clean/clean-claude-service.d.ts +111 -0
- package/dist/infra/parsers/clean/clean-claude-service.js +271 -0
- package/dist/infra/parsers/clean/clean-codex-service.d.ts +231 -0
- package/dist/infra/parsers/clean/clean-codex-service.js +534 -0
- package/dist/infra/parsers/clean/clean-copilot-service.d.ts +255 -0
- package/dist/infra/parsers/clean/clean-copilot-service.js +729 -0
- package/dist/infra/parsers/clean/clean-cursor-service.d.ts +161 -0
- package/dist/infra/parsers/clean/clean-cursor-service.js +432 -0
- package/dist/infra/parsers/clean/clean-parser-service-factory.d.ts +54 -0
- package/dist/infra/parsers/clean/clean-parser-service-factory.js +80 -0
- package/dist/infra/parsers/clean/shared.d.ts +84 -0
- package/dist/infra/parsers/clean/shared.js +273 -0
- package/dist/infra/parsers/raw/raw-claude-service.d.ts +195 -0
- package/dist/infra/parsers/raw/raw-claude-service.js +548 -0
- package/dist/infra/parsers/raw/raw-codex-service.d.ts +313 -0
- package/dist/infra/parsers/raw/raw-codex-service.js +782 -0
- package/dist/infra/parsers/raw/raw-copilot-service.d.ts +196 -0
- package/dist/infra/parsers/raw/raw-copilot-service.js +558 -0
- package/dist/infra/parsers/raw/raw-cursor-service.d.ts +316 -0
- package/dist/infra/parsers/raw/raw-cursor-service.js +818 -0
- package/dist/infra/parsers/raw/raw-parser-service-factory.d.ts +54 -0
- package/dist/infra/parsers/raw/raw-parser-service-factory.js +81 -0
- package/dist/infra/rule/constants.d.ts +4 -0
- package/dist/infra/rule/constants.js +4 -0
- package/dist/infra/rule/rule-template-service.js +1 -1
- package/dist/infra/rule/rule-writer-service.js +1 -5
- package/dist/infra/space/http-space-service.js +2 -1
- package/dist/infra/team/http-team-service.js +2 -1
- package/dist/infra/user/http-user-service.js +2 -1
- package/dist/infra/watcher/file-watcher-service.d.ts +10 -0
- package/dist/infra/watcher/file-watcher-service.js +81 -0
- package/dist/infra/workspace/workspace-detector-service.d.ts +60 -0
- package/dist/infra/workspace/workspace-detector-service.js +165 -0
- package/dist/resources/prompts/curate-context-tree-curation.yml +48 -0
- package/dist/resources/prompts/modes/autonomous.yml +9 -0
- package/dist/resources/prompts/query-context-tree-retrieval.yml +49 -0
- package/dist/resources/prompts/reflection.yml +27 -0
- package/dist/resources/prompts/system-prompt.yml +82 -0
- package/dist/resources/prompts/tool-outputs.yml +30 -0
- package/dist/templates/README.md +6 -7
- package/dist/templates/sections/command-reference.md +40 -93
- package/dist/templates/sections/workflow.md +3 -30
- package/dist/utils/emoji-helpers.d.ts +38 -0
- package/dist/utils/emoji-helpers.js +42 -0
- package/dist/utils/error-handler.d.ts +51 -0
- package/dist/utils/error-handler.js +169 -0
- package/dist/utils/error-helpers.d.ts +30 -0
- package/dist/utils/error-helpers.js +47 -0
- package/dist/utils/file-helpers.d.ts +15 -0
- package/dist/utils/file-helpers.js +44 -0
- package/dist/utils/oclif-error-helpers.d.ts +40 -0
- package/dist/utils/oclif-error-helpers.js +46 -0
- package/dist/utils/tool-display-formatter.d.ts +53 -0
- package/dist/utils/tool-display-formatter.js +257 -0
- package/oclif.manifest.json +422 -142
- package/package.json +29 -10
- package/dist/commands/add.d.ts +0 -49
- package/dist/commands/add.js +0 -192
- package/dist/commands/complete.d.ts +0 -108
- package/dist/commands/complete.js +0 -340
- package/dist/commands/retrieve.d.ts +0 -26
- package/dist/commands/retrieve.js +0 -101
- package/dist/core/domain/entities/curator-output.d.ts +0 -14
- package/dist/core/domain/entities/curator-output.js +0 -23
- package/dist/core/domain/entities/delta-batch.d.ts +0 -30
- package/dist/core/domain/entities/delta-batch.js +0 -52
- package/dist/core/domain/entities/delta-operation.d.ts +0 -31
- package/dist/core/domain/entities/delta-operation.js +0 -50
- package/dist/core/domain/entities/executor-output.d.ts +0 -27
- package/dist/core/domain/entities/executor-output.js +0 -33
- package/dist/core/domain/entities/reflector-output.d.ts +0 -38
- package/dist/core/domain/entities/reflector-output.js +0 -44
- package/dist/core/interfaces/i-ace-prompt-builder.d.ts +0 -48
- package/dist/core/interfaces/i-bullet-content-store.d.ts +0 -36
- package/dist/core/interfaces/i-delta-store.d.ts +0 -15
- package/dist/core/interfaces/i-executor-output-store.d.ts +0 -14
- package/dist/core/interfaces/i-playbook-service.d.ts +0 -69
- package/dist/core/interfaces/i-playbook-store.d.ts +0 -38
- package/dist/core/interfaces/i-reflection-store.d.ts +0 -21
- package/dist/infra/ace/ace-file-utils.d.ts +0 -46
- package/dist/infra/ace/ace-file-utils.js +0 -83
- package/dist/infra/ace/ace-prompt-templates.d.ts +0 -13
- package/dist/infra/ace/ace-prompt-templates.js +0 -177
- package/dist/infra/ace/file-bullet-content-store.d.ts +0 -27
- package/dist/infra/ace/file-bullet-content-store.js +0 -89
- package/dist/infra/ace/file-delta-store.d.ts +0 -9
- package/dist/infra/ace/file-delta-store.js +0 -26
- package/dist/infra/ace/file-executor-output-store.d.ts +0 -9
- package/dist/infra/ace/file-executor-output-store.js +0 -26
- package/dist/infra/ace/file-playbook-store.d.ts +0 -29
- package/dist/infra/ace/file-playbook-store.js +0 -107
- package/dist/infra/ace/file-reflection-store.d.ts +0 -10
- package/dist/infra/ace/file-reflection-store.js +0 -55
- package/dist/infra/playbook/file-playbook-service.d.ts +0 -42
- package/dist/infra/playbook/file-playbook-service.js +0 -132
- /package/dist/core/{interfaces/i-ace-prompt-builder.js → domain/cipher/blob/types.js} +0 -0
- /package/dist/core/{interfaces/i-bullet-content-store.js → domain/cipher/file-system/types.js} +0 -0
- /package/dist/core/{interfaces/i-delta-store.js → domain/cipher/process/types.js} +0 -0
- /package/dist/core/{interfaces/i-executor-output-store.js → domain/cipher/session/types.js} +0 -0
- /package/dist/core/{interfaces/i-playbook-service.js → domain/cipher/storage/history-types.js} +0 -0
- /package/dist/core/{interfaces/i-playbook-store.js → domain/cipher/system-prompt/types.js} +0 -0
- /package/dist/core/{interfaces/i-reflection-store.js → domain/cipher/tools/types.js} +0 -0
|
@@ -1,340 +0,0 @@
|
|
|
1
|
-
import { Args, Command, Flags } from '@oclif/core';
|
|
2
|
-
import { basename } from 'node:path';
|
|
3
|
-
import { CuratorOutput } from '../core/domain/entities/curator-output.js';
|
|
4
|
-
import { DeltaBatch } from '../core/domain/entities/delta-batch.js';
|
|
5
|
-
import { ExecutorOutput } from '../core/domain/entities/executor-output.js';
|
|
6
|
-
import { ReflectorOutput } from '../core/domain/entities/reflector-output.js';
|
|
7
|
-
import { AcePromptTemplates } from '../infra/ace/ace-prompt-templates.js';
|
|
8
|
-
import { FileDeltaStore } from '../infra/ace/file-delta-store.js';
|
|
9
|
-
import { FileExecutorOutputStore } from '../infra/ace/file-executor-output-store.js';
|
|
10
|
-
import { FilePlaybookStore } from '../infra/ace/file-playbook-store.js';
|
|
11
|
-
import { FileReflectionStore } from '../infra/ace/file-reflection-store.js';
|
|
12
|
-
import { FilePlaybookService } from '../infra/playbook/file-playbook-service.js';
|
|
13
|
-
export default class Complete extends Command {
|
|
14
|
-
/* eslint-disable perfectionist/sort-objects */
|
|
15
|
-
static args = {
|
|
16
|
-
hint: Args.string({
|
|
17
|
-
description: 'Short hint for naming output files (e.g., "user-auth", "bug-fix")',
|
|
18
|
-
required: true,
|
|
19
|
-
}),
|
|
20
|
-
reasoning: Args.string({
|
|
21
|
-
description: 'Detailed reasoning and approach for completing the task',
|
|
22
|
-
required: true,
|
|
23
|
-
}),
|
|
24
|
-
finalAnswer: Args.string({
|
|
25
|
-
description: 'The final answer/solution to the task',
|
|
26
|
-
required: true,
|
|
27
|
-
}),
|
|
28
|
-
};
|
|
29
|
-
/* eslint-enable perfectionist/sort-objects */
|
|
30
|
-
static description = 'Complete ACE workflow: save executor output, generate reflection, and update playbook in one command';
|
|
31
|
-
static examples = [
|
|
32
|
-
String.raw `<%= config.bin %> <%= command.id %> "user-auth" "Implemented OAuth2 flow" "Auth works" --tool-usage "Read:src/auth.ts,Edit:src/auth.ts,Bash:npm test" --feedback "All tests passed"`,
|
|
33
|
-
String.raw `<%= config.bin %> <%= command.id %> "validation-fix" "Analyzed validator" "Fixed bug" --tool-usage "Grep:pattern:\"validate\",Read:src/validator.ts" --bullet-ids "bullet-123" --feedback "Tests passed"`,
|
|
34
|
-
String.raw `<%= config.bin %> <%= command.id %> "auth-update" "Improved error handling" "Better errors" --tool-usage "Edit:src/auth.ts" --feedback "Tests passed" --update-bullet "bullet-5"`,
|
|
35
|
-
];
|
|
36
|
-
static flags = {
|
|
37
|
-
'bullet-ids': Flags.string({
|
|
38
|
-
char: 'b',
|
|
39
|
-
default: '',
|
|
40
|
-
description: 'Comma-separated list of playbook bullet IDs referenced',
|
|
41
|
-
}),
|
|
42
|
-
feedback: Flags.string({
|
|
43
|
-
char: 'f',
|
|
44
|
-
description: 'Environment feedback about task execution (e.g., "Tests passed", "Build failed")',
|
|
45
|
-
required: true,
|
|
46
|
-
}),
|
|
47
|
-
'tool-usage': Flags.string({
|
|
48
|
-
char: 't',
|
|
49
|
-
description: 'Comma-separated list of tool calls with arguments (format: "ToolName:argument", e.g., "Read:src/file.ts,Bash:npm test")',
|
|
50
|
-
required: true,
|
|
51
|
-
}),
|
|
52
|
-
'update-bullet': Flags.string({
|
|
53
|
-
char: 'u',
|
|
54
|
-
description: 'Bullet ID to update with new knowledge (if not provided, adds new bullet)',
|
|
55
|
-
}),
|
|
56
|
-
};
|
|
57
|
-
createServices() {
|
|
58
|
-
return {
|
|
59
|
-
deltaStore: new FileDeltaStore(),
|
|
60
|
-
executorOutputStore: new FileExecutorOutputStore(),
|
|
61
|
-
playbookService: new FilePlaybookService(),
|
|
62
|
-
promptBuilder: new AcePromptTemplates(),
|
|
63
|
-
reflectionStore: new FileReflectionStore(),
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
async run() {
|
|
67
|
-
const { args, flags } = await this.parse(Complete);
|
|
68
|
-
try {
|
|
69
|
-
const { deltaStore, executorOutputStore, playbookService, promptBuilder, reflectionStore } = this.createServices();
|
|
70
|
-
// Parse comma-separated lists
|
|
71
|
-
const bulletIds = this.parseBulletIds(flags['bullet-ids']);
|
|
72
|
-
const toolUsage = this.parseToolUsage(flags['tool-usage']);
|
|
73
|
-
// Phase 1: Executor
|
|
74
|
-
const saveResult = await this.saveExecutorOutput(executorOutputStore, args, bulletIds, toolUsage);
|
|
75
|
-
// Phase 2: Reflector
|
|
76
|
-
const { reflection, reflectionFilePath, tagsApplied } = await this.generateReflectionAndApplyTags({ playbookService, promptBuilder, reflectionStore }, saveResult.executorOutput, flags.feedback);
|
|
77
|
-
// Phase 3: Curator
|
|
78
|
-
const { curatorOutput, deltaFilePath } = await this.generateCurationAndApplyDelta({ deltaStore, playbookService, promptBuilder }, reflection, saveResult.executorOutput, flags);
|
|
79
|
-
// Display final summary
|
|
80
|
-
this.displayFinalSummary({
|
|
81
|
-
curatorOutput,
|
|
82
|
-
deltaFilePath,
|
|
83
|
-
executorPath: saveResult.filePath,
|
|
84
|
-
hint: args.hint,
|
|
85
|
-
reflectionFilePath,
|
|
86
|
-
tagsApplied,
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
catch (error) {
|
|
90
|
-
this.error(error instanceof Error ? error.message : 'Failed to complete ACE workflow');
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Displays a formatted summary of the completed ACE workflow.
|
|
95
|
-
* Shows file paths, delta operations breakdown, and success confirmation.
|
|
96
|
-
*
|
|
97
|
-
* @param summary - Summary data containing all workflow outputs
|
|
98
|
-
* @param summary.curatorOutput - The curator output containing delta operations
|
|
99
|
-
* @param summary.deltaFilePath - Path to the saved delta file
|
|
100
|
-
* @param summary.executorPath - Path to the saved executor output file
|
|
101
|
-
* @param summary.hint - The hint used for naming output files
|
|
102
|
-
* @param summary.reflectionFilePath - Path to the saved reflection file
|
|
103
|
-
* @param summary.tagsApplied - Number of tags applied to the playbook
|
|
104
|
-
*/
|
|
105
|
-
displayFinalSummary(summary) {
|
|
106
|
-
const { delta } = summary.curatorOutput;
|
|
107
|
-
const operationsByType = delta.getOperationsByType();
|
|
108
|
-
this.log('='.repeat(80));
|
|
109
|
-
this.log('✅ ACE WORKFLOW COMPLETED SUCCESSFULLY!');
|
|
110
|
-
this.log('='.repeat(80));
|
|
111
|
-
this.log('');
|
|
112
|
-
this.log('Summary:');
|
|
113
|
-
this.log(` Hint: ${summary.hint}`);
|
|
114
|
-
this.log(` Executor output: ${summary.executorPath}`);
|
|
115
|
-
this.log(` Reflection: ${summary.reflectionFilePath}`);
|
|
116
|
-
this.log(` Delta: ${summary.deltaFilePath}`);
|
|
117
|
-
this.log(` Tags applied: ${summary.tagsApplied}`);
|
|
118
|
-
this.log('');
|
|
119
|
-
this.log('Delta operations:');
|
|
120
|
-
if (delta.isEmpty()) {
|
|
121
|
-
this.log(' - No operations (empty delta batch)');
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
if (operationsByType.ADD) {
|
|
125
|
-
this.log(` - ADD: ${operationsByType.ADD.length}`);
|
|
126
|
-
}
|
|
127
|
-
if (operationsByType.UPDATE) {
|
|
128
|
-
this.log(` - UPDATE: ${operationsByType.UPDATE.length}`);
|
|
129
|
-
}
|
|
130
|
-
if (operationsByType.REMOVE) {
|
|
131
|
-
this.log(` - REMOVE: ${operationsByType.REMOVE.length}`);
|
|
132
|
-
}
|
|
133
|
-
this.log(` Total operations: ${delta.getOperationCount()}`);
|
|
134
|
-
}
|
|
135
|
-
this.log('');
|
|
136
|
-
this.log('🎉 Playbook has been updated with new knowledge!');
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Extracts file paths from tool usage strings and formats them with project name prefix.
|
|
140
|
-
* Converts tool usage entries like "Read:src/file.ts" to "projectName/src/file.ts".
|
|
141
|
-
* Filters out non-file-like arguments (e.g., "Bash:npm test" is excluded).
|
|
142
|
-
*
|
|
143
|
-
* @param toolUsage - Array of tool usage strings (e.g., ["Read:src/file.ts", "Edit:src/other.ts"])
|
|
144
|
-
* @returns Array of formatted file paths with project name prefix
|
|
145
|
-
*/
|
|
146
|
-
extractFilePaths(toolUsage) {
|
|
147
|
-
const cwd = process.cwd();
|
|
148
|
-
const projectName = basename(cwd);
|
|
149
|
-
return toolUsage
|
|
150
|
-
.map((usage) => {
|
|
151
|
-
const parts = usage.split(':');
|
|
152
|
-
if (parts.length <= 1)
|
|
153
|
-
return null;
|
|
154
|
-
const filePath = parts[1].trim();
|
|
155
|
-
// Filter out non-file-like paths (must contain / or . to be considered a file path)
|
|
156
|
-
if (!filePath.includes('/') && !filePath.includes('.')) {
|
|
157
|
-
return null;
|
|
158
|
-
}
|
|
159
|
-
// Remove leading ./ if present
|
|
160
|
-
const cleanPath = filePath.replace(/^\.\//, '');
|
|
161
|
-
// Combine project name with file path
|
|
162
|
-
const fullPath = `${projectName}/${cleanPath}`;
|
|
163
|
-
return fullPath;
|
|
164
|
-
})
|
|
165
|
-
.filter(Boolean);
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Phase 3: Generates curation and applies delta operations to the playbook.
|
|
169
|
-
* Creates delta operations (ADD or UPDATE) based on reflection insights and applies them to the playbook.
|
|
170
|
-
*
|
|
171
|
-
* @param services - The service instances
|
|
172
|
-
* @param services.deltaStore - Delta store for persisting deltas
|
|
173
|
-
* @param services.playbookService - Playbook service for applying deltas
|
|
174
|
-
* @param services.promptBuilder - Prompt builder for curation prompts
|
|
175
|
-
* @param reflection - The reflection output from Phase 2
|
|
176
|
-
* @param executorOutput - The executor output from Phase 1
|
|
177
|
-
* @param flags - Command flags containing optional update-bullet ID
|
|
178
|
-
* @returns Object containing curator output and delta file path
|
|
179
|
-
*/
|
|
180
|
-
async generateCurationAndApplyDelta(services, reflection, executorOutput, flags) {
|
|
181
|
-
this.log('🎨 Phase 3: Generating curation prompt...');
|
|
182
|
-
// Note: We load playbook temporarily just for validation
|
|
183
|
-
// The actual delta application will be done by playbookService
|
|
184
|
-
const tempStore = new FilePlaybookStore();
|
|
185
|
-
const updatedPlaybook = await tempStore.load();
|
|
186
|
-
if (!updatedPlaybook) {
|
|
187
|
-
this.error('Failed to reload playbook');
|
|
188
|
-
}
|
|
189
|
-
// Generate curation prompt (directly call promptBuilder instead of use case)
|
|
190
|
-
// Note: The prompt is generated but not currently used in this auto-generation flow
|
|
191
|
-
// In a full implementation, this would be sent to an LLM for processing
|
|
192
|
-
// services.promptBuilder.buildCuratorPrompt(reflection, updatedPlaybook, questionContext)
|
|
193
|
-
// Determine operation type based on --update-bullet flag
|
|
194
|
-
const updateBulletId = flags['update-bullet'];
|
|
195
|
-
let operationType = 'ADD';
|
|
196
|
-
// Validate bullet exists if UPDATE mode
|
|
197
|
-
if (updateBulletId) {
|
|
198
|
-
const bullet = updatedPlaybook.getBullet(updateBulletId);
|
|
199
|
-
if (!bullet) {
|
|
200
|
-
this.error(`Bullet with ID "${updateBulletId}" not found in playbook. Cannot update non-existent bullet.`);
|
|
201
|
-
}
|
|
202
|
-
operationType = 'UPDATE';
|
|
203
|
-
this.log(` ℹ️ Updating existing bullet: ${updateBulletId}`);
|
|
204
|
-
}
|
|
205
|
-
else {
|
|
206
|
-
this.log(' ℹ️ Adding new bullet to playbook...');
|
|
207
|
-
}
|
|
208
|
-
// Auto-generate curator delta
|
|
209
|
-
const relatedFiles = this.extractFilePaths(executorOutput.toolUsage);
|
|
210
|
-
const curatorJson = {
|
|
211
|
-
operations: [
|
|
212
|
-
{
|
|
213
|
-
bulletId: updateBulletId,
|
|
214
|
-
content: reflection.keyInsight,
|
|
215
|
-
metadata: {
|
|
216
|
-
relatedFiles,
|
|
217
|
-
tags: ['auto-generated'],
|
|
218
|
-
timestamp: new Date().toISOString(),
|
|
219
|
-
},
|
|
220
|
-
section: 'Lessons Learned',
|
|
221
|
-
type: operationType,
|
|
222
|
-
},
|
|
223
|
-
],
|
|
224
|
-
reasoning: operationType === 'UPDATE'
|
|
225
|
-
? `Updating bullet ${updateBulletId} with new insight: ${reflection.keyInsight}`
|
|
226
|
-
: `Adding key insight from task: ${reflection.keyInsight}`,
|
|
227
|
-
};
|
|
228
|
-
// Parse and save delta batch using service
|
|
229
|
-
const deltaBatch = DeltaBatch.fromJson(curatorJson);
|
|
230
|
-
const curatorOutput = new CuratorOutput(deltaBatch);
|
|
231
|
-
const deltaFilePath = await services.deltaStore.save(deltaBatch, reflection.hint);
|
|
232
|
-
// Apply delta operations using playbook service
|
|
233
|
-
const { operationsApplied } = await services.playbookService.applyDelta({ delta: curatorOutput.delta });
|
|
234
|
-
this.log(` ✓ Delta saved: ${deltaFilePath}`);
|
|
235
|
-
this.log(` ✓ Delta operations applied to playbook (${operationsApplied} operations)`);
|
|
236
|
-
this.log('');
|
|
237
|
-
return { curatorOutput, deltaFilePath };
|
|
238
|
-
}
|
|
239
|
-
/**
|
|
240
|
-
* Phase 2: Generates reflection based on executor output and applies tags to the playbook.
|
|
241
|
-
* Auto-generates reflection analysis from feedback and applies bullet tags to relevant playbook sections.
|
|
242
|
-
*
|
|
243
|
-
* @param services - The service instances
|
|
244
|
-
* @param services.playbookService - Playbook service for applying reflection tags
|
|
245
|
-
* @param services.promptBuilder - Prompt builder for reflection prompts
|
|
246
|
-
* @param services.reflectionStore - Reflection store for persisting reflections
|
|
247
|
-
* @param executorOutput - The executor output from Phase 1
|
|
248
|
-
* @param feedback - Environment feedback about task execution (e.g., "Tests passed", "Build failed")
|
|
249
|
-
* @returns Object containing reflection output, file path, and number of tags applied
|
|
250
|
-
*/
|
|
251
|
-
async generateReflectionAndApplyTags(services, executorOutput, feedback) {
|
|
252
|
-
this.log('🤔 Phase 2: Generating reflection...');
|
|
253
|
-
// Note: We don't need to load playbook here anymore as applyReflectionTags handles it internally
|
|
254
|
-
// Generate reflection prompt (directly call promptBuilder instead of use case)
|
|
255
|
-
// Note: The prompt is generated but not currently used in this auto-generation flow
|
|
256
|
-
// In a full implementation, this would be sent to an LLM for processing
|
|
257
|
-
// const task = executorOutput.reasoning.split('\n')[0] || 'Task from executor'
|
|
258
|
-
// services.promptBuilder.buildReflectorPrompt(executorOutput, task, feedback, playbook, groundTruth)
|
|
259
|
-
// Auto-generate reflection based on feedback
|
|
260
|
-
this.log(' ℹ️ Auto-generating reflection based on feedback...');
|
|
261
|
-
const reflectionJson = {
|
|
262
|
-
bulletTags: [],
|
|
263
|
-
correctApproach: executorOutput.reasoning,
|
|
264
|
-
errorIdentification: feedback.toLowerCase().includes('fail') || feedback.toLowerCase().includes('error')
|
|
265
|
-
? `Issues identified: ${feedback}`
|
|
266
|
-
: 'No critical errors identified',
|
|
267
|
-
hint: executorOutput.hint,
|
|
268
|
-
keyInsight: executorOutput.finalAnswer,
|
|
269
|
-
reasoning: `Analysis: ${feedback}. Approach: ${executorOutput.reasoning}`,
|
|
270
|
-
rootCauseAnalysis: feedback.toLowerCase().includes('fail') || feedback.toLowerCase().includes('error')
|
|
271
|
-
? `Root cause requires investigation: ${feedback}`
|
|
272
|
-
: 'Successful execution without errors',
|
|
273
|
-
};
|
|
274
|
-
// Parse and save reflection using service
|
|
275
|
-
const reflection = ReflectorOutput.fromJson(reflectionJson);
|
|
276
|
-
const reflectionFilePath = await services.reflectionStore.save(reflection);
|
|
277
|
-
// Apply tags to playbook using playbook service
|
|
278
|
-
const { tagsApplied } = await services.playbookService.applyReflectionTags({ reflection });
|
|
279
|
-
this.log(` ✓ Reflection saved: ${reflectionFilePath}`);
|
|
280
|
-
this.log(` ✓ Tags applied to playbook: ${tagsApplied}`);
|
|
281
|
-
this.log('');
|
|
282
|
-
return { reflection, reflectionFilePath, tagsApplied };
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* Parses comma-separated bullet IDs string into an array of trimmed IDs.
|
|
286
|
-
* Empty strings and whitespace-only entries are filtered out.
|
|
287
|
-
*
|
|
288
|
-
* @param bulletIdsStr - Comma-separated string of bullet IDs (e.g., "bullet-1, bullet-2")
|
|
289
|
-
* @returns Array of trimmed bullet ID strings (empty array if input is empty string)
|
|
290
|
-
*/
|
|
291
|
-
parseBulletIds(bulletIdsStr) {
|
|
292
|
-
return bulletIdsStr
|
|
293
|
-
.split(',')
|
|
294
|
-
.map((id) => id.trim())
|
|
295
|
-
.filter((id) => id.length > 0);
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Parses comma-separated tool usage string into an array of trimmed entries.
|
|
299
|
-
* Empty strings and whitespace-only entries are filtered out.
|
|
300
|
-
*
|
|
301
|
-
* @param toolUsageStr - Comma-separated string of tool usage (e.g., "Read:file.ts, Edit:other.ts")
|
|
302
|
-
* @returns Array of trimmed tool usage strings
|
|
303
|
-
*/
|
|
304
|
-
parseToolUsage(toolUsageStr) {
|
|
305
|
-
return toolUsageStr
|
|
306
|
-
.split(',')
|
|
307
|
-
.map((tool) => tool.trim())
|
|
308
|
-
.filter((tool) => tool.length > 0);
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* Phase 1: Saves executor output to a file.
|
|
312
|
-
* Creates an ExecutorOutput entity from command arguments and persists it using the executor output store service.
|
|
313
|
-
*
|
|
314
|
-
* @param executorOutputStore - The executor output store service
|
|
315
|
-
* @param args - Command arguments
|
|
316
|
-
* @param args.hint - Short hint for naming output files
|
|
317
|
-
* @param args.reasoning - Detailed reasoning and approach for completing the task
|
|
318
|
-
* @param args.finalAnswer - The final answer/solution to the task
|
|
319
|
-
* @param bulletIds - Array of playbook bullet IDs referenced during task execution
|
|
320
|
-
* @param toolUsage - Array of tool usage strings (e.g., ["Read:src/file.ts", "Bash:npm test"])
|
|
321
|
-
* @returns Object containing the executor output entity and file path where it was saved
|
|
322
|
-
*/
|
|
323
|
-
async saveExecutorOutput(executorOutputStore, args, bulletIds, toolUsage) {
|
|
324
|
-
this.log('🚀 Starting ACE workflow...');
|
|
325
|
-
this.log('');
|
|
326
|
-
this.log('📝 Phase 1: Saving executor output...');
|
|
327
|
-
const executorOutput = new ExecutorOutput({
|
|
328
|
-
bulletIds,
|
|
329
|
-
finalAnswer: args.finalAnswer,
|
|
330
|
-
hint: args.hint,
|
|
331
|
-
reasoning: args.reasoning,
|
|
332
|
-
toolUsage,
|
|
333
|
-
});
|
|
334
|
-
// Save executor output using service
|
|
335
|
-
const filePath = await executorOutputStore.save(executorOutput);
|
|
336
|
-
this.log(` ✓ Executor output saved: ${filePath}`);
|
|
337
|
-
this.log('');
|
|
338
|
-
return { executorOutput, filePath };
|
|
339
|
-
}
|
|
340
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { Command } from '@oclif/core';
|
|
2
|
-
import type { AuthToken } from '../core/domain/entities/auth-token.js';
|
|
3
|
-
import type { BrvConfig } from '../core/domain/entities/brv-config.js';
|
|
4
|
-
import type { IMemoryRetrievalService } from '../core/interfaces/i-memory-retrieval-service.js';
|
|
5
|
-
import type { IProjectConfigStore } from '../core/interfaces/i-project-config-store.js';
|
|
6
|
-
import type { ITokenStore } from '../core/interfaces/i-token-store.js';
|
|
7
|
-
import { ITrackingService } from '../core/interfaces/i-tracking-service.js';
|
|
8
|
-
export default class Retrieve extends Command {
|
|
9
|
-
static description: string;
|
|
10
|
-
static examples: string[];
|
|
11
|
-
static flags: {
|
|
12
|
-
compact: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
-
'node-keys': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
-
query: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
-
};
|
|
16
|
-
protected checkProjectInt(projectConfigStore: IProjectConfigStore): Promise<BrvConfig>;
|
|
17
|
-
protected createServices(): {
|
|
18
|
-
memoryService: IMemoryRetrievalService;
|
|
19
|
-
projectConfigStore: IProjectConfigStore;
|
|
20
|
-
tokenStore: ITokenStore;
|
|
21
|
-
trackingService: ITrackingService;
|
|
22
|
-
};
|
|
23
|
-
run(): Promise<void>;
|
|
24
|
-
protected validateAuth(tokenStore: ITokenStore): Promise<AuthToken>;
|
|
25
|
-
private buildJsonOutput;
|
|
26
|
-
}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import { Command, Flags } from '@oclif/core';
|
|
2
|
-
import { getCurrentConfig } from '../config/environment.js';
|
|
3
|
-
import { ProjectConfigStore } from '../infra/config/file-config-store.js';
|
|
4
|
-
import { HttpMemoryRetrievalService } from '../infra/memory/http-memory-retrieval-service.js';
|
|
5
|
-
import { KeychainTokenStore } from '../infra/storage/keychain-token-store.js';
|
|
6
|
-
import { MixpanelTrackingService } from '../infra/tracking/mixpanel-tracking-service.js';
|
|
7
|
-
export default class Retrieve extends Command {
|
|
8
|
-
static description = 'Retrieve memories from ByteRover Memora service and output as JSON';
|
|
9
|
-
static examples = [
|
|
10
|
-
'<%= config.bin %> <%= command.id %> --query "authentication best practices"',
|
|
11
|
-
'<%= config.bin %> <%= command.id %> -q "error handling" -n "src/auth/login.ts,src/auth/oauth.ts"',
|
|
12
|
-
'<%= config.bin %> <%= command.id %> -q "database connection issues" --compact',
|
|
13
|
-
];
|
|
14
|
-
static flags = {
|
|
15
|
-
compact: Flags.boolean({
|
|
16
|
-
default: false,
|
|
17
|
-
description: 'Output compact JSON (single line)',
|
|
18
|
-
required: false,
|
|
19
|
-
}),
|
|
20
|
-
'node-keys': Flags.string({
|
|
21
|
-
char: 'n',
|
|
22
|
-
description: 'Comma-separated list of node keys (file paths) to filter results',
|
|
23
|
-
required: false,
|
|
24
|
-
}),
|
|
25
|
-
query: Flags.string({
|
|
26
|
-
char: 'q',
|
|
27
|
-
description: 'Search query string',
|
|
28
|
-
required: true,
|
|
29
|
-
}),
|
|
30
|
-
};
|
|
31
|
-
async checkProjectInt(projectConfigStore) {
|
|
32
|
-
const isInitialized = await projectConfigStore.exists();
|
|
33
|
-
if (!isInitialized) {
|
|
34
|
-
this.error('Project is not initialized. Please run "brv init" first.');
|
|
35
|
-
}
|
|
36
|
-
const config = await projectConfigStore.read();
|
|
37
|
-
if (!config) {
|
|
38
|
-
this.error('Failed to read project configuration.');
|
|
39
|
-
}
|
|
40
|
-
return config;
|
|
41
|
-
}
|
|
42
|
-
createServices() {
|
|
43
|
-
const envConfig = getCurrentConfig();
|
|
44
|
-
const tokenStore = new KeychainTokenStore();
|
|
45
|
-
const trackingService = new MixpanelTrackingService(tokenStore);
|
|
46
|
-
return {
|
|
47
|
-
memoryService: new HttpMemoryRetrievalService({
|
|
48
|
-
apiBaseUrl: envConfig.memoraApiBaseUrl,
|
|
49
|
-
}),
|
|
50
|
-
projectConfigStore: new ProjectConfigStore(),
|
|
51
|
-
tokenStore,
|
|
52
|
-
trackingService,
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
async run() {
|
|
56
|
-
const { flags } = await this.parse(Retrieve);
|
|
57
|
-
const { memoryService, projectConfigStore, tokenStore, trackingService } = this.createServices();
|
|
58
|
-
try {
|
|
59
|
-
const token = await this.validateAuth(tokenStore);
|
|
60
|
-
const projectConfig = await this.checkProjectInt(projectConfigStore);
|
|
61
|
-
// Initialize tracking service
|
|
62
|
-
await trackingService.track('mem:retrieve');
|
|
63
|
-
// Parse node-keys if provided
|
|
64
|
-
const nodeKeys = flags['node-keys'] ? flags['node-keys'].split(',').map((key) => key.trim()) : undefined;
|
|
65
|
-
// Call memory service
|
|
66
|
-
const result = await memoryService.retrieve({
|
|
67
|
-
accessToken: token.accessToken,
|
|
68
|
-
nodeKeys,
|
|
69
|
-
query: flags.query,
|
|
70
|
-
sessionKey: token.sessionKey,
|
|
71
|
-
spaceId: projectConfig.spaceId,
|
|
72
|
-
});
|
|
73
|
-
// Build and output JSON
|
|
74
|
-
const output = this.buildJsonOutput(result, flags.query, projectConfig.spaceName, nodeKeys);
|
|
75
|
-
const jsonString = flags.compact ? JSON.stringify(output) : JSON.stringify(output, null, 2);
|
|
76
|
-
this.log(jsonString);
|
|
77
|
-
}
|
|
78
|
-
catch (error) {
|
|
79
|
-
this.error(error instanceof Error ? error.message : 'Failed to retrieve memories');
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
async validateAuth(tokenStore) {
|
|
83
|
-
const token = await tokenStore.load();
|
|
84
|
-
if (token === undefined) {
|
|
85
|
-
this.error('Not authenticated. Please run "brv login" first.');
|
|
86
|
-
}
|
|
87
|
-
if (!token.isValid()) {
|
|
88
|
-
this.error('Authentication token expired. Please run "brv login" again.');
|
|
89
|
-
}
|
|
90
|
-
return token;
|
|
91
|
-
}
|
|
92
|
-
buildJsonOutput(result, query, spaceName, nodeKeys) {
|
|
93
|
-
return {
|
|
94
|
-
query,
|
|
95
|
-
spaceName,
|
|
96
|
-
...(nodeKeys && nodeKeys.length > 0 && { nodeKeys }),
|
|
97
|
-
memories: result.memories.map((m) => m.toJson()),
|
|
98
|
-
relatedMemories: result.relatedMemories.map((m) => m.toJson()),
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { DeltaBatch, type DeltaBatchJson } from './delta-batch.js';
|
|
2
|
-
/**
|
|
3
|
-
* Output from the curator phase.
|
|
4
|
-
* Contains the delta operations to apply to the playbook.
|
|
5
|
-
*/
|
|
6
|
-
export declare class CuratorOutput {
|
|
7
|
-
readonly delta: DeltaBatch;
|
|
8
|
-
constructor(delta: DeltaBatch);
|
|
9
|
-
/**
|
|
10
|
-
* Creates a CuratorOutput instance from a JSON object
|
|
11
|
-
*/
|
|
12
|
-
static fromJson(json: DeltaBatchJson): CuratorOutput;
|
|
13
|
-
toJson(): DeltaBatchJson;
|
|
14
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { DeltaBatch } from './delta-batch.js';
|
|
2
|
-
/**
|
|
3
|
-
* Output from the curator phase.
|
|
4
|
-
* Contains the delta operations to apply to the playbook.
|
|
5
|
-
*/
|
|
6
|
-
export class CuratorOutput {
|
|
7
|
-
delta;
|
|
8
|
-
constructor(delta) {
|
|
9
|
-
this.delta = delta;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Creates a CuratorOutput instance from a JSON object
|
|
13
|
-
*/
|
|
14
|
-
static fromJson(json) {
|
|
15
|
-
const delta = DeltaBatch.fromJson(json);
|
|
16
|
-
return new CuratorOutput(delta);
|
|
17
|
-
}
|
|
18
|
-
toJson() {
|
|
19
|
-
return {
|
|
20
|
-
...this.delta.toJson()
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { DeltaOperation, type DeltaOperationJson, type OperationType } from './delta-operation.js';
|
|
2
|
-
export interface DeltaBatchJson {
|
|
3
|
-
operations: DeltaOperationJson[];
|
|
4
|
-
reasoning: string;
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* Represents a batch of delta operations with curator reasoning.
|
|
8
|
-
*/
|
|
9
|
-
export declare class DeltaBatch {
|
|
10
|
-
readonly operations: DeltaOperation[];
|
|
11
|
-
readonly reasoning: string;
|
|
12
|
-
constructor(reasoning: string, operations: DeltaOperation[]);
|
|
13
|
-
/**
|
|
14
|
-
* Creates a DeltaBatch instance from a JSON object
|
|
15
|
-
*/
|
|
16
|
-
static fromJson(json: DeltaBatchJson): DeltaBatch;
|
|
17
|
-
/**
|
|
18
|
-
* Returns the count of operations
|
|
19
|
-
*/
|
|
20
|
-
getOperationCount(): number;
|
|
21
|
-
/**
|
|
22
|
-
* Returns operations grouped by type
|
|
23
|
-
*/
|
|
24
|
-
getOperationsByType(): Record<OperationType, DeltaOperation[]>;
|
|
25
|
-
/**
|
|
26
|
-
* Returns true if the batch has no operations
|
|
27
|
-
*/
|
|
28
|
-
isEmpty(): boolean;
|
|
29
|
-
toJson(): DeltaBatchJson;
|
|
30
|
-
}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { DeltaOperation } from './delta-operation.js';
|
|
2
|
-
/**
|
|
3
|
-
* Represents a batch of delta operations with curator reasoning.
|
|
4
|
-
*/
|
|
5
|
-
export class DeltaBatch {
|
|
6
|
-
operations;
|
|
7
|
-
reasoning;
|
|
8
|
-
constructor(reasoning, operations) {
|
|
9
|
-
if (reasoning.trim().length === 0) {
|
|
10
|
-
throw new Error('Delta batch reasoning cannot be empty');
|
|
11
|
-
}
|
|
12
|
-
this.reasoning = reasoning;
|
|
13
|
-
this.operations = [...operations];
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Creates a DeltaBatch instance from a JSON object
|
|
17
|
-
*/
|
|
18
|
-
static fromJson(json) {
|
|
19
|
-
const operations = (json.operations ?? []).map((op) => DeltaOperation.fromJson(op));
|
|
20
|
-
return new DeltaBatch(json.reasoning, operations);
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Returns the count of operations
|
|
24
|
-
*/
|
|
25
|
-
getOperationCount() {
|
|
26
|
-
return this.operations.length;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Returns operations grouped by type
|
|
30
|
-
*/
|
|
31
|
-
getOperationsByType() {
|
|
32
|
-
const result = {};
|
|
33
|
-
for (const op of this.operations) {
|
|
34
|
-
if (!result[op.type])
|
|
35
|
-
result[op.type] = [];
|
|
36
|
-
result[op.type].push(op);
|
|
37
|
-
}
|
|
38
|
-
return result;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Returns true if the batch has no operations
|
|
42
|
-
*/
|
|
43
|
-
isEmpty() {
|
|
44
|
-
return this.operations.length === 0;
|
|
45
|
-
}
|
|
46
|
-
toJson() {
|
|
47
|
-
return {
|
|
48
|
-
operations: this.operations.map((op) => op.toJson()),
|
|
49
|
-
reasoning: this.reasoning,
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import type { BulletMetadata } from './bullet.js';
|
|
2
|
-
export type OperationType = 'ADD' | 'REMOVE' | 'UPDATE';
|
|
3
|
-
interface DeltaOperationOptions {
|
|
4
|
-
bulletId?: string;
|
|
5
|
-
content?: string;
|
|
6
|
-
metadata?: BulletMetadata;
|
|
7
|
-
}
|
|
8
|
-
export interface DeltaOperationJson {
|
|
9
|
-
bulletId?: string;
|
|
10
|
-
content?: string;
|
|
11
|
-
metadata?: BulletMetadata;
|
|
12
|
-
section: string;
|
|
13
|
-
type: OperationType;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Represents a single change operation to apply to a playbook.
|
|
17
|
-
*/
|
|
18
|
-
export declare class DeltaOperation {
|
|
19
|
-
readonly bulletId?: string;
|
|
20
|
-
readonly content?: string;
|
|
21
|
-
readonly metadata?: BulletMetadata;
|
|
22
|
-
readonly section: string;
|
|
23
|
-
readonly type: OperationType;
|
|
24
|
-
constructor(type: OperationType, section: string, options?: DeltaOperationOptions);
|
|
25
|
-
/**
|
|
26
|
-
* Creates a DeltaOperation instance from a JSON object
|
|
27
|
-
*/
|
|
28
|
-
static fromJson(json: DeltaOperationJson): DeltaOperation;
|
|
29
|
-
toJson(): DeltaOperationJson;
|
|
30
|
-
}
|
|
31
|
-
export {};
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Represents a single change operation to apply to a playbook.
|
|
3
|
-
*/
|
|
4
|
-
export class DeltaOperation {
|
|
5
|
-
bulletId;
|
|
6
|
-
content;
|
|
7
|
-
metadata;
|
|
8
|
-
section;
|
|
9
|
-
type;
|
|
10
|
-
constructor(type, section, options = {}) {
|
|
11
|
-
const { bulletId, content, metadata } = options;
|
|
12
|
-
if (type === 'ADD' && !content) {
|
|
13
|
-
throw new Error('ADD operation requires content');
|
|
14
|
-
}
|
|
15
|
-
if (type === 'UPDATE' && !bulletId) {
|
|
16
|
-
throw new Error('UPDATE operation requires bulletId');
|
|
17
|
-
}
|
|
18
|
-
if (type === 'REMOVE' && !bulletId) {
|
|
19
|
-
throw new Error('REMOVE operation requires bulletId');
|
|
20
|
-
}
|
|
21
|
-
this.type = type;
|
|
22
|
-
this.section = section;
|
|
23
|
-
this.content = content;
|
|
24
|
-
this.bulletId = bulletId;
|
|
25
|
-
this.metadata = metadata;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Creates a DeltaOperation instance from a JSON object
|
|
29
|
-
*/
|
|
30
|
-
static fromJson(json) {
|
|
31
|
-
return new DeltaOperation(json.type, json.section, {
|
|
32
|
-
bulletId: json.bulletId,
|
|
33
|
-
content: json.content,
|
|
34
|
-
metadata: json.metadata,
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
toJson() {
|
|
38
|
-
const result = {
|
|
39
|
-
section: this.section,
|
|
40
|
-
type: this.type,
|
|
41
|
-
};
|
|
42
|
-
if (this.content !== undefined)
|
|
43
|
-
result.content = this.content;
|
|
44
|
-
if (this.bulletId !== undefined)
|
|
45
|
-
result.bulletId = this.bulletId;
|
|
46
|
-
if (this.metadata !== undefined)
|
|
47
|
-
result.metadata = this.metadata;
|
|
48
|
-
return result;
|
|
49
|
-
}
|
|
50
|
-
}
|