byterover-cli 0.4.0 → 1.0.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 +1 -9
- package/dist/commands/curate.d.ts +1 -3
- package/dist/commands/curate.js +14 -51
- package/dist/commands/main.d.ts +8 -0
- package/dist/commands/main.js +29 -8
- package/dist/commands/query.d.ts +1 -3
- package/dist/commands/query.js +8 -35
- package/dist/config/context-tree-domains.d.ts +5 -0
- package/dist/config/context-tree-domains.js +6 -1
- package/dist/config/environment.js +9 -9
- package/dist/constants.d.ts +14 -0
- package/dist/constants.js +18 -0
- package/dist/core/domain/cipher/agent/agent-info.d.ts +199 -0
- package/dist/core/domain/cipher/agent/agent-info.js +143 -0
- package/dist/core/domain/cipher/agent/agent-registry.d.ts +96 -0
- package/dist/core/domain/cipher/agent/agent-registry.js +254 -0
- package/dist/core/domain/cipher/agent/index.d.ts +4 -1
- package/dist/core/domain/cipher/agent/index.js +7 -1
- package/dist/core/domain/cipher/agent-events/types.d.ts +355 -2
- package/dist/core/domain/cipher/agent-events/types.js +11 -0
- package/dist/core/domain/cipher/errors/error-normalizer.d.ts +156 -0
- package/dist/core/domain/cipher/errors/error-normalizer.js +379 -0
- package/dist/core/domain/cipher/errors/file-system-error.d.ts +2 -1
- package/dist/core/domain/cipher/errors/file-system-error.js +3 -2
- package/dist/core/domain/cipher/errors/system-prompt-error-codes.d.ts +79 -0
- package/dist/core/domain/cipher/errors/system-prompt-error-codes.js +80 -0
- package/dist/core/domain/cipher/errors/system-prompt-error.d.ts +114 -0
- package/dist/core/domain/cipher/errors/system-prompt-error.js +144 -0
- package/dist/core/domain/cipher/file-system/types.d.ts +57 -0
- package/dist/core/domain/cipher/llm/error-codes.d.ts +51 -0
- package/dist/core/domain/cipher/llm/error-codes.js +51 -0
- package/dist/core/domain/cipher/llm/index.d.ts +9 -0
- package/dist/core/domain/cipher/llm/index.js +13 -0
- package/dist/core/domain/cipher/llm/registry.d.ts +113 -0
- package/dist/core/domain/cipher/llm/registry.js +244 -0
- package/dist/core/domain/cipher/llm/schemas.d.ts +155 -0
- package/dist/core/domain/cipher/llm/schemas.js +151 -0
- package/dist/core/domain/cipher/llm/types.d.ts +121 -0
- package/dist/core/domain/cipher/llm/types.js +60 -0
- package/dist/core/domain/cipher/storage/message-storage-types.d.ts +114 -5
- package/dist/core/domain/cipher/streaming/types.d.ts +119 -0
- package/dist/core/domain/cipher/streaming/types.js +16 -0
- package/dist/core/domain/cipher/system-prompt/types.d.ts +44 -0
- package/dist/core/domain/cipher/todos/types.d.ts +34 -0
- package/dist/core/domain/cipher/tools/constants.d.ts +5 -2
- package/dist/core/domain/cipher/tools/constants.js +5 -2
- package/dist/core/domain/cipher/tools/types.d.ts +31 -0
- package/dist/core/domain/entities/event.d.ts +1 -1
- package/dist/core/domain/entities/event.js +3 -1
- package/dist/core/domain/errors/connection-error.d.ts +33 -0
- package/dist/core/domain/errors/connection-error.js +54 -0
- package/dist/core/domain/errors/core-process-error.d.ts +27 -0
- package/dist/core/domain/errors/core-process-error.js +43 -0
- package/dist/core/domain/errors/task-error.d.ts +64 -0
- package/dist/core/domain/errors/task-error.js +116 -0
- package/dist/core/domain/errors/transport-error.d.ts +72 -0
- package/dist/core/domain/errors/transport-error.js +114 -0
- package/dist/core/domain/instance/index.d.ts +1 -0
- package/dist/core/domain/instance/index.js +1 -0
- package/dist/core/domain/instance/types.d.ts +57 -0
- package/dist/core/domain/instance/types.js +72 -0
- package/dist/core/domain/knowledge/directory-manager.d.ts +16 -0
- package/dist/core/domain/knowledge/directory-manager.js +31 -0
- package/dist/core/domain/transport/index.d.ts +2 -0
- package/dist/core/domain/transport/index.js +2 -0
- package/dist/core/domain/transport/schemas.d.ts +1149 -0
- package/dist/core/domain/transport/schemas.js +554 -0
- package/dist/core/domain/transport/types.d.ts +67 -0
- package/dist/core/domain/transport/types.js +7 -0
- package/dist/core/interfaces/cipher/cipher-services.d.ts +15 -3
- package/dist/core/interfaces/cipher/i-chat-session.d.ts +47 -5
- package/dist/core/interfaces/cipher/i-cipher-agent.d.ts +39 -4
- package/dist/core/interfaces/cipher/i-content-generator.d.ts +3 -5
- package/dist/core/interfaces/cipher/i-file-system.d.ts +12 -1
- package/dist/core/interfaces/cipher/i-llm-service.d.ts +4 -5
- package/dist/core/interfaces/cipher/i-todo-storage.d.ts +24 -0
- package/dist/core/interfaces/cipher/i-todo-storage.js +1 -0
- package/dist/core/interfaces/cipher/i-tool-plugin.d.ts +90 -0
- package/dist/core/interfaces/cipher/i-tool-plugin.js +1 -0
- package/dist/core/interfaces/cipher/i-tool-provider.d.ts +3 -2
- package/dist/core/interfaces/cipher/i-tool-scheduler.d.ts +4 -0
- package/dist/core/interfaces/cipher/index.d.ts +35 -0
- package/dist/core/interfaces/cipher/index.js +11 -0
- package/dist/core/interfaces/cipher/message-factory.d.ts +155 -0
- package/dist/core/interfaces/cipher/message-factory.js +252 -0
- package/dist/core/interfaces/cipher/message-type-guards.d.ts +139 -0
- package/dist/core/interfaces/cipher/message-type-guards.js +173 -0
- package/dist/core/interfaces/cipher/message-types.d.ts +279 -5
- package/dist/core/interfaces/cipher/message-types.js +6 -0
- package/dist/core/interfaces/cipher/sanitization-types.d.ts +147 -0
- package/dist/core/interfaces/cipher/sanitization-types.js +46 -0
- package/dist/core/interfaces/executor/i-curate-executor.d.ts +34 -0
- package/dist/core/interfaces/executor/i-curate-executor.js +1 -0
- package/dist/core/interfaces/executor/i-query-executor.d.ts +32 -0
- package/dist/core/interfaces/executor/i-query-executor.js +1 -0
- package/dist/core/interfaces/executor/index.d.ts +2 -0
- package/dist/core/interfaces/executor/index.js +2 -0
- package/dist/core/interfaces/instance/i-instance-discovery.d.ts +45 -0
- package/dist/core/interfaces/instance/i-instance-discovery.js +1 -0
- package/dist/core/interfaces/instance/i-instance-manager.d.ts +58 -0
- package/dist/core/interfaces/instance/i-instance-manager.js +1 -0
- package/dist/core/interfaces/instance/index.d.ts +2 -0
- package/dist/core/interfaces/instance/index.js +2 -0
- package/dist/core/interfaces/noop-implementations.d.ts +53 -0
- package/dist/core/interfaces/noop-implementations.js +62 -0
- package/dist/core/interfaces/transport/i-transport-client.d.ts +97 -0
- package/dist/core/interfaces/transport/i-transport-client.js +1 -0
- package/dist/core/interfaces/transport/i-transport-server.d.ts +93 -0
- package/dist/core/interfaces/transport/i-transport-server.js +1 -0
- package/dist/core/interfaces/transport/index.d.ts +2 -0
- package/dist/core/interfaces/transport/index.js +2 -0
- package/dist/hooks/init/welcome.js +9 -24
- package/dist/infra/cipher/agent/agent-error-codes.d.ts +16 -0
- package/dist/infra/cipher/agent/agent-error-codes.js +17 -0
- package/dist/infra/cipher/agent/agent-error.d.ts +54 -0
- package/dist/infra/cipher/agent/agent-error.js +79 -0
- package/dist/infra/cipher/agent/agent-schemas.d.ts +264 -0
- package/dist/infra/cipher/agent/agent-schemas.js +97 -0
- package/dist/infra/cipher/agent/agent-state-manager.d.ts +140 -0
- package/dist/infra/cipher/agent/agent-state-manager.js +275 -0
- package/dist/infra/cipher/agent/base-agent.d.ts +118 -0
- package/dist/infra/cipher/agent/base-agent.js +240 -0
- package/dist/infra/cipher/agent/cipher-agent.d.ts +165 -0
- package/dist/infra/cipher/agent/cipher-agent.js +546 -0
- package/dist/infra/cipher/agent/index.d.ts +22 -0
- package/dist/infra/cipher/agent/index.js +24 -0
- package/dist/infra/cipher/agent/service-initializer.d.ts +79 -0
- package/dist/infra/cipher/{agent-service-factory.js → agent/service-initializer.js} +117 -68
- package/dist/infra/cipher/agent/types.d.ts +35 -0
- package/dist/infra/cipher/agent/types.js +1 -0
- package/dist/infra/cipher/blob/blob-reference-resolver.d.ts +107 -0
- package/dist/infra/cipher/blob/blob-reference-resolver.js +228 -0
- package/dist/infra/cipher/blob/blob-reference-utils.d.ts +117 -0
- package/dist/infra/cipher/blob/blob-reference-utils.js +230 -0
- package/dist/infra/cipher/consumer/consumer-lock.js +1 -0
- package/dist/infra/cipher/consumer/consumer-service.js +1 -0
- package/dist/infra/cipher/consumer/execution-consumer.d.ts +6 -1
- package/dist/infra/cipher/consumer/execution-consumer.js +54 -16
- package/dist/infra/cipher/consumer/index.d.ts +1 -1
- package/dist/infra/cipher/consumer/index.js +2 -1
- package/dist/infra/cipher/consumer/queue-polling-service.js +1 -0
- package/dist/infra/cipher/file-system/binary-utils.d.ts +43 -0
- package/dist/infra/cipher/file-system/binary-utils.js +164 -0
- package/dist/infra/cipher/file-system/context-tree-file-system-factory.d.ts +9 -0
- package/dist/infra/cipher/file-system/context-tree-file-system-factory.js +24 -0
- package/dist/infra/cipher/file-system/file-system-service.d.ts +17 -1
- package/dist/infra/cipher/file-system/file-system-service.js +327 -36
- package/dist/infra/cipher/file-system/path-validator.d.ts +32 -0
- package/dist/infra/cipher/file-system/path-validator.js +111 -6
- package/dist/infra/cipher/interactive-loop.js +41 -33
- package/dist/infra/cipher/llm/capability-cache.d.ts +87 -0
- package/dist/infra/cipher/llm/capability-cache.js +125 -0
- package/dist/infra/cipher/llm/context/compaction/compaction-service.d.ts +32 -0
- package/dist/infra/cipher/llm/context/compaction/compaction-service.js +44 -3
- package/dist/infra/cipher/llm/context/compression/enhanced-compaction.d.ts +112 -0
- package/dist/infra/cipher/llm/context/compression/enhanced-compaction.js +175 -0
- package/dist/infra/cipher/llm/context/compression/filter-compacted.d.ts +83 -0
- package/dist/infra/cipher/llm/context/compression/filter-compacted.js +150 -0
- package/dist/infra/cipher/llm/context/compression/index.d.ts +5 -0
- package/dist/infra/cipher/llm/context/compression/index.js +6 -0
- package/dist/infra/cipher/llm/context/compression/reactive-overflow.d.ts +107 -0
- package/dist/infra/cipher/llm/context/compression/reactive-overflow.js +272 -0
- package/dist/infra/cipher/llm/context/context-manager.d.ts +47 -1
- package/dist/infra/cipher/llm/context/context-manager.js +129 -0
- package/dist/infra/cipher/llm/context/utils.js +17 -4
- package/dist/infra/cipher/llm/generators/byterover-content-generator.js +4 -2
- package/dist/infra/cipher/llm/internal-llm-service.d.ts +50 -17
- package/dist/infra/cipher/llm/internal-llm-service.js +273 -50
- package/dist/infra/cipher/llm/openrouter-llm-service.d.ts +6 -8
- package/dist/infra/cipher/llm/openrouter-llm-service.js +14 -16
- package/dist/infra/cipher/llm/retry/retry-policy.d.ts +1 -0
- package/dist/infra/cipher/llm/retry/retry-policy.js +11 -0
- package/dist/infra/cipher/llm/retry/retry-with-backoff.js +3 -2
- package/dist/infra/cipher/llm/sanitization/base64-utils.d.ts +102 -0
- package/dist/infra/cipher/llm/sanitization/base64-utils.js +182 -0
- package/dist/infra/cipher/llm/sanitization/index.d.ts +12 -0
- package/dist/infra/cipher/llm/sanitization/index.js +13 -0
- package/dist/infra/cipher/llm/sanitization/tool-sanitizer.d.ts +74 -0
- package/dist/infra/cipher/llm/sanitization/tool-sanitizer.js +398 -0
- package/dist/infra/cipher/llm/stream-processor.d.ts +158 -0
- package/dist/infra/cipher/llm/stream-processor.js +276 -0
- package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.d.ts +13 -20
- package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.js +17 -24
- package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.d.ts +12 -11
- package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.js +16 -15
- package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.d.ts +15 -7
- package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.js +22 -10
- package/dist/infra/cipher/llm/tool-output-processor.d.ts +51 -0
- package/dist/infra/cipher/llm/tool-output-processor.js +139 -0
- package/dist/infra/cipher/process/command-validator.d.ts +23 -0
- package/dist/infra/cipher/process/command-validator.js +75 -0
- package/dist/infra/cipher/process/path-utils.d.ts +66 -0
- package/dist/infra/cipher/process/path-utils.js +94 -0
- package/dist/infra/cipher/process/process-service.d.ts +32 -0
- package/dist/infra/cipher/process/process-service.js +98 -17
- package/dist/infra/cipher/session/chat-session.d.ts +56 -7
- package/dist/infra/cipher/session/chat-session.js +163 -13
- package/dist/infra/cipher/session/index.d.ts +1 -0
- package/dist/infra/cipher/session/index.js +2 -0
- package/dist/infra/cipher/session/message-queue.d.ts +65 -0
- package/dist/infra/cipher/session/message-queue.js +90 -0
- package/dist/infra/cipher/session/session-manager.d.ts +106 -5
- package/dist/infra/cipher/session/session-manager.js +254 -7
- package/dist/infra/cipher/session/session-status.d.ts +137 -0
- package/dist/infra/cipher/session/session-status.js +184 -0
- package/dist/infra/cipher/session/title-generator.d.ts +8 -0
- package/dist/infra/cipher/session/title-generator.js +31 -0
- package/dist/infra/cipher/storage/message-storage-service.d.ts +65 -2
- package/dist/infra/cipher/storage/message-storage-service.js +300 -54
- package/dist/infra/cipher/storage/tool-part-factory.d.ts +116 -0
- package/dist/infra/cipher/storage/tool-part-factory.js +197 -0
- package/dist/infra/cipher/system-prompt/contributor-schemas.d.ts +516 -0
- package/dist/infra/cipher/system-prompt/contributor-schemas.js +85 -0
- package/dist/infra/cipher/system-prompt/contributors/agent-prompt-contributor.d.ts +59 -0
- package/dist/infra/cipher/system-prompt/contributors/agent-prompt-contributor.js +131 -0
- package/dist/infra/cipher/system-prompt/contributors/companion-contributor.d.ts +54 -0
- package/dist/infra/cipher/system-prompt/contributors/companion-contributor.js +107 -0
- package/dist/infra/cipher/system-prompt/contributors/context-tree-structure-contributor.d.ts +68 -0
- package/dist/infra/cipher/system-prompt/contributors/context-tree-structure-contributor.js +179 -0
- package/dist/infra/cipher/system-prompt/contributors/datetime-contributor.d.ts +25 -0
- package/dist/infra/cipher/system-prompt/contributors/datetime-contributor.js +29 -0
- package/dist/infra/cipher/system-prompt/contributors/environment-contributor.d.ts +25 -0
- package/dist/infra/cipher/system-prompt/contributors/environment-contributor.js +54 -0
- package/dist/infra/cipher/system-prompt/contributors/file-contributor.d.ts +60 -0
- package/dist/infra/cipher/system-prompt/contributors/file-contributor.js +128 -0
- package/dist/infra/cipher/system-prompt/contributors/index.d.ts +13 -0
- package/dist/infra/cipher/system-prompt/contributors/index.js +8 -0
- package/dist/infra/cipher/system-prompt/contributors/memory-contributor.d.ts +40 -0
- package/dist/infra/cipher/system-prompt/contributors/memory-contributor.js +56 -0
- package/dist/infra/cipher/system-prompt/contributors/static-contributor.d.ts +26 -0
- package/dist/infra/cipher/system-prompt/contributors/static-contributor.js +31 -0
- package/dist/infra/cipher/system-prompt/environment-context-builder.d.ts +112 -0
- package/dist/infra/cipher/system-prompt/environment-context-builder.js +256 -0
- package/dist/infra/cipher/system-prompt/prompt-cache.d.ts +102 -0
- package/dist/infra/cipher/system-prompt/prompt-cache.js +156 -0
- package/dist/infra/cipher/system-prompt/schemas.d.ts +151 -0
- package/dist/infra/cipher/system-prompt/schemas.js +94 -0
- package/dist/infra/cipher/system-prompt/system-prompt-manager.d.ts +136 -0
- package/dist/infra/cipher/system-prompt/system-prompt-manager.js +307 -0
- package/dist/infra/cipher/todos/todo-storage-service.d.ts +26 -0
- package/dist/infra/cipher/todos/todo-storage-service.js +28 -0
- package/dist/infra/cipher/tools/core-tool-scheduler.js +5 -1
- package/dist/infra/cipher/tools/default-policy-rules.js +1 -1
- package/dist/infra/cipher/tools/implementations/bash-exec-tool.d.ts +1 -0
- package/dist/infra/cipher/tools/implementations/bash-exec-tool.js +27 -10
- package/dist/infra/cipher/tools/implementations/bash-output-tool.js +1 -5
- package/dist/infra/cipher/tools/implementations/batch-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/batch-tool.js +142 -0
- package/dist/infra/cipher/tools/implementations/curate-tool.js +195 -68
- package/dist/infra/cipher/tools/implementations/list-directory-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/list-directory-tool.js +52 -0
- package/dist/infra/cipher/tools/implementations/read-file-tool.d.ts +8 -1
- package/dist/infra/cipher/tools/implementations/read-file-tool.js +17 -7
- package/dist/infra/cipher/tools/implementations/read-todos-tool.d.ts +11 -0
- package/dist/infra/cipher/tools/implementations/read-todos-tool.js +39 -0
- package/dist/infra/cipher/tools/implementations/{detect-domains-tool.d.ts → spec-analyze-tool.d.ts} +1 -1
- package/dist/infra/cipher/tools/implementations/{detect-domains-tool.js → spec-analyze-tool.js} +9 -7
- package/dist/infra/cipher/tools/implementations/task-tool.d.ts +34 -0
- package/dist/infra/cipher/tools/implementations/task-tool.js +207 -0
- package/dist/infra/cipher/tools/implementations/write-todos-tool.d.ts +4 -1
- package/dist/infra/cipher/tools/implementations/write-todos-tool.js +19 -63
- package/dist/infra/cipher/tools/index.d.ts +1 -1
- package/dist/infra/cipher/tools/index.js +1 -1
- package/dist/infra/cipher/tools/plugins/index.d.ts +3 -0
- package/dist/infra/cipher/tools/plugins/index.js +2 -0
- package/dist/infra/cipher/tools/plugins/logging-plugin.d.ts +28 -0
- package/dist/infra/cipher/tools/plugins/logging-plugin.js +66 -0
- package/dist/infra/cipher/tools/plugins/plugin-manager.d.ts +81 -0
- package/dist/infra/cipher/tools/plugins/plugin-manager.js +122 -0
- package/dist/infra/cipher/tools/streaming/index.d.ts +1 -0
- package/dist/infra/cipher/tools/streaming/index.js +1 -0
- package/dist/infra/cipher/tools/streaming/metadata-handler.d.ts +31 -0
- package/dist/infra/cipher/tools/streaming/metadata-handler.js +39 -0
- package/dist/infra/cipher/tools/tool-description-loader.d.ts +57 -0
- package/dist/infra/cipher/tools/tool-description-loader.js +108 -0
- package/dist/infra/cipher/tools/tool-manager.d.ts +38 -4
- package/dist/infra/cipher/tools/tool-manager.js +107 -11
- package/dist/infra/cipher/tools/tool-provider-getter.d.ts +6 -0
- package/dist/infra/cipher/tools/tool-provider-getter.js +1 -0
- package/dist/infra/cipher/tools/tool-provider.d.ts +32 -7
- package/dist/infra/cipher/tools/tool-provider.js +81 -25
- package/dist/infra/cipher/tools/tool-registry.d.ts +23 -0
- package/dist/infra/cipher/tools/tool-registry.js +58 -16
- package/dist/infra/context-tree/file-context-tree-snapshot-service.js +10 -4
- package/dist/infra/context-tree/file-context-tree-writer-service.d.ts +4 -3
- package/dist/infra/context-tree/file-context-tree-writer-service.js +6 -4
- package/dist/infra/context-tree/path-utils.d.ts +7 -0
- package/dist/infra/context-tree/path-utils.js +7 -0
- package/dist/infra/core/executors/curate-executor.d.ts +35 -0
- package/dist/infra/core/executors/curate-executor.js +123 -0
- package/dist/infra/core/executors/index.d.ts +2 -0
- package/dist/infra/core/executors/index.js +2 -0
- package/dist/infra/core/executors/query-executor.d.ts +23 -0
- package/dist/infra/core/executors/query-executor.js +51 -0
- package/dist/infra/core/task-processor.d.ts +81 -0
- package/dist/infra/core/task-processor.js +115 -0
- package/dist/infra/instance/file-instance-discovery.d.ts +31 -0
- package/dist/infra/instance/file-instance-discovery.js +84 -0
- package/dist/infra/instance/file-instance-manager.d.ts +46 -0
- package/dist/infra/instance/file-instance-manager.js +123 -0
- package/dist/infra/instance/index.d.ts +3 -0
- package/dist/infra/instance/index.js +3 -0
- package/dist/infra/instance/process-utils.d.ts +14 -0
- package/dist/infra/instance/process-utils.js +39 -0
- package/dist/infra/process/agent-worker.d.ts +20 -0
- package/dist/infra/process/agent-worker.js +602 -0
- package/dist/infra/process/index.d.ts +12 -0
- package/dist/infra/process/index.js +11 -0
- package/dist/infra/process/ipc-types.d.ts +55 -0
- package/dist/infra/process/ipc-types.js +12 -0
- package/dist/infra/process/process-manager.d.ts +154 -0
- package/dist/infra/process/process-manager.js +471 -0
- package/dist/infra/process/task-queue-manager.d.ts +123 -0
- package/dist/infra/process/task-queue-manager.js +226 -0
- package/dist/infra/process/transport-handlers.d.ts +124 -0
- package/dist/infra/process/transport-handlers.js +348 -0
- package/dist/infra/process/transport-worker.d.ts +20 -0
- package/dist/infra/process/transport-worker.js +168 -0
- package/dist/infra/repl/commands/curate-command.js +0 -5
- package/dist/infra/repl/commands/query-command.js +0 -3
- package/dist/infra/repl/repl-startup.d.ts +4 -0
- package/dist/infra/repl/repl-startup.js +10 -1
- package/dist/infra/repl/transport-client-helper.d.ts +9 -0
- package/dist/infra/repl/transport-client-helper.js +96 -0
- package/dist/infra/transport/index.d.ts +4 -0
- package/dist/infra/transport/index.js +4 -0
- package/dist/infra/transport/port-utils.d.ts +42 -0
- package/dist/infra/transport/port-utils.js +84 -0
- package/dist/infra/transport/socket-io-transport-client.d.ts +45 -0
- package/dist/infra/transport/socket-io-transport-client.js +270 -0
- package/dist/infra/transport/socket-io-transport-server.d.ts +35 -0
- package/dist/infra/transport/socket-io-transport-server.js +207 -0
- package/dist/infra/transport/transport-client-factory.d.ts +76 -0
- package/dist/infra/transport/transport-client-factory.js +168 -0
- package/dist/infra/transport/transport-factory.d.ts +33 -0
- package/dist/infra/transport/transport-factory.js +59 -0
- package/dist/infra/usecase/curate-use-case.d.ts +8 -55
- package/dist/infra/usecase/curate-use-case.js +73 -259
- package/dist/infra/usecase/init-use-case.js +19 -8
- package/dist/infra/usecase/login-use-case.js +9 -3
- package/dist/infra/usecase/query-use-case.d.ts +18 -45
- package/dist/infra/usecase/query-use-case.js +251 -326
- package/dist/infra/usecase/status-use-case.js +1 -1
- package/dist/resources/prompts/{curate-context-tree-curation.yml → curate.yml} +25 -22
- package/dist/resources/prompts/explore.yml +78 -0
- package/dist/resources/prompts/plan.yml +114 -0
- package/dist/resources/prompts/reflection.yml +1 -1
- package/dist/resources/prompts/system-prompt.yml +15 -8
- package/dist/resources/prompts/tool-outputs.yml +0 -5
- package/dist/resources/tools/bash_exec.txt +98 -0
- package/dist/resources/tools/bash_output.txt +40 -0
- package/dist/resources/tools/batch.txt +28 -0
- package/dist/resources/tools/create_knowledge_topic.txt +23 -0
- package/dist/resources/tools/curate.txt +22 -0
- package/dist/resources/tools/delete_memory.txt +1 -0
- package/dist/resources/tools/detect_domains.txt +11 -0
- package/dist/resources/tools/edit_file.txt +1 -0
- package/dist/resources/tools/edit_memory.txt +1 -0
- package/dist/resources/tools/glob_files.txt +20 -0
- package/dist/resources/tools/grep_content.txt +18 -0
- package/dist/resources/tools/kill_process.txt +16 -0
- package/dist/resources/tools/list_directory.txt +16 -0
- package/dist/resources/tools/list_memories.txt +1 -0
- package/dist/resources/tools/read_file.txt +31 -0
- package/dist/resources/tools/read_memory.txt +1 -0
- package/dist/resources/tools/read_todos.txt +17 -0
- package/dist/resources/tools/search_history.txt +1 -0
- package/dist/resources/tools/task.txt +23 -0
- package/dist/resources/tools/write_file.txt +1 -0
- package/dist/resources/tools/write_memory.txt +1 -0
- package/dist/resources/tools/write_todos.txt +29 -0
- package/dist/tui/app.js +9 -13
- package/dist/tui/components/command-details.d.ts +14 -0
- package/dist/tui/components/command-details.js +35 -0
- package/dist/tui/components/execution/execution-changes.d.ts +5 -0
- package/dist/tui/components/execution/execution-changes.js +19 -4
- package/dist/tui/components/execution/execution-content.d.ts +4 -2
- package/dist/tui/components/execution/execution-content.js +26 -13
- package/dist/tui/components/execution/execution-input.js +3 -3
- package/dist/tui/components/execution/execution-progress.d.ts +2 -2
- package/dist/tui/components/execution/execution-progress.js +8 -6
- package/dist/tui/components/execution/log-item.d.ts +3 -4
- package/dist/tui/components/execution/log-item.js +2 -5
- package/dist/tui/components/footer.js +9 -4
- package/dist/tui/components/header.d.ts +3 -3
- package/dist/tui/components/header.js +5 -3
- package/dist/tui/components/index.d.ts +1 -0
- package/dist/tui/components/index.js +1 -0
- package/dist/tui/components/onboarding/copyable-prompt.d.ts +5 -3
- package/dist/tui/components/onboarding/copyable-prompt.js +7 -8
- package/dist/tui/components/onboarding/onboarding-flow.js +35 -25
- package/dist/tui/components/scrollable-list.js +12 -10
- package/dist/tui/components/suggestions.js +39 -41
- package/dist/tui/components/tab-bar.d.ts +2 -1
- package/dist/tui/components/tab-bar.js +3 -4
- package/dist/tui/constants.d.ts +0 -5
- package/dist/tui/constants.js +0 -5
- package/dist/tui/contexts/auth-context.js +9 -2
- package/dist/tui/contexts/{use-commands.js → commands-context.js} +6 -5
- package/dist/tui/contexts/index.d.ts +6 -1
- package/dist/tui/contexts/index.js +6 -1
- package/dist/tui/contexts/onboarding-context.d.ts +1 -1
- package/dist/tui/contexts/onboarding-context.js +9 -9
- package/dist/tui/contexts/tasks-context.d.ts +84 -0
- package/dist/tui/contexts/tasks-context.js +218 -0
- package/dist/tui/contexts/transport-context.d.ts +29 -0
- package/dist/tui/contexts/transport-context.js +82 -0
- package/dist/tui/hooks/index.d.ts +10 -6
- package/dist/tui/hooks/index.js +7 -6
- package/dist/tui/hooks/use-activity-logs.d.ts +3 -11
- package/dist/tui/hooks/use-activity-logs.js +87 -34
- package/dist/tui/hooks/use-auth-polling.d.ts +24 -0
- package/dist/tui/hooks/use-auth-polling.js +104 -0
- package/dist/tui/hooks/use-slash-command-processor.js +0 -1
- package/dist/tui/hooks/use-slash-completion.js +1 -1
- package/dist/tui/hooks/use-tab-navigation.d.ts +2 -1
- package/dist/tui/hooks/use-tab-navigation.js +16 -7
- package/dist/tui/hooks/use-terminal-breakpoint.d.ts +21 -0
- package/dist/tui/hooks/use-terminal-breakpoint.js +38 -0
- package/dist/tui/hooks/use-ui-heights.d.ts +120 -0
- package/dist/tui/hooks/use-ui-heights.js +88 -0
- package/dist/tui/providers/app-providers.js +2 -6
- package/dist/tui/types/commands.d.ts +0 -26
- package/dist/tui/types/index.d.ts +1 -1
- package/dist/tui/types/ui.d.ts +9 -4
- package/dist/tui/utils/line.d.ts +11 -0
- package/dist/tui/utils/line.js +16 -0
- package/dist/tui/utils/log.d.ts +27 -0
- package/dist/tui/utils/log.js +114 -0
- package/dist/tui/views/command-view.d.ts +7 -0
- package/dist/tui/views/command-view.js +103 -80
- package/dist/tui/views/login-view.js +7 -4
- package/dist/tui/views/logs-view.d.ts +13 -0
- package/dist/tui/views/logs-view.js +27 -52
- package/dist/utils/connection-error-handler.d.ts +16 -0
- package/dist/utils/connection-error-handler.js +49 -0
- package/dist/utils/crash-log.d.ts +14 -0
- package/dist/utils/crash-log.js +19 -0
- package/dist/utils/file-helpers.d.ts +14 -0
- package/dist/utils/file-helpers.js +21 -0
- package/dist/utils/global-logs-path.d.ts +11 -0
- package/dist/utils/global-logs-path.js +37 -0
- package/dist/utils/process-logger.d.ts +53 -0
- package/dist/utils/process-logger.js +253 -0
- package/dist/utils/sandbox-detector.d.ts +31 -0
- package/dist/utils/sandbox-detector.js +122 -0
- package/oclif.manifest.json +10 -198
- package/package.json +5 -1
- package/dist/commands/cipher-agent/run.d.ts +0 -142
- package/dist/commands/cipher-agent/run.js +0 -555
- package/dist/commands/cipher-agent/set-prompt.d.ts +0 -16
- package/dist/commands/cipher-agent/set-prompt.js +0 -58
- package/dist/commands/cipher-agent/show-prompt.d.ts +0 -13
- package/dist/commands/cipher-agent/show-prompt.js +0 -53
- package/dist/commands/foo.d.ts +0 -14
- package/dist/commands/foo.js +0 -66
- package/dist/infra/cipher/agent-service-factory.d.ts +0 -93
- package/dist/infra/cipher/cipher-agent-state-manager.d.ts +0 -63
- package/dist/infra/cipher/cipher-agent-state-manager.js +0 -108
- package/dist/infra/cipher/cipher-agent.d.ts +0 -182
- package/dist/infra/cipher/cipher-agent.js +0 -317
- package/dist/infra/cipher/system-prompt/simple-prompt-factory.d.ts +0 -106
- package/dist/infra/cipher/system-prompt/simple-prompt-factory.js +0 -297
- package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.d.ts +0 -7
- package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.js +0 -424
- package/dist/resources/prompts/modes/autonomous.yml +0 -9
- package/dist/resources/prompts/query-context-tree-retrieval.yml +0 -48
- package/dist/tui/contexts/consumer.d.ts +0 -31
- package/dist/tui/contexts/consumer.js +0 -56
- package/dist/tui/hooks/use-consumer.d.ts +0 -12
- package/dist/tui/hooks/use-consumer.js +0 -50
- package/dist/tui/hooks/use-queue-polling.d.ts +0 -31
- package/dist/tui/hooks/use-queue-polling.js +0 -90
- /package/dist/tui/contexts/{use-commands.d.ts → commands-context.d.ts} +0 -0
- /package/dist/tui/contexts/{use-mode.d.ts → mode-context.d.ts} +0 -0
- /package/dist/tui/contexts/{use-mode.js → mode-context.js} +0 -0
- /package/dist/tui/contexts/{use-theme.d.ts → theme-context.d.ts} +0 -0
- /package/dist/tui/contexts/{use-theme.js → theme-context.js} +0 -0
|
@@ -1,424 +0,0 @@
|
|
|
1
|
-
import { join } from 'node:path';
|
|
2
|
-
import { z } from 'zod';
|
|
3
|
-
import { BRV_DIR, CONTEXT_FILE, CONTEXT_TREE_DIR } from '../../../../constants.js';
|
|
4
|
-
import { ToolName } from '../../../../core/domain/cipher/tools/constants.js';
|
|
5
|
-
import { DirectoryManager } from '../../../../core/domain/knowledge/directory-manager.js';
|
|
6
|
-
import { parseRelations } from '../../../../core/domain/knowledge/relation-parser.js';
|
|
7
|
-
/**
|
|
8
|
-
* Input schema for finding knowledge topics.
|
|
9
|
-
* Supports pattern matching, scoping, depth control, and pagination.
|
|
10
|
-
*/
|
|
11
|
-
const FindKnowledgeTopicsInputSchema = z.object({
|
|
12
|
-
basePath: z
|
|
13
|
-
.string()
|
|
14
|
-
.default(`${BRV_DIR}/${CONTEXT_TREE_DIR}`)
|
|
15
|
-
.describe('Base path to context tree structure'),
|
|
16
|
-
// Scoping
|
|
17
|
-
domain: z
|
|
18
|
-
.string()
|
|
19
|
-
.optional()
|
|
20
|
-
.describe('Restrict search to specific domain (exact match)'),
|
|
21
|
-
// Search filters (substring matching)
|
|
22
|
-
domainPattern: z
|
|
23
|
-
.string()
|
|
24
|
-
.optional()
|
|
25
|
-
.describe('Domain name pattern for substring matching'),
|
|
26
|
-
// Relation traversal
|
|
27
|
-
followRelations: z
|
|
28
|
-
.boolean()
|
|
29
|
-
.default(false)
|
|
30
|
-
.describe('Automatically fetch related topics referenced in Relations section'),
|
|
31
|
-
includeContent: z
|
|
32
|
-
.boolean()
|
|
33
|
-
.default(false)
|
|
34
|
-
.describe('Include content preview from context.md files'),
|
|
35
|
-
// Depth control
|
|
36
|
-
includeSubtopics: z
|
|
37
|
-
.boolean()
|
|
38
|
-
.default(false)
|
|
39
|
-
.describe('Include subtopic details in results'),
|
|
40
|
-
// Pagination
|
|
41
|
-
limit: z
|
|
42
|
-
.number()
|
|
43
|
-
.int()
|
|
44
|
-
.positive()
|
|
45
|
-
.optional()
|
|
46
|
-
.describe('Maximum number of results to return'),
|
|
47
|
-
offset: z
|
|
48
|
-
.number()
|
|
49
|
-
.int()
|
|
50
|
-
.nonnegative()
|
|
51
|
-
.default(0)
|
|
52
|
-
.describe('Number of results to skip'),
|
|
53
|
-
relationDepth: z
|
|
54
|
-
.number()
|
|
55
|
-
.int()
|
|
56
|
-
.positive()
|
|
57
|
-
.default(1)
|
|
58
|
-
.describe('How many levels deep to follow relations (default: 1, max: 3)'),
|
|
59
|
-
subtopicPattern: z
|
|
60
|
-
.string()
|
|
61
|
-
.optional()
|
|
62
|
-
.describe('Subtopic name pattern for substring matching'),
|
|
63
|
-
topicPattern: z
|
|
64
|
-
.string()
|
|
65
|
-
.optional()
|
|
66
|
-
.describe('Topic name pattern for substring matching'),
|
|
67
|
-
});
|
|
68
|
-
/**
|
|
69
|
-
* Read content preview from a file, truncating to 500 characters if needed.
|
|
70
|
-
*/
|
|
71
|
-
async function readContentPreview(filePath) {
|
|
72
|
-
try {
|
|
73
|
-
const content = await DirectoryManager.readFile(filePath);
|
|
74
|
-
return content.length > 500 ? content.slice(0, 500) + '...' : content;
|
|
75
|
-
}
|
|
76
|
-
catch {
|
|
77
|
-
return '[Content unavailable]';
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Read and parse relations from a context.md file.
|
|
82
|
-
*/
|
|
83
|
-
async function readRelations(filePath) {
|
|
84
|
-
try {
|
|
85
|
-
const content = await DirectoryManager.readFile(filePath);
|
|
86
|
-
return parseRelations(content);
|
|
87
|
-
}
|
|
88
|
-
catch {
|
|
89
|
-
return [];
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Process a single subtopic file and return its entry.
|
|
94
|
-
*/
|
|
95
|
-
async function processSubtopicFile(params) {
|
|
96
|
-
const { domainName, includeContent, subtopicFile, subtopicPattern, topicName, topicPath } = params;
|
|
97
|
-
const subtopicRelativePath = subtopicFile.replace(topicPath, '').replace(/^\//, '');
|
|
98
|
-
const subtopicParts = subtopicRelativePath.split('/');
|
|
99
|
-
// Check if this is a subtopic context.md (not the topic's own context.md)
|
|
100
|
-
if (subtopicParts.length <= 1 || subtopicParts.at(-1) !== CONTEXT_FILE) {
|
|
101
|
-
return null;
|
|
102
|
-
}
|
|
103
|
-
const subtopicName = subtopicParts[0];
|
|
104
|
-
// Apply subtopic pattern filter if specified (case-insensitive)
|
|
105
|
-
if (subtopicPattern && !subtopicName.toLowerCase().includes(subtopicPattern.toLowerCase())) {
|
|
106
|
-
return null;
|
|
107
|
-
}
|
|
108
|
-
const subtopicEntry = {
|
|
109
|
-
name: subtopicName,
|
|
110
|
-
path: `${BRV_DIR}/${CONTEXT_TREE_DIR}/${domainName}/${topicName}/${subtopicName}/${CONTEXT_FILE}` // Full path
|
|
111
|
-
};
|
|
112
|
-
// Include subtopic content preview if requested
|
|
113
|
-
if (includeContent) {
|
|
114
|
-
subtopicEntry.contentPreview = await readContentPreview(subtopicFile);
|
|
115
|
-
}
|
|
116
|
-
// Always parse relations to enable relation traversal
|
|
117
|
-
const relations = await readRelations(subtopicFile);
|
|
118
|
-
if (relations.length > 0) {
|
|
119
|
-
subtopicEntry.relations = relations;
|
|
120
|
-
}
|
|
121
|
-
return subtopicEntry;
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Collect all subtopics for a given topic.
|
|
125
|
-
*/
|
|
126
|
-
async function collectSubtopics(params) {
|
|
127
|
-
const { basePath, domainName, includeContent, subtopicPattern, topicName } = params;
|
|
128
|
-
const topicPath = join(basePath, domainName, topicName);
|
|
129
|
-
const subtopicFiles = await DirectoryManager.listMarkdownFiles(topicPath);
|
|
130
|
-
const subtopics = [];
|
|
131
|
-
for (const subtopicFile of subtopicFiles) {
|
|
132
|
-
// eslint-disable-next-line no-await-in-loop
|
|
133
|
-
const subtopicEntry = await processSubtopicFile({
|
|
134
|
-
domainName,
|
|
135
|
-
includeContent,
|
|
136
|
-
subtopicFile,
|
|
137
|
-
subtopicPattern,
|
|
138
|
-
topicName,
|
|
139
|
-
topicPath,
|
|
140
|
-
});
|
|
141
|
-
if (subtopicEntry) {
|
|
142
|
-
subtopics.push(subtopicEntry);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
return subtopics;
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Check if a topic matches the filter criteria.
|
|
149
|
-
*/
|
|
150
|
-
function matchesFilters(params) {
|
|
151
|
-
const { domain, domainName, domainPattern, topicName, topicPattern } = params;
|
|
152
|
-
// Normalize all strings to lowercase for case-insensitive matching
|
|
153
|
-
const normalizedDomainName = domainName.toLowerCase();
|
|
154
|
-
const normalizedTopicName = topicName.toLowerCase();
|
|
155
|
-
// Apply domain scoping filter (exact match, case-insensitive)
|
|
156
|
-
if (domain && normalizedDomainName !== domain.toLowerCase())
|
|
157
|
-
return false;
|
|
158
|
-
// Apply pattern filters (substring matching, case-insensitive)
|
|
159
|
-
if (domainPattern && !normalizedDomainName.includes(domainPattern.toLowerCase()))
|
|
160
|
-
return false;
|
|
161
|
-
if (topicPattern && !normalizedTopicName.includes(topicPattern.toLowerCase()))
|
|
162
|
-
return false;
|
|
163
|
-
return true;
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Collect relations from subtopics.
|
|
167
|
-
*/
|
|
168
|
-
function collectSubtopicRelations(subtopics) {
|
|
169
|
-
const relations = [];
|
|
170
|
-
for (const subtopic of subtopics) {
|
|
171
|
-
if (subtopic.relations) {
|
|
172
|
-
relations.push(...subtopic.relations);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
return relations;
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Collect all relation paths from a set of results.
|
|
179
|
-
*/
|
|
180
|
-
function collectAllRelations(results) {
|
|
181
|
-
const allRelations = new Set();
|
|
182
|
-
for (const result of results) {
|
|
183
|
-
if (result.relations) {
|
|
184
|
-
for (const rel of result.relations)
|
|
185
|
-
allRelations.add(rel);
|
|
186
|
-
}
|
|
187
|
-
if (result.subtopics) {
|
|
188
|
-
const subtopicRelations = collectSubtopicRelations(result.subtopics);
|
|
189
|
-
for (const rel of subtopicRelations)
|
|
190
|
-
allRelations.add(rel);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
return allRelations;
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* Fetch related topics by following relation references.
|
|
197
|
-
* Recursively traverses relations up to the specified depth.
|
|
198
|
-
*/
|
|
199
|
-
async function fetchRelatedTopics(params) {
|
|
200
|
-
const { basePath, currentDepth, includeContent, maxDepth, relationPaths, seenPaths } = params;
|
|
201
|
-
if (currentDepth > maxDepth || relationPaths.length === 0) {
|
|
202
|
-
return [];
|
|
203
|
-
}
|
|
204
|
-
const relatedTopics = [];
|
|
205
|
-
for (const relationPath of relationPaths) {
|
|
206
|
-
// Avoid circular references
|
|
207
|
-
if (seenPaths.has(relationPath))
|
|
208
|
-
continue;
|
|
209
|
-
seenPaths.add(relationPath);
|
|
210
|
-
const parts = relationPath.split('/');
|
|
211
|
-
if (parts.length < 2 || parts.length > 3)
|
|
212
|
-
continue;
|
|
213
|
-
const [domainName, topicName] = parts;
|
|
214
|
-
const contextPath = join(basePath, ...parts, CONTEXT_FILE);
|
|
215
|
-
try {
|
|
216
|
-
// eslint-disable-next-line no-await-in-loop
|
|
217
|
-
const fileExists = await DirectoryManager.fileExists(contextPath);
|
|
218
|
-
if (!fileExists)
|
|
219
|
-
continue;
|
|
220
|
-
const entry = {
|
|
221
|
-
domain: domainName,
|
|
222
|
-
path: `${basePath}/${relationPath}/${CONTEXT_FILE}`,
|
|
223
|
-
topic: topicName,
|
|
224
|
-
};
|
|
225
|
-
// Include content preview if requested
|
|
226
|
-
if (includeContent) {
|
|
227
|
-
// eslint-disable-next-line no-await-in-loop
|
|
228
|
-
entry.contentPreview = await readContentPreview(contextPath);
|
|
229
|
-
}
|
|
230
|
-
// Parse relations from this topic
|
|
231
|
-
// eslint-disable-next-line no-await-in-loop
|
|
232
|
-
const nestedRelations = await readRelations(contextPath);
|
|
233
|
-
if (nestedRelations.length > 0) {
|
|
234
|
-
entry.relations = nestedRelations;
|
|
235
|
-
// Recursively fetch nested relations if depth allows
|
|
236
|
-
if (currentDepth < maxDepth) {
|
|
237
|
-
// eslint-disable-next-line no-await-in-loop
|
|
238
|
-
const nestedTopics = await fetchRelatedTopics({
|
|
239
|
-
basePath,
|
|
240
|
-
currentDepth: currentDepth + 1,
|
|
241
|
-
includeContent,
|
|
242
|
-
maxDepth,
|
|
243
|
-
relationPaths: nestedRelations,
|
|
244
|
-
seenPaths,
|
|
245
|
-
});
|
|
246
|
-
relatedTopics.push(...nestedTopics);
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
relatedTopics.push(entry);
|
|
250
|
-
}
|
|
251
|
-
catch {
|
|
252
|
-
// Skip missing or invalid relations
|
|
253
|
-
continue;
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
return relatedTopics;
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* Execute the find knowledge topics operation.
|
|
260
|
-
* Searches the context tree structure and applies filters.
|
|
261
|
-
*
|
|
262
|
-
* @param input - Validated input parameters
|
|
263
|
-
* @param _context - Tool execution context (unused)
|
|
264
|
-
* @returns Structured results with total count and paginated data
|
|
265
|
-
*/
|
|
266
|
-
async function executeFindKnowledgeTopics(input, _context) {
|
|
267
|
-
const { basePath, domain, domainPattern, followRelations, includeContent, includeSubtopics, limit, offset, relationDepth, subtopicPattern, topicPattern, } = input;
|
|
268
|
-
const results = [];
|
|
269
|
-
const seenTopics = new Set(); // Track unique topic paths to avoid duplicates
|
|
270
|
-
try {
|
|
271
|
-
// List all markdown files in the context tree
|
|
272
|
-
const mdFiles = await DirectoryManager.listMarkdownFiles(basePath);
|
|
273
|
-
// Process each markdown file
|
|
274
|
-
for (const filePath of mdFiles) {
|
|
275
|
-
// Extract relative path from base
|
|
276
|
-
const relativePath = filePath.replace(basePath, '').replace(/^\//, '');
|
|
277
|
-
const parts = relativePath.split('/');
|
|
278
|
-
// Context tree structure: domain/topic/context.md or domain/topic/subtopic/context.md
|
|
279
|
-
if (parts.length < 2)
|
|
280
|
-
continue; // Need at least domain/file
|
|
281
|
-
const [domainName, topicName, ...rest] = parts;
|
|
282
|
-
const isSubtopic = rest.length > 1; // Has subtopic folder
|
|
283
|
-
// Skip if not a context.md file (only process context files)
|
|
284
|
-
const fileName = parts.at(-1);
|
|
285
|
-
if (fileName !== CONTEXT_FILE)
|
|
286
|
-
continue;
|
|
287
|
-
if (parts.length === 2)
|
|
288
|
-
continue; // Skip domain context.md files because they don't have much info
|
|
289
|
-
// Handle subtopic pattern filtering (case-insensitive)
|
|
290
|
-
if (isSubtopic) {
|
|
291
|
-
const subtopicName = rest[0];
|
|
292
|
-
if (subtopicPattern && !subtopicName.toLowerCase().includes(subtopicPattern.toLowerCase()))
|
|
293
|
-
continue;
|
|
294
|
-
// Skip subtopics for now - we'll collect them when processing their parent topic
|
|
295
|
-
continue;
|
|
296
|
-
}
|
|
297
|
-
// Apply filters
|
|
298
|
-
if (!matchesFilters({
|
|
299
|
-
domain,
|
|
300
|
-
domainName,
|
|
301
|
-
domainPattern,
|
|
302
|
-
topicName,
|
|
303
|
-
topicPattern,
|
|
304
|
-
})) {
|
|
305
|
-
continue;
|
|
306
|
-
}
|
|
307
|
-
// Create unique key for this topic to avoid duplicates
|
|
308
|
-
const topicKey = `${domainName}/${topicName}`;
|
|
309
|
-
if (seenTopics.has(topicKey))
|
|
310
|
-
continue;
|
|
311
|
-
seenTopics.add(topicKey);
|
|
312
|
-
// Build result entry for this topic
|
|
313
|
-
const entry = {
|
|
314
|
-
domain: domainName,
|
|
315
|
-
path: `${basePath}/${domainName}/${topicName}/${CONTEXT_FILE}`,
|
|
316
|
-
topic: topicName,
|
|
317
|
-
};
|
|
318
|
-
// Include content preview if requested
|
|
319
|
-
if (includeContent) {
|
|
320
|
-
// eslint-disable-next-line no-await-in-loop
|
|
321
|
-
entry.contentPreview = await readContentPreview(filePath);
|
|
322
|
-
}
|
|
323
|
-
// Always parse relations to enable relation traversal
|
|
324
|
-
// eslint-disable-next-line no-await-in-loop
|
|
325
|
-
const topicRelations = await readRelations(filePath);
|
|
326
|
-
if (topicRelations.length > 0) {
|
|
327
|
-
entry.relations = topicRelations;
|
|
328
|
-
}
|
|
329
|
-
// Include subtopics if requested
|
|
330
|
-
if (includeSubtopics) {
|
|
331
|
-
// eslint-disable-next-line no-await-in-loop
|
|
332
|
-
const subtopics = await collectSubtopics({
|
|
333
|
-
basePath,
|
|
334
|
-
domainName,
|
|
335
|
-
includeContent,
|
|
336
|
-
subtopicPattern,
|
|
337
|
-
topicName,
|
|
338
|
-
});
|
|
339
|
-
if (subtopics.length > 0) {
|
|
340
|
-
entry.subtopics = subtopics;
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
results.push(entry);
|
|
344
|
-
}
|
|
345
|
-
// Apply pagination
|
|
346
|
-
const total = results.length;
|
|
347
|
-
const effectiveOffset = offset ?? 0;
|
|
348
|
-
const paginatedResults = limit
|
|
349
|
-
? results.slice(effectiveOffset, effectiveOffset + limit)
|
|
350
|
-
: results.slice(effectiveOffset);
|
|
351
|
-
// Follow relations if requested
|
|
352
|
-
if (followRelations && paginatedResults.length > 0) {
|
|
353
|
-
const maxDepth = Math.min(relationDepth ?? 1, 3); // Cap at 3 to prevent excessive traversal
|
|
354
|
-
const allRelations = collectAllRelations(paginatedResults);
|
|
355
|
-
// Fetch related topics recursively
|
|
356
|
-
if (allRelations.size > 0) {
|
|
357
|
-
const relatedTopics = await fetchRelatedTopics({
|
|
358
|
-
basePath,
|
|
359
|
-
currentDepth: 1,
|
|
360
|
-
includeContent,
|
|
361
|
-
maxDepth,
|
|
362
|
-
relationPaths: [...allRelations],
|
|
363
|
-
seenPaths: seenTopics, // Reuse seenTopics to avoid duplicates
|
|
364
|
-
});
|
|
365
|
-
// Append related topics to results
|
|
366
|
-
paginatedResults.push(...relatedTopics);
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
return {
|
|
370
|
-
results: paginatedResults,
|
|
371
|
-
total,
|
|
372
|
-
};
|
|
373
|
-
}
|
|
374
|
-
catch {
|
|
375
|
-
// If base path doesn't exist or other errors, return empty results
|
|
376
|
-
return {
|
|
377
|
-
results: [],
|
|
378
|
-
total: 0,
|
|
379
|
-
};
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
/**
|
|
383
|
-
* Factory function to create the find knowledge topics tool.
|
|
384
|
-
*
|
|
385
|
-
* @returns Configured Tool instance
|
|
386
|
-
*/
|
|
387
|
-
export function createFindKnowledgeTopicsTool() {
|
|
388
|
-
return {
|
|
389
|
-
description: `Search and filter knowledge topics in the context tree structure with relation support.
|
|
390
|
-
|
|
391
|
-
This tool helps discover what knowledge has been stored and navigate the domain/topic hierarchy. It works similarly to find_symbol but for knowledge organization, with the ability to follow relations between topics.
|
|
392
|
-
|
|
393
|
-
**Use cases:**
|
|
394
|
-
- Discover what knowledge topics exist in a domain
|
|
395
|
-
- Find topics matching specific patterns
|
|
396
|
-
- Navigate the knowledge hierarchy via relations
|
|
397
|
-
- Retrieve context for specific areas
|
|
398
|
-
- Check what has been documented
|
|
399
|
-
- Follow related topics for comprehensive context
|
|
400
|
-
|
|
401
|
-
**Search capabilities:**
|
|
402
|
-
- Pattern matching on domain, topic, and subtopic names (substring matching)
|
|
403
|
-
- Scope searches to specific domains (exact match)
|
|
404
|
-
- Optional subtopic inclusion (depth control)
|
|
405
|
-
- Optional content preview (500 character limit)
|
|
406
|
-
- Pagination for large result sets
|
|
407
|
-
- Relation traversal (automatically fetch related topics up to 3 levels deep)
|
|
408
|
-
|
|
409
|
-
**Examples:**
|
|
410
|
-
- Find all topics in "testing" domain: {domain: "testing"}
|
|
411
|
-
- Find topics about "eslint": {topicPattern: "eslint"}
|
|
412
|
-
- Find subtopics with "config": {subtopicPattern: "config", includeSubtopics: true}
|
|
413
|
-
- Get content previews: {domain: "architecture", includeContent: true}
|
|
414
|
-
- Follow relations: {topicPattern: "auth", followRelations: true, relationDepth: 2}
|
|
415
|
-
- Paginate results: {limit: 10, offset: 0}
|
|
416
|
-
|
|
417
|
-
**Returns:**
|
|
418
|
-
- total: Total number of matching topics (before relation traversal)
|
|
419
|
-
- results: Array of topic entries with domain, topic name, optional relations, subtopics, and content with complete paths`,
|
|
420
|
-
execute: executeFindKnowledgeTopics,
|
|
421
|
-
id: ToolName.FIND_KNOWLEDGE_TOPICS,
|
|
422
|
-
inputSchema: FindKnowledgeTopicsInputSchema,
|
|
423
|
-
};
|
|
424
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
description: "autonomous execution instructions"
|
|
2
|
-
prompt: |
|
|
3
|
-
|
|
4
|
-
CRITICAL: Autonomous Execution Required
|
|
5
|
-
|
|
6
|
-
You are currently in autonomous mode. You can use all tools to process the input data and perform the CREATE, READ, UPDATE and DELETE operations on the context tree without any human intervention.
|
|
7
|
-
|
|
8
|
-
excluded_tools: []
|
|
9
|
-
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
description: "context tree retrieval instructions for query command"
|
|
2
|
-
prompt: |
|
|
3
|
-
|
|
4
|
-
Your task is to search and retrieve relevant information from the context tree to answer the user's query.
|
|
5
|
-
Prioritize tool call efficiency for tools that can be run in parallel.
|
|
6
|
-
ONLY give up on search in the last iteration.
|
|
7
|
-
|
|
8
|
-
Follow these steps to provide comprehensive answers:
|
|
9
|
-
|
|
10
|
-
1. **Understand the query**: Analyze what the user is asking for - which domains, topics, or specific information they need.
|
|
11
|
-
|
|
12
|
-
2. **Search strategically**:
|
|
13
|
-
- Use `find_knowledge_topics` to locate relevant topics across domains with pattern matching. Use the 'path' field for `read_file` tool if you need full content.
|
|
14
|
-
- Use `read_file` to read the full content of relevant context.md files
|
|
15
|
-
- Use `grep_content` to search for specific terms, code snippets, or patterns within context files
|
|
16
|
-
- Use `glob_files` to find files by path patterns if needed
|
|
17
|
-
- For multi-part queries (queries that include words like "and"), use tools in parallel:
|
|
18
|
-
- Use `find_knowledge_topics` and `read_file` multiple times to get all relevant topics and their full content.
|
|
19
|
-
- If ANY of these tools don't depend on each other, try to run them in the same iteration.
|
|
20
|
-
- Consider the context tree structure: `.brv/context-tree/{domain}/{topic}/context.md` or `.brv/context-tree/{domain}/{topic}/{subtopic}/context.md`
|
|
21
|
-
|
|
22
|
-
3. **Read relevant content**:
|
|
23
|
-
- Use `read_file` to read the full content of relevant context.md files
|
|
24
|
-
- Read multiple files if the query spans multiple domains or topics
|
|
25
|
-
|
|
26
|
-
4. **Synthesize and present**:
|
|
27
|
-
- Organize findings by domain and topic
|
|
28
|
-
- Important: Even if you don't have the answer, provide the best answer you can with the information gathered.
|
|
29
|
-
- Include relevant content excerpts with their source paths (e.g., "From code_style/best_practices:")
|
|
30
|
-
- Provide clear, structured answers with citations.
|
|
31
|
-
- If multiple topics are relevant, group them logically
|
|
32
|
-
|
|
33
|
-
5. **Be thorough but efficient**:
|
|
34
|
-
- Search progressively - start broad, then narrow down based on findings
|
|
35
|
-
- Use pattern matching to avoid reading entire tree
|
|
36
|
-
- If initial search returns too many results, refine with more specific patterns
|
|
37
|
-
- If search returns no results, try broader patterns or alternative terms
|
|
38
|
-
|
|
39
|
-
Default domains in the context tree (search in .brv/context-tree if users add new domains):
|
|
40
|
-
- `code_style` - Coding standards, style guidelines, quality standards
|
|
41
|
-
- `design` - UI/UX design, component libraries, themes, design systems
|
|
42
|
-
- `structure` - Project structure, architecture, component organization
|
|
43
|
-
- `compliance` - Security policies, compliance requirements, best practices
|
|
44
|
-
- `testing` - Testing strategies, test implementation, quality assurance
|
|
45
|
-
- `bug_fixes` - Bug fixing procedures, common issues, troubleshooting guides
|
|
46
|
-
|
|
47
|
-
excluded_tools: []
|
|
48
|
-
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Consumer Context
|
|
3
|
-
*
|
|
4
|
-
* Global context for managing consumer service and queue polling state.
|
|
5
|
-
* Consolidates useConsumer and useQueuePolling hooks into a single context.
|
|
6
|
-
*
|
|
7
|
-
* Usage:
|
|
8
|
-
* ```tsx
|
|
9
|
-
* const { consumerId, sessionExecutions, stats } = useConsumer()
|
|
10
|
-
* ```
|
|
11
|
-
*/
|
|
12
|
-
import React from 'react';
|
|
13
|
-
import type { ExecutionWithToolCalls, QueueStats } from '../../infra/cipher/consumer/queue-polling-service.js';
|
|
14
|
-
import type { ConsumerStatus } from '../types.js';
|
|
15
|
-
interface ConsumerContextValue {
|
|
16
|
-
consumerError: Error | null;
|
|
17
|
-
consumerId: null | string;
|
|
18
|
-
consumerStatus: ConsumerStatus;
|
|
19
|
-
isConnected: boolean;
|
|
20
|
-
pollingError: Error | null;
|
|
21
|
-
reconnectCount: number;
|
|
22
|
-
restart: () => Promise<void>;
|
|
23
|
-
sessionExecutions: ExecutionWithToolCalls[];
|
|
24
|
-
stats: null | QueueStats;
|
|
25
|
-
}
|
|
26
|
-
interface ConsumerProviderProps {
|
|
27
|
-
children: React.ReactNode;
|
|
28
|
-
}
|
|
29
|
-
export declare function ConsumerProvider({ children }: ConsumerProviderProps): React.ReactElement;
|
|
30
|
-
export declare function useConsumer(): ConsumerContextValue;
|
|
31
|
-
export {};
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
/**
|
|
3
|
-
* Consumer Context
|
|
4
|
-
*
|
|
5
|
-
* Global context for managing consumer service and queue polling state.
|
|
6
|
-
* Consolidates useConsumer and useQueuePolling hooks into a single context.
|
|
7
|
-
*
|
|
8
|
-
* Usage:
|
|
9
|
-
* ```tsx
|
|
10
|
-
* const { consumerId, sessionExecutions, stats } = useConsumer()
|
|
11
|
-
* ```
|
|
12
|
-
*/
|
|
13
|
-
import { createContext, useContext, useMemo } from 'react';
|
|
14
|
-
import { useConsumer as useConsumerHook } from '../hooks/use-consumer.js';
|
|
15
|
-
import { useQueuePolling } from '../hooks/use-queue-polling.js';
|
|
16
|
-
const ConsumerContext = createContext(undefined);
|
|
17
|
-
export function ConsumerProvider({ children }) {
|
|
18
|
-
// Start consumer service
|
|
19
|
-
const { consumerError, consumerId, consumerStatus, restart } = useConsumerHook();
|
|
20
|
-
// Poll queue for executions and stats
|
|
21
|
-
const { error: pollingError, isConnected, reconnectCount, sessionExecutions, stats, } = useQueuePolling({
|
|
22
|
-
consumerId: consumerId ?? undefined,
|
|
23
|
-
pollInterval: 1000,
|
|
24
|
-
});
|
|
25
|
-
const contextValue = useMemo(() => ({
|
|
26
|
-
// Consumer state
|
|
27
|
-
consumerError,
|
|
28
|
-
consumerId,
|
|
29
|
-
consumerStatus,
|
|
30
|
-
// Queue polling state
|
|
31
|
-
isConnected,
|
|
32
|
-
pollingError,
|
|
33
|
-
reconnectCount,
|
|
34
|
-
restart,
|
|
35
|
-
sessionExecutions,
|
|
36
|
-
stats,
|
|
37
|
-
}), [
|
|
38
|
-
consumerError,
|
|
39
|
-
consumerId,
|
|
40
|
-
consumerStatus,
|
|
41
|
-
restart,
|
|
42
|
-
isConnected,
|
|
43
|
-
pollingError,
|
|
44
|
-
reconnectCount,
|
|
45
|
-
sessionExecutions,
|
|
46
|
-
stats,
|
|
47
|
-
]);
|
|
48
|
-
return _jsx(ConsumerContext.Provider, { value: contextValue, children: children });
|
|
49
|
-
}
|
|
50
|
-
export function useConsumer() {
|
|
51
|
-
const context = useContext(ConsumerContext);
|
|
52
|
-
if (!context) {
|
|
53
|
-
throw new Error('useConsumer must be used within ConsumerProvider');
|
|
54
|
-
}
|
|
55
|
-
return context;
|
|
56
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Consumer Hook
|
|
3
|
-
*
|
|
4
|
-
* Hook to manage consumer lifecycle
|
|
5
|
-
*/
|
|
6
|
-
import type { ConsumerStatus } from '../types.js';
|
|
7
|
-
export declare function useConsumer(): {
|
|
8
|
-
consumerError: Error | null;
|
|
9
|
-
consumerId: null | string;
|
|
10
|
-
consumerStatus: ConsumerStatus;
|
|
11
|
-
restart: () => Promise<void>;
|
|
12
|
-
};
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Consumer Hook
|
|
3
|
-
*
|
|
4
|
-
* Hook to manage consumer lifecycle
|
|
5
|
-
*/
|
|
6
|
-
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
7
|
-
import { ConsumerService } from '../../infra/cipher/consumer/consumer-service.js';
|
|
8
|
-
export function useConsumer() {
|
|
9
|
-
const [status, setStatus] = useState('starting');
|
|
10
|
-
const [consumerError, setConsumerError] = useState(null);
|
|
11
|
-
const [consumerId, setConsumerId] = useState(null);
|
|
12
|
-
const consumerRef = useRef(new ConsumerService());
|
|
13
|
-
const mountedRef = useRef(true);
|
|
14
|
-
const startConsumer = useCallback(async () => {
|
|
15
|
-
try {
|
|
16
|
-
setStatus('starting');
|
|
17
|
-
setConsumerError(null);
|
|
18
|
-
await consumerRef.current.start();
|
|
19
|
-
if (mountedRef.current) {
|
|
20
|
-
setStatus('running');
|
|
21
|
-
setConsumerId(consumerRef.current.getConsumerId());
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
catch (error) {
|
|
25
|
-
if (mountedRef.current) {
|
|
26
|
-
setStatus('error');
|
|
27
|
-
setConsumerError(error instanceof Error ? error : new Error(String(error)));
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}, []);
|
|
31
|
-
const restart = useCallback(async () => {
|
|
32
|
-
// Dispose current consumer
|
|
33
|
-
consumerRef.current.dispose();
|
|
34
|
-
setStatus('stopped');
|
|
35
|
-
setConsumerId(null);
|
|
36
|
-
// Create new consumer and start
|
|
37
|
-
consumerRef.current = new ConsumerService();
|
|
38
|
-
await startConsumer();
|
|
39
|
-
}, [startConsumer]);
|
|
40
|
-
useEffect(() => {
|
|
41
|
-
mountedRef.current = true;
|
|
42
|
-
startConsumer();
|
|
43
|
-
return () => {
|
|
44
|
-
mountedRef.current = false;
|
|
45
|
-
consumerRef.current.dispose();
|
|
46
|
-
setStatus('stopped');
|
|
47
|
-
};
|
|
48
|
-
}, [startConsumer]);
|
|
49
|
-
return { consumerError, consumerId, consumerStatus: status, restart };
|
|
50
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Queue Polling Hook
|
|
3
|
-
*
|
|
4
|
-
* React hook for subscribing to QueuePollingService events
|
|
5
|
-
*
|
|
6
|
-
* Architecture:
|
|
7
|
-
* - Connects to singleton QueuePollingService
|
|
8
|
-
* - Updates React state only when data changes
|
|
9
|
-
* - Cleans up on unmount
|
|
10
|
-
* - Prevents memory leaks via singleton pattern
|
|
11
|
-
*
|
|
12
|
-
* Usage in Ink component:
|
|
13
|
-
* ```tsx
|
|
14
|
-
* const { stats, sessionExecutions, error } = useQueuePolling({ consumerId })
|
|
15
|
-
* ```
|
|
16
|
-
*/
|
|
17
|
-
import type { ExecutionWithToolCalls, QueueStats } from '../../infra/cipher/consumer/queue-polling-service.js';
|
|
18
|
-
export declare function useQueuePolling(options?: {
|
|
19
|
-
consumerId?: string;
|
|
20
|
-
pollInterval?: number;
|
|
21
|
-
}): {
|
|
22
|
-
error: Error | null;
|
|
23
|
-
isConnected: boolean;
|
|
24
|
-
reconnectCount: number;
|
|
25
|
-
sessionExecutions: ExecutionWithToolCalls[];
|
|
26
|
-
stats: null | QueueStats;
|
|
27
|
-
};
|
|
28
|
-
/**
|
|
29
|
-
* Cleanup hook - call when dashboard unmounts
|
|
30
|
-
*/
|
|
31
|
-
export declare function useQueuePollingCleanup(): () => void;
|