byterover-cli 0.4.1 → 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/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,275 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified agent state manager combining DextoAgent config patterns with execution state tracking.
|
|
3
|
+
*
|
|
4
|
+
* Manages two concerns:
|
|
5
|
+
*
|
|
6
|
+
* 1. Configuration State (DextoAgent pattern):
|
|
7
|
+
* - baselineConfig: Original validated config, never mutated
|
|
8
|
+
* - runtimeConfig: Current active config, can be mutated
|
|
9
|
+
* - sessionOverrides: Per-session config overrides
|
|
10
|
+
*
|
|
11
|
+
* 2. Execution State (runtime tracking):
|
|
12
|
+
* - currentIteration: Turn counter
|
|
13
|
+
* - executionState: idle | executing | complete | error | aborted | tool_calling
|
|
14
|
+
* - terminationReason: Why execution ended
|
|
15
|
+
* - timing: startTime, endTime, durationMs
|
|
16
|
+
* - toolCallsExecuted: Tool call counter
|
|
17
|
+
* - executionHistory: Legacy history records
|
|
18
|
+
*/
|
|
19
|
+
export class AgentStateManager {
|
|
20
|
+
agentEventBus;
|
|
21
|
+
baselineConfig;
|
|
22
|
+
currentIteration = 0;
|
|
23
|
+
durationMs;
|
|
24
|
+
endTime;
|
|
25
|
+
executionHistory = [];
|
|
26
|
+
executionState = 'idle';
|
|
27
|
+
runtimeConfig;
|
|
28
|
+
sessionOverrides = new Map();
|
|
29
|
+
startTime;
|
|
30
|
+
terminationReason;
|
|
31
|
+
toolCallsExecuted = 0;
|
|
32
|
+
constructor(staticConfig, agentEventBus) {
|
|
33
|
+
this.agentEventBus = agentEventBus;
|
|
34
|
+
// Deep clone to prevent external mutations
|
|
35
|
+
this.baselineConfig = structuredClone(staticConfig);
|
|
36
|
+
this.runtimeConfig = structuredClone(staticConfig);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Add an execution record to history (legacy method).
|
|
40
|
+
* @param record - Execution record to add
|
|
41
|
+
*/
|
|
42
|
+
addExecutionRecord(record) {
|
|
43
|
+
this.executionHistory.push(record);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Clear session-specific overrides.
|
|
47
|
+
*/
|
|
48
|
+
clearSessionOverride(sessionId) {
|
|
49
|
+
const hadOverride = this.sessionOverrides.has(sessionId);
|
|
50
|
+
this.sessionOverrides.delete(sessionId);
|
|
51
|
+
if (hadOverride) {
|
|
52
|
+
this.agentEventBus.emit('cipher:stateReset', { sessionId });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Mark execution as complete with reason.
|
|
57
|
+
* @param reason - Why execution terminated
|
|
58
|
+
*/
|
|
59
|
+
complete(reason) {
|
|
60
|
+
this.executionState = 'complete';
|
|
61
|
+
this.terminationReason = reason;
|
|
62
|
+
this.endTime = new Date();
|
|
63
|
+
if (this.startTime) {
|
|
64
|
+
this.durationMs = this.endTime.getTime() - this.startTime.getTime();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Export current runtime state as a config object.
|
|
69
|
+
*/
|
|
70
|
+
exportAsConfig() {
|
|
71
|
+
return structuredClone(this.runtimeConfig);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Mark execution as errored.
|
|
75
|
+
* @param reason - Error termination reason
|
|
76
|
+
*/
|
|
77
|
+
fail(reason) {
|
|
78
|
+
this.executionState = 'error';
|
|
79
|
+
this.terminationReason = reason;
|
|
80
|
+
this.endTime = new Date();
|
|
81
|
+
if (this.startTime) {
|
|
82
|
+
this.durationMs = this.endTime.getTime() - this.startTime.getTime();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get the original baseline configuration.
|
|
87
|
+
*/
|
|
88
|
+
getBaselineConfig() {
|
|
89
|
+
return structuredClone(this.baselineConfig);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get the current execution state.
|
|
93
|
+
* @returns Current agent state with all execution fields
|
|
94
|
+
*/
|
|
95
|
+
getExecutionState() {
|
|
96
|
+
return {
|
|
97
|
+
currentIteration: this.currentIteration,
|
|
98
|
+
durationMs: this.durationMs,
|
|
99
|
+
endTime: this.endTime,
|
|
100
|
+
executionHistory: [...this.executionHistory],
|
|
101
|
+
executionState: this.executionState,
|
|
102
|
+
startTime: this.startTime,
|
|
103
|
+
terminationReason: this.terminationReason,
|
|
104
|
+
toolCallsExecuted: this.toolCallsExecuted,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get effective LLM config for a session.
|
|
109
|
+
*/
|
|
110
|
+
getLLMConfig(sessionId) {
|
|
111
|
+
return this.getRuntimeConfig(sessionId).llm;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get the current model identifier.
|
|
115
|
+
*/
|
|
116
|
+
getModel(sessionId) {
|
|
117
|
+
return this.getRuntimeConfig(sessionId).model;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Get runtime configuration for a session (includes session overrides if sessionId provided).
|
|
121
|
+
*/
|
|
122
|
+
getRuntimeConfig(sessionId) {
|
|
123
|
+
if (!sessionId) {
|
|
124
|
+
return structuredClone(this.runtimeConfig);
|
|
125
|
+
}
|
|
126
|
+
const override = this.sessionOverrides.get(sessionId);
|
|
127
|
+
if (!override) {
|
|
128
|
+
return structuredClone(this.runtimeConfig);
|
|
129
|
+
}
|
|
130
|
+
// Merge session overrides into runtime config
|
|
131
|
+
return {
|
|
132
|
+
...this.runtimeConfig,
|
|
133
|
+
llm: { ...this.runtimeConfig.llm, ...override.llm },
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get all session IDs that have overrides.
|
|
138
|
+
*/
|
|
139
|
+
getSessionsWithOverrides() {
|
|
140
|
+
return [...this.sessionOverrides.keys()];
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Check if a session has overrides.
|
|
144
|
+
*/
|
|
145
|
+
hasSessionOverride(sessionId) {
|
|
146
|
+
return this.sessionOverrides.has(sessionId);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Increment the iteration counter.
|
|
150
|
+
* @returns The new iteration count
|
|
151
|
+
*/
|
|
152
|
+
incrementIteration() {
|
|
153
|
+
this.currentIteration++;
|
|
154
|
+
return this.currentIteration;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Increment the tool calls counter.
|
|
158
|
+
* @returns The new tool calls count
|
|
159
|
+
*/
|
|
160
|
+
incrementToolCalls() {
|
|
161
|
+
this.toolCallsExecuted++;
|
|
162
|
+
return this.toolCallsExecuted;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Reset all state to initial values.
|
|
166
|
+
* Resets both execution state and configuration state.
|
|
167
|
+
*/
|
|
168
|
+
reset() {
|
|
169
|
+
// Reset execution state
|
|
170
|
+
this.currentIteration = 0;
|
|
171
|
+
this.durationMs = undefined;
|
|
172
|
+
this.endTime = undefined;
|
|
173
|
+
this.executionHistory = [];
|
|
174
|
+
this.executionState = 'idle';
|
|
175
|
+
this.startTime = undefined;
|
|
176
|
+
this.terminationReason = undefined;
|
|
177
|
+
this.toolCallsExecuted = 0;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Reset runtime configuration to baseline.
|
|
181
|
+
* Also clears all session overrides.
|
|
182
|
+
*/
|
|
183
|
+
resetToBaseline() {
|
|
184
|
+
this.runtimeConfig = structuredClone(this.baselineConfig);
|
|
185
|
+
this.sessionOverrides.clear();
|
|
186
|
+
this.agentEventBus.emit('cipher:stateReset', {});
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Set the current execution state.
|
|
190
|
+
* @param state - New execution state
|
|
191
|
+
*/
|
|
192
|
+
setExecutionState(state) {
|
|
193
|
+
this.executionState = state;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Start execution tracking.
|
|
197
|
+
* Sets startTime and transitions to executing state.
|
|
198
|
+
*/
|
|
199
|
+
startExecution() {
|
|
200
|
+
this.startTime = new Date();
|
|
201
|
+
this.executionState = 'executing';
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Update LLM configuration globally or for a specific session.
|
|
205
|
+
*
|
|
206
|
+
* @param updates - Partial LLM configuration updates
|
|
207
|
+
* @param sessionId - Optional session ID for session-specific override
|
|
208
|
+
*/
|
|
209
|
+
updateLLM(updates, sessionId) {
|
|
210
|
+
const oldValue = sessionId ? this.getRuntimeConfig(sessionId).llm : this.runtimeConfig.llm;
|
|
211
|
+
if (sessionId) {
|
|
212
|
+
// Session-specific override
|
|
213
|
+
this.setSessionOverride(sessionId, { llm: updates });
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
// Global update
|
|
217
|
+
this.runtimeConfig = {
|
|
218
|
+
...this.runtimeConfig,
|
|
219
|
+
llm: { ...this.runtimeConfig.llm, ...updates },
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
const newValue = sessionId ? this.getRuntimeConfig(sessionId).llm : this.runtimeConfig.llm;
|
|
223
|
+
this.agentEventBus.emit('cipher:stateChanged', {
|
|
224
|
+
field: 'llm',
|
|
225
|
+
newValue,
|
|
226
|
+
oldValue,
|
|
227
|
+
sessionId,
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Update the model globally or for a specific session.
|
|
232
|
+
*/
|
|
233
|
+
updateModel(model, sessionId) {
|
|
234
|
+
const oldValue = this.getModel(sessionId);
|
|
235
|
+
if (sessionId) {
|
|
236
|
+
// For session-specific model change, we need to track it differently
|
|
237
|
+
// since model is at the root level, not in llm config
|
|
238
|
+
// For now, emit state change event
|
|
239
|
+
this.agentEventBus.emit('cipher:stateChanged', {
|
|
240
|
+
field: 'model',
|
|
241
|
+
newValue: model,
|
|
242
|
+
oldValue,
|
|
243
|
+
sessionId,
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
this.runtimeConfig = {
|
|
248
|
+
...this.runtimeConfig,
|
|
249
|
+
model,
|
|
250
|
+
};
|
|
251
|
+
this.agentEventBus.emit('cipher:stateChanged', {
|
|
252
|
+
field: 'model',
|
|
253
|
+
newValue: model,
|
|
254
|
+
oldValue,
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Set a session-specific override.
|
|
260
|
+
*/
|
|
261
|
+
setSessionOverride(sessionId, override) {
|
|
262
|
+
const existing = this.sessionOverrides.get(sessionId) ?? {};
|
|
263
|
+
// Merge LLM overrides
|
|
264
|
+
const mergedOverride = {
|
|
265
|
+
...existing,
|
|
266
|
+
llm: { ...existing.llm, ...override.llm },
|
|
267
|
+
};
|
|
268
|
+
this.sessionOverrides.set(sessionId, mergedOverride);
|
|
269
|
+
this.agentEventBus.emit('cipher:stateChanged', {
|
|
270
|
+
field: 'sessionOverride',
|
|
271
|
+
newValue: structuredClone(mergedOverride),
|
|
272
|
+
sessionId,
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import type { CipherAgentServices } from '../../../core/interfaces/cipher/cipher-services.js';
|
|
2
|
+
import type { AgentEventBus } from '../events/event-emitter.js';
|
|
3
|
+
import { type LLMUpdates, type ValidatedAgentConfig, type ValidatedLLMConfig } from './agent-schemas.js';
|
|
4
|
+
import { AgentStateManager } from './agent-state-manager.js';
|
|
5
|
+
/**
|
|
6
|
+
* Abstract base agent class encapsulating DextoAgent patterns.
|
|
7
|
+
*
|
|
8
|
+
* Provides:
|
|
9
|
+
* - Two-phase initialization (constructor + start)
|
|
10
|
+
* - Lifecycle management (start, stop, restart)
|
|
11
|
+
* - State management with session overrides
|
|
12
|
+
* - Typed error handling
|
|
13
|
+
* - Configuration validation
|
|
14
|
+
*
|
|
15
|
+
* Subclasses must implement:
|
|
16
|
+
* - initializeServices(): Create agent-specific services
|
|
17
|
+
* - cleanupServices(): Cleanup on stop
|
|
18
|
+
*/
|
|
19
|
+
export declare abstract class BaseAgent {
|
|
20
|
+
protected _isStarted: boolean;
|
|
21
|
+
protected _isStopped: boolean;
|
|
22
|
+
readonly config: ValidatedAgentConfig;
|
|
23
|
+
protected services?: CipherAgentServices;
|
|
24
|
+
protected stateManager?: AgentStateManager;
|
|
25
|
+
/**
|
|
26
|
+
* Create a new agent instance.
|
|
27
|
+
* Does NOT initialize services - call start() for async initialization.
|
|
28
|
+
*
|
|
29
|
+
* @param config - Agent configuration (will be validated with Zod)
|
|
30
|
+
* @throws AgentError if configuration validation fails
|
|
31
|
+
*/
|
|
32
|
+
constructor(config: unknown);
|
|
33
|
+
/**
|
|
34
|
+
* Cleanup agent-specific services.
|
|
35
|
+
* Called during stop().
|
|
36
|
+
*/
|
|
37
|
+
protected abstract cleanupServices(): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Clear session-specific configuration overrides.
|
|
40
|
+
*/
|
|
41
|
+
clearSessionConfig(sessionId: string): void;
|
|
42
|
+
/**
|
|
43
|
+
* Ensure the agent is started before operations.
|
|
44
|
+
* @throws AgentError if not started or stopped
|
|
45
|
+
*/
|
|
46
|
+
protected ensureStarted(): void;
|
|
47
|
+
/**
|
|
48
|
+
* Get the agent event bus (for subscribing to events).
|
|
49
|
+
*/
|
|
50
|
+
getAgentEventBus(): AgentEventBus;
|
|
51
|
+
/**
|
|
52
|
+
* Get the baseline configuration (original config, never modified).
|
|
53
|
+
*/
|
|
54
|
+
getBaselineConfig(): Readonly<ValidatedAgentConfig>;
|
|
55
|
+
/**
|
|
56
|
+
* Get effective configuration for a session.
|
|
57
|
+
* Includes session-specific overrides if sessionId is provided.
|
|
58
|
+
*/
|
|
59
|
+
getEffectiveConfig(sessionId?: string): Readonly<ValidatedAgentConfig>;
|
|
60
|
+
/**
|
|
61
|
+
* Get current LLM configuration.
|
|
62
|
+
*/
|
|
63
|
+
getLLMConfig(sessionId?: string): Readonly<ValidatedLLMConfig>;
|
|
64
|
+
/**
|
|
65
|
+
* Get services (guaranteed to be defined after start).
|
|
66
|
+
*/
|
|
67
|
+
protected getServices(): CipherAgentServices;
|
|
68
|
+
/**
|
|
69
|
+
* Get the state manager (guaranteed to be defined after start).
|
|
70
|
+
*/
|
|
71
|
+
protected getStateManager(): AgentStateManager;
|
|
72
|
+
/**
|
|
73
|
+
* Initialize agent-specific services.
|
|
74
|
+
* Called during start().
|
|
75
|
+
*/
|
|
76
|
+
protected abstract initializeServices(): Promise<CipherAgentServices>;
|
|
77
|
+
/**
|
|
78
|
+
* Check if the agent is started.
|
|
79
|
+
*/
|
|
80
|
+
isStarted(): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Check if the agent is stopped.
|
|
83
|
+
*/
|
|
84
|
+
isStopped(): boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Reset configuration to baseline.
|
|
87
|
+
*/
|
|
88
|
+
resetConfig(): void;
|
|
89
|
+
/**
|
|
90
|
+
* Restart the agent (stop + start).
|
|
91
|
+
*/
|
|
92
|
+
restart(): Promise<void>;
|
|
93
|
+
/**
|
|
94
|
+
* Start the agent and initialize all services.
|
|
95
|
+
* Must be called before using other methods.
|
|
96
|
+
*
|
|
97
|
+
* @throws AgentError if already started or initialization fails
|
|
98
|
+
*/
|
|
99
|
+
start(): Promise<void>;
|
|
100
|
+
/**
|
|
101
|
+
* Stop the agent and cleanup all services.
|
|
102
|
+
* After stopping, the agent can be restarted with start().
|
|
103
|
+
*/
|
|
104
|
+
stop(): Promise<void>;
|
|
105
|
+
/**
|
|
106
|
+
* Update LLM configuration at runtime.
|
|
107
|
+
*
|
|
108
|
+
* @param updates - Partial LLM configuration updates
|
|
109
|
+
* @param sessionId - Optional session ID for session-specific override
|
|
110
|
+
* @returns Updated LLM configuration
|
|
111
|
+
*/
|
|
112
|
+
updateLLM(updates: LLMUpdates, sessionId?: string): ValidatedLLMConfig;
|
|
113
|
+
/**
|
|
114
|
+
* Validate that all required services are present.
|
|
115
|
+
* Can be overridden by subclasses to add custom validation.
|
|
116
|
+
*/
|
|
117
|
+
protected validateServices(services: CipherAgentServices): void;
|
|
118
|
+
}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { AgentError } from './agent-error.js';
|
|
2
|
+
import { AgentConfigSchema, LLMUpdatesSchema } from './agent-schemas.js';
|
|
3
|
+
import { AgentStateManager } from './agent-state-manager.js';
|
|
4
|
+
/**
|
|
5
|
+
* Abstract base agent class encapsulating DextoAgent patterns.
|
|
6
|
+
*
|
|
7
|
+
* Provides:
|
|
8
|
+
* - Two-phase initialization (constructor + start)
|
|
9
|
+
* - Lifecycle management (start, stop, restart)
|
|
10
|
+
* - State management with session overrides
|
|
11
|
+
* - Typed error handling
|
|
12
|
+
* - Configuration validation
|
|
13
|
+
*
|
|
14
|
+
* Subclasses must implement:
|
|
15
|
+
* - initializeServices(): Create agent-specific services
|
|
16
|
+
* - cleanupServices(): Cleanup on stop
|
|
17
|
+
*/
|
|
18
|
+
export class BaseAgent {
|
|
19
|
+
// === Lifecycle State ===
|
|
20
|
+
_isStarted = false;
|
|
21
|
+
_isStopped = false;
|
|
22
|
+
// === Configuration ===
|
|
23
|
+
config;
|
|
24
|
+
// === Services (initialized in start()) ===
|
|
25
|
+
services;
|
|
26
|
+
stateManager;
|
|
27
|
+
/**
|
|
28
|
+
* Create a new agent instance.
|
|
29
|
+
* Does NOT initialize services - call start() for async initialization.
|
|
30
|
+
*
|
|
31
|
+
* @param config - Agent configuration (will be validated with Zod)
|
|
32
|
+
* @throws AgentError if configuration validation fails
|
|
33
|
+
*/
|
|
34
|
+
constructor(config) {
|
|
35
|
+
// Validate and transform config using Zod schema
|
|
36
|
+
const parseResult = AgentConfigSchema.safeParse(config);
|
|
37
|
+
if (!parseResult.success) {
|
|
38
|
+
throw AgentError.invalidConfig('Configuration validation failed', parseResult.error.format());
|
|
39
|
+
}
|
|
40
|
+
this.config = parseResult.data;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Clear session-specific configuration overrides.
|
|
44
|
+
*/
|
|
45
|
+
clearSessionConfig(sessionId) {
|
|
46
|
+
this.ensureStarted();
|
|
47
|
+
this.getStateManager().clearSessionOverride(sessionId);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Ensure the agent is started before operations.
|
|
51
|
+
* @throws AgentError if not started or stopped
|
|
52
|
+
*/
|
|
53
|
+
ensureStarted() {
|
|
54
|
+
if (this._isStopped && !this._isStarted) {
|
|
55
|
+
throw AgentError.stopped();
|
|
56
|
+
}
|
|
57
|
+
if (!this._isStarted) {
|
|
58
|
+
throw AgentError.notStarted();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get the agent event bus (for subscribing to events).
|
|
63
|
+
*/
|
|
64
|
+
getAgentEventBus() {
|
|
65
|
+
this.ensureStarted();
|
|
66
|
+
return this.getServices().agentEventBus;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get the baseline configuration (original config, never modified).
|
|
70
|
+
*/
|
|
71
|
+
getBaselineConfig() {
|
|
72
|
+
this.ensureStarted();
|
|
73
|
+
return this.getStateManager().getBaselineConfig();
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get effective configuration for a session.
|
|
77
|
+
* Includes session-specific overrides if sessionId is provided.
|
|
78
|
+
*/
|
|
79
|
+
getEffectiveConfig(sessionId) {
|
|
80
|
+
this.ensureStarted();
|
|
81
|
+
return this.getStateManager().getRuntimeConfig(sessionId);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Get current LLM configuration.
|
|
85
|
+
*/
|
|
86
|
+
getLLMConfig(sessionId) {
|
|
87
|
+
this.ensureStarted();
|
|
88
|
+
return this.getStateManager().getLLMConfig(sessionId);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get services (guaranteed to be defined after start).
|
|
92
|
+
*/
|
|
93
|
+
getServices() {
|
|
94
|
+
if (!this.services) {
|
|
95
|
+
throw AgentError.serviceNotInitialized('CipherAgentServices');
|
|
96
|
+
}
|
|
97
|
+
return this.services;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get the state manager (guaranteed to be defined after start).
|
|
101
|
+
*/
|
|
102
|
+
getStateManager() {
|
|
103
|
+
if (!this.stateManager) {
|
|
104
|
+
throw AgentError.serviceNotInitialized('AgentStateManager');
|
|
105
|
+
}
|
|
106
|
+
return this.stateManager;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Check if the agent is started.
|
|
110
|
+
*/
|
|
111
|
+
isStarted() {
|
|
112
|
+
return this._isStarted;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Check if the agent is stopped.
|
|
116
|
+
*/
|
|
117
|
+
isStopped() {
|
|
118
|
+
return this._isStopped;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Reset configuration to baseline.
|
|
122
|
+
*/
|
|
123
|
+
resetConfig() {
|
|
124
|
+
this.ensureStarted();
|
|
125
|
+
this.getStateManager().resetToBaseline();
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Restart the agent (stop + start).
|
|
129
|
+
*/
|
|
130
|
+
async restart() {
|
|
131
|
+
await this.stop();
|
|
132
|
+
await this.start();
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Start the agent and initialize all services.
|
|
136
|
+
* Must be called before using other methods.
|
|
137
|
+
*
|
|
138
|
+
* @throws AgentError if already started or initialization fails
|
|
139
|
+
*/
|
|
140
|
+
async start() {
|
|
141
|
+
if (this._isStarted) {
|
|
142
|
+
throw AgentError.alreadyStarted();
|
|
143
|
+
}
|
|
144
|
+
if (this._isStopped) {
|
|
145
|
+
// Reset stopped flag to allow restart
|
|
146
|
+
this._isStopped = false;
|
|
147
|
+
}
|
|
148
|
+
try {
|
|
149
|
+
// Initialize services (implemented by subclass)
|
|
150
|
+
const services = await this.initializeServices();
|
|
151
|
+
// Validate required services
|
|
152
|
+
this.validateServices(services);
|
|
153
|
+
// Assign services
|
|
154
|
+
this.services = services;
|
|
155
|
+
// Create state manager with the event bus from services
|
|
156
|
+
this.stateManager = new AgentStateManager(this.config, services.agentEventBus);
|
|
157
|
+
this._isStarted = true;
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
if (error instanceof AgentError) {
|
|
161
|
+
throw error;
|
|
162
|
+
}
|
|
163
|
+
throw AgentError.initializationFailed(error instanceof Error ? error.message : String(error), error);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Stop the agent and cleanup all services.
|
|
168
|
+
* After stopping, the agent can be restarted with start().
|
|
169
|
+
*/
|
|
170
|
+
async stop() {
|
|
171
|
+
if (this._isStopped) {
|
|
172
|
+
return; // Already stopped, no-op
|
|
173
|
+
}
|
|
174
|
+
if (!this._isStarted) {
|
|
175
|
+
// Not started, just mark as stopped
|
|
176
|
+
this._isStopped = true;
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
try {
|
|
180
|
+
// Cleanup services (implemented by subclass)
|
|
181
|
+
await this.cleanupServices();
|
|
182
|
+
// Clear state
|
|
183
|
+
this.services = undefined;
|
|
184
|
+
this.stateManager = undefined;
|
|
185
|
+
this._isStopped = true;
|
|
186
|
+
this._isStarted = false;
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
// Still mark as stopped even if cleanup fails
|
|
190
|
+
this._isStopped = true;
|
|
191
|
+
this._isStarted = false;
|
|
192
|
+
throw AgentError.executionFailed(`Failed to stop agent: ${error instanceof Error ? error.message : String(error)}`, error);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Update LLM configuration at runtime.
|
|
197
|
+
*
|
|
198
|
+
* @param updates - Partial LLM configuration updates
|
|
199
|
+
* @param sessionId - Optional session ID for session-specific override
|
|
200
|
+
* @returns Updated LLM configuration
|
|
201
|
+
*/
|
|
202
|
+
updateLLM(updates, sessionId) {
|
|
203
|
+
this.ensureStarted();
|
|
204
|
+
// Validate updates
|
|
205
|
+
const parseResult = LLMUpdatesSchema.safeParse(updates);
|
|
206
|
+
if (!parseResult.success) {
|
|
207
|
+
throw AgentError.invalidConfig('Invalid LLM updates', parseResult.error.format());
|
|
208
|
+
}
|
|
209
|
+
// Get current config and merge
|
|
210
|
+
const currentConfig = this.getStateManager().getLLMConfig(sessionId);
|
|
211
|
+
const mergedUpdates = { ...currentConfig, ...parseResult.data };
|
|
212
|
+
// Update state
|
|
213
|
+
this.getStateManager().updateLLM(mergedUpdates, sessionId);
|
|
214
|
+
return this.getStateManager().getLLMConfig(sessionId);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Validate that all required services are present.
|
|
218
|
+
* Can be overridden by subclasses to add custom validation.
|
|
219
|
+
*/
|
|
220
|
+
validateServices(services) {
|
|
221
|
+
const requiredServices = [
|
|
222
|
+
'agentEventBus',
|
|
223
|
+
'toolManager',
|
|
224
|
+
'systemPromptManager',
|
|
225
|
+
'fileSystemService',
|
|
226
|
+
'processService',
|
|
227
|
+
'historyStorage',
|
|
228
|
+
'memoryManager',
|
|
229
|
+
'blobStorage',
|
|
230
|
+
'policyEngine',
|
|
231
|
+
'toolProvider',
|
|
232
|
+
'toolScheduler',
|
|
233
|
+
];
|
|
234
|
+
for (const serviceName of requiredServices) {
|
|
235
|
+
if (!services[serviceName]) {
|
|
236
|
+
throw AgentError.missingRequiredService(serviceName);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|