byterover-cli 0.4.1 → 1.0.1
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/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/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 +8 -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 +71 -262
- package/dist/infra/usecase/init-use-case.js +3 -2
- package/dist/infra/usecase/query-use-case.d.ts +18 -45
- package/dist/infra/usecase/query-use-case.js +250 -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} +3 -3
- 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,244 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Model Registry - Single Source of Truth for Model Metadata.
|
|
3
|
+
*
|
|
4
|
+
* This registry provides centralized model information including:
|
|
5
|
+
* - Context window sizes (maxInputTokens)
|
|
6
|
+
* - Character-per-token ratios for estimation
|
|
7
|
+
* - Supported file types for multimodal input
|
|
8
|
+
* - Model capabilities
|
|
9
|
+
*
|
|
10
|
+
* Following patterns from Dexto's LLM registry.
|
|
11
|
+
*/
|
|
12
|
+
import { LLM_PROVIDERS, } from './types.js';
|
|
13
|
+
/** Default fallback for unknown models */
|
|
14
|
+
export const DEFAULT_MAX_INPUT_TOKENS = 128_000;
|
|
15
|
+
export const DEFAULT_CHARS_PER_TOKEN = 4;
|
|
16
|
+
/**
|
|
17
|
+
* LLM Model Registry
|
|
18
|
+
*
|
|
19
|
+
* IMPORTANT: supportedFileTypes is the SINGLE SOURCE OF TRUTH for file upload capabilities:
|
|
20
|
+
* - Empty array [] = Model does NOT support file uploads
|
|
21
|
+
* - Specific types ['image', 'pdf'] = Model supports ONLY those file types
|
|
22
|
+
*/
|
|
23
|
+
export const LLM_REGISTRY = {
|
|
24
|
+
claude: {
|
|
25
|
+
defaultModel: '',
|
|
26
|
+
models: [],
|
|
27
|
+
supportedFileTypes: [],
|
|
28
|
+
},
|
|
29
|
+
gemini: {
|
|
30
|
+
defaultModel: 'gemini-2.5-flash',
|
|
31
|
+
models: [
|
|
32
|
+
// Gemini 2.5 series
|
|
33
|
+
{
|
|
34
|
+
capabilities: {
|
|
35
|
+
supportsAudio: true,
|
|
36
|
+
supportsImages: true,
|
|
37
|
+
supportsPdf: true,
|
|
38
|
+
supportsStreaming: true,
|
|
39
|
+
supportsThinking: true,
|
|
40
|
+
},
|
|
41
|
+
charsPerToken: 4,
|
|
42
|
+
default: true,
|
|
43
|
+
displayName: 'Gemini 2.5 Flash',
|
|
44
|
+
maxInputTokens: 1_000_000,
|
|
45
|
+
maxOutputTokens: 8192,
|
|
46
|
+
name: 'gemini-2.5-flash',
|
|
47
|
+
pricing: { inputPerM: 0.075, outputPerM: 0.3 },
|
|
48
|
+
supportedFileTypes: ['image', 'pdf', 'audio'],
|
|
49
|
+
},
|
|
50
|
+
// Gemini 1.5 series
|
|
51
|
+
{
|
|
52
|
+
capabilities: {
|
|
53
|
+
supportsAudio: true,
|
|
54
|
+
supportsImages: true,
|
|
55
|
+
supportsPdf: true,
|
|
56
|
+
supportsStreaming: true,
|
|
57
|
+
supportsThinking: false,
|
|
58
|
+
},
|
|
59
|
+
charsPerToken: 4,
|
|
60
|
+
displayName: 'Gemini 1.5 Pro',
|
|
61
|
+
maxInputTokens: 2_000_000,
|
|
62
|
+
maxOutputTokens: 8192,
|
|
63
|
+
name: 'gemini-1.5-pro',
|
|
64
|
+
pricing: { inputPerM: 1.25, outputPerM: 5 },
|
|
65
|
+
supportedFileTypes: ['image', 'pdf', 'audio'],
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
supportedFileTypes: ['image', 'pdf', 'audio'],
|
|
69
|
+
},
|
|
70
|
+
openrouter: {
|
|
71
|
+
defaultModel: '',
|
|
72
|
+
models: [],
|
|
73
|
+
supportedFileTypes: [],
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
// ============================================================================
|
|
77
|
+
// Registry Helper Functions
|
|
78
|
+
// ============================================================================
|
|
79
|
+
/**
|
|
80
|
+
* Get model information from the registry.
|
|
81
|
+
* @param provider - LLM provider
|
|
82
|
+
* @param model - Model name
|
|
83
|
+
* @returns ModelInfo or undefined if not found
|
|
84
|
+
*/
|
|
85
|
+
export function getModelInfo(provider, model) {
|
|
86
|
+
const providerInfo = LLM_REGISTRY[provider];
|
|
87
|
+
if (!providerInfo)
|
|
88
|
+
return undefined;
|
|
89
|
+
return providerInfo.models.find((m) => m.name === model);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get model info with fallback for unknown models.
|
|
93
|
+
* @param provider - LLM provider
|
|
94
|
+
* @param model - Model name
|
|
95
|
+
* @returns ModelInfo (falls back to default values for unknown models)
|
|
96
|
+
*/
|
|
97
|
+
export function getModelInfoWithFallback(provider, model) {
|
|
98
|
+
const info = getModelInfo(provider, model);
|
|
99
|
+
if (info)
|
|
100
|
+
return info;
|
|
101
|
+
// Fallback for unknown models
|
|
102
|
+
const providerInfo = LLM_REGISTRY[provider];
|
|
103
|
+
return {
|
|
104
|
+
capabilities: {
|
|
105
|
+
supportsAudio: false,
|
|
106
|
+
supportsImages: provider !== 'openrouter', // Assume basic image support
|
|
107
|
+
supportsPdf: provider === 'claude' || provider === 'gemini',
|
|
108
|
+
supportsStreaming: true,
|
|
109
|
+
},
|
|
110
|
+
charsPerToken: DEFAULT_CHARS_PER_TOKEN,
|
|
111
|
+
displayName: model,
|
|
112
|
+
maxInputTokens: DEFAULT_MAX_INPUT_TOKENS,
|
|
113
|
+
name: model,
|
|
114
|
+
supportedFileTypes: providerInfo?.supportedFileTypes ?? [],
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get characters per token ratio for a model.
|
|
119
|
+
* @param provider - LLM provider
|
|
120
|
+
* @param model - Model name
|
|
121
|
+
* @returns Characters per token ratio
|
|
122
|
+
*/
|
|
123
|
+
export function getCharsPerToken(provider, model) {
|
|
124
|
+
const info = getModelInfo(provider, model);
|
|
125
|
+
return info?.charsPerToken ?? DEFAULT_CHARS_PER_TOKEN;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Get maximum input tokens for a model.
|
|
129
|
+
* @param provider - LLM provider
|
|
130
|
+
* @param model - Model name
|
|
131
|
+
* @returns Maximum input tokens
|
|
132
|
+
*/
|
|
133
|
+
export function getMaxInputTokensForModel(provider, model) {
|
|
134
|
+
const info = getModelInfo(provider, model);
|
|
135
|
+
return info?.maxInputTokens ?? DEFAULT_MAX_INPUT_TOKENS;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Check if a model is valid for a provider.
|
|
139
|
+
* @param provider - LLM provider
|
|
140
|
+
* @param model - Model name
|
|
141
|
+
* @returns true if the model is in the registry
|
|
142
|
+
*/
|
|
143
|
+
export function isValidProviderModel(provider, model) {
|
|
144
|
+
return getModelInfo(provider, model) !== undefined;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get supported models for a provider.
|
|
148
|
+
* @param provider - LLM provider
|
|
149
|
+
* @returns Array of model names
|
|
150
|
+
*/
|
|
151
|
+
export function getSupportedModels(provider) {
|
|
152
|
+
const providerInfo = LLM_REGISTRY[provider];
|
|
153
|
+
if (!providerInfo)
|
|
154
|
+
return [];
|
|
155
|
+
return providerInfo.models.map((m) => m.name);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Get the default model for a provider.
|
|
159
|
+
* @param provider - LLM provider
|
|
160
|
+
* @returns Default model name
|
|
161
|
+
*/
|
|
162
|
+
export function getDefaultModelForProvider(provider) {
|
|
163
|
+
const providerInfo = LLM_REGISTRY[provider];
|
|
164
|
+
return providerInfo?.defaultModel ?? '';
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Infer provider from model name.
|
|
168
|
+
* @param model - Model name
|
|
169
|
+
* @returns LLMProvider or undefined if not found
|
|
170
|
+
*/
|
|
171
|
+
export function getProviderFromModel(model) {
|
|
172
|
+
// Check each provider's models
|
|
173
|
+
for (const provider of LLM_PROVIDERS) {
|
|
174
|
+
if (getModelInfo(provider, model)) {
|
|
175
|
+
return provider;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Fallback: infer from model name prefix
|
|
179
|
+
const lowerModel = model.toLowerCase();
|
|
180
|
+
if (lowerModel.startsWith('claude'))
|
|
181
|
+
return 'claude';
|
|
182
|
+
if (lowerModel.startsWith('gemini'))
|
|
183
|
+
return 'gemini';
|
|
184
|
+
if (lowerModel.includes('/'))
|
|
185
|
+
return 'openrouter'; // OpenRouter uses provider/model format
|
|
186
|
+
return undefined;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Get supported file types for a model.
|
|
190
|
+
* @param provider - LLM provider
|
|
191
|
+
* @param model - Model name
|
|
192
|
+
* @returns Array of supported file types
|
|
193
|
+
*/
|
|
194
|
+
export function getSupportedFileTypesForModel(provider, model) {
|
|
195
|
+
const info = getModelInfo(provider, model);
|
|
196
|
+
if (info)
|
|
197
|
+
return info.supportedFileTypes;
|
|
198
|
+
// Fallback to provider-level defaults
|
|
199
|
+
const providerInfo = LLM_REGISTRY[provider];
|
|
200
|
+
return providerInfo?.supportedFileTypes ?? [];
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Check if a model supports a specific file type.
|
|
204
|
+
* @param provider - LLM provider
|
|
205
|
+
* @param model - Model name
|
|
206
|
+
* @param fileType - File type to check
|
|
207
|
+
* @returns true if the model supports the file type
|
|
208
|
+
*/
|
|
209
|
+
export function modelSupportsFileType(provider, model, fileType) {
|
|
210
|
+
const supportedTypes = getSupportedFileTypesForModel(provider, model);
|
|
211
|
+
return supportedTypes.includes(fileType);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Get model capabilities.
|
|
215
|
+
* @param provider - LLM provider
|
|
216
|
+
* @param model - Model name
|
|
217
|
+
* @returns ModelCapabilities
|
|
218
|
+
*/
|
|
219
|
+
export function getModelCapabilities(provider, model) {
|
|
220
|
+
const info = getModelInfoWithFallback(provider, model);
|
|
221
|
+
return info.capabilities;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Get effective max input tokens considering config override.
|
|
225
|
+
* @param provider - LLM provider
|
|
226
|
+
* @param model - Model name
|
|
227
|
+
* @param configuredMax - Optional configured max from user
|
|
228
|
+
* @returns Effective max input tokens (min of model limit and configured limit)
|
|
229
|
+
*/
|
|
230
|
+
export function getEffectiveMaxInputTokens(provider, model, configuredMax) {
|
|
231
|
+
const modelMax = getMaxInputTokensForModel(provider, model);
|
|
232
|
+
if (configuredMax === undefined)
|
|
233
|
+
return modelMax;
|
|
234
|
+
return Math.min(modelMax, configuredMax);
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Check if OpenRouter accepts any model (custom models).
|
|
238
|
+
* OpenRouter can route to many models not in our registry.
|
|
239
|
+
* @param provider - LLM provider
|
|
240
|
+
* @returns true if provider accepts arbitrary models
|
|
241
|
+
*/
|
|
242
|
+
export function acceptsAnyModel(provider) {
|
|
243
|
+
return provider === 'openrouter';
|
|
244
|
+
}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Configuration Schemas
|
|
3
|
+
*
|
|
4
|
+
* Zod schemas for validating LLM configuration with cross-field validation.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
/**
|
|
8
|
+
* Base LLM config object schema (before validation/branding).
|
|
9
|
+
*/
|
|
10
|
+
export declare const LLMConfigBaseSchema: z.ZodObject<{
|
|
11
|
+
maxInputTokens: z.ZodOptional<z.ZodNumber>;
|
|
12
|
+
maxIterations: z.ZodDefault<z.ZodNumber>;
|
|
13
|
+
maxOutputTokens: z.ZodOptional<z.ZodNumber>;
|
|
14
|
+
model: z.ZodString;
|
|
15
|
+
provider: z.ZodEnum<["claude", "gemini", "openrouter"]>;
|
|
16
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
17
|
+
timeout: z.ZodOptional<z.ZodNumber>;
|
|
18
|
+
}, "strict", z.ZodTypeAny, {
|
|
19
|
+
maxIterations: number;
|
|
20
|
+
model: string;
|
|
21
|
+
provider: "claude" | "gemini" | "openrouter";
|
|
22
|
+
timeout?: number | undefined;
|
|
23
|
+
temperature?: number | undefined;
|
|
24
|
+
maxInputTokens?: number | undefined;
|
|
25
|
+
maxOutputTokens?: number | undefined;
|
|
26
|
+
}, {
|
|
27
|
+
model: string;
|
|
28
|
+
provider: "claude" | "gemini" | "openrouter";
|
|
29
|
+
timeout?: number | undefined;
|
|
30
|
+
maxIterations?: number | undefined;
|
|
31
|
+
temperature?: number | undefined;
|
|
32
|
+
maxInputTokens?: number | undefined;
|
|
33
|
+
maxOutputTokens?: number | undefined;
|
|
34
|
+
}>;
|
|
35
|
+
/**
|
|
36
|
+
* Full LLM config schema with cross-field validation.
|
|
37
|
+
*/
|
|
38
|
+
export declare const LLMConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
39
|
+
maxInputTokens: z.ZodOptional<z.ZodNumber>;
|
|
40
|
+
maxIterations: z.ZodDefault<z.ZodNumber>;
|
|
41
|
+
maxOutputTokens: z.ZodOptional<z.ZodNumber>;
|
|
42
|
+
model: z.ZodString;
|
|
43
|
+
provider: z.ZodEnum<["claude", "gemini", "openrouter"]>;
|
|
44
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
45
|
+
timeout: z.ZodOptional<z.ZodNumber>;
|
|
46
|
+
}, "strict", z.ZodTypeAny, {
|
|
47
|
+
maxIterations: number;
|
|
48
|
+
model: string;
|
|
49
|
+
provider: "claude" | "gemini" | "openrouter";
|
|
50
|
+
timeout?: number | undefined;
|
|
51
|
+
temperature?: number | undefined;
|
|
52
|
+
maxInputTokens?: number | undefined;
|
|
53
|
+
maxOutputTokens?: number | undefined;
|
|
54
|
+
}, {
|
|
55
|
+
model: string;
|
|
56
|
+
provider: "claude" | "gemini" | "openrouter";
|
|
57
|
+
timeout?: number | undefined;
|
|
58
|
+
maxIterations?: number | undefined;
|
|
59
|
+
temperature?: number | undefined;
|
|
60
|
+
maxInputTokens?: number | undefined;
|
|
61
|
+
maxOutputTokens?: number | undefined;
|
|
62
|
+
}>, {
|
|
63
|
+
maxIterations: number;
|
|
64
|
+
model: string;
|
|
65
|
+
provider: "claude" | "gemini" | "openrouter";
|
|
66
|
+
timeout?: number | undefined;
|
|
67
|
+
temperature?: number | undefined;
|
|
68
|
+
maxInputTokens?: number | undefined;
|
|
69
|
+
maxOutputTokens?: number | undefined;
|
|
70
|
+
}, {
|
|
71
|
+
model: string;
|
|
72
|
+
provider: "claude" | "gemini" | "openrouter";
|
|
73
|
+
timeout?: number | undefined;
|
|
74
|
+
maxIterations?: number | undefined;
|
|
75
|
+
temperature?: number | undefined;
|
|
76
|
+
maxInputTokens?: number | undefined;
|
|
77
|
+
maxOutputTokens?: number | undefined;
|
|
78
|
+
}>;
|
|
79
|
+
/**
|
|
80
|
+
* Input type for LLM config (what users provide).
|
|
81
|
+
*/
|
|
82
|
+
export type LLMConfig = z.input<typeof LLMConfigSchema>;
|
|
83
|
+
/**
|
|
84
|
+
* Output type for validated LLM config (after defaults applied).
|
|
85
|
+
*/
|
|
86
|
+
export type ValidatedLLMConfig = z.output<typeof LLMConfigSchema>;
|
|
87
|
+
/**
|
|
88
|
+
* PATCH-like schema for LLM config updates (e.g., model switching).
|
|
89
|
+
* All fields are optional, but at least model or provider must be specified.
|
|
90
|
+
*/
|
|
91
|
+
export declare const LLMUpdatesSchema: z.ZodEffects<z.ZodObject<{
|
|
92
|
+
maxInputTokens: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
|
|
93
|
+
maxIterations: z.ZodOptional<z.ZodNumber>;
|
|
94
|
+
maxOutputTokens: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
|
|
95
|
+
model: z.ZodOptional<z.ZodString>;
|
|
96
|
+
provider: z.ZodOptional<z.ZodEnum<["claude", "gemini", "openrouter"]>>;
|
|
97
|
+
temperature: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
|
|
98
|
+
timeout: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
|
|
99
|
+
}, "strip", z.ZodTypeAny, {
|
|
100
|
+
timeout?: number | undefined;
|
|
101
|
+
maxIterations?: number | undefined;
|
|
102
|
+
model?: string | undefined;
|
|
103
|
+
provider?: "claude" | "gemini" | "openrouter" | undefined;
|
|
104
|
+
temperature?: number | undefined;
|
|
105
|
+
maxInputTokens?: number | undefined;
|
|
106
|
+
maxOutputTokens?: number | undefined;
|
|
107
|
+
}, {
|
|
108
|
+
timeout?: number | undefined;
|
|
109
|
+
maxIterations?: number | undefined;
|
|
110
|
+
model?: string | undefined;
|
|
111
|
+
provider?: "claude" | "gemini" | "openrouter" | undefined;
|
|
112
|
+
temperature?: number | undefined;
|
|
113
|
+
maxInputTokens?: number | undefined;
|
|
114
|
+
maxOutputTokens?: number | undefined;
|
|
115
|
+
}>, {
|
|
116
|
+
timeout?: number | undefined;
|
|
117
|
+
maxIterations?: number | undefined;
|
|
118
|
+
model?: string | undefined;
|
|
119
|
+
provider?: "claude" | "gemini" | "openrouter" | undefined;
|
|
120
|
+
temperature?: number | undefined;
|
|
121
|
+
maxInputTokens?: number | undefined;
|
|
122
|
+
maxOutputTokens?: number | undefined;
|
|
123
|
+
}, {
|
|
124
|
+
timeout?: number | undefined;
|
|
125
|
+
maxIterations?: number | undefined;
|
|
126
|
+
model?: string | undefined;
|
|
127
|
+
provider?: "claude" | "gemini" | "openrouter" | undefined;
|
|
128
|
+
temperature?: number | undefined;
|
|
129
|
+
maxInputTokens?: number | undefined;
|
|
130
|
+
maxOutputTokens?: number | undefined;
|
|
131
|
+
}>;
|
|
132
|
+
/**
|
|
133
|
+
* Input type for LLM updates.
|
|
134
|
+
*/
|
|
135
|
+
export type LLMUpdates = z.input<typeof LLMUpdatesSchema>;
|
|
136
|
+
/**
|
|
137
|
+
* Validate LLM configuration and return validated result.
|
|
138
|
+
* @param config - Raw configuration input
|
|
139
|
+
* @returns Validated configuration with defaults applied
|
|
140
|
+
* @throws ZodError if validation fails
|
|
141
|
+
*/
|
|
142
|
+
export declare function validateLLMConfig(config: LLMConfig): ValidatedLLMConfig;
|
|
143
|
+
/**
|
|
144
|
+
* Safely validate LLM configuration without throwing.
|
|
145
|
+
* @param config - Raw configuration input
|
|
146
|
+
* @returns SafeParseResult with success flag and data or error
|
|
147
|
+
*/
|
|
148
|
+
export declare function safeParseLLMConfig(config: unknown): z.SafeParseReturnType<LLMConfig, ValidatedLLMConfig>;
|
|
149
|
+
/**
|
|
150
|
+
* Validate LLM updates (partial config for switching).
|
|
151
|
+
* @param updates - Partial configuration updates
|
|
152
|
+
* @returns Validated updates
|
|
153
|
+
* @throws ZodError if validation fails
|
|
154
|
+
*/
|
|
155
|
+
export declare function validateLLMUpdates(updates: LLMUpdates): LLMUpdates;
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Configuration Schemas
|
|
3
|
+
*
|
|
4
|
+
* Zod schemas for validating LLM configuration with cross-field validation.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { ErrorScope, ErrorType, LLMErrorCode } from './error-codes.js';
|
|
8
|
+
import { acceptsAnyModel, getMaxInputTokensForModel, getSupportedModels, isValidProviderModel } from './registry.js';
|
|
9
|
+
import { LLM_PROVIDERS } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Default-free field definitions for LLM configuration.
|
|
12
|
+
* Used to build both the full config schema (with defaults) and the updates schema (no defaults).
|
|
13
|
+
*/
|
|
14
|
+
const LLMConfigFields = {
|
|
15
|
+
maxInputTokens: z.coerce
|
|
16
|
+
.number()
|
|
17
|
+
.int()
|
|
18
|
+
.positive()
|
|
19
|
+
.optional()
|
|
20
|
+
.describe('Max input tokens for history; defaults to model limit'),
|
|
21
|
+
maxIterations: z.coerce
|
|
22
|
+
.number()
|
|
23
|
+
.int()
|
|
24
|
+
.positive()
|
|
25
|
+
.describe('Max iterations for agentic loops'),
|
|
26
|
+
maxOutputTokens: z.coerce
|
|
27
|
+
.number()
|
|
28
|
+
.int()
|
|
29
|
+
.positive()
|
|
30
|
+
.optional()
|
|
31
|
+
.describe('Max tokens for model output'),
|
|
32
|
+
model: z
|
|
33
|
+
.string()
|
|
34
|
+
.min(1, 'Model name is required')
|
|
35
|
+
.describe('Specific model name for the selected provider'),
|
|
36
|
+
provider: z
|
|
37
|
+
.enum(LLM_PROVIDERS)
|
|
38
|
+
.describe("LLM provider (e.g., 'claude', 'gemini', 'openrouter')"),
|
|
39
|
+
temperature: z.coerce
|
|
40
|
+
.number()
|
|
41
|
+
.min(0)
|
|
42
|
+
.max(2)
|
|
43
|
+
.optional()
|
|
44
|
+
.describe('Randomness: 0 deterministic, 2 creative'),
|
|
45
|
+
timeout: z.coerce
|
|
46
|
+
.number()
|
|
47
|
+
.int()
|
|
48
|
+
.positive()
|
|
49
|
+
.optional()
|
|
50
|
+
.describe('Request timeout in milliseconds'),
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Base LLM config object schema (before validation/branding).
|
|
54
|
+
*/
|
|
55
|
+
export const LLMConfigBaseSchema = z
|
|
56
|
+
.object({
|
|
57
|
+
maxInputTokens: LLMConfigFields.maxInputTokens,
|
|
58
|
+
maxIterations: z.coerce.number().int().positive().default(50),
|
|
59
|
+
maxOutputTokens: LLMConfigFields.maxOutputTokens,
|
|
60
|
+
model: LLMConfigFields.model,
|
|
61
|
+
provider: LLMConfigFields.provider,
|
|
62
|
+
temperature: LLMConfigFields.temperature,
|
|
63
|
+
timeout: LLMConfigFields.timeout,
|
|
64
|
+
})
|
|
65
|
+
.strict();
|
|
66
|
+
/**
|
|
67
|
+
* Full LLM config schema with cross-field validation.
|
|
68
|
+
*/
|
|
69
|
+
export const LLMConfigSchema = LLMConfigBaseSchema.superRefine((data, ctx) => {
|
|
70
|
+
const maxInputTokensIsSet = data.maxInputTokens !== null && data.maxInputTokens !== undefined;
|
|
71
|
+
// Validate model exists for provider (unless provider accepts any model)
|
|
72
|
+
if (!acceptsAnyModel(data.provider) && !isValidProviderModel(data.provider, data.model)) {
|
|
73
|
+
const supportedModelsList = getSupportedModels(data.provider);
|
|
74
|
+
ctx.addIssue({
|
|
75
|
+
code: z.ZodIssueCode.custom,
|
|
76
|
+
message: `Model '${data.model}' is not supported for provider '${data.provider}'. ` +
|
|
77
|
+
`Supported: ${supportedModelsList.slice(0, 5).join(', ')}${supportedModelsList.length > 5 ? '...' : ''}`,
|
|
78
|
+
params: {
|
|
79
|
+
code: LLMErrorCode.MODEL_INCOMPATIBLE,
|
|
80
|
+
scope: ErrorScope.LLM,
|
|
81
|
+
type: ErrorType.USER,
|
|
82
|
+
},
|
|
83
|
+
path: ['model'],
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
// Validate maxInputTokens doesn't exceed model limit
|
|
87
|
+
if (maxInputTokensIsSet && !acceptsAnyModel(data.provider)) {
|
|
88
|
+
try {
|
|
89
|
+
const modelMax = getMaxInputTokensForModel(data.provider, data.model);
|
|
90
|
+
if (data.maxInputTokens > modelMax) {
|
|
91
|
+
ctx.addIssue({
|
|
92
|
+
code: z.ZodIssueCode.custom,
|
|
93
|
+
message: `maxInputTokens (${data.maxInputTokens}) exceeds model limit (${modelMax}) ` +
|
|
94
|
+
`for '${data.model}'`,
|
|
95
|
+
params: {
|
|
96
|
+
code: LLMErrorCode.TOKENS_EXCEEDED,
|
|
97
|
+
scope: ErrorScope.LLM,
|
|
98
|
+
type: ErrorType.USER,
|
|
99
|
+
},
|
|
100
|
+
path: ['maxInputTokens'],
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// Model not found in registry - validation already handled above
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
/**
|
|
110
|
+
* PATCH-like schema for LLM config updates (e.g., model switching).
|
|
111
|
+
* All fields are optional, but at least model or provider must be specified.
|
|
112
|
+
*/
|
|
113
|
+
export const LLMUpdatesSchema = z
|
|
114
|
+
.object({ ...LLMConfigFields })
|
|
115
|
+
.partial()
|
|
116
|
+
.superRefine((data, ctx) => {
|
|
117
|
+
// Require at least one meaningful change field: model or provider
|
|
118
|
+
if (!data.model && !data.provider) {
|
|
119
|
+
ctx.addIssue({
|
|
120
|
+
code: z.ZodIssueCode.custom,
|
|
121
|
+
message: 'At least model or provider must be specified for LLM update',
|
|
122
|
+
path: [],
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
/**
|
|
127
|
+
* Validate LLM configuration and return validated result.
|
|
128
|
+
* @param config - Raw configuration input
|
|
129
|
+
* @returns Validated configuration with defaults applied
|
|
130
|
+
* @throws ZodError if validation fails
|
|
131
|
+
*/
|
|
132
|
+
export function validateLLMConfig(config) {
|
|
133
|
+
return LLMConfigSchema.parse(config);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Safely validate LLM configuration without throwing.
|
|
137
|
+
* @param config - Raw configuration input
|
|
138
|
+
* @returns SafeParseResult with success flag and data or error
|
|
139
|
+
*/
|
|
140
|
+
export function safeParseLLMConfig(config) {
|
|
141
|
+
return LLMConfigSchema.safeParse(config);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Validate LLM updates (partial config for switching).
|
|
145
|
+
* @param updates - Partial configuration updates
|
|
146
|
+
* @returns Validated updates
|
|
147
|
+
* @throws ZodError if validation fails
|
|
148
|
+
*/
|
|
149
|
+
export function validateLLMUpdates(updates) {
|
|
150
|
+
return LLMUpdatesSchema.parse(updates);
|
|
151
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Provider types and constants.
|
|
3
|
+
*
|
|
4
|
+
* This module defines the core types for LLM provider abstraction,
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Supported LLM providers as a const array for runtime validation.
|
|
8
|
+
*/
|
|
9
|
+
export declare const LLM_PROVIDERS: readonly ["claude", "gemini", "openrouter"];
|
|
10
|
+
/**
|
|
11
|
+
* Union type of all supported LLM providers.
|
|
12
|
+
*/
|
|
13
|
+
export type LLMProvider = (typeof LLM_PROVIDERS)[number];
|
|
14
|
+
/**
|
|
15
|
+
* Supported file types for multimodal input.
|
|
16
|
+
*/
|
|
17
|
+
export declare const SUPPORTED_FILE_TYPES: readonly ["audio", "image", "pdf"];
|
|
18
|
+
/**
|
|
19
|
+
* Union type of supported file types.
|
|
20
|
+
*/
|
|
21
|
+
export type SupportedFileType = (typeof SUPPORTED_FILE_TYPES)[number];
|
|
22
|
+
/**
|
|
23
|
+
* Model capabilities configuration.
|
|
24
|
+
* Defines what features a specific model supports.
|
|
25
|
+
*/
|
|
26
|
+
export interface ModelCapabilities {
|
|
27
|
+
/** Whether the model supports audio input */
|
|
28
|
+
supportsAudio: boolean;
|
|
29
|
+
/** Whether the model supports image input */
|
|
30
|
+
supportsImages: boolean;
|
|
31
|
+
/** Whether the model supports PDF input */
|
|
32
|
+
supportsPdf: boolean;
|
|
33
|
+
/** Whether the model supports streaming responses */
|
|
34
|
+
supportsStreaming: boolean;
|
|
35
|
+
/** Whether the model supports extended thinking (Gemini) */
|
|
36
|
+
supportsThinking?: boolean;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Model metadata information.
|
|
40
|
+
* Contains all relevant details about a specific model.
|
|
41
|
+
*/
|
|
42
|
+
export interface ModelInfo {
|
|
43
|
+
/** Model capabilities */
|
|
44
|
+
capabilities: ModelCapabilities;
|
|
45
|
+
/** Characters per token ratio for estimation (e.g., 3.5 for Claude) */
|
|
46
|
+
charsPerToken: number;
|
|
47
|
+
/** Whether this is the default model for the provider */
|
|
48
|
+
default?: boolean;
|
|
49
|
+
/** Human-readable display name */
|
|
50
|
+
displayName: string;
|
|
51
|
+
/** Maximum input tokens (context window size) */
|
|
52
|
+
maxInputTokens: number;
|
|
53
|
+
/** Default max output tokens */
|
|
54
|
+
maxOutputTokens?: number;
|
|
55
|
+
/** Model identifier (e.g., 'claude-sonnet-4-20250514') */
|
|
56
|
+
name: string;
|
|
57
|
+
/** Optional pricing info (USD per million tokens) */
|
|
58
|
+
pricing?: {
|
|
59
|
+
inputPerM: number;
|
|
60
|
+
outputPerM: number;
|
|
61
|
+
};
|
|
62
|
+
/** File types this model supports */
|
|
63
|
+
supportedFileTypes: SupportedFileType[];
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Provider configuration information.
|
|
67
|
+
* Contains metadata about a provider and its available models.
|
|
68
|
+
*/
|
|
69
|
+
export interface ProviderInfo {
|
|
70
|
+
/** Default model name for this provider */
|
|
71
|
+
defaultModel: string;
|
|
72
|
+
/** List of available models */
|
|
73
|
+
models: ModelInfo[];
|
|
74
|
+
/** Provider-level supported file types (fallback when model doesn't specify) */
|
|
75
|
+
supportedFileTypes: SupportedFileType[];
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Runtime LLM context information.
|
|
79
|
+
* Represents the current LLM configuration in use.
|
|
80
|
+
*/
|
|
81
|
+
export interface LLMContext {
|
|
82
|
+
/** Current model name */
|
|
83
|
+
model: string;
|
|
84
|
+
/** Current provider */
|
|
85
|
+
provider: LLMProvider;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Token usage statistics.
|
|
89
|
+
*/
|
|
90
|
+
export interface LLMTokenUsage {
|
|
91
|
+
/** Number of input tokens */
|
|
92
|
+
inputTokens: number;
|
|
93
|
+
/** Number of output tokens */
|
|
94
|
+
outputTokens: number;
|
|
95
|
+
/** Number of reasoning tokens (if applicable) */
|
|
96
|
+
reasoningTokens?: number;
|
|
97
|
+
/** Total tokens (input + output + reasoning) */
|
|
98
|
+
totalTokens: number;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* MIME type to file type mapping.
|
|
102
|
+
* Used to determine supported file types from MIME types.
|
|
103
|
+
*/
|
|
104
|
+
export declare const MIME_TYPE_TO_FILE_TYPE: Record<string, SupportedFileType>;
|
|
105
|
+
/**
|
|
106
|
+
* Get all allowed MIME types.
|
|
107
|
+
* @returns Array of allowed MIME type strings
|
|
108
|
+
*/
|
|
109
|
+
export declare function getAllowedMimeTypes(): string[];
|
|
110
|
+
/**
|
|
111
|
+
* Get file type from MIME type.
|
|
112
|
+
* @param mimeType - MIME type string
|
|
113
|
+
* @returns SupportedFileType or undefined if not supported
|
|
114
|
+
*/
|
|
115
|
+
export declare function getFileTypeFromMimeType(mimeType: string): SupportedFileType | undefined;
|
|
116
|
+
/**
|
|
117
|
+
* Check if a MIME type is supported.
|
|
118
|
+
* @param mimeType - MIME type string
|
|
119
|
+
* @returns true if the MIME type is supported
|
|
120
|
+
*/
|
|
121
|
+
export declare function isSupportedMimeType(mimeType: string): boolean;
|