@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.
Files changed (345) hide show
  1. package/dist/commonjs/v3/apiClient/errors.d.ts +5 -0
  2. package/dist/commonjs/v3/apiClient/errors.js +12 -0
  3. package/dist/commonjs/v3/apiClient/errors.js.map +1 -1
  4. package/dist/commonjs/v3/apiClient/index.d.ts +208 -1
  5. package/dist/commonjs/v3/apiClient/index.js +204 -0
  6. package/dist/commonjs/v3/apiClient/index.js.map +1 -1
  7. package/dist/commonjs/v3/apiClient/runStream.d.ts +44 -0
  8. package/dist/commonjs/v3/apiClient/runStream.js +156 -22
  9. package/dist/commonjs/v3/apiClient/runStream.js.map +1 -1
  10. package/dist/commonjs/v3/apiClient/runStream.test.d.ts +1 -0
  11. package/dist/commonjs/v3/apiClient/runStream.test.js +511 -0
  12. package/dist/commonjs/v3/apiClient/runStream.test.js.map +1 -0
  13. package/dist/commonjs/v3/apiClient/types.d.ts +2 -0
  14. package/dist/commonjs/v3/auth/environment.d.ts +62 -0
  15. package/dist/commonjs/v3/auth/environment.js +20 -0
  16. package/dist/commonjs/v3/auth/environment.js.map +1 -0
  17. package/dist/commonjs/v3/errors.d.ts +7 -0
  18. package/dist/commonjs/v3/errors.js +22 -2
  19. package/dist/commonjs/v3/errors.js.map +1 -1
  20. package/dist/commonjs/v3/index.d.ts +2 -1
  21. package/dist/commonjs/v3/index.js +1 -0
  22. package/dist/commonjs/v3/index.js.map +1 -1
  23. package/dist/commonjs/v3/inputStreams/index.d.ts +3 -0
  24. package/dist/commonjs/v3/inputStreams/index.js +9 -0
  25. package/dist/commonjs/v3/inputStreams/index.js.map +1 -1
  26. package/dist/commonjs/v3/inputStreams/manager.d.ts +14 -0
  27. package/dist/commonjs/v3/inputStreams/manager.js +116 -4
  28. package/dist/commonjs/v3/inputStreams/manager.js.map +1 -1
  29. package/dist/commonjs/v3/inputStreams/noopManager.d.ts +3 -0
  30. package/dist/commonjs/v3/inputStreams/noopManager.js +3 -0
  31. package/dist/commonjs/v3/inputStreams/noopManager.js.map +1 -1
  32. package/dist/commonjs/v3/inputStreams/types.d.ts +19 -0
  33. package/dist/commonjs/v3/locals/manager.js.map +1 -1
  34. package/dist/commonjs/v3/locals/types.d.ts +18 -7
  35. package/dist/commonjs/v3/realtime-streams-api.d.ts +3 -0
  36. package/dist/commonjs/v3/realtime-streams-api.js +8 -1
  37. package/dist/commonjs/v3/realtime-streams-api.js.map +1 -1
  38. package/dist/commonjs/v3/realtimeStreams/index.d.ts +3 -0
  39. package/dist/commonjs/v3/realtimeStreams/index.js +11 -1
  40. package/dist/commonjs/v3/realtimeStreams/index.js.map +1 -1
  41. package/dist/commonjs/v3/realtimeStreams/manager.d.ts +11 -0
  42. package/dist/commonjs/v3/realtimeStreams/manager.js +58 -2
  43. package/dist/commonjs/v3/realtimeStreams/manager.js.map +1 -1
  44. package/dist/commonjs/v3/realtimeStreams/manager.test.d.ts +1 -0
  45. package/dist/commonjs/v3/realtimeStreams/manager.test.js +92 -0
  46. package/dist/commonjs/v3/realtimeStreams/manager.test.js.map +1 -0
  47. package/dist/commonjs/v3/realtimeStreams/noopManager.js +1 -1
  48. package/dist/commonjs/v3/realtimeStreams/noopManager.js.map +1 -1
  49. package/dist/commonjs/v3/realtimeStreams/sessionStreamInstance.d.ts +41 -0
  50. package/dist/commonjs/v3/realtimeStreams/sessionStreamInstance.js +77 -0
  51. package/dist/commonjs/v3/realtimeStreams/sessionStreamInstance.js.map +1 -0
  52. package/dist/commonjs/v3/realtimeStreams/sessionStreamOneshot.d.ts +45 -0
  53. package/dist/commonjs/v3/realtimeStreams/sessionStreamOneshot.js +83 -0
  54. package/dist/commonjs/v3/realtimeStreams/sessionStreamOneshot.js.map +1 -0
  55. package/dist/commonjs/v3/realtimeStreams/streamInstance.d.ts +14 -2
  56. package/dist/commonjs/v3/realtimeStreams/streamInstance.js +5 -2
  57. package/dist/commonjs/v3/realtimeStreams/streamInstance.js.map +1 -1
  58. package/dist/commonjs/v3/realtimeStreams/streamsWriterV1.d.ts +2 -2
  59. package/dist/commonjs/v3/realtimeStreams/streamsWriterV1.js +2 -1
  60. package/dist/commonjs/v3/realtimeStreams/streamsWriterV1.js.map +1 -1
  61. package/dist/commonjs/v3/realtimeStreams/streamsWriterV2.d.ts +23 -2
  62. package/dist/commonjs/v3/realtimeStreams/streamsWriterV2.js +57 -4
  63. package/dist/commonjs/v3/realtimeStreams/streamsWriterV2.js.map +1 -1
  64. package/dist/commonjs/v3/realtimeStreams/streamsWriterV2.test.d.ts +1 -0
  65. package/dist/commonjs/v3/realtimeStreams/streamsWriterV2.test.js +68 -0
  66. package/dist/commonjs/v3/realtimeStreams/streamsWriterV2.test.js.map +1 -0
  67. package/dist/commonjs/v3/realtimeStreams/types.d.ts +42 -3
  68. package/dist/commonjs/v3/resource-catalog/catalog.d.ts +4 -1
  69. package/dist/commonjs/v3/resource-catalog/index.d.ts +4 -1
  70. package/dist/commonjs/v3/resource-catalog/index.js +9 -0
  71. package/dist/commonjs/v3/resource-catalog/index.js.map +1 -1
  72. package/dist/commonjs/v3/resource-catalog/noopResourceCatalog.d.ts +4 -1
  73. package/dist/commonjs/v3/resource-catalog/noopResourceCatalog.js +9 -0
  74. package/dist/commonjs/v3/resource-catalog/noopResourceCatalog.js.map +1 -1
  75. package/dist/commonjs/v3/resource-catalog/standardResourceCatalog.d.ts +6 -1
  76. package/dist/commonjs/v3/resource-catalog/standardResourceCatalog.js +52 -4
  77. package/dist/commonjs/v3/resource-catalog/standardResourceCatalog.js.map +1 -1
  78. package/dist/commonjs/v3/runEngineWorker/supervisor/http.d.ts +2 -0
  79. package/dist/commonjs/v3/runEngineWorker/supervisor/schemas.d.ts +14 -0
  80. package/dist/commonjs/v3/runEngineWorker/workload/http.d.ts +1 -0
  81. package/dist/commonjs/v3/runEngineWorker/workload/schemas.d.ts +7 -0
  82. package/dist/commonjs/v3/schemas/api.d.ts +333 -0
  83. package/dist/commonjs/v3/schemas/api.js +82 -9
  84. package/dist/commonjs/v3/schemas/api.js.map +1 -1
  85. package/dist/commonjs/v3/schemas/build.d.ts +240 -0
  86. package/dist/commonjs/v3/schemas/build.js +3 -0
  87. package/dist/commonjs/v3/schemas/build.js.map +1 -1
  88. package/dist/commonjs/v3/schemas/checkpoints.d.ts +7 -0
  89. package/dist/commonjs/v3/schemas/idempotencyKey.test.d.ts +1 -0
  90. package/dist/commonjs/v3/schemas/idempotencyKey.test.js +143 -0
  91. package/dist/commonjs/v3/schemas/idempotencyKey.test.js.map +1 -0
  92. package/dist/commonjs/v3/schemas/messages.d.ts +160 -0
  93. package/dist/commonjs/v3/schemas/resources.d.ts +40 -0
  94. package/dist/commonjs/v3/schemas/resources.js +5 -1
  95. package/dist/commonjs/v3/schemas/resources.js.map +1 -1
  96. package/dist/commonjs/v3/schemas/runEngine.d.ts +12 -0
  97. package/dist/commonjs/v3/schemas/runEngine.js +3 -1
  98. package/dist/commonjs/v3/schemas/runEngine.js.map +1 -1
  99. package/dist/commonjs/v3/schemas/schemas.d.ts +59 -0
  100. package/dist/commonjs/v3/schemas/schemas.js +21 -1
  101. package/dist/commonjs/v3/schemas/schemas.js.map +1 -1
  102. package/dist/commonjs/v3/semanticInternalAttributes.d.ts +1 -0
  103. package/dist/commonjs/v3/semanticInternalAttributes.js +1 -0
  104. package/dist/commonjs/v3/semanticInternalAttributes.js.map +1 -1
  105. package/dist/commonjs/v3/session-streams-api.d.ts +5 -0
  106. package/dist/commonjs/v3/session-streams-api.js +25 -0
  107. package/dist/commonjs/v3/session-streams-api.js.map +1 -0
  108. package/dist/commonjs/v3/sessionStreams/chatSnapshot.d.ts +53 -0
  109. package/dist/commonjs/v3/sessionStreams/chatSnapshot.js +43 -0
  110. package/dist/commonjs/v3/sessionStreams/chatSnapshot.js.map +1 -0
  111. package/dist/commonjs/v3/sessionStreams/index.d.ts +24 -0
  112. package/dist/commonjs/v3/sessionStreams/index.js +64 -0
  113. package/dist/commonjs/v3/sessionStreams/index.js.map +1 -0
  114. package/dist/commonjs/v3/sessionStreams/manager.d.ts +54 -0
  115. package/dist/commonjs/v3/sessionStreams/manager.js +511 -0
  116. package/dist/commonjs/v3/sessionStreams/manager.js.map +1 -0
  117. package/dist/commonjs/v3/sessionStreams/manager.test.d.ts +1 -0
  118. package/dist/commonjs/v3/sessionStreams/manager.test.js +123 -0
  119. package/dist/commonjs/v3/sessionStreams/manager.test.js.map +1 -0
  120. package/dist/commonjs/v3/sessionStreams/noopManager.d.ts +20 -0
  121. package/dist/commonjs/v3/sessionStreams/noopManager.js +35 -0
  122. package/dist/commonjs/v3/sessionStreams/noopManager.js.map +1 -0
  123. package/dist/commonjs/v3/sessionStreams/types.d.ts +65 -0
  124. package/dist/commonjs/v3/sessionStreams/types.js +7 -0
  125. package/dist/commonjs/v3/sessionStreams/types.js.map +1 -0
  126. package/dist/commonjs/v3/sessionStreams/wireProtocol.d.ts +65 -0
  127. package/dist/commonjs/v3/sessionStreams/wireProtocol.js +72 -0
  128. package/dist/commonjs/v3/sessionStreams/wireProtocol.js.map +1 -0
  129. package/dist/commonjs/v3/taskContext/index.d.ts +4 -0
  130. package/dist/commonjs/v3/taskContext/index.js +18 -0
  131. package/dist/commonjs/v3/taskContext/index.js.map +1 -1
  132. package/dist/commonjs/v3/taskContext/index.test.d.ts +1 -0
  133. package/dist/commonjs/v3/taskContext/index.test.js +73 -0
  134. package/dist/commonjs/v3/taskContext/index.test.js.map +1 -0
  135. package/dist/commonjs/v3/taskContext/otelProcessors.js +11 -0
  136. package/dist/commonjs/v3/taskContext/otelProcessors.js.map +1 -1
  137. package/dist/commonjs/v3/test/index.d.ts +5 -0
  138. package/dist/commonjs/v3/test/index.js +14 -0
  139. package/dist/commonjs/v3/test/index.js.map +1 -0
  140. package/dist/commonjs/v3/test/mock-task-context.d.ts +123 -0
  141. package/dist/commonjs/v3/test/mock-task-context.js +193 -0
  142. package/dist/commonjs/v3/test/mock-task-context.js.map +1 -0
  143. package/dist/commonjs/v3/test/test-input-stream-manager.d.ts +46 -0
  144. package/dist/commonjs/v3/test/test-input-stream-manager.js +192 -0
  145. package/dist/commonjs/v3/test/test-input-stream-manager.js.map +1 -0
  146. package/dist/commonjs/v3/test/test-realtime-streams-manager.d.ts +40 -0
  147. package/dist/commonjs/v3/test/test-realtime-streams-manager.js +140 -0
  148. package/dist/commonjs/v3/test/test-realtime-streams-manager.js.map +1 -0
  149. package/dist/commonjs/v3/test/test-run-metadata-manager.d.ts +31 -0
  150. package/dist/commonjs/v3/test/test-run-metadata-manager.js +86 -0
  151. package/dist/commonjs/v3/test/test-run-metadata-manager.js.map +1 -0
  152. package/dist/commonjs/v3/test/test-session-stream-manager.d.ts +60 -0
  153. package/dist/commonjs/v3/test/test-session-stream-manager.js +247 -0
  154. package/dist/commonjs/v3/test/test-session-stream-manager.js.map +1 -0
  155. package/dist/commonjs/v3/types/tasks.d.ts +35 -0
  156. package/dist/commonjs/v3/utils/gitBranch.d.ts +2 -0
  157. package/dist/commonjs/v3/utils/gitBranch.js +46 -0
  158. package/dist/commonjs/v3/utils/gitBranch.js.map +1 -0
  159. package/dist/commonjs/v3/utils/globals.d.ts +2 -0
  160. package/dist/commonjs/v3/utils/globals.js.map +1 -1
  161. package/dist/commonjs/v3/utils/reconnectBackoff.d.ts +20 -0
  162. package/dist/commonjs/v3/utils/reconnectBackoff.js +29 -0
  163. package/dist/commonjs/v3/utils/reconnectBackoff.js.map +1 -0
  164. package/dist/commonjs/v3/utils/reconnectBackoff.test.d.ts +1 -0
  165. package/dist/commonjs/v3/utils/reconnectBackoff.test.js +76 -0
  166. package/dist/commonjs/v3/utils/reconnectBackoff.test.js.map +1 -0
  167. package/dist/commonjs/v3/workers/index.d.ts +1 -0
  168. package/dist/commonjs/v3/workers/index.js +3 -1
  169. package/dist/commonjs/v3/workers/index.js.map +1 -1
  170. package/dist/commonjs/v3/workers/taskExecutor.js +1 -0
  171. package/dist/commonjs/v3/workers/taskExecutor.js.map +1 -1
  172. package/dist/commonjs/version.js +1 -1
  173. package/dist/esm/v3/apiClient/errors.d.ts +5 -0
  174. package/dist/esm/v3/apiClient/errors.js +11 -0
  175. package/dist/esm/v3/apiClient/errors.js.map +1 -1
  176. package/dist/esm/v3/apiClient/index.d.ts +208 -1
  177. package/dist/esm/v3/apiClient/index.js +205 -1
  178. package/dist/esm/v3/apiClient/index.js.map +1 -1
  179. package/dist/esm/v3/apiClient/runStream.d.ts +44 -0
  180. package/dist/esm/v3/apiClient/runStream.js +157 -23
  181. package/dist/esm/v3/apiClient/runStream.js.map +1 -1
  182. package/dist/esm/v3/apiClient/runStream.test.d.ts +1 -0
  183. package/dist/esm/v3/apiClient/runStream.test.js +509 -0
  184. package/dist/esm/v3/apiClient/runStream.test.js.map +1 -0
  185. package/dist/esm/v3/apiClient/types.d.ts +2 -0
  186. package/dist/esm/v3/auth/environment.d.ts +62 -0
  187. package/dist/esm/v3/auth/environment.js +19 -0
  188. package/dist/esm/v3/auth/environment.js.map +1 -0
  189. package/dist/esm/v3/errors.d.ts +7 -0
  190. package/dist/esm/v3/errors.js +19 -1
  191. package/dist/esm/v3/errors.js.map +1 -1
  192. package/dist/esm/v3/index.d.ts +2 -1
  193. package/dist/esm/v3/index.js +1 -0
  194. package/dist/esm/v3/index.js.map +1 -1
  195. package/dist/esm/v3/inputStreams/index.d.ts +3 -0
  196. package/dist/esm/v3/inputStreams/index.js +9 -0
  197. package/dist/esm/v3/inputStreams/index.js.map +1 -1
  198. package/dist/esm/v3/inputStreams/manager.d.ts +14 -0
  199. package/dist/esm/v3/inputStreams/manager.js +116 -4
  200. package/dist/esm/v3/inputStreams/manager.js.map +1 -1
  201. package/dist/esm/v3/inputStreams/noopManager.d.ts +3 -0
  202. package/dist/esm/v3/inputStreams/noopManager.js +3 -0
  203. package/dist/esm/v3/inputStreams/noopManager.js.map +1 -1
  204. package/dist/esm/v3/inputStreams/types.d.ts +19 -0
  205. package/dist/esm/v3/locals/manager.js.map +1 -1
  206. package/dist/esm/v3/locals/types.d.ts +18 -7
  207. package/dist/esm/v3/realtime-streams-api.d.ts +3 -0
  208. package/dist/esm/v3/realtime-streams-api.js +2 -0
  209. package/dist/esm/v3/realtime-streams-api.js.map +1 -1
  210. package/dist/esm/v3/realtimeStreams/index.d.ts +3 -0
  211. package/dist/esm/v3/realtimeStreams/index.js +5 -0
  212. package/dist/esm/v3/realtimeStreams/index.js.map +1 -1
  213. package/dist/esm/v3/realtimeStreams/manager.d.ts +11 -0
  214. package/dist/esm/v3/realtimeStreams/manager.js +58 -2
  215. package/dist/esm/v3/realtimeStreams/manager.js.map +1 -1
  216. package/dist/esm/v3/realtimeStreams/manager.test.d.ts +1 -0
  217. package/dist/esm/v3/realtimeStreams/manager.test.js +90 -0
  218. package/dist/esm/v3/realtimeStreams/manager.test.js.map +1 -0
  219. package/dist/esm/v3/realtimeStreams/noopManager.js +1 -1
  220. package/dist/esm/v3/realtimeStreams/noopManager.js.map +1 -1
  221. package/dist/esm/v3/realtimeStreams/sessionStreamInstance.d.ts +41 -0
  222. package/dist/esm/v3/realtimeStreams/sessionStreamInstance.js +73 -0
  223. package/dist/esm/v3/realtimeStreams/sessionStreamInstance.js.map +1 -0
  224. package/dist/esm/v3/realtimeStreams/sessionStreamOneshot.d.ts +45 -0
  225. package/dist/esm/v3/realtimeStreams/sessionStreamOneshot.js +77 -0
  226. package/dist/esm/v3/realtimeStreams/sessionStreamOneshot.js.map +1 -0
  227. package/dist/esm/v3/realtimeStreams/streamInstance.d.ts +14 -2
  228. package/dist/esm/v3/realtimeStreams/streamInstance.js +5 -2
  229. package/dist/esm/v3/realtimeStreams/streamInstance.js.map +1 -1
  230. package/dist/esm/v3/realtimeStreams/streamsWriterV1.d.ts +2 -2
  231. package/dist/esm/v3/realtimeStreams/streamsWriterV1.js +2 -1
  232. package/dist/esm/v3/realtimeStreams/streamsWriterV1.js.map +1 -1
  233. package/dist/esm/v3/realtimeStreams/streamsWriterV2.d.ts +23 -2
  234. package/dist/esm/v3/realtimeStreams/streamsWriterV2.js +56 -4
  235. package/dist/esm/v3/realtimeStreams/streamsWriterV2.js.map +1 -1
  236. package/dist/esm/v3/realtimeStreams/streamsWriterV2.test.d.ts +1 -0
  237. package/dist/esm/v3/realtimeStreams/streamsWriterV2.test.js +66 -0
  238. package/dist/esm/v3/realtimeStreams/streamsWriterV2.test.js.map +1 -0
  239. package/dist/esm/v3/realtimeStreams/types.d.ts +42 -3
  240. package/dist/esm/v3/resource-catalog/catalog.d.ts +4 -1
  241. package/dist/esm/v3/resource-catalog/index.d.ts +4 -1
  242. package/dist/esm/v3/resource-catalog/index.js +9 -0
  243. package/dist/esm/v3/resource-catalog/index.js.map +1 -1
  244. package/dist/esm/v3/resource-catalog/noopResourceCatalog.d.ts +4 -1
  245. package/dist/esm/v3/resource-catalog/noopResourceCatalog.js +9 -0
  246. package/dist/esm/v3/resource-catalog/noopResourceCatalog.js.map +1 -1
  247. package/dist/esm/v3/resource-catalog/standardResourceCatalog.d.ts +6 -1
  248. package/dist/esm/v3/resource-catalog/standardResourceCatalog.js +52 -4
  249. package/dist/esm/v3/resource-catalog/standardResourceCatalog.js.map +1 -1
  250. package/dist/esm/v3/runEngineWorker/supervisor/http.d.ts +2 -0
  251. package/dist/esm/v3/runEngineWorker/supervisor/schemas.d.ts +14 -0
  252. package/dist/esm/v3/runEngineWorker/workload/http.d.ts +1 -0
  253. package/dist/esm/v3/runEngineWorker/workload/schemas.d.ts +7 -0
  254. package/dist/esm/v3/schemas/api.d.ts +333 -0
  255. package/dist/esm/v3/schemas/api.js +80 -7
  256. package/dist/esm/v3/schemas/api.js.map +1 -1
  257. package/dist/esm/v3/schemas/build.d.ts +240 -0
  258. package/dist/esm/v3/schemas/build.js +4 -1
  259. package/dist/esm/v3/schemas/build.js.map +1 -1
  260. package/dist/esm/v3/schemas/checkpoints.d.ts +7 -0
  261. package/dist/esm/v3/schemas/idempotencyKey.test.d.ts +1 -0
  262. package/dist/esm/v3/schemas/idempotencyKey.test.js +141 -0
  263. package/dist/esm/v3/schemas/idempotencyKey.test.js.map +1 -0
  264. package/dist/esm/v3/schemas/messages.d.ts +160 -0
  265. package/dist/esm/v3/schemas/resources.d.ts +40 -0
  266. package/dist/esm/v3/schemas/resources.js +4 -0
  267. package/dist/esm/v3/schemas/resources.js.map +1 -1
  268. package/dist/esm/v3/schemas/runEngine.d.ts +12 -0
  269. package/dist/esm/v3/schemas/runEngine.js +2 -0
  270. package/dist/esm/v3/schemas/runEngine.js.map +1 -1
  271. package/dist/esm/v3/schemas/schemas.d.ts +59 -0
  272. package/dist/esm/v3/schemas/schemas.js +20 -0
  273. package/dist/esm/v3/schemas/schemas.js.map +1 -1
  274. package/dist/esm/v3/semanticInternalAttributes.d.ts +1 -0
  275. package/dist/esm/v3/semanticInternalAttributes.js +1 -0
  276. package/dist/esm/v3/semanticInternalAttributes.js.map +1 -1
  277. package/dist/esm/v3/session-streams-api.d.ts +5 -0
  278. package/dist/esm/v3/session-streams-api.js +8 -0
  279. package/dist/esm/v3/session-streams-api.js.map +1 -0
  280. package/dist/esm/v3/sessionStreams/chatSnapshot.d.ts +53 -0
  281. package/dist/esm/v3/sessionStreams/chatSnapshot.js +39 -0
  282. package/dist/esm/v3/sessionStreams/chatSnapshot.js.map +1 -0
  283. package/dist/esm/v3/sessionStreams/index.d.ts +24 -0
  284. package/dist/esm/v3/sessionStreams/index.js +60 -0
  285. package/dist/esm/v3/sessionStreams/index.js.map +1 -0
  286. package/dist/esm/v3/sessionStreams/manager.d.ts +54 -0
  287. package/dist/esm/v3/sessionStreams/manager.js +507 -0
  288. package/dist/esm/v3/sessionStreams/manager.js.map +1 -0
  289. package/dist/esm/v3/sessionStreams/manager.test.d.ts +1 -0
  290. package/dist/esm/v3/sessionStreams/manager.test.js +121 -0
  291. package/dist/esm/v3/sessionStreams/manager.test.js.map +1 -0
  292. package/dist/esm/v3/sessionStreams/noopManager.d.ts +20 -0
  293. package/dist/esm/v3/sessionStreams/noopManager.js +31 -0
  294. package/dist/esm/v3/sessionStreams/noopManager.js.map +1 -0
  295. package/dist/esm/v3/sessionStreams/types.d.ts +65 -0
  296. package/dist/esm/v3/sessionStreams/types.js +8 -0
  297. package/dist/esm/v3/sessionStreams/types.js.map +1 -0
  298. package/dist/esm/v3/sessionStreams/wireProtocol.d.ts +65 -0
  299. package/dist/esm/v3/sessionStreams/wireProtocol.js +66 -0
  300. package/dist/esm/v3/sessionStreams/wireProtocol.js.map +1 -0
  301. package/dist/esm/v3/taskContext/index.d.ts +4 -0
  302. package/dist/esm/v3/taskContext/index.js +18 -0
  303. package/dist/esm/v3/taskContext/index.js.map +1 -1
  304. package/dist/esm/v3/taskContext/index.test.d.ts +1 -0
  305. package/dist/esm/v3/taskContext/index.test.js +71 -0
  306. package/dist/esm/v3/taskContext/index.test.js.map +1 -0
  307. package/dist/esm/v3/taskContext/otelProcessors.js +11 -0
  308. package/dist/esm/v3/taskContext/otelProcessors.js.map +1 -1
  309. package/dist/esm/v3/test/index.d.ts +5 -0
  310. package/dist/esm/v3/test/index.js +6 -0
  311. package/dist/esm/v3/test/index.js.map +1 -0
  312. package/dist/esm/v3/test/mock-task-context.d.ts +123 -0
  313. package/dist/esm/v3/test/mock-task-context.js +190 -0
  314. package/dist/esm/v3/test/mock-task-context.js.map +1 -0
  315. package/dist/esm/v3/test/test-input-stream-manager.d.ts +46 -0
  316. package/dist/esm/v3/test/test-input-stream-manager.js +188 -0
  317. package/dist/esm/v3/test/test-input-stream-manager.js.map +1 -0
  318. package/dist/esm/v3/test/test-realtime-streams-manager.d.ts +40 -0
  319. package/dist/esm/v3/test/test-realtime-streams-manager.js +136 -0
  320. package/dist/esm/v3/test/test-realtime-streams-manager.js.map +1 -0
  321. package/dist/esm/v3/test/test-run-metadata-manager.d.ts +31 -0
  322. package/dist/esm/v3/test/test-run-metadata-manager.js +82 -0
  323. package/dist/esm/v3/test/test-run-metadata-manager.js.map +1 -0
  324. package/dist/esm/v3/test/test-session-stream-manager.d.ts +60 -0
  325. package/dist/esm/v3/test/test-session-stream-manager.js +243 -0
  326. package/dist/esm/v3/test/test-session-stream-manager.js.map +1 -0
  327. package/dist/esm/v3/types/tasks.d.ts +35 -0
  328. package/dist/esm/v3/utils/gitBranch.d.ts +2 -0
  329. package/dist/esm/v3/utils/gitBranch.js +42 -0
  330. package/dist/esm/v3/utils/gitBranch.js.map +1 -0
  331. package/dist/esm/v3/utils/globals.d.ts +2 -0
  332. package/dist/esm/v3/utils/globals.js.map +1 -1
  333. package/dist/esm/v3/utils/reconnectBackoff.d.ts +20 -0
  334. package/dist/esm/v3/utils/reconnectBackoff.js +25 -0
  335. package/dist/esm/v3/utils/reconnectBackoff.js.map +1 -0
  336. package/dist/esm/v3/utils/reconnectBackoff.test.d.ts +1 -0
  337. package/dist/esm/v3/utils/reconnectBackoff.test.js +74 -0
  338. package/dist/esm/v3/utils/reconnectBackoff.test.js.map +1 -0
  339. package/dist/esm/v3/workers/index.d.ts +1 -0
  340. package/dist/esm/v3/workers/index.js +1 -0
  341. package/dist/esm/v3/workers/index.js.map +1 -1
  342. package/dist/esm/v3/workers/taskExecutor.js +2 -1
  343. package/dist/esm/v3/workers/taskExecutor.js.map +1 -1
  344. package/dist/esm/version.js +1 -1
  345. 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;SACwB,CAAC;IAC/B,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;SACwB,CAAC;IAC/B,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
+ {"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
- declare const __local: unique symbol;
2
- type BrandLocal<T> = {
3
- [__local]: T;
4
- };
5
- export type LocalsKey<T> = BrandLocal<T> & {
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: unique symbol;
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
- // Clean up when stream completes
46
- streamInstance.wait().finally(() => this.activeStreams.delete(streamInfo));
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":"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"}
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;YAC7B,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"}
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 {};