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
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default Policy Rules for Autonomous Execution.
|
|
3
|
+
*
|
|
4
|
+
* These rules define the default behavior for tool execution in autonomous mode.
|
|
5
|
+
* All tools are ALLOWED by default since the agent runs without user approval.
|
|
6
|
+
*
|
|
7
|
+
* DENY rules are only for truly dangerous operations that should never run,
|
|
8
|
+
* such as destructive commands that could harm the system.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Default policy rules for autonomous execution.
|
|
12
|
+
*
|
|
13
|
+
* Rule evaluation order:
|
|
14
|
+
* 1. DENY rules for dangerous operations (evaluated first via conditions)
|
|
15
|
+
* 2. ALLOW rules for all known tool categories
|
|
16
|
+
* 3. Default ALLOW for any unlisted tools
|
|
17
|
+
*/
|
|
18
|
+
export const DEFAULT_POLICY_RULES = [
|
|
19
|
+
// ============================================
|
|
20
|
+
// DENY rules for dangerous operations
|
|
21
|
+
// ============================================
|
|
22
|
+
/**
|
|
23
|
+
* Deny destructive root filesystem deletion.
|
|
24
|
+
* Matches: rm -rf / , rm -r / , rm -f /
|
|
25
|
+
*/
|
|
26
|
+
{
|
|
27
|
+
condition(_, args) {
|
|
28
|
+
const command = String(args.command || '');
|
|
29
|
+
// Match rm with -r or -f flags targeting root /
|
|
30
|
+
// Negative lookahead (?!\w) ensures / is not followed by word chars
|
|
31
|
+
return /rm\s+(-[rf]+\s+)+\/(?!\w)/.test(command);
|
|
32
|
+
},
|
|
33
|
+
decision: 'DENY',
|
|
34
|
+
name: 'deny-rm-rf-root',
|
|
35
|
+
reason: 'Destructive root filesystem deletion not allowed',
|
|
36
|
+
toolPattern: 'bash_exec',
|
|
37
|
+
},
|
|
38
|
+
/**
|
|
39
|
+
* Deny format commands on disk devices.
|
|
40
|
+
*/
|
|
41
|
+
{
|
|
42
|
+
condition(_, args) {
|
|
43
|
+
const command = String(args.command || '');
|
|
44
|
+
return /mkfs\.|format\s+[cdefg]:/i.test(command);
|
|
45
|
+
},
|
|
46
|
+
decision: 'DENY',
|
|
47
|
+
name: 'deny-format-disk',
|
|
48
|
+
reason: 'Disk formatting not allowed',
|
|
49
|
+
toolPattern: 'bash_exec',
|
|
50
|
+
},
|
|
51
|
+
/**
|
|
52
|
+
* Deny dd commands that could overwrite disks.
|
|
53
|
+
*/
|
|
54
|
+
{
|
|
55
|
+
condition(_, args) {
|
|
56
|
+
const command = String(args.command || '');
|
|
57
|
+
return /dd\s+.*of=\/dev\/(sd[a-z]|hd[a-z]|nvme|disk)/i.test(command);
|
|
58
|
+
},
|
|
59
|
+
decision: 'DENY',
|
|
60
|
+
name: 'deny-dd-disk',
|
|
61
|
+
reason: 'Direct disk write with dd not allowed',
|
|
62
|
+
toolPattern: 'bash_exec',
|
|
63
|
+
},
|
|
64
|
+
// ============================================
|
|
65
|
+
// ALLOW rules for tool categories
|
|
66
|
+
// ============================================
|
|
67
|
+
/**
|
|
68
|
+
* Allow all read operations (safe by default).
|
|
69
|
+
*/
|
|
70
|
+
{
|
|
71
|
+
decision: 'ALLOW',
|
|
72
|
+
name: 'allow-read-tools',
|
|
73
|
+
reason: 'Read operations are safe',
|
|
74
|
+
toolPattern: /^(read_file|glob_files|grep_content|list_memories|read_memory|search_history|find_knowledge_topics)$/,
|
|
75
|
+
},
|
|
76
|
+
/**
|
|
77
|
+
* Allow all write operations (autonomous mode).
|
|
78
|
+
*/
|
|
79
|
+
{
|
|
80
|
+
decision: 'ALLOW',
|
|
81
|
+
name: 'allow-write-tools',
|
|
82
|
+
reason: 'Write operations allowed in autonomous mode',
|
|
83
|
+
toolPattern: /^(write_file|edit_file|write_memory|edit_memory|delete_memory|create_knowledge_topic)$/,
|
|
84
|
+
},
|
|
85
|
+
/**
|
|
86
|
+
* Allow bash execution (autonomous mode, with DENY rules above as safety net).
|
|
87
|
+
*/
|
|
88
|
+
{
|
|
89
|
+
decision: 'ALLOW',
|
|
90
|
+
name: 'allow-bash-tools',
|
|
91
|
+
reason: 'Shell execution allowed in autonomous mode',
|
|
92
|
+
toolPattern: /^(bash_exec|bash_output|kill_process)$/,
|
|
93
|
+
},
|
|
94
|
+
/**
|
|
95
|
+
* Allow discovery/exploration tools.
|
|
96
|
+
*/
|
|
97
|
+
{
|
|
98
|
+
decision: 'ALLOW',
|
|
99
|
+
name: 'allow-discovery-tools',
|
|
100
|
+
reason: 'Discovery operations are safe',
|
|
101
|
+
toolPattern: /^(detect_domains)$/,
|
|
102
|
+
},
|
|
103
|
+
// ============================================
|
|
104
|
+
// Catch-all ALLOW for any other tools
|
|
105
|
+
// ============================================
|
|
106
|
+
/**
|
|
107
|
+
* Allow all other tools by default.
|
|
108
|
+
* This ensures new tools work without explicit rules.
|
|
109
|
+
*/
|
|
110
|
+
{
|
|
111
|
+
decision: 'ALLOW',
|
|
112
|
+
name: 'allow-all-default',
|
|
113
|
+
reason: 'Default allow for autonomous mode',
|
|
114
|
+
toolPattern: '*',
|
|
115
|
+
},
|
|
116
|
+
];
|
|
117
|
+
/**
|
|
118
|
+
* Create a copy of the default rules.
|
|
119
|
+
* Useful when you want to modify rules without affecting the defaults.
|
|
120
|
+
*
|
|
121
|
+
* @returns A new array with copies of the default rules
|
|
122
|
+
*/
|
|
123
|
+
export function createDefaultPolicyRules() {
|
|
124
|
+
return DEFAULT_POLICY_RULES.map((rule) => ({ ...rule }));
|
|
125
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Tool } from '../../../../core/domain/cipher/tools/types.js';
|
|
2
|
+
import type { IProcessService } from '../../../../core/interfaces/cipher/i-process-service.js';
|
|
3
|
+
/**
|
|
4
|
+
* Create bash_exec tool.
|
|
5
|
+
*
|
|
6
|
+
* Executes shell commands with security validation and approval for dangerous commands.
|
|
7
|
+
* Supports both foreground (wait for completion) and background (return immediately) execution.
|
|
8
|
+
*
|
|
9
|
+
* @param processService - Process service for command execution
|
|
10
|
+
* @returns bash_exec tool instance
|
|
11
|
+
*/
|
|
12
|
+
export declare function createBashExecTool(processService: IProcessService): Tool;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ToolName } from '../../../../core/domain/cipher/tools/constants.js';
|
|
3
|
+
/**
|
|
4
|
+
* Input schema for bash_exec tool.
|
|
5
|
+
*/
|
|
6
|
+
const BashExecInputSchema = z
|
|
7
|
+
.object({
|
|
8
|
+
/**
|
|
9
|
+
* Shell command to execute.
|
|
10
|
+
*/
|
|
11
|
+
command: z.string().describe('Shell command to execute'),
|
|
12
|
+
/**
|
|
13
|
+
* Working directory for command execution (relative to configured base directory).
|
|
14
|
+
*/
|
|
15
|
+
cwd: z.string().optional().describe('Working directory for command execution'),
|
|
16
|
+
/**
|
|
17
|
+
* Human-readable description of what the command does (5-10 words).
|
|
18
|
+
*/
|
|
19
|
+
description: z.string().optional().describe('Description of what the command does (5-10 words)'),
|
|
20
|
+
/**
|
|
21
|
+
* Execute command in background (returns immediately with process handle).
|
|
22
|
+
*/
|
|
23
|
+
runInBackground: z
|
|
24
|
+
.boolean()
|
|
25
|
+
.optional()
|
|
26
|
+
.default(false)
|
|
27
|
+
.describe('Execute command in background'),
|
|
28
|
+
/**
|
|
29
|
+
* Timeout in milliseconds (max: 600000).
|
|
30
|
+
*/
|
|
31
|
+
timeout: z
|
|
32
|
+
.number()
|
|
33
|
+
.int()
|
|
34
|
+
.positive()
|
|
35
|
+
.max(600_000)
|
|
36
|
+
.optional()
|
|
37
|
+
.default(120_000)
|
|
38
|
+
.describe('Timeout in milliseconds'),
|
|
39
|
+
})
|
|
40
|
+
.strict();
|
|
41
|
+
/**
|
|
42
|
+
* Create bash_exec tool.
|
|
43
|
+
*
|
|
44
|
+
* Executes shell commands with security validation and approval for dangerous commands.
|
|
45
|
+
* Supports both foreground (wait for completion) and background (return immediately) execution.
|
|
46
|
+
*
|
|
47
|
+
* @param processService - Process service for command execution
|
|
48
|
+
* @returns bash_exec tool instance
|
|
49
|
+
*/
|
|
50
|
+
export function createBashExecTool(processService) {
|
|
51
|
+
return {
|
|
52
|
+
description: `Execute a shell command and return its output.
|
|
53
|
+
|
|
54
|
+
If there is a memory about suggested commands, read that first.
|
|
55
|
+
|
|
56
|
+
**IMPORTANT:** Do not use this tool to start any process that is not intended to terminate quickly, or requires user interaction.
|
|
57
|
+
|
|
58
|
+
Examples of inappropriate use:
|
|
59
|
+
- Long-running processes (e.g. servers) that are not intended to terminate quickly
|
|
60
|
+
- Processes that require user interaction`,
|
|
61
|
+
async execute(input, _context) {
|
|
62
|
+
const { command, cwd, description, runInBackground, timeout } = input;
|
|
63
|
+
// Execute command via process service
|
|
64
|
+
const result = await processService.executeCommand(command, {
|
|
65
|
+
cwd,
|
|
66
|
+
description,
|
|
67
|
+
runInBackground,
|
|
68
|
+
timeout,
|
|
69
|
+
});
|
|
70
|
+
// Return based on execution mode
|
|
71
|
+
if ('stdout' in result) {
|
|
72
|
+
// Foreground execution result
|
|
73
|
+
return {
|
|
74
|
+
duration: result.duration,
|
|
75
|
+
exitCode: result.exitCode,
|
|
76
|
+
stderr: result.stderr,
|
|
77
|
+
stdout: result.stdout,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
// Background execution handle
|
|
81
|
+
return {
|
|
82
|
+
command: result.command,
|
|
83
|
+
description: result.description,
|
|
84
|
+
message: `Process started in background. Use bash_output with processId="${result.processId}" to retrieve output.`,
|
|
85
|
+
pid: result.pid,
|
|
86
|
+
processId: result.processId,
|
|
87
|
+
startedAt: result.startedAt.toISOString(),
|
|
88
|
+
};
|
|
89
|
+
},
|
|
90
|
+
id: ToolName.BASH_EXEC,
|
|
91
|
+
inputSchema: BashExecInputSchema,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Tool } from '../../../../core/domain/cipher/tools/types.js';
|
|
2
|
+
import type { IProcessService } from '../../../../core/interfaces/cipher/i-process-service.js';
|
|
3
|
+
/**
|
|
4
|
+
* Create bash_output tool.
|
|
5
|
+
*
|
|
6
|
+
* Retrieves output from a background process started by bash_exec.
|
|
7
|
+
* Reading output clears the buffer (destructive read), so output is only returned once.
|
|
8
|
+
*
|
|
9
|
+
* @param processService - Process service for retrieving output
|
|
10
|
+
* @returns bash_output tool instance
|
|
11
|
+
*/
|
|
12
|
+
export declare function createBashOutputTool(processService: IProcessService): Tool;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ToolName } from '../../../../core/domain/cipher/tools/constants.js';
|
|
3
|
+
/**
|
|
4
|
+
* Input schema for bash_output tool.
|
|
5
|
+
*/
|
|
6
|
+
const BashOutputInputSchema = z
|
|
7
|
+
.object({
|
|
8
|
+
/**
|
|
9
|
+
* Unique process identifier from bash_exec.
|
|
10
|
+
*/
|
|
11
|
+
processId: z.string().describe('Unique process identifier from bash_exec'),
|
|
12
|
+
})
|
|
13
|
+
.strict();
|
|
14
|
+
/**
|
|
15
|
+
* Create bash_output tool.
|
|
16
|
+
*
|
|
17
|
+
* Retrieves output from a background process started by bash_exec.
|
|
18
|
+
* Reading output clears the buffer (destructive read), so output is only returned once.
|
|
19
|
+
*
|
|
20
|
+
* @param processService - Process service for retrieving output
|
|
21
|
+
* @returns bash_output tool instance
|
|
22
|
+
*/
|
|
23
|
+
export function createBashOutputTool(processService) {
|
|
24
|
+
return {
|
|
25
|
+
description: `Retrieve output from a background process started by bash_exec.
|
|
26
|
+
|
|
27
|
+
Returns new output since last read (incremental). Reading output clears the buffer, so output is returned only once. Shows process status (running/completed/failed) and includes exit code and duration when completed.
|
|
28
|
+
|
|
29
|
+
**IMPORTANT:** Output is truncated if it exceeds buffer limit (default 1MB). Process is automatically cleaned up 1 hour after completion.`,
|
|
30
|
+
async execute(input, _context) {
|
|
31
|
+
const { processId } = input;
|
|
32
|
+
// Get output from process service
|
|
33
|
+
const output = await processService.getProcessOutput(processId);
|
|
34
|
+
// Return output with status
|
|
35
|
+
return {
|
|
36
|
+
duration: output.duration,
|
|
37
|
+
exitCode: output.exitCode,
|
|
38
|
+
processId,
|
|
39
|
+
status: output.status,
|
|
40
|
+
stderr: output.stderr,
|
|
41
|
+
stdout: output.stdout,
|
|
42
|
+
};
|
|
43
|
+
},
|
|
44
|
+
id: ToolName.BASH_OUTPUT,
|
|
45
|
+
inputSchema: BashOutputInputSchema,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Tool } from '../../../../core/domain/cipher/tools/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Creates the create knowledge topic tool.
|
|
4
|
+
*
|
|
5
|
+
* Creates organized knowledge topics within domain folders, where each topic and subtopic
|
|
6
|
+
* has its own folder containing a context.md file with relevant snippets. This tool should
|
|
7
|
+
* be used after detecting domains to organize the extracted knowledge into a structured hierarchy.
|
|
8
|
+
*
|
|
9
|
+
* @returns Configured create knowledge topic tool
|
|
10
|
+
*/
|
|
11
|
+
export declare function createCreateKnowledgeTopicTool(): Tool;
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { ToolName } from '../../../../core/domain/cipher/tools/constants.js';
|
|
4
|
+
import { DirectoryManager } from '../../../../core/domain/knowledge/directory-manager.js';
|
|
5
|
+
import { MarkdownWriter } from '../../../../core/domain/knowledge/markdown-writer.js';
|
|
6
|
+
import { sanitizeFolderName } from '../../../../utils/file-helpers.js';
|
|
7
|
+
const CreateKnowledgeTopicInputSchema = z.object({
|
|
8
|
+
// Base path for knowledge storage
|
|
9
|
+
basePath: z.string().default('.brv/context-tree'),
|
|
10
|
+
domains: z.array(z.string()).describe('Array of domain names'),
|
|
11
|
+
// Manual topics (optional)
|
|
12
|
+
topics: z
|
|
13
|
+
.array(z.object({
|
|
14
|
+
domain: z.string().describe('Domain category name from predefined list'),
|
|
15
|
+
name: z.string().describe('Topic name'),
|
|
16
|
+
relations: z
|
|
17
|
+
.array(z.string())
|
|
18
|
+
.optional()
|
|
19
|
+
.describe('Related topics using @domain/topic or @domain/topic/subtopic notation'),
|
|
20
|
+
snippets: z.array(z.string()).describe('Code/text snippets'),
|
|
21
|
+
subtopics: z
|
|
22
|
+
.array(z.object({
|
|
23
|
+
name: z.string().describe('Subtopic name'),
|
|
24
|
+
relations: z
|
|
25
|
+
.array(z.string())
|
|
26
|
+
.optional()
|
|
27
|
+
.describe('Related topics using @domain/topic or @domain/topic/subtopic notation'),
|
|
28
|
+
snippets: z.array(z.string()).describe('Code/text snippets'),
|
|
29
|
+
}))
|
|
30
|
+
.describe('Array of subtopics'),
|
|
31
|
+
}))
|
|
32
|
+
.describe('Array of topics for each domain'),
|
|
33
|
+
});
|
|
34
|
+
/**
|
|
35
|
+
* Execute function for create knowledge topic tool
|
|
36
|
+
*/
|
|
37
|
+
async function executeCreateKnowledgeTopic(input, _context) {
|
|
38
|
+
const { basePath, topics } = input;
|
|
39
|
+
// Ensure base knowledge structure exists
|
|
40
|
+
await DirectoryManager.ensureKnowledgeStructure(basePath);
|
|
41
|
+
const created = [];
|
|
42
|
+
const updated = [];
|
|
43
|
+
// Process each topic sequentially (domains/topics must be created in order)
|
|
44
|
+
/* eslint-disable no-await-in-loop -- Sequential processing required for domain/topic hierarchy */
|
|
45
|
+
for (const topicData of topics) {
|
|
46
|
+
const { domain, name: topicName, relations, snippets, subtopics: subtopicData } = topicData;
|
|
47
|
+
// Create or update domain folder
|
|
48
|
+
const domainPath = join(basePath, sanitizeFolderName(domain));
|
|
49
|
+
const domainResult = await DirectoryManager.createOrUpdateDomain(domainPath);
|
|
50
|
+
// Create or update topic folder
|
|
51
|
+
const topicPath = join(domainPath, sanitizeFolderName(topicName));
|
|
52
|
+
const topicResult = await DirectoryManager.createOrUpdateTopic(topicPath);
|
|
53
|
+
// Generate and write topic context.md
|
|
54
|
+
const topicContextContent = MarkdownWriter.generateContext({
|
|
55
|
+
name: topicName,
|
|
56
|
+
relations,
|
|
57
|
+
snippets,
|
|
58
|
+
});
|
|
59
|
+
const topicContextPath = join(topicPath, 'context.md');
|
|
60
|
+
await DirectoryManager.writeFileAtomic(topicContextPath, topicContextContent);
|
|
61
|
+
// Process subtopics in parallel
|
|
62
|
+
const subtopicResults = await Promise.all(subtopicData.map(async (subtopic) => {
|
|
63
|
+
// Create subtopic folder
|
|
64
|
+
const subtopicPath = join(topicPath, sanitizeFolderName(subtopic.name));
|
|
65
|
+
const subtopicResult = await DirectoryManager.createOrUpdateTopic(subtopicPath);
|
|
66
|
+
// Generate and write subtopic context.md
|
|
67
|
+
const subtopicContextContent = MarkdownWriter.generateContext({
|
|
68
|
+
name: subtopic.name,
|
|
69
|
+
relations: subtopic.relations,
|
|
70
|
+
snippets: subtopic.snippets,
|
|
71
|
+
});
|
|
72
|
+
const subtopicContextPath = join(subtopicPath, 'context.md');
|
|
73
|
+
await DirectoryManager.writeFileAtomic(subtopicContextPath, subtopicContextContent);
|
|
74
|
+
return {
|
|
75
|
+
existed: !subtopicResult.created,
|
|
76
|
+
name: subtopic.name,
|
|
77
|
+
};
|
|
78
|
+
}));
|
|
79
|
+
// Separate created vs updated subtopics
|
|
80
|
+
const createdSubtopics = subtopicResults.filter((r) => !r.existed).map((r) => r.name);
|
|
81
|
+
const updatedSubtopics = subtopicResults.filter((r) => r.existed).map((r) => r.name);
|
|
82
|
+
// Track what was created vs updated
|
|
83
|
+
if (domainResult.created || topicResult.created) {
|
|
84
|
+
created.push({
|
|
85
|
+
domain,
|
|
86
|
+
subtopics: createdSubtopics,
|
|
87
|
+
topic: topicName,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
updated.push({
|
|
92
|
+
domain,
|
|
93
|
+
subtopics: updatedSubtopics,
|
|
94
|
+
topic: topicName,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/* eslint-enable no-await-in-loop */
|
|
99
|
+
return {
|
|
100
|
+
created,
|
|
101
|
+
updated,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Creates the create knowledge topic tool.
|
|
106
|
+
*
|
|
107
|
+
* Creates organized knowledge topics within domain folders, where each topic and subtopic
|
|
108
|
+
* has its own folder containing a context.md file with relevant snippets. This tool should
|
|
109
|
+
* be used after detecting domains to organize the extracted knowledge into a structured hierarchy.
|
|
110
|
+
*
|
|
111
|
+
* @returns Configured create knowledge topic tool
|
|
112
|
+
*/
|
|
113
|
+
export function createCreateKnowledgeTopicTool() {
|
|
114
|
+
return {
|
|
115
|
+
description: `Create organized knowledge topics within domain folders. This tool structures knowledge by creating topic and subtopic folders, each containing a context.md file with relevant snippets and optional relations.
|
|
116
|
+
|
|
117
|
+
Use this tool after detecting domains to organize extracted knowledge into a hierarchical structure:
|
|
118
|
+
- Domain folders (e.g., .brv/context-tree/domain-name/)
|
|
119
|
+
- Topic folders (e.g., .brv/context-tree/domain-name/topic-name/)
|
|
120
|
+
- Topic context.md files (e.g., .brv/context-tree/domain-name/topic-name/context.md)
|
|
121
|
+
- Subtopic folders (e.g., .brv/context-tree/domain-name/topic-name/subtopic-name/)
|
|
122
|
+
- Subtopic context.md files (e.g., .brv/context-tree/domain-name/topic-name/subtopic-name/context.md)
|
|
123
|
+
|
|
124
|
+
Each topic should include:
|
|
125
|
+
1. A clear topic name
|
|
126
|
+
2. Relevant code/text snippets that demonstrate the knowledge
|
|
127
|
+
3. Optional relations to other topics using @domain/topic or @domain/topic/subtopic notation
|
|
128
|
+
4. Subtopics (optional) that break down the topic into smaller pieces
|
|
129
|
+
|
|
130
|
+
Relations enhance knowledge discovery by linking related contexts. Example:
|
|
131
|
+
- relations: ['code_style/error-handling', 'structure/api-endpoints/validation']
|
|
132
|
+
|
|
133
|
+
The tool automatically:
|
|
134
|
+
- Creates the base knowledge structure if it doesn't exist
|
|
135
|
+
- Creates topic and subtopic folders as needed
|
|
136
|
+
- Generates context.md files with snippets and relations
|
|
137
|
+
- Handles existing topics gracefully (updates instead of recreating)`,
|
|
138
|
+
execute: executeCreateKnowledgeTopic,
|
|
139
|
+
id: ToolName.CREATE_KNOWLEDGE_TOPIC,
|
|
140
|
+
inputSchema: CreateKnowledgeTopicInputSchema,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Tool } from '../../../../core/domain/cipher/tools/types.js';
|
|
2
|
+
import type { MemoryManager } from '../../memory/memory-manager.js';
|
|
3
|
+
/**
|
|
4
|
+
* Delete memory tool.
|
|
5
|
+
*
|
|
6
|
+
* Removes a memory from the scratch pad. Also deletes any blob attachments
|
|
7
|
+
* associated with the memory. Use this to clean up outdated or unnecessary context.
|
|
8
|
+
*
|
|
9
|
+
* @param memoryManager - Memory manager service dependency
|
|
10
|
+
* @returns Configured delete memory tool
|
|
11
|
+
*/
|
|
12
|
+
export declare function createDeleteMemoryTool(memoryManager: MemoryManager): Tool;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ToolName } from '../../../../core/domain/cipher/tools/constants.js';
|
|
3
|
+
/**
|
|
4
|
+
* Input schema for delete memory tool.
|
|
5
|
+
*/
|
|
6
|
+
const DeleteMemoryInputSchema = z
|
|
7
|
+
.object({
|
|
8
|
+
id: z.string().min(1).describe('Unique identifier of the memory to delete'),
|
|
9
|
+
})
|
|
10
|
+
.strict();
|
|
11
|
+
/**
|
|
12
|
+
* Delete memory tool.
|
|
13
|
+
*
|
|
14
|
+
* Removes a memory from the scratch pad. Also deletes any blob attachments
|
|
15
|
+
* associated with the memory. Use this to clean up outdated or unnecessary context.
|
|
16
|
+
*
|
|
17
|
+
* @param memoryManager - Memory manager service dependency
|
|
18
|
+
* @returns Configured delete memory tool
|
|
19
|
+
*/
|
|
20
|
+
export function createDeleteMemoryTool(memoryManager) {
|
|
21
|
+
return {
|
|
22
|
+
description: 'Delete a memory by ID. Removes the memory and all associated attachments from the scratch pad. Use this to clean up outdated context.',
|
|
23
|
+
async execute(input, _context) {
|
|
24
|
+
const { id } = input;
|
|
25
|
+
// Delete memory
|
|
26
|
+
await memoryManager.delete(id);
|
|
27
|
+
// Return confirmation
|
|
28
|
+
return {
|
|
29
|
+
deleted: true,
|
|
30
|
+
id,
|
|
31
|
+
message: `Memory ${id} has been deleted successfully`,
|
|
32
|
+
};
|
|
33
|
+
},
|
|
34
|
+
id: ToolName.DELETE_MEMORY,
|
|
35
|
+
inputSchema: DeleteMemoryInputSchema,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { CONTEXT_TREE_DOMAINS } from '../../../../config/context-tree-domains.js';
|
|
3
|
+
import { ToolName } from '../../../../core/domain/cipher/tools/constants.js';
|
|
4
|
+
/**
|
|
5
|
+
* Predefined domain category names for validation reference
|
|
6
|
+
*/
|
|
7
|
+
const PREDEFINED_DOMAIN_NAMES = CONTEXT_TREE_DOMAINS.map((domain) => domain.name);
|
|
8
|
+
/**
|
|
9
|
+
* Domain category for knowledge classification.
|
|
10
|
+
*/
|
|
11
|
+
const DomainCategory = z
|
|
12
|
+
.string()
|
|
13
|
+
.min(1)
|
|
14
|
+
.describe(`Domain category name. Must be one of the predefined categories: ${PREDEFINED_DOMAIN_NAMES.join(', ')}`);
|
|
15
|
+
/**
|
|
16
|
+
* Text segment schema - represents a portion of the input data related to a domain
|
|
17
|
+
*/
|
|
18
|
+
const TextSegmentSchema = z
|
|
19
|
+
.string()
|
|
20
|
+
.min(1)
|
|
21
|
+
.describe('A segment of text from the input data that relates to this domain category');
|
|
22
|
+
/**
|
|
23
|
+
* Input schema for detect domains tool
|
|
24
|
+
*/
|
|
25
|
+
const DetectDomainsInputSchema = z
|
|
26
|
+
.object({
|
|
27
|
+
/** Detected domains with metadata and related text segments */
|
|
28
|
+
domains: z
|
|
29
|
+
.array(z.object({
|
|
30
|
+
category: DomainCategory.describe('Domain category name from predefined list'),
|
|
31
|
+
textSegments: z
|
|
32
|
+
.array(TextSegmentSchema)
|
|
33
|
+
.min(1)
|
|
34
|
+
.describe('Array of text segments from the input data that relate to this domain. Each segment should be a meaningful excerpt that demonstrates why this domain is relevant.'),
|
|
35
|
+
}))
|
|
36
|
+
.describe('Array of detected domains with their related text segments from the input data'),
|
|
37
|
+
});
|
|
38
|
+
/**
|
|
39
|
+
* Execute function for detect domains tool with typed input
|
|
40
|
+
*/
|
|
41
|
+
async function executeDetectDomains(input, _context) {
|
|
42
|
+
const { domains } = input;
|
|
43
|
+
return {
|
|
44
|
+
domains,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Creates the detect domains tool.
|
|
49
|
+
*
|
|
50
|
+
* @returns Configured detect domains tool
|
|
51
|
+
*/
|
|
52
|
+
export function createDetectDomainsTool() {
|
|
53
|
+
const domainDescriptions = CONTEXT_TREE_DOMAINS.map((domain) => ` - ${domain.name}: ${domain.description}`).join('\n');
|
|
54
|
+
return {
|
|
55
|
+
description: `Use this tool to analyze input data and detect which predefined knowledge domains are present. For each detected domain, you must also extract the specific text segments from the input data that relate to that domain.
|
|
56
|
+
|
|
57
|
+
This tool should be the first tool to call when you want to understand new data, unless you already know what you are looking for.
|
|
58
|
+
|
|
59
|
+
Predefined domain categories:
|
|
60
|
+
${domainDescriptions}
|
|
61
|
+
|
|
62
|
+
For each domain you detect:
|
|
63
|
+
1. Identify the domain category (must be one of the predefined categories above)
|
|
64
|
+
2. Extract relevant text segments from the input data that demonstrate why this domain is relevant
|
|
65
|
+
3. Each text segment should be a meaningful excerpt (not just keywords) that shows the connection to the domain
|
|
66
|
+
4. Only include domains that are actually present in the data - do not include domains just because they exist in the predefined list
|
|
67
|
+
|
|
68
|
+
The text segments will be used later to create organized knowledge topics, so they should be substantial enough to provide context.`,
|
|
69
|
+
execute: executeDetectDomains,
|
|
70
|
+
id: ToolName.DETECT_DOMAINS,
|
|
71
|
+
inputSchema: DetectDomainsInputSchema,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Tool } from '../../../../core/domain/cipher/tools/types.js';
|
|
2
|
+
import type { IFileSystem } from '../../../../core/interfaces/cipher/i-file-system.js';
|
|
3
|
+
/**
|
|
4
|
+
* Creates the edit file tool.
|
|
5
|
+
*
|
|
6
|
+
* Edits a file by replacing text.
|
|
7
|
+
* By default, requires oldString to be unique (only one occurrence).
|
|
8
|
+
* Set replaceAll to true to replace all occurrences.
|
|
9
|
+
*
|
|
10
|
+
* @param fileSystemService - File system service dependency
|
|
11
|
+
* @returns Configured edit file tool
|
|
12
|
+
*/
|
|
13
|
+
export declare function createEditFileTool(fileSystemService: IFileSystem): Tool;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ToolName } from '../../../../core/domain/cipher/tools/constants.js';
|
|
3
|
+
/**
|
|
4
|
+
* Input schema for edit file tool.
|
|
5
|
+
*/
|
|
6
|
+
const EditFileInputSchema = z
|
|
7
|
+
.object({
|
|
8
|
+
filePath: z.string().describe('Absolute path to the file to edit'),
|
|
9
|
+
newString: z.string().describe('Replacement text'),
|
|
10
|
+
oldString: z.string().describe('Text to replace (must be unique unless replaceAll is true)'),
|
|
11
|
+
replaceAll: z
|
|
12
|
+
.boolean()
|
|
13
|
+
.optional()
|
|
14
|
+
.default(false)
|
|
15
|
+
.describe('Replace all occurrences (default: false, requires unique match)'),
|
|
16
|
+
})
|
|
17
|
+
.strict();
|
|
18
|
+
/**
|
|
19
|
+
* Creates the edit file tool.
|
|
20
|
+
*
|
|
21
|
+
* Edits a file by replacing text.
|
|
22
|
+
* By default, requires oldString to be unique (only one occurrence).
|
|
23
|
+
* Set replaceAll to true to replace all occurrences.
|
|
24
|
+
*
|
|
25
|
+
* @param fileSystemService - File system service dependency
|
|
26
|
+
* @returns Configured edit file tool
|
|
27
|
+
*/
|
|
28
|
+
export function createEditFileTool(fileSystemService) {
|
|
29
|
+
return {
|
|
30
|
+
description: 'Edit a file by replacing text. By default requires unique match (set replaceAll=true for multiple replacements).',
|
|
31
|
+
async execute(input, _context) {
|
|
32
|
+
const { filePath, newString, oldString, replaceAll } = input;
|
|
33
|
+
// Call file system service
|
|
34
|
+
const result = await fileSystemService.editFile(filePath, {
|
|
35
|
+
newString,
|
|
36
|
+
oldString,
|
|
37
|
+
replaceAll,
|
|
38
|
+
}, {});
|
|
39
|
+
// Return formatted result
|
|
40
|
+
return {
|
|
41
|
+
bytesWritten: result.bytesWritten,
|
|
42
|
+
path: result.path,
|
|
43
|
+
replacements: result.replacements,
|
|
44
|
+
success: result.success,
|
|
45
|
+
};
|
|
46
|
+
},
|
|
47
|
+
id: ToolName.EDIT_FILE,
|
|
48
|
+
inputSchema: EditFileInputSchema,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Tool } from '../../../../core/domain/cipher/tools/types.js';
|
|
2
|
+
import type { MemoryManager } from '../../memory/memory-manager.js';
|
|
3
|
+
/**
|
|
4
|
+
* Creates the edit memory tool.
|
|
5
|
+
*
|
|
6
|
+
* Updates an existing memory's content, tags, or pinned status. Metadata is merged
|
|
7
|
+
* while content and tags are replaced if provided. Use this to refine or update
|
|
8
|
+
* context in the scratch pad.
|
|
9
|
+
*
|
|
10
|
+
* @param memoryManager - Memory manager service dependency
|
|
11
|
+
* @returns Configured edit memory tool
|
|
12
|
+
*/
|
|
13
|
+
export declare function createEditMemoryTool(memoryManager: MemoryManager): Tool;
|