@dexto/core 1.7.2 → 1.8.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/dist/agent/DextoAgent.cjs +157 -62
- package/dist/agent/DextoAgent.d.ts +71 -17
- package/dist/agent/DextoAgent.d.ts.map +1 -1
- package/dist/agent/DextoAgent.js +161 -63
- package/dist/agent/agent-options.d.ts +6 -10
- package/dist/agent/agent-options.d.ts.map +1 -1
- package/dist/agent/agentCard.js +1 -1
- package/dist/agent/error-codes.js +1 -1
- package/dist/agent/errors.js +1 -1
- package/dist/agent/index.d.ts +1 -0
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +1 -1
- package/dist/agent/schemas.d.ts +2 -2
- package/dist/agent/schemas.js +1 -1
- package/dist/agent/state-manager.js +1 -1
- package/dist/approval/error-codes.cjs +1 -1
- package/dist/approval/error-codes.d.ts +1 -1
- package/dist/approval/error-codes.d.ts.map +1 -1
- package/dist/approval/error-codes.js +2 -2
- package/dist/approval/errors.cjs +2 -5
- package/dist/approval/errors.d.ts.map +1 -1
- package/dist/approval/errors.js +3 -6
- package/dist/approval/factory.cjs +19 -4
- package/dist/approval/factory.d.ts +4 -1
- package/dist/approval/factory.d.ts.map +1 -1
- package/dist/approval/factory.js +19 -5
- package/dist/approval/index.d.ts +1 -1
- package/dist/approval/index.d.ts.map +1 -1
- package/dist/approval/index.js +1 -1
- package/dist/approval/manager.cjs +168 -26
- package/dist/approval/manager.d.ts +46 -12
- package/dist/approval/manager.d.ts.map +1 -1
- package/dist/approval/manager.js +177 -29
- package/dist/approval/schemas.cjs +26 -26
- package/dist/approval/schemas.d.ts +29 -29
- package/dist/approval/schemas.d.ts.map +1 -1
- package/dist/approval/schemas.js +23 -23
- package/dist/approval/types.cjs +5 -5
- package/dist/approval/types.d.ts +18 -18
- package/dist/approval/types.d.ts.map +1 -1
- package/dist/approval/types.js +6 -6
- package/dist/{chunk-PTJYTZNU.js → chunk-C6A6W6XS.js} +1 -44
- package/dist/config/index.cjs +75 -0
- package/dist/config/index.d.ts +15 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +50 -0
- package/dist/context/compaction/overflow.js +1 -1
- package/dist/context/compaction/strategies/noop.js +1 -1
- package/dist/context/compaction/strategies/reactive-overflow-compaction.js +1 -1
- package/dist/context/content-clone.cjs +131 -0
- package/dist/context/content-clone.d.ts +7 -0
- package/dist/context/content-clone.d.ts.map +1 -0
- package/dist/context/content-clone.js +104 -0
- package/dist/context/error-codes.js +1 -1
- package/dist/context/errors.js +1 -1
- package/dist/context/index.cjs +2 -0
- package/dist/context/index.d.ts +1 -0
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/index.js +2 -1
- package/dist/context/manager.cjs +44 -33
- package/dist/context/manager.d.ts +7 -7
- package/dist/context/manager.d.ts.map +1 -1
- package/dist/context/manager.js +45 -34
- package/dist/context/media-helpers.js +1 -1
- package/dist/context/schemas.cjs +77 -0
- package/dist/context/schemas.d.ts +5 -0
- package/dist/context/schemas.d.ts.map +1 -0
- package/dist/context/schemas.js +53 -0
- package/dist/context/types.js +1 -1
- package/dist/context/utils.cjs +70 -69
- package/dist/context/utils.d.ts +3 -3
- package/dist/context/utils.d.ts.map +1 -1
- package/dist/context/utils.js +71 -70
- package/dist/errors/DextoBaseError.js +1 -1
- package/dist/errors/DextoRuntimeError.js +1 -1
- package/dist/errors/DextoValidationError.js +1 -1
- package/dist/errors/index.js +1 -1
- package/dist/errors/result-bridge.js +1 -1
- package/dist/errors/types.js +1 -1
- package/dist/events/index.cjs +9 -1
- package/dist/events/index.d.ts +20 -8
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +10 -2
- package/dist/hooks/builtins/content-policy.js +1 -1
- package/dist/hooks/builtins/response-sanitizer.js +1 -1
- package/dist/hooks/error-codes.js +1 -1
- package/dist/hooks/index.js +1 -1
- package/dist/hooks/manager.cjs +1 -1
- package/dist/hooks/manager.d.ts +2 -2
- package/dist/hooks/manager.d.ts.map +1 -1
- package/dist/hooks/manager.js +2 -2
- package/dist/hooks/types.d.ts +2 -2
- package/dist/hooks/types.d.ts.map +1 -1
- package/dist/index.browser.js +1 -1
- package/dist/index.cjs +2 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/llm/curation-config.js +1 -1
- package/dist/llm/curation.js +1 -1
- package/dist/llm/error-codes.js +1 -1
- package/dist/llm/errors.js +1 -1
- package/dist/llm/executor/index.cjs +32 -0
- package/dist/llm/executor/index.d.ts +2 -0
- package/dist/llm/executor/index.d.ts.map +1 -0
- package/dist/llm/executor/index.js +11 -0
- package/dist/llm/executor/provider-options.js +1 -1
- package/dist/llm/executor/stream-processor.cjs +28 -139
- package/dist/llm/executor/stream-processor.d.ts +2 -13
- package/dist/llm/executor/stream-processor.d.ts.map +1 -1
- package/dist/llm/executor/stream-processor.js +29 -140
- package/dist/{session/history/memory.cjs → llm/executor/tool-definitions.cjs} +21 -33
- package/dist/llm/executor/tool-definitions.d.ts +4 -0
- package/dist/llm/executor/tool-definitions.d.ts.map +1 -0
- package/dist/llm/executor/tool-definitions.js +22 -0
- package/dist/llm/executor/tool-output-truncator.js +1 -1
- package/dist/llm/executor/turn-executor.cjs +1093 -458
- package/dist/llm/executor/turn-executor.d.ts +269 -43
- package/dist/llm/executor/turn-executor.d.ts.map +1 -1
- package/dist/llm/executor/turn-executor.js +1079 -405
- package/dist/llm/executor/types.d.ts +6 -0
- package/dist/llm/executor/types.d.ts.map +1 -1
- package/dist/llm/formatters/vercel.js +1 -1
- package/dist/llm/index.cjs +2 -0
- package/dist/llm/index.d.ts +1 -0
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +2 -1
- package/dist/llm/providers/codex-app-server.cjs +22 -2
- package/dist/llm/providers/codex-app-server.d.ts.map +1 -1
- package/dist/llm/providers/codex-app-server.js +23 -3
- package/dist/llm/providers/codex-base-url.js +1 -1
- package/dist/llm/providers/local/ai-sdk-adapter.js +1 -1
- package/dist/llm/providers/local/downloader.js +1 -1
- package/dist/llm/providers/local/error-codes.js +1 -1
- package/dist/llm/providers/local/errors.js +1 -1
- package/dist/llm/providers/local/gpu-detector.js +1 -1
- package/dist/llm/providers/local/index.js +1 -1
- package/dist/llm/providers/local/node-llama-provider.js +1 -1
- package/dist/llm/providers/local/ollama-provider.js +1 -1
- package/dist/llm/providers/local/registry.js +1 -1
- package/dist/llm/providers/local/schemas.js +1 -1
- package/dist/llm/providers/openrouter-model-registry.js +1 -1
- package/dist/llm/reasoning/anthropic-betas.js +1 -1
- package/dist/llm/reasoning/anthropic-thinking.js +1 -1
- package/dist/llm/reasoning/openai-reasoning-effort.js +1 -1
- package/dist/llm/reasoning/profile.js +1 -1
- package/dist/llm/reasoning/profiles/anthropic.js +1 -1
- package/dist/llm/reasoning/profiles/bedrock.js +1 -1
- package/dist/llm/reasoning/profiles/google.js +1 -1
- package/dist/llm/reasoning/profiles/openai-compatible.js +1 -1
- package/dist/llm/reasoning/profiles/openai.js +1 -1
- package/dist/llm/reasoning/profiles/openrouter.js +1 -1
- package/dist/llm/reasoning/profiles/shared.js +1 -1
- package/dist/llm/reasoning/profiles/vertex.js +1 -1
- package/dist/llm/registry/auto-update.js +1 -1
- package/dist/llm/registry/index.js +1 -1
- package/dist/llm/registry/models.generated.js +1 -1
- package/dist/llm/registry/models.manual.js +1 -1
- package/dist/llm/registry/sync.js +1 -1
- package/dist/llm/resolver.js +1 -1
- package/dist/llm/schemas.js +1 -1
- package/dist/llm/services/factory.cjs +5 -4
- package/dist/llm/services/factory.d.ts +3 -3
- package/dist/llm/services/factory.d.ts.map +1 -1
- package/dist/llm/services/factory.js +6 -5
- package/dist/llm/services/types.d.ts +10 -1
- package/dist/llm/services/types.d.ts.map +1 -1
- package/dist/llm/services/vercel.cjs +23 -8
- package/dist/llm/services/vercel.d.ts +11 -7
- package/dist/llm/services/vercel.d.ts.map +1 -1
- package/dist/llm/services/vercel.js +24 -9
- package/dist/llm/types.js +1 -1
- package/dist/llm/usage-metadata.cjs +20 -3
- package/dist/llm/usage-metadata.d.ts +1 -0
- package/dist/llm/usage-metadata.d.ts.map +1 -1
- package/dist/llm/usage-metadata.js +19 -3
- package/dist/llm/usage-scope.js +1 -1
- package/dist/llm/usage-summary.js +1 -1
- package/dist/llm/validation.js +1 -1
- package/dist/logger/browser.js +1 -1
- package/dist/logger/default-logger-factory.js +1 -1
- package/dist/logger/factory.js +1 -1
- package/dist/logger/index.js +1 -1
- package/dist/logger/logger.js +1 -1
- package/dist/logger/v2/dexto-logger.js +1 -1
- package/dist/logger/v2/error-codes.js +1 -1
- package/dist/logger/v2/errors.js +1 -1
- package/dist/logger/v2/schemas.js +1 -1
- package/dist/logger/v2/test-utils.js +1 -1
- package/dist/logger/v2/transport-factory.js +1 -1
- package/dist/logger/v2/transports/console-transport.js +1 -1
- package/dist/logger/v2/transports/file-transport.js +1 -1
- package/dist/logger/v2/transports/silent-transport.js +1 -1
- package/dist/logger/v2/types.js +1 -1
- package/dist/mcp/bundled-config.js +1 -1
- package/dist/mcp/error-codes.js +1 -1
- package/dist/mcp/errors.js +1 -1
- package/dist/mcp/index.js +1 -1
- package/dist/mcp/manager.js +1 -1
- package/dist/mcp/mcp-client.js +1 -1
- package/dist/mcp/resolver.js +1 -1
- package/dist/mcp/schemas.js +1 -1
- package/dist/memory/error-codes.js +1 -1
- package/dist/memory/errors.js +1 -1
- package/dist/memory/index.js +1 -1
- package/dist/memory/manager.cjs +7 -27
- package/dist/memory/manager.d.ts +4 -12
- package/dist/memory/manager.d.ts.map +1 -1
- package/dist/memory/manager.js +8 -28
- package/dist/memory/schemas.js +1 -1
- package/dist/prompts/error-codes.js +1 -1
- package/dist/prompts/errors.js +1 -1
- package/dist/prompts/index.js +1 -1
- package/dist/prompts/name-validation.js +1 -1
- package/dist/prompts/prompt-manager.cjs +9 -38
- package/dist/prompts/prompt-manager.d.ts +2 -10
- package/dist/prompts/prompt-manager.d.ts.map +1 -1
- package/dist/prompts/prompt-manager.js +10 -39
- package/dist/prompts/providers/config-prompt-provider.cjs +8 -87
- package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -1
- package/dist/prompts/providers/config-prompt-provider.js +9 -88
- package/dist/prompts/providers/custom-prompt-provider.cjs +21 -22
- package/dist/prompts/providers/custom-prompt-provider.d.ts +19 -4
- package/dist/prompts/providers/custom-prompt-provider.d.ts.map +1 -1
- package/dist/prompts/providers/custom-prompt-provider.js +22 -23
- package/dist/prompts/providers/mcp-prompt-provider.js +1 -1
- package/dist/prompts/schemas.cjs +2 -24
- package/dist/prompts/schemas.d.ts +0 -52
- package/dist/prompts/schemas.d.ts.map +1 -1
- package/dist/prompts/schemas.js +3 -25
- package/dist/prompts/types.d.ts +5 -32
- package/dist/prompts/types.d.ts.map +1 -1
- package/dist/prompts/utils.js +1 -1
- package/dist/resources/agent-resources-provider.js +1 -1
- package/dist/resources/error-codes.js +1 -1
- package/dist/resources/errors.js +1 -1
- package/dist/resources/handlers/blob-handler.cjs +14 -11
- package/dist/resources/handlers/blob-handler.d.ts +4 -4
- package/dist/resources/handlers/blob-handler.d.ts.map +1 -1
- package/dist/resources/handlers/blob-handler.js +15 -12
- package/dist/resources/handlers/factory.cjs +3 -3
- package/dist/resources/handlers/factory.js +4 -4
- package/dist/resources/handlers/filesystem-handler.js +1 -1
- package/dist/resources/handlers/types.d.ts +2 -2
- package/dist/resources/handlers/types.d.ts.map +1 -1
- package/dist/resources/index.js +1 -1
- package/dist/resources/manager.cjs +10 -7
- package/dist/resources/manager.d.ts +4 -4
- package/dist/resources/manager.d.ts.map +1 -1
- package/dist/resources/manager.js +11 -8
- package/dist/resources/reference-parser.js +1 -1
- package/dist/resources/schemas.cjs +1 -1
- package/dist/resources/schemas.d.ts +2 -2
- package/dist/resources/schemas.js +2 -2
- package/dist/runtime/host-runtime.js +1 -1
- package/dist/runtime/index.cjs +3 -0
- package/dist/runtime/index.d.ts +2 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +3 -1
- package/dist/runtime/run-context.js +1 -1
- package/dist/search/index.js +1 -1
- package/dist/search/search-service.cjs +6 -13
- package/dist/search/search-service.d.ts +5 -3
- package/dist/search/search-service.d.ts.map +1 -1
- package/dist/search/search-service.js +7 -14
- package/dist/session/chat-session.cjs +264 -108
- package/dist/session/chat-session.d.ts +75 -21
- package/dist/session/chat-session.d.ts.map +1 -1
- package/dist/session/chat-session.js +268 -108
- package/dist/session/error-codes.js +1 -1
- package/dist/session/errors.js +1 -1
- package/dist/session/index.cjs +19 -2
- package/dist/session/index.d.ts +4 -3
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js +19 -3
- package/dist/session/message-queue.cjs +82 -51
- package/dist/session/message-queue.d.ts +13 -8
- package/dist/session/message-queue.d.ts.map +1 -1
- package/dist/session/message-queue.js +83 -52
- package/dist/session/queue-clone.cjs +50 -0
- package/dist/session/queue-clone.d.ts +5 -0
- package/dist/session/queue-clone.d.ts.map +1 -0
- package/dist/session/queue-clone.js +25 -0
- package/dist/session/schemas.cjs +74 -2
- package/dist/session/schemas.d.ts +94 -0
- package/dist/session/schemas.d.ts.map +1 -1
- package/dist/session/schemas.js +69 -2
- package/dist/session/session-manager.cjs +107 -123
- package/dist/session/session-manager.d.ts +7 -6
- package/dist/session/session-manager.d.ts.map +1 -1
- package/dist/session/session-manager.js +108 -124
- package/dist/session/title-generator.cjs +14 -26
- package/dist/session/title-generator.d.ts +4 -6
- package/dist/session/title-generator.d.ts.map +1 -1
- package/dist/session/title-generator.js +16 -28
- package/dist/session/types.cjs +28 -0
- package/dist/session/types.d.ts +5 -1
- package/dist/session/types.d.ts.map +1 -1
- package/dist/session/types.js +19 -0
- package/dist/{session/history/factory.cjs → skills/index.cjs} +9 -9
- package/dist/skills/index.d.ts +4 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +7 -0
- package/dist/skills/skill-manager.cjs +76 -0
- package/dist/skills/skill-manager.d.ts +13 -0
- package/dist/skills/skill-manager.d.ts.map +1 -0
- package/dist/skills/skill-manager.js +53 -0
- package/dist/skills/types.d.ts +24 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/workspace-skill-source.cjs +120 -0
- package/dist/skills/workspace-skill-source.d.ts +16 -0
- package/dist/skills/workspace-skill-source.d.ts.map +1 -0
- package/dist/skills/workspace-skill-source.js +97 -0
- package/dist/storage/approvals/types.cjs +38 -0
- package/dist/storage/approvals/types.d.ts +54 -0
- package/dist/storage/approvals/types.d.ts.map +1 -0
- package/dist/storage/approvals/types.js +14 -0
- package/dist/storage/artifacts/types.d.ts +73 -0
- package/dist/storage/artifacts/types.d.ts.map +1 -0
- package/dist/storage/conversation/database.cjs +233 -0
- package/dist/storage/conversation/database.d.ts +38 -0
- package/dist/storage/conversation/database.d.ts.map +1 -0
- package/dist/storage/conversation/database.js +210 -0
- package/dist/storage/conversation/types.cjs +16 -0
- package/dist/storage/conversation/types.d.ts +21 -0
- package/dist/storage/conversation/types.d.ts.map +1 -0
- package/dist/storage/conversation/types.js +0 -0
- package/dist/storage/database/types.d.ts +4 -0
- package/dist/storage/database/types.d.ts.map +1 -1
- package/dist/storage/error-codes.js +1 -1
- package/dist/storage/errors.cjs +6 -6
- package/dist/storage/errors.d.ts +2 -2
- package/dist/storage/errors.js +7 -7
- package/dist/storage/index.cjs +42 -5
- package/dist/storage/index.d.ts +19 -8
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +39 -4
- package/dist/storage/memories/types.cjs +16 -0
- package/dist/storage/memories/types.d.ts +17 -0
- package/dist/storage/memories/types.d.ts.map +1 -0
- package/dist/storage/memories/types.js +0 -0
- package/dist/storage/message-queue/types.cjs +16 -0
- package/dist/storage/message-queue/types.d.ts +15 -0
- package/dist/storage/message-queue/types.d.ts.map +1 -0
- package/dist/storage/message-queue/types.js +0 -0
- package/dist/storage/prompts/types.cjs +16 -0
- package/dist/storage/prompts/types.d.ts +14 -0
- package/dist/storage/prompts/types.d.ts.map +1 -0
- package/dist/storage/prompts/types.js +0 -0
- package/dist/storage/runtime-events/types.cjs +16 -0
- package/dist/storage/runtime-events/types.d.ts +19 -0
- package/dist/storage/runtime-events/types.d.ts.map +1 -0
- package/dist/storage/runtime-events/types.js +0 -0
- package/dist/storage/sessions/types.cjs +16 -0
- package/dist/storage/sessions/types.d.ts +19 -0
- package/dist/storage/sessions/types.d.ts.map +1 -0
- package/dist/storage/sessions/types.js +0 -0
- package/dist/storage/stores/backend.cjs +702 -0
- package/dist/storage/stores/backend.d.ts +303 -0
- package/dist/storage/stores/backend.d.ts.map +1 -0
- package/dist/storage/stores/backend.js +677 -0
- package/dist/storage/stores/in-memory.cjs +510 -0
- package/dist/storage/stores/in-memory.d.ts +11 -0
- package/dist/storage/stores/in-memory.d.ts.map +1 -0
- package/dist/storage/stores/in-memory.js +487 -0
- package/dist/storage/stores/types.cjs +16 -0
- package/dist/storage/stores/types.d.ts +36 -0
- package/dist/storage/stores/types.d.ts.map +1 -0
- package/dist/storage/stores/types.js +0 -0
- package/dist/storage/tool-executions/types.cjs +127 -0
- package/dist/storage/tool-executions/types.d.ts +193 -0
- package/dist/storage/tool-executions/types.d.ts.map +1 -0
- package/dist/storage/tool-executions/types.js +96 -0
- package/dist/storage/tool-preferences/types.cjs +16 -0
- package/dist/storage/tool-preferences/types.d.ts +29 -0
- package/dist/storage/tool-preferences/types.d.ts.map +1 -0
- package/dist/storage/tool-preferences/types.js +0 -0
- package/dist/storage/tool-state/types.cjs +16 -0
- package/dist/storage/tool-state/types.d.ts +20 -0
- package/dist/storage/tool-state/types.d.ts.map +1 -0
- package/dist/storage/tool-state/types.js +0 -0
- package/dist/storage/workspaces/types.cjs +16 -0
- package/dist/storage/workspaces/types.d.ts +19 -0
- package/dist/storage/workspaces/types.d.ts.map +1 -0
- package/dist/storage/workspaces/types.js +0 -0
- package/dist/systemPrompt/contributors.cjs +10 -14
- package/dist/systemPrompt/contributors.d.ts +3 -3
- package/dist/systemPrompt/contributors.d.ts.map +1 -1
- package/dist/systemPrompt/contributors.js +11 -15
- package/dist/systemPrompt/error-codes.js +1 -1
- package/dist/systemPrompt/errors.js +1 -1
- package/dist/systemPrompt/in-built-prompts.js +1 -1
- package/dist/systemPrompt/index.js +1 -1
- package/dist/systemPrompt/manager.js +1 -1
- package/dist/systemPrompt/registry.js +1 -1
- package/dist/systemPrompt/schemas.js +1 -1
- package/dist/telemetry/decorators.js +1 -1
- package/dist/telemetry/error-codes.js +1 -1
- package/dist/telemetry/errors.js +1 -1
- package/dist/telemetry/exporters.js +1 -1
- package/dist/telemetry/index.js +1 -1
- package/dist/telemetry/schemas.js +1 -1
- package/dist/telemetry/telemetry.js +1 -1
- package/dist/telemetry/utils.js +1 -1
- package/dist/test-utils/in-memory-storage.cjs +9 -17
- package/dist/test-utils/in-memory-storage.js +9 -16
- package/dist/test-utils/session-state-stores.cjs +21 -24
- package/dist/test-utils/session-state-stores.js +22 -24
- package/dist/tools/{confirmation → approval}/allowed-tools-provider/factory.cjs +1 -1
- package/dist/tools/{confirmation → approval}/allowed-tools-provider/factory.d.ts +2 -2
- package/dist/tools/approval/allowed-tools-provider/factory.d.ts.map +1 -0
- package/dist/tools/{confirmation → approval}/allowed-tools-provider/factory.js +2 -2
- package/dist/tools/approval/allowed-tools-provider/in-memory.d.ts.map +1 -0
- package/dist/tools/{confirmation → approval}/allowed-tools-provider/in-memory.js +1 -1
- package/dist/tools/approval/allowed-tools-provider/storage.cjs +66 -0
- package/dist/tools/{confirmation → approval}/allowed-tools-provider/storage.d.ts +4 -10
- package/dist/tools/approval/allowed-tools-provider/storage.d.ts.map +1 -0
- package/dist/tools/approval/allowed-tools-provider/storage.js +43 -0
- package/dist/tools/approval/allowed-tools-provider/types.cjs +16 -0
- package/dist/tools/approval/allowed-tools-provider/types.d.ts.map +1 -0
- package/dist/tools/approval/allowed-tools-provider/types.js +0 -0
- package/dist/tools/approval/session-tool-policy.cjs +269 -0
- package/dist/tools/approval/session-tool-policy.d.ts +43 -0
- package/dist/tools/approval/session-tool-policy.d.ts.map +1 -0
- package/dist/tools/approval/session-tool-policy.js +245 -0
- package/dist/tools/define-tool.js +1 -1
- package/dist/tools/display-types.js +1 -1
- package/dist/tools/error-codes.cjs +3 -3
- package/dist/tools/error-codes.d.ts +4 -4
- package/dist/tools/error-codes.d.ts.map +1 -1
- package/dist/tools/error-codes.js +4 -4
- package/dist/tools/errors.cjs +12 -12
- package/dist/tools/errors.d.ts +6 -6
- package/dist/tools/errors.d.ts.map +1 -1
- package/dist/tools/errors.js +13 -13
- package/dist/tools/index.cjs +3 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +3 -1
- package/dist/tools/pattern-utils.js +1 -1
- package/dist/tools/presentation/tool-presentation.cjs +182 -0
- package/dist/tools/presentation/tool-presentation.d.ts +51 -0
- package/dist/tools/presentation/tool-presentation.d.ts.map +1 -0
- package/dist/tools/presentation/tool-presentation.js +159 -0
- package/dist/tools/presentation.js +1 -1
- package/dist/tools/schemas.cjs +5 -10
- package/dist/tools/schemas.d.ts +1 -4
- package/dist/tools/schemas.d.ts.map +1 -1
- package/dist/tools/schemas.js +6 -11
- package/dist/tools/session-tool-preferences-store.cjs +12 -28
- package/dist/tools/session-tool-preferences-store.d.ts +4 -7
- package/dist/tools/session-tool-preferences-store.d.ts.map +1 -1
- package/dist/tools/session-tool-preferences-store.js +12 -29
- package/dist/tools/tool-call-metadata.js +1 -1
- package/dist/tools/tool-manager.cjs +871 -834
- package/dist/tools/tool-manager.d.ts +94 -96
- package/dist/tools/tool-manager.d.ts.map +1 -1
- package/dist/tools/tool-manager.js +876 -833
- package/dist/tools/types.d.ts +10 -14
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/utils/api-key-resolver.js +1 -1
- package/dist/utils/async-context.js +1 -1
- package/dist/utils/debug.js +1 -1
- package/dist/utils/defer.js +1 -1
- package/dist/utils/env.js +1 -1
- package/dist/utils/error-conversion.js +1 -1
- package/dist/utils/execution-context.js +1 -1
- package/dist/utils/fs-walk.js +1 -1
- package/dist/utils/path.js +1 -1
- package/dist/utils/redactor.js +1 -1
- package/dist/utils/result.js +1 -1
- package/dist/utils/safe-stringify.js +1 -1
- package/dist/utils/schema.js +1 -1
- package/dist/utils/service-initializer.cjs +37 -33
- package/dist/utils/service-initializer.d.ts +9 -5
- package/dist/utils/service-initializer.d.ts.map +1 -1
- package/dist/utils/service-initializer.js +38 -34
- package/dist/utils/zod-schema-converter.js +1 -1
- package/dist/workspace/error-codes.cjs +5 -1
- package/dist/workspace/error-codes.d.ts +4 -0
- package/dist/workspace/error-codes.d.ts.map +1 -1
- package/dist/workspace/error-codes.js +6 -2
- package/dist/workspace/errors.cjs +43 -0
- package/dist/workspace/errors.d.ts +9 -0
- package/dist/workspace/errors.d.ts.map +1 -1
- package/dist/workspace/errors.js +44 -1
- package/dist/workspace/index.d.ts +1 -1
- package/dist/workspace/index.d.ts.map +1 -1
- package/dist/workspace/index.js +1 -1
- package/dist/workspace/manager.cjs +21 -29
- package/dist/workspace/manager.d.ts +6 -6
- package/dist/workspace/manager.d.ts.map +1 -1
- package/dist/workspace/manager.js +22 -30
- package/dist/workspace/types.d.ts +47 -0
- package/dist/workspace/types.d.ts.map +1 -1
- package/package.json +114 -2
- package/dist/approval/session-approval-store.cjs +0 -91
- package/dist/approval/session-approval-store.d.ts +0 -37
- package/dist/approval/session-approval-store.d.ts.map +0 -1
- package/dist/approval/session-approval-store.js +0 -68
- package/dist/session/history/database.cjs +0 -232
- package/dist/session/history/database.d.ts +0 -41
- package/dist/session/history/database.d.ts.map +0 -1
- package/dist/session/history/database.js +0 -209
- package/dist/session/history/factory.d.ts +0 -11
- package/dist/session/history/factory.d.ts.map +0 -1
- package/dist/session/history/factory.js +0 -8
- package/dist/session/history/memory.d.ts +0 -22
- package/dist/session/history/memory.d.ts.map +0 -1
- package/dist/session/history/memory.js +0 -34
- package/dist/session/history/types.d.ts +0 -26
- package/dist/session/history/types.d.ts.map +0 -1
- package/dist/session/message-queue-store.cjs +0 -75
- package/dist/session/message-queue-store.d.ts +0 -16
- package/dist/session/message-queue-store.d.ts.map +0 -1
- package/dist/session/message-queue-store.js +0 -52
- package/dist/storage/storage-manager.cjs +0 -209
- package/dist/storage/storage-manager.d.ts +0 -77
- package/dist/storage/storage-manager.d.ts.map +0 -1
- package/dist/storage/storage-manager.js +0 -186
- package/dist/tools/confirmation/allowed-tools-provider/factory.d.ts.map +0 -1
- package/dist/tools/confirmation/allowed-tools-provider/in-memory.d.ts.map +0 -1
- package/dist/tools/confirmation/allowed-tools-provider/storage.cjs +0 -69
- package/dist/tools/confirmation/allowed-tools-provider/storage.d.ts.map +0 -1
- package/dist/tools/confirmation/allowed-tools-provider/storage.js +0 -46
- package/dist/tools/confirmation/allowed-tools-provider/types.d.ts.map +0 -1
- /package/dist/{session/history → skills}/types.cjs +0 -0
- /package/dist/{session/history → skills}/types.js +0 -0
- /package/dist/{tools/confirmation/allowed-tools-provider → storage/artifacts}/types.cjs +0 -0
- /package/dist/{tools/confirmation/allowed-tools-provider → storage/artifacts}/types.js +0 -0
- /package/dist/tools/{confirmation → approval}/allowed-tools-provider/in-memory.cjs +0 -0
- /package/dist/tools/{confirmation → approval}/allowed-tools-provider/in-memory.d.ts +0 -0
- /package/dist/tools/{confirmation → approval}/allowed-tools-provider/types.d.ts +0 -0
|
@@ -21,39 +21,44 @@ __export(message_queue_exports, {
|
|
|
21
21
|
MessageQueueService: () => MessageQueueService
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(message_queue_exports);
|
|
24
|
+
var import_queue_clone = require("./queue-clone.js");
|
|
24
25
|
class EphemeralMessageQueueStore {
|
|
25
|
-
async
|
|
26
|
-
void sessionId;
|
|
26
|
+
async listSessionIds() {
|
|
27
27
|
return [];
|
|
28
28
|
}
|
|
29
|
-
async
|
|
30
|
-
void
|
|
31
|
-
|
|
29
|
+
async load(input) {
|
|
30
|
+
void input;
|
|
31
|
+
return [];
|
|
32
|
+
}
|
|
33
|
+
async save(input) {
|
|
34
|
+
void input;
|
|
32
35
|
}
|
|
33
|
-
async delete(
|
|
34
|
-
void
|
|
36
|
+
async delete(input) {
|
|
37
|
+
void input;
|
|
35
38
|
}
|
|
36
39
|
}
|
|
37
40
|
function generateId() {
|
|
38
41
|
return `msg_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`;
|
|
39
42
|
}
|
|
40
43
|
class MessageQueueService {
|
|
41
|
-
constructor(eventBus, logger, sessionId, store) {
|
|
44
|
+
constructor(eventBus, logger, sessionId, store, queueKind = "steer") {
|
|
42
45
|
this.eventBus = eventBus;
|
|
43
46
|
this.logger = logger;
|
|
44
47
|
this.sessionId = sessionId;
|
|
45
48
|
this.store = store;
|
|
49
|
+
this.queueKind = queueKind;
|
|
46
50
|
}
|
|
47
51
|
queue = [];
|
|
48
52
|
mutationLock = Promise.resolve();
|
|
49
53
|
initialized = false;
|
|
50
54
|
initializationPromise = null;
|
|
51
|
-
static createEphemeral(eventBus, logger, sessionId) {
|
|
55
|
+
static createEphemeral(eventBus, logger, sessionId, queueKind = "steer") {
|
|
52
56
|
return new MessageQueueService(
|
|
53
57
|
eventBus,
|
|
54
58
|
logger,
|
|
55
59
|
sessionId,
|
|
56
|
-
new EphemeralMessageQueueStore()
|
|
60
|
+
new EphemeralMessageQueueStore(),
|
|
61
|
+
queueKind
|
|
57
62
|
);
|
|
58
63
|
}
|
|
59
64
|
async initialize() {
|
|
@@ -61,7 +66,7 @@ class MessageQueueService {
|
|
|
61
66
|
if (this.initialized) {
|
|
62
67
|
return;
|
|
63
68
|
}
|
|
64
|
-
this.queue = await this.store.load(this.sessionId);
|
|
69
|
+
this.queue = await this.store.load({ sessionId: this.sessionId });
|
|
65
70
|
if (this.queue.length > 0) {
|
|
66
71
|
this.logger.debug(
|
|
67
72
|
`Restored ${this.queue.length} queued message(s) for session ${this.sessionId}`
|
|
@@ -75,7 +80,21 @@ class MessageQueueService {
|
|
|
75
80
|
await this.initializationPromise;
|
|
76
81
|
}
|
|
77
82
|
async persistQueue() {
|
|
78
|
-
await this.store.save(this.sessionId, this.queue);
|
|
83
|
+
await this.store.save({ sessionId: this.sessionId, queue: this.queue });
|
|
84
|
+
}
|
|
85
|
+
async refreshFromStore() {
|
|
86
|
+
const storedQueue = await this.store.load({ sessionId: this.sessionId });
|
|
87
|
+
const existingIds = new Set(this.queue.map((message) => message.id));
|
|
88
|
+
const externalMessages = storedQueue.filter((message) => !existingIds.has(message.id));
|
|
89
|
+
if (externalMessages.length === 0) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
this.queue = [...this.queue, ...(0, import_queue_clone.cloneQueuedMessages)(externalMessages)].sort(
|
|
93
|
+
(left, right) => left.queuedAt - right.queuedAt
|
|
94
|
+
);
|
|
95
|
+
this.logger.debug(
|
|
96
|
+
`Loaded ${externalMessages.length} externally queued message(s) for session ${this.sessionId}`
|
|
97
|
+
);
|
|
79
98
|
}
|
|
80
99
|
runWithMutationLock(fn) {
|
|
81
100
|
const currentResult = this.mutationLock.catch(() => {
|
|
@@ -99,10 +118,13 @@ class MessageQueueService {
|
|
|
99
118
|
id: generateId(),
|
|
100
119
|
content: message.content,
|
|
101
120
|
queuedAt: Date.now(),
|
|
102
|
-
...message.metadata !== void 0 && {
|
|
121
|
+
...message.metadata !== void 0 && {
|
|
122
|
+
metadata: message.metadata
|
|
123
|
+
},
|
|
103
124
|
...message.kind !== void 0 && { kind: message.kind }
|
|
104
125
|
};
|
|
105
|
-
|
|
126
|
+
const copiedQueuedMsg = (0, import_queue_clone.cloneQueuedMessage)(queuedMsg);
|
|
127
|
+
this.queue.push(copiedQueuedMsg);
|
|
106
128
|
try {
|
|
107
129
|
await this.persistQueue();
|
|
108
130
|
} catch (error) {
|
|
@@ -112,7 +134,8 @@ class MessageQueueService {
|
|
|
112
134
|
this.logger.debug(`Message queued: ${queuedMsg.id}, position: ${this.queue.length}`);
|
|
113
135
|
this.eventBus.emit("message:queued", {
|
|
114
136
|
position: this.queue.length,
|
|
115
|
-
id: queuedMsg.id
|
|
137
|
+
id: queuedMsg.id,
|
|
138
|
+
queue: this.queueKind
|
|
116
139
|
});
|
|
117
140
|
return {
|
|
118
141
|
queued: true,
|
|
@@ -131,19 +154,22 @@ class MessageQueueService {
|
|
|
131
154
|
* If 3 messages are queued: "stop", "try X instead", "also check Y"
|
|
132
155
|
* They become:
|
|
133
156
|
* ```
|
|
134
|
-
*
|
|
157
|
+
* Additional user input received:
|
|
158
|
+
*
|
|
159
|
+
* - stop
|
|
135
160
|
*
|
|
136
|
-
*
|
|
161
|
+
* - try X instead
|
|
137
162
|
*
|
|
138
|
-
*
|
|
163
|
+
* - also check Y
|
|
139
164
|
* ```
|
|
140
165
|
*
|
|
141
166
|
* @returns Coalesced message or null if queue is empty
|
|
142
167
|
*/
|
|
143
168
|
async dequeueAll() {
|
|
144
169
|
return await this.runWithMutationLock(async () => {
|
|
170
|
+
await this.refreshFromStore();
|
|
145
171
|
if (this.queue.length === 0) return null;
|
|
146
|
-
const messages =
|
|
172
|
+
const messages = (0, import_queue_clone.cloneQueuedMessages)(this.queue);
|
|
147
173
|
this.queue = [];
|
|
148
174
|
try {
|
|
149
175
|
await this.persistQueue();
|
|
@@ -158,9 +184,10 @@ class MessageQueueService {
|
|
|
158
184
|
this.eventBus.emit("message:dequeued", {
|
|
159
185
|
count: messages.length,
|
|
160
186
|
ids: messages.map((m) => m.id),
|
|
187
|
+
queue: this.queueKind,
|
|
161
188
|
coalesced: messages.length > 1,
|
|
162
|
-
content: combined.combinedContent,
|
|
163
|
-
messages
|
|
189
|
+
content: (0, import_queue_clone.cloneCoalescedMessage)(combined).combinedContent,
|
|
190
|
+
messages: (0, import_queue_clone.cloneQueuedMessages)(messages)
|
|
164
191
|
});
|
|
165
192
|
return combined;
|
|
166
193
|
});
|
|
@@ -182,32 +209,30 @@ class MessageQueueService {
|
|
|
182
209
|
lastQueuedAt: firstMsg.queuedAt
|
|
183
210
|
};
|
|
184
211
|
}
|
|
185
|
-
const getMessageKind = (message) => message.kind ?? "default";
|
|
186
|
-
const totalUserMessages = messages.filter(
|
|
187
|
-
(message) => getMessageKind(message) !== "background"
|
|
188
|
-
).length;
|
|
189
|
-
const hasBackgroundMessages = messages.some(
|
|
190
|
-
(message) => getMessageKind(message) === "background"
|
|
191
|
-
);
|
|
192
|
-
const getUserPrefix = (index, total, mixed) => {
|
|
193
|
-
if (mixed) {
|
|
194
|
-
return `User follow-up ${index + 1}`;
|
|
195
|
-
}
|
|
196
|
-
if (total <= 1) return null;
|
|
197
|
-
if (total === 2) {
|
|
198
|
-
return index === 0 ? "First" : "Also";
|
|
199
|
-
}
|
|
200
|
-
return `[${index + 1}]`;
|
|
201
|
-
};
|
|
202
212
|
const combinedContent = [];
|
|
203
|
-
let
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
const
|
|
207
|
-
if (
|
|
208
|
-
|
|
213
|
+
let hasEntries = false;
|
|
214
|
+
let inUserSection = false;
|
|
215
|
+
for (const msg of messages) {
|
|
216
|
+
const isUserMessage = msg.kind !== "background";
|
|
217
|
+
if (isUserMessage && !inUserSection) {
|
|
218
|
+
if (hasEntries) {
|
|
219
|
+
combinedContent.push({ type: "text", text: "\n\n" });
|
|
220
|
+
}
|
|
221
|
+
combinedContent.push({ type: "text", text: "Additional user input received:" });
|
|
222
|
+
combinedContent.push({ type: "text", text: "\n\n" });
|
|
223
|
+
inUserSection = true;
|
|
224
|
+
hasEntries = false;
|
|
225
|
+
}
|
|
226
|
+
let prefixText = isUserMessage ? "- " : "";
|
|
227
|
+
if (hasEntries && !isUserMessage) {
|
|
228
|
+
combinedContent.push({ type: "text", text: "\n\n" });
|
|
229
|
+
inUserSection = false;
|
|
230
|
+
} else if (hasEntries && isUserMessage) {
|
|
231
|
+
prefixText = `
|
|
232
|
+
|
|
233
|
+
${prefixText}`;
|
|
209
234
|
}
|
|
210
|
-
|
|
235
|
+
const entryStartIndex = combinedContent.length;
|
|
211
236
|
for (const part of msg.content) {
|
|
212
237
|
if (part.type === "text") {
|
|
213
238
|
if (prefixText) {
|
|
@@ -227,8 +252,8 @@ class MessageQueueService {
|
|
|
227
252
|
if (prefixText && msg.content.length === 0) {
|
|
228
253
|
combinedContent.push({ type: "text", text: prefixText + "[empty message]" });
|
|
229
254
|
}
|
|
230
|
-
if (
|
|
231
|
-
|
|
255
|
+
if (combinedContent.length > entryStartIndex) {
|
|
256
|
+
hasEntries = true;
|
|
232
257
|
}
|
|
233
258
|
}
|
|
234
259
|
const firstMessage = messages[0];
|
|
@@ -249,6 +274,11 @@ class MessageQueueService {
|
|
|
249
274
|
hasPending() {
|
|
250
275
|
return this.queue.length > 0;
|
|
251
276
|
}
|
|
277
|
+
async refresh() {
|
|
278
|
+
await this.runWithMutationLock(async () => {
|
|
279
|
+
await this.refreshFromStore();
|
|
280
|
+
});
|
|
281
|
+
}
|
|
252
282
|
/**
|
|
253
283
|
* Get the number of pending messages.
|
|
254
284
|
*/
|
|
@@ -276,16 +306,17 @@ class MessageQueueService {
|
|
|
276
306
|
}
|
|
277
307
|
/**
|
|
278
308
|
* Get all queued messages (for UI display).
|
|
279
|
-
* Returns
|
|
309
|
+
* Returns defensive copies to prevent external mutation.
|
|
280
310
|
*/
|
|
281
311
|
getAll() {
|
|
282
|
-
return
|
|
312
|
+
return (0, import_queue_clone.cloneQueuedMessages)(this.queue);
|
|
283
313
|
}
|
|
284
314
|
/**
|
|
285
315
|
* Get a single queued message by ID.
|
|
286
316
|
*/
|
|
287
317
|
get(id) {
|
|
288
|
-
|
|
318
|
+
const message = this.queue.find((m) => m.id === id);
|
|
319
|
+
return message ? (0, import_queue_clone.cloneQueuedMessage)(message) : void 0;
|
|
289
320
|
}
|
|
290
321
|
/**
|
|
291
322
|
* Remove a single queued message by ID.
|
|
@@ -308,7 +339,7 @@ class MessageQueueService {
|
|
|
308
339
|
throw error;
|
|
309
340
|
}
|
|
310
341
|
this.logger.debug(`Message removed: ${id}, remaining: ${this.queue.length}`);
|
|
311
|
-
this.eventBus.emit("message:removed", { id });
|
|
342
|
+
this.eventBus.emit("message:removed", { id, queue: this.queueKind });
|
|
312
343
|
return true;
|
|
313
344
|
});
|
|
314
345
|
}
|
|
@@ -2,8 +2,8 @@ import type { SessionEventBus } from '../events/index.js';
|
|
|
2
2
|
import type { QueuedMessage, CoalescedMessage } from './types.js';
|
|
3
3
|
import type { ContentPart } from '../context/types.js';
|
|
4
4
|
import type { Logger } from '../logger/v2/types.js';
|
|
5
|
-
import type {
|
|
6
|
-
type MessageQueueBackingStore =
|
|
5
|
+
import type { SessionMessageQueueStore } from '../storage/message-queue/types.js';
|
|
6
|
+
type MessageQueueBackingStore = SessionMessageQueueStore;
|
|
7
7
|
/**
|
|
8
8
|
* Input for enqueuing a user message to the queue.
|
|
9
9
|
* (Not to be confused with UserMessage from context/types.ts which represents
|
|
@@ -50,14 +50,16 @@ export declare class MessageQueueService {
|
|
|
50
50
|
private logger;
|
|
51
51
|
private sessionId;
|
|
52
52
|
private store;
|
|
53
|
+
private queueKind;
|
|
53
54
|
private queue;
|
|
54
55
|
private mutationLock;
|
|
55
56
|
private initialized;
|
|
56
57
|
private initializationPromise;
|
|
57
|
-
static createEphemeral(eventBus: SessionEventBus, logger: Logger, sessionId: string): MessageQueueService;
|
|
58
|
-
constructor(eventBus: SessionEventBus, logger: Logger, sessionId: string, store: MessageQueueBackingStore);
|
|
58
|
+
static createEphemeral(eventBus: SessionEventBus, logger: Logger, sessionId: string, queueKind?: 'steer' | 'follow-up'): MessageQueueService;
|
|
59
|
+
constructor(eventBus: SessionEventBus, logger: Logger, sessionId: string, store: MessageQueueBackingStore, queueKind?: 'steer' | 'follow-up');
|
|
59
60
|
initialize(): Promise<void>;
|
|
60
61
|
private persistQueue;
|
|
62
|
+
private refreshFromStore;
|
|
61
63
|
private runWithMutationLock;
|
|
62
64
|
/**
|
|
63
65
|
* Add a message to the queue.
|
|
@@ -81,11 +83,13 @@ export declare class MessageQueueService {
|
|
|
81
83
|
* If 3 messages are queued: "stop", "try X instead", "also check Y"
|
|
82
84
|
* They become:
|
|
83
85
|
* ```
|
|
84
|
-
*
|
|
86
|
+
* Additional user input received:
|
|
85
87
|
*
|
|
86
|
-
*
|
|
88
|
+
* - stop
|
|
87
89
|
*
|
|
88
|
-
*
|
|
90
|
+
* - try X instead
|
|
91
|
+
*
|
|
92
|
+
* - also check Y
|
|
89
93
|
* ```
|
|
90
94
|
*
|
|
91
95
|
* @returns Coalesced message or null if queue is empty
|
|
@@ -100,6 +104,7 @@ export declare class MessageQueueService {
|
|
|
100
104
|
* Check if there are pending messages in the queue.
|
|
101
105
|
*/
|
|
102
106
|
hasPending(): boolean;
|
|
107
|
+
refresh(): Promise<void>;
|
|
103
108
|
/**
|
|
104
109
|
* Get the number of pending messages.
|
|
105
110
|
*/
|
|
@@ -111,7 +116,7 @@ export declare class MessageQueueService {
|
|
|
111
116
|
clear(): Promise<void>;
|
|
112
117
|
/**
|
|
113
118
|
* Get all queued messages (for UI display).
|
|
114
|
-
* Returns
|
|
119
|
+
* Returns defensive copies to prevent external mutation.
|
|
115
120
|
*/
|
|
116
121
|
getAll(): QueuedMessage[];
|
|
117
122
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-queue.d.ts","sourceRoot":"","sources":["../../src/session/message-queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"message-queue.d.ts","sourceRoot":"","sources":["../../src/session/message-queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAElF,KAAK,wBAAwB,GAAG,wBAAwB,CAAC;AA4BzD;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC7B,2DAA2D;IAC3D,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,sCAAsC;IACtC,IAAI,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,mBAAmB;IAsBxB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,SAAS;IAzBrB,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,qBAAqB,CAA8B;IAE3D,MAAM,CAAC,eAAe,CAClB,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,OAAO,GAAG,WAAqB,GAC3C,mBAAmB;gBAWV,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,wBAAwB,EAC/B,SAAS,GAAE,OAAO,GAAG,WAAqB;IAGhD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAsBnB,YAAY;YAIZ,gBAAgB;IAiB9B,OAAO,CAAC,mBAAmB;IAS3B;;;;;;OAMG;IACG,OAAO,CACT,OAAO,EAAE,gBAAgB,GAC1B,OAAO,CAAC;QAAE,MAAM,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAsC1D;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,UAAU,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAkCpD;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAoFhB;;OAEG;IACH,UAAU,IAAI,OAAO;IAIf,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAM9B;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB5B;;;OAGG;IACH,MAAM,IAAI,aAAa,EAAE;IAIzB;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAK1C;;;OAGG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAwB7C"}
|
|
@@ -1,37 +1,42 @@
|
|
|
1
|
-
import "../chunk-
|
|
1
|
+
import "../chunk-C6A6W6XS.js";
|
|
2
|
+
import { cloneCoalescedMessage, cloneQueuedMessage, cloneQueuedMessages } from "./queue-clone.js";
|
|
2
3
|
class EphemeralMessageQueueStore {
|
|
3
|
-
async
|
|
4
|
-
void sessionId;
|
|
4
|
+
async listSessionIds() {
|
|
5
5
|
return [];
|
|
6
6
|
}
|
|
7
|
-
async
|
|
8
|
-
void
|
|
9
|
-
|
|
7
|
+
async load(input) {
|
|
8
|
+
void input;
|
|
9
|
+
return [];
|
|
10
|
+
}
|
|
11
|
+
async save(input) {
|
|
12
|
+
void input;
|
|
10
13
|
}
|
|
11
|
-
async delete(
|
|
12
|
-
void
|
|
14
|
+
async delete(input) {
|
|
15
|
+
void input;
|
|
13
16
|
}
|
|
14
17
|
}
|
|
15
18
|
function generateId() {
|
|
16
19
|
return `msg_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`;
|
|
17
20
|
}
|
|
18
21
|
class MessageQueueService {
|
|
19
|
-
constructor(eventBus, logger, sessionId, store) {
|
|
22
|
+
constructor(eventBus, logger, sessionId, store, queueKind = "steer") {
|
|
20
23
|
this.eventBus = eventBus;
|
|
21
24
|
this.logger = logger;
|
|
22
25
|
this.sessionId = sessionId;
|
|
23
26
|
this.store = store;
|
|
27
|
+
this.queueKind = queueKind;
|
|
24
28
|
}
|
|
25
29
|
queue = [];
|
|
26
30
|
mutationLock = Promise.resolve();
|
|
27
31
|
initialized = false;
|
|
28
32
|
initializationPromise = null;
|
|
29
|
-
static createEphemeral(eventBus, logger, sessionId) {
|
|
33
|
+
static createEphemeral(eventBus, logger, sessionId, queueKind = "steer") {
|
|
30
34
|
return new MessageQueueService(
|
|
31
35
|
eventBus,
|
|
32
36
|
logger,
|
|
33
37
|
sessionId,
|
|
34
|
-
new EphemeralMessageQueueStore()
|
|
38
|
+
new EphemeralMessageQueueStore(),
|
|
39
|
+
queueKind
|
|
35
40
|
);
|
|
36
41
|
}
|
|
37
42
|
async initialize() {
|
|
@@ -39,7 +44,7 @@ class MessageQueueService {
|
|
|
39
44
|
if (this.initialized) {
|
|
40
45
|
return;
|
|
41
46
|
}
|
|
42
|
-
this.queue = await this.store.load(this.sessionId);
|
|
47
|
+
this.queue = await this.store.load({ sessionId: this.sessionId });
|
|
43
48
|
if (this.queue.length > 0) {
|
|
44
49
|
this.logger.debug(
|
|
45
50
|
`Restored ${this.queue.length} queued message(s) for session ${this.sessionId}`
|
|
@@ -53,7 +58,21 @@ class MessageQueueService {
|
|
|
53
58
|
await this.initializationPromise;
|
|
54
59
|
}
|
|
55
60
|
async persistQueue() {
|
|
56
|
-
await this.store.save(this.sessionId, this.queue);
|
|
61
|
+
await this.store.save({ sessionId: this.sessionId, queue: this.queue });
|
|
62
|
+
}
|
|
63
|
+
async refreshFromStore() {
|
|
64
|
+
const storedQueue = await this.store.load({ sessionId: this.sessionId });
|
|
65
|
+
const existingIds = new Set(this.queue.map((message) => message.id));
|
|
66
|
+
const externalMessages = storedQueue.filter((message) => !existingIds.has(message.id));
|
|
67
|
+
if (externalMessages.length === 0) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
this.queue = [...this.queue, ...cloneQueuedMessages(externalMessages)].sort(
|
|
71
|
+
(left, right) => left.queuedAt - right.queuedAt
|
|
72
|
+
);
|
|
73
|
+
this.logger.debug(
|
|
74
|
+
`Loaded ${externalMessages.length} externally queued message(s) for session ${this.sessionId}`
|
|
75
|
+
);
|
|
57
76
|
}
|
|
58
77
|
runWithMutationLock(fn) {
|
|
59
78
|
const currentResult = this.mutationLock.catch(() => {
|
|
@@ -77,10 +96,13 @@ class MessageQueueService {
|
|
|
77
96
|
id: generateId(),
|
|
78
97
|
content: message.content,
|
|
79
98
|
queuedAt: Date.now(),
|
|
80
|
-
...message.metadata !== void 0 && {
|
|
99
|
+
...message.metadata !== void 0 && {
|
|
100
|
+
metadata: message.metadata
|
|
101
|
+
},
|
|
81
102
|
...message.kind !== void 0 && { kind: message.kind }
|
|
82
103
|
};
|
|
83
|
-
|
|
104
|
+
const copiedQueuedMsg = cloneQueuedMessage(queuedMsg);
|
|
105
|
+
this.queue.push(copiedQueuedMsg);
|
|
84
106
|
try {
|
|
85
107
|
await this.persistQueue();
|
|
86
108
|
} catch (error) {
|
|
@@ -90,7 +112,8 @@ class MessageQueueService {
|
|
|
90
112
|
this.logger.debug(`Message queued: ${queuedMsg.id}, position: ${this.queue.length}`);
|
|
91
113
|
this.eventBus.emit("message:queued", {
|
|
92
114
|
position: this.queue.length,
|
|
93
|
-
id: queuedMsg.id
|
|
115
|
+
id: queuedMsg.id,
|
|
116
|
+
queue: this.queueKind
|
|
94
117
|
});
|
|
95
118
|
return {
|
|
96
119
|
queued: true,
|
|
@@ -109,19 +132,22 @@ class MessageQueueService {
|
|
|
109
132
|
* If 3 messages are queued: "stop", "try X instead", "also check Y"
|
|
110
133
|
* They become:
|
|
111
134
|
* ```
|
|
112
|
-
*
|
|
135
|
+
* Additional user input received:
|
|
136
|
+
*
|
|
137
|
+
* - stop
|
|
113
138
|
*
|
|
114
|
-
*
|
|
139
|
+
* - try X instead
|
|
115
140
|
*
|
|
116
|
-
*
|
|
141
|
+
* - also check Y
|
|
117
142
|
* ```
|
|
118
143
|
*
|
|
119
144
|
* @returns Coalesced message or null if queue is empty
|
|
120
145
|
*/
|
|
121
146
|
async dequeueAll() {
|
|
122
147
|
return await this.runWithMutationLock(async () => {
|
|
148
|
+
await this.refreshFromStore();
|
|
123
149
|
if (this.queue.length === 0) return null;
|
|
124
|
-
const messages =
|
|
150
|
+
const messages = cloneQueuedMessages(this.queue);
|
|
125
151
|
this.queue = [];
|
|
126
152
|
try {
|
|
127
153
|
await this.persistQueue();
|
|
@@ -136,9 +162,10 @@ class MessageQueueService {
|
|
|
136
162
|
this.eventBus.emit("message:dequeued", {
|
|
137
163
|
count: messages.length,
|
|
138
164
|
ids: messages.map((m) => m.id),
|
|
165
|
+
queue: this.queueKind,
|
|
139
166
|
coalesced: messages.length > 1,
|
|
140
|
-
content: combined.combinedContent,
|
|
141
|
-
messages
|
|
167
|
+
content: cloneCoalescedMessage(combined).combinedContent,
|
|
168
|
+
messages: cloneQueuedMessages(messages)
|
|
142
169
|
});
|
|
143
170
|
return combined;
|
|
144
171
|
});
|
|
@@ -160,32 +187,30 @@ class MessageQueueService {
|
|
|
160
187
|
lastQueuedAt: firstMsg.queuedAt
|
|
161
188
|
};
|
|
162
189
|
}
|
|
163
|
-
const getMessageKind = (message) => message.kind ?? "default";
|
|
164
|
-
const totalUserMessages = messages.filter(
|
|
165
|
-
(message) => getMessageKind(message) !== "background"
|
|
166
|
-
).length;
|
|
167
|
-
const hasBackgroundMessages = messages.some(
|
|
168
|
-
(message) => getMessageKind(message) === "background"
|
|
169
|
-
);
|
|
170
|
-
const getUserPrefix = (index, total, mixed) => {
|
|
171
|
-
if (mixed) {
|
|
172
|
-
return `User follow-up ${index + 1}`;
|
|
173
|
-
}
|
|
174
|
-
if (total <= 1) return null;
|
|
175
|
-
if (total === 2) {
|
|
176
|
-
return index === 0 ? "First" : "Also";
|
|
177
|
-
}
|
|
178
|
-
return `[${index + 1}]`;
|
|
179
|
-
};
|
|
180
190
|
const combinedContent = [];
|
|
181
|
-
let
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
const
|
|
185
|
-
if (
|
|
186
|
-
|
|
191
|
+
let hasEntries = false;
|
|
192
|
+
let inUserSection = false;
|
|
193
|
+
for (const msg of messages) {
|
|
194
|
+
const isUserMessage = msg.kind !== "background";
|
|
195
|
+
if (isUserMessage && !inUserSection) {
|
|
196
|
+
if (hasEntries) {
|
|
197
|
+
combinedContent.push({ type: "text", text: "\n\n" });
|
|
198
|
+
}
|
|
199
|
+
combinedContent.push({ type: "text", text: "Additional user input received:" });
|
|
200
|
+
combinedContent.push({ type: "text", text: "\n\n" });
|
|
201
|
+
inUserSection = true;
|
|
202
|
+
hasEntries = false;
|
|
203
|
+
}
|
|
204
|
+
let prefixText = isUserMessage ? "- " : "";
|
|
205
|
+
if (hasEntries && !isUserMessage) {
|
|
206
|
+
combinedContent.push({ type: "text", text: "\n\n" });
|
|
207
|
+
inUserSection = false;
|
|
208
|
+
} else if (hasEntries && isUserMessage) {
|
|
209
|
+
prefixText = `
|
|
210
|
+
|
|
211
|
+
${prefixText}`;
|
|
187
212
|
}
|
|
188
|
-
|
|
213
|
+
const entryStartIndex = combinedContent.length;
|
|
189
214
|
for (const part of msg.content) {
|
|
190
215
|
if (part.type === "text") {
|
|
191
216
|
if (prefixText) {
|
|
@@ -205,8 +230,8 @@ class MessageQueueService {
|
|
|
205
230
|
if (prefixText && msg.content.length === 0) {
|
|
206
231
|
combinedContent.push({ type: "text", text: prefixText + "[empty message]" });
|
|
207
232
|
}
|
|
208
|
-
if (
|
|
209
|
-
|
|
233
|
+
if (combinedContent.length > entryStartIndex) {
|
|
234
|
+
hasEntries = true;
|
|
210
235
|
}
|
|
211
236
|
}
|
|
212
237
|
const firstMessage = messages[0];
|
|
@@ -227,6 +252,11 @@ class MessageQueueService {
|
|
|
227
252
|
hasPending() {
|
|
228
253
|
return this.queue.length > 0;
|
|
229
254
|
}
|
|
255
|
+
async refresh() {
|
|
256
|
+
await this.runWithMutationLock(async () => {
|
|
257
|
+
await this.refreshFromStore();
|
|
258
|
+
});
|
|
259
|
+
}
|
|
230
260
|
/**
|
|
231
261
|
* Get the number of pending messages.
|
|
232
262
|
*/
|
|
@@ -254,16 +284,17 @@ class MessageQueueService {
|
|
|
254
284
|
}
|
|
255
285
|
/**
|
|
256
286
|
* Get all queued messages (for UI display).
|
|
257
|
-
* Returns
|
|
287
|
+
* Returns defensive copies to prevent external mutation.
|
|
258
288
|
*/
|
|
259
289
|
getAll() {
|
|
260
|
-
return
|
|
290
|
+
return cloneQueuedMessages(this.queue);
|
|
261
291
|
}
|
|
262
292
|
/**
|
|
263
293
|
* Get a single queued message by ID.
|
|
264
294
|
*/
|
|
265
295
|
get(id) {
|
|
266
|
-
|
|
296
|
+
const message = this.queue.find((m) => m.id === id);
|
|
297
|
+
return message ? cloneQueuedMessage(message) : void 0;
|
|
267
298
|
}
|
|
268
299
|
/**
|
|
269
300
|
* Remove a single queued message by ID.
|
|
@@ -286,7 +317,7 @@ class MessageQueueService {
|
|
|
286
317
|
throw error;
|
|
287
318
|
}
|
|
288
319
|
this.logger.debug(`Message removed: ${id}, remaining: ${this.queue.length}`);
|
|
289
|
-
this.eventBus.emit("message:removed", { id });
|
|
320
|
+
this.eventBus.emit("message:removed", { id, queue: this.queueKind });
|
|
290
321
|
return true;
|
|
291
322
|
});
|
|
292
323
|
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var queue_clone_exports = {};
|
|
20
|
+
__export(queue_clone_exports, {
|
|
21
|
+
cloneCoalescedMessage: () => cloneCoalescedMessage,
|
|
22
|
+
cloneQueuedMessage: () => cloneQueuedMessage,
|
|
23
|
+
cloneQueuedMessages: () => cloneQueuedMessages
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(queue_clone_exports);
|
|
26
|
+
var import_content_clone = require("../context/content-clone.js");
|
|
27
|
+
function cloneQueuedMessage(message) {
|
|
28
|
+
return {
|
|
29
|
+
...message,
|
|
30
|
+
content: (0, import_content_clone.cloneContentParts)(message.content),
|
|
31
|
+
...message.metadata !== void 0 ? { metadata: structuredClone(message.metadata) } : {}
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function cloneQueuedMessages(messages) {
|
|
35
|
+
return messages.map(cloneQueuedMessage);
|
|
36
|
+
}
|
|
37
|
+
function cloneCoalescedMessage(message) {
|
|
38
|
+
return {
|
|
39
|
+
messages: cloneQueuedMessages(message.messages),
|
|
40
|
+
combinedContent: (0, import_content_clone.cloneContentParts)(message.combinedContent),
|
|
41
|
+
firstQueuedAt: message.firstQueuedAt,
|
|
42
|
+
lastQueuedAt: message.lastQueuedAt
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
46
|
+
0 && (module.exports = {
|
|
47
|
+
cloneCoalescedMessage,
|
|
48
|
+
cloneQueuedMessage,
|
|
49
|
+
cloneQueuedMessages
|
|
50
|
+
});
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CoalescedMessage, QueuedMessage } from './types.js';
|
|
2
|
+
export declare function cloneQueuedMessage(message: QueuedMessage): QueuedMessage;
|
|
3
|
+
export declare function cloneQueuedMessages(messages: QueuedMessage[]): QueuedMessage[];
|
|
4
|
+
export declare function cloneCoalescedMessage(message: CoalescedMessage): CoalescedMessage;
|
|
5
|
+
//# sourceMappingURL=queue-clone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-clone.d.ts","sourceRoot":"","sources":["../../src/session/queue-clone.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAElE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAMxE;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAE9E;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,GAAG,gBAAgB,CAOjF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import "../chunk-C6A6W6XS.js";
|
|
2
|
+
import { cloneContentParts } from "../context/content-clone.js";
|
|
3
|
+
function cloneQueuedMessage(message) {
|
|
4
|
+
return {
|
|
5
|
+
...message,
|
|
6
|
+
content: cloneContentParts(message.content),
|
|
7
|
+
...message.metadata !== void 0 ? { metadata: structuredClone(message.metadata) } : {}
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
function cloneQueuedMessages(messages) {
|
|
11
|
+
return messages.map(cloneQueuedMessage);
|
|
12
|
+
}
|
|
13
|
+
function cloneCoalescedMessage(message) {
|
|
14
|
+
return {
|
|
15
|
+
messages: cloneQueuedMessages(message.messages),
|
|
16
|
+
combinedContent: cloneContentParts(message.combinedContent),
|
|
17
|
+
firstQueuedAt: message.firstQueuedAt,
|
|
18
|
+
lastQueuedAt: message.lastQueuedAt
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export {
|
|
22
|
+
cloneCoalescedMessage,
|
|
23
|
+
cloneQueuedMessage,
|
|
24
|
+
cloneQueuedMessages
|
|
25
|
+
};
|