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
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { SystemPromptError } from '../../../core/domain/cipher/errors/system-prompt-error.js';
|
|
5
|
+
import { EnvironmentContextOptionsSchema } from './schemas.js';
|
|
6
|
+
/**
|
|
7
|
+
* Patterns to exclude from file tree.
|
|
8
|
+
*/
|
|
9
|
+
const EXCLUDE_PATTERNS = [
|
|
10
|
+
'node_modules',
|
|
11
|
+
'.git',
|
|
12
|
+
'.brv',
|
|
13
|
+
'dist',
|
|
14
|
+
'build',
|
|
15
|
+
'.next',
|
|
16
|
+
'coverage',
|
|
17
|
+
'.DS_Store',
|
|
18
|
+
'.env',
|
|
19
|
+
'.env.local',
|
|
20
|
+
'__pycache__',
|
|
21
|
+
'.pytest_cache',
|
|
22
|
+
'.venv',
|
|
23
|
+
'venv',
|
|
24
|
+
'.idea',
|
|
25
|
+
'.vscode',
|
|
26
|
+
'*.log',
|
|
27
|
+
'.turbo',
|
|
28
|
+
'.cache',
|
|
29
|
+
];
|
|
30
|
+
/**
|
|
31
|
+
* Builds environment context for system prompts.
|
|
32
|
+
*
|
|
33
|
+
* Gathers information about:
|
|
34
|
+
* - Working directory
|
|
35
|
+
* - Git repository status
|
|
36
|
+
* - Platform and OS version
|
|
37
|
+
* - Project file tree
|
|
38
|
+
* - .brv directory structure
|
|
39
|
+
*/
|
|
40
|
+
export class EnvironmentContextBuilder {
|
|
41
|
+
/**
|
|
42
|
+
* Build the complete environment context.
|
|
43
|
+
*
|
|
44
|
+
* @param options - Configuration options
|
|
45
|
+
* @returns Environment context object
|
|
46
|
+
*/
|
|
47
|
+
async build(options) {
|
|
48
|
+
// Validate options with Zod schema
|
|
49
|
+
const parseResult = EnvironmentContextOptionsSchema.safeParse(options);
|
|
50
|
+
if (!parseResult.success) {
|
|
51
|
+
const errorMessages = parseResult.error.errors
|
|
52
|
+
.map((err) => `${err.path.join('.')}: ${err.message}`)
|
|
53
|
+
.join('; ');
|
|
54
|
+
throw SystemPromptError.configInvalid(errorMessages, parseResult.error.errors);
|
|
55
|
+
}
|
|
56
|
+
const validatedOptions = parseResult.data;
|
|
57
|
+
const { includeBrvStructure = true, includeFileTree = true, maxFileTreeDepth = 3, maxFileTreeEntries = 100, workingDirectory, } = validatedOptions;
|
|
58
|
+
const isGitRepository = this.detectGitRepository(workingDirectory);
|
|
59
|
+
let fileTree = '';
|
|
60
|
+
if (includeFileTree) {
|
|
61
|
+
fileTree = this.buildFileTree(workingDirectory, maxFileTreeDepth, maxFileTreeEntries);
|
|
62
|
+
}
|
|
63
|
+
let brvStructure = '';
|
|
64
|
+
if (includeBrvStructure) {
|
|
65
|
+
brvStructure = this.buildBrvStructure(workingDirectory);
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
brvStructure,
|
|
69
|
+
fileTree,
|
|
70
|
+
isGitRepository,
|
|
71
|
+
nodeVersion: process.version,
|
|
72
|
+
osVersion: os.release(),
|
|
73
|
+
platform: os.platform(),
|
|
74
|
+
workingDirectory,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Build an explanation of the .brv directory structure.
|
|
79
|
+
*
|
|
80
|
+
* @param dir - Working directory path
|
|
81
|
+
* @returns Formatted .brv structure explanation
|
|
82
|
+
*/
|
|
83
|
+
buildBrvStructure(dir) {
|
|
84
|
+
const brvDir = path.join(dir, '.brv');
|
|
85
|
+
if (!fs.existsSync(brvDir)) {
|
|
86
|
+
return '<brv-structure>\nByteRover not initialized (.brv directory not found)\n</brv-structure>';
|
|
87
|
+
}
|
|
88
|
+
// Build actual structure by reading the directory
|
|
89
|
+
const structure = ['<brv-structure>', '.brv/'];
|
|
90
|
+
try {
|
|
91
|
+
const entries = fs.readdirSync(brvDir, { withFileTypes: true });
|
|
92
|
+
for (const entry of entries) {
|
|
93
|
+
if (entry.isDirectory()) {
|
|
94
|
+
const description = this.getBrvDirectoryDescription(entry.name);
|
|
95
|
+
structure.push(` ${entry.name}/ ${description}`);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
const description = this.getBrvFileDescription(entry.name);
|
|
99
|
+
structure.push(` ${entry.name} ${description}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
structure.push(' (unable to read directory contents)');
|
|
105
|
+
}
|
|
106
|
+
structure.push('</brv-structure>');
|
|
107
|
+
return structure.join('\n');
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Build a formatted file tree of the project.
|
|
111
|
+
*
|
|
112
|
+
* @param dir - Root directory to start from
|
|
113
|
+
* @param maxDepth - Maximum traversal depth
|
|
114
|
+
* @param maxEntries - Maximum number of entries to include
|
|
115
|
+
* @returns Formatted file tree string
|
|
116
|
+
*/
|
|
117
|
+
buildFileTree(dir, maxDepth, maxEntries) {
|
|
118
|
+
const entriesCount = { value: 0 };
|
|
119
|
+
const truncatedCount = { value: 0 };
|
|
120
|
+
const lines = ['<files>'];
|
|
121
|
+
this.traverseDirectory({
|
|
122
|
+
currentDepth: 0,
|
|
123
|
+
dir,
|
|
124
|
+
entriesCount,
|
|
125
|
+
lines,
|
|
126
|
+
maxDepth,
|
|
127
|
+
maxEntries,
|
|
128
|
+
truncatedCount,
|
|
129
|
+
});
|
|
130
|
+
if (truncatedCount.value > 0) {
|
|
131
|
+
lines.push(`[${truncatedCount.value} entries truncated]`);
|
|
132
|
+
}
|
|
133
|
+
lines.push('</files>');
|
|
134
|
+
return lines.join('\n');
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Check if a directory is a git repository.
|
|
138
|
+
*
|
|
139
|
+
* @param dir - Directory path to check
|
|
140
|
+
* @returns True if the directory contains a .git folder
|
|
141
|
+
*/
|
|
142
|
+
detectGitRepository(dir) {
|
|
143
|
+
try {
|
|
144
|
+
const gitDir = path.join(dir, '.git');
|
|
145
|
+
return fs.existsSync(gitDir);
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Get description for a .brv directory.
|
|
153
|
+
*
|
|
154
|
+
* @param name - Directory name
|
|
155
|
+
* @returns Description string
|
|
156
|
+
*/
|
|
157
|
+
getBrvDirectoryDescription(name) {
|
|
158
|
+
const descriptions = {
|
|
159
|
+
blobs: '# Storage for conversation history',
|
|
160
|
+
'context-tree': '# Semantic knowledge organized by domain',
|
|
161
|
+
logs: '# Debug logs for troubleshooting',
|
|
162
|
+
};
|
|
163
|
+
return descriptions[name] ?? '';
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Get description for a .brv file.
|
|
167
|
+
*
|
|
168
|
+
* @param name - File name
|
|
169
|
+
* @returns Description string
|
|
170
|
+
*/
|
|
171
|
+
getBrvFileDescription(name) {
|
|
172
|
+
const descriptions = {
|
|
173
|
+
'config.json': '# Project configuration',
|
|
174
|
+
};
|
|
175
|
+
return descriptions[name] ?? '';
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Check if a file or directory should be excluded from the tree.
|
|
179
|
+
*
|
|
180
|
+
* @param name - File or directory name
|
|
181
|
+
* @returns True if should be excluded
|
|
182
|
+
*/
|
|
183
|
+
shouldExclude(name) {
|
|
184
|
+
for (const pattern of EXCLUDE_PATTERNS) {
|
|
185
|
+
if (pattern.startsWith('*')) {
|
|
186
|
+
// Wildcard pattern (e.g., *.log)
|
|
187
|
+
const extension = pattern.slice(1);
|
|
188
|
+
if (name.endsWith(extension)) {
|
|
189
|
+
return true;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
else if (name === pattern) {
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return false;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Recursively traverse a directory and build tree lines.
|
|
200
|
+
*
|
|
201
|
+
* @param options - Traversal options
|
|
202
|
+
* @param options.dir - Current directory path
|
|
203
|
+
* @param options.maxDepth - Maximum depth to traverse
|
|
204
|
+
* @param options.maxEntries - Maximum entries to include
|
|
205
|
+
* @param options.currentDepth - Current traversal depth
|
|
206
|
+
* @param options.entriesCount - Counter for entries added (mutable object with value property)
|
|
207
|
+
* @param options.truncatedCount - Counter for truncated entries (mutable object with value property)
|
|
208
|
+
* @param options.lines - Array to append lines to
|
|
209
|
+
*/
|
|
210
|
+
traverseDirectory(options) {
|
|
211
|
+
const { currentDepth, dir, entriesCount, lines, maxDepth, maxEntries, truncatedCount } = options;
|
|
212
|
+
if (currentDepth >= maxDepth) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
let entries;
|
|
216
|
+
try {
|
|
217
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
// Filter and sort: directories first, then alphabetically
|
|
223
|
+
const filteredEntries = entries
|
|
224
|
+
.filter((entry) => !this.shouldExclude(entry.name))
|
|
225
|
+
.sort((a, b) => {
|
|
226
|
+
if (a.isDirectory() && !b.isDirectory())
|
|
227
|
+
return -1;
|
|
228
|
+
if (!a.isDirectory() && b.isDirectory())
|
|
229
|
+
return 1;
|
|
230
|
+
return a.name.localeCompare(b.name);
|
|
231
|
+
});
|
|
232
|
+
const indent = ' '.repeat(currentDepth);
|
|
233
|
+
for (const entry of filteredEntries) {
|
|
234
|
+
if (entriesCount.value >= maxEntries) {
|
|
235
|
+
truncatedCount.value += filteredEntries.length - filteredEntries.indexOf(entry);
|
|
236
|
+
break;
|
|
237
|
+
}
|
|
238
|
+
entriesCount.value++;
|
|
239
|
+
if (entry.isDirectory()) {
|
|
240
|
+
lines.push(`${indent}${entry.name}/`);
|
|
241
|
+
this.traverseDirectory({
|
|
242
|
+
currentDepth: currentDepth + 1,
|
|
243
|
+
dir: path.join(dir, entry.name),
|
|
244
|
+
entriesCount,
|
|
245
|
+
lines,
|
|
246
|
+
maxDepth,
|
|
247
|
+
maxEntries,
|
|
248
|
+
truncatedCount,
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
lines.push(`${indent}${entry.name}`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache entry for a prompt configuration.
|
|
3
|
+
*/
|
|
4
|
+
export interface PromptCacheEntry<T> {
|
|
5
|
+
/** Cached content */
|
|
6
|
+
content: T;
|
|
7
|
+
/** Timestamp when this entry was loaded */
|
|
8
|
+
loadedAt: number;
|
|
9
|
+
/** File modification time in milliseconds when cached */
|
|
10
|
+
mtimeMs: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Options for configuring the prompt cache.
|
|
14
|
+
*/
|
|
15
|
+
export interface PromptCacheOptions {
|
|
16
|
+
/** Maximum number of entries to store (default: 100) */
|
|
17
|
+
maxSize?: number;
|
|
18
|
+
/** TTL in milliseconds, 0 means no TTL (default: 0) */
|
|
19
|
+
ttlMs?: number;
|
|
20
|
+
/** Whether to validate file mtime on cache hit (default: true) */
|
|
21
|
+
validateMtime?: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Prompt cache with file modification time and TTL validation.
|
|
25
|
+
*
|
|
26
|
+
* Features:
|
|
27
|
+
* - Validates cached entries against file modification time
|
|
28
|
+
* - Optional TTL-based expiration
|
|
29
|
+
* - LRU-style eviction when max size is reached
|
|
30
|
+
*/
|
|
31
|
+
export declare class PromptCache<T> {
|
|
32
|
+
private readonly cache;
|
|
33
|
+
private readonly maxSize;
|
|
34
|
+
private readonly ttlMs;
|
|
35
|
+
private readonly validateMtime;
|
|
36
|
+
/**
|
|
37
|
+
* Creates a new prompt cache.
|
|
38
|
+
*
|
|
39
|
+
* @param options - Cache configuration options
|
|
40
|
+
*/
|
|
41
|
+
constructor(options?: PromptCacheOptions);
|
|
42
|
+
/**
|
|
43
|
+
* Clear all cached entries.
|
|
44
|
+
*/
|
|
45
|
+
clear(): void;
|
|
46
|
+
/**
|
|
47
|
+
* Get a cached entry if valid.
|
|
48
|
+
*
|
|
49
|
+
* Returns undefined if:
|
|
50
|
+
* - Entry doesn't exist
|
|
51
|
+
* - TTL has expired
|
|
52
|
+
* - File has been modified (mtime validation enabled)
|
|
53
|
+
*
|
|
54
|
+
* @param filepath - Absolute path to the file
|
|
55
|
+
* @returns Cached content or undefined if not valid
|
|
56
|
+
*/
|
|
57
|
+
get(filepath: string): T | undefined;
|
|
58
|
+
/**
|
|
59
|
+
* Get cache statistics.
|
|
60
|
+
*
|
|
61
|
+
* @returns Object with size and maxSize
|
|
62
|
+
*/
|
|
63
|
+
getStats(): {
|
|
64
|
+
maxSize: number;
|
|
65
|
+
size: number;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Check if an entry exists and is valid.
|
|
69
|
+
*
|
|
70
|
+
* @param filepath - Absolute path to the file
|
|
71
|
+
* @returns True if a valid entry exists
|
|
72
|
+
*/
|
|
73
|
+
has(filepath: string): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Invalidate a specific cache entry.
|
|
76
|
+
*
|
|
77
|
+
* @param filepath - Absolute path to the file
|
|
78
|
+
* @returns True if an entry was removed
|
|
79
|
+
*/
|
|
80
|
+
invalidate(filepath: string): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Get all cached filepaths.
|
|
83
|
+
*
|
|
84
|
+
* @returns Array of cached filepaths
|
|
85
|
+
*/
|
|
86
|
+
keys(): string[];
|
|
87
|
+
/**
|
|
88
|
+
* Store content in the cache.
|
|
89
|
+
*
|
|
90
|
+
* If the cache is at max capacity, the oldest entry is evicted.
|
|
91
|
+
*
|
|
92
|
+
* @param filepath - Absolute path to the file
|
|
93
|
+
* @param content - Content to cache
|
|
94
|
+
*/
|
|
95
|
+
set(filepath: string, content: T): void;
|
|
96
|
+
/**
|
|
97
|
+
* Find the oldest cache entry by loadedAt timestamp.
|
|
98
|
+
*
|
|
99
|
+
* @returns Filepath of the oldest entry, or undefined if cache is empty
|
|
100
|
+
*/
|
|
101
|
+
private findOldestEntry;
|
|
102
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
/**
|
|
3
|
+
* Prompt cache with file modification time and TTL validation.
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - Validates cached entries against file modification time
|
|
7
|
+
* - Optional TTL-based expiration
|
|
8
|
+
* - LRU-style eviction when max size is reached
|
|
9
|
+
*/
|
|
10
|
+
export class PromptCache {
|
|
11
|
+
cache = new Map();
|
|
12
|
+
maxSize;
|
|
13
|
+
ttlMs;
|
|
14
|
+
validateMtime;
|
|
15
|
+
/**
|
|
16
|
+
* Creates a new prompt cache.
|
|
17
|
+
*
|
|
18
|
+
* @param options - Cache configuration options
|
|
19
|
+
*/
|
|
20
|
+
constructor(options = {}) {
|
|
21
|
+
this.maxSize = options.maxSize ?? 100;
|
|
22
|
+
this.ttlMs = options.ttlMs ?? 0;
|
|
23
|
+
this.validateMtime = options.validateMtime ?? true;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Clear all cached entries.
|
|
27
|
+
*/
|
|
28
|
+
clear() {
|
|
29
|
+
this.cache.clear();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get a cached entry if valid.
|
|
33
|
+
*
|
|
34
|
+
* Returns undefined if:
|
|
35
|
+
* - Entry doesn't exist
|
|
36
|
+
* - TTL has expired
|
|
37
|
+
* - File has been modified (mtime validation enabled)
|
|
38
|
+
*
|
|
39
|
+
* @param filepath - Absolute path to the file
|
|
40
|
+
* @returns Cached content or undefined if not valid
|
|
41
|
+
*/
|
|
42
|
+
get(filepath) {
|
|
43
|
+
const entry = this.cache.get(filepath);
|
|
44
|
+
if (!entry) {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
// Check TTL
|
|
48
|
+
if (this.ttlMs > 0) {
|
|
49
|
+
const age = Date.now() - entry.loadedAt;
|
|
50
|
+
if (age > this.ttlMs) {
|
|
51
|
+
this.cache.delete(filepath);
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Check file modification time
|
|
56
|
+
if (this.validateMtime) {
|
|
57
|
+
try {
|
|
58
|
+
const stats = fs.statSync(filepath);
|
|
59
|
+
if (stats.mtimeMs > entry.mtimeMs) {
|
|
60
|
+
this.cache.delete(filepath);
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// File doesn't exist or can't be accessed, invalidate cache
|
|
66
|
+
this.cache.delete(filepath);
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return entry.content;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get cache statistics.
|
|
74
|
+
*
|
|
75
|
+
* @returns Object with size and maxSize
|
|
76
|
+
*/
|
|
77
|
+
getStats() {
|
|
78
|
+
return {
|
|
79
|
+
maxSize: this.maxSize,
|
|
80
|
+
size: this.cache.size,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Check if an entry exists and is valid.
|
|
85
|
+
*
|
|
86
|
+
* @param filepath - Absolute path to the file
|
|
87
|
+
* @returns True if a valid entry exists
|
|
88
|
+
*/
|
|
89
|
+
has(filepath) {
|
|
90
|
+
return this.get(filepath) !== undefined;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Invalidate a specific cache entry.
|
|
94
|
+
*
|
|
95
|
+
* @param filepath - Absolute path to the file
|
|
96
|
+
* @returns True if an entry was removed
|
|
97
|
+
*/
|
|
98
|
+
invalidate(filepath) {
|
|
99
|
+
return this.cache.delete(filepath);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get all cached filepaths.
|
|
103
|
+
*
|
|
104
|
+
* @returns Array of cached filepaths
|
|
105
|
+
*/
|
|
106
|
+
keys() {
|
|
107
|
+
return [...this.cache.keys()];
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Store content in the cache.
|
|
111
|
+
*
|
|
112
|
+
* If the cache is at max capacity, the oldest entry is evicted.
|
|
113
|
+
*
|
|
114
|
+
* @param filepath - Absolute path to the file
|
|
115
|
+
* @param content - Content to cache
|
|
116
|
+
*/
|
|
117
|
+
set(filepath, content) {
|
|
118
|
+
// Evict oldest entry if at max size
|
|
119
|
+
if (this.cache.size >= this.maxSize && !this.cache.has(filepath)) {
|
|
120
|
+
const oldest = this.findOldestEntry();
|
|
121
|
+
if (oldest) {
|
|
122
|
+
this.cache.delete(oldest);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// Get file mtime
|
|
126
|
+
let mtimeMs = Date.now();
|
|
127
|
+
try {
|
|
128
|
+
const stats = fs.statSync(filepath);
|
|
129
|
+
mtimeMs = stats.mtimeMs;
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
// Use current time if file doesn't exist
|
|
133
|
+
}
|
|
134
|
+
this.cache.set(filepath, {
|
|
135
|
+
content,
|
|
136
|
+
loadedAt: Date.now(),
|
|
137
|
+
mtimeMs,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Find the oldest cache entry by loadedAt timestamp.
|
|
142
|
+
*
|
|
143
|
+
* @returns Filepath of the oldest entry, or undefined if cache is empty
|
|
144
|
+
*/
|
|
145
|
+
findOldestEntry() {
|
|
146
|
+
let oldestPath;
|
|
147
|
+
let oldestTime = Number.POSITIVE_INFINITY;
|
|
148
|
+
for (const [filepath, entry] of this.cache.entries()) {
|
|
149
|
+
if (entry.loadedAt < oldestTime) {
|
|
150
|
+
oldestTime = entry.loadedAt;
|
|
151
|
+
oldestPath = filepath;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return oldestPath;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Schema for prompt configuration loaded from YAML files.
|
|
4
|
+
*
|
|
5
|
+
* Either 'prompt' (single template) or 'prompts' (named templates) is required.
|
|
6
|
+
*
|
|
7
|
+
* Handles mapping from YAML snake_case (excluded_tools) to TypeScript camelCase (excludedTools).
|
|
8
|
+
*/
|
|
9
|
+
export declare const PromptConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
10
|
+
description: z.ZodOptional<z.ZodString>;
|
|
11
|
+
excludedTools: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
12
|
+
prompt: z.ZodOptional<z.ZodString>;
|
|
13
|
+
prompts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
14
|
+
}, "strict", z.ZodTypeAny, {
|
|
15
|
+
prompt?: string | undefined;
|
|
16
|
+
description?: string | undefined;
|
|
17
|
+
excludedTools?: string[] | undefined;
|
|
18
|
+
prompts?: Record<string, string> | undefined;
|
|
19
|
+
}, {
|
|
20
|
+
prompt?: string | undefined;
|
|
21
|
+
description?: string | undefined;
|
|
22
|
+
excludedTools?: string[] | undefined;
|
|
23
|
+
prompts?: Record<string, string> | undefined;
|
|
24
|
+
}>, {
|
|
25
|
+
prompt?: string | undefined;
|
|
26
|
+
description?: string | undefined;
|
|
27
|
+
excludedTools?: string[] | undefined;
|
|
28
|
+
prompts?: Record<string, string> | undefined;
|
|
29
|
+
}, {
|
|
30
|
+
prompt?: string | undefined;
|
|
31
|
+
description?: string | undefined;
|
|
32
|
+
excludedTools?: string[] | undefined;
|
|
33
|
+
prompts?: Record<string, string> | undefined;
|
|
34
|
+
}>, {
|
|
35
|
+
prompt?: string | undefined;
|
|
36
|
+
description?: string | undefined;
|
|
37
|
+
excludedTools?: string[] | undefined;
|
|
38
|
+
prompts?: Record<string, string> | undefined;
|
|
39
|
+
}, unknown>;
|
|
40
|
+
/**
|
|
41
|
+
* Validated prompt configuration type.
|
|
42
|
+
*/
|
|
43
|
+
export type ValidatedPromptConfig = z.infer<typeof PromptConfigSchema>;
|
|
44
|
+
/**
|
|
45
|
+
* Schema for conversation metadata.
|
|
46
|
+
*/
|
|
47
|
+
export declare const ConversationMetadataSchema: z.ZodObject<{
|
|
48
|
+
conversationId: z.ZodOptional<z.ZodString>;
|
|
49
|
+
title: z.ZodOptional<z.ZodString>;
|
|
50
|
+
}, "strict", z.ZodTypeAny, {
|
|
51
|
+
title?: string | undefined;
|
|
52
|
+
conversationId?: string | undefined;
|
|
53
|
+
}, {
|
|
54
|
+
title?: string | undefined;
|
|
55
|
+
conversationId?: string | undefined;
|
|
56
|
+
}>;
|
|
57
|
+
/**
|
|
58
|
+
* Schema for build context passed to system prompt builder.
|
|
59
|
+
*
|
|
60
|
+
* Contains runtime information needed to construct the system prompt.
|
|
61
|
+
*/
|
|
62
|
+
export declare const BuildContextSchema: z.ZodObject<{
|
|
63
|
+
availableMarkers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
64
|
+
availableTools: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
65
|
+
commandType: z.ZodOptional<z.ZodEnum<["curate", "query"]>>;
|
|
66
|
+
conversationMetadata: z.ZodOptional<z.ZodObject<{
|
|
67
|
+
conversationId: z.ZodOptional<z.ZodString>;
|
|
68
|
+
title: z.ZodOptional<z.ZodString>;
|
|
69
|
+
}, "strict", z.ZodTypeAny, {
|
|
70
|
+
title?: string | undefined;
|
|
71
|
+
conversationId?: string | undefined;
|
|
72
|
+
}, {
|
|
73
|
+
title?: string | undefined;
|
|
74
|
+
conversationId?: string | undefined;
|
|
75
|
+
}>>;
|
|
76
|
+
environmentContext: z.ZodOptional<z.ZodAny>;
|
|
77
|
+
fileReferenceInstructions: z.ZodOptional<z.ZodString>;
|
|
78
|
+
memoryManager: z.ZodOptional<z.ZodAny>;
|
|
79
|
+
}, "strict", z.ZodTypeAny, {
|
|
80
|
+
availableMarkers?: Record<string, string> | undefined;
|
|
81
|
+
availableTools?: string[] | undefined;
|
|
82
|
+
commandType?: "curate" | "query" | undefined;
|
|
83
|
+
conversationMetadata?: {
|
|
84
|
+
title?: string | undefined;
|
|
85
|
+
conversationId?: string | undefined;
|
|
86
|
+
} | undefined;
|
|
87
|
+
environmentContext?: any;
|
|
88
|
+
fileReferenceInstructions?: string | undefined;
|
|
89
|
+
memoryManager?: any;
|
|
90
|
+
}, {
|
|
91
|
+
availableMarkers?: Record<string, string> | undefined;
|
|
92
|
+
availableTools?: string[] | undefined;
|
|
93
|
+
commandType?: "curate" | "query" | undefined;
|
|
94
|
+
conversationMetadata?: {
|
|
95
|
+
title?: string | undefined;
|
|
96
|
+
conversationId?: string | undefined;
|
|
97
|
+
} | undefined;
|
|
98
|
+
environmentContext?: any;
|
|
99
|
+
fileReferenceInstructions?: string | undefined;
|
|
100
|
+
memoryManager?: any;
|
|
101
|
+
}>;
|
|
102
|
+
/**
|
|
103
|
+
* Validated build context type.
|
|
104
|
+
*/
|
|
105
|
+
export type ValidatedBuildContext = z.infer<typeof BuildContextSchema>;
|
|
106
|
+
/**
|
|
107
|
+
* Schema for environment context builder options.
|
|
108
|
+
*/
|
|
109
|
+
export declare const EnvironmentContextOptionsSchema: z.ZodObject<{
|
|
110
|
+
includeBrvStructure: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
111
|
+
includeFileTree: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
112
|
+
maxFileTreeDepth: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
113
|
+
maxFileTreeEntries: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
114
|
+
workingDirectory: z.ZodString;
|
|
115
|
+
}, "strict", z.ZodTypeAny, {
|
|
116
|
+
workingDirectory: string;
|
|
117
|
+
includeBrvStructure: boolean;
|
|
118
|
+
includeFileTree: boolean;
|
|
119
|
+
maxFileTreeDepth: number;
|
|
120
|
+
maxFileTreeEntries: number;
|
|
121
|
+
}, {
|
|
122
|
+
workingDirectory: string;
|
|
123
|
+
includeBrvStructure?: boolean | undefined;
|
|
124
|
+
includeFileTree?: boolean | undefined;
|
|
125
|
+
maxFileTreeDepth?: number | undefined;
|
|
126
|
+
maxFileTreeEntries?: number | undefined;
|
|
127
|
+
}>;
|
|
128
|
+
/**
|
|
129
|
+
* Validated environment context options type.
|
|
130
|
+
*/
|
|
131
|
+
export type ValidatedEnvironmentContextOptions = z.infer<typeof EnvironmentContextOptionsSchema>;
|
|
132
|
+
/**
|
|
133
|
+
* Schema for reflection prompt context.
|
|
134
|
+
*/
|
|
135
|
+
export declare const ReflectionContextSchema: z.ZodObject<{
|
|
136
|
+
currentIteration: z.ZodOptional<z.ZodNumber>;
|
|
137
|
+
maxIterations: z.ZodOptional<z.ZodNumber>;
|
|
138
|
+
type: z.ZodEnum<["completion_check", "final_iteration", "mid_point_check", "near_max_iterations"]>;
|
|
139
|
+
}, "strict", z.ZodTypeAny, {
|
|
140
|
+
type: "completion_check" | "final_iteration" | "mid_point_check" | "near_max_iterations";
|
|
141
|
+
maxIterations?: number | undefined;
|
|
142
|
+
currentIteration?: number | undefined;
|
|
143
|
+
}, {
|
|
144
|
+
type: "completion_check" | "final_iteration" | "mid_point_check" | "near_max_iterations";
|
|
145
|
+
maxIterations?: number | undefined;
|
|
146
|
+
currentIteration?: number | undefined;
|
|
147
|
+
}>;
|
|
148
|
+
/**
|
|
149
|
+
* Validated reflection context type.
|
|
150
|
+
*/
|
|
151
|
+
export type ValidatedReflectionContext = z.infer<typeof ReflectionContextSchema>;
|