@trigger.dev/core 4.4.6 → 4.5.0-rc.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/commonjs/v3/apiClient/errors.d.ts +5 -0
- package/dist/commonjs/v3/apiClient/errors.js +12 -0
- package/dist/commonjs/v3/apiClient/errors.js.map +1 -1
- package/dist/commonjs/v3/apiClient/index.d.ts +208 -1
- package/dist/commonjs/v3/apiClient/index.js +204 -0
- package/dist/commonjs/v3/apiClient/index.js.map +1 -1
- package/dist/commonjs/v3/apiClient/runStream.d.ts +44 -0
- package/dist/commonjs/v3/apiClient/runStream.js +156 -22
- package/dist/commonjs/v3/apiClient/runStream.js.map +1 -1
- package/dist/commonjs/v3/apiClient/runStream.test.d.ts +1 -0
- package/dist/commonjs/v3/apiClient/runStream.test.js +511 -0
- package/dist/commonjs/v3/apiClient/runStream.test.js.map +1 -0
- package/dist/commonjs/v3/apiClient/types.d.ts +2 -0
- package/dist/commonjs/v3/auth/environment.d.ts +62 -0
- package/dist/commonjs/v3/auth/environment.js +20 -0
- package/dist/commonjs/v3/auth/environment.js.map +1 -0
- package/dist/commonjs/v3/errors.d.ts +7 -0
- package/dist/commonjs/v3/errors.js +22 -2
- package/dist/commonjs/v3/errors.js.map +1 -1
- package/dist/commonjs/v3/index.d.ts +2 -1
- package/dist/commonjs/v3/index.js +1 -0
- package/dist/commonjs/v3/index.js.map +1 -1
- package/dist/commonjs/v3/inputStreams/index.d.ts +3 -0
- package/dist/commonjs/v3/inputStreams/index.js +9 -0
- package/dist/commonjs/v3/inputStreams/index.js.map +1 -1
- package/dist/commonjs/v3/inputStreams/manager.d.ts +14 -0
- package/dist/commonjs/v3/inputStreams/manager.js +116 -4
- package/dist/commonjs/v3/inputStreams/manager.js.map +1 -1
- package/dist/commonjs/v3/inputStreams/noopManager.d.ts +3 -0
- package/dist/commonjs/v3/inputStreams/noopManager.js +3 -0
- package/dist/commonjs/v3/inputStreams/noopManager.js.map +1 -1
- package/dist/commonjs/v3/inputStreams/types.d.ts +19 -0
- package/dist/commonjs/v3/locals/manager.js.map +1 -1
- package/dist/commonjs/v3/locals/types.d.ts +18 -7
- package/dist/commonjs/v3/realtime-streams-api.d.ts +3 -0
- package/dist/commonjs/v3/realtime-streams-api.js +8 -1
- package/dist/commonjs/v3/realtime-streams-api.js.map +1 -1
- package/dist/commonjs/v3/realtimeStreams/index.d.ts +3 -0
- package/dist/commonjs/v3/realtimeStreams/index.js +11 -1
- package/dist/commonjs/v3/realtimeStreams/index.js.map +1 -1
- package/dist/commonjs/v3/realtimeStreams/manager.d.ts +11 -0
- package/dist/commonjs/v3/realtimeStreams/manager.js +58 -2
- package/dist/commonjs/v3/realtimeStreams/manager.js.map +1 -1
- package/dist/commonjs/v3/realtimeStreams/manager.test.d.ts +1 -0
- package/dist/commonjs/v3/realtimeStreams/manager.test.js +92 -0
- package/dist/commonjs/v3/realtimeStreams/manager.test.js.map +1 -0
- package/dist/commonjs/v3/realtimeStreams/noopManager.js +1 -1
- package/dist/commonjs/v3/realtimeStreams/noopManager.js.map +1 -1
- package/dist/commonjs/v3/realtimeStreams/sessionStreamInstance.d.ts +41 -0
- package/dist/commonjs/v3/realtimeStreams/sessionStreamInstance.js +77 -0
- package/dist/commonjs/v3/realtimeStreams/sessionStreamInstance.js.map +1 -0
- package/dist/commonjs/v3/realtimeStreams/sessionStreamOneshot.d.ts +45 -0
- package/dist/commonjs/v3/realtimeStreams/sessionStreamOneshot.js +83 -0
- package/dist/commonjs/v3/realtimeStreams/sessionStreamOneshot.js.map +1 -0
- package/dist/commonjs/v3/realtimeStreams/streamInstance.d.ts +14 -2
- package/dist/commonjs/v3/realtimeStreams/streamInstance.js +5 -2
- package/dist/commonjs/v3/realtimeStreams/streamInstance.js.map +1 -1
- package/dist/commonjs/v3/realtimeStreams/streamsWriterV1.d.ts +2 -2
- package/dist/commonjs/v3/realtimeStreams/streamsWriterV1.js +2 -1
- package/dist/commonjs/v3/realtimeStreams/streamsWriterV1.js.map +1 -1
- package/dist/commonjs/v3/realtimeStreams/streamsWriterV2.d.ts +23 -2
- package/dist/commonjs/v3/realtimeStreams/streamsWriterV2.js +57 -4
- package/dist/commonjs/v3/realtimeStreams/streamsWriterV2.js.map +1 -1
- package/dist/commonjs/v3/realtimeStreams/streamsWriterV2.test.d.ts +1 -0
- package/dist/commonjs/v3/realtimeStreams/streamsWriterV2.test.js +68 -0
- package/dist/commonjs/v3/realtimeStreams/streamsWriterV2.test.js.map +1 -0
- package/dist/commonjs/v3/realtimeStreams/types.d.ts +42 -3
- package/dist/commonjs/v3/resource-catalog/catalog.d.ts +4 -1
- package/dist/commonjs/v3/resource-catalog/index.d.ts +4 -1
- package/dist/commonjs/v3/resource-catalog/index.js +9 -0
- package/dist/commonjs/v3/resource-catalog/index.js.map +1 -1
- package/dist/commonjs/v3/resource-catalog/noopResourceCatalog.d.ts +4 -1
- package/dist/commonjs/v3/resource-catalog/noopResourceCatalog.js +9 -0
- package/dist/commonjs/v3/resource-catalog/noopResourceCatalog.js.map +1 -1
- package/dist/commonjs/v3/resource-catalog/standardResourceCatalog.d.ts +6 -1
- package/dist/commonjs/v3/resource-catalog/standardResourceCatalog.js +52 -4
- package/dist/commonjs/v3/resource-catalog/standardResourceCatalog.js.map +1 -1
- package/dist/commonjs/v3/runEngineWorker/supervisor/http.d.ts +2 -0
- package/dist/commonjs/v3/runEngineWorker/supervisor/schemas.d.ts +14 -0
- package/dist/commonjs/v3/runEngineWorker/workload/http.d.ts +1 -0
- package/dist/commonjs/v3/runEngineWorker/workload/schemas.d.ts +7 -0
- package/dist/commonjs/v3/schemas/api.d.ts +333 -0
- package/dist/commonjs/v3/schemas/api.js +82 -9
- package/dist/commonjs/v3/schemas/api.js.map +1 -1
- package/dist/commonjs/v3/schemas/build.d.ts +240 -0
- package/dist/commonjs/v3/schemas/build.js +3 -0
- package/dist/commonjs/v3/schemas/build.js.map +1 -1
- package/dist/commonjs/v3/schemas/checkpoints.d.ts +7 -0
- package/dist/commonjs/v3/schemas/idempotencyKey.test.d.ts +1 -0
- package/dist/commonjs/v3/schemas/idempotencyKey.test.js +143 -0
- package/dist/commonjs/v3/schemas/idempotencyKey.test.js.map +1 -0
- package/dist/commonjs/v3/schemas/messages.d.ts +160 -0
- package/dist/commonjs/v3/schemas/resources.d.ts +40 -0
- package/dist/commonjs/v3/schemas/resources.js +5 -1
- package/dist/commonjs/v3/schemas/resources.js.map +1 -1
- package/dist/commonjs/v3/schemas/runEngine.d.ts +12 -0
- package/dist/commonjs/v3/schemas/runEngine.js +3 -1
- package/dist/commonjs/v3/schemas/runEngine.js.map +1 -1
- package/dist/commonjs/v3/schemas/schemas.d.ts +59 -0
- package/dist/commonjs/v3/schemas/schemas.js +21 -1
- package/dist/commonjs/v3/schemas/schemas.js.map +1 -1
- package/dist/commonjs/v3/semanticInternalAttributes.d.ts +1 -0
- package/dist/commonjs/v3/semanticInternalAttributes.js +1 -0
- package/dist/commonjs/v3/semanticInternalAttributes.js.map +1 -1
- package/dist/commonjs/v3/session-streams-api.d.ts +5 -0
- package/dist/commonjs/v3/session-streams-api.js +25 -0
- package/dist/commonjs/v3/session-streams-api.js.map +1 -0
- package/dist/commonjs/v3/sessionStreams/chatSnapshot.d.ts +53 -0
- package/dist/commonjs/v3/sessionStreams/chatSnapshot.js +43 -0
- package/dist/commonjs/v3/sessionStreams/chatSnapshot.js.map +1 -0
- package/dist/commonjs/v3/sessionStreams/index.d.ts +24 -0
- package/dist/commonjs/v3/sessionStreams/index.js +64 -0
- package/dist/commonjs/v3/sessionStreams/index.js.map +1 -0
- package/dist/commonjs/v3/sessionStreams/manager.d.ts +54 -0
- package/dist/commonjs/v3/sessionStreams/manager.js +511 -0
- package/dist/commonjs/v3/sessionStreams/manager.js.map +1 -0
- package/dist/commonjs/v3/sessionStreams/manager.test.d.ts +1 -0
- package/dist/commonjs/v3/sessionStreams/manager.test.js +123 -0
- package/dist/commonjs/v3/sessionStreams/manager.test.js.map +1 -0
- package/dist/commonjs/v3/sessionStreams/noopManager.d.ts +20 -0
- package/dist/commonjs/v3/sessionStreams/noopManager.js +35 -0
- package/dist/commonjs/v3/sessionStreams/noopManager.js.map +1 -0
- package/dist/commonjs/v3/sessionStreams/types.d.ts +65 -0
- package/dist/commonjs/v3/sessionStreams/types.js +7 -0
- package/dist/commonjs/v3/sessionStreams/types.js.map +1 -0
- package/dist/commonjs/v3/sessionStreams/wireProtocol.d.ts +65 -0
- package/dist/commonjs/v3/sessionStreams/wireProtocol.js +72 -0
- package/dist/commonjs/v3/sessionStreams/wireProtocol.js.map +1 -0
- package/dist/commonjs/v3/taskContext/index.d.ts +4 -0
- package/dist/commonjs/v3/taskContext/index.js +18 -0
- package/dist/commonjs/v3/taskContext/index.js.map +1 -1
- package/dist/commonjs/v3/taskContext/index.test.d.ts +1 -0
- package/dist/commonjs/v3/taskContext/index.test.js +73 -0
- package/dist/commonjs/v3/taskContext/index.test.js.map +1 -0
- package/dist/commonjs/v3/taskContext/otelProcessors.js +11 -0
- package/dist/commonjs/v3/taskContext/otelProcessors.js.map +1 -1
- package/dist/commonjs/v3/test/index.d.ts +5 -0
- package/dist/commonjs/v3/test/index.js +14 -0
- package/dist/commonjs/v3/test/index.js.map +1 -0
- package/dist/commonjs/v3/test/mock-task-context.d.ts +123 -0
- package/dist/commonjs/v3/test/mock-task-context.js +193 -0
- package/dist/commonjs/v3/test/mock-task-context.js.map +1 -0
- package/dist/commonjs/v3/test/test-input-stream-manager.d.ts +46 -0
- package/dist/commonjs/v3/test/test-input-stream-manager.js +192 -0
- package/dist/commonjs/v3/test/test-input-stream-manager.js.map +1 -0
- package/dist/commonjs/v3/test/test-realtime-streams-manager.d.ts +40 -0
- package/dist/commonjs/v3/test/test-realtime-streams-manager.js +140 -0
- package/dist/commonjs/v3/test/test-realtime-streams-manager.js.map +1 -0
- package/dist/commonjs/v3/test/test-run-metadata-manager.d.ts +31 -0
- package/dist/commonjs/v3/test/test-run-metadata-manager.js +86 -0
- package/dist/commonjs/v3/test/test-run-metadata-manager.js.map +1 -0
- package/dist/commonjs/v3/test/test-session-stream-manager.d.ts +60 -0
- package/dist/commonjs/v3/test/test-session-stream-manager.js +247 -0
- package/dist/commonjs/v3/test/test-session-stream-manager.js.map +1 -0
- package/dist/commonjs/v3/types/tasks.d.ts +35 -0
- package/dist/commonjs/v3/utils/gitBranch.d.ts +2 -0
- package/dist/commonjs/v3/utils/gitBranch.js +46 -0
- package/dist/commonjs/v3/utils/gitBranch.js.map +1 -0
- package/dist/commonjs/v3/utils/globals.d.ts +2 -0
- package/dist/commonjs/v3/utils/globals.js.map +1 -1
- package/dist/commonjs/v3/utils/reconnectBackoff.d.ts +20 -0
- package/dist/commonjs/v3/utils/reconnectBackoff.js +29 -0
- package/dist/commonjs/v3/utils/reconnectBackoff.js.map +1 -0
- package/dist/commonjs/v3/utils/reconnectBackoff.test.d.ts +1 -0
- package/dist/commonjs/v3/utils/reconnectBackoff.test.js +76 -0
- package/dist/commonjs/v3/utils/reconnectBackoff.test.js.map +1 -0
- package/dist/commonjs/v3/workers/index.d.ts +1 -0
- package/dist/commonjs/v3/workers/index.js +3 -1
- package/dist/commonjs/v3/workers/index.js.map +1 -1
- package/dist/commonjs/v3/workers/taskExecutor.js +1 -0
- package/dist/commonjs/v3/workers/taskExecutor.js.map +1 -1
- package/dist/commonjs/version.js +1 -1
- package/dist/esm/v3/apiClient/errors.d.ts +5 -0
- package/dist/esm/v3/apiClient/errors.js +11 -0
- package/dist/esm/v3/apiClient/errors.js.map +1 -1
- package/dist/esm/v3/apiClient/index.d.ts +208 -1
- package/dist/esm/v3/apiClient/index.js +205 -1
- package/dist/esm/v3/apiClient/index.js.map +1 -1
- package/dist/esm/v3/apiClient/runStream.d.ts +44 -0
- package/dist/esm/v3/apiClient/runStream.js +157 -23
- package/dist/esm/v3/apiClient/runStream.js.map +1 -1
- package/dist/esm/v3/apiClient/runStream.test.d.ts +1 -0
- package/dist/esm/v3/apiClient/runStream.test.js +509 -0
- package/dist/esm/v3/apiClient/runStream.test.js.map +1 -0
- package/dist/esm/v3/apiClient/types.d.ts +2 -0
- package/dist/esm/v3/auth/environment.d.ts +62 -0
- package/dist/esm/v3/auth/environment.js +19 -0
- package/dist/esm/v3/auth/environment.js.map +1 -0
- package/dist/esm/v3/errors.d.ts +7 -0
- package/dist/esm/v3/errors.js +19 -1
- package/dist/esm/v3/errors.js.map +1 -1
- package/dist/esm/v3/index.d.ts +2 -1
- package/dist/esm/v3/index.js +1 -0
- package/dist/esm/v3/index.js.map +1 -1
- package/dist/esm/v3/inputStreams/index.d.ts +3 -0
- package/dist/esm/v3/inputStreams/index.js +9 -0
- package/dist/esm/v3/inputStreams/index.js.map +1 -1
- package/dist/esm/v3/inputStreams/manager.d.ts +14 -0
- package/dist/esm/v3/inputStreams/manager.js +116 -4
- package/dist/esm/v3/inputStreams/manager.js.map +1 -1
- package/dist/esm/v3/inputStreams/noopManager.d.ts +3 -0
- package/dist/esm/v3/inputStreams/noopManager.js +3 -0
- package/dist/esm/v3/inputStreams/noopManager.js.map +1 -1
- package/dist/esm/v3/inputStreams/types.d.ts +19 -0
- package/dist/esm/v3/locals/manager.js.map +1 -1
- package/dist/esm/v3/locals/types.d.ts +18 -7
- package/dist/esm/v3/realtime-streams-api.d.ts +3 -0
- package/dist/esm/v3/realtime-streams-api.js +2 -0
- package/dist/esm/v3/realtime-streams-api.js.map +1 -1
- package/dist/esm/v3/realtimeStreams/index.d.ts +3 -0
- package/dist/esm/v3/realtimeStreams/index.js +5 -0
- package/dist/esm/v3/realtimeStreams/index.js.map +1 -1
- package/dist/esm/v3/realtimeStreams/manager.d.ts +11 -0
- package/dist/esm/v3/realtimeStreams/manager.js +58 -2
- package/dist/esm/v3/realtimeStreams/manager.js.map +1 -1
- package/dist/esm/v3/realtimeStreams/manager.test.d.ts +1 -0
- package/dist/esm/v3/realtimeStreams/manager.test.js +90 -0
- package/dist/esm/v3/realtimeStreams/manager.test.js.map +1 -0
- package/dist/esm/v3/realtimeStreams/noopManager.js +1 -1
- package/dist/esm/v3/realtimeStreams/noopManager.js.map +1 -1
- package/dist/esm/v3/realtimeStreams/sessionStreamInstance.d.ts +41 -0
- package/dist/esm/v3/realtimeStreams/sessionStreamInstance.js +73 -0
- package/dist/esm/v3/realtimeStreams/sessionStreamInstance.js.map +1 -0
- package/dist/esm/v3/realtimeStreams/sessionStreamOneshot.d.ts +45 -0
- package/dist/esm/v3/realtimeStreams/sessionStreamOneshot.js +77 -0
- package/dist/esm/v3/realtimeStreams/sessionStreamOneshot.js.map +1 -0
- package/dist/esm/v3/realtimeStreams/streamInstance.d.ts +14 -2
- package/dist/esm/v3/realtimeStreams/streamInstance.js +5 -2
- package/dist/esm/v3/realtimeStreams/streamInstance.js.map +1 -1
- package/dist/esm/v3/realtimeStreams/streamsWriterV1.d.ts +2 -2
- package/dist/esm/v3/realtimeStreams/streamsWriterV1.js +2 -1
- package/dist/esm/v3/realtimeStreams/streamsWriterV1.js.map +1 -1
- package/dist/esm/v3/realtimeStreams/streamsWriterV2.d.ts +23 -2
- package/dist/esm/v3/realtimeStreams/streamsWriterV2.js +56 -4
- package/dist/esm/v3/realtimeStreams/streamsWriterV2.js.map +1 -1
- package/dist/esm/v3/realtimeStreams/streamsWriterV2.test.d.ts +1 -0
- package/dist/esm/v3/realtimeStreams/streamsWriterV2.test.js +66 -0
- package/dist/esm/v3/realtimeStreams/streamsWriterV2.test.js.map +1 -0
- package/dist/esm/v3/realtimeStreams/types.d.ts +42 -3
- package/dist/esm/v3/resource-catalog/catalog.d.ts +4 -1
- package/dist/esm/v3/resource-catalog/index.d.ts +4 -1
- package/dist/esm/v3/resource-catalog/index.js +9 -0
- package/dist/esm/v3/resource-catalog/index.js.map +1 -1
- package/dist/esm/v3/resource-catalog/noopResourceCatalog.d.ts +4 -1
- package/dist/esm/v3/resource-catalog/noopResourceCatalog.js +9 -0
- package/dist/esm/v3/resource-catalog/noopResourceCatalog.js.map +1 -1
- package/dist/esm/v3/resource-catalog/standardResourceCatalog.d.ts +6 -1
- package/dist/esm/v3/resource-catalog/standardResourceCatalog.js +52 -4
- package/dist/esm/v3/resource-catalog/standardResourceCatalog.js.map +1 -1
- package/dist/esm/v3/runEngineWorker/supervisor/http.d.ts +2 -0
- package/dist/esm/v3/runEngineWorker/supervisor/schemas.d.ts +14 -0
- package/dist/esm/v3/runEngineWorker/workload/http.d.ts +1 -0
- package/dist/esm/v3/runEngineWorker/workload/schemas.d.ts +7 -0
- package/dist/esm/v3/schemas/api.d.ts +333 -0
- package/dist/esm/v3/schemas/api.js +80 -7
- package/dist/esm/v3/schemas/api.js.map +1 -1
- package/dist/esm/v3/schemas/build.d.ts +240 -0
- package/dist/esm/v3/schemas/build.js +4 -1
- package/dist/esm/v3/schemas/build.js.map +1 -1
- package/dist/esm/v3/schemas/checkpoints.d.ts +7 -0
- package/dist/esm/v3/schemas/idempotencyKey.test.d.ts +1 -0
- package/dist/esm/v3/schemas/idempotencyKey.test.js +141 -0
- package/dist/esm/v3/schemas/idempotencyKey.test.js.map +1 -0
- package/dist/esm/v3/schemas/messages.d.ts +160 -0
- package/dist/esm/v3/schemas/resources.d.ts +40 -0
- package/dist/esm/v3/schemas/resources.js +4 -0
- package/dist/esm/v3/schemas/resources.js.map +1 -1
- package/dist/esm/v3/schemas/runEngine.d.ts +12 -0
- package/dist/esm/v3/schemas/runEngine.js +2 -0
- package/dist/esm/v3/schemas/runEngine.js.map +1 -1
- package/dist/esm/v3/schemas/schemas.d.ts +59 -0
- package/dist/esm/v3/schemas/schemas.js +20 -0
- package/dist/esm/v3/schemas/schemas.js.map +1 -1
- package/dist/esm/v3/semanticInternalAttributes.d.ts +1 -0
- package/dist/esm/v3/semanticInternalAttributes.js +1 -0
- package/dist/esm/v3/semanticInternalAttributes.js.map +1 -1
- package/dist/esm/v3/session-streams-api.d.ts +5 -0
- package/dist/esm/v3/session-streams-api.js +8 -0
- package/dist/esm/v3/session-streams-api.js.map +1 -0
- package/dist/esm/v3/sessionStreams/chatSnapshot.d.ts +53 -0
- package/dist/esm/v3/sessionStreams/chatSnapshot.js +39 -0
- package/dist/esm/v3/sessionStreams/chatSnapshot.js.map +1 -0
- package/dist/esm/v3/sessionStreams/index.d.ts +24 -0
- package/dist/esm/v3/sessionStreams/index.js +60 -0
- package/dist/esm/v3/sessionStreams/index.js.map +1 -0
- package/dist/esm/v3/sessionStreams/manager.d.ts +54 -0
- package/dist/esm/v3/sessionStreams/manager.js +507 -0
- package/dist/esm/v3/sessionStreams/manager.js.map +1 -0
- package/dist/esm/v3/sessionStreams/manager.test.d.ts +1 -0
- package/dist/esm/v3/sessionStreams/manager.test.js +121 -0
- package/dist/esm/v3/sessionStreams/manager.test.js.map +1 -0
- package/dist/esm/v3/sessionStreams/noopManager.d.ts +20 -0
- package/dist/esm/v3/sessionStreams/noopManager.js +31 -0
- package/dist/esm/v3/sessionStreams/noopManager.js.map +1 -0
- package/dist/esm/v3/sessionStreams/types.d.ts +65 -0
- package/dist/esm/v3/sessionStreams/types.js +8 -0
- package/dist/esm/v3/sessionStreams/types.js.map +1 -0
- package/dist/esm/v3/sessionStreams/wireProtocol.d.ts +65 -0
- package/dist/esm/v3/sessionStreams/wireProtocol.js +66 -0
- package/dist/esm/v3/sessionStreams/wireProtocol.js.map +1 -0
- package/dist/esm/v3/taskContext/index.d.ts +4 -0
- package/dist/esm/v3/taskContext/index.js +18 -0
- package/dist/esm/v3/taskContext/index.js.map +1 -1
- package/dist/esm/v3/taskContext/index.test.d.ts +1 -0
- package/dist/esm/v3/taskContext/index.test.js +71 -0
- package/dist/esm/v3/taskContext/index.test.js.map +1 -0
- package/dist/esm/v3/taskContext/otelProcessors.js +11 -0
- package/dist/esm/v3/taskContext/otelProcessors.js.map +1 -1
- package/dist/esm/v3/test/index.d.ts +5 -0
- package/dist/esm/v3/test/index.js +6 -0
- package/dist/esm/v3/test/index.js.map +1 -0
- package/dist/esm/v3/test/mock-task-context.d.ts +123 -0
- package/dist/esm/v3/test/mock-task-context.js +190 -0
- package/dist/esm/v3/test/mock-task-context.js.map +1 -0
- package/dist/esm/v3/test/test-input-stream-manager.d.ts +46 -0
- package/dist/esm/v3/test/test-input-stream-manager.js +188 -0
- package/dist/esm/v3/test/test-input-stream-manager.js.map +1 -0
- package/dist/esm/v3/test/test-realtime-streams-manager.d.ts +40 -0
- package/dist/esm/v3/test/test-realtime-streams-manager.js +136 -0
- package/dist/esm/v3/test/test-realtime-streams-manager.js.map +1 -0
- package/dist/esm/v3/test/test-run-metadata-manager.d.ts +31 -0
- package/dist/esm/v3/test/test-run-metadata-manager.js +82 -0
- package/dist/esm/v3/test/test-run-metadata-manager.js.map +1 -0
- package/dist/esm/v3/test/test-session-stream-manager.d.ts +60 -0
- package/dist/esm/v3/test/test-session-stream-manager.js +243 -0
- package/dist/esm/v3/test/test-session-stream-manager.js.map +1 -0
- package/dist/esm/v3/types/tasks.d.ts +35 -0
- package/dist/esm/v3/utils/gitBranch.d.ts +2 -0
- package/dist/esm/v3/utils/gitBranch.js +42 -0
- package/dist/esm/v3/utils/gitBranch.js.map +1 -0
- package/dist/esm/v3/utils/globals.d.ts +2 -0
- package/dist/esm/v3/utils/globals.js.map +1 -1
- package/dist/esm/v3/utils/reconnectBackoff.d.ts +20 -0
- package/dist/esm/v3/utils/reconnectBackoff.js +25 -0
- package/dist/esm/v3/utils/reconnectBackoff.js.map +1 -0
- package/dist/esm/v3/utils/reconnectBackoff.test.d.ts +1 -0
- package/dist/esm/v3/utils/reconnectBackoff.test.js +74 -0
- package/dist/esm/v3/utils/reconnectBackoff.test.js.map +1 -0
- package/dist/esm/v3/workers/index.d.ts +1 -0
- package/dist/esm/v3/workers/index.js +1 -0
- package/dist/esm/v3/workers/index.js.map +1 -1
- package/dist/esm/v3/workers/taskExecutor.js +2 -1
- package/dist/esm/v3/workers/taskExecutor.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/package.json +46 -1
|
@@ -8,6 +8,9 @@ export declare class NoopInputStreamManager implements InputStreamManager {
|
|
|
8
8
|
once(_streamId: string, _options?: InputStreamOnceOptions): InputStreamOncePromise<unknown>;
|
|
9
9
|
peek(_streamId: string): unknown | undefined;
|
|
10
10
|
lastSeqNum(_streamId: string): number | undefined;
|
|
11
|
+
setLastSeqNum(_streamId: string, _seqNum: number): void;
|
|
12
|
+
shiftBuffer(_streamId: string): boolean;
|
|
13
|
+
disconnectStream(_streamId: string): void;
|
|
11
14
|
clearHandlers(): void;
|
|
12
15
|
reset(): void;
|
|
13
16
|
disconnect(): void;
|
|
@@ -15,6 +15,9 @@ export class NoopInputStreamManager {
|
|
|
15
15
|
lastSeqNum(_streamId) {
|
|
16
16
|
return undefined;
|
|
17
17
|
}
|
|
18
|
+
setLastSeqNum(_streamId, _seqNum) { }
|
|
19
|
+
shiftBuffer(_streamId) { return false; }
|
|
20
|
+
disconnectStream(_streamId) { }
|
|
18
21
|
clearHandlers() { }
|
|
19
22
|
reset() { }
|
|
20
23
|
disconnect() { }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noopManager.js","sourceRoot":"","sources":["../../../../src/v3/inputStreams/noopManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAGxE,MAAM,OAAO,sBAAsB;IACjC,QAAQ,CAAC,MAAc,EAAE,eAAwB,IAAS,CAAC;IAE3D,EAAE,CAAC,SAAiB,EAAE,QAAiD;QACrE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC,SAAiB,EAAE,QAAiC;QACvD,OAAO,IAAI,sBAAsB,CAAC,GAAG,EAAE;YACrC,8BAA8B;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,SAAiB;QACpB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,UAAU,CAAC,SAAiB;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,aAAa,KAAU,CAAC;IACxB,KAAK,KAAU,CAAC;IAChB,UAAU,KAAU,CAAC;IACrB,WAAW,CAAC,MAAc,EAAE,QAAiB,IAAS,CAAC;CACxD"}
|
|
1
|
+
{"version":3,"file":"noopManager.js","sourceRoot":"","sources":["../../../../src/v3/inputStreams/noopManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAGxE,MAAM,OAAO,sBAAsB;IACjC,QAAQ,CAAC,MAAc,EAAE,eAAwB,IAAS,CAAC;IAE3D,EAAE,CAAC,SAAiB,EAAE,QAAiD;QACrE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC,SAAiB,EAAE,QAAiC;QACvD,OAAO,IAAI,sBAAsB,CAAC,GAAG,EAAE;YACrC,8BAA8B;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,SAAiB;QACpB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,UAAU,CAAC,SAAiB;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,aAAa,CAAC,SAAiB,EAAE,OAAe,IAAS,CAAC;IAE1D,WAAW,CAAC,SAAiB,IAAa,OAAO,KAAK,CAAC,CAAC,CAAC;IAEzD,gBAAgB,CAAC,SAAiB,IAAS,CAAC;IAE5C,aAAa,KAAU,CAAC;IACxB,KAAK,KAAU,CAAC;IAChB,UAAU,KAAU,CAAC;IACrB,WAAW,CAAC,MAAc,EAAE,QAAiB,IAAS,CAAC;CACxD"}
|
|
@@ -45,6 +45,25 @@ export interface InputStreamManager {
|
|
|
45
45
|
* Used by `.wait()` to tell the server where to check for existing data.
|
|
46
46
|
*/
|
|
47
47
|
lastSeqNum(streamId: string): number | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* Advance the last-seen S2 sequence number for the given input stream.
|
|
50
|
+
* Used after `.wait()` resumes to prevent the SSE tail from replaying
|
|
51
|
+
* the record that was consumed via the waitpoint path.
|
|
52
|
+
*/
|
|
53
|
+
setLastSeqNum(streamId: string, seqNum: number): void;
|
|
54
|
+
/**
|
|
55
|
+
* Remove and discard the first buffered item for the given input stream.
|
|
56
|
+
* Used after `.wait()` resumes to remove the duplicate that the SSE tail
|
|
57
|
+
* buffered while the waitpoint was being completed via a separate path.
|
|
58
|
+
* Returns true if an item was removed, false if the buffer was empty.
|
|
59
|
+
*/
|
|
60
|
+
shiftBuffer(streamId: string): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Disconnect the SSE tail and clear the buffer for a specific input stream.
|
|
63
|
+
* Used before suspending via `.wait()` so the tail doesn't buffer duplicates
|
|
64
|
+
* of data that will be delivered through the waitpoint path.
|
|
65
|
+
*/
|
|
66
|
+
disconnectStream(streamId: string): void;
|
|
48
67
|
/**
|
|
49
68
|
* Clear all persistent `.on()` handlers and abort tails that have no remaining once waiters.
|
|
50
69
|
* Called automatically when a task run completes.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../../src/v3/locals/manager.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,iBAAiB;IAC5B,WAAW,CAAI,EAAU;QACvB,OAAO;YACL,MAAM,EAAE,MAAM,EAAE;YAChB,EAAE;
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../../src/v3/locals/manager.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,iBAAiB;IAC5B,WAAW,CAAI,EAAU;QACvB,OAAO;YACL,MAAM,EAAE,MAAM,EAAE;YAChB,EAAE;SACH,CAAC;IACJ,CAAC;IAED,QAAQ,CAAI,GAAiB;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,QAAQ,CAAI,GAAiB,EAAE,KAAQ,IAAS,CAAC;CAClD;AAED,MAAM,OAAO,qBAAqB;IACxB,KAAK,GAAyB,IAAI,GAAG,EAAE,CAAC;IAEhD,WAAW,CAAI,EAAU;QACvB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3B,OAAO;YACL,MAAM,EAAE,GAAG;YACX,EAAE;SACH,CAAC;IACJ,CAAC;IAED,QAAQ,CAAI,GAAiB;QAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAkB,CAAC;IACrD,CAAC;IAED,QAAQ,CAAI,GAAiB,EAAE,KAAQ;QACrC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -1,14 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
type
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
/**
|
|
2
|
+
* A type-safe key for `locals`. Carries the value type `T` as a phantom
|
|
3
|
+
* marker on the optional `__valueType` field so two keys with different
|
|
4
|
+
* value types are distinguishable at the type level.
|
|
5
|
+
*
|
|
6
|
+
* The phantom field is intentionally not anchored to a `unique symbol`:
|
|
7
|
+
* dual-package builds (`tshy`) emit separate `.d.ts` files for ESM and
|
|
8
|
+
* CJS outputs, and each `unique symbol` declaration in a `.d.ts` is its
|
|
9
|
+
* own nominal type. If a single compilation ever resolves `LocalsKey`
|
|
10
|
+
* from both the ESM and CJS paths — which happens under certain pnpm
|
|
11
|
+
* hoisting layouts — `unique symbol` brands produce structurally
|
|
12
|
+
* incompatible variants of the same type. A plain string brand avoids
|
|
13
|
+
* the hazard.
|
|
14
|
+
*/
|
|
15
|
+
export type LocalsKey<T> = {
|
|
6
16
|
readonly id: string;
|
|
7
|
-
readonly __type:
|
|
17
|
+
readonly __type: symbol;
|
|
18
|
+
/** Phantom carrier for the value type — never read at runtime. */
|
|
19
|
+
readonly __valueType?: T;
|
|
8
20
|
};
|
|
9
21
|
export interface LocalsManager {
|
|
10
22
|
createLocal<T>(id: string): LocalsKey<T>;
|
|
11
23
|
getLocal<T>(key: LocalsKey<T>): T | undefined;
|
|
12
24
|
setLocal<T>(key: LocalsKey<T>, value: T): void;
|
|
13
25
|
}
|
|
14
|
-
export {};
|
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
import { RealtimeStreamsAPI } from "./realtimeStreams/index.js";
|
|
2
2
|
export declare const realtimeStreams: RealtimeStreamsAPI;
|
|
3
3
|
export * from "./realtimeStreams/types.js";
|
|
4
|
+
export { SessionStreamInstance } from "./realtimeStreams/sessionStreamInstance.js";
|
|
5
|
+
export type { SessionStreamInstanceOptions, InitializeSessionStreamResponseLike, } from "./realtimeStreams/sessionStreamInstance.js";
|
|
6
|
+
export { trimSessionStream, writeSessionControlRecord, writeTurnCompleteRecord, writeUpgradeRequiredRecord, } from "./realtimeStreams/sessionStreamOneshot.js";
|
|
@@ -3,4 +3,6 @@
|
|
|
3
3
|
import { RealtimeStreamsAPI } from "./realtimeStreams/index.js";
|
|
4
4
|
export const realtimeStreams = RealtimeStreamsAPI.getInstance();
|
|
5
5
|
export * from "./realtimeStreams/types.js";
|
|
6
|
+
export { SessionStreamInstance } from "./realtimeStreams/sessionStreamInstance.js";
|
|
7
|
+
export { trimSessionStream, writeSessionControlRecord, writeTurnCompleteRecord, writeUpgradeRequiredRecord, } from "./realtimeStreams/sessionStreamOneshot.js";
|
|
6
8
|
//# sourceMappingURL=realtime-streams-api.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime-streams-api.js","sourceRoot":"","sources":["../../../src/v3/realtime-streams-api.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,qCAAqC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,MAAM,CAAC,MAAM,eAAe,GAAG,kBAAkB,CAAC,WAAW,EAAE,CAAC;AAEhE,cAAc,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"realtime-streams-api.js","sourceRoot":"","sources":["../../../src/v3/realtime-streams-api.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,qCAAqC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,MAAM,CAAC,MAAM,eAAe,GAAG,kBAAkB,CAAC,WAAW,EAAE,CAAC;AAEhE,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAKnF,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,2CAA2C,CAAC"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { RealtimeStreamOperationOptions, RealtimeStreamInstance, RealtimeStreamsManager } from "./types.js";
|
|
2
|
+
export { SessionStreamInstance } from "./sessionStreamInstance.js";
|
|
3
|
+
export type { SessionStreamInstanceOptions, InitializeSessionStreamResponseLike, } from "./sessionStreamInstance.js";
|
|
4
|
+
export { trimSessionStream, writeSessionControlRecord, writeTurnCompleteRecord, writeUpgradeRequiredRecord, } from "./sessionStreamOneshot.js";
|
|
2
5
|
export declare class RealtimeStreamsAPI implements RealtimeStreamsManager {
|
|
3
6
|
#private;
|
|
4
7
|
private static _instance?;
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { getGlobal, registerGlobal } from "../utils/globals.js";
|
|
2
2
|
import { NoopRealtimeStreamsManager } from "./noopManager.js";
|
|
3
|
+
// Re-export the session-scoped stream instance so the SDK's
|
|
4
|
+
// `SessionOutputChannel.pipe` / `.writer` can construct it without reaching
|
|
5
|
+
// into the core package's internals.
|
|
6
|
+
export { SessionStreamInstance } from "./sessionStreamInstance.js";
|
|
7
|
+
export { trimSessionStream, writeSessionControlRecord, writeTurnCompleteRecord, writeUpgradeRequiredRecord, } from "./sessionStreamOneshot.js";
|
|
3
8
|
const API_NAME = "realtime-streams";
|
|
4
9
|
const NOOP_MANAGER = new NoopRealtimeStreamsManager();
|
|
5
10
|
export class RealtimeStreamsAPI {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/v3/realtimeStreams/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAO9D,MAAM,QAAQ,GAAG,kBAAkB,CAAC;AAEpC,MAAM,YAAY,GAAG,IAAI,0BAA0B,EAAE,CAAC;AAEtD,MAAM,OAAO,kBAAkB;IACrB,MAAM,CAAC,SAAS,CAAsB;IAE9C,gBAAuB,CAAC;IAEjB,MAAM,CAAC,WAAW;QACvB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAC5C,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,gBAAgB,CAAC,OAA+B;QAC9C,OAAO,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,WAAW;QACT,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC;IAC7C,CAAC;IAEM,IAAI,CACT,GAAW,EACX,MAA4C,EAC5C,OAAwC;QAExC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAEM,MAAM,CACX,GAAW,EACX,IAAW,EACX,OAAwC;QAExC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/v3/realtimeStreams/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAO9D,4DAA4D;AAC5D,4EAA4E;AAC5E,qCAAqC;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAKnE,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,2BAA2B,CAAC;AAEnC,MAAM,QAAQ,GAAG,kBAAkB,CAAC;AAEpC,MAAM,YAAY,GAAG,IAAI,0BAA0B,EAAE,CAAC;AAEtD,MAAM,OAAO,kBAAkB;IACrB,MAAM,CAAC,SAAS,CAAsB;IAE9C,gBAAuB,CAAC;IAEjB,MAAM,CAAC,WAAW;QACvB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAC5C,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,gBAAgB,CAAC,OAA+B;QAC9C,OAAO,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,WAAW;QACT,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC;IAC7C,CAAC;IAEM,IAAI,CACT,GAAW,EACX,MAA4C,EAC5C,OAAwC;QAExC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAEM,MAAM,CACX,GAAW,EACX,IAAW,EACX,OAAwC;QAExC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;CACF"}
|
|
@@ -6,7 +6,18 @@ export declare class StandardRealtimeStreamsManager implements RealtimeStreamsMa
|
|
|
6
6
|
private debug;
|
|
7
7
|
constructor(apiClient: ApiClient, baseUrl: string, debug?: boolean);
|
|
8
8
|
private activeStreams;
|
|
9
|
+
private createStreamCache;
|
|
9
10
|
reset(): void;
|
|
11
|
+
private getCachedCreateStream;
|
|
12
|
+
/**
|
|
13
|
+
* Reactive invalidation: a writer's `wait()` rejecting can mean the
|
|
14
|
+
* cached S2 credentials have gone stale (expired token, revoked
|
|
15
|
+
* access, basin retired), so evict the cached `createStream` response
|
|
16
|
+
* for `(runId, key)` and let the next `pipe()` re-PUT to mint fresh
|
|
17
|
+
* credentials. Compare by identity so a fresh promise installed by a
|
|
18
|
+
* concurrent caller isn't accidentally cleared.
|
|
19
|
+
*/
|
|
20
|
+
private evictCreateStreamIfStale;
|
|
10
21
|
pipe<T>(key: string, source: AsyncIterable<T> | ReadableStream<T>, options?: RealtimeStreamOperationOptions): RealtimeStreamInstance<T>;
|
|
11
22
|
append<TPart extends BodyInit>(key: string, part: TPart, options?: RealtimeStreamOperationOptions): Promise<void>;
|
|
12
23
|
hasActiveStreams(): boolean;
|
|
@@ -12,8 +12,48 @@ export class StandardRealtimeStreamsManager {
|
|
|
12
12
|
}
|
|
13
13
|
// Track active streams - using a Set allows multiple streams for the same key to coexist
|
|
14
14
|
activeStreams = new Set();
|
|
15
|
+
// Cache of in-flight / resolved `createStream` responses, keyed by
|
|
16
|
+
// `${runId}:${key}`. S2 v2 access tokens are scoped to the org basin
|
|
17
|
+
// (default 1-day TTL server-side) so reusing them across repeated
|
|
18
|
+
// `pipe()` calls for the same `(runId, key)` is safe, and avoids the
|
|
19
|
+
// per-call PUT that pushes `streamId` onto `TaskRun.realtimeStreams`,
|
|
20
|
+
// which under chat-agent-style hot-loop writers caused row-lock
|
|
21
|
+
// contention on the writer DB.
|
|
22
|
+
createStreamCache = new Map();
|
|
15
23
|
reset() {
|
|
16
24
|
this.activeStreams.clear();
|
|
25
|
+
this.createStreamCache.clear();
|
|
26
|
+
}
|
|
27
|
+
getCachedCreateStream(runId, key, requestOptions) {
|
|
28
|
+
const cacheKey = `${runId}:${key}`;
|
|
29
|
+
const cached = this.createStreamCache.get(cacheKey);
|
|
30
|
+
if (cached) {
|
|
31
|
+
return cached;
|
|
32
|
+
}
|
|
33
|
+
const promise = this.apiClient.createStream(runId, "self", key, requestOptions);
|
|
34
|
+
this.createStreamCache.set(cacheKey, promise);
|
|
35
|
+
// Evict on failure so the next call retries instead of returning a
|
|
36
|
+
// poisoned cache entry forever.
|
|
37
|
+
promise.catch((err) => {
|
|
38
|
+
if (this.createStreamCache.get(cacheKey) === promise) {
|
|
39
|
+
this.createStreamCache.delete(cacheKey);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
return promise;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Reactive invalidation: a writer's `wait()` rejecting can mean the
|
|
46
|
+
* cached S2 credentials have gone stale (expired token, revoked
|
|
47
|
+
* access, basin retired), so evict the cached `createStream` response
|
|
48
|
+
* for `(runId, key)` and let the next `pipe()` re-PUT to mint fresh
|
|
49
|
+
* credentials. Compare by identity so a fresh promise installed by a
|
|
50
|
+
* concurrent caller isn't accidentally cleared.
|
|
51
|
+
*/
|
|
52
|
+
evictCreateStreamIfStale(runId, key, expected) {
|
|
53
|
+
const cacheKey = `${runId}:${key}`;
|
|
54
|
+
if (this.createStreamCache.get(cacheKey) === expected) {
|
|
55
|
+
this.createStreamCache.delete(cacheKey);
|
|
56
|
+
}
|
|
17
57
|
}
|
|
18
58
|
pipe(key, source, options) {
|
|
19
59
|
// Normalize ReadableStream to AsyncIterable
|
|
@@ -28,6 +68,10 @@ export class StandardRealtimeStreamsManager {
|
|
|
28
68
|
const combinedSignal = options?.signal
|
|
29
69
|
? AbortSignal.any?.([options.signal, abortController.signal]) ?? abortController.signal
|
|
30
70
|
: abortController.signal;
|
|
71
|
+
// Capture which cached promise this writer uses so reactive
|
|
72
|
+
// invalidation below evicts only if the cache still holds it (a
|
|
73
|
+
// concurrent caller may have already refreshed it).
|
|
74
|
+
const activeCreatePromise = this.getCachedCreateStream(runId, key, options?.requestOptions);
|
|
31
75
|
const streamInstance = new StreamInstance({
|
|
32
76
|
apiClient: this.apiClient,
|
|
33
77
|
baseUrl: this.baseUrl,
|
|
@@ -38,12 +82,24 @@ export class StandardRealtimeStreamsManager {
|
|
|
38
82
|
requestOptions: options?.requestOptions,
|
|
39
83
|
target: options?.target,
|
|
40
84
|
debug: this.debug,
|
|
85
|
+
createStream: () => activeCreatePromise,
|
|
41
86
|
});
|
|
42
87
|
// Register this stream
|
|
43
88
|
const streamInfo = { wait: () => streamInstance.wait(), abortController };
|
|
44
89
|
this.activeStreams.add(streamInfo);
|
|
45
|
-
//
|
|
46
|
-
|
|
90
|
+
// Single internal chain that handles activeStreams cleanup AND
|
|
91
|
+
// reactive invalidation. On rejection we evict the cached
|
|
92
|
+
// `createStream` entry so the next pipe() for the same `(runId, key)`
|
|
93
|
+
// re-PUTs and recovers (e.g. when a cached S2 access token expired
|
|
94
|
+
// mid-process). Customer awaiters still observe the rejection via
|
|
95
|
+
// the returned `wait()`; this chain just keeps the cleanup path
|
|
96
|
+
// from surfacing as unhandled.
|
|
97
|
+
streamInstance.wait().then(() => {
|
|
98
|
+
this.activeStreams.delete(streamInfo);
|
|
99
|
+
}, (err) => {
|
|
100
|
+
this.evictCreateStreamIfStale(runId, key, activeCreatePromise);
|
|
101
|
+
this.activeStreams.delete(streamInfo);
|
|
102
|
+
});
|
|
47
103
|
return {
|
|
48
104
|
wait: () => streamInstance.wait(),
|
|
49
105
|
stream: streamInstance.stream,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../../src/v3/realtimeStreams/manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../../src/v3/realtimeStreams/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { StandardRealtimeStreamsManager } from "./manager.js";
|
|
3
|
+
function getCached(manager, runId, key) {
|
|
4
|
+
return manager.getCachedCreateStream(runId, key);
|
|
5
|
+
}
|
|
6
|
+
function makeApiClient(impl) {
|
|
7
|
+
const spy = vi.fn(impl);
|
|
8
|
+
const client = { createStream: spy };
|
|
9
|
+
return { client, spy };
|
|
10
|
+
}
|
|
11
|
+
describe("StandardRealtimeStreamsManager createStream cache", () => {
|
|
12
|
+
it("dedupes repeated calls for the same (runId, key)", async () => {
|
|
13
|
+
const { client, spy } = makeApiClient(async () => ({ version: "v1", headers: {} }));
|
|
14
|
+
const manager = new StandardRealtimeStreamsManager(client, "http://localhost");
|
|
15
|
+
const p1 = getCached(manager, "run-1", "chat");
|
|
16
|
+
const p2 = getCached(manager, "run-1", "chat");
|
|
17
|
+
expect(p1).toBe(p2);
|
|
18
|
+
expect(spy).toHaveBeenCalledTimes(1);
|
|
19
|
+
await Promise.all([p1, p2]);
|
|
20
|
+
expect(spy).toHaveBeenCalledTimes(1);
|
|
21
|
+
});
|
|
22
|
+
it("issues a separate PUT for each distinct stream key on the same run", async () => {
|
|
23
|
+
const { client, spy } = makeApiClient(async () => ({ version: "v1", headers: {} }));
|
|
24
|
+
const manager = new StandardRealtimeStreamsManager(client, "http://localhost");
|
|
25
|
+
await Promise.all([
|
|
26
|
+
getCached(manager, "run-1", "chat"),
|
|
27
|
+
getCached(manager, "run-1", "tool-output"),
|
|
28
|
+
]);
|
|
29
|
+
expect(spy).toHaveBeenCalledTimes(2);
|
|
30
|
+
expect(spy).toHaveBeenNthCalledWith(1, "run-1", "self", "chat", undefined);
|
|
31
|
+
expect(spy).toHaveBeenNthCalledWith(2, "run-1", "self", "tool-output", undefined);
|
|
32
|
+
});
|
|
33
|
+
it("issues a separate PUT for each distinct run, even with the same key", async () => {
|
|
34
|
+
const { client, spy } = makeApiClient(async () => ({ version: "v1", headers: {} }));
|
|
35
|
+
const manager = new StandardRealtimeStreamsManager(client, "http://localhost");
|
|
36
|
+
await Promise.all([
|
|
37
|
+
getCached(manager, "run-1", "chat"),
|
|
38
|
+
getCached(manager, "run-2", "chat"),
|
|
39
|
+
]);
|
|
40
|
+
expect(spy).toHaveBeenCalledTimes(2);
|
|
41
|
+
});
|
|
42
|
+
it("evicts on failure so the next call retries instead of returning a poisoned entry", async () => {
|
|
43
|
+
const spy = vi
|
|
44
|
+
.fn()
|
|
45
|
+
.mockRejectedValueOnce(new Error("boom"))
|
|
46
|
+
.mockResolvedValueOnce({ version: "v1", headers: {} });
|
|
47
|
+
const client = { createStream: spy };
|
|
48
|
+
const manager = new StandardRealtimeStreamsManager(client, "http://localhost");
|
|
49
|
+
await expect(getCached(manager, "run-1", "chat")).rejects.toThrow("boom");
|
|
50
|
+
const retried = await getCached(manager, "run-1", "chat");
|
|
51
|
+
expect(retried).toEqual({ version: "v1", headers: {} });
|
|
52
|
+
expect(spy).toHaveBeenCalledTimes(2);
|
|
53
|
+
});
|
|
54
|
+
it("reset() clears cached entries so the next call re-PUTs", async () => {
|
|
55
|
+
const { client, spy } = makeApiClient(async () => ({ version: "v1", headers: {} }));
|
|
56
|
+
const manager = new StandardRealtimeStreamsManager(client, "http://localhost");
|
|
57
|
+
await getCached(manager, "run-1", "chat");
|
|
58
|
+
expect(spy).toHaveBeenCalledTimes(1);
|
|
59
|
+
manager.reset();
|
|
60
|
+
await getCached(manager, "run-1", "chat");
|
|
61
|
+
expect(spy).toHaveBeenCalledTimes(2);
|
|
62
|
+
});
|
|
63
|
+
it("evictCreateStreamIfStale clears the matching entry so the next call re-PUTs", async () => {
|
|
64
|
+
const { client, spy } = makeApiClient(async () => ({ version: "v1", headers: {} }));
|
|
65
|
+
const manager = new StandardRealtimeStreamsManager(client, "http://localhost");
|
|
66
|
+
// Prime the cache and capture which promise was stored.
|
|
67
|
+
const cachedPromise = getCached(manager, "run-1", "chat");
|
|
68
|
+
await cachedPromise;
|
|
69
|
+
expect(spy).toHaveBeenCalledTimes(1);
|
|
70
|
+
// Simulate the reactive invalidation path that `pipe()` runs when a
|
|
71
|
+
// writer's `wait()` rejects.
|
|
72
|
+
manager.evictCreateStreamIfStale("run-1", "chat", cachedPromise);
|
|
73
|
+
await getCached(manager, "run-1", "chat");
|
|
74
|
+
expect(spy).toHaveBeenCalledTimes(2);
|
|
75
|
+
});
|
|
76
|
+
it("evictCreateStreamIfStale is a no-op when the cache holds a different promise", async () => {
|
|
77
|
+
const { client, spy } = makeApiClient(async () => ({ version: "v1", headers: {} }));
|
|
78
|
+
const manager = new StandardRealtimeStreamsManager(client, "http://localhost");
|
|
79
|
+
const original = getCached(manager, "run-1", "chat");
|
|
80
|
+
await original;
|
|
81
|
+
// A different promise (e.g. from a concurrent caller that already
|
|
82
|
+
// refreshed) shouldn't trigger eviction.
|
|
83
|
+
const stalePromise = Promise.resolve({ version: "v1", headers: {} });
|
|
84
|
+
manager.evictCreateStreamIfStale("run-1", "chat", stalePromise);
|
|
85
|
+
// Cache should still hold the original entry; next call is a hit.
|
|
86
|
+
await getCached(manager, "run-1", "chat");
|
|
87
|
+
expect(spy).toHaveBeenCalledTimes(1);
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
//# sourceMappingURL=manager.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.test.js","sourceRoot":"","sources":["../../../../src/v3/realtimeStreams/manager.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { createAsyncIterableStreamFromAsyncIterable, } from "../streams/asyncIte
|
|
|
2
2
|
export class NoopRealtimeStreamsManager {
|
|
3
3
|
pipe(key, source, options) {
|
|
4
4
|
return {
|
|
5
|
-
wait: () => Promise.resolve(),
|
|
5
|
+
wait: () => Promise.resolve({}),
|
|
6
6
|
get stream() {
|
|
7
7
|
return createAsyncIterableStreamFromAsyncIterable(source);
|
|
8
8
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noopManager.js","sourceRoot":"","sources":["../../../../src/v3/realtimeStreams/noopManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,0CAA0C,GAC3C,MAAM,mCAAmC,CAAC;AAO3C,MAAM,OAAO,0BAA0B;IAC9B,IAAI,CACT,GAAW,EACX,MAA4C,EAC5C,OAAwC;QAExC,OAAO;YACL,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;
|
|
1
|
+
{"version":3,"file":"noopManager.js","sourceRoot":"","sources":["../../../../src/v3/realtimeStreams/noopManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,0CAA0C,GAC3C,MAAM,mCAAmC,CAAC;AAO3C,MAAM,OAAO,0BAA0B;IAC9B,IAAI,CACT,GAAW,EACX,MAA4C,EAC5C,OAAwC;QAExC,OAAO;YACL,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,IAAI,MAAM;gBACR,OAAO,0CAA0C,CAAC,MAAM,CAAC,CAAC;YAC5D,CAAC;SACF,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,MAAM,CACjB,GAAW,EACX,IAAW,EACX,OAAwC,IACxB,CAAC;CACpB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ApiClient } from "../apiClient/index.js";
|
|
2
|
+
import { AsyncIterableStream } from "../streams/asyncIterableStream.js";
|
|
3
|
+
import { AnyZodFetchOptions } from "../zodfetch.js";
|
|
4
|
+
import { StreamsWriter, StreamWriteResult } from "./types.js";
|
|
5
|
+
export type InitializeSessionStreamResponseLike = {
|
|
6
|
+
headers?: Record<string, string>;
|
|
7
|
+
};
|
|
8
|
+
export type SessionStreamInstanceOptions<T> = {
|
|
9
|
+
apiClient: ApiClient;
|
|
10
|
+
baseUrl: string;
|
|
11
|
+
sessionId: string;
|
|
12
|
+
io: "out" | "in";
|
|
13
|
+
source: ReadableStream<T>;
|
|
14
|
+
signal?: AbortSignal;
|
|
15
|
+
requestOptions?: AnyZodFetchOptions;
|
|
16
|
+
debug?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Optional override for the initialize-session-stream call. Defaults to
|
|
19
|
+
* `apiClient.initializeSessionStream(sessionId, io, requestOptions)`. The
|
|
20
|
+
* channel passes a cached version so repeated `pipe()` / `writer()`
|
|
21
|
+
* calls for the same `(sessionId, io)` share a single PUT instead of
|
|
22
|
+
* hammering the server on every chunk.
|
|
23
|
+
*/
|
|
24
|
+
initializeSession?: () => Promise<InitializeSessionStreamResponseLike>;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Session-scoped parallel to {@link StreamInstance}. Calls
|
|
28
|
+
* `initializeSessionStream` to fetch S2 credentials for the session's
|
|
29
|
+
* channel, then pipes `source` directly to S2 via {@link StreamsWriterV2}.
|
|
30
|
+
*
|
|
31
|
+
* Sessions are S2-only — there's no v1 (Redis) fallback — so this
|
|
32
|
+
* skips the version-detection dance `StreamInstance` does.
|
|
33
|
+
*/
|
|
34
|
+
export declare class SessionStreamInstance<T> implements StreamsWriter {
|
|
35
|
+
private options;
|
|
36
|
+
private streamPromise;
|
|
37
|
+
constructor(options: SessionStreamInstanceOptions<T>);
|
|
38
|
+
private initializeWriter;
|
|
39
|
+
wait(): Promise<StreamWriteResult>;
|
|
40
|
+
get stream(): AsyncIterableStream<T>;
|
|
41
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { StreamsWriterV2 } from "./streamsWriterV2.js";
|
|
2
|
+
/**
|
|
3
|
+
* Session-scoped parallel to {@link StreamInstance}. Calls
|
|
4
|
+
* `initializeSessionStream` to fetch S2 credentials for the session's
|
|
5
|
+
* channel, then pipes `source` directly to S2 via {@link StreamsWriterV2}.
|
|
6
|
+
*
|
|
7
|
+
* Sessions are S2-only — there's no v1 (Redis) fallback — so this
|
|
8
|
+
* skips the version-detection dance `StreamInstance` does.
|
|
9
|
+
*/
|
|
10
|
+
export class SessionStreamInstance {
|
|
11
|
+
options;
|
|
12
|
+
streamPromise;
|
|
13
|
+
constructor(options) {
|
|
14
|
+
this.options = options;
|
|
15
|
+
this.streamPromise = this.initializeWriter();
|
|
16
|
+
}
|
|
17
|
+
async initializeWriter() {
|
|
18
|
+
const initializeFn = this.options.initializeSession ??
|
|
19
|
+
(() => this.options.apiClient.initializeSessionStream(this.options.sessionId, this.options.io, this.options?.requestOptions));
|
|
20
|
+
const response = await initializeFn();
|
|
21
|
+
const headers = response.headers ?? {};
|
|
22
|
+
const accessToken = headers["x-s2-access-token"];
|
|
23
|
+
const basin = headers["x-s2-basin"];
|
|
24
|
+
const streamName = headers["x-s2-stream-name"];
|
|
25
|
+
const endpoint = headers["x-s2-endpoint"];
|
|
26
|
+
const flushIntervalMs = headers["x-s2-flush-interval-ms"]
|
|
27
|
+
? parseInt(headers["x-s2-flush-interval-ms"])
|
|
28
|
+
: undefined;
|
|
29
|
+
const maxRetries = headers["x-s2-max-retries"]
|
|
30
|
+
? parseInt(headers["x-s2-max-retries"])
|
|
31
|
+
: undefined;
|
|
32
|
+
if (!accessToken || !basin || !streamName) {
|
|
33
|
+
throw new Error("Session stream initialize did not return S2 credentials — server may be configured for v1 realtime streams, which sessions do not support.");
|
|
34
|
+
}
|
|
35
|
+
return new StreamsWriterV2({
|
|
36
|
+
basin,
|
|
37
|
+
stream: streamName,
|
|
38
|
+
accessToken,
|
|
39
|
+
endpoint,
|
|
40
|
+
source: this.options.source,
|
|
41
|
+
signal: this.options.signal,
|
|
42
|
+
debug: this.options.debug,
|
|
43
|
+
flushIntervalMs,
|
|
44
|
+
maxRetries,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
async wait() {
|
|
48
|
+
const writer = await this.streamPromise;
|
|
49
|
+
return writer.wait();
|
|
50
|
+
}
|
|
51
|
+
get stream() {
|
|
52
|
+
const self = this;
|
|
53
|
+
return new ReadableStream({
|
|
54
|
+
async start(controller) {
|
|
55
|
+
const streamWriter = await self.streamPromise;
|
|
56
|
+
const iterator = streamWriter[Symbol.asyncIterator]();
|
|
57
|
+
while (true) {
|
|
58
|
+
if (self.options.signal?.aborted) {
|
|
59
|
+
controller.close();
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
const { done, value } = await iterator.next();
|
|
63
|
+
if (done) {
|
|
64
|
+
controller.close();
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
controller.enqueue(value);
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=sessionStreamInstance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionStreamInstance.js","sourceRoot":"","sources":["../../../../src/v3/realtimeStreams/sessionStreamInstance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { ApiClient } from "../apiClient/index.js";
|
|
2
|
+
import { type TriggerControlSubtype } from "../sessionStreams/wireProtocol.js";
|
|
3
|
+
import type { StreamWriteResult } from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* One-shot S2 writes against a Session channel. Used for Trigger control
|
|
6
|
+
* records (turn-complete, upgrade-required) and S2 command records (trim).
|
|
7
|
+
*
|
|
8
|
+
* These differ from the streaming writer (`SessionStreamInstance` /
|
|
9
|
+
* `StreamsWriterV2`) in two ways: they emit a single record per call, and
|
|
10
|
+
* they need precise control over the record's `headers` + `body` shape —
|
|
11
|
+
* which the streaming writer's JSON-envelope encoding doesn't expose.
|
|
12
|
+
*
|
|
13
|
+
* Each call fetches a fresh S2 access token via `initializeSessionStream`
|
|
14
|
+
* and opens a new client. Cheap enough at the rate these are emitted
|
|
15
|
+
* (~one of each per turn).
|
|
16
|
+
*/
|
|
17
|
+
type IO = "out" | "in";
|
|
18
|
+
/**
|
|
19
|
+
* Append a single Trigger control record to a Session channel. The record
|
|
20
|
+
* carries a `trigger-control` header valued with `subtype`, plus any
|
|
21
|
+
* sibling headers (e.g. `public-access-token` on `turn-complete`). Body is
|
|
22
|
+
* always empty — control semantics live in the headers.
|
|
23
|
+
*
|
|
24
|
+
* Returns the ack's last seq_num as `lastEventId`, useful for trim chains.
|
|
25
|
+
*/
|
|
26
|
+
export declare function writeSessionControlRecord(apiClient: ApiClient, sessionId: string, io: IO, subtype: TriggerControlSubtype | string, extraHeaders?: ReadonlyArray<readonly [string, string]>): Promise<StreamWriteResult>;
|
|
27
|
+
/**
|
|
28
|
+
* Append an S2 `trim` command record to `session.out`, setting the new
|
|
29
|
+
* earliest-readable seq_num. Idempotent and monotonic at S2 — the
|
|
30
|
+
* effective trim point is `max(existing, min(provided, current_tail))`.
|
|
31
|
+
*
|
|
32
|
+
* Used after every `turn-complete` to keep `session.out` bounded to
|
|
33
|
+
* approximately one turn of records at steady state.
|
|
34
|
+
*/
|
|
35
|
+
export declare function trimSessionStream(apiClient: ApiClient, sessionId: string, earliestSeqNum: number): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Convenience: append a `turn-complete` control record. Carries an
|
|
38
|
+
* optional refreshed `publicAccessToken` in a sibling header.
|
|
39
|
+
*/
|
|
40
|
+
export declare function writeTurnCompleteRecord(apiClient: ApiClient, sessionId: string, publicAccessToken?: string): Promise<StreamWriteResult>;
|
|
41
|
+
/**
|
|
42
|
+
* Convenience: append an `upgrade-required` control record.
|
|
43
|
+
*/
|
|
44
|
+
export declare function writeUpgradeRequiredRecord(apiClient: ApiClient, sessionId: string): Promise<StreamWriteResult>;
|
|
45
|
+
export {};
|