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,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Status Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages ephemeral session lifecycle states following the OpenCode pattern.
|
|
5
|
+
* Tracks whether sessions are idle, busy, retrying, or waiting for permission.
|
|
6
|
+
*
|
|
7
|
+
* This is in-memory state only - does not persist across restarts.
|
|
8
|
+
* Status changes are published via the event bus for UI consumption.
|
|
9
|
+
*/
|
|
10
|
+
import type { SessionStatusType } from '../../../core/domain/cipher/agent-events/types.js';
|
|
11
|
+
import type { SessionEventBus } from '../events/event-emitter.js';
|
|
12
|
+
/**
|
|
13
|
+
* Session Status Manager.
|
|
14
|
+
*
|
|
15
|
+
* Provides centralized tracking of session lifecycle states.
|
|
16
|
+
* Each session can be in one of four states:
|
|
17
|
+
* - idle: Ready to accept new messages
|
|
18
|
+
* - busy: Currently executing a request
|
|
19
|
+
* - retry: Waiting to retry after a transient error
|
|
20
|
+
* - waiting_permission: Waiting for user permission (e.g., tool confirmation)
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* const statusManager = new SessionStatusManager()
|
|
25
|
+
*
|
|
26
|
+
* // Get current status
|
|
27
|
+
* const status = statusManager.get('session-123')
|
|
28
|
+
* if (status.type === 'idle') {
|
|
29
|
+
* // Session is ready
|
|
30
|
+
* }
|
|
31
|
+
*
|
|
32
|
+
* // Update status
|
|
33
|
+
* statusManager.set('session-123', { type: 'busy' }, eventBus)
|
|
34
|
+
*
|
|
35
|
+
* // Clear status when session is disposed
|
|
36
|
+
* statusManager.remove('session-123')
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare class SessionStatusManager {
|
|
40
|
+
private readonly status;
|
|
41
|
+
/**
|
|
42
|
+
* Get the current status of a session.
|
|
43
|
+
* Returns 'idle' if no status has been set.
|
|
44
|
+
*
|
|
45
|
+
* @param sessionId - The session ID to get status for
|
|
46
|
+
* @returns Current session status
|
|
47
|
+
*/
|
|
48
|
+
get(sessionId: string): SessionStatusType;
|
|
49
|
+
/**
|
|
50
|
+
* Get all session statuses.
|
|
51
|
+
* Useful for debugging or admin interfaces.
|
|
52
|
+
*
|
|
53
|
+
* @returns Map of session IDs to their statuses
|
|
54
|
+
*/
|
|
55
|
+
getAll(): ReadonlyMap<string, SessionStatusType>;
|
|
56
|
+
/**
|
|
57
|
+
* Check if a session is busy (executing or retrying).
|
|
58
|
+
*
|
|
59
|
+
* @param sessionId - The session ID to check
|
|
60
|
+
* @returns True if the session is busy or retrying
|
|
61
|
+
*/
|
|
62
|
+
isBusy(sessionId: string): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Check if a session is idle and ready for new messages.
|
|
65
|
+
*
|
|
66
|
+
* @param sessionId - The session ID to check
|
|
67
|
+
* @returns True if the session is idle
|
|
68
|
+
*/
|
|
69
|
+
isIdle(sessionId: string): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Remove a session's status.
|
|
72
|
+
* Call this when a session is disposed.
|
|
73
|
+
*
|
|
74
|
+
* @param sessionId - The session ID to remove
|
|
75
|
+
*/
|
|
76
|
+
remove(sessionId: string): void;
|
|
77
|
+
/**
|
|
78
|
+
* Set the status of a session and emit a status change event.
|
|
79
|
+
*
|
|
80
|
+
* @param sessionId - The session ID to update
|
|
81
|
+
* @param newStatus - The new status to set
|
|
82
|
+
* @param eventBus - Optional event bus to emit status change event
|
|
83
|
+
*/
|
|
84
|
+
set(sessionId: string, newStatus: SessionStatusType, eventBus?: SessionEventBus): void;
|
|
85
|
+
/**
|
|
86
|
+
* Transition a session to busy state.
|
|
87
|
+
* Convenience method for the common case.
|
|
88
|
+
*
|
|
89
|
+
* @param sessionId - The session ID to update
|
|
90
|
+
* @param eventBus - Optional event bus to emit status change event
|
|
91
|
+
*/
|
|
92
|
+
setBusy(sessionId: string, eventBus?: SessionEventBus): void;
|
|
93
|
+
/**
|
|
94
|
+
* Transition a session to idle state.
|
|
95
|
+
* Convenience method for the common case.
|
|
96
|
+
*
|
|
97
|
+
* @param sessionId - The session ID to update
|
|
98
|
+
* @param eventBus - Optional event bus to emit status change event
|
|
99
|
+
*/
|
|
100
|
+
setIdle(sessionId: string, eventBus?: SessionEventBus): void;
|
|
101
|
+
/**
|
|
102
|
+
* Transition a session to retry state.
|
|
103
|
+
*
|
|
104
|
+
* @param sessionId - The session ID to update
|
|
105
|
+
* @param options - Retry options
|
|
106
|
+
* @param options.attempt - Current retry attempt number
|
|
107
|
+
* @param options.message - Human-readable retry message
|
|
108
|
+
* @param options.nextRetryAt - Timestamp when next retry will occur
|
|
109
|
+
* @param eventBus - Optional event bus to emit status change event
|
|
110
|
+
*/
|
|
111
|
+
setRetry(sessionId: string, options: {
|
|
112
|
+
attempt: number;
|
|
113
|
+
message: string;
|
|
114
|
+
nextRetryAt: number;
|
|
115
|
+
}, eventBus?: SessionEventBus): void;
|
|
116
|
+
/**
|
|
117
|
+
* Transition a session to waiting_permission state.
|
|
118
|
+
*
|
|
119
|
+
* @param sessionId - The session ID to update
|
|
120
|
+
* @param toolName - Name of the tool waiting for permission
|
|
121
|
+
* @param eventBus - Optional event bus to emit status change event
|
|
122
|
+
*/
|
|
123
|
+
setWaitingPermission(sessionId: string, toolName: string, eventBus?: SessionEventBus): void;
|
|
124
|
+
/**
|
|
125
|
+
* Compare two session statuses for equality.
|
|
126
|
+
*
|
|
127
|
+
* @param a - First status (may be undefined)
|
|
128
|
+
* @param b - Second status
|
|
129
|
+
* @returns True if statuses are equal
|
|
130
|
+
*/
|
|
131
|
+
private statusEquals;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Singleton instance of the session status manager.
|
|
135
|
+
* Use this for global session status tracking.
|
|
136
|
+
*/
|
|
137
|
+
export declare const sessionStatusManager: SessionStatusManager;
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Status Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages ephemeral session lifecycle states following the OpenCode pattern.
|
|
5
|
+
* Tracks whether sessions are idle, busy, retrying, or waiting for permission.
|
|
6
|
+
*
|
|
7
|
+
* This is in-memory state only - does not persist across restarts.
|
|
8
|
+
* Status changes are published via the event bus for UI consumption.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Session Status Manager.
|
|
12
|
+
*
|
|
13
|
+
* Provides centralized tracking of session lifecycle states.
|
|
14
|
+
* Each session can be in one of four states:
|
|
15
|
+
* - idle: Ready to accept new messages
|
|
16
|
+
* - busy: Currently executing a request
|
|
17
|
+
* - retry: Waiting to retry after a transient error
|
|
18
|
+
* - waiting_permission: Waiting for user permission (e.g., tool confirmation)
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* const statusManager = new SessionStatusManager()
|
|
23
|
+
*
|
|
24
|
+
* // Get current status
|
|
25
|
+
* const status = statusManager.get('session-123')
|
|
26
|
+
* if (status.type === 'idle') {
|
|
27
|
+
* // Session is ready
|
|
28
|
+
* }
|
|
29
|
+
*
|
|
30
|
+
* // Update status
|
|
31
|
+
* statusManager.set('session-123', { type: 'busy' }, eventBus)
|
|
32
|
+
*
|
|
33
|
+
* // Clear status when session is disposed
|
|
34
|
+
* statusManager.remove('session-123')
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export class SessionStatusManager {
|
|
38
|
+
status = new Map();
|
|
39
|
+
/**
|
|
40
|
+
* Get the current status of a session.
|
|
41
|
+
* Returns 'idle' if no status has been set.
|
|
42
|
+
*
|
|
43
|
+
* @param sessionId - The session ID to get status for
|
|
44
|
+
* @returns Current session status
|
|
45
|
+
*/
|
|
46
|
+
get(sessionId) {
|
|
47
|
+
return this.status.get(sessionId) ?? { type: 'idle' };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get all session statuses.
|
|
51
|
+
* Useful for debugging or admin interfaces.
|
|
52
|
+
*
|
|
53
|
+
* @returns Map of session IDs to their statuses
|
|
54
|
+
*/
|
|
55
|
+
getAll() {
|
|
56
|
+
return this.status;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Check if a session is busy (executing or retrying).
|
|
60
|
+
*
|
|
61
|
+
* @param sessionId - The session ID to check
|
|
62
|
+
* @returns True if the session is busy or retrying
|
|
63
|
+
*/
|
|
64
|
+
isBusy(sessionId) {
|
|
65
|
+
const status = this.get(sessionId);
|
|
66
|
+
return status.type === 'busy' || status.type === 'retry';
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Check if a session is idle and ready for new messages.
|
|
70
|
+
*
|
|
71
|
+
* @param sessionId - The session ID to check
|
|
72
|
+
* @returns True if the session is idle
|
|
73
|
+
*/
|
|
74
|
+
isIdle(sessionId) {
|
|
75
|
+
return this.get(sessionId).type === 'idle';
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Remove a session's status.
|
|
79
|
+
* Call this when a session is disposed.
|
|
80
|
+
*
|
|
81
|
+
* @param sessionId - The session ID to remove
|
|
82
|
+
*/
|
|
83
|
+
remove(sessionId) {
|
|
84
|
+
this.status.delete(sessionId);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Set the status of a session and emit a status change event.
|
|
88
|
+
*
|
|
89
|
+
* @param sessionId - The session ID to update
|
|
90
|
+
* @param newStatus - The new status to set
|
|
91
|
+
* @param eventBus - Optional event bus to emit status change event
|
|
92
|
+
*/
|
|
93
|
+
set(sessionId, newStatus, eventBus) {
|
|
94
|
+
const oldStatus = this.status.get(sessionId);
|
|
95
|
+
// Only update and emit if status actually changed
|
|
96
|
+
if (!this.statusEquals(oldStatus, newStatus)) {
|
|
97
|
+
this.status.set(sessionId, newStatus);
|
|
98
|
+
// Emit status change event if event bus provided
|
|
99
|
+
if (eventBus) {
|
|
100
|
+
eventBus.emit('session:statusChanged', {
|
|
101
|
+
status: newStatus,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Transition a session to busy state.
|
|
108
|
+
* Convenience method for the common case.
|
|
109
|
+
*
|
|
110
|
+
* @param sessionId - The session ID to update
|
|
111
|
+
* @param eventBus - Optional event bus to emit status change event
|
|
112
|
+
*/
|
|
113
|
+
setBusy(sessionId, eventBus) {
|
|
114
|
+
this.set(sessionId, { type: 'busy' }, eventBus);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Transition a session to idle state.
|
|
118
|
+
* Convenience method for the common case.
|
|
119
|
+
*
|
|
120
|
+
* @param sessionId - The session ID to update
|
|
121
|
+
* @param eventBus - Optional event bus to emit status change event
|
|
122
|
+
*/
|
|
123
|
+
setIdle(sessionId, eventBus) {
|
|
124
|
+
this.set(sessionId, { type: 'idle' }, eventBus);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Transition a session to retry state.
|
|
128
|
+
*
|
|
129
|
+
* @param sessionId - The session ID to update
|
|
130
|
+
* @param options - Retry options
|
|
131
|
+
* @param options.attempt - Current retry attempt number
|
|
132
|
+
* @param options.message - Human-readable retry message
|
|
133
|
+
* @param options.nextRetryAt - Timestamp when next retry will occur
|
|
134
|
+
* @param eventBus - Optional event bus to emit status change event
|
|
135
|
+
*/
|
|
136
|
+
setRetry(sessionId, options, eventBus) {
|
|
137
|
+
this.set(sessionId, { attempt: options.attempt, message: options.message, nextRetryAt: options.nextRetryAt, type: 'retry' }, eventBus);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Transition a session to waiting_permission state.
|
|
141
|
+
*
|
|
142
|
+
* @param sessionId - The session ID to update
|
|
143
|
+
* @param toolName - Name of the tool waiting for permission
|
|
144
|
+
* @param eventBus - Optional event bus to emit status change event
|
|
145
|
+
*/
|
|
146
|
+
setWaitingPermission(sessionId, toolName, eventBus) {
|
|
147
|
+
this.set(sessionId, { toolName, type: 'waiting_permission' }, eventBus);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Compare two session statuses for equality.
|
|
151
|
+
*
|
|
152
|
+
* @param a - First status (may be undefined)
|
|
153
|
+
* @param b - Second status
|
|
154
|
+
* @returns True if statuses are equal
|
|
155
|
+
*/
|
|
156
|
+
statusEquals(a, b) {
|
|
157
|
+
if (!a)
|
|
158
|
+
return false;
|
|
159
|
+
if (a.type !== b.type)
|
|
160
|
+
return false;
|
|
161
|
+
switch (a.type) {
|
|
162
|
+
case 'busy': {
|
|
163
|
+
return true;
|
|
164
|
+
}
|
|
165
|
+
case 'idle': {
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
case 'retry': {
|
|
169
|
+
return (b.type === 'retry' && a.attempt === b.attempt && a.message === b.message && a.nextRetryAt === b.nextRetryAt);
|
|
170
|
+
}
|
|
171
|
+
case 'waiting_permission': {
|
|
172
|
+
return b.type === 'waiting_permission' && a.toolName === b.toolName;
|
|
173
|
+
}
|
|
174
|
+
default: {
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Singleton instance of the session status manager.
|
|
182
|
+
* Use this for global session status tracking.
|
|
183
|
+
*/
|
|
184
|
+
export const sessionStatusManager = new SessionStatusManager();
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate a session title from the first user message.
|
|
3
|
+
* Uses heuristic extraction (no LLM call to avoid latency).
|
|
4
|
+
*
|
|
5
|
+
* @param firstMessage - The first user message in the conversation
|
|
6
|
+
* @returns A concise title for the session
|
|
7
|
+
*/
|
|
8
|
+
export declare function generateSessionTitle(firstMessage: string): string;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate a session title from the first user message.
|
|
3
|
+
* Uses heuristic extraction (no LLM call to avoid latency).
|
|
4
|
+
*
|
|
5
|
+
* @param firstMessage - The first user message in the conversation
|
|
6
|
+
* @returns A concise title for the session
|
|
7
|
+
*/
|
|
8
|
+
export function generateSessionTitle(firstMessage) {
|
|
9
|
+
// Remove markdown, code blocks, etc.
|
|
10
|
+
const cleaned = firstMessage
|
|
11
|
+
.replaceAll(/```[\s\S]*?```/g, '') // Remove code blocks
|
|
12
|
+
.replaceAll(/`[^`]+`/g, '') // Remove inline code
|
|
13
|
+
.replaceAll(/\[([^\]]+)\]\([^)]+\)/g, '$1') // Extract link text
|
|
14
|
+
.replaceAll(/[#*_~]/g, '') // Remove markdown formatting chars
|
|
15
|
+
.trim();
|
|
16
|
+
// If nothing left after cleaning, use a generic title
|
|
17
|
+
if (!cleaned) {
|
|
18
|
+
return 'New conversation';
|
|
19
|
+
}
|
|
20
|
+
// Extract first sentence or meaningful chunk
|
|
21
|
+
const firstSentence = cleaned.split(/[.!?\n]/)[0]?.trim() || cleaned;
|
|
22
|
+
// Truncate to reasonable length
|
|
23
|
+
const maxLength = 50;
|
|
24
|
+
if (firstSentence.length <= maxLength) {
|
|
25
|
+
return firstSentence;
|
|
26
|
+
}
|
|
27
|
+
// Truncate at word boundary
|
|
28
|
+
const truncated = firstSentence.slice(0, maxLength);
|
|
29
|
+
const lastSpace = truncated.lastIndexOf(' ');
|
|
30
|
+
return (lastSpace > 20 ? truncated.slice(0, lastSpace) : truncated) + '...';
|
|
31
|
+
}
|
|
@@ -1,6 +1,21 @@
|
|
|
1
|
-
import type { CompactionResult, LoadMessagesResult, PruneToolOutputsOptions, SessionRecord, StoredMessage, StoredMessageWithParts, StreamMessagesOptions } from '../../../core/domain/cipher/storage/message-storage-types.js';
|
|
1
|
+
import type { CompactionResult, LoadMessagesResult, PruneToolOutputsOptions, SessionRecord, StoredMessage, StoredMessageWithParts, StoredPart, StoredToolState, StreamMessagesOptions } from '../../../core/domain/cipher/storage/message-storage-types.js';
|
|
2
2
|
import type { IKeyStorage } from '../../../core/interfaces/cipher/i-key-storage.js';
|
|
3
|
-
import type { InternalMessage } from '../../../core/interfaces/cipher/message-types.js';
|
|
3
|
+
import type { AttachmentPart, InternalMessage } from '../../../core/interfaces/cipher/message-types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Options for creating a tool part.
|
|
6
|
+
*/
|
|
7
|
+
export interface CreateToolPartOptions {
|
|
8
|
+
/** Unique identifier for this tool call */
|
|
9
|
+
callId: string;
|
|
10
|
+
/** Parsed input arguments */
|
|
11
|
+
input: Record<string, unknown>;
|
|
12
|
+
/** ID of the message to add the tool part to */
|
|
13
|
+
messageId: string;
|
|
14
|
+
/** Session ID for validation */
|
|
15
|
+
sessionId: string;
|
|
16
|
+
/** Name of the tool being called */
|
|
17
|
+
toolName: string;
|
|
18
|
+
}
|
|
4
19
|
/**
|
|
5
20
|
* Service for granular message and part storage.
|
|
6
21
|
*
|
|
@@ -18,6 +33,21 @@ import type { InternalMessage } from '../../../core/interfaces/cipher/message-ty
|
|
|
18
33
|
export declare class MessageStorageService {
|
|
19
34
|
private readonly keyStorage;
|
|
20
35
|
constructor(keyStorage: IKeyStorage);
|
|
36
|
+
/**
|
|
37
|
+
* Add attachments to a completed tool part.
|
|
38
|
+
*
|
|
39
|
+
* @param messageId - ID of the message containing the part
|
|
40
|
+
* @param partId - ID of the tool part
|
|
41
|
+
* @param attachments - Attachments to add
|
|
42
|
+
*/
|
|
43
|
+
addToolPartAttachments(messageId: string, partId: string, attachments: AttachmentPart[]): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Create a tool part in pending state and add it to a message.
|
|
46
|
+
*
|
|
47
|
+
* @param options - Options for creating the tool part
|
|
48
|
+
* @returns The created StoredPart
|
|
49
|
+
*/
|
|
50
|
+
createToolPart(options: CreateToolPartOptions): Promise<StoredPart>;
|
|
21
51
|
/**
|
|
22
52
|
* Delete a session and all its messages and parts.
|
|
23
53
|
*/
|
|
@@ -26,6 +56,14 @@ export declare class MessageStorageService {
|
|
|
26
56
|
* Get the session record, if it exists.
|
|
27
57
|
*/
|
|
28
58
|
getSession(sessionId: string): Promise<SessionRecord | undefined>;
|
|
59
|
+
/**
|
|
60
|
+
* Get a tool part by call ID from a message.
|
|
61
|
+
*
|
|
62
|
+
* @param messageId - ID of the message
|
|
63
|
+
* @param callId - Call ID of the tool part
|
|
64
|
+
* @returns The tool part if found
|
|
65
|
+
*/
|
|
66
|
+
getToolPartByCallId(messageId: string, callId: string): Promise<StoredPart | undefined>;
|
|
29
67
|
/**
|
|
30
68
|
* Check if a session exists in granular format.
|
|
31
69
|
*/
|
|
@@ -49,6 +87,9 @@ export declare class MessageStorageService {
|
|
|
49
87
|
/**
|
|
50
88
|
* Prune old tool outputs by marking them as compacted.
|
|
51
89
|
* Keeps the most recent tool outputs up to the specified token limit.
|
|
90
|
+
*
|
|
91
|
+
* Turn-based protection: Protects tool outputs in the most recent N user turns.
|
|
92
|
+
* Minimum threshold: Only executes if the minimum token threshold can be saved.
|
|
52
93
|
*/
|
|
53
94
|
pruneToolOutputs(options: PruneToolOutputsOptions): Promise<CompactionResult>;
|
|
54
95
|
/**
|
|
@@ -80,6 +121,20 @@ export declare class MessageStorageService {
|
|
|
80
121
|
* Convert loaded messages back to InternalMessage format.
|
|
81
122
|
*/
|
|
82
123
|
toInternalMessages(messages: StoredMessageWithParts[]): InternalMessage[];
|
|
124
|
+
/**
|
|
125
|
+
* Update a tool part's state.
|
|
126
|
+
* Used for transitioning through pending → running → completed/error.
|
|
127
|
+
*
|
|
128
|
+
* @param messageId - ID of the message containing the part
|
|
129
|
+
* @param partId - ID of the tool part to update
|
|
130
|
+
* @param update - Partial tool state update
|
|
131
|
+
*/
|
|
132
|
+
updateToolPartState(messageId: string, partId: string, update: Partial<StoredToolState>): Promise<void>;
|
|
133
|
+
/**
|
|
134
|
+
* Convert a StoredPart to a MessagePart for reconstruction.
|
|
135
|
+
* Returns the converted part and optionally tool output content.
|
|
136
|
+
*/
|
|
137
|
+
private convertStoredPartToMessagePart;
|
|
83
138
|
/**
|
|
84
139
|
* Extract parts from an InternalMessage.
|
|
85
140
|
*/
|
|
@@ -101,6 +156,14 @@ export declare class MessageStorageService {
|
|
|
101
156
|
*/
|
|
102
157
|
private serializeImageContent;
|
|
103
158
|
private sessionKey;
|
|
159
|
+
/**
|
|
160
|
+
* Convert a stored part with tool state to a ToolPart.
|
|
161
|
+
*/
|
|
162
|
+
private storedPartToToolPart;
|
|
163
|
+
/**
|
|
164
|
+
* Convert a ToolPart to a StoredPart.
|
|
165
|
+
*/
|
|
166
|
+
private toolPartToStoredPart;
|
|
104
167
|
}
|
|
105
168
|
/**
|
|
106
169
|
* Factory function to create MessageStorageService.
|