@trigger.dev/sdk 0.0.0-python-preview-20250226140121 → 0.0.0-rc-4-8-0-20261021151928
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 +29 -9
- package/dist/commonjs/imports/ai-runtime-cjs.cjs.map +1 -0
- package/dist/commonjs/imports/ai-runtime.d.ts +1 -0
- package/dist/commonjs/imports/ai-runtime.js +31 -0
- package/dist/commonjs/imports/uncrypto.js +4 -4
- package/dist/commonjs/package.json +2 -1
- package/dist/commonjs/v3/agentSkillsRuntime.d.ts +28 -0
- package/dist/commonjs/v3/agentSkillsRuntime.js +173 -0
- package/dist/commonjs/v3/agentSkillsRuntime.js.map +1 -0
- package/dist/commonjs/v3/ai-shared.d.ts +156 -0
- package/dist/commonjs/v3/ai-shared.js +215 -0
- package/dist/commonjs/v3/ai-shared.js.map +1 -0
- package/dist/commonjs/v3/ai.d.ts +4225 -0
- package/dist/commonjs/v3/ai.js +11569 -0
- package/dist/commonjs/v3/ai.js.map +1 -0
- package/dist/commonjs/v3/aiAutoTelemetry.d.ts +2 -0
- package/dist/commonjs/v3/aiAutoTelemetry.js +81 -0
- package/dist/commonjs/v3/aiAutoTelemetry.js.map +1 -0
- package/dist/commonjs/v3/auth.d.ts +71 -10
- package/dist/commonjs/v3/auth.js +85 -19
- package/dist/commonjs/v3/auth.js.map +1 -1
- package/dist/commonjs/v3/batch.d.ts +3 -3
- package/dist/commonjs/v3/batch.js.map +1 -1
- package/dist/commonjs/v3/cache.js.map +1 -1
- package/dist/commonjs/v3/chat-client.d.ts +324 -0
- package/dist/commonjs/v3/chat-client.js +774 -0
- package/dist/commonjs/v3/chat-client.js.map +1 -0
- package/dist/commonjs/v3/chat-react.d.ts +244 -0
- package/dist/commonjs/v3/chat-react.js +463 -0
- package/dist/commonjs/v3/chat-react.js.map +1 -0
- package/dist/commonjs/v3/chat-server.d.ts +350 -0
- package/dist/commonjs/v3/chat-server.js +965 -0
- package/dist/commonjs/v3/chat-server.js.map +1 -0
- package/dist/commonjs/v3/chat-tab-coordinator.d.ts +65 -0
- package/dist/commonjs/v3/chat-tab-coordinator.js +235 -0
- package/dist/commonjs/v3/chat-tab-coordinator.js.map +1 -0
- package/dist/commonjs/v3/chat.d.ts +792 -0
- package/dist/commonjs/v3/chat.js +1662 -0
- package/dist/commonjs/v3/chat.js.map +1 -0
- package/dist/commonjs/v3/chatRouteWait.d.ts +21 -0
- package/dist/commonjs/v3/chatRouteWait.js +43 -0
- package/dist/commonjs/v3/chatRouteWait.js.map +1 -0
- package/dist/commonjs/v3/chatSnapshotIo.d.ts +2 -0
- package/dist/commonjs/v3/chatSnapshotIo.js +173 -0
- package/dist/commonjs/v3/chatSnapshotIo.js.map +1 -0
- package/dist/commonjs/v3/chatVersionSkew.d.ts +12 -0
- package/dist/commonjs/v3/chatVersionSkew.js +30 -0
- package/dist/commonjs/v3/chatVersionSkew.js.map +1 -0
- package/dist/commonjs/v3/compactionResponse.d.ts +9 -0
- package/dist/commonjs/v3/compactionResponse.js +37 -0
- package/dist/commonjs/v3/compactionResponse.js.map +1 -0
- package/dist/commonjs/v3/concurrency-shared.d.ts +13 -0
- package/dist/commonjs/v3/concurrency-shared.js +35 -0
- package/dist/commonjs/v3/concurrency-shared.js.map +1 -0
- package/dist/commonjs/v3/concurrencyLimits.d.ts +103 -0
- package/dist/commonjs/v3/concurrencyLimits.js +134 -0
- package/dist/commonjs/v3/concurrencyLimits.js.map +1 -0
- package/dist/commonjs/v3/config.js.map +1 -1
- package/dist/commonjs/v3/deployments.d.ts +25 -0
- package/dist/commonjs/v3/deployments.js +37 -0
- package/dist/commonjs/v3/deployments.js.map +1 -0
- package/dist/commonjs/v3/envvars.d.ts +5 -5
- package/dist/commonjs/v3/envvars.js.map +1 -1
- package/dist/commonjs/v3/externalDeploymentId.d.ts +23 -0
- package/dist/commonjs/v3/externalDeploymentId.js +43 -0
- package/dist/commonjs/v3/externalDeploymentId.js.map +1 -0
- package/dist/commonjs/v3/heartbeats.d.ts +37 -0
- package/dist/commonjs/v3/heartbeats.js +45 -0
- package/dist/commonjs/v3/heartbeats.js.map +1 -0
- package/dist/commonjs/v3/hooks.d.ts +26 -0
- package/dist/commonjs/v3/hooks.js +79 -0
- package/dist/commonjs/v3/hooks.js.map +1 -0
- package/dist/commonjs/v3/idempotencyKeys.d.ts +2 -1
- package/dist/commonjs/v3/idempotencyKeys.js +1 -0
- package/dist/commonjs/v3/idempotencyKeys.js.map +1 -1
- package/dist/commonjs/v3/index.d.ts +20 -5
- package/dist/commonjs/v3/index.js +56 -20
- package/dist/commonjs/v3/index.js.map +1 -1
- package/dist/commonjs/v3/locals.d.ts +3 -0
- package/dist/commonjs/v3/locals.js +6 -0
- package/dist/commonjs/v3/locals.js.map +1 -0
- package/dist/commonjs/v3/managedChatResponse.d.ts +44 -0
- package/dist/commonjs/v3/managedChatResponse.js +221 -0
- package/dist/commonjs/v3/managedChatResponse.js.map +1 -0
- package/dist/commonjs/v3/metadata.d.ts +5 -2
- package/dist/commonjs/v3/metadata.js +8 -1
- package/dist/commonjs/v3/metadata.js.map +1 -1
- package/dist/commonjs/v3/modelFileDownload.d.ts +10 -0
- package/dist/commonjs/v3/modelFileDownload.js +164 -0
- package/dist/commonjs/v3/modelFileDownload.js.map +1 -0
- package/dist/commonjs/v3/otel.d.ts +4 -0
- package/dist/commonjs/v3/otel.js +12 -0
- package/dist/commonjs/v3/otel.js.map +1 -0
- package/dist/commonjs/v3/prompt.d.ts +38 -0
- package/dist/commonjs/v3/prompt.js +146 -0
- package/dist/commonjs/v3/prompt.js.map +1 -0
- package/dist/commonjs/v3/promptManagement.d.ts +26 -0
- package/dist/commonjs/v3/promptManagement.js +180 -0
- package/dist/commonjs/v3/promptManagement.js.map +1 -0
- package/dist/commonjs/v3/prompts.d.ts +3 -0
- package/dist/commonjs/v3/prompts.js +15 -0
- package/dist/commonjs/v3/prompts.js.map +1 -0
- package/dist/commonjs/v3/query.d.ts +545 -0
- package/dist/commonjs/v3/query.js +163 -0
- package/dist/commonjs/v3/query.js.map +1 -0
- package/dist/commonjs/v3/queues.d.ts +107 -0
- package/dist/commonjs/v3/queues.js +225 -0
- package/dist/commonjs/v3/queues.js.map +1 -0
- package/dist/commonjs/v3/retry.d.ts +6 -2
- package/dist/commonjs/v3/retry.js +34 -23
- package/dist/commonjs/v3/retry.js.map +1 -1
- package/dist/commonjs/v3/runs.d.ts +182 -101
- package/dist/commonjs/v3/runs.js +99 -5
- package/dist/commonjs/v3/runs.js.map +1 -1
- package/dist/commonjs/v3/schedules/api.d.ts +8 -1
- package/dist/commonjs/v3/schedules/index.d.ts +29 -9
- package/dist/commonjs/v3/schedules/index.js +5 -1
- package/dist/commonjs/v3/schedules/index.js.map +1 -1
- package/dist/commonjs/v3/schemas.d.ts +1 -0
- package/dist/commonjs/{integrations.js → v3/schemas.js} +1 -1
- package/dist/commonjs/v3/schemas.js.map +1 -0
- package/dist/commonjs/v3/sessionTracing.d.ts +7 -0
- package/dist/commonjs/v3/sessionTracing.js +44 -0
- package/dist/commonjs/v3/sessionTracing.js.map +1 -0
- package/dist/commonjs/v3/sessions.d.ts +268 -0
- package/dist/commonjs/v3/sessions.js +776 -0
- package/dist/commonjs/v3/sessions.js.map +1 -0
- package/dist/commonjs/v3/shared.d.ts +129 -24
- package/dist/commonjs/v3/shared.js +1527 -689
- package/dist/commonjs/v3/shared.js.map +1 -1
- package/dist/commonjs/v3/skill.d.ts +99 -0
- package/dist/commonjs/v3/skill.js +165 -0
- package/dist/commonjs/v3/skill.js.map +1 -0
- package/dist/commonjs/v3/skills.d.ts +2 -0
- package/dist/commonjs/v3/skills.js +6 -0
- package/dist/commonjs/v3/skills.js.map +1 -0
- package/dist/commonjs/v3/steeringContext.d.ts +41 -0
- package/dist/commonjs/v3/steeringContext.js +118 -0
- package/dist/commonjs/v3/steeringContext.js.map +1 -0
- package/dist/commonjs/v3/streams.d.ts +298 -0
- package/dist/commonjs/v3/streams.js +584 -0
- package/dist/commonjs/v3/streams.js.map +1 -0
- package/dist/commonjs/v3/tasks.d.ts +19 -4
- package/dist/commonjs/v3/tasks.js +15 -1
- package/dist/commonjs/v3/tasks.js.map +1 -1
- package/dist/commonjs/v3/test/index.d.ts +5 -0
- package/dist/commonjs/v3/test/index.js +23 -0
- package/dist/commonjs/v3/test/index.js.map +1 -0
- package/dist/commonjs/v3/test/mock-channel-connector.d.ts +172 -0
- package/dist/commonjs/v3/test/mock-channel-connector.js +173 -0
- package/dist/commonjs/v3/test/mock-channel-connector.js.map +1 -0
- package/dist/commonjs/v3/test/mock-chat-agent.d.ts +388 -0
- package/dist/commonjs/v3/test/mock-chat-agent.js +689 -0
- package/dist/commonjs/v3/test/mock-chat-agent.js.map +1 -0
- package/dist/commonjs/v3/test/setup-catalog.d.ts +1 -0
- package/dist/commonjs/v3/test/setup-catalog.js +18 -0
- package/dist/commonjs/v3/test/setup-catalog.js.map +1 -0
- package/dist/commonjs/v3/test/test-session-handle.d.ts +24 -0
- package/dist/commonjs/v3/test/test-session-handle.js +271 -0
- package/dist/commonjs/v3/test/test-session-handle.js.map +1 -0
- package/dist/commonjs/v3/test/transcript-storage-tests.d.ts +40 -0
- package/dist/commonjs/v3/test/transcript-storage-tests.js +258 -0
- package/dist/commonjs/v3/test/transcript-storage-tests.js.map +1 -0
- package/dist/commonjs/v3/toolResultOrder.d.ts +15 -0
- package/dist/commonjs/v3/toolResultOrder.js +58 -0
- package/dist/commonjs/v3/toolResultOrder.js.map +1 -0
- package/dist/commonjs/v3/transcriptStorage.d.ts +307 -0
- package/dist/commonjs/v3/transcriptStorage.js +445 -0
- package/dist/commonjs/v3/transcriptStorage.js.map +1 -0
- package/dist/commonjs/v3/triggerClient.d.ts +45 -0
- package/dist/commonjs/v3/triggerClient.js +114 -0
- package/dist/commonjs/v3/triggerClient.js.map +1 -0
- package/dist/commonjs/v3/uiMessageChunks.d.ts +1 -0
- package/dist/commonjs/v3/uiMessageChunks.js +119 -0
- package/dist/commonjs/v3/uiMessageChunks.js.map +1 -0
- package/dist/commonjs/v3/usage.js +7 -6
- package/dist/commonjs/v3/usage.js.map +1 -1
- package/dist/commonjs/v3/wait.d.ts +218 -3
- package/dist/commonjs/v3/wait.js +433 -7
- package/dist/commonjs/v3/wait.js.map +1 -1
- package/dist/commonjs/v3/waitUntil.js.map +1 -1
- package/dist/commonjs/v3/webhookWaiters.d.ts +80 -0
- package/dist/commonjs/v3/webhookWaiters.js +156 -0
- package/dist/commonjs/v3/webhookWaiters.js.map +1 -0
- package/dist/commonjs/v3/webhooks.d.ts +192 -2
- package/dist/commonjs/v3/webhooks.js +340 -2
- package/dist/commonjs/v3/webhooks.js.map +1 -1
- package/dist/commonjs/version.js +1 -1
- package/dist/esm/imports/ai-runtime.d.ts +2 -0
- package/dist/esm/imports/ai-runtime.js +16 -0
- package/dist/esm/imports/ai-runtime.js.map +1 -0
- package/dist/esm/package.json +2 -1
- package/dist/esm/v3/agentSkillsRuntime.d.ts +28 -0
- package/dist/esm/v3/agentSkillsRuntime.js +136 -0
- package/dist/esm/v3/agentSkillsRuntime.js.map +1 -0
- package/dist/esm/v3/ai-shared.d.ts +156 -0
- package/dist/esm/v3/ai-shared.js +208 -0
- package/dist/esm/v3/ai-shared.js.map +1 -0
- package/dist/esm/v3/ai.d.ts +4225 -0
- package/dist/esm/v3/ai.js +11550 -0
- package/dist/esm/v3/ai.js.map +1 -0
- package/dist/esm/v3/aiAutoTelemetry.d.ts +2 -0
- package/dist/esm/v3/aiAutoTelemetry.js +78 -0
- package/dist/esm/v3/aiAutoTelemetry.js.map +1 -0
- package/dist/esm/v3/auth.d.ts +71 -10
- package/dist/esm/v3/auth.js +83 -17
- package/dist/esm/v3/auth.js.map +1 -1
- package/dist/esm/v3/batch.d.ts +3 -3
- package/dist/esm/v3/batch.js +2 -2
- package/dist/esm/v3/batch.js.map +1 -1
- package/dist/esm/v3/chat-client.d.ts +324 -0
- package/dist/esm/v3/chat-client.js +769 -0
- package/dist/esm/v3/chat-client.js.map +1 -0
- package/dist/esm/v3/chat-react.d.ts +244 -0
- package/dist/esm/v3/chat-react.js +455 -0
- package/dist/esm/v3/chat-react.js.map +1 -0
- package/dist/esm/v3/chat-server.d.ts +350 -0
- package/dist/esm/v3/chat-server.js +962 -0
- package/dist/esm/v3/chat-server.js.map +1 -0
- package/dist/esm/v3/chat-tab-coordinator.d.ts +65 -0
- package/dist/esm/v3/chat-tab-coordinator.js +231 -0
- package/dist/esm/v3/chat-tab-coordinator.js.map +1 -0
- package/dist/esm/v3/chat.d.ts +792 -0
- package/dist/esm/v3/chat.js +1655 -0
- package/dist/esm/v3/chat.js.map +1 -0
- package/dist/esm/v3/chatRouteWait.d.ts +21 -0
- package/dist/esm/v3/chatRouteWait.js +40 -0
- package/dist/esm/v3/chatRouteWait.js.map +1 -0
- package/dist/esm/v3/chatSnapshotIo.d.ts +2 -0
- package/dist/esm/v3/chatSnapshotIo.js +165 -0
- package/dist/esm/v3/chatSnapshotIo.js.map +1 -0
- package/dist/esm/v3/chatVersionSkew.d.ts +12 -0
- package/dist/esm/v3/chatVersionSkew.js +27 -0
- package/dist/esm/v3/chatVersionSkew.js.map +1 -0
- package/dist/esm/v3/compactionResponse.d.ts +9 -0
- package/dist/esm/v3/compactionResponse.js +34 -0
- package/dist/esm/v3/compactionResponse.js.map +1 -0
- package/dist/esm/v3/concurrency-shared.d.ts +13 -0
- package/dist/esm/v3/concurrency-shared.js +31 -0
- package/dist/esm/v3/concurrency-shared.js.map +1 -0
- package/dist/esm/v3/concurrencyLimits.d.ts +103 -0
- package/dist/esm/v3/concurrencyLimits.js +126 -0
- package/dist/esm/v3/concurrencyLimits.js.map +1 -0
- package/dist/esm/v3/deployments.d.ts +25 -0
- package/dist/esm/v3/deployments.js +34 -0
- package/dist/esm/v3/deployments.js.map +1 -0
- package/dist/esm/v3/envvars.d.ts +5 -5
- package/dist/esm/v3/envvars.js.map +1 -1
- package/dist/esm/v3/externalDeploymentId.d.ts +23 -0
- package/dist/esm/v3/externalDeploymentId.js +38 -0
- package/dist/esm/v3/externalDeploymentId.js.map +1 -0
- package/dist/esm/v3/heartbeats.d.ts +37 -0
- package/dist/esm/v3/heartbeats.js +42 -0
- package/dist/esm/v3/heartbeats.js.map +1 -0
- package/dist/esm/v3/hooks.d.ts +26 -0
- package/dist/esm/v3/hooks.js +66 -0
- package/dist/esm/v3/hooks.js.map +1 -0
- package/dist/esm/v3/idempotencyKeys.d.ts +2 -1
- package/dist/esm/v3/idempotencyKeys.js +2 -1
- package/dist/esm/v3/idempotencyKeys.js.map +1 -1
- package/dist/esm/v3/index.d.ts +20 -5
- package/dist/esm/v3/index.js +16 -2
- package/dist/esm/v3/index.js.map +1 -1
- package/dist/esm/v3/locals.d.ts +3 -0
- package/dist/esm/v3/locals.js +3 -0
- package/dist/esm/v3/locals.js.map +1 -0
- package/dist/esm/v3/managedChatResponse.d.ts +44 -0
- package/dist/esm/v3/managedChatResponse.js +216 -0
- package/dist/esm/v3/managedChatResponse.js.map +1 -0
- package/dist/esm/v3/metadata.d.ts +5 -2
- package/dist/esm/v3/metadata.js +8 -1
- package/dist/esm/v3/metadata.js.map +1 -1
- package/dist/esm/v3/modelFileDownload.d.ts +10 -0
- package/dist/esm/v3/modelFileDownload.js +161 -0
- package/dist/esm/v3/modelFileDownload.js.map +1 -0
- package/dist/esm/v3/otel.d.ts +4 -0
- package/dist/esm/v3/otel.js +9 -0
- package/dist/esm/v3/otel.js.map +1 -0
- package/dist/esm/v3/prompt.d.ts +38 -0
- package/dist/esm/v3/prompt.js +143 -0
- package/dist/esm/v3/prompt.js.map +1 -0
- package/dist/esm/v3/promptManagement.d.ts +26 -0
- package/dist/esm/v3/promptManagement.js +170 -0
- package/dist/esm/v3/promptManagement.js.map +1 -0
- package/dist/esm/v3/prompts.d.ts +3 -0
- package/dist/esm/v3/prompts.js +3 -0
- package/dist/esm/v3/prompts.js.map +1 -0
- package/dist/esm/v3/query.d.ts +545 -0
- package/dist/esm/v3/query.js +160 -0
- package/dist/esm/v3/query.js.map +1 -0
- package/dist/esm/v3/queues.d.ts +107 -0
- package/dist/esm/v3/queues.js +217 -0
- package/dist/esm/v3/queues.js.map +1 -0
- package/dist/esm/v3/retry.d.ts +6 -2
- package/dist/esm/v3/retry.js +27 -19
- package/dist/esm/v3/retry.js.map +1 -1
- package/dist/esm/v3/runs.d.ts +179 -98
- package/dist/esm/v3/runs.js +99 -5
- package/dist/esm/v3/runs.js.map +1 -1
- package/dist/esm/v3/schedules/api.d.ts +8 -1
- package/dist/esm/v3/schedules/index.d.ts +29 -9
- package/dist/esm/v3/schedules/index.js +6 -2
- package/dist/esm/v3/schedules/index.js.map +1 -1
- package/dist/esm/v3/schemas.d.ts +1 -0
- package/dist/esm/v3/schemas.js +2 -0
- package/dist/esm/v3/schemas.js.map +1 -0
- package/dist/esm/v3/sessionTracing.d.ts +7 -0
- package/dist/esm/v3/sessionTracing.js +40 -0
- package/dist/esm/v3/sessionTracing.js.map +1 -0
- package/dist/esm/v3/sessions.d.ts +268 -0
- package/dist/esm/v3/sessions.js +767 -0
- package/dist/esm/v3/sessions.js.map +1 -0
- package/dist/esm/v3/shared.d.ts +129 -24
- package/dist/esm/v3/shared.js +1521 -688
- package/dist/esm/v3/shared.js.map +1 -1
- package/dist/esm/v3/skill.d.ts +99 -0
- package/dist/esm/v3/skill.js +128 -0
- package/dist/esm/v3/skill.js.map +1 -0
- package/dist/esm/v3/skills.d.ts +2 -0
- package/dist/esm/v3/skills.js +2 -0
- package/dist/esm/v3/skills.js.map +1 -0
- package/dist/esm/v3/steeringContext.d.ts +41 -0
- package/dist/esm/v3/steeringContext.js +113 -0
- package/dist/esm/v3/steeringContext.js.map +1 -0
- package/dist/esm/v3/streams.d.ts +298 -0
- package/dist/esm/v3/streams.js +580 -0
- package/dist/esm/v3/streams.js.map +1 -0
- package/dist/esm/v3/tasks.d.ts +19 -4
- package/dist/esm/v3/tasks.js +16 -2
- package/dist/esm/v3/tasks.js.map +1 -1
- package/dist/esm/v3/test/index.d.ts +5 -0
- package/dist/esm/v3/test/index.js +15 -0
- package/dist/esm/v3/test/index.js.map +1 -0
- package/dist/esm/v3/test/mock-channel-connector.d.ts +172 -0
- package/dist/esm/v3/test/mock-channel-connector.js +170 -0
- package/dist/esm/v3/test/mock-channel-connector.js.map +1 -0
- package/dist/esm/v3/test/mock-chat-agent.d.ts +388 -0
- package/dist/esm/v3/test/mock-chat-agent.js +685 -0
- package/dist/esm/v3/test/mock-chat-agent.js.map +1 -0
- package/dist/esm/v3/test/setup-catalog.d.ts +1 -0
- package/dist/esm/v3/test/setup-catalog.js +16 -0
- package/dist/esm/v3/test/setup-catalog.js.map +1 -0
- package/dist/esm/v3/test/test-session-handle.d.ts +24 -0
- package/dist/esm/v3/test/test-session-handle.js +268 -0
- package/dist/esm/v3/test/test-session-handle.js.map +1 -0
- package/dist/esm/v3/test/transcript-storage-tests.d.ts +40 -0
- package/dist/esm/v3/test/transcript-storage-tests.js +255 -0
- package/dist/esm/v3/test/transcript-storage-tests.js.map +1 -0
- package/dist/esm/v3/toolResultOrder.d.ts +15 -0
- package/dist/esm/v3/toolResultOrder.js +55 -0
- package/dist/esm/v3/toolResultOrder.js.map +1 -0
- package/dist/esm/v3/transcriptStorage.d.ts +307 -0
- package/dist/esm/v3/transcriptStorage.js +431 -0
- package/dist/esm/v3/transcriptStorage.js.map +1 -0
- package/dist/esm/v3/triggerClient.d.ts +45 -0
- package/dist/esm/v3/triggerClient.js +77 -0
- package/dist/esm/v3/triggerClient.js.map +1 -0
- package/dist/esm/v3/uiMessageChunks.d.ts +1 -0
- package/dist/esm/v3/uiMessageChunks.js +116 -0
- package/dist/esm/v3/uiMessageChunks.js.map +1 -0
- package/dist/esm/v3/usage.js +7 -6
- package/dist/esm/v3/usage.js.map +1 -1
- package/dist/esm/v3/wait.d.ts +218 -3
- package/dist/esm/v3/wait.js +431 -7
- package/dist/esm/v3/wait.js.map +1 -1
- package/dist/esm/v3/webhookWaiters.d.ts +80 -0
- package/dist/esm/v3/webhookWaiters.js +149 -0
- package/dist/esm/v3/webhookWaiters.js.map +1 -0
- package/dist/esm/v3/webhooks.d.ts +192 -2
- package/dist/esm/v3/webhooks.js +336 -2
- package/dist/esm/v3/webhooks.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/docs/ai/observability.mdx +174 -0
- package/docs/ai/prompts.mdx +426 -0
- package/docs/ai-chat/actions.mdx +148 -0
- package/docs/ai-chat/anatomy.mdx +87 -0
- package/docs/ai-chat/backend.mdx +933 -0
- package/docs/ai-chat/background-injection.mdx +320 -0
- package/docs/ai-chat/changelog.mdx +958 -0
- package/docs/ai-chat/chat-local.mdx +170 -0
- package/docs/ai-chat/client-protocol.mdx +1091 -0
- package/docs/ai-chat/compaction.mdx +413 -0
- package/docs/ai-chat/custom-agents.mdx +545 -0
- package/docs/ai-chat/error-handling.mdx +379 -0
- package/docs/ai-chat/fast-starts.mdx +764 -0
- package/docs/ai-chat/frontend.mdx +634 -0
- package/docs/ai-chat/how-it-works.mdx +226 -0
- package/docs/ai-chat/lifecycle-hooks.mdx +532 -0
- package/docs/ai-chat/mcp.mdx +97 -0
- package/docs/ai-chat/migrating-from-a-route-handler.mdx +594 -0
- package/docs/ai-chat/migrating-from-hydrate-messages.mdx +299 -0
- package/docs/ai-chat/overview.mdx +86 -0
- package/docs/ai-chat/patterns/branching-conversations.mdx +145 -0
- package/docs/ai-chat/patterns/code-sandbox.mdx +122 -0
- package/docs/ai-chat/patterns/database-persistence.mdx +425 -0
- package/docs/ai-chat/patterns/human-in-the-loop.mdx +281 -0
- package/docs/ai-chat/patterns/large-payloads.mdx +165 -0
- package/docs/ai-chat/patterns/native-compaction.mdx +310 -0
- package/docs/ai-chat/patterns/oom-resilience.mdx +116 -0
- package/docs/ai-chat/patterns/persistence-and-replay.mdx +218 -0
- package/docs/ai-chat/patterns/recovery-boot.mdx +233 -0
- package/docs/ai-chat/patterns/redacting-telemetry.mdx +117 -0
- package/docs/ai-chat/patterns/skills.mdx +214 -0
- package/docs/ai-chat/patterns/sub-agents.mdx +412 -0
- package/docs/ai-chat/patterns/tool-result-auditing.mdx +145 -0
- package/docs/ai-chat/patterns/trusted-edge-signals.mdx +333 -0
- package/docs/ai-chat/patterns/version-upgrades.mdx +261 -0
- package/docs/ai-chat/pending-messages.mdx +363 -0
- package/docs/ai-chat/prompt-caching.mdx +204 -0
- package/docs/ai-chat/quick-start.mdx +163 -0
- package/docs/ai-chat/reference.mdx +1071 -0
- package/docs/ai-chat/server-chat.mdx +259 -0
- package/docs/ai-chat/sessions.mdx +334 -0
- package/docs/ai-chat/side-channels.mdx +172 -0
- package/docs/ai-chat/testing.mdx +691 -0
- package/docs/ai-chat/tools.mdx +192 -0
- package/docs/ai-chat/transcript-storage.mdx +247 -0
- package/docs/ai-chat/types.mdx +242 -0
- package/docs/ai-chat/upgrade-guide.mdx +511 -0
- package/docs/apikeys.mdx +170 -0
- package/docs/billing-limits.mdx +73 -0
- package/docs/building-with-ai.mdx +261 -0
- package/docs/bulk-actions.mdx +77 -0
- package/docs/changelog.mdx +6 -0
- package/docs/cli-deploy-commands.mdx +9 -0
- package/docs/cli-dev-commands.mdx +9 -0
- package/docs/cli-env-commands.mdx +115 -0
- package/docs/cli-init-commands.mdx +84 -0
- package/docs/cli-introduction.mdx +25 -0
- package/docs/cli-list-profiles-commands.mdx +42 -0
- package/docs/cli-login-commands.mdx +53 -0
- package/docs/cli-logout-commands.mdx +33 -0
- package/docs/cli-preview-archive.mdx +59 -0
- package/docs/cli-projects-commands.mdx +74 -0
- package/docs/cli-promote-commands.mdx +9 -0
- package/docs/cli-runs-commands.mdx +95 -0
- package/docs/cli-switch.mdx +43 -0
- package/docs/cli-tasks-commands.mdx +95 -0
- package/docs/cli-update-commands.mdx +48 -0
- package/docs/cli-whoami-commands.mdx +45 -0
- package/docs/community.mdx +6 -0
- package/docs/concurrency.mdx +416 -0
- package/docs/config/config-file.mdx +662 -0
- package/docs/config/extensions/additionalFiles.mdx +38 -0
- package/docs/config/extensions/additionalPackages.mdx +40 -0
- package/docs/config/extensions/aptGet.mdx +34 -0
- package/docs/config/extensions/audioWaveform.mdx +23 -0
- package/docs/config/extensions/custom.mdx +393 -0
- package/docs/config/extensions/emitDecoratorMetadata.mdx +52 -0
- package/docs/config/extensions/esbuildPlugin.mdx +31 -0
- package/docs/config/extensions/ffmpeg.mdx +45 -0
- package/docs/config/extensions/lightpanda.mdx +56 -0
- package/docs/config/extensions/overview.mdx +69 -0
- package/docs/config/extensions/playwright.mdx +195 -0
- package/docs/config/extensions/prismaExtension.mdx +1013 -0
- package/docs/config/extensions/puppeteer.mdx +28 -0
- package/docs/config/extensions/pythonExtension.mdx +190 -0
- package/docs/config/extensions/syncEnvVars.mdx +330 -0
- package/docs/context.mdx +235 -0
- package/docs/database-connections.mdx +213 -0
- package/docs/deploy-environment-variables.mdx +466 -0
- package/docs/deployment/atomic-deployment.mdx +470 -0
- package/docs/deployment/dev-branches.mdx +92 -0
- package/docs/deployment/overview.mdx +260 -0
- package/docs/deployment/preview-branches.mdx +227 -0
- package/docs/errors-retrying.mdx +383 -0
- package/docs/github-actions.mdx +260 -0
- package/docs/github-integration.mdx +148 -0
- package/docs/github-repo.mdx +8 -0
- package/docs/help-email.mdx +6 -0
- package/docs/help-slack.mdx +12 -0
- package/docs/hidden-tasks.mdx +56 -0
- package/docs/how-it-works.mdx +454 -0
- package/docs/how-to-reduce-your-spend.mdx +211 -0
- package/docs/idempotency.mdx +542 -0
- package/docs/introduction.mdx +135 -0
- package/docs/limits.mdx +284 -0
- package/docs/logging.mdx +195 -0
- package/docs/machines.mdx +952 -0
- package/docs/manual-setup.mdx +632 -0
- package/docs/mcp-agent-rules.mdx +41 -0
- package/docs/mcp-introduction.mdx +386 -0
- package/docs/mcp-tools.mdx +425 -0
- package/docs/migrating-from-v3.mdx +332 -0
- package/docs/observability/dashboards.mdx +166 -0
- package/docs/observability/query.mdx +614 -0
- package/docs/open-source-contributing.mdx +16 -0
- package/docs/private-networking/aws-console-setup.mdx +304 -0
- package/docs/private-networking/overview.mdx +144 -0
- package/docs/private-networking/troubleshooting.mdx +78 -0
- package/docs/queues.mdx +271 -0
- package/docs/quick-start.mdx +60 -0
- package/docs/realtime/auth.mdx +228 -0
- package/docs/realtime/backend/input-streams.mdx +159 -0
- package/docs/realtime/backend/overview.mdx +45 -0
- package/docs/realtime/backend/streams.mdx +433 -0
- package/docs/realtime/backend/subscribe.mdx +225 -0
- package/docs/realtime/how-it-works.mdx +94 -0
- package/docs/realtime/overview.mdx +63 -0
- package/docs/realtime/react-hooks/overview.mdx +73 -0
- package/docs/realtime/react-hooks/session-stream.mdx +126 -0
- package/docs/realtime/react-hooks/streams.mdx +517 -0
- package/docs/realtime/react-hooks/subscribe.mdx +690 -0
- package/docs/realtime/react-hooks/swr.mdx +87 -0
- package/docs/realtime/react-hooks/triggering.mdx +194 -0
- package/docs/realtime/react-hooks/use-wait-token.mdx +34 -0
- package/docs/realtime/run-object.mdx +197 -0
- package/docs/replaying.mdx +97 -0
- package/docs/reports.mdx +159 -0
- package/docs/request-feature.mdx +6 -0
- package/docs/roadmap.mdx +6 -0
- package/docs/run-tests.mdx +21 -0
- package/docs/run-usage.mdx +113 -0
- package/docs/runs/bulk-actions.mdx +183 -0
- package/docs/runs/heartbeats.mdx +38 -0
- package/docs/runs/list-best-practices.mdx +234 -0
- package/docs/runs/max-duration.mdx +143 -0
- package/docs/runs/metadata.mdx +731 -0
- package/docs/runs/priority.mdx +8 -0
- package/docs/runs.mdx +406 -0
- package/docs/self-hosting/docker.mdx +512 -0
- package/docs/self-hosting/env/supervisor.mdx +78 -0
- package/docs/self-hosting/env/webapp.mdx +305 -0
- package/docs/self-hosting/kubernetes.mdx +725 -0
- package/docs/self-hosting/overview.mdx +145 -0
- package/docs/self-hosting/security.mdx +67 -0
- package/docs/skills.mdx +85 -0
- package/docs/tags.mdx +126 -0
- package/docs/tasks/overview.mdx +695 -0
- package/docs/tasks/scheduled.mdx +479 -0
- package/docs/tasks/schemaTask.mdx +413 -0
- package/docs/tasks/streams.mdx +887 -0
- package/docs/triggering.mdx +1340 -0
- package/docs/troubleshooting-alerts.mdx +607 -0
- package/docs/troubleshooting-debugging-in-vscode.mdx +9 -0
- package/docs/troubleshooting-github-issues.mdx +6 -0
- package/docs/troubleshooting-uptime-status.mdx +7 -0
- package/docs/troubleshooting-zod.mdx +158 -0
- package/docs/troubleshooting.mdx +414 -0
- package/docs/upgrading-packages.mdx +80 -0
- package/docs/vercel-integration.mdx +250 -0
- package/docs/versioning.mdx +58 -0
- package/docs/video-walkthrough.mdx +23 -0
- package/docs/wait-for-token.mdx +540 -0
- package/docs/wait-for.mdx +42 -0
- package/docs/wait-until.mdx +53 -0
- package/docs/wait.mdx +18 -0
- package/docs/webhooks/channels.mdx +154 -0
- package/docs/webhooks/connect.mdx +91 -0
- package/docs/webhooks/deliveries.mdx +99 -0
- package/docs/webhooks/filters.mdx +146 -0
- package/docs/webhooks/human-in-the-loop.mdx +158 -0
- package/docs/webhooks/linear.mdx +186 -0
- package/docs/webhooks/overview.mdx +115 -0
- package/docs/webhooks/session-routing.mdx +141 -0
- package/docs/webhooks/slack.mdx +393 -0
- package/docs/webhooks/sources.mdx +250 -0
- package/docs/webhooks/waiters.mdx +190 -0
- package/docs/writing-tasks-introduction.mdx +34 -0
- package/package.json +143 -42
- package/skills/trigger-authoring-chat-agent/SKILL.md +308 -0
- package/skills/trigger-authoring-tasks/SKILL.md +254 -0
- package/skills/trigger-chat-agent-advanced/SKILL.md +403 -0
- package/skills/trigger-cost-savings/SKILL.md +116 -0
- package/skills/trigger-realtime-and-frontend/SKILL.md +276 -0
- package/dist/commonjs/apiClient.d.ts +0 -727
- package/dist/commonjs/apiClient.js +0 -692
- package/dist/commonjs/apiClient.js.map +0 -1
- package/dist/commonjs/concurrencyLimit.d.ts +0 -10
- package/dist/commonjs/concurrencyLimit.js +0 -17
- package/dist/commonjs/concurrencyLimit.js.map +0 -1
- package/dist/commonjs/errors.d.ts +0 -66
- package/dist/commonjs/errors.js +0 -109
- package/dist/commonjs/errors.js.map +0 -1
- package/dist/commonjs/httpEndpoint.d.ts +0 -87
- package/dist/commonjs/httpEndpoint.js +0 -130
- package/dist/commonjs/httpEndpoint.js.map +0 -1
- package/dist/commonjs/index.d.ts +0 -23
- package/dist/commonjs/index.js +0 -55
- package/dist/commonjs/index.js.map +0 -1
- package/dist/commonjs/integrations.d.ts +0 -11
- package/dist/commonjs/integrations.js.map +0 -1
- package/dist/commonjs/io.d.ts +0 -441
- package/dist/commonjs/io.js +0 -1165
- package/dist/commonjs/io.js.map +0 -1
- package/dist/commonjs/ioWithIntegrations.d.ts +0 -4
- package/dist/commonjs/ioWithIntegrations.js +0 -32
- package/dist/commonjs/ioWithIntegrations.js.map +0 -1
- package/dist/commonjs/job.d.ts +0 -96
- package/dist/commonjs/job.js +0 -210
- package/dist/commonjs/job.js.map +0 -1
- package/dist/commonjs/retry.d.ts +0 -20
- package/dist/commonjs/retry.js +0 -22
- package/dist/commonjs/retry.js.map +0 -1
- package/dist/commonjs/runLocalStorage.d.ts +0 -8
- package/dist/commonjs/runLocalStorage.js +0 -6
- package/dist/commonjs/runLocalStorage.js.map +0 -1
- package/dist/commonjs/security.d.ts +0 -18
- package/dist/commonjs/security.js +0 -41
- package/dist/commonjs/security.js.map +0 -1
- package/dist/commonjs/status.d.ts +0 -19
- package/dist/commonjs/status.js +0 -38
- package/dist/commonjs/status.js.map +0 -1
- package/dist/commonjs/store/keyValueStore.d.ts +0 -17
- package/dist/commonjs/store/keyValueStore.js +0 -138
- package/dist/commonjs/store/keyValueStore.js.map +0 -1
- package/dist/commonjs/store/keyValueStoreClient.d.ts +0 -19
- package/dist/commonjs/store/keyValueStoreClient.js +0 -65
- package/dist/commonjs/store/keyValueStoreClient.js.map +0 -1
- package/dist/commonjs/triggerClient.d.ts +0 -290
- package/dist/commonjs/triggerClient.js +0 -1366
- package/dist/commonjs/triggerClient.js.map +0 -1
- package/dist/commonjs/triggers/dynamic.d.ts +0 -56
- package/dist/commonjs/triggers/dynamic.js +0 -97
- package/dist/commonjs/triggers/dynamic.js.map +0 -1
- package/dist/commonjs/triggers/eventTrigger.d.ts +0 -58
- package/dist/commonjs/triggers/eventTrigger.js +0 -69
- package/dist/commonjs/triggers/eventTrigger.js.map +0 -1
- package/dist/commonjs/triggers/externalSource.d.ts +0 -148
- package/dist/commonjs/triggers/externalSource.js +0 -106
- package/dist/commonjs/triggers/externalSource.js.map +0 -1
- package/dist/commonjs/triggers/invokeTrigger.d.ts +0 -39
- package/dist/commonjs/triggers/invokeTrigger.js +0 -58
- package/dist/commonjs/triggers/invokeTrigger.js.map +0 -1
- package/dist/commonjs/triggers/notifications.d.ts +0 -111
- package/dist/commonjs/triggers/notifications.js +0 -101
- package/dist/commonjs/triggers/notifications.js.map +0 -1
- package/dist/commonjs/triggers/scheduled.d.ts +0 -145
- package/dist/commonjs/triggers/scheduled.js +0 -208
- package/dist/commonjs/triggers/scheduled.js.map +0 -1
- package/dist/commonjs/triggers/webhook.d.ts +0 -143
- package/dist/commonjs/triggers/webhook.js +0 -133
- package/dist/commonjs/triggers/webhook.js.map +0 -1
- package/dist/commonjs/typed-emitter.d.ts +0 -37
- package/dist/commonjs/typed-emitter.js +0 -3
- package/dist/commonjs/typed-emitter.js.map +0 -1
- package/dist/commonjs/types.d.ts +0 -204
- package/dist/commonjs/types.js +0 -23
- package/dist/commonjs/types.js.map +0 -1
- package/dist/commonjs/utils/formatSchemaErrors.d.ts +0 -3
- package/dist/commonjs/utils/formatSchemaErrors.js +0 -10
- package/dist/commonjs/utils/formatSchemaErrors.js.map +0 -1
- package/dist/commonjs/utils/typedAsyncLocalStorage.d.ts +0 -6
- package/dist/commonjs/utils/typedAsyncLocalStorage.js +0 -18
- package/dist/commonjs/utils/typedAsyncLocalStorage.js.map +0 -1
- package/dist/commonjs/utils.d.ts +0 -1
- package/dist/commonjs/utils.js +0 -11
- package/dist/commonjs/utils.js.map +0 -1
- package/dist/esm/apiClient.d.ts +0 -727
- package/dist/esm/apiClient.js +0 -687
- package/dist/esm/apiClient.js.map +0 -1
- package/dist/esm/concurrencyLimit.d.ts +0 -10
- package/dist/esm/concurrencyLimit.js +0 -13
- package/dist/esm/concurrencyLimit.js.map +0 -1
- package/dist/esm/errors.d.ts +0 -66
- package/dist/esm/errors.js +0 -95
- package/dist/esm/errors.js.map +0 -1
- package/dist/esm/httpEndpoint.d.ts +0 -87
- package/dist/esm/httpEndpoint.js +0 -125
- package/dist/esm/httpEndpoint.js.map +0 -1
- package/dist/esm/index.d.ts +0 -23
- package/dist/esm/index.js +0 -35
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/integrations.d.ts +0 -11
- package/dist/esm/integrations.js +0 -2
- package/dist/esm/integrations.js.map +0 -1
- package/dist/esm/io.d.ts +0 -441
- package/dist/esm/io.js +0 -1159
- package/dist/esm/io.js.map +0 -1
- package/dist/esm/ioWithIntegrations.d.ts +0 -4
- package/dist/esm/ioWithIntegrations.js +0 -29
- package/dist/esm/ioWithIntegrations.js.map +0 -1
- package/dist/esm/job.d.ts +0 -96
- package/dist/esm/job.js +0 -206
- package/dist/esm/job.js.map +0 -1
- package/dist/esm/retry.d.ts +0 -20
- package/dist/esm/retry.js +0 -19
- package/dist/esm/retry.js.map +0 -1
- package/dist/esm/runLocalStorage.d.ts +0 -8
- package/dist/esm/runLocalStorage.js +0 -3
- package/dist/esm/runLocalStorage.js.map +0 -1
- package/dist/esm/security.d.ts +0 -18
- package/dist/esm/security.js +0 -34
- package/dist/esm/security.js.map +0 -1
- package/dist/esm/status.d.ts +0 -19
- package/dist/esm/status.js +0 -34
- package/dist/esm/status.js.map +0 -1
- package/dist/esm/store/keyValueStore.d.ts +0 -17
- package/dist/esm/store/keyValueStore.js +0 -134
- package/dist/esm/store/keyValueStore.js.map +0 -1
- package/dist/esm/store/keyValueStoreClient.d.ts +0 -19
- package/dist/esm/store/keyValueStoreClient.js +0 -61
- package/dist/esm/store/keyValueStoreClient.js.map +0 -1
- package/dist/esm/triggerClient.d.ts +0 -288
- package/dist/esm/triggerClient.js +0 -1359
- package/dist/esm/triggerClient.js.map +0 -1
- package/dist/esm/triggers/dynamic.d.ts +0 -56
- package/dist/esm/triggers/dynamic.js +0 -93
- package/dist/esm/triggers/dynamic.js.map +0 -1
- package/dist/esm/triggers/eventTrigger.d.ts +0 -58
- package/dist/esm/triggers/eventTrigger.js +0 -64
- package/dist/esm/triggers/eventTrigger.js.map +0 -1
- package/dist/esm/triggers/externalSource.d.ts +0 -148
- package/dist/esm/triggers/externalSource.js +0 -100
- package/dist/esm/triggers/externalSource.js.map +0 -1
- package/dist/esm/triggers/invokeTrigger.d.ts +0 -39
- package/dist/esm/triggers/invokeTrigger.js +0 -53
- package/dist/esm/triggers/invokeTrigger.js.map +0 -1
- package/dist/esm/triggers/notifications.d.ts +0 -111
- package/dist/esm/triggers/notifications.js +0 -94
- package/dist/esm/triggers/notifications.js.map +0 -1
- package/dist/esm/triggers/scheduled.d.ts +0 -145
- package/dist/esm/triggers/scheduled.js +0 -197
- package/dist/esm/triggers/scheduled.js.map +0 -1
- package/dist/esm/triggers/webhook.d.ts +0 -143
- package/dist/esm/triggers/webhook.js +0 -128
- package/dist/esm/triggers/webhook.js.map +0 -1
- package/dist/esm/typed-emitter.d.ts +0 -37
- package/dist/esm/typed-emitter.js +0 -2
- package/dist/esm/typed-emitter.js.map +0 -1
- package/dist/esm/types.d.ts +0 -204
- package/dist/esm/types.js +0 -19
- package/dist/esm/types.js.map +0 -1
- package/dist/esm/utils/formatSchemaErrors.d.ts +0 -3
- package/dist/esm/utils/formatSchemaErrors.js +0 -7
- package/dist/esm/utils/formatSchemaErrors.js.map +0 -1
- package/dist/esm/utils/typedAsyncLocalStorage.d.ts +0 -6
- package/dist/esm/utils/typedAsyncLocalStorage.js +0 -14
- package/dist/esm/utils/typedAsyncLocalStorage.js.map +0 -1
- package/dist/esm/utils.d.ts +0 -1
- package/dist/esm/utils.js +0 -8
- package/dist/esm/utils.js.map +0 -1
|
@@ -0,0 +1,689 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_TEST_CONNECTOR_ID = void 0;
|
|
4
|
+
exports.mockChatAgent = mockChatAgent;
|
|
5
|
+
const v3_1 = require("@trigger.dev/core/v3");
|
|
6
|
+
const test_1 = require("@trigger.dev/core/v3/test");
|
|
7
|
+
const sessions_js_1 = require("../sessions.js");
|
|
8
|
+
const ai_js_1 = require("../ai.js");
|
|
9
|
+
const test_session_handle_js_1 = require("./test-session-handle.js");
|
|
10
|
+
const uiMessageChunks_js_1 = require("../uiMessageChunks.js");
|
|
11
|
+
/**
|
|
12
|
+
* Default `connectorId` used by {@link MockChatAgentHarness.sendChannelEvent}
|
|
13
|
+
* when the caller omits it. Matches the default `id` of
|
|
14
|
+
* {@link recordingChannelConnector}, so a single-connector agent needs no
|
|
15
|
+
* explicit id on either side.
|
|
16
|
+
*/
|
|
17
|
+
exports.DEFAULT_TEST_CONNECTOR_ID = "test-channel";
|
|
18
|
+
/**
|
|
19
|
+
* Wait for a channel turn's post-completion egress to land. The run loop
|
|
20
|
+
* writes the `trigger:turn-complete` chunk (which unblocks the harness's
|
|
21
|
+
* turn-complete latch) BEFORE it awaits the connector's final `send()` and
|
|
22
|
+
* its done/error reactions, and settles a per-chat latch once those have
|
|
23
|
+
* finished. Awaiting that latch, rather than draining timers, makes the
|
|
24
|
+
* connector's recorded sends and reactions deterministic for any connector
|
|
25
|
+
* latency. A latch that never settles is a runtime bug, so it fails loudly.
|
|
26
|
+
*/
|
|
27
|
+
async function settlePostTurnChannelEgress(chatId) {
|
|
28
|
+
let timer;
|
|
29
|
+
const timeout = new Promise((_, reject) => {
|
|
30
|
+
timer = setTimeout(() => reject(new Error(`channel egress for ${chatId} did not settle within 10s`)), 10_000);
|
|
31
|
+
});
|
|
32
|
+
try {
|
|
33
|
+
await Promise.race([(0, ai_js_1.__waitForChannelEgressForTests)(chatId), timeout]);
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
clearTimeout(timer);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const CONTROL_CHUNK_TYPES = new Set(["trigger:turn-complete", "trigger:upgrade-required"]);
|
|
40
|
+
function isControlChunk(chunk) {
|
|
41
|
+
if (typeof chunk !== "object" || chunk === null)
|
|
42
|
+
return false;
|
|
43
|
+
const type = chunk.type;
|
|
44
|
+
return typeof type === "string" && CONTROL_CHUNK_TYPES.has(type);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Highest `session.in` seqNum any harness has produced for a session id,
|
|
48
|
+
* keyed by `sessionId`. Production `session.in` is a durable S2 stream whose
|
|
49
|
+
* seqNums are monotonic across the runs of a chat; a fresh in-memory manager
|
|
50
|
+
* per `mockChatAgent` would otherwise restart at 0, so a continuation's
|
|
51
|
+
* follow-up message would collide with the resume floor and be dropped. This
|
|
52
|
+
* survives the per-run manager reset so continuation runs stay monotonic.
|
|
53
|
+
*/
|
|
54
|
+
const durableSessionInSeq = new Map();
|
|
55
|
+
/**
|
|
56
|
+
* Create an offline test harness for a `chat.agent` task.
|
|
57
|
+
*
|
|
58
|
+
* The harness starts the agent's `run()` function in a mocked task context,
|
|
59
|
+
* waits in preload for the first message, then exposes driver methods for
|
|
60
|
+
* sending messages / actions / stop signals and awaiting turn completion.
|
|
61
|
+
*
|
|
62
|
+
* Users are responsible for mocking the language model themselves — use
|
|
63
|
+
* `MockLanguageModelV3` and `simulateReadableStream` from `ai/test` inside
|
|
64
|
+
* their agent's `run()` function (typically via DI through `clientData`).
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```ts
|
|
68
|
+
* import { mockChatAgent } from "@trigger.dev/sdk/ai/test";
|
|
69
|
+
* import { MockLanguageModelV3, simulateReadableStream } from "ai/test";
|
|
70
|
+
* import { myAgent } from "./my-agent";
|
|
71
|
+
*
|
|
72
|
+
* test("says hello", async () => {
|
|
73
|
+
* const harness = mockChatAgent(myAgent, { chatId: "test-1" });
|
|
74
|
+
* try {
|
|
75
|
+
* const turn = await harness.sendMessage({
|
|
76
|
+
* id: "m1",
|
|
77
|
+
* role: "user",
|
|
78
|
+
* parts: [{ type: "text", text: "hi" }],
|
|
79
|
+
* });
|
|
80
|
+
* expect(turn.chunks).toContainEqual(
|
|
81
|
+
* expect.objectContaining({ type: "text-delta", delta: "hello" })
|
|
82
|
+
* );
|
|
83
|
+
* } finally {
|
|
84
|
+
* await harness.close();
|
|
85
|
+
* }
|
|
86
|
+
* });
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
function mockChatAgent(agent, options = {}) {
|
|
90
|
+
const chatId = options.chatId ?? "test-chat";
|
|
91
|
+
// The agent opens the session with `payload.sessionId ?? payload.chatId`.
|
|
92
|
+
// We pass no sessionId, so it falls back to chatId.
|
|
93
|
+
const sessionId = chatId;
|
|
94
|
+
// `continuation: true` without an explicit mode auto-selects "continuation"
|
|
95
|
+
// — the canonical shape for a continuation-run boot.
|
|
96
|
+
const mode = options.mode ??
|
|
97
|
+
(options.continuation === true
|
|
98
|
+
? "continuation"
|
|
99
|
+
: options.preload === false
|
|
100
|
+
? "submit-message"
|
|
101
|
+
: "preload");
|
|
102
|
+
const clientData = options.clientData;
|
|
103
|
+
const taskEntry = v3_1.resourceCatalog.getTask(agent.id);
|
|
104
|
+
if (!taskEntry) {
|
|
105
|
+
throw new Error(`mockChatAgent: no task registered with id "${agent.id}". ` +
|
|
106
|
+
`Import "@trigger.dev/sdk/ai/test" before your agent module so tasks register correctly.`);
|
|
107
|
+
}
|
|
108
|
+
const runFn = taskEntry.fns.run;
|
|
109
|
+
// Session .out state: chunks + listener registry. Shared between the
|
|
110
|
+
// harness and the TestSessionOutputChannel installed via the open-override.
|
|
111
|
+
const sessionOutState = {
|
|
112
|
+
chunks: [],
|
|
113
|
+
listeners: new Set(),
|
|
114
|
+
};
|
|
115
|
+
// Buffers that survive across harness method calls
|
|
116
|
+
const allRawChunks = [];
|
|
117
|
+
const allChunks = [];
|
|
118
|
+
// Promise that resolves when the background task run() function returns.
|
|
119
|
+
let taskFinished;
|
|
120
|
+
let sendSessionInput;
|
|
121
|
+
let closeSessionInput;
|
|
122
|
+
let runSignal;
|
|
123
|
+
let channelDeliveryCounter = 0;
|
|
124
|
+
// A latch that resolves every time `trigger:turn-complete` appears on the chat stream.
|
|
125
|
+
// We use a shared pending promise and replace it after each completion.
|
|
126
|
+
let turnCompleteResolvers = [];
|
|
127
|
+
const waitForTurnComplete = () => new Promise((resolve) => {
|
|
128
|
+
turnCompleteResolvers.push(resolve);
|
|
129
|
+
});
|
|
130
|
+
// Signal that the caller is ready to observe output
|
|
131
|
+
let harnessReadyResolve;
|
|
132
|
+
const harnessReady = new Promise((resolve) => {
|
|
133
|
+
harnessReadyResolve = resolve;
|
|
134
|
+
});
|
|
135
|
+
// ── Snapshot read/write override state ───────────────────────────────
|
|
136
|
+
// The runtime's snapshot read returns whatever `seededSnapshot` is at
|
|
137
|
+
// boot time. The runtime's snapshot write captures into
|
|
138
|
+
// `lastWrittenSnapshot` for harness consumers to assert via
|
|
139
|
+
// `getSnapshot()`. Installed below alongside the session overrides;
|
|
140
|
+
// cleared on close in the same finally block.
|
|
141
|
+
let seededSnapshot = options.snapshot;
|
|
142
|
+
let lastWrittenSnapshot;
|
|
143
|
+
let seededReplayChunks = [];
|
|
144
|
+
let seededReplayPartial;
|
|
145
|
+
let seededSessionInTail = [];
|
|
146
|
+
const closeCalls = [];
|
|
147
|
+
let failCloseCalls = 0;
|
|
148
|
+
(0, ai_js_1.__resetChatInputRouterForTests)();
|
|
149
|
+
(0, ai_js_1.__setReadChatSnapshotImplForTests)(() => seededSnapshot);
|
|
150
|
+
(0, ai_js_1.__setWriteChatSnapshotImplForTests)((_id, snapshot) => {
|
|
151
|
+
lastWrittenSnapshot = snapshot;
|
|
152
|
+
});
|
|
153
|
+
// Replay override: install a default that returns whatever
|
|
154
|
+
// `seededReplayChunks` reduces to. `mockChatAgent` doesn't model the
|
|
155
|
+
// settled-vs-partial split — seeded chunks always reduce to the
|
|
156
|
+
// `settled` array with `partial: undefined`. Recovery-specific
|
|
157
|
+
// tests can install their own override to seed a partial.
|
|
158
|
+
// Cleared in the same `finally` block as the other test overrides.
|
|
159
|
+
(0, ai_js_1.__setReplaySessionOutTailImplForTests)(async () => {
|
|
160
|
+
const settled = seededReplayChunks.length === 0
|
|
161
|
+
? []
|
|
162
|
+
: (await reduceChunksToMessages(seededReplayChunks));
|
|
163
|
+
// For the mock harness, `partialRaw` is the same as `partial` — we
|
|
164
|
+
// don't model cleanupAbortedParts separately. Recovery tests that
|
|
165
|
+
// need a partialRaw distinct from partial install their own stub.
|
|
166
|
+
return {
|
|
167
|
+
settled,
|
|
168
|
+
partial: seededReplayPartial,
|
|
169
|
+
partialRaw: seededReplayPartial,
|
|
170
|
+
};
|
|
171
|
+
});
|
|
172
|
+
(0, ai_js_1.__setReplaySessionInTailImplForTests)(async () => {
|
|
173
|
+
const messages = [];
|
|
174
|
+
const channelEvents = [];
|
|
175
|
+
seededSessionInTail.forEach((entry, i) => {
|
|
176
|
+
if ("channelEvent" in entry) {
|
|
177
|
+
channelEvents.push({
|
|
178
|
+
channelEvent: {
|
|
179
|
+
connectorId: entry.channelEvent.connectorId ?? exports.DEFAULT_TEST_CONNECTOR_ID,
|
|
180
|
+
event: entry.channelEvent.event,
|
|
181
|
+
source: entry.channelEvent.source ?? "custom",
|
|
182
|
+
headers: entry.channelEvent.headers ?? {},
|
|
183
|
+
deliveryId: entry.channelEvent.deliveryId ?? `dlv_seeded_${i + 1}`,
|
|
184
|
+
},
|
|
185
|
+
metadata: clientData,
|
|
186
|
+
seqNum: i + 1,
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
messages.push({ message: entry, metadata: clientData, seqNum: i + 1 });
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
return { messages, channelEvents };
|
|
194
|
+
});
|
|
195
|
+
// Install the session open override so `sessions.open(id)` returns a
|
|
196
|
+
// SessionHandle with an in-memory `.out` that captures writes. The
|
|
197
|
+
// `.in` channel routes record subscriptions (`on`/`once`/`peek`)
|
|
198
|
+
// through the `sessionStreams` global — the mock task context
|
|
199
|
+
// installs a `TestSessionStreamManager` there — and stubs `wait()`
|
|
200
|
+
// so the suspend path resolves cleanly on `runSignal.abort()` without
|
|
201
|
+
// touching the api client.
|
|
202
|
+
(0, sessions_js_1.__setSessionOpenImplForTests)((id) => (0, test_session_handle_js_1.createTestSessionHandle)(id, sessionOutState, () => runSignal?.signal));
|
|
203
|
+
// Record `sessions.close()` calls instead of reaching the control plane, so
|
|
204
|
+
// a test can assert the agent actually closed the row (and with what reason).
|
|
205
|
+
(0, sessions_js_1.__setSessionCloseImplForTests)((sessionIdOrExternalId, body) => {
|
|
206
|
+
closeCalls.push({
|
|
207
|
+
sessionId: sessionIdOrExternalId,
|
|
208
|
+
...(body?.reason ? { reason: body.reason } : {}),
|
|
209
|
+
});
|
|
210
|
+
if (failCloseCalls > 0) {
|
|
211
|
+
failCloseCalls--;
|
|
212
|
+
throw new Error("mockChatAgent: sessions.close() failure injected by the test");
|
|
213
|
+
}
|
|
214
|
+
return {
|
|
215
|
+
id: sessionIdOrExternalId,
|
|
216
|
+
externalId: sessionIdOrExternalId,
|
|
217
|
+
closedAt: new Date().toISOString(),
|
|
218
|
+
closedReason: body?.reason ?? null,
|
|
219
|
+
};
|
|
220
|
+
});
|
|
221
|
+
// Install the session start override so any test path that invokes
|
|
222
|
+
// `sessions.start()` (typically through a server action shim like
|
|
223
|
+
// `chat.createStartSessionAction`) becomes a no-op fixture instead of
|
|
224
|
+
// hitting a real API. Most chat.agent tests trigger the run directly
|
|
225
|
+
// via `sendPayloadAndWait` and never go through this path, but the
|
|
226
|
+
// stub keeps the API safe to call from inside tested code.
|
|
227
|
+
(0, sessions_js_1.__setSessionStartImplForTests)((body) => {
|
|
228
|
+
if (process.env.TRIGGER_CHAT_TEST_DEBUG === "1") {
|
|
229
|
+
console.log("[mockChatAgent] sessions.start override:", body);
|
|
230
|
+
}
|
|
231
|
+
const fakeRunId = `run_test_${body.externalId ?? "anon"}`;
|
|
232
|
+
return {
|
|
233
|
+
id: `session_test_${body.externalId ?? "anon"}`,
|
|
234
|
+
externalId: body.externalId ?? null,
|
|
235
|
+
type: body.type,
|
|
236
|
+
taskIdentifier: body.taskIdentifier,
|
|
237
|
+
triggerConfig: body.triggerConfig,
|
|
238
|
+
currentRunId: fakeRunId,
|
|
239
|
+
runId: fakeRunId,
|
|
240
|
+
publicAccessToken: "tr_test_session_pat",
|
|
241
|
+
tags: body.tags ?? [],
|
|
242
|
+
metadata: (body.metadata ?? null),
|
|
243
|
+
closedAt: null,
|
|
244
|
+
closedReason: null,
|
|
245
|
+
expiresAt: null,
|
|
246
|
+
createdAt: new Date(0),
|
|
247
|
+
updatedAt: new Date(0),
|
|
248
|
+
isCached: false,
|
|
249
|
+
};
|
|
250
|
+
});
|
|
251
|
+
taskFinished = (0, test_1.runInMockTaskContext)(async (drivers) => {
|
|
252
|
+
runSignal = new AbortController();
|
|
253
|
+
// For `mode: "continuation"`, omit `trigger` from the wire payload —
|
|
254
|
+
// mirrors what the server's `ensureRunForSession` / `swapSessionRun`
|
|
255
|
+
// produces (the continuation overrides clear `trigger` so the SDK
|
|
256
|
+
// boot path falls into the continuation-wait branch instead of
|
|
257
|
+
// re-firing the basePayload's stale first-run trigger). `continuation:
|
|
258
|
+
// true` is set unconditionally for this mode so the boot path's
|
|
259
|
+
// continuation-wait condition matches.
|
|
260
|
+
const isContinuationMode = mode === "continuation";
|
|
261
|
+
const initialPayload = {
|
|
262
|
+
chatId,
|
|
263
|
+
...(isContinuationMode
|
|
264
|
+
? { trigger: undefined, continuation: true }
|
|
265
|
+
: { trigger: mode }),
|
|
266
|
+
metadata: clientData,
|
|
267
|
+
...(!isContinuationMode && options.continuation ? { continuation: true } : {}),
|
|
268
|
+
...(options.previousRunId ? { previousRunId: options.previousRunId } : {}),
|
|
269
|
+
...(options.headStartMessages ? { headStartMessages: options.headStartMessages } : {}),
|
|
270
|
+
};
|
|
271
|
+
const durableSeq = durableSessionInSeq.get(sessionId);
|
|
272
|
+
if (durableSeq !== undefined) {
|
|
273
|
+
v3_1.sessionStreams.setLastSeqNum(sessionId, "in", durableSeq);
|
|
274
|
+
}
|
|
275
|
+
const rawSendSessionInput = drivers.sessions.in.send;
|
|
276
|
+
sendSessionInput = async (id, data, io, metadata) => {
|
|
277
|
+
await rawSendSessionInput(id, data, io, metadata);
|
|
278
|
+
const io2 = io ?? "in";
|
|
279
|
+
if (io2 === "in") {
|
|
280
|
+
const latest = v3_1.sessionStreams.lastSeqNum(id, "in");
|
|
281
|
+
if (latest !== undefined) {
|
|
282
|
+
durableSessionInSeq.set(id, Math.max(durableSessionInSeq.get(id) ?? latest, latest));
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
};
|
|
286
|
+
closeSessionInput = drivers.sessions.in.close;
|
|
287
|
+
// Record every chunk written to session.out, detect turn-complete.
|
|
288
|
+
const listener = (chunk) => {
|
|
289
|
+
allRawChunks.push(chunk);
|
|
290
|
+
if (!isControlChunk(chunk)) {
|
|
291
|
+
allChunks.push(chunk);
|
|
292
|
+
}
|
|
293
|
+
if (typeof chunk === "object" &&
|
|
294
|
+
chunk !== null &&
|
|
295
|
+
chunk.type === "trigger:turn-complete") {
|
|
296
|
+
const resolvers = turnCompleteResolvers;
|
|
297
|
+
turnCompleteResolvers = [];
|
|
298
|
+
for (const resolve of resolvers)
|
|
299
|
+
resolve();
|
|
300
|
+
}
|
|
301
|
+
};
|
|
302
|
+
sessionOutState.listeners.add(listener);
|
|
303
|
+
const unsubscribe = () => sessionOutState.listeners.delete(listener);
|
|
304
|
+
if (options.setupLocals) {
|
|
305
|
+
await options.setupLocals({ set: drivers.locals.set });
|
|
306
|
+
}
|
|
307
|
+
harnessReadyResolve();
|
|
308
|
+
try {
|
|
309
|
+
if (process.env.TRIGGER_CHAT_TEST_DEBUG === "1") {
|
|
310
|
+
console.log("[mockChatAgent] Starting runFn with payload:", initialPayload);
|
|
311
|
+
}
|
|
312
|
+
await runFn(initialPayload, {
|
|
313
|
+
ctx: drivers.ctx,
|
|
314
|
+
signal: runSignal.signal,
|
|
315
|
+
});
|
|
316
|
+
if (process.env.TRIGGER_CHAT_TEST_DEBUG === "1") {
|
|
317
|
+
console.log("[mockChatAgent] runFn returned");
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
catch (err) {
|
|
321
|
+
if (process.env.TRIGGER_CHAT_TEST_DEBUG === "1") {
|
|
322
|
+
console.log("[mockChatAgent] runFn threw:", err);
|
|
323
|
+
}
|
|
324
|
+
throw err;
|
|
325
|
+
}
|
|
326
|
+
finally {
|
|
327
|
+
unsubscribe();
|
|
328
|
+
// Resolve any outstanding turn-complete waiters so callers don't hang
|
|
329
|
+
const resolvers = turnCompleteResolvers;
|
|
330
|
+
turnCompleteResolvers = [];
|
|
331
|
+
for (const resolve of resolvers)
|
|
332
|
+
resolve();
|
|
333
|
+
}
|
|
334
|
+
}, options.taskContext)
|
|
335
|
+
.catch((err) => {
|
|
336
|
+
// Propagate errors to pending turn waiters instead of dropping them
|
|
337
|
+
const resolvers = turnCompleteResolvers;
|
|
338
|
+
turnCompleteResolvers = [];
|
|
339
|
+
for (const resolve of resolvers)
|
|
340
|
+
resolve();
|
|
341
|
+
throw err;
|
|
342
|
+
})
|
|
343
|
+
.finally(() => {
|
|
344
|
+
// Always clear the test overrides, even if the task threw.
|
|
345
|
+
(0, sessions_js_1.__setSessionOpenImplForTests)(undefined);
|
|
346
|
+
(0, sessions_js_1.__setSessionStartImplForTests)(undefined);
|
|
347
|
+
(0, sessions_js_1.__setSessionCloseImplForTests)(undefined);
|
|
348
|
+
(0, ai_js_1.__setReadChatSnapshotImplForTests)(undefined);
|
|
349
|
+
(0, ai_js_1.__setWriteChatSnapshotImplForTests)(undefined);
|
|
350
|
+
(0, ai_js_1.__setReplaySessionOutTailImplForTests)(undefined);
|
|
351
|
+
(0, ai_js_1.__setReplaySessionInTailImplForTests)(undefined);
|
|
352
|
+
});
|
|
353
|
+
const sendPayloadAndWait = async (payload) => {
|
|
354
|
+
await harnessReady;
|
|
355
|
+
const before = allRawChunks.length;
|
|
356
|
+
const turnComplete = waitForTurnComplete();
|
|
357
|
+
await sendSessionInput(sessionId, { kind: "message", payload });
|
|
358
|
+
await turnComplete;
|
|
359
|
+
const rawChunks = allRawChunks.slice(before);
|
|
360
|
+
const chunks = rawChunks.filter((c) => !isControlChunk(c));
|
|
361
|
+
return { chunks, rawChunks };
|
|
362
|
+
};
|
|
363
|
+
const harness = {
|
|
364
|
+
chatId,
|
|
365
|
+
async sendMessage(message) {
|
|
366
|
+
return sendPayloadAndWait({
|
|
367
|
+
message,
|
|
368
|
+
chatId,
|
|
369
|
+
trigger: "submit-message",
|
|
370
|
+
metadata: clientData,
|
|
371
|
+
});
|
|
372
|
+
},
|
|
373
|
+
async sendRegenerate() {
|
|
374
|
+
return sendPayloadAndWait({
|
|
375
|
+
chatId,
|
|
376
|
+
trigger: "regenerate-message",
|
|
377
|
+
metadata: clientData,
|
|
378
|
+
});
|
|
379
|
+
},
|
|
380
|
+
async sendHeadStart({ messages }) {
|
|
381
|
+
return sendPayloadAndWait({
|
|
382
|
+
headStartMessages: messages,
|
|
383
|
+
chatId,
|
|
384
|
+
trigger: "handover-prepare",
|
|
385
|
+
metadata: clientData,
|
|
386
|
+
});
|
|
387
|
+
},
|
|
388
|
+
async sendAction(action) {
|
|
389
|
+
return sendPayloadAndWait({
|
|
390
|
+
chatId,
|
|
391
|
+
trigger: "action",
|
|
392
|
+
action,
|
|
393
|
+
metadata: clientData,
|
|
394
|
+
});
|
|
395
|
+
},
|
|
396
|
+
async sendWebhookAction(args) {
|
|
397
|
+
const deliveryId = args.deliveryId ?? `dlv_${++channelDeliveryCounter}`;
|
|
398
|
+
const turn = await sendPayloadAndWait({
|
|
399
|
+
chatId,
|
|
400
|
+
trigger: "action",
|
|
401
|
+
actionSource: "webhook",
|
|
402
|
+
action: {
|
|
403
|
+
type: args.type,
|
|
404
|
+
event: args.event,
|
|
405
|
+
source: args.source ?? "custom",
|
|
406
|
+
headers: args.headers ?? {},
|
|
407
|
+
deliveryId,
|
|
408
|
+
...(args.externalDeliveryId ? { externalDeliveryId: args.externalDeliveryId } : {}),
|
|
409
|
+
},
|
|
410
|
+
metadata: clientData,
|
|
411
|
+
});
|
|
412
|
+
await settlePostTurnChannelEgress(chatId);
|
|
413
|
+
return turn;
|
|
414
|
+
},
|
|
415
|
+
async sendPendingChannelEvent(args) {
|
|
416
|
+
await harnessReady;
|
|
417
|
+
const seqBefore = v3_1.sessionStreams.lastSeqNum(chatId, "in") ?? -1;
|
|
418
|
+
const deliveryId = args.deliveryId ?? `dlv_${++channelDeliveryCounter}`;
|
|
419
|
+
await sendSessionInput(sessionId, {
|
|
420
|
+
kind: "message",
|
|
421
|
+
payload: {
|
|
422
|
+
chatId,
|
|
423
|
+
trigger: "submit-message",
|
|
424
|
+
channelEvent: {
|
|
425
|
+
connectorId: args.connectorId ?? exports.DEFAULT_TEST_CONNECTOR_ID,
|
|
426
|
+
event: args.event,
|
|
427
|
+
source: args.source ?? "custom",
|
|
428
|
+
headers: {},
|
|
429
|
+
deliveryId,
|
|
430
|
+
},
|
|
431
|
+
metadata: clientData,
|
|
432
|
+
},
|
|
433
|
+
});
|
|
434
|
+
const deadline = Date.now() + 5_000;
|
|
435
|
+
while ((v3_1.sessionStreams.lastSeqNum(chatId, "in") ?? -1) <= seqBefore) {
|
|
436
|
+
if (Date.now() > deadline) {
|
|
437
|
+
throw new Error(`sendPendingChannelEvent: ${deliveryId} never landed on session.in`);
|
|
438
|
+
}
|
|
439
|
+
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
440
|
+
}
|
|
441
|
+
},
|
|
442
|
+
async sendPendingMessage(message) {
|
|
443
|
+
await harnessReady;
|
|
444
|
+
const seqBefore = v3_1.sessionStreams.lastSeqNum(chatId, "in") ?? -1;
|
|
445
|
+
await sendSessionInput(sessionId, {
|
|
446
|
+
kind: "message",
|
|
447
|
+
payload: {
|
|
448
|
+
message,
|
|
449
|
+
chatId,
|
|
450
|
+
trigger: "submit-message",
|
|
451
|
+
metadata: clientData,
|
|
452
|
+
},
|
|
453
|
+
});
|
|
454
|
+
/**
|
|
455
|
+
* Wait for the record to be observable on the channel, not merely for the
|
|
456
|
+
* send call to return. A test that continues on the send alone is racing the
|
|
457
|
+
* append: the message can still be in flight when the step boundary runs, so
|
|
458
|
+
* the injection it was meant to trigger silently does not happen and the test
|
|
459
|
+
* passes while proving nothing.
|
|
460
|
+
*/
|
|
461
|
+
const deadline = Date.now() + 5_000;
|
|
462
|
+
while ((v3_1.sessionStreams.lastSeqNum(chatId, "in") ?? -1) <= seqBefore) {
|
|
463
|
+
if (Date.now() > deadline) {
|
|
464
|
+
throw new Error(`sendPendingMessage: append for ${message.id} never landed on session.in`);
|
|
465
|
+
}
|
|
466
|
+
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
467
|
+
}
|
|
468
|
+
},
|
|
469
|
+
async sendChannelEvent(args) {
|
|
470
|
+
const deliveryId = args.deliveryId ?? `dlv_${++channelDeliveryCounter}`;
|
|
471
|
+
const turn = await sendPayloadAndWait({
|
|
472
|
+
chatId,
|
|
473
|
+
trigger: "submit-message",
|
|
474
|
+
channelEvent: {
|
|
475
|
+
connectorId: args.connectorId ?? exports.DEFAULT_TEST_CONNECTOR_ID,
|
|
476
|
+
event: args.event,
|
|
477
|
+
source: args.source ?? "custom",
|
|
478
|
+
headers: args.headers ?? {},
|
|
479
|
+
deliveryId,
|
|
480
|
+
...(args.externalDeliveryId ? { externalDeliveryId: args.externalDeliveryId } : {}),
|
|
481
|
+
},
|
|
482
|
+
metadata: clientData,
|
|
483
|
+
});
|
|
484
|
+
await settlePostTurnChannelEgress(chatId);
|
|
485
|
+
return turn;
|
|
486
|
+
},
|
|
487
|
+
async deliverChannelEvent(args) {
|
|
488
|
+
const deliveryId = args.deliveryId ?? `dlv_${++channelDeliveryCounter}`;
|
|
489
|
+
await sendPayloadAndWait({
|
|
490
|
+
chatId,
|
|
491
|
+
trigger: "submit-message",
|
|
492
|
+
channelEvent: {
|
|
493
|
+
connectorId: args.connectorId ?? exports.DEFAULT_TEST_CONNECTOR_ID,
|
|
494
|
+
event: args.event,
|
|
495
|
+
source: args.source ?? "custom",
|
|
496
|
+
headers: args.headers ?? {},
|
|
497
|
+
deliveryId,
|
|
498
|
+
...(args.externalDeliveryId ? { externalDeliveryId: args.externalDeliveryId } : {}),
|
|
499
|
+
},
|
|
500
|
+
metadata: clientData,
|
|
501
|
+
});
|
|
502
|
+
await settlePostTurnChannelEgress(chatId);
|
|
503
|
+
},
|
|
504
|
+
async sendStop(message) {
|
|
505
|
+
await harnessReady;
|
|
506
|
+
await sendSessionInput(sessionId, { kind: "stop", message });
|
|
507
|
+
},
|
|
508
|
+
async sendHandover(args) {
|
|
509
|
+
await harnessReady;
|
|
510
|
+
const before = allRawChunks.length;
|
|
511
|
+
const turnComplete = waitForTurnComplete();
|
|
512
|
+
await sendSessionInput(sessionId, {
|
|
513
|
+
kind: "handover",
|
|
514
|
+
partialAssistantMessage: args.partialAssistantMessage,
|
|
515
|
+
messageId: args.messageId,
|
|
516
|
+
isFinal: args.isFinal ?? false,
|
|
517
|
+
});
|
|
518
|
+
await turnComplete;
|
|
519
|
+
const rawChunks = allRawChunks.slice(before);
|
|
520
|
+
const chunks = rawChunks.filter((c) => !isControlChunk(c));
|
|
521
|
+
return { chunks, rawChunks };
|
|
522
|
+
},
|
|
523
|
+
async sendHandoverSkip() {
|
|
524
|
+
await harnessReady;
|
|
525
|
+
// No turn-complete on skip — the agent exits without firing hooks.
|
|
526
|
+
// Send the chunk and wait for the run to finish.
|
|
527
|
+
await sendSessionInput(sessionId, { kind: "handover-skip" });
|
|
528
|
+
await Promise.race([
|
|
529
|
+
taskFinished.catch(() => { }),
|
|
530
|
+
new Promise((resolve) => setTimeout(resolve, 1000)),
|
|
531
|
+
]);
|
|
532
|
+
},
|
|
533
|
+
async sendClose() {
|
|
534
|
+
await harnessReady;
|
|
535
|
+
await sendSessionInput(sessionId, {
|
|
536
|
+
kind: "message",
|
|
537
|
+
payload: {
|
|
538
|
+
chatId,
|
|
539
|
+
trigger: "close",
|
|
540
|
+
},
|
|
541
|
+
});
|
|
542
|
+
await harness.waitForExit();
|
|
543
|
+
},
|
|
544
|
+
async waitForExit(timeoutMs = 2000) {
|
|
545
|
+
let timer;
|
|
546
|
+
const timedOut = new Promise((resolve) => {
|
|
547
|
+
timer = setTimeout(() => resolve("timeout"), timeoutMs);
|
|
548
|
+
});
|
|
549
|
+
try {
|
|
550
|
+
const result = await Promise.race([taskFinished.catch(() => "done"), timedOut]);
|
|
551
|
+
if (result === "timeout") {
|
|
552
|
+
throw new Error(`mockChatAgent: run did not exit within ${timeoutMs}ms`);
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
finally {
|
|
556
|
+
if (timer)
|
|
557
|
+
clearTimeout(timer);
|
|
558
|
+
}
|
|
559
|
+
},
|
|
560
|
+
getCloseCalls() {
|
|
561
|
+
return [...closeCalls];
|
|
562
|
+
},
|
|
563
|
+
failNextCloseCalls(count) {
|
|
564
|
+
failCloseCalls = count;
|
|
565
|
+
},
|
|
566
|
+
seedSnapshot(snapshot) {
|
|
567
|
+
seededSnapshot = snapshot;
|
|
568
|
+
},
|
|
569
|
+
seedSessionOutTail(chunks) {
|
|
570
|
+
seededReplayChunks = chunks ?? [];
|
|
571
|
+
},
|
|
572
|
+
seedSessionOutPartial(partial) {
|
|
573
|
+
seededReplayPartial = partial;
|
|
574
|
+
},
|
|
575
|
+
seedSessionInTail(entries) {
|
|
576
|
+
seededSessionInTail = entries;
|
|
577
|
+
// The seeded tail occupies seqNums 1..n of the channel, so anything sent
|
|
578
|
+
// live afterwards has to continue above it.
|
|
579
|
+
if (entries.length > 0) {
|
|
580
|
+
v3_1.sessionStreams.setLastSeqNum(sessionId, "in", entries.length);
|
|
581
|
+
}
|
|
582
|
+
},
|
|
583
|
+
async deliverSessionInAtSeq(message, seqNum) {
|
|
584
|
+
await harnessReady;
|
|
585
|
+
await sendSessionInput(sessionId, { kind: "message", payload: { chatId, trigger: "submit-message", message } }, "in", { seqNum });
|
|
586
|
+
},
|
|
587
|
+
getSnapshot() {
|
|
588
|
+
return lastWrittenSnapshot;
|
|
589
|
+
},
|
|
590
|
+
async close() {
|
|
591
|
+
await harnessReady;
|
|
592
|
+
// Send a close trigger wrapped as a `kind: "message"` ChatInputChunk.
|
|
593
|
+
// The turn loop checks for this after a successful turn and exits
|
|
594
|
+
// cleanly. On error-recovery paths the loop just loops back with
|
|
595
|
+
// the close payload, so we also close the session input below to
|
|
596
|
+
// unblock any pending once() waiters.
|
|
597
|
+
try {
|
|
598
|
+
await sendSessionInput(sessionId, {
|
|
599
|
+
kind: "message",
|
|
600
|
+
payload: {
|
|
601
|
+
chatId,
|
|
602
|
+
trigger: "close",
|
|
603
|
+
},
|
|
604
|
+
});
|
|
605
|
+
}
|
|
606
|
+
catch {
|
|
607
|
+
// best-effort
|
|
608
|
+
}
|
|
609
|
+
// Resolve any pending once() waiters on the session input with a
|
|
610
|
+
// timeout error — that makes waitWithIdleTimeout return
|
|
611
|
+
// `{ ok: false }` and the turn loop exits cleanly.
|
|
612
|
+
closeSessionInput?.(sessionId);
|
|
613
|
+
// Also abort the run signal so anything downstream (streamText,
|
|
614
|
+
// deferred work) unwinds promptly.
|
|
615
|
+
runSignal?.abort("close");
|
|
616
|
+
// Wait for run() to return. The loop's error recovery path will
|
|
617
|
+
// see !next.ok and exit. Use a bounded wait so tests never hang.
|
|
618
|
+
await Promise.race([
|
|
619
|
+
taskFinished.catch(() => { }),
|
|
620
|
+
new Promise((resolve) => setTimeout(resolve, 1000)),
|
|
621
|
+
]);
|
|
622
|
+
},
|
|
623
|
+
get allChunks() {
|
|
624
|
+
return allChunks.slice();
|
|
625
|
+
},
|
|
626
|
+
get allRawChunks() {
|
|
627
|
+
return allRawChunks.slice();
|
|
628
|
+
},
|
|
629
|
+
};
|
|
630
|
+
return harness;
|
|
631
|
+
}
|
|
632
|
+
/**
|
|
633
|
+
* Reduce a synthetic UIMessageChunk[] sequence into the UIMessage[] that
|
|
634
|
+
* the runtime's `replaySessionOutTail` would produce. Splits chunks at
|
|
635
|
+
* `start` boundaries and reduces each segment with
|
|
636
|
+
* `reduceUIMessageChunks`. The trailing un-finished segment goes through
|
|
637
|
+
* `cleanupAbortedParts`. Mirrors the production reducer used in
|
|
638
|
+
* `ai.ts:replaySessionOutTail`.
|
|
639
|
+
*/
|
|
640
|
+
async function reduceChunksToMessages(chunks) {
|
|
641
|
+
if (chunks.length === 0)
|
|
642
|
+
return [];
|
|
643
|
+
const aiModule = (await import("ai"));
|
|
644
|
+
const cleanupAbortedParts = aiModule.cleanupAbortedParts;
|
|
645
|
+
const segments = [];
|
|
646
|
+
let current;
|
|
647
|
+
for (const chunk of chunks) {
|
|
648
|
+
if (chunk.type === "start") {
|
|
649
|
+
current = { chunks: [chunk], closed: false };
|
|
650
|
+
segments.push(current);
|
|
651
|
+
continue;
|
|
652
|
+
}
|
|
653
|
+
if (!current) {
|
|
654
|
+
current = { chunks: [], closed: false };
|
|
655
|
+
segments.push(current);
|
|
656
|
+
}
|
|
657
|
+
current.chunks.push(chunk);
|
|
658
|
+
if (chunk.type === "finish") {
|
|
659
|
+
current.closed = true;
|
|
660
|
+
current = undefined;
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
const out = [];
|
|
664
|
+
for (let i = 0; i < segments.length; i++) {
|
|
665
|
+
const seg = segments[i];
|
|
666
|
+
const isTrailing = i === segments.length - 1 && !seg.closed;
|
|
667
|
+
let last;
|
|
668
|
+
try {
|
|
669
|
+
last = await (0, uiMessageChunks_js_1.reduceUIMessageChunks)(seg.chunks);
|
|
670
|
+
}
|
|
671
|
+
catch {
|
|
672
|
+
// Skip malformed segment — tests can assert by inspecting what makes it through.
|
|
673
|
+
continue;
|
|
674
|
+
}
|
|
675
|
+
if (!last)
|
|
676
|
+
continue;
|
|
677
|
+
if (isTrailing && cleanupAbortedParts) {
|
|
678
|
+
const cleaned = cleanupAbortedParts(last);
|
|
679
|
+
if (!cleaned.parts || cleaned.parts.length === 0)
|
|
680
|
+
continue;
|
|
681
|
+
out.push(cleaned);
|
|
682
|
+
}
|
|
683
|
+
else {
|
|
684
|
+
out.push(last);
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
return out;
|
|
688
|
+
}
|
|
689
|
+
//# sourceMappingURL=mock-chat-agent.js.map
|