byterover-cli 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -56
- package/bin/dev.js +1 -1
- package/dist/commands/cipher-agent/run.d.ts +111 -0
- package/dist/commands/cipher-agent/run.js +493 -0
- package/dist/commands/cipher-agent/set-prompt.d.ts +14 -0
- package/dist/commands/cipher-agent/set-prompt.js +53 -0
- package/dist/commands/cipher-agent/show-prompt.d.ts +11 -0
- package/dist/commands/cipher-agent/show-prompt.js +48 -0
- package/dist/commands/clear.d.ts +6 -0
- package/dist/commands/clear.js +36 -15
- package/dist/commands/curate.d.ts +74 -0
- package/dist/commands/curate.js +396 -0
- package/dist/commands/foo.d.ts +12 -0
- package/dist/commands/foo.js +61 -0
- package/dist/commands/gen-rules.d.ts +3 -0
- package/dist/commands/gen-rules.js +39 -20
- package/dist/commands/init.d.ts +48 -3
- package/dist/commands/init.js +242 -70
- package/dist/commands/login.js +9 -4
- package/dist/commands/pull.d.ts +33 -0
- package/dist/commands/pull.js +115 -0
- package/dist/commands/push.d.ts +13 -13
- package/dist/commands/push.js +81 -101
- package/dist/commands/query.d.ts +63 -0
- package/dist/commands/query.js +349 -0
- package/dist/commands/space/list.d.ts +5 -2
- package/dist/commands/space/list.js +60 -56
- package/dist/commands/space/switch.d.ts +16 -0
- package/dist/commands/space/switch.js +102 -53
- package/dist/commands/status.d.ts +5 -2
- package/dist/commands/status.js +43 -33
- package/dist/commands/watch.d.ts +23 -0
- package/dist/commands/watch.js +171 -0
- package/dist/config/auth.config.js +14 -2
- package/dist/config/context-tree-domains.d.ts +12 -0
- package/dist/config/context-tree-domains.js +29 -0
- package/dist/config/environment.d.ts +6 -0
- package/dist/config/environment.js +9 -2
- package/dist/constants.d.ts +5 -0
- package/dist/constants.js +6 -0
- package/dist/core/domain/cipher/agent/agent-state-machine.d.ts +128 -0
- package/dist/core/domain/cipher/agent/agent-state-machine.js +183 -0
- package/dist/core/domain/cipher/agent/agent-state.d.ts +77 -0
- package/dist/core/domain/cipher/agent/agent-state.js +59 -0
- package/dist/core/domain/cipher/agent/index.d.ts +7 -0
- package/dist/core/domain/cipher/agent/index.js +7 -0
- package/dist/core/domain/cipher/agent-events/index.d.ts +8 -0
- package/dist/core/domain/cipher/agent-events/index.js +7 -0
- package/dist/core/domain/cipher/agent-events/types.d.ts +419 -0
- package/dist/core/domain/cipher/agent-events/types.js +42 -0
- package/dist/core/domain/cipher/blob/types.d.ts +108 -0
- package/dist/core/domain/cipher/errors/blob-error.d.ts +36 -0
- package/dist/core/domain/cipher/errors/blob-error.js +68 -0
- package/dist/core/domain/cipher/errors/file-system-error.d.ts +211 -0
- package/dist/core/domain/cipher/errors/file-system-error.js +291 -0
- package/dist/core/domain/cipher/errors/llm-error.d.ts +120 -0
- package/dist/core/domain/cipher/errors/llm-error.js +161 -0
- package/dist/core/domain/cipher/errors/memory-error.d.ts +35 -0
- package/dist/core/domain/cipher/errors/memory-error.js +62 -0
- package/dist/core/domain/cipher/errors/process-error-code.d.ts +97 -0
- package/dist/core/domain/cipher/errors/process-error-code.js +98 -0
- package/dist/core/domain/cipher/errors/process-error.d.ts +135 -0
- package/dist/core/domain/cipher/errors/process-error.js +173 -0
- package/dist/core/domain/cipher/errors/session-error.d.ts +56 -0
- package/dist/core/domain/cipher/errors/session-error.js +74 -0
- package/dist/core/domain/cipher/errors/tool-error.d.ts +57 -0
- package/dist/core/domain/cipher/errors/tool-error.js +81 -0
- package/dist/core/domain/cipher/file-system/types.d.ts +203 -0
- package/dist/core/domain/cipher/memory/types.d.ts +102 -0
- package/dist/core/domain/cipher/memory/types.js +4 -0
- package/dist/core/domain/cipher/parsed-interaction.d.ts +47 -0
- package/dist/core/domain/cipher/parsed-interaction.js +25 -0
- package/dist/core/domain/cipher/process/types.d.ts +286 -0
- package/dist/core/domain/cipher/session/types.d.ts +54 -0
- package/dist/core/domain/cipher/storage/history-types.d.ts +38 -0
- package/dist/core/domain/cipher/system-prompt/types.d.ts +131 -0
- package/dist/core/domain/cipher/todos/index.d.ts +4 -0
- package/dist/core/domain/cipher/todos/index.js +4 -0
- package/dist/core/domain/cipher/todos/types.d.ts +57 -0
- package/dist/core/domain/cipher/todos/types.js +5 -0
- package/dist/core/domain/cipher/tools/constants.d.ts +28 -0
- package/dist/core/domain/cipher/tools/constants.js +24 -0
- package/dist/core/domain/cipher/tools/tool-error.d.ts +183 -0
- package/dist/core/domain/cipher/tools/tool-error.js +246 -0
- package/dist/core/domain/cipher/tools/types.d.ts +145 -0
- package/dist/core/domain/entities/brv-config.d.ts +42 -6
- package/dist/core/domain/entities/brv-config.js +115 -17
- package/dist/core/domain/entities/cogit-push-context.d.ts +38 -0
- package/dist/core/domain/entities/cogit-push-context.js +91 -0
- package/dist/core/domain/entities/cogit-push-response.d.ts +20 -0
- package/dist/core/domain/entities/cogit-push-response.js +31 -0
- package/dist/core/domain/entities/cogit-snapshot-author.d.ts +24 -0
- package/dist/core/domain/entities/cogit-snapshot-author.js +39 -0
- package/dist/core/domain/entities/cogit-snapshot-file.d.ts +34 -0
- package/dist/core/domain/entities/cogit-snapshot-file.js +59 -0
- package/dist/core/domain/entities/cogit-snapshot.d.ts +31 -0
- package/dist/core/domain/entities/cogit-snapshot.js +58 -0
- package/dist/core/domain/entities/context-tree-index.d.ts +26 -0
- package/dist/core/domain/entities/context-tree-index.js +27 -0
- package/dist/core/domain/entities/context-tree-snapshot.d.ts +56 -0
- package/dist/core/domain/entities/context-tree-snapshot.js +83 -0
- package/dist/core/domain/entities/event.d.ts +1 -1
- package/dist/core/domain/entities/event.js +3 -1
- package/dist/core/domain/entities/parser.d.ts +567 -0
- package/dist/core/domain/entities/parser.js +10 -0
- package/dist/core/domain/entities/playbook.d.ts +2 -23
- package/dist/core/domain/entities/playbook.js +2 -70
- package/dist/core/domain/errors/brv-config-version-error.d.ts +16 -0
- package/dist/core/domain/errors/brv-config-version-error.js +21 -0
- package/dist/core/domain/knowledge/directory-manager.d.ts +80 -0
- package/dist/core/domain/knowledge/directory-manager.js +145 -0
- package/dist/core/domain/knowledge/markdown-writer.d.ts +18 -0
- package/dist/core/domain/knowledge/markdown-writer.js +18 -0
- package/dist/core/domain/knowledge/relation-parser.d.ts +90 -0
- package/dist/core/domain/knowledge/relation-parser.js +131 -0
- package/dist/core/interfaces/cipher/cipher-services.d.ts +71 -0
- package/dist/core/interfaces/cipher/cipher-services.js +1 -0
- package/dist/core/interfaces/cipher/i-blob-storage.d.ts +78 -0
- package/dist/core/interfaces/cipher/i-blob-storage.js +1 -0
- package/dist/core/interfaces/cipher/i-chat-session.d.ts +62 -0
- package/dist/core/interfaces/cipher/i-chat-session.js +1 -0
- package/dist/core/interfaces/cipher/i-cipher-agent.d.ts +88 -0
- package/dist/core/interfaces/cipher/i-cipher-agent.js +1 -0
- package/dist/core/interfaces/cipher/i-coding-agent-log-parser.d.ts +20 -0
- package/dist/core/interfaces/cipher/i-coding-agent-log-parser.js +1 -0
- package/dist/core/interfaces/cipher/i-coding-agent-log-watcher.d.ts +31 -0
- package/dist/core/interfaces/cipher/i-coding-agent-log-watcher.js +1 -0
- package/dist/core/interfaces/cipher/i-content-generator.d.ts +120 -0
- package/dist/core/interfaces/cipher/i-content-generator.js +12 -0
- package/dist/core/interfaces/cipher/i-event-emitter.d.ts +76 -0
- package/dist/core/interfaces/cipher/i-event-emitter.js +1 -0
- package/dist/core/interfaces/cipher/i-file-system.d.ts +68 -0
- package/dist/core/interfaces/cipher/i-file-system.js +1 -0
- package/dist/core/interfaces/cipher/i-history-storage.d.ts +53 -0
- package/dist/core/interfaces/cipher/i-history-storage.js +1 -0
- package/dist/core/interfaces/cipher/i-llm-provider.d.ts +14 -0
- package/dist/core/interfaces/cipher/i-llm-provider.js +1 -0
- package/dist/core/interfaces/cipher/i-llm-service.d.ts +62 -0
- package/dist/core/interfaces/cipher/i-llm-service.js +1 -0
- package/dist/core/interfaces/cipher/i-logger.d.ts +78 -0
- package/dist/core/interfaces/cipher/i-logger.js +28 -0
- package/dist/core/interfaces/cipher/i-message-formatter.d.ts +44 -0
- package/dist/core/interfaces/cipher/i-message-formatter.js +1 -0
- package/dist/core/interfaces/cipher/i-policy-engine.d.ts +102 -0
- package/dist/core/interfaces/cipher/i-policy-engine.js +9 -0
- package/dist/core/interfaces/cipher/i-process-service.d.ts +65 -0
- package/dist/core/interfaces/cipher/i-process-service.js +1 -0
- package/dist/core/interfaces/cipher/i-system-prompt-contributor.d.ts +25 -0
- package/dist/core/interfaces/cipher/i-system-prompt-contributor.js +1 -0
- package/dist/core/interfaces/cipher/i-tokenizer.d.ts +15 -0
- package/dist/core/interfaces/cipher/i-tokenizer.js +1 -0
- package/dist/core/interfaces/cipher/i-tool-provider.d.ts +64 -0
- package/dist/core/interfaces/cipher/i-tool-provider.js +1 -0
- package/dist/core/interfaces/cipher/i-tool-scheduler.d.ts +103 -0
- package/dist/core/interfaces/cipher/i-tool-scheduler.js +11 -0
- package/dist/core/interfaces/cipher/llm-types.d.ts +46 -0
- package/dist/core/interfaces/cipher/llm-types.js +5 -0
- package/dist/core/interfaces/cipher/message-types.d.ts +118 -0
- package/dist/core/interfaces/cipher/message-types.js +5 -0
- package/dist/core/interfaces/cipher/tokenizer-types.d.ts +11 -0
- package/dist/core/interfaces/cipher/tokenizer-types.js +14 -0
- package/dist/core/interfaces/i-cogit-pull-service.d.ts +24 -0
- package/dist/core/interfaces/i-cogit-pull-service.js +1 -0
- package/dist/core/interfaces/i-cogit-push-service.d.ts +27 -0
- package/dist/core/interfaces/i-cogit-push-service.js +1 -0
- package/dist/core/interfaces/i-context-file-reader.d.ts +32 -0
- package/dist/core/interfaces/i-context-file-reader.js +1 -0
- package/dist/core/interfaces/i-context-tree-service.d.ts +21 -0
- package/dist/core/interfaces/i-context-tree-service.js +1 -0
- package/dist/core/interfaces/i-context-tree-snapshot-service.d.ts +36 -0
- package/dist/core/interfaces/i-context-tree-snapshot-service.js +1 -0
- package/dist/core/interfaces/i-context-tree-writer-service.d.ts +32 -0
- package/dist/core/interfaces/i-context-tree-writer-service.js +1 -0
- package/dist/core/interfaces/i-file-watcher-service.d.ts +41 -0
- package/dist/core/interfaces/i-file-watcher-service.js +1 -0
- package/dist/core/interfaces/parser/i-clean-parser-service.d.ts +18 -0
- package/dist/core/interfaces/parser/i-clean-parser-service.js +1 -0
- package/dist/core/interfaces/parser/i-raw-parser-service.d.ts +17 -0
- package/dist/core/interfaces/parser/i-raw-parser-service.js +1 -0
- package/dist/core/interfaces/parser/i-session-normalizer.d.ts +56 -0
- package/dist/core/interfaces/parser/i-session-normalizer.js +1 -0
- package/dist/hooks/command_not_found/handle-invalid-commands.d.ts +7 -0
- package/dist/hooks/command_not_found/handle-invalid-commands.js +32 -0
- package/dist/hooks/error/clean-errors.d.ts +7 -0
- package/dist/hooks/error/clean-errors.js +50 -0
- package/dist/hooks/init/welcome.js +72 -1
- package/dist/hooks/prerun/validate-brv-config-version.d.ts +28 -0
- package/dist/hooks/prerun/validate-brv-config-version.js +43 -0
- package/dist/infra/cipher/agent-service-factory.d.ts +86 -0
- package/dist/infra/cipher/agent-service-factory.js +212 -0
- package/dist/infra/cipher/blob/blob-storage-factory.d.ts +13 -0
- package/dist/infra/cipher/blob/blob-storage-factory.js +14 -0
- package/dist/infra/cipher/blob/index.d.ts +10 -0
- package/dist/infra/cipher/blob/index.js +12 -0
- package/dist/infra/cipher/blob/migrations.d.ts +63 -0
- package/dist/infra/cipher/blob/migrations.js +148 -0
- package/dist/infra/cipher/blob/sqlite-blob-storage.d.ts +82 -0
- package/dist/infra/cipher/blob/sqlite-blob-storage.js +307 -0
- package/dist/infra/cipher/cipher-agent-state-manager.d.ts +63 -0
- package/dist/infra/cipher/cipher-agent-state-manager.js +108 -0
- package/dist/infra/cipher/cipher-agent.d.ts +182 -0
- package/dist/infra/cipher/cipher-agent.js +317 -0
- package/dist/infra/cipher/command-parser.d.ts +23 -0
- package/dist/infra/cipher/command-parser.js +85 -0
- package/dist/infra/cipher/display/todo-display.d.ts +23 -0
- package/dist/infra/cipher/display/todo-display.js +129 -0
- package/dist/infra/cipher/events/event-emitter.d.ts +137 -0
- package/dist/infra/cipher/events/event-emitter.js +158 -0
- package/dist/infra/cipher/exit-codes.d.ts +44 -0
- package/dist/infra/cipher/exit-codes.js +58 -0
- package/dist/infra/cipher/file-system/file-system-service.d.ts +105 -0
- package/dist/infra/cipher/file-system/file-system-service.js +641 -0
- package/dist/infra/cipher/file-system/gitignore-filter.d.ts +77 -0
- package/dist/infra/cipher/file-system/gitignore-filter.js +120 -0
- package/dist/infra/cipher/file-system/glob-utils.d.ts +60 -0
- package/dist/infra/cipher/file-system/glob-utils.js +120 -0
- package/dist/infra/cipher/file-system/path-validator.d.ts +69 -0
- package/dist/infra/cipher/file-system/path-validator.js +184 -0
- package/dist/infra/cipher/grpc/internal-llm-grpc-service.d.ts +149 -0
- package/dist/infra/cipher/grpc/internal-llm-grpc-service.js +364 -0
- package/dist/infra/cipher/grpc/internal-llm-grpc.proto +94 -0
- package/dist/infra/cipher/interactive-commands.d.ts +16 -0
- package/dist/infra/cipher/interactive-commands.js +198 -0
- package/dist/infra/cipher/interactive-loop.d.ts +24 -0
- package/dist/infra/cipher/interactive-loop.js +352 -0
- package/dist/infra/cipher/llm/context/async-mutex.d.ts +59 -0
- package/dist/infra/cipher/llm/context/async-mutex.js +92 -0
- package/dist/infra/cipher/llm/context/compression/index.d.ts +6 -0
- package/dist/infra/cipher/llm/context/compression/index.js +5 -0
- package/dist/infra/cipher/llm/context/compression/middle-removal.d.ts +40 -0
- package/dist/infra/cipher/llm/context/compression/middle-removal.js +76 -0
- package/dist/infra/cipher/llm/context/compression/oldest-removal.d.ts +38 -0
- package/dist/infra/cipher/llm/context/compression/oldest-removal.js +53 -0
- package/dist/infra/cipher/llm/context/compression/types.d.ts +36 -0
- package/dist/infra/cipher/llm/context/compression/types.js +1 -0
- package/dist/infra/cipher/llm/context/context-manager.d.ts +234 -0
- package/dist/infra/cipher/llm/context/context-manager.js +419 -0
- package/dist/infra/cipher/llm/context/index.d.ts +2 -0
- package/dist/infra/cipher/llm/context/index.js +2 -0
- package/dist/infra/cipher/llm/context/loop-detector.d.ts +125 -0
- package/dist/infra/cipher/llm/context/loop-detector.js +194 -0
- package/dist/infra/cipher/llm/context/utils.d.ts +17 -0
- package/dist/infra/cipher/llm/context/utils.js +89 -0
- package/dist/infra/cipher/llm/formatters/claude-formatter.d.ts +54 -0
- package/dist/infra/cipher/llm/formatters/claude-formatter.js +182 -0
- package/dist/infra/cipher/llm/formatters/gemini-formatter.d.ts +69 -0
- package/dist/infra/cipher/llm/formatters/gemini-formatter.js +253 -0
- package/dist/infra/cipher/llm/formatters/openrouter-formatter.d.ts +47 -0
- package/dist/infra/cipher/llm/formatters/openrouter-formatter.js +238 -0
- package/dist/infra/cipher/llm/generators/byterover-content-generator.d.ts +92 -0
- package/dist/infra/cipher/llm/generators/byterover-content-generator.js +211 -0
- package/dist/infra/cipher/llm/generators/index.d.ts +13 -0
- package/dist/infra/cipher/llm/generators/index.js +13 -0
- package/dist/infra/cipher/llm/generators/logging-content-generator.d.ts +104 -0
- package/dist/infra/cipher/llm/generators/logging-content-generator.js +182 -0
- package/dist/infra/cipher/llm/generators/openrouter-content-generator.d.ts +93 -0
- package/dist/infra/cipher/llm/generators/openrouter-content-generator.js +254 -0
- package/dist/infra/cipher/llm/generators/retryable-content-generator.d.ts +90 -0
- package/dist/infra/cipher/llm/generators/retryable-content-generator.js +157 -0
- package/dist/infra/cipher/llm/index.d.ts +9 -0
- package/dist/infra/cipher/llm/index.js +13 -0
- package/dist/infra/cipher/llm/internal-llm-service.d.ts +308 -0
- package/dist/infra/cipher/llm/internal-llm-service.js +724 -0
- package/dist/infra/cipher/llm/openrouter-llm-service.d.ts +183 -0
- package/dist/infra/cipher/llm/openrouter-llm-service.js +386 -0
- package/dist/infra/cipher/llm/response-validator.d.ts +89 -0
- package/dist/infra/cipher/llm/response-validator.js +157 -0
- package/dist/infra/cipher/llm/retry/index.d.ts +10 -0
- package/dist/infra/cipher/llm/retry/index.js +10 -0
- package/dist/infra/cipher/llm/retry/retry-policy.d.ts +74 -0
- package/dist/infra/cipher/llm/retry/retry-policy.js +146 -0
- package/dist/infra/cipher/llm/retry/retry-with-backoff.d.ts +113 -0
- package/dist/infra/cipher/llm/retry/retry-with-backoff.js +247 -0
- package/dist/infra/cipher/llm/thought-parser.d.ts +145 -0
- package/dist/infra/cipher/llm/thought-parser.js +190 -0
- package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.d.ts +47 -0
- package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.js +55 -0
- package/dist/infra/cipher/llm/tokenizers/default-tokenizer.d.ts +31 -0
- package/dist/infra/cipher/llm/tokenizers/default-tokenizer.js +38 -0
- package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.d.ts +37 -0
- package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.js +45 -0
- package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.d.ts +29 -0
- package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.js +37 -0
- package/dist/infra/cipher/llm/tool-output-processor.d.ts +117 -0
- package/dist/infra/cipher/llm/tool-output-processor.js +153 -0
- package/dist/infra/cipher/logger/console-logger.d.ts +42 -0
- package/dist/infra/cipher/logger/console-logger.js +63 -0
- package/dist/infra/cipher/logger/event-based-logger.d.ts +54 -0
- package/dist/infra/cipher/logger/event-based-logger.js +92 -0
- package/dist/infra/cipher/memory/index.d.ts +6 -0
- package/dist/infra/cipher/memory/index.js +7 -0
- package/dist/infra/cipher/memory/memory-manager.d.ts +136 -0
- package/dist/infra/cipher/memory/memory-manager.js +523 -0
- package/dist/infra/cipher/parsers/coding-agent-log-parser.d.ts +24 -0
- package/dist/infra/cipher/parsers/coding-agent-log-parser.js +51 -0
- package/dist/infra/cipher/process/command-validator.d.ts +59 -0
- package/dist/infra/cipher/process/command-validator.js +266 -0
- package/dist/infra/cipher/process/index.d.ts +8 -0
- package/dist/infra/cipher/process/index.js +8 -0
- package/dist/infra/cipher/process/process-service.d.ts +95 -0
- package/dist/infra/cipher/process/process-service.js +439 -0
- package/dist/infra/cipher/session/chat-session.d.ts +80 -0
- package/dist/infra/cipher/session/chat-session.js +165 -0
- package/dist/infra/cipher/session/index.d.ts +6 -0
- package/dist/infra/cipher/session/index.js +5 -0
- package/dist/infra/cipher/session/session-event-forwarder.d.ts +37 -0
- package/dist/infra/cipher/session/session-event-forwarder.js +83 -0
- package/dist/infra/cipher/session/session-manager.d.ts +109 -0
- package/dist/infra/cipher/session/session-manager.js +172 -0
- package/dist/infra/cipher/storage/blob-history-storage.d.ts +76 -0
- package/dist/infra/cipher/storage/blob-history-storage.js +178 -0
- package/dist/infra/cipher/system-prompt/simple-prompt-factory.d.ts +105 -0
- package/dist/infra/cipher/system-prompt/simple-prompt-factory.js +290 -0
- package/dist/infra/cipher/tools/core-tool-scheduler.d.ts +99 -0
- package/dist/infra/cipher/tools/core-tool-scheduler.js +161 -0
- package/dist/infra/cipher/tools/default-policy-rules.d.ts +26 -0
- package/dist/infra/cipher/tools/default-policy-rules.js +125 -0
- package/dist/infra/cipher/tools/implementations/bash-exec-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/bash-exec-tool.js +93 -0
- package/dist/infra/cipher/tools/implementations/bash-output-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/bash-output-tool.js +47 -0
- package/dist/infra/cipher/tools/implementations/create-knowledge-topic-tool.d.ts +11 -0
- package/dist/infra/cipher/tools/implementations/create-knowledge-topic-tool.js +142 -0
- package/dist/infra/cipher/tools/implementations/delete-memory-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/delete-memory-tool.js +37 -0
- package/dist/infra/cipher/tools/implementations/detect-domains-tool.d.ts +7 -0
- package/dist/infra/cipher/tools/implementations/detect-domains-tool.js +73 -0
- package/dist/infra/cipher/tools/implementations/edit-file-tool.d.ts +13 -0
- package/dist/infra/cipher/tools/implementations/edit-file-tool.js +50 -0
- package/dist/infra/cipher/tools/implementations/edit-memory-tool.d.ts +13 -0
- package/dist/infra/cipher/tools/implementations/edit-memory-tool.js +53 -0
- package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.d.ts +7 -0
- package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.js +421 -0
- package/dist/infra/cipher/tools/implementations/glob-files-tool.d.ts +18 -0
- package/dist/infra/cipher/tools/implementations/glob-files-tool.js +70 -0
- package/dist/infra/cipher/tools/implementations/grep-content-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/grep-content-tool.js +77 -0
- package/dist/infra/cipher/tools/implementations/kill-process-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/kill-process-tool.js +55 -0
- package/dist/infra/cipher/tools/implementations/list-memories-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/list-memories-tool.js +63 -0
- package/dist/infra/cipher/tools/implementations/read-file-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/read-file-tool.js +54 -0
- package/dist/infra/cipher/tools/implementations/read-memory-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/read-memory-tool.js +39 -0
- package/dist/infra/cipher/tools/implementations/search-history-tool.d.ts +10 -0
- package/dist/infra/cipher/tools/implementations/search-history-tool.js +36 -0
- package/dist/infra/cipher/tools/implementations/write-file-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/write-file-tool.js +52 -0
- package/dist/infra/cipher/tools/implementations/write-memory-tool.d.ts +13 -0
- package/dist/infra/cipher/tools/implementations/write-memory-tool.js +52 -0
- package/dist/infra/cipher/tools/implementations/write-todos-tool.d.ts +10 -0
- package/dist/infra/cipher/tools/implementations/write-todos-tool.js +165 -0
- package/dist/infra/cipher/tools/index.d.ts +18 -0
- package/dist/infra/cipher/tools/index.js +19 -0
- package/dist/infra/cipher/tools/policy-engine.d.ts +80 -0
- package/dist/infra/cipher/tools/policy-engine.js +110 -0
- package/dist/infra/cipher/tools/tool-invocation-queue.d.ts +191 -0
- package/dist/infra/cipher/tools/tool-invocation-queue.js +254 -0
- package/dist/infra/cipher/tools/tool-invocation.d.ts +216 -0
- package/dist/infra/cipher/tools/tool-invocation.js +294 -0
- package/dist/infra/cipher/tools/tool-manager.d.ts +135 -0
- package/dist/infra/cipher/tools/tool-manager.js +209 -0
- package/dist/infra/cipher/tools/tool-markers.d.ts +48 -0
- package/dist/infra/cipher/tools/tool-markers.js +49 -0
- package/dist/infra/cipher/tools/tool-provider.d.ts +77 -0
- package/dist/infra/cipher/tools/tool-provider.js +196 -0
- package/dist/infra/cipher/tools/tool-registry.d.ts +52 -0
- package/dist/infra/cipher/tools/tool-registry.js +144 -0
- package/dist/infra/cipher/tools/utils/schema-converter.d.ts +10 -0
- package/dist/infra/cipher/tools/utils/schema-converter.js +29 -0
- package/dist/infra/cipher/validation/workspace-validator.d.ts +19 -0
- package/dist/infra/cipher/validation/workspace-validator.js +37 -0
- package/dist/infra/cipher/watcher/coding-agent-log-watcher.d.ts +14 -0
- package/dist/infra/cipher/watcher/coding-agent-log-watcher.js +55 -0
- package/dist/infra/cogit/context-tree-to-push-context-mapper.d.ts +21 -0
- package/dist/infra/cogit/context-tree-to-push-context-mapper.js +32 -0
- package/dist/infra/cogit/http-cogit-pull-service.d.ts +15 -0
- package/dist/infra/cogit/http-cogit-pull-service.js +30 -0
- package/dist/infra/cogit/http-cogit-push-service.d.ts +17 -0
- package/dist/infra/cogit/http-cogit-push-service.js +104 -0
- package/dist/infra/config/file-config-store.js +9 -3
- package/dist/infra/context-tree/file-context-file-reader.d.ts +14 -0
- package/dist/infra/context-tree/file-context-file-reader.js +46 -0
- package/dist/infra/context-tree/file-context-tree-service.d.ts +14 -0
- package/dist/infra/context-tree/file-context-tree-service.js +46 -0
- package/dist/infra/context-tree/file-context-tree-snapshot-service.d.ts +34 -0
- package/dist/infra/context-tree/file-context-tree-snapshot-service.js +117 -0
- package/dist/infra/context-tree/file-context-tree-writer-service.d.ts +22 -0
- package/dist/infra/context-tree/file-context-tree-writer-service.js +61 -0
- package/dist/infra/memory/http-memory-retrieval-service.js +2 -1
- package/dist/infra/memory/http-memory-storage-service.js +4 -3
- package/dist/infra/parsers/clean/clean-claude-service.d.ts +111 -0
- package/dist/infra/parsers/clean/clean-claude-service.js +271 -0
- package/dist/infra/parsers/clean/clean-codex-service.d.ts +231 -0
- package/dist/infra/parsers/clean/clean-codex-service.js +534 -0
- package/dist/infra/parsers/clean/clean-copilot-service.d.ts +255 -0
- package/dist/infra/parsers/clean/clean-copilot-service.js +729 -0
- package/dist/infra/parsers/clean/clean-cursor-service.d.ts +161 -0
- package/dist/infra/parsers/clean/clean-cursor-service.js +432 -0
- package/dist/infra/parsers/clean/clean-parser-service-factory.d.ts +54 -0
- package/dist/infra/parsers/clean/clean-parser-service-factory.js +80 -0
- package/dist/infra/parsers/clean/shared.d.ts +84 -0
- package/dist/infra/parsers/clean/shared.js +273 -0
- package/dist/infra/parsers/raw/raw-claude-service.d.ts +195 -0
- package/dist/infra/parsers/raw/raw-claude-service.js +548 -0
- package/dist/infra/parsers/raw/raw-codex-service.d.ts +313 -0
- package/dist/infra/parsers/raw/raw-codex-service.js +782 -0
- package/dist/infra/parsers/raw/raw-copilot-service.d.ts +196 -0
- package/dist/infra/parsers/raw/raw-copilot-service.js +558 -0
- package/dist/infra/parsers/raw/raw-cursor-service.d.ts +316 -0
- package/dist/infra/parsers/raw/raw-cursor-service.js +818 -0
- package/dist/infra/parsers/raw/raw-parser-service-factory.d.ts +54 -0
- package/dist/infra/parsers/raw/raw-parser-service-factory.js +81 -0
- package/dist/infra/space/http-space-service.js +2 -1
- package/dist/infra/team/http-team-service.js +2 -1
- package/dist/infra/user/http-user-service.js +2 -1
- package/dist/infra/watcher/file-watcher-service.d.ts +10 -0
- package/dist/infra/watcher/file-watcher-service.js +81 -0
- package/dist/infra/workspace/workspace-detector-service.d.ts +60 -0
- package/dist/infra/workspace/workspace-detector-service.js +165 -0
- package/dist/resources/prompts/curate-context-tree-curation.yml +48 -0
- package/dist/resources/prompts/modes/autonomous.yml +9 -0
- package/dist/resources/prompts/query-context-tree-retrieval.yml +49 -0
- package/dist/resources/prompts/reflection.yml +27 -0
- package/dist/resources/prompts/system-prompt.yml +82 -0
- package/dist/resources/prompts/tool-outputs.yml +30 -0
- package/dist/templates/README.md +6 -7
- package/dist/templates/sections/command-reference.md +40 -111
- package/dist/templates/sections/workflow.md +3 -30
- package/dist/utils/emoji-helpers.d.ts +38 -0
- package/dist/utils/emoji-helpers.js +42 -0
- package/dist/utils/error-handler.d.ts +51 -0
- package/dist/utils/error-handler.js +169 -0
- package/dist/utils/error-helpers.d.ts +30 -0
- package/dist/utils/error-helpers.js +47 -0
- package/dist/utils/file-helpers.d.ts +15 -0
- package/dist/utils/file-helpers.js +44 -0
- package/dist/utils/oclif-error-helpers.d.ts +40 -0
- package/dist/utils/oclif-error-helpers.js +46 -0
- package/dist/utils/tool-display-formatter.d.ts +53 -0
- package/dist/utils/tool-display-formatter.js +257 -0
- package/oclif.manifest.json +381 -141
- package/package.json +27 -6
- package/dist/commands/add.d.ts +0 -49
- package/dist/commands/add.js +0 -192
- package/dist/commands/complete.d.ts +0 -108
- package/dist/commands/complete.js +0 -340
- package/dist/commands/retrieve.d.ts +0 -26
- package/dist/commands/retrieve.js +0 -101
- package/dist/core/domain/entities/curator-output.d.ts +0 -14
- package/dist/core/domain/entities/curator-output.js +0 -23
- package/dist/core/domain/entities/delta-batch.d.ts +0 -30
- package/dist/core/domain/entities/delta-batch.js +0 -52
- package/dist/core/domain/entities/delta-operation.d.ts +0 -31
- package/dist/core/domain/entities/delta-operation.js +0 -50
- package/dist/core/domain/entities/executor-output.d.ts +0 -27
- package/dist/core/domain/entities/executor-output.js +0 -33
- package/dist/core/domain/entities/reflector-output.d.ts +0 -38
- package/dist/core/domain/entities/reflector-output.js +0 -44
- package/dist/core/interfaces/i-ace-prompt-builder.d.ts +0 -48
- package/dist/core/interfaces/i-bullet-content-store.d.ts +0 -36
- package/dist/core/interfaces/i-delta-store.d.ts +0 -15
- package/dist/core/interfaces/i-executor-output-store.d.ts +0 -14
- package/dist/core/interfaces/i-playbook-service.d.ts +0 -69
- package/dist/core/interfaces/i-playbook-store.d.ts +0 -38
- package/dist/core/interfaces/i-reflection-store.d.ts +0 -21
- package/dist/infra/ace/ace-file-utils.d.ts +0 -46
- package/dist/infra/ace/ace-file-utils.js +0 -83
- package/dist/infra/ace/ace-prompt-templates.d.ts +0 -13
- package/dist/infra/ace/ace-prompt-templates.js +0 -177
- package/dist/infra/ace/file-bullet-content-store.d.ts +0 -27
- package/dist/infra/ace/file-bullet-content-store.js +0 -89
- package/dist/infra/ace/file-delta-store.d.ts +0 -9
- package/dist/infra/ace/file-delta-store.js +0 -26
- package/dist/infra/ace/file-executor-output-store.d.ts +0 -9
- package/dist/infra/ace/file-executor-output-store.js +0 -26
- package/dist/infra/ace/file-playbook-store.d.ts +0 -29
- package/dist/infra/ace/file-playbook-store.js +0 -107
- package/dist/infra/ace/file-reflection-store.d.ts +0 -10
- package/dist/infra/ace/file-reflection-store.js +0 -55
- package/dist/infra/playbook/file-playbook-service.d.ts +0 -42
- package/dist/infra/playbook/file-playbook-service.js +0 -132
- /package/dist/core/{interfaces/i-ace-prompt-builder.js → domain/cipher/blob/types.js} +0 -0
- /package/dist/core/{interfaces/i-bullet-content-store.js → domain/cipher/file-system/types.js} +0 -0
- /package/dist/core/{interfaces/i-delta-store.js → domain/cipher/process/types.js} +0 -0
- /package/dist/core/{interfaces/i-executor-output-store.js → domain/cipher/session/types.js} +0 -0
- /package/dist/core/{interfaces/i-playbook-service.js → domain/cipher/storage/history-types.js} +0 -0
- /package/dist/core/{interfaces/i-playbook-store.js → domain/cipher/system-prompt/types.js} +0 -0
- /package/dist/core/{interfaces/i-reflection-store.js → domain/cipher/tools/types.js} +0 -0
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { ToolError, ToolErrorType, ToolErrorUtils } from '../../../core/domain/cipher/tools/tool-error.js';
|
|
2
|
+
/**
|
|
3
|
+
* Tool Manager for CipherAgent
|
|
4
|
+
*
|
|
5
|
+
* Provides a clean interface for tool discovery and execution.
|
|
6
|
+
* Wraps ToolProvider with caching for improved performance.
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Optional scheduler integration for policy-based execution
|
|
10
|
+
* - Tool caching for performance
|
|
11
|
+
* - Structured error handling with classification
|
|
12
|
+
*
|
|
13
|
+
* When a scheduler is provided, tool execution flows through:
|
|
14
|
+
* 1. Policy check (ALLOW/DENY)
|
|
15
|
+
* 2. Execution (if allowed)
|
|
16
|
+
*
|
|
17
|
+
* Without a scheduler, tools execute directly via the provider.
|
|
18
|
+
*/
|
|
19
|
+
export class ToolManager {
|
|
20
|
+
/**
|
|
21
|
+
* Read-only tools allowed for query operations
|
|
22
|
+
*/
|
|
23
|
+
static QUERY_TOOL_NAMES = [
|
|
24
|
+
'find_knowledge_topics',
|
|
25
|
+
'read_file',
|
|
26
|
+
'grep_content',
|
|
27
|
+
'glob_files',
|
|
28
|
+
];
|
|
29
|
+
cacheValid = false;
|
|
30
|
+
scheduler;
|
|
31
|
+
toolProvider;
|
|
32
|
+
toolsCache = {};
|
|
33
|
+
/**
|
|
34
|
+
* Creates a new tool manager
|
|
35
|
+
*
|
|
36
|
+
* @param toolProvider - Tool provider instance
|
|
37
|
+
* @param scheduler - Optional tool scheduler for policy-based execution
|
|
38
|
+
*/
|
|
39
|
+
constructor(toolProvider, scheduler) {
|
|
40
|
+
this.toolProvider = toolProvider;
|
|
41
|
+
this.scheduler = scheduler;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Execute a tool by name with structured error handling.
|
|
45
|
+
*
|
|
46
|
+
* Returns a structured result that includes success status, content,
|
|
47
|
+
* error classification, and metadata. This enables better error handling
|
|
48
|
+
* and provides actionable feedback to the LLM.
|
|
49
|
+
*
|
|
50
|
+
* When a scheduler is configured, execution flows through:
|
|
51
|
+
* 1. Policy check (ALLOW/DENY)
|
|
52
|
+
* 2. Execution (if allowed)
|
|
53
|
+
*
|
|
54
|
+
* Without a scheduler, tools execute directly via the provider.
|
|
55
|
+
*
|
|
56
|
+
* @param toolName - Name of the tool to execute
|
|
57
|
+
* @param args - Tool arguments (validated by provider)
|
|
58
|
+
* @param sessionId - Optional session ID for context
|
|
59
|
+
* @returns Structured tool execution result
|
|
60
|
+
*/
|
|
61
|
+
async executeTool(toolName, args, sessionId) {
|
|
62
|
+
const startTime = Date.now();
|
|
63
|
+
try {
|
|
64
|
+
// Check if tool exists before execution
|
|
65
|
+
if (!this.hasTool(toolName)) {
|
|
66
|
+
throw new ToolError(`Tool '${toolName}' not found`, ToolErrorType.TOOL_NOT_FOUND, toolName, { context: { availableTools: this.getToolNames() } });
|
|
67
|
+
}
|
|
68
|
+
// Execute tool via scheduler (with policy check) or directly via provider
|
|
69
|
+
const result = this.scheduler
|
|
70
|
+
? await this.scheduler.execute(toolName, args, { sessionId: sessionId ?? 'default' })
|
|
71
|
+
: await this.toolProvider.executeTool(toolName, args, sessionId);
|
|
72
|
+
const durationMs = Date.now() - startTime;
|
|
73
|
+
// Return success result
|
|
74
|
+
return ToolErrorUtils.createSuccess(result, { durationMs });
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
const durationMs = Date.now() - startTime;
|
|
78
|
+
// Classify error
|
|
79
|
+
const toolError = ToolErrorUtils.classify(error, toolName);
|
|
80
|
+
// Return error result
|
|
81
|
+
return ToolErrorUtils.createErrorResult(toolError, { durationMs });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get all available tools in JSON Schema format.
|
|
86
|
+
* Results are cached for performance.
|
|
87
|
+
*
|
|
88
|
+
* @returns Tool set with JSON Schema definitions for LLM
|
|
89
|
+
*/
|
|
90
|
+
getAllTools() {
|
|
91
|
+
// Return cached tools if valid
|
|
92
|
+
if (this.cacheValid) {
|
|
93
|
+
return this.toolsCache;
|
|
94
|
+
}
|
|
95
|
+
// Rebuild cache
|
|
96
|
+
this.toolsCache = this.toolProvider.getAllTools();
|
|
97
|
+
this.cacheValid = true;
|
|
98
|
+
return this.toolsCache;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get all available tool markers from registered tools.
|
|
102
|
+
*
|
|
103
|
+
* @returns Set of tool marker strings
|
|
104
|
+
*/
|
|
105
|
+
getAvailableMarkers() {
|
|
106
|
+
return this.toolProvider.getAvailableMarkers();
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get the count of registered tools.
|
|
110
|
+
*
|
|
111
|
+
* @returns Number of available tools
|
|
112
|
+
*/
|
|
113
|
+
getToolCount() {
|
|
114
|
+
return this.toolProvider.getToolCount();
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Get names of all registered tools.
|
|
118
|
+
*
|
|
119
|
+
* @returns Array of tool names
|
|
120
|
+
*/
|
|
121
|
+
getToolNames() {
|
|
122
|
+
return this.toolProvider.getToolNames();
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get filtered tool names based on command type.
|
|
126
|
+
* For 'query' command, returns only read-only discovery tools.
|
|
127
|
+
* For other commands, returns all tools.
|
|
128
|
+
*
|
|
129
|
+
* @param commandType - The command type ('add', 'query', etc.)
|
|
130
|
+
* @returns Array of filtered tool names
|
|
131
|
+
*/
|
|
132
|
+
getToolNamesForCommand(commandType) {
|
|
133
|
+
if (commandType === 'query') {
|
|
134
|
+
// For query: only allow read-only tools
|
|
135
|
+
return [...ToolManager.QUERY_TOOL_NAMES].filter((name) => this.hasTool(name));
|
|
136
|
+
}
|
|
137
|
+
// For all other commands: return all tools
|
|
138
|
+
return this.getToolNames();
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get tool names that have a specific marker.
|
|
142
|
+
*
|
|
143
|
+
* @param marker - The tool marker to filter by
|
|
144
|
+
* @returns Array of tool names with the specified marker
|
|
145
|
+
*/
|
|
146
|
+
getToolsByMarker(marker) {
|
|
147
|
+
return this.toolProvider.getToolsByMarker(marker);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Get filtered tools based on command type.
|
|
151
|
+
* For 'query' command, returns only read-only discovery tools.
|
|
152
|
+
* For other commands, returns all tools.
|
|
153
|
+
*
|
|
154
|
+
* @param commandType - The command type ('add', 'query', etc.)
|
|
155
|
+
* @returns Filtered tool set with JSON Schema definitions
|
|
156
|
+
*/
|
|
157
|
+
getToolsForCommand(commandType) {
|
|
158
|
+
const allTools = this.getAllTools();
|
|
159
|
+
if (commandType === 'query') {
|
|
160
|
+
// For query: only allow read-only tools
|
|
161
|
+
const filteredTools = {};
|
|
162
|
+
for (const toolName of ToolManager.QUERY_TOOL_NAMES) {
|
|
163
|
+
if (allTools[toolName]) {
|
|
164
|
+
filteredTools[toolName] = allTools[toolName];
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return filteredTools;
|
|
168
|
+
}
|
|
169
|
+
// For all other commands: return all tools
|
|
170
|
+
return allTools;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Check if a tool exists.
|
|
174
|
+
*
|
|
175
|
+
* @param toolName - Name of the tool
|
|
176
|
+
* @returns True if the tool exists
|
|
177
|
+
*/
|
|
178
|
+
hasTool(toolName) {
|
|
179
|
+
return this.toolProvider.hasTool(toolName);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Initialize the tool manager.
|
|
183
|
+
* Registers all available tools and invalidates cache.
|
|
184
|
+
*/
|
|
185
|
+
async initialize() {
|
|
186
|
+
await this.toolProvider.initialize();
|
|
187
|
+
this.invalidateCache();
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Refresh tool discovery.
|
|
191
|
+
* Invalidates the tool cache, forcing a rebuild on next getAllTools() call.
|
|
192
|
+
*
|
|
193
|
+
* Useful when:
|
|
194
|
+
* - Adding/removing tools dynamically (future)
|
|
195
|
+
* - MCP servers connect/disconnect (future)
|
|
196
|
+
* - Manual cache clearing needed
|
|
197
|
+
*/
|
|
198
|
+
refresh() {
|
|
199
|
+
this.invalidateCache();
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Invalidates the tool cache.
|
|
203
|
+
* Next call to getAllTools() will rebuild the cache.
|
|
204
|
+
*/
|
|
205
|
+
invalidateCache() {
|
|
206
|
+
this.cacheValid = false;
|
|
207
|
+
this.toolsCache = {};
|
|
208
|
+
}
|
|
209
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool markers for semantic classification of tools.
|
|
3
|
+
*
|
|
4
|
+
* Tool markers enable:
|
|
5
|
+
* - Smart filtering based on operational mode (planning, execution, etc.)
|
|
6
|
+
* - Conditional prompt sections based on available capabilities
|
|
7
|
+
* - Context tree building workflows
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Enum of available tool markers
|
|
11
|
+
*/
|
|
12
|
+
export declare enum ToolMarker {
|
|
13
|
+
/**
|
|
14
|
+
* Tools for building context trees and organizing conversation/project information
|
|
15
|
+
* Examples: segment_conversation, search_history
|
|
16
|
+
*/
|
|
17
|
+
ContextBuilding = "ToolMarkerContextBuilding",
|
|
18
|
+
/**
|
|
19
|
+
* Core tools that are always needed for basic operation
|
|
20
|
+
* Examples: read_file, glob_files, grep_content
|
|
21
|
+
*/
|
|
22
|
+
Core = "ToolMarkerCore",
|
|
23
|
+
/**
|
|
24
|
+
* Tools for discovering and exploring codebase structure
|
|
25
|
+
* Examples: glob_files, grep_content, read_file
|
|
26
|
+
*/
|
|
27
|
+
Discovery = "ToolMarkerDiscovery",
|
|
28
|
+
/**
|
|
29
|
+
* Tools that execute external commands/processes
|
|
30
|
+
* Examples: bash_exec, bash_output, kill_process
|
|
31
|
+
*/
|
|
32
|
+
Execution = "ToolMarkerExecution",
|
|
33
|
+
/**
|
|
34
|
+
* Tools that modify files
|
|
35
|
+
* Examples: write_file, edit_file
|
|
36
|
+
*/
|
|
37
|
+
Modification = "ToolMarkerModification",
|
|
38
|
+
/**
|
|
39
|
+
* Optional tools that are not needed for basic operations
|
|
40
|
+
* Examples: bash_output, kill_process, segment_conversation
|
|
41
|
+
*/
|
|
42
|
+
Optional = "ToolMarkerOptional",
|
|
43
|
+
/**
|
|
44
|
+
* Tools for planning and task management
|
|
45
|
+
* Examples: write_todos
|
|
46
|
+
*/
|
|
47
|
+
Planning = "ToolMarkerPlanning"
|
|
48
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool markers for semantic classification of tools.
|
|
3
|
+
*
|
|
4
|
+
* Tool markers enable:
|
|
5
|
+
* - Smart filtering based on operational mode (planning, execution, etc.)
|
|
6
|
+
* - Conditional prompt sections based on available capabilities
|
|
7
|
+
* - Context tree building workflows
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Enum of available tool markers
|
|
11
|
+
*/
|
|
12
|
+
export var ToolMarker;
|
|
13
|
+
(function (ToolMarker) {
|
|
14
|
+
/**
|
|
15
|
+
* Tools for building context trees and organizing conversation/project information
|
|
16
|
+
* Examples: segment_conversation, search_history
|
|
17
|
+
*/
|
|
18
|
+
ToolMarker["ContextBuilding"] = "ToolMarkerContextBuilding";
|
|
19
|
+
/**
|
|
20
|
+
* Core tools that are always needed for basic operation
|
|
21
|
+
* Examples: read_file, glob_files, grep_content
|
|
22
|
+
*/
|
|
23
|
+
ToolMarker["Core"] = "ToolMarkerCore";
|
|
24
|
+
/**
|
|
25
|
+
* Tools for discovering and exploring codebase structure
|
|
26
|
+
* Examples: glob_files, grep_content, read_file
|
|
27
|
+
*/
|
|
28
|
+
ToolMarker["Discovery"] = "ToolMarkerDiscovery";
|
|
29
|
+
/**
|
|
30
|
+
* Tools that execute external commands/processes
|
|
31
|
+
* Examples: bash_exec, bash_output, kill_process
|
|
32
|
+
*/
|
|
33
|
+
ToolMarker["Execution"] = "ToolMarkerExecution";
|
|
34
|
+
/**
|
|
35
|
+
* Tools that modify files
|
|
36
|
+
* Examples: write_file, edit_file
|
|
37
|
+
*/
|
|
38
|
+
ToolMarker["Modification"] = "ToolMarkerModification";
|
|
39
|
+
/**
|
|
40
|
+
* Optional tools that are not needed for basic operations
|
|
41
|
+
* Examples: bash_output, kill_process, segment_conversation
|
|
42
|
+
*/
|
|
43
|
+
ToolMarker["Optional"] = "ToolMarkerOptional";
|
|
44
|
+
/**
|
|
45
|
+
* Tools for planning and task management
|
|
46
|
+
* Examples: write_todos
|
|
47
|
+
*/
|
|
48
|
+
ToolMarker["Planning"] = "ToolMarkerPlanning";
|
|
49
|
+
})(ToolMarker || (ToolMarker = {}));
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { ToolSet } from '../../../core/domain/cipher/tools/types.js';
|
|
2
|
+
import type { IToolProvider } from '../../../core/interfaces/cipher/i-tool-provider.js';
|
|
3
|
+
import type { SimplePromptFactory } from '../system-prompt/simple-prompt-factory.js';
|
|
4
|
+
import type { ToolServices } from './tool-registry.js';
|
|
5
|
+
import { ToolMarker } from './tool-markers.js';
|
|
6
|
+
/**
|
|
7
|
+
* Tool provider implementation.
|
|
8
|
+
* Manages tool lifecycle: registration, validation, and execution.
|
|
9
|
+
*
|
|
10
|
+
* Uses builder/invocation pattern for two-phase tool execution:
|
|
11
|
+
* 1. Validation phase (via builder)
|
|
12
|
+
* 2. Execution phase (via invocation)
|
|
13
|
+
*/
|
|
14
|
+
export declare class ToolProvider implements IToolProvider {
|
|
15
|
+
private initialized;
|
|
16
|
+
private invocationBuilder?;
|
|
17
|
+
private readonly promptFactory?;
|
|
18
|
+
private readonly services;
|
|
19
|
+
private readonly toolMarkers;
|
|
20
|
+
private readonly tools;
|
|
21
|
+
/**
|
|
22
|
+
* Creates a new tool provider
|
|
23
|
+
* @param services - Services available to tools
|
|
24
|
+
* @param promptFactory - Optional prompt factory for tool output guidance
|
|
25
|
+
*/
|
|
26
|
+
constructor(services: ToolServices, promptFactory?: SimplePromptFactory);
|
|
27
|
+
/**
|
|
28
|
+
* Execute a tool with the given arguments using builder/invocation pattern.
|
|
29
|
+
*
|
|
30
|
+
* Two-phase execution:
|
|
31
|
+
* 1. Build Phase: Validate and create invocation
|
|
32
|
+
* 2. Execute Phase: Run the validated invocation
|
|
33
|
+
*
|
|
34
|
+
* @param toolName - Name of the tool to execute
|
|
35
|
+
* @param args - Tool arguments
|
|
36
|
+
* @param sessionId - Optional session ID for context
|
|
37
|
+
* @returns Tool execution result
|
|
38
|
+
* @throws ToolNotFoundError if tool doesn't exist
|
|
39
|
+
* @throws ToolValidationError if input validation fails
|
|
40
|
+
* @throws ToolExecutionError if execution fails
|
|
41
|
+
*/
|
|
42
|
+
executeTool(toolName: string, args: Record<string, unknown>, sessionId?: string): Promise<unknown>;
|
|
43
|
+
/**
|
|
44
|
+
* Get all registered tools in JSON Schema format.
|
|
45
|
+
*/
|
|
46
|
+
getAllTools(): ToolSet;
|
|
47
|
+
/**
|
|
48
|
+
* Get all available tool markers from registered tools.
|
|
49
|
+
*/
|
|
50
|
+
getAvailableMarkers(): Set<string>;
|
|
51
|
+
/**
|
|
52
|
+
* Get the count of registered tools.
|
|
53
|
+
*/
|
|
54
|
+
getToolCount(): number;
|
|
55
|
+
/**
|
|
56
|
+
* Get names of all registered tools.
|
|
57
|
+
*/
|
|
58
|
+
getToolNames(): string[];
|
|
59
|
+
/**
|
|
60
|
+
* Get tool names that have a specific marker.
|
|
61
|
+
*/
|
|
62
|
+
getToolsByMarker(marker: ToolMarker): string[];
|
|
63
|
+
/**
|
|
64
|
+
* Check if a tool exists.
|
|
65
|
+
*/
|
|
66
|
+
hasTool(toolName: string): boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Initialize the tool provider.
|
|
69
|
+
* Registers all tools whose required services are available.
|
|
70
|
+
*/
|
|
71
|
+
initialize(): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Ensures the provider is initialized.
|
|
74
|
+
* @throws ToolProviderNotInitializedError if not initialized
|
|
75
|
+
*/
|
|
76
|
+
private ensureInitialized;
|
|
77
|
+
}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { ZodError } from 'zod';
|
|
2
|
+
import { ToolExecutionError, ToolNotFoundError, ToolProviderNotInitializedError, ToolValidationError, } from '../../../core/domain/cipher/errors/tool-error.js';
|
|
3
|
+
import { ToolInvocationBuilder } from './tool-invocation.js';
|
|
4
|
+
import { TOOL_REGISTRY } from './tool-registry.js';
|
|
5
|
+
import { convertZodToJsonSchema } from './utils/schema-converter.js';
|
|
6
|
+
/**
|
|
7
|
+
* Tool provider implementation.
|
|
8
|
+
* Manages tool lifecycle: registration, validation, and execution.
|
|
9
|
+
*
|
|
10
|
+
* Uses builder/invocation pattern for two-phase tool execution:
|
|
11
|
+
* 1. Validation phase (via builder)
|
|
12
|
+
* 2. Execution phase (via invocation)
|
|
13
|
+
*/
|
|
14
|
+
export class ToolProvider {
|
|
15
|
+
initialized = false;
|
|
16
|
+
invocationBuilder;
|
|
17
|
+
promptFactory;
|
|
18
|
+
services;
|
|
19
|
+
toolMarkers = new Set();
|
|
20
|
+
tools = new Map();
|
|
21
|
+
/**
|
|
22
|
+
* Creates a new tool provider
|
|
23
|
+
* @param services - Services available to tools
|
|
24
|
+
* @param promptFactory - Optional prompt factory for tool output guidance
|
|
25
|
+
*/
|
|
26
|
+
constructor(services, promptFactory) {
|
|
27
|
+
this.services = services;
|
|
28
|
+
this.promptFactory = promptFactory;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Execute a tool with the given arguments using builder/invocation pattern.
|
|
32
|
+
*
|
|
33
|
+
* Two-phase execution:
|
|
34
|
+
* 1. Build Phase: Validate and create invocation
|
|
35
|
+
* 2. Execute Phase: Run the validated invocation
|
|
36
|
+
*
|
|
37
|
+
* @param toolName - Name of the tool to execute
|
|
38
|
+
* @param args - Tool arguments
|
|
39
|
+
* @param sessionId - Optional session ID for context
|
|
40
|
+
* @returns Tool execution result
|
|
41
|
+
* @throws ToolNotFoundError if tool doesn't exist
|
|
42
|
+
* @throws ToolValidationError if input validation fails
|
|
43
|
+
* @throws ToolExecutionError if execution fails
|
|
44
|
+
*/
|
|
45
|
+
async executeTool(toolName, args, sessionId) {
|
|
46
|
+
this.ensureInitialized();
|
|
47
|
+
if (!this.invocationBuilder) {
|
|
48
|
+
throw new ToolProviderNotInitializedError();
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
// Phase 1: Build and validate invocation
|
|
52
|
+
const context = { sessionId };
|
|
53
|
+
const invocation = this.invocationBuilder.build(`tool_call_${Date.now()}`, // Generate unique ID
|
|
54
|
+
toolName, args, context);
|
|
55
|
+
// Phase 2: Execute validated invocation
|
|
56
|
+
const executionResult = await invocation.execute();
|
|
57
|
+
// Handle execution result
|
|
58
|
+
if (!executionResult.result) {
|
|
59
|
+
// Execution failed
|
|
60
|
+
if (executionResult.error) {
|
|
61
|
+
throw new ToolExecutionError(toolName, executionResult.error.message, sessionId);
|
|
62
|
+
}
|
|
63
|
+
throw new ToolExecutionError(toolName, 'Unknown execution error', sessionId);
|
|
64
|
+
}
|
|
65
|
+
// Check if this tool has output guidance configured
|
|
66
|
+
const registryEntry = TOOL_REGISTRY[toolName];
|
|
67
|
+
if (registryEntry?.outputGuidance && this.promptFactory) {
|
|
68
|
+
const guidance = this.promptFactory.getToolOutputGuidance(registryEntry.outputGuidance);
|
|
69
|
+
if (guidance) {
|
|
70
|
+
// Return structured result with guidance
|
|
71
|
+
return {
|
|
72
|
+
guidance,
|
|
73
|
+
result: executionResult.result,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Return result without guidance
|
|
78
|
+
return executionResult.result;
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
// Handle validation errors from builder
|
|
82
|
+
if (error instanceof ZodError) {
|
|
83
|
+
const errorMessages = error.errors.map((err) => `${err.path.join('.')}: ${err.message}`).join('; ');
|
|
84
|
+
throw new ToolValidationError(toolName, errorMessages);
|
|
85
|
+
}
|
|
86
|
+
// Re-throw known errors
|
|
87
|
+
if (error instanceof ToolNotFoundError ||
|
|
88
|
+
error instanceof ToolValidationError ||
|
|
89
|
+
error instanceof ToolExecutionError) {
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
// Handle other execution errors
|
|
93
|
+
if (error instanceof Error) {
|
|
94
|
+
throw new ToolExecutionError(toolName, error.message, sessionId);
|
|
95
|
+
}
|
|
96
|
+
// Unknown error type
|
|
97
|
+
throw new ToolExecutionError(toolName, String(error), sessionId);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get all registered tools in JSON Schema format.
|
|
102
|
+
*/
|
|
103
|
+
getAllTools() {
|
|
104
|
+
this.ensureInitialized();
|
|
105
|
+
const toolSet = {};
|
|
106
|
+
for (const [toolName, tool] of this.tools.entries()) {
|
|
107
|
+
toolSet[toolName] = {
|
|
108
|
+
description: tool.description,
|
|
109
|
+
name: toolName,
|
|
110
|
+
parameters: convertZodToJsonSchema(tool.inputSchema),
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
return toolSet;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get all available tool markers from registered tools.
|
|
117
|
+
*/
|
|
118
|
+
getAvailableMarkers() {
|
|
119
|
+
this.ensureInitialized();
|
|
120
|
+
return new Set(this.toolMarkers);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Get the count of registered tools.
|
|
124
|
+
*/
|
|
125
|
+
getToolCount() {
|
|
126
|
+
this.ensureInitialized();
|
|
127
|
+
return this.tools.size;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Get names of all registered tools.
|
|
131
|
+
*/
|
|
132
|
+
getToolNames() {
|
|
133
|
+
this.ensureInitialized();
|
|
134
|
+
return [...this.tools.keys()];
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get tool names that have a specific marker.
|
|
138
|
+
*/
|
|
139
|
+
getToolsByMarker(marker) {
|
|
140
|
+
this.ensureInitialized();
|
|
141
|
+
const toolNames = [];
|
|
142
|
+
for (const [toolName, entry] of Object.entries(TOOL_REGISTRY)) {
|
|
143
|
+
if (entry.markers.includes(marker) && this.tools.has(toolName)) {
|
|
144
|
+
toolNames.push(toolName);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return toolNames;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Check if a tool exists.
|
|
151
|
+
*/
|
|
152
|
+
hasTool(toolName) {
|
|
153
|
+
this.ensureInitialized();
|
|
154
|
+
return this.tools.has(toolName);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Initialize the tool provider.
|
|
158
|
+
* Registers all tools whose required services are available.
|
|
159
|
+
*/
|
|
160
|
+
async initialize() {
|
|
161
|
+
if (this.initialized) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
// Register tools from registry
|
|
165
|
+
for (const [toolName, entry] of Object.entries(TOOL_REGISTRY)) {
|
|
166
|
+
// Check if all required services are available
|
|
167
|
+
const allServicesAvailable = entry.requiredServices.every((serviceName) => this.services[serviceName] !== undefined);
|
|
168
|
+
if (allServicesAvailable) {
|
|
169
|
+
try {
|
|
170
|
+
const tool = entry.factory(this.services);
|
|
171
|
+
this.tools.set(toolName, tool);
|
|
172
|
+
// Collect markers from registered tools
|
|
173
|
+
for (const marker of entry.markers) {
|
|
174
|
+
this.toolMarkers.add(marker);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
// Log error but don't fail initialization
|
|
179
|
+
console.error(`Failed to register tool ${toolName}:`, error);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// Initialize invocation builder with registered tools
|
|
184
|
+
this.invocationBuilder = new ToolInvocationBuilder(this.tools);
|
|
185
|
+
this.initialized = true;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Ensures the provider is initialized.
|
|
189
|
+
* @throws ToolProviderNotInitializedError if not initialized
|
|
190
|
+
*/
|
|
191
|
+
ensureInitialized() {
|
|
192
|
+
if (!this.initialized) {
|
|
193
|
+
throw new ToolProviderNotInitializedError();
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { KnownTool } from '../../../core/domain/cipher/tools/constants.js';
|
|
2
|
+
import type { Tool } from '../../../core/domain/cipher/tools/types.js';
|
|
3
|
+
import type { IFileSystem } from '../../../core/interfaces/cipher/i-file-system.js';
|
|
4
|
+
import type { IProcessService } from '../../../core/interfaces/cipher/i-process-service.js';
|
|
5
|
+
import type { MemoryManager } from '../memory/memory-manager.js';
|
|
6
|
+
import { ToolMarker } from './tool-markers.js';
|
|
7
|
+
/**
|
|
8
|
+
* Service dependencies available to tools.
|
|
9
|
+
* Tools declare which services they need via requiredServices.
|
|
10
|
+
*/
|
|
11
|
+
export interface ToolServices {
|
|
12
|
+
/** File system service for file operations */
|
|
13
|
+
fileSystemService?: IFileSystem;
|
|
14
|
+
/** Memory manager for agent memory operations */
|
|
15
|
+
memoryManager?: MemoryManager;
|
|
16
|
+
/** Process service for command execution */
|
|
17
|
+
processService?: IProcessService;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Tool factory function type.
|
|
21
|
+
* Creates a tool instance given the required services.
|
|
22
|
+
*/
|
|
23
|
+
export type ToolFactory = (services: ToolServices) => Tool;
|
|
24
|
+
/**
|
|
25
|
+
* Registry entry for a tool.
|
|
26
|
+
* Defines the factory, required services, semantic markers, and optional output guidance for each tool.
|
|
27
|
+
*/
|
|
28
|
+
export interface ToolRegistryEntry {
|
|
29
|
+
/** Factory function to create the tool */
|
|
30
|
+
factory: ToolFactory;
|
|
31
|
+
/** Semantic markers for this tool (enables smart filtering and conditional prompts) */
|
|
32
|
+
markers: readonly ToolMarker[];
|
|
33
|
+
/**
|
|
34
|
+
* Optional output guidance prompt key.
|
|
35
|
+
* If specified, the ToolProvider will append guidance from tool-outputs.yml
|
|
36
|
+
* after tool execution to help the LLM understand next steps.
|
|
37
|
+
* Example: 'write_memory' will load the 'write_memory_output' prompt.
|
|
38
|
+
*/
|
|
39
|
+
outputGuidance?: string;
|
|
40
|
+
/** Services required by this tool */
|
|
41
|
+
requiredServices: readonly (keyof ToolServices)[];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Central registry of all tools.
|
|
45
|
+
* Maps tool names to their factory functions and required services.
|
|
46
|
+
*
|
|
47
|
+
* To add a new tool:
|
|
48
|
+
* 1. Add tool name to ToolName constants
|
|
49
|
+
* 2. Create tool implementation file
|
|
50
|
+
* 3. Add entry to this registry
|
|
51
|
+
*/
|
|
52
|
+
export declare const TOOL_REGISTRY: Record<KnownTool, ToolRegistryEntry>;
|