@trigger.dev/sdk 0.0.0-prerelease-20260508090504 → 0.0.0-prerelease-20260810145618

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 (454) hide show
  1. package/dist/commonjs/imports/ai-runtime-cjs.cjs.map +1 -0
  2. package/dist/commonjs/imports/ai-runtime.js +27 -0
  3. package/dist/commonjs/package.json +2 -1
  4. package/dist/commonjs/v3/agentSkillsRuntime.d.ts +28 -0
  5. package/dist/commonjs/v3/agentSkillsRuntime.js +173 -0
  6. package/dist/commonjs/v3/agentSkillsRuntime.js.map +1 -0
  7. package/dist/commonjs/v3/ai-shared.d.ts +134 -0
  8. package/dist/commonjs/v3/ai-shared.js +166 -0
  9. package/dist/commonjs/v3/ai-shared.js.map +1 -0
  10. package/dist/commonjs/v3/ai.d.ts +3130 -6
  11. package/dist/commonjs/v3/ai.js +7255 -18
  12. package/dist/commonjs/v3/ai.js.map +1 -1
  13. package/dist/commonjs/v3/aiAutoTelemetry.d.ts +2 -0
  14. package/dist/commonjs/v3/aiAutoTelemetry.js +81 -0
  15. package/dist/commonjs/v3/aiAutoTelemetry.js.map +1 -0
  16. package/dist/commonjs/v3/auth.d.ts +18 -4
  17. package/dist/commonjs/v3/auth.js +72 -17
  18. package/dist/commonjs/v3/auth.js.map +1 -1
  19. package/dist/commonjs/v3/auth.test.js +149 -0
  20. package/dist/commonjs/v3/auth.test.js.map +1 -0
  21. package/dist/commonjs/v3/batch.d.ts +1 -1
  22. package/dist/commonjs/v3/batch.js.map +1 -1
  23. package/dist/commonjs/v3/batchDebounce.test.js +189 -0
  24. package/dist/commonjs/v3/batchDebounce.test.js.map +1 -0
  25. package/dist/commonjs/v3/cache.js.map +1 -1
  26. package/dist/commonjs/v3/chat-client.d.ts +314 -0
  27. package/dist/commonjs/v3/chat-client.js +655 -0
  28. package/dist/commonjs/v3/chat-client.js.map +1 -0
  29. package/dist/commonjs/v3/chat-react.d.ts +156 -0
  30. package/dist/commonjs/v3/chat-react.js +334 -0
  31. package/dist/commonjs/v3/chat-react.js.map +1 -0
  32. package/dist/commonjs/v3/chat-server.d.ts +305 -0
  33. package/dist/commonjs/v3/chat-server.js +909 -0
  34. package/dist/commonjs/v3/chat-server.js.map +1 -0
  35. package/dist/commonjs/v3/chat-server.test.js +713 -0
  36. package/dist/commonjs/v3/chat-server.test.js.map +1 -0
  37. package/dist/commonjs/v3/chat-tab-coordinator.d.ts +65 -0
  38. package/dist/commonjs/v3/chat-tab-coordinator.js +235 -0
  39. package/dist/commonjs/v3/chat-tab-coordinator.js.map +1 -0
  40. package/dist/commonjs/v3/chat-tab-coordinator.test.d.ts +1 -0
  41. package/dist/commonjs/v3/chat-tab-coordinator.test.js +140 -0
  42. package/dist/commonjs/v3/chat-tab-coordinator.test.js.map +1 -0
  43. package/dist/commonjs/v3/chat.d.ts +651 -0
  44. package/dist/commonjs/v3/chat.js +1256 -0
  45. package/dist/commonjs/v3/chat.js.map +1 -0
  46. package/dist/commonjs/v3/chat.test.d.ts +1 -0
  47. package/dist/commonjs/v3/chat.test.js +1194 -0
  48. package/dist/commonjs/v3/chat.test.js.map +1 -0
  49. package/dist/commonjs/v3/config.js +1 -9
  50. package/dist/commonjs/v3/config.js.map +1 -1
  51. package/dist/commonjs/v3/createStartSessionAction.test.d.ts +1 -0
  52. package/dist/commonjs/v3/createStartSessionAction.test.js +176 -0
  53. package/dist/commonjs/v3/createStartSessionAction.test.js.map +1 -0
  54. package/dist/commonjs/v3/deployments.d.ts +25 -0
  55. package/dist/commonjs/v3/deployments.js +37 -0
  56. package/dist/commonjs/v3/deployments.js.map +1 -0
  57. package/dist/commonjs/v3/envvars.js.map +1 -1
  58. package/dist/commonjs/v3/hooks.js.map +1 -1
  59. package/dist/commonjs/v3/idempotencyKeys.js.map +1 -1
  60. package/dist/commonjs/v3/index.d.ts +8 -4
  61. package/dist/commonjs/v3/index.js +26 -8
  62. package/dist/commonjs/v3/index.js.map +1 -1
  63. package/dist/commonjs/v3/locals.js.map +1 -1
  64. package/dist/commonjs/v3/metadata.d.ts +2 -2
  65. package/dist/commonjs/v3/metadata.js.map +1 -1
  66. package/dist/commonjs/v3/prompt.js +2 -6
  67. package/dist/commonjs/v3/prompt.js.map +1 -1
  68. package/dist/commonjs/v3/promptManagement.js.map +1 -1
  69. package/dist/commonjs/v3/query.js.map +1 -1
  70. package/dist/commonjs/v3/queues.d.ts +1 -1
  71. package/dist/commonjs/v3/queues.js.map +1 -1
  72. package/dist/commonjs/v3/retry.d.ts +1 -1
  73. package/dist/commonjs/v3/retry.js +1 -1
  74. package/dist/commonjs/v3/retry.js.map +1 -1
  75. package/dist/commonjs/v3/runs-bulk.test.d.ts +1 -0
  76. package/dist/commonjs/v3/runs-bulk.test.js +141 -0
  77. package/dist/commonjs/v3/runs-bulk.test.js.map +1 -0
  78. package/dist/commonjs/v3/runs.d.ts +108 -77
  79. package/dist/commonjs/v3/runs.js +88 -0
  80. package/dist/commonjs/v3/runs.js.map +1 -1
  81. package/dist/commonjs/v3/schedules/index.d.ts +3 -3
  82. package/dist/commonjs/v3/schedules/index.js.map +1 -1
  83. package/dist/commonjs/v3/sessions.d.ts +232 -0
  84. package/dist/commonjs/v3/sessions.js +673 -0
  85. package/dist/commonjs/v3/sessions.js.map +1 -0
  86. package/dist/commonjs/v3/sessions.test.d.ts +1 -0
  87. package/dist/commonjs/v3/sessions.test.js +154 -0
  88. package/dist/commonjs/v3/sessions.test.js.map +1 -0
  89. package/dist/commonjs/v3/shared.d.ts +29 -7
  90. package/dist/commonjs/v3/shared.js +314 -43
  91. package/dist/commonjs/v3/shared.js.map +1 -1
  92. package/dist/commonjs/v3/shared.test.js +46 -0
  93. package/dist/commonjs/v3/shared.test.js.map +1 -1
  94. package/dist/commonjs/v3/skill.d.ts +99 -0
  95. package/dist/commonjs/v3/skill.js +165 -0
  96. package/dist/commonjs/v3/skill.js.map +1 -0
  97. package/dist/commonjs/v3/skills.d.ts +2 -0
  98. package/dist/commonjs/v3/skills.js +6 -0
  99. package/dist/commonjs/v3/skills.js.map +1 -0
  100. package/dist/commonjs/v3/streams.d.ts +1 -1
  101. package/dist/commonjs/v3/streams.js +131 -24
  102. package/dist/commonjs/v3/streams.js.map +1 -1
  103. package/dist/commonjs/v3/streams.test.js +3 -3
  104. package/dist/commonjs/v3/streams.test.js.map +1 -1
  105. package/dist/commonjs/v3/tasks.d.ts +2 -1
  106. package/dist/commonjs/v3/tasks.js +1 -0
  107. package/dist/commonjs/v3/tasks.js.map +1 -1
  108. package/dist/commonjs/v3/test/index.d.ts +3 -0
  109. package/dist/commonjs/v3/test/index.js +18 -0
  110. package/dist/commonjs/v3/test/index.js.map +1 -0
  111. package/dist/commonjs/v3/test/mock-chat-agent.d.ts +265 -0
  112. package/dist/commonjs/v3/test/mock-chat-agent.js +466 -0
  113. package/dist/commonjs/v3/test/mock-chat-agent.js.map +1 -0
  114. package/dist/commonjs/v3/test/setup-catalog.d.ts +1 -0
  115. package/dist/commonjs/v3/test/setup-catalog.js +18 -0
  116. package/dist/commonjs/v3/test/setup-catalog.js.map +1 -0
  117. package/dist/commonjs/v3/test/test-session-handle.d.ts +54 -0
  118. package/dist/commonjs/v3/test/test-session-handle.js +268 -0
  119. package/dist/commonjs/v3/test/test-session-handle.js.map +1 -0
  120. package/dist/commonjs/v3/triggerClient.d.ts +45 -0
  121. package/dist/commonjs/v3/triggerClient.js +114 -0
  122. package/dist/commonjs/v3/triggerClient.js.map +1 -0
  123. package/dist/commonjs/v3/triggerClient.test.d.ts +1 -0
  124. package/dist/commonjs/v3/triggerClient.test.js +226 -0
  125. package/dist/commonjs/v3/triggerClient.test.js.map +1 -0
  126. package/dist/commonjs/v3/triggerClient.types.test.d.ts +1 -0
  127. package/dist/commonjs/v3/triggerClient.types.test.js +123 -0
  128. package/dist/commonjs/v3/triggerClient.types.test.js.map +1 -0
  129. package/dist/commonjs/v3/wait.d.ts +8 -2
  130. package/dist/commonjs/v3/wait.js.map +1 -1
  131. package/dist/commonjs/v3/waitUntil.js.map +1 -1
  132. package/dist/commonjs/v3/webhooks.js +1 -1
  133. package/dist/commonjs/v3/webhooks.js.map +1 -1
  134. package/dist/commonjs/version.js +1 -1
  135. package/dist/esm/imports/ai-runtime.d.ts +2 -0
  136. package/dist/esm/imports/ai-runtime.js +16 -0
  137. package/dist/esm/imports/ai-runtime.js.map +1 -0
  138. package/dist/esm/package.json +2 -1
  139. package/dist/esm/v3/agentSkillsRuntime.d.ts +28 -0
  140. package/dist/esm/v3/agentSkillsRuntime.js +136 -0
  141. package/dist/esm/v3/agentSkillsRuntime.js.map +1 -0
  142. package/dist/esm/v3/ai-shared.d.ts +134 -0
  143. package/dist/esm/v3/ai-shared.js +161 -0
  144. package/dist/esm/v3/ai-shared.js.map +1 -0
  145. package/dist/esm/v3/ai.d.ts +3130 -6
  146. package/dist/esm/v3/ai.js +7248 -14
  147. package/dist/esm/v3/ai.js.map +1 -1
  148. package/dist/esm/v3/aiAutoTelemetry.d.ts +2 -0
  149. package/dist/esm/v3/aiAutoTelemetry.js +78 -0
  150. package/dist/esm/v3/aiAutoTelemetry.js.map +1 -0
  151. package/dist/esm/v3/auth.d.ts +18 -4
  152. package/dist/esm/v3/auth.js +70 -15
  153. package/dist/esm/v3/auth.js.map +1 -1
  154. package/dist/esm/v3/auth.test.d.ts +1 -0
  155. package/dist/esm/v3/auth.test.js +147 -0
  156. package/dist/esm/v3/auth.test.js.map +1 -0
  157. package/dist/esm/v3/batch.d.ts +1 -1
  158. package/dist/esm/v3/batch.js +1 -1
  159. package/dist/esm/v3/batch.js.map +1 -1
  160. package/dist/esm/v3/batchDebounce.test.d.ts +1 -0
  161. package/dist/esm/v3/batchDebounce.test.js +187 -0
  162. package/dist/esm/v3/batchDebounce.test.js.map +1 -0
  163. package/dist/esm/v3/chat-client.d.ts +314 -0
  164. package/dist/esm/v3/chat-client.js +650 -0
  165. package/dist/esm/v3/chat-client.js.map +1 -0
  166. package/dist/esm/v3/chat-react.d.ts +156 -0
  167. package/dist/esm/v3/chat-react.js +329 -0
  168. package/dist/esm/v3/chat-react.js.map +1 -0
  169. package/dist/esm/v3/chat-server.d.ts +305 -0
  170. package/dist/esm/v3/chat-server.js +906 -0
  171. package/dist/esm/v3/chat-server.js.map +1 -0
  172. package/dist/esm/v3/chat-server.test.d.ts +1 -0
  173. package/dist/esm/v3/chat-server.test.js +711 -0
  174. package/dist/esm/v3/chat-server.test.js.map +1 -0
  175. package/dist/esm/v3/chat-tab-coordinator.d.ts +65 -0
  176. package/dist/esm/v3/chat-tab-coordinator.js +231 -0
  177. package/dist/esm/v3/chat-tab-coordinator.js.map +1 -0
  178. package/dist/esm/v3/chat-tab-coordinator.test.d.ts +1 -0
  179. package/dist/esm/v3/chat-tab-coordinator.test.js +138 -0
  180. package/dist/esm/v3/chat-tab-coordinator.test.js.map +1 -0
  181. package/dist/esm/v3/chat.d.ts +651 -0
  182. package/dist/esm/v3/chat.js +1249 -0
  183. package/dist/esm/v3/chat.js.map +1 -0
  184. package/dist/esm/v3/chat.test.d.ts +1 -0
  185. package/dist/esm/v3/chat.test.js +1192 -0
  186. package/dist/esm/v3/chat.test.js.map +1 -0
  187. package/dist/esm/v3/config.js +1 -9
  188. package/dist/esm/v3/config.js.map +1 -1
  189. package/dist/esm/v3/createStartSessionAction.test.d.ts +1 -0
  190. package/dist/esm/v3/createStartSessionAction.test.js +174 -0
  191. package/dist/esm/v3/createStartSessionAction.test.js.map +1 -0
  192. package/dist/esm/v3/deployments.d.ts +25 -0
  193. package/dist/esm/v3/deployments.js +34 -0
  194. package/dist/esm/v3/deployments.js.map +1 -0
  195. package/dist/esm/v3/envvars.js.map +1 -1
  196. package/dist/esm/v3/idempotencyKeys.js +1 -1
  197. package/dist/esm/v3/idempotencyKeys.js.map +1 -1
  198. package/dist/esm/v3/index.d.ts +8 -4
  199. package/dist/esm/v3/index.js +5 -1
  200. package/dist/esm/v3/index.js.map +1 -1
  201. package/dist/esm/v3/metadata.d.ts +2 -2
  202. package/dist/esm/v3/metadata.js.map +1 -1
  203. package/dist/esm/v3/prompt.js +2 -6
  204. package/dist/esm/v3/prompt.js.map +1 -1
  205. package/dist/esm/v3/promptManagement.js.map +1 -1
  206. package/dist/esm/v3/query.js.map +1 -1
  207. package/dist/esm/v3/queues.d.ts +1 -1
  208. package/dist/esm/v3/queues.js.map +1 -1
  209. package/dist/esm/v3/retry.d.ts +1 -1
  210. package/dist/esm/v3/retry.js +1 -1
  211. package/dist/esm/v3/retry.js.map +1 -1
  212. package/dist/esm/v3/runs-bulk.test.d.ts +1 -0
  213. package/dist/esm/v3/runs-bulk.test.js +139 -0
  214. package/dist/esm/v3/runs-bulk.test.js.map +1 -0
  215. package/dist/esm/v3/runs.d.ts +110 -79
  216. package/dist/esm/v3/runs.js +88 -0
  217. package/dist/esm/v3/runs.js.map +1 -1
  218. package/dist/esm/v3/schedules/index.d.ts +3 -3
  219. package/dist/esm/v3/schedules/index.js.map +1 -1
  220. package/dist/esm/v3/sessions.d.ts +232 -0
  221. package/dist/esm/v3/sessions.js +665 -0
  222. package/dist/esm/v3/sessions.js.map +1 -0
  223. package/dist/esm/v3/sessions.test.d.ts +1 -0
  224. package/dist/esm/v3/sessions.test.js +152 -0
  225. package/dist/esm/v3/sessions.test.js.map +1 -0
  226. package/dist/esm/v3/shared.d.ts +29 -7
  227. package/dist/esm/v3/shared.js +312 -44
  228. package/dist/esm/v3/shared.js.map +1 -1
  229. package/dist/esm/v3/shared.test.js +47 -1
  230. package/dist/esm/v3/shared.test.js.map +1 -1
  231. package/dist/esm/v3/skill.d.ts +99 -0
  232. package/dist/esm/v3/skill.js +128 -0
  233. package/dist/esm/v3/skill.js.map +1 -0
  234. package/dist/esm/v3/skills.d.ts +2 -0
  235. package/dist/esm/v3/skills.js +2 -0
  236. package/dist/esm/v3/skills.js.map +1 -0
  237. package/dist/esm/v3/streams.d.ts +1 -1
  238. package/dist/esm/v3/streams.js +131 -25
  239. package/dist/esm/v3/streams.js.map +1 -1
  240. package/dist/esm/v3/streams.test.js +4 -4
  241. package/dist/esm/v3/streams.test.js.map +1 -1
  242. package/dist/esm/v3/tasks.d.ts +2 -1
  243. package/dist/esm/v3/tasks.js +2 -1
  244. package/dist/esm/v3/tasks.js.map +1 -1
  245. package/dist/esm/v3/test/index.d.ts +3 -0
  246. package/dist/esm/v3/test/index.js +13 -0
  247. package/dist/esm/v3/test/index.js.map +1 -0
  248. package/dist/esm/v3/test/mock-chat-agent.d.ts +265 -0
  249. package/dist/esm/v3/test/mock-chat-agent.js +463 -0
  250. package/dist/esm/v3/test/mock-chat-agent.js.map +1 -0
  251. package/dist/esm/v3/test/setup-catalog.d.ts +1 -0
  252. package/dist/esm/v3/test/setup-catalog.js +16 -0
  253. package/dist/esm/v3/test/setup-catalog.js.map +1 -0
  254. package/dist/esm/v3/test/test-session-handle.d.ts +54 -0
  255. package/dist/esm/v3/test/test-session-handle.js +263 -0
  256. package/dist/esm/v3/test/test-session-handle.js.map +1 -0
  257. package/dist/esm/v3/triggerClient.d.ts +45 -0
  258. package/dist/esm/v3/triggerClient.js +77 -0
  259. package/dist/esm/v3/triggerClient.js.map +1 -0
  260. package/dist/esm/v3/triggerClient.test.d.ts +1 -0
  261. package/dist/esm/v3/triggerClient.test.js +224 -0
  262. package/dist/esm/v3/triggerClient.test.js.map +1 -0
  263. package/dist/esm/v3/triggerClient.types.test.d.ts +1 -0
  264. package/dist/esm/v3/triggerClient.types.test.js +88 -0
  265. package/dist/esm/v3/triggerClient.types.test.js.map +1 -0
  266. package/dist/esm/v3/wait.d.ts +8 -2
  267. package/dist/esm/v3/wait.js.map +1 -1
  268. package/dist/esm/v3/webhooks.js +1 -1
  269. package/dist/esm/v3/webhooks.js.map +1 -1
  270. package/dist/esm/version.js +1 -1
  271. package/docs/ai/prompts.mdx +426 -0
  272. package/docs/ai-chat/actions.mdx +111 -0
  273. package/docs/ai-chat/anatomy.mdx +67 -0
  274. package/docs/ai-chat/backend.mdx +813 -0
  275. package/docs/ai-chat/background-injection.mdx +217 -0
  276. package/docs/ai-chat/changelog.mdx +958 -0
  277. package/docs/ai-chat/chat-local.mdx +170 -0
  278. package/docs/ai-chat/client-protocol.mdx +1083 -0
  279. package/docs/ai-chat/compaction.mdx +407 -0
  280. package/docs/ai-chat/custom-agents.mdx +387 -0
  281. package/docs/ai-chat/error-handling.mdx +411 -0
  282. package/docs/ai-chat/fast-starts.mdx +757 -0
  283. package/docs/ai-chat/frontend.mdx +622 -0
  284. package/docs/ai-chat/how-it-works.mdx +226 -0
  285. package/docs/ai-chat/lifecycle-hooks.mdx +526 -0
  286. package/docs/ai-chat/mcp.mdx +97 -0
  287. package/docs/ai-chat/migrating-from-a-route-handler.mdx +592 -0
  288. package/docs/ai-chat/overview.mdx +86 -0
  289. package/docs/ai-chat/patterns/branching-conversations.mdx +280 -0
  290. package/docs/ai-chat/patterns/code-sandbox.mdx +122 -0
  291. package/docs/ai-chat/patterns/database-persistence.mdx +410 -0
  292. package/docs/ai-chat/patterns/human-in-the-loop.mdx +279 -0
  293. package/docs/ai-chat/patterns/large-payloads.mdx +165 -0
  294. package/docs/ai-chat/patterns/oom-resilience.mdx +116 -0
  295. package/docs/ai-chat/patterns/persistence-and-replay.mdx +207 -0
  296. package/docs/ai-chat/patterns/recovery-boot.mdx +226 -0
  297. package/docs/ai-chat/patterns/skills.mdx +217 -0
  298. package/docs/ai-chat/patterns/sub-agents.mdx +379 -0
  299. package/docs/ai-chat/patterns/tool-result-auditing.mdx +144 -0
  300. package/docs/ai-chat/patterns/trusted-edge-signals.mdx +333 -0
  301. package/docs/ai-chat/patterns/version-upgrades.mdx +168 -0
  302. package/docs/ai-chat/pending-messages.mdx +345 -0
  303. package/docs/ai-chat/prompt-caching.mdx +206 -0
  304. package/docs/ai-chat/quick-start.mdx +157 -0
  305. package/docs/ai-chat/reference.mdx +925 -0
  306. package/docs/ai-chat/server-chat.mdx +259 -0
  307. package/docs/ai-chat/sessions.mdx +329 -0
  308. package/docs/ai-chat/testing.mdx +678 -0
  309. package/docs/ai-chat/tools.mdx +187 -0
  310. package/docs/ai-chat/types.mdx +238 -0
  311. package/docs/ai-chat/upgrade-guide.mdx +511 -0
  312. package/docs/apikeys.mdx +54 -0
  313. package/docs/billing-limits.mdx +73 -0
  314. package/docs/building-with-ai.mdx +261 -0
  315. package/docs/bulk-actions.mdx +77 -0
  316. package/docs/changelog.mdx +6 -0
  317. package/docs/cli-deploy-commands.mdx +9 -0
  318. package/docs/cli-dev-commands.mdx +9 -0
  319. package/docs/cli-init-commands.mdx +58 -0
  320. package/docs/cli-introduction.mdx +25 -0
  321. package/docs/cli-list-profiles-commands.mdx +42 -0
  322. package/docs/cli-login-commands.mdx +33 -0
  323. package/docs/cli-logout-commands.mdx +33 -0
  324. package/docs/cli-preview-archive.mdx +59 -0
  325. package/docs/cli-promote-commands.mdx +9 -0
  326. package/docs/cli-switch.mdx +43 -0
  327. package/docs/cli-update-commands.mdx +42 -0
  328. package/docs/cli-whoami-commands.mdx +33 -0
  329. package/docs/community.mdx +6 -0
  330. package/docs/config/config-file.mdx +602 -0
  331. package/docs/config/extensions/additionalFiles.mdx +38 -0
  332. package/docs/config/extensions/additionalPackages.mdx +40 -0
  333. package/docs/config/extensions/aptGet.mdx +34 -0
  334. package/docs/config/extensions/audioWaveform.mdx +20 -0
  335. package/docs/config/extensions/custom.mdx +380 -0
  336. package/docs/config/extensions/emitDecoratorMetadata.mdx +52 -0
  337. package/docs/config/extensions/esbuildPlugin.mdx +31 -0
  338. package/docs/config/extensions/ffmpeg.mdx +45 -0
  339. package/docs/config/extensions/lightpanda.mdx +56 -0
  340. package/docs/config/extensions/overview.mdx +67 -0
  341. package/docs/config/extensions/playwright.mdx +195 -0
  342. package/docs/config/extensions/prismaExtension.mdx +1014 -0
  343. package/docs/config/extensions/puppeteer.mdx +30 -0
  344. package/docs/config/extensions/pythonExtension.mdx +182 -0
  345. package/docs/config/extensions/syncEnvVars.mdx +318 -0
  346. package/docs/context.mdx +235 -0
  347. package/docs/database-connections.mdx +213 -0
  348. package/docs/deploy-environment-variables.mdx +435 -0
  349. package/docs/deployment/atomic-deployment.mdx +172 -0
  350. package/docs/deployment/dev-branches.mdx +92 -0
  351. package/docs/deployment/overview.mdx +257 -0
  352. package/docs/deployment/preview-branches.mdx +224 -0
  353. package/docs/errors-retrying.mdx +383 -0
  354. package/docs/github-actions.mdx +222 -0
  355. package/docs/github-integration.mdx +136 -0
  356. package/docs/github-repo.mdx +8 -0
  357. package/docs/help-email.mdx +6 -0
  358. package/docs/help-slack.mdx +12 -0
  359. package/docs/hidden-tasks.mdx +56 -0
  360. package/docs/how-it-works.mdx +454 -0
  361. package/docs/how-to-reduce-your-spend.mdx +211 -0
  362. package/docs/idempotency.mdx +504 -0
  363. package/docs/introduction.mdx +223 -0
  364. package/docs/limits.mdx +250 -0
  365. package/docs/logging.mdx +195 -0
  366. package/docs/machines.mdx +952 -0
  367. package/docs/manual-setup.mdx +632 -0
  368. package/docs/mcp-agent-rules.mdx +41 -0
  369. package/docs/mcp-introduction.mdx +385 -0
  370. package/docs/mcp-tools.mdx +273 -0
  371. package/docs/migrating-from-v3.mdx +332 -0
  372. package/docs/observability/dashboards.mdx +102 -0
  373. package/docs/observability/query.mdx +585 -0
  374. package/docs/open-source-contributing.mdx +16 -0
  375. package/docs/private-networking/aws-console-setup.mdx +304 -0
  376. package/docs/private-networking/overview.mdx +144 -0
  377. package/docs/private-networking/troubleshooting.mdx +78 -0
  378. package/docs/queue-concurrency.mdx +358 -0
  379. package/docs/quick-start.mdx +97 -0
  380. package/docs/realtime/auth.mdx +208 -0
  381. package/docs/realtime/backend/overview.mdx +45 -0
  382. package/docs/realtime/backend/streams.mdx +418 -0
  383. package/docs/realtime/backend/subscribe.mdx +225 -0
  384. package/docs/realtime/how-it-works.mdx +94 -0
  385. package/docs/realtime/overview.mdx +63 -0
  386. package/docs/realtime/react-hooks/overview.mdx +73 -0
  387. package/docs/realtime/react-hooks/streams.mdx +449 -0
  388. package/docs/realtime/react-hooks/subscribe.mdx +674 -0
  389. package/docs/realtime/react-hooks/swr.mdx +87 -0
  390. package/docs/realtime/react-hooks/triggering.mdx +194 -0
  391. package/docs/realtime/react-hooks/use-wait-token.mdx +34 -0
  392. package/docs/realtime/run-object.mdx +174 -0
  393. package/docs/replaying.mdx +72 -0
  394. package/docs/request-feature.mdx +6 -0
  395. package/docs/roadmap.mdx +6 -0
  396. package/docs/run-tests.mdx +21 -0
  397. package/docs/run-usage.mdx +113 -0
  398. package/docs/runs/bulk-actions.mdx +183 -0
  399. package/docs/runs/heartbeats.mdx +38 -0
  400. package/docs/runs/max-duration.mdx +139 -0
  401. package/docs/runs/metadata.mdx +734 -0
  402. package/docs/runs/priority.mdx +31 -0
  403. package/docs/runs.mdx +396 -0
  404. package/docs/self-hosting/docker.mdx +512 -0
  405. package/docs/self-hosting/env/supervisor.mdx +75 -0
  406. package/docs/self-hosting/env/webapp.mdx +282 -0
  407. package/docs/self-hosting/kubernetes.mdx +714 -0
  408. package/docs/self-hosting/overview.mdx +119 -0
  409. package/docs/self-hosting/security.mdx +50 -0
  410. package/docs/skills.mdx +85 -0
  411. package/docs/tags.mdx +120 -0
  412. package/docs/tasks/overview.mdx +697 -0
  413. package/docs/tasks/scheduled.mdx +404 -0
  414. package/docs/tasks/schemaTask.mdx +413 -0
  415. package/docs/tasks/streams.mdx +884 -0
  416. package/docs/triggering.mdx +1332 -0
  417. package/docs/troubleshooting-alerts.mdx +385 -0
  418. package/docs/troubleshooting-debugging-in-vscode.mdx +9 -0
  419. package/docs/troubleshooting-github-issues.mdx +6 -0
  420. package/docs/troubleshooting-uptime-status.mdx +7 -0
  421. package/docs/troubleshooting.mdx +402 -0
  422. package/docs/upgrading-packages.mdx +80 -0
  423. package/docs/vercel-integration.mdx +207 -0
  424. package/docs/versioning.mdx +56 -0
  425. package/docs/video-walkthrough.mdx +23 -0
  426. package/docs/wait-for-token.mdx +540 -0
  427. package/docs/wait-for.mdx +42 -0
  428. package/docs/wait-until.mdx +53 -0
  429. package/docs/wait.mdx +18 -0
  430. package/docs/writing-tasks-introduction.mdx +33 -0
  431. package/package.json +105 -13
  432. package/skills/trigger-authoring-chat-agent/SKILL.md +296 -0
  433. package/skills/trigger-authoring-tasks/SKILL.md +254 -0
  434. package/skills/trigger-chat-agent-advanced/SKILL.md +368 -0
  435. package/skills/trigger-cost-savings/SKILL.md +116 -0
  436. package/skills/trigger-realtime-and-frontend/SKILL.md +276 -0
  437. package/dist/commonjs/v3/config.test.js +0 -27
  438. package/dist/commonjs/v3/config.test.js.map +0 -1
  439. package/dist/commonjs/v3/maxComputeSeconds.d.ts +0 -11
  440. package/dist/commonjs/v3/maxComputeSeconds.js +0 -14
  441. package/dist/commonjs/v3/maxComputeSeconds.js.map +0 -1
  442. package/dist/commonjs/v3/maxComputeSeconds.test.js +0 -19
  443. package/dist/commonjs/v3/maxComputeSeconds.test.js.map +0 -1
  444. package/dist/esm/v3/config.test.js +0 -25
  445. package/dist/esm/v3/config.test.js.map +0 -1
  446. package/dist/esm/v3/maxComputeSeconds.d.ts +0 -11
  447. package/dist/esm/v3/maxComputeSeconds.js +0 -11
  448. package/dist/esm/v3/maxComputeSeconds.js.map +0 -1
  449. package/dist/esm/v3/maxComputeSeconds.test.js +0 -17
  450. package/dist/esm/v3/maxComputeSeconds.test.js.map +0 -1
  451. /package/dist/commonjs/{v3/config.test.d.ts → imports/ai-runtime.d.ts} +0 -0
  452. /package/dist/commonjs/v3/{maxComputeSeconds.test.d.ts → auth.test.d.ts} +0 -0
  453. /package/dist/{esm/v3/config.test.d.ts → commonjs/v3/batchDebounce.test.d.ts} +0 -0
  454. /package/dist/{esm/v3/maxComputeSeconds.test.d.ts → commonjs/v3/chat-server.test.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-runtime-cjs.cjs","sourceRoot":"","sources":["../../../src/imports/ai-runtime-cjs.cts"],"names":[],"mappings":";AAAA,8EAA8E;AAC9E,iFAAiF;;AAEjF,aAAa;AACb,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEzB,aAAa;AACb,MAAM,CAAC,OAAO,CAAC,sBAAsB,GAAG,EAAE,CAAC,sBAAsB,CAAC;AAClE,aAAa;AACb,MAAM,CAAC,OAAO,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC;AAC5C,aAAa;AACb,MAAM,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC;AAC1C,aAAa;AACb,MAAM,CAAC,OAAO,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC;AAC5C,aAAa;AACb,MAAM,CAAC,OAAO,CAAC,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC;AAC9C,aAAa;AACb,MAAM,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC;AAC1C,aAAa;AACb,MAAM,CAAC,OAAO,CAAC,mBAAmB,GAAG,EAAE,CAAC,mBAAmB,CAAC;AAC5D,aAAa;AACb,MAAM,CAAC,OAAO,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC;AAC5C,aAAa;AACb,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;AAC9B,aAAa;AACb,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ // CJS variant of ./ai-runtime.ts — tshy swaps this in for the CommonJS build.
3
+ // `require("ai")` of an ESM-only package is supported on Node >=20.19 / >=22.12.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ // @ts-ignore
6
+ const ai = require("ai");
7
+ // @ts-ignore
8
+ module.exports.convertToModelMessages = ai.convertToModelMessages;
9
+ // @ts-ignore
10
+ module.exports.dynamicTool = ai.dynamicTool;
11
+ // @ts-ignore
12
+ module.exports.generateId = ai.generateId;
13
+ // @ts-ignore
14
+ module.exports.getToolName = ai.getToolName;
15
+ // @ts-ignore
16
+ module.exports.isToolUIPart = ai.isToolUIPart;
17
+ // @ts-ignore
18
+ module.exports.jsonSchema = ai.jsonSchema;
19
+ // @ts-ignore
20
+ module.exports.readUIMessageStream = ai.readUIMessageStream;
21
+ // @ts-ignore
22
+ module.exports.stepCountIs = ai.stepCountIs;
23
+ // @ts-ignore
24
+ module.exports.tool = ai.tool;
25
+ // @ts-ignore
26
+ module.exports.zodSchema = ai.zodSchema;
27
+ //# sourceMappingURL=ai-runtime-cjs.cjs.map
@@ -1,3 +1,4 @@
1
1
  {
2
- "type": "commonjs"
2
+ "type": "commonjs",
3
+ "sideEffects": false
3
4
  }
@@ -0,0 +1,28 @@
1
+ export type BashSkillInput = {
2
+ /** Absolute path to the skill's root (used as `cwd`). */
3
+ skillPath: string;
4
+ /** The bash command to run. */
5
+ command: string;
6
+ /** Optional abort signal forwarded to `spawn()`. */
7
+ abortSignal?: AbortSignal;
8
+ };
9
+ export type BashSkillResult = {
10
+ exitCode: number | null;
11
+ stdout: string;
12
+ stderr: string;
13
+ } | {
14
+ error: string;
15
+ };
16
+ export type ReadFileInSkillInput = {
17
+ /** Absolute path to the skill's root — the relative path must resolve inside it. */
18
+ skillPath: string;
19
+ /** Relative path the tool caller supplied. */
20
+ relativePath: string;
21
+ };
22
+ export type ReadFileInSkillResult = {
23
+ content: string;
24
+ } | {
25
+ error: string;
26
+ };
27
+ export declare function readFileInSkill({ skillPath, relativePath, }: ReadFileInSkillInput): Promise<ReadFileInSkillResult>;
28
+ export declare function runBashInSkill({ skillPath, command, abortSignal, }: BashSkillInput): Promise<BashSkillResult>;
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.readFileInSkill = readFileInSkill;
37
+ exports.runBashInSkill = runBashInSkill;
38
+ const node_child_process_1 = require("node:child_process");
39
+ const fs = __importStar(require("node:fs/promises"));
40
+ const nodePath = __importStar(require("node:path"));
41
+ /**
42
+ * Server-only runtime for the auto-injected skill tools
43
+ * (`loadSkill` / `readFile` / `bash`) that `chat.agent({ skills })`
44
+ * wires up. Split off from `./ai.ts` so the chat-agent surface in
45
+ * `@trigger.dev/sdk/ai` stays importable from client bundles —
46
+ * Next.js + Webpack reject top-level `node:*` imports anywhere in a
47
+ * client graph, even when a consumer only pulls in types.
48
+ *
49
+ * The SDK's `ai.ts` loads this module via a computed-string dynamic
50
+ * import inside each tool's `execute` — webpack treats the
51
+ * expression as an unknown dependency and skips static tracing, so
52
+ * the node-only symbols here never surface in a client build. The
53
+ * module resolves fine at runtime on a server worker because the
54
+ * relative path (`./agentSkillsRuntime.js`) lands next to `ai.js` in
55
+ * the emitted dist.
56
+ *
57
+ * Public subpath: `@trigger.dev/sdk/ai/skills-runtime`. Customers
58
+ * who want to eagerly bundle the runtime server-side (e.g. warming
59
+ * it on worker bootstrap) can import from there.
60
+ */
61
+ const DEFAULT_BASH_OUTPUT_BYTES = 64 * 1024;
62
+ const DEFAULT_READ_FILE_BYTES = 1024 * 1024;
63
+ function truncate(s, limit) {
64
+ if (s.length <= limit)
65
+ return s;
66
+ return s.slice(0, limit) + `\n…[truncated ${s.length - limit} bytes]`;
67
+ }
68
+ /**
69
+ * Path-traversal guard: confirm `relative` resolves inside `root`,
70
+ * even after symlinks are followed. Throws if it escapes via `..`, an
71
+ * absolute prefix, or a symlink that points outside. Returns the
72
+ * resolved real path.
73
+ *
74
+ * `fs.realpath` only works on paths that exist, so when the resolved
75
+ * path doesn't exist yet (e.g. writing a new file) we fall back to
76
+ * the lexical check — a non-existent path can't traverse a symlink
77
+ * to escape since the symlink doesn't exist either.
78
+ */
79
+ async function safeJoinInside(root, relative) {
80
+ if (nodePath.isAbsolute(relative)) {
81
+ throw new Error(`Path must be relative to the skill directory: ${relative}`);
82
+ }
83
+ const realRoot = await fs.realpath(nodePath.resolve(root));
84
+ const resolved = nodePath.resolve(realRoot, relative);
85
+ let real = resolved;
86
+ try {
87
+ real = await fs.realpath(resolved);
88
+ }
89
+ catch (err) {
90
+ if (err.code !== "ENOENT") {
91
+ throw err;
92
+ }
93
+ // Path doesn't exist yet; fall through with the lexical resolve.
94
+ }
95
+ const normalized = realRoot + nodePath.sep;
96
+ if (real !== realRoot && !real.startsWith(normalized)) {
97
+ throw new Error(`Path escapes the skill directory: ${relative}`);
98
+ }
99
+ return real;
100
+ }
101
+ async function readFileInSkill({ skillPath, relativePath, }) {
102
+ let absolute;
103
+ try {
104
+ absolute = await safeJoinInside(skillPath, relativePath);
105
+ }
106
+ catch (err) {
107
+ return { error: err.message };
108
+ }
109
+ try {
110
+ const content = await fs.readFile(absolute, "utf8");
111
+ return { content: truncate(content, DEFAULT_READ_FILE_BYTES) };
112
+ }
113
+ catch (err) {
114
+ return { error: err.message };
115
+ }
116
+ }
117
+ async function runBashInSkill({ skillPath, command, abortSignal, }) {
118
+ return new Promise((resolvePromise) => {
119
+ let child;
120
+ try {
121
+ child = (0, node_child_process_1.spawn)("bash", ["-c", command], {
122
+ cwd: skillPath,
123
+ signal: abortSignal,
124
+ });
125
+ }
126
+ catch (err) {
127
+ resolvePromise({ error: err.message });
128
+ return;
129
+ }
130
+ // Cap stdout/stderr accumulation at the byte budget so an
131
+ // LLM-generated command (`cat /dev/zero`, `yes`) can't OOM the
132
+ // worker. Track total seen length separately so the truncation
133
+ // notice still reports how much was dropped.
134
+ let stdout = "";
135
+ let stderr = "";
136
+ let stdoutSeen = 0;
137
+ let stderrSeen = 0;
138
+ const limit = DEFAULT_BASH_OUTPUT_BYTES;
139
+ child.stdout?.on("data", (chunk) => {
140
+ const text = chunk.toString();
141
+ stdoutSeen += text.length;
142
+ if (stdout.length >= limit)
143
+ return;
144
+ const remaining = limit - stdout.length;
145
+ stdout += text.length > remaining ? text.slice(0, remaining) : text;
146
+ });
147
+ child.stderr?.on("data", (chunk) => {
148
+ const text = chunk.toString();
149
+ stderrSeen += text.length;
150
+ if (stderr.length >= limit)
151
+ return;
152
+ const remaining = limit - stderr.length;
153
+ stderr += text.length > remaining ? text.slice(0, remaining) : text;
154
+ });
155
+ child.once("close", (code) => {
156
+ const stdoutFinal = stdoutSeen > stdout.length
157
+ ? `${stdout}\n…[truncated ${stdoutSeen - stdout.length} bytes]`
158
+ : stdout;
159
+ const stderrFinal = stderrSeen > stderr.length
160
+ ? `${stderr}\n…[truncated ${stderrSeen - stderr.length} bytes]`
161
+ : stderr;
162
+ resolvePromise({
163
+ exitCode: code,
164
+ stdout: stdoutFinal,
165
+ stderr: stderrFinal,
166
+ });
167
+ });
168
+ child.once("error", (err) => {
169
+ resolvePromise({ error: err.message });
170
+ });
171
+ });
172
+ }
173
+ //# sourceMappingURL=agentSkillsRuntime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentSkillsRuntime.js","sourceRoot":"","sources":["../../../src/v3/agentSkillsRuntime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Browser-safe primitives shared between `@trigger.dev/sdk/ai` (server) and
3
+ * `@trigger.dev/sdk/chat` / `@trigger.dev/sdk/chat/react` (client).
4
+ *
5
+ * This module exists to keep `ai.ts` reachable only from the server graph.
6
+ * `ai.ts` weighs in at ~7000 lines and statically imports the agent-skills
7
+ * runtime (which uses `node:child_process` / `node:fs/promises`). When a
8
+ * browser bundle imports a runtime value from `ai.ts` — historically the
9
+ * `PENDING_MESSAGE_INJECTED_TYPE` constant in `chat-react.ts` — the bundler
10
+ * traces `ai.ts`'s entire module graph into the client chunk and hits the
11
+ * `node:` builtins, which Turbopack rejects outright (and webpack flags as
12
+ * a "Critical dependency" warning).
13
+ *
14
+ * Anything in this file MUST stay free of `node:*` imports and free of any
15
+ * import from `ai.ts`.
16
+ */
17
+ import type { Task, AnyTask } from "@trigger.dev/core/v3";
18
+ import type { InferUITools, ToolSet, UIDataTypes, UIMessage } from "ai";
19
+ /**
20
+ * Message-part `type` value for the pending-message data part the agent
21
+ * injects when a follow-up message arrives mid-turn.
22
+ */
23
+ export declare const PENDING_MESSAGE_INJECTED_TYPE: "data-pending-message-injected";
24
+ import type { ChatTaskWirePayload } from "./chat.js";
25
+ export type { ChatTaskWirePayload, ChatInputChunk } from "./chat.js";
26
+ /**
27
+ * Extracts the client-data (`metadata`) type from a chat task.
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * import type { InferChatClientData } from "@trigger.dev/sdk/ai";
32
+ * import type { myChat } from "@/trigger/chat";
33
+ *
34
+ * type MyClientData = InferChatClientData<typeof myChat>;
35
+ * ```
36
+ */
37
+ export type InferChatClientData<TTask extends AnyTask> = TTask extends Task<string, ChatTaskWirePayload<any, infer TMetadata>, any> ? TMetadata : unknown;
38
+ /**
39
+ * Extracts the UI message type from a chat task (wire payload `message` items).
40
+ *
41
+ * @example
42
+ * ```ts
43
+ * import type { InferChatUIMessage } from "@trigger.dev/sdk/ai";
44
+ * import type { myChat } from "@/trigger/chat";
45
+ *
46
+ * type Msg = InferChatUIMessage<typeof myChat>;
47
+ * ```
48
+ */
49
+ export type InferChatUIMessage<TTask extends AnyTask> = TTask extends Task<string, ChatTaskWirePayload<infer TUIM extends UIMessage, any>, any> ? TUIM : UIMessage;
50
+ /**
51
+ * Derive the chat `UIMessage` type for a given tool set. The tool-part types
52
+ * (`tool-${name}` with typed input/output) are inferred from the tools. Use
53
+ * this to declare the message type from your tools (e.g. to pass to
54
+ * `chat.withUIMessage<...>()` or to type the frontend) without hand-writing
55
+ * the `UIMessage<unknown, UIDataTypes, InferUITools<...>>` triple.
56
+ *
57
+ * @example
58
+ * ```ts
59
+ * import type { InferChatUIMessageFromTools } from "@trigger.dev/sdk/ai";
60
+ * const tools = { search, readFile };
61
+ * type ChatUiMessage = InferChatUIMessageFromTools<typeof tools>;
62
+ * ```
63
+ */
64
+ export type InferChatUIMessageFromTools<TTools extends ToolSet> = UIMessage<unknown, UIDataTypes, InferUITools<TTools>>;
65
+ /**
66
+ * Upsert an incoming wire message into the customer's DB-backed chain
67
+ * inside a `hydrateMessages` hook. Returns `true` iff the chain was
68
+ * mutated (the caller should persist).
69
+ *
70
+ * Handles the three cases that matter:
71
+ *
72
+ * - **Non-submit-message trigger** (`regenerate-message` / `action`,
73
+ * or `submit-message` with no incoming): no-op. Returns `false`.
74
+ * - **Incoming id already in `stored`** (HITL `addToolOutput` /
75
+ * `addToolApproveResponse` continuation — the wire carries the
76
+ * existing assistant's id with a slim resolution payload): no-op.
77
+ * The runtime's per-turn merge overlays the new tool-state advance
78
+ * onto the existing entry; pushing again would duplicate the row
79
+ * in the chain you return, and the duplicate slim copy would hit
80
+ * `toModelMessages` with no `input`. Returns `false`.
81
+ * - **Incoming id not in `stored`** (typically a fresh user message
82
+ * on a new turn): push. Returns `true`.
83
+ *
84
+ * Mutates `stored` in place. The caller persists `stored`, not the
85
+ * return value.
86
+ *
87
+ * @example
88
+ * ```ts
89
+ * import { chat, upsertIncomingMessage } from "@trigger.dev/sdk/ai";
90
+ *
91
+ * chat.agent({
92
+ * hydrateMessages: async ({ chatId, trigger, incomingMessages }) => {
93
+ * const record = await db.chat.findUnique({ where: { id: chatId } });
94
+ * const stored = record?.messages ?? [];
95
+ * if (upsertIncomingMessage(stored, { trigger, incomingMessages })) {
96
+ * await db.chat.update({ where: { id: chatId }, data: { messages: stored } });
97
+ * }
98
+ * return stored;
99
+ * },
100
+ * });
101
+ * ```
102
+ */
103
+ export declare function upsertIncomingMessage<TMsg extends UIMessage = UIMessage>(stored: TMsg[], event: {
104
+ trigger: "submit-message" | "regenerate-message" | "action";
105
+ incomingMessages: TMsg[];
106
+ }): boolean;
107
+ /**
108
+ * Slim an outgoing assistant message before it ships on `submit-message`.
109
+ *
110
+ * When the client calls `addToolOutput(...)` to resolve a HITL tool (or
111
+ * `addToolApproveResponse(...)` to approve/deny one), the AI SDK turns
112
+ * it into a `submit-message` whose `messages.at(-1)` is the existing
113
+ * assistant message with the new state stitched onto a single tool
114
+ * part. On a reasoning-heavy multi-step turn, that full assistant
115
+ * message can be 600 KB – 1 MB (encrypted reasoning blobs, reasoning
116
+ * text, full tool `input` JSON, prior tool outputs) — well over the
117
+ * `.in/append` cap.
118
+ *
119
+ * The agent runtime only consumes the wire-advanced fields of those
120
+ * tool parts (state + output / errorText / approval). Everything else
121
+ * (text, reasoning, tool `input`) is rebuilt server-side from the
122
+ * durable snapshot or `hydrateMessages`. So we drop everything but
123
+ * the advanced tool parts here, and reduce those to just the fields
124
+ * the server overlays.
125
+ *
126
+ * The slim only fires when the assistant message carries at least one
127
+ * wire-advanceable tool part. Plain assistant resends (no resolved /
128
+ * approval-responded tool) and non-assistant messages pass through
129
+ * untouched.
130
+ *
131
+ * Pairs with the per-turn merge on the agent side
132
+ * (`mergeIncomingIntoHydrated` in `ai.ts`).
133
+ */
134
+ export declare function slimSubmitMessageForWire<TMsg extends UIMessage | undefined>(message: TMsg): TMsg;
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ /**
3
+ * Browser-safe primitives shared between `@trigger.dev/sdk/ai` (server) and
4
+ * `@trigger.dev/sdk/chat` / `@trigger.dev/sdk/chat/react` (client).
5
+ *
6
+ * This module exists to keep `ai.ts` reachable only from the server graph.
7
+ * `ai.ts` weighs in at ~7000 lines and statically imports the agent-skills
8
+ * runtime (which uses `node:child_process` / `node:fs/promises`). When a
9
+ * browser bundle imports a runtime value from `ai.ts` — historically the
10
+ * `PENDING_MESSAGE_INJECTED_TYPE` constant in `chat-react.ts` — the bundler
11
+ * traces `ai.ts`'s entire module graph into the client chunk and hits the
12
+ * `node:` builtins, which Turbopack rejects outright (and webpack flags as
13
+ * a "Critical dependency" warning).
14
+ *
15
+ * Anything in this file MUST stay free of `node:*` imports and free of any
16
+ * import from `ai.ts`.
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.PENDING_MESSAGE_INJECTED_TYPE = void 0;
20
+ exports.upsertIncomingMessage = upsertIncomingMessage;
21
+ exports.slimSubmitMessageForWire = slimSubmitMessageForWire;
22
+ /**
23
+ * Message-part `type` value for the pending-message data part the agent
24
+ * injects when a follow-up message arrives mid-turn.
25
+ */
26
+ exports.PENDING_MESSAGE_INJECTED_TYPE = "data-pending-message-injected";
27
+ /**
28
+ * Upsert an incoming wire message into the customer's DB-backed chain
29
+ * inside a `hydrateMessages` hook. Returns `true` iff the chain was
30
+ * mutated (the caller should persist).
31
+ *
32
+ * Handles the three cases that matter:
33
+ *
34
+ * - **Non-submit-message trigger** (`regenerate-message` / `action`,
35
+ * or `submit-message` with no incoming): no-op. Returns `false`.
36
+ * - **Incoming id already in `stored`** (HITL `addToolOutput` /
37
+ * `addToolApproveResponse` continuation — the wire carries the
38
+ * existing assistant's id with a slim resolution payload): no-op.
39
+ * The runtime's per-turn merge overlays the new tool-state advance
40
+ * onto the existing entry; pushing again would duplicate the row
41
+ * in the chain you return, and the duplicate slim copy would hit
42
+ * `toModelMessages` with no `input`. Returns `false`.
43
+ * - **Incoming id not in `stored`** (typically a fresh user message
44
+ * on a new turn): push. Returns `true`.
45
+ *
46
+ * Mutates `stored` in place. The caller persists `stored`, not the
47
+ * return value.
48
+ *
49
+ * @example
50
+ * ```ts
51
+ * import { chat, upsertIncomingMessage } from "@trigger.dev/sdk/ai";
52
+ *
53
+ * chat.agent({
54
+ * hydrateMessages: async ({ chatId, trigger, incomingMessages }) => {
55
+ * const record = await db.chat.findUnique({ where: { id: chatId } });
56
+ * const stored = record?.messages ?? [];
57
+ * if (upsertIncomingMessage(stored, { trigger, incomingMessages })) {
58
+ * await db.chat.update({ where: { id: chatId }, data: { messages: stored } });
59
+ * }
60
+ * return stored;
61
+ * },
62
+ * });
63
+ * ```
64
+ */
65
+ function upsertIncomingMessage(stored, event) {
66
+ if (event.trigger !== "submit-message")
67
+ return false;
68
+ if (event.incomingMessages.length === 0)
69
+ return false;
70
+ const newMsg = event.incomingMessages[event.incomingMessages.length - 1];
71
+ if (!newMsg)
72
+ return false;
73
+ if (newMsg.id) {
74
+ const existingIdx = stored.findIndex((m) => m.id === newMsg.id);
75
+ if (existingIdx !== -1)
76
+ return false;
77
+ }
78
+ stored.push(newMsg);
79
+ return true;
80
+ }
81
+ /**
82
+ * Tool-part states that the client advances and ships back over the wire.
83
+ * Covers HITL `addToolOutput` (output-available / output-error) and the
84
+ * approval flow (approval-responded / output-denied). `input-streaming` /
85
+ * `input-available` / `approval-requested` are server-emitted only — if
86
+ * we see them on the wire we treat them as no-ops and skip the slim/merge.
87
+ */
88
+ function isWireAdvanceableToolState(state) {
89
+ return (state === "output-available" ||
90
+ state === "output-error" ||
91
+ state === "approval-responded" ||
92
+ state === "output-denied");
93
+ }
94
+ /** Whether a tool-UI part is a static (`tool-${name}`) or dynamic tool. */
95
+ function isToolPartType(type) {
96
+ return typeof type === "string" && (type.startsWith("tool-") || type === "dynamic-tool");
97
+ }
98
+ /**
99
+ * Slim an outgoing assistant message before it ships on `submit-message`.
100
+ *
101
+ * When the client calls `addToolOutput(...)` to resolve a HITL tool (or
102
+ * `addToolApproveResponse(...)` to approve/deny one), the AI SDK turns
103
+ * it into a `submit-message` whose `messages.at(-1)` is the existing
104
+ * assistant message with the new state stitched onto a single tool
105
+ * part. On a reasoning-heavy multi-step turn, that full assistant
106
+ * message can be 600 KB – 1 MB (encrypted reasoning blobs, reasoning
107
+ * text, full tool `input` JSON, prior tool outputs) — well over the
108
+ * `.in/append` cap.
109
+ *
110
+ * The agent runtime only consumes the wire-advanced fields of those
111
+ * tool parts (state + output / errorText / approval). Everything else
112
+ * (text, reasoning, tool `input`) is rebuilt server-side from the
113
+ * durable snapshot or `hydrateMessages`. So we drop everything but
114
+ * the advanced tool parts here, and reduce those to just the fields
115
+ * the server overlays.
116
+ *
117
+ * The slim only fires when the assistant message carries at least one
118
+ * wire-advanceable tool part. Plain assistant resends (no resolved /
119
+ * approval-responded tool) and non-assistant messages pass through
120
+ * untouched.
121
+ *
122
+ * Pairs with the per-turn merge on the agent side
123
+ * (`mergeIncomingIntoHydrated` in `ai.ts`).
124
+ */
125
+ function slimSubmitMessageForWire(message) {
126
+ if (!message)
127
+ return message;
128
+ if (message.role !== "assistant")
129
+ return message;
130
+ const parts = (message.parts ?? []);
131
+ const advancedToolParts = parts.filter((p) => p && typeof p === "object" && isToolPartType(p.type) && isWireAdvanceableToolState(p.state));
132
+ if (advancedToolParts.length === 0)
133
+ return message;
134
+ const slimParts = advancedToolParts.map((p) => {
135
+ const base = {
136
+ type: p.type,
137
+ toolCallId: p.toolCallId,
138
+ state: p.state,
139
+ };
140
+ if (p.type === "dynamic-tool" && typeof p.toolName === "string") {
141
+ base.toolName = p.toolName;
142
+ }
143
+ if (p.state === "output-available") {
144
+ base.output = p.output;
145
+ if (p.approval !== undefined)
146
+ base.approval = p.approval;
147
+ }
148
+ else if (p.state === "output-error") {
149
+ if (p.errorText !== undefined)
150
+ base.errorText = p.errorText;
151
+ if (p.approval !== undefined)
152
+ base.approval = p.approval;
153
+ }
154
+ else if (p.state === "approval-responded" || p.state === "output-denied") {
155
+ if (p.approval !== undefined)
156
+ base.approval = p.approval;
157
+ }
158
+ return base;
159
+ });
160
+ return {
161
+ id: message.id,
162
+ role: message.role,
163
+ parts: slimParts,
164
+ };
165
+ }
166
+ //# sourceMappingURL=ai-shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-shared.js","sourceRoot":"","sources":["../../../src/v3/ai-shared.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;;;AAKH;;;GAGG;AACU,QAAA,6BAA6B,GAAG,+BAAwC,CAAC;AA0DtF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,+BACE,MAAc,EACd,KAGC;IAED,IAAI,KAAK,CAAC,OAAO,KAAK,gBAAgB;QAAE,OAAO,KAAK,CAAC;IACrD,IAAI,KAAK,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzE,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;QACd,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC;QAChE,IAAI,WAAW,KAAK,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IACvC,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAS,0BAA0B,CACjC,KAAc;IAEd,OAAO,CACL,KAAK,KAAK,kBAAkB;QAC5B,KAAK,KAAK,cAAc;QACxB,KAAK,KAAK,oBAAoB;QAC9B,KAAK,KAAK,eAAe,CAC1B,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,SAAS,cAAc,CAAC,IAAa;IACnC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,KAAK,cAAc,CAAC,CAAC;AAC3F,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,kCAA6E,OAAa;IACxF,IAAI,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC;IAC7B,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,OAAO,CAAC;IACjD,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAU,CAAC;IAC7C,MAAM,iBAAiB,GAAG,KAAK,CAAC,MAAM,CACpC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,0BAA0B,CAAC,CAAC,CAAC,KAAK,CAAC,CAC9F,CAAC;IACF,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACnD,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;QACjD,MAAM,IAAI,GAA4B;YACpC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,KAAK,EAAE,CAAC,CAAC,KAAK;SACf,CAAC;QACF,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAChE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,CAAC,KAAK,KAAK,kBAAkB,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;YACvB,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS;gBAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;QAC3D,CAAC;aAAM,IAAI,CAAC,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;YACtC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS;gBAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;YAC5D,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS;gBAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;QAC3D,CAAC;aAAM,IAAI,CAAC,CAAC,KAAK,KAAK,oBAAoB,IAAI,CAAC,CAAC,KAAK,KAAK,eAAe,EAAE,CAAC;YAC3E,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS;gBAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;QAC3D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IACH,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,SAAS;KACE,CAAC;AACvB,CAAC"}