trigger.dev 0.0.0-v3-prerelease-20250108142426 → 0.0.0-v4-prerelease-20250917185130

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 (292) hide show
  1. package/README.md +28 -1
  2. package/dist/esm/apiClient.d.ts +158 -74
  3. package/dist/esm/apiClient.js +341 -76
  4. package/dist/esm/apiClient.js.map +1 -1
  5. package/dist/esm/build/buildWorker.d.ts +10 -6
  6. package/dist/esm/build/buildWorker.js +22 -38
  7. package/dist/esm/build/buildWorker.js.map +1 -1
  8. package/dist/esm/build/bundle.d.ts +18 -1
  9. package/dist/esm/build/bundle.js +142 -52
  10. package/dist/esm/build/bundle.js.map +1 -1
  11. package/dist/esm/build/entryPoints.d.ts +12 -0
  12. package/dist/esm/build/entryPoints.js +127 -0
  13. package/dist/esm/build/entryPoints.js.map +1 -0
  14. package/dist/esm/build/extensions.js +17 -0
  15. package/dist/esm/build/extensions.js.map +1 -1
  16. package/dist/esm/build/externals.js +184 -2
  17. package/dist/esm/build/externals.js.map +1 -1
  18. package/dist/esm/build/packageModules.d.ts +15 -5
  19. package/dist/esm/build/packageModules.js +154 -36
  20. package/dist/esm/build/packageModules.js.map +1 -1
  21. package/dist/esm/cli/common.d.ts +1 -1
  22. package/dist/esm/cli/common.js +38 -45
  23. package/dist/esm/cli/common.js.map +1 -1
  24. package/dist/esm/cli/index.js +19 -3
  25. package/dist/esm/cli/index.js.map +1 -1
  26. package/dist/esm/commands/analyze.d.ts +23 -0
  27. package/dist/esm/commands/analyze.js +122 -0
  28. package/dist/esm/commands/analyze.js.map +1 -0
  29. package/dist/esm/commands/deploy.d.ts +5 -2
  30. package/dist/esm/commands/deploy.js +271 -160
  31. package/dist/esm/commands/deploy.js.map +1 -1
  32. package/dist/esm/commands/dev.d.ts +36 -6
  33. package/dist/esm/commands/dev.js +71 -2
  34. package/dist/esm/commands/dev.js.map +1 -1
  35. package/dist/esm/commands/env.d.ts +2 -0
  36. package/dist/esm/commands/env.js +298 -0
  37. package/dist/esm/commands/env.js.map +1 -0
  38. package/dist/esm/commands/init.d.ts +9 -1
  39. package/dist/esm/commands/init.js +132 -65
  40. package/dist/esm/commands/init.js.map +1 -1
  41. package/dist/esm/commands/install-mcp.d.ts +50 -0
  42. package/dist/esm/commands/install-mcp.js +497 -0
  43. package/dist/esm/commands/install-mcp.js.map +1 -0
  44. package/dist/esm/commands/install-rules.d.ts +11 -0
  45. package/dist/esm/commands/install-rules.js +381 -0
  46. package/dist/esm/commands/install-rules.js.map +1 -0
  47. package/dist/esm/commands/list-profiles.d.ts +3 -7
  48. package/dist/esm/commands/list-profiles.js +7 -4
  49. package/dist/esm/commands/list-profiles.js.map +1 -1
  50. package/dist/esm/commands/login.d.ts +9 -5
  51. package/dist/esm/commands/login.js +40 -7
  52. package/dist/esm/commands/login.js.map +1 -1
  53. package/dist/esm/commands/logout.d.ts +1 -1
  54. package/dist/esm/commands/mcp.d.ts +38 -0
  55. package/dist/esm/commands/mcp.js +82 -0
  56. package/dist/esm/commands/mcp.js.map +1 -0
  57. package/dist/esm/commands/preview.d.ts +5 -0
  58. package/dist/esm/commands/preview.js +93 -0
  59. package/dist/esm/commands/preview.js.map +1 -0
  60. package/dist/esm/commands/promote.d.ts +3 -0
  61. package/dist/esm/commands/promote.js +86 -0
  62. package/dist/esm/commands/promote.js.map +1 -0
  63. package/dist/esm/commands/switch.d.ts +19 -0
  64. package/dist/esm/commands/switch.js +93 -0
  65. package/dist/esm/commands/switch.js.map +1 -0
  66. package/dist/esm/commands/trigger.d.ts +33 -0
  67. package/dist/esm/commands/trigger.js +88 -0
  68. package/dist/esm/commands/trigger.js.map +1 -0
  69. package/dist/esm/commands/update.d.ts +3 -2
  70. package/dist/esm/commands/update.js +23 -9
  71. package/dist/esm/commands/update.js.map +1 -1
  72. package/dist/esm/commands/whoami.d.ts +12 -1
  73. package/dist/esm/commands/whoami.js +36 -6
  74. package/dist/esm/commands/whoami.js.map +1 -1
  75. package/dist/esm/commands/workers/build.d.ts +4 -0
  76. package/dist/esm/commands/workers/build.js +345 -0
  77. package/dist/esm/commands/workers/build.js.map +1 -0
  78. package/dist/esm/commands/workers/create.d.ts +2 -0
  79. package/dist/esm/commands/workers/create.js +91 -0
  80. package/dist/esm/commands/workers/create.js.map +1 -0
  81. package/dist/esm/commands/workers/index.d.ts +2 -0
  82. package/dist/esm/commands/workers/index.js +13 -0
  83. package/dist/esm/commands/workers/index.js.map +1 -0
  84. package/dist/esm/commands/workers/list.d.ts +2 -0
  85. package/dist/esm/commands/workers/list.js +80 -0
  86. package/dist/esm/commands/workers/list.js.map +1 -0
  87. package/dist/esm/commands/workers/run.d.ts +2 -0
  88. package/dist/esm/commands/workers/run.js +105 -0
  89. package/dist/esm/commands/workers/run.js.map +1 -0
  90. package/dist/esm/config.d.ts +2 -1
  91. package/dist/esm/config.js +35 -8
  92. package/dist/esm/config.js.map +1 -1
  93. package/dist/esm/deploy/buildImage.d.ts +12 -11
  94. package/dist/esm/deploy/buildImage.js +360 -115
  95. package/dist/esm/deploy/buildImage.js.map +1 -1
  96. package/dist/esm/dev/backgroundWorker.d.ts +6 -245
  97. package/dist/esm/dev/backgroundWorker.js +11 -320
  98. package/dist/esm/dev/backgroundWorker.js.map +1 -1
  99. package/dist/esm/dev/devOutput.js +48 -9
  100. package/dist/esm/dev/devOutput.js.map +1 -1
  101. package/dist/esm/dev/devSession.d.ts +2 -1
  102. package/dist/esm/dev/devSession.js +68 -65
  103. package/dist/esm/dev/devSession.js.map +1 -1
  104. package/dist/esm/dev/devSupervisor.d.ts +12 -0
  105. package/dist/esm/dev/devSupervisor.js +568 -0
  106. package/dist/esm/dev/devSupervisor.js.map +1 -0
  107. package/dist/esm/dev/lock.d.ts +1 -0
  108. package/dist/esm/dev/lock.js +80 -0
  109. package/dist/esm/dev/lock.js.map +1 -0
  110. package/dist/esm/dev/mcpServer.d.ts +10 -0
  111. package/dist/esm/dev/mcpServer.js +201 -0
  112. package/dist/esm/dev/mcpServer.js.map +1 -0
  113. package/dist/esm/dev/taskRunProcessPool.d.ts +39 -0
  114. package/dist/esm/dev/taskRunProcessPool.js +220 -0
  115. package/dist/esm/dev/taskRunProcessPool.js.map +1 -0
  116. package/dist/esm/dev/workerRuntime.d.ts +2 -2
  117. package/dist/esm/dev/workerRuntime.js +1 -265
  118. package/dist/esm/dev/workerRuntime.js.map +1 -1
  119. package/dist/esm/entryPoints/dev-index-worker.js +45 -8
  120. package/dist/esm/entryPoints/dev-index-worker.js.map +1 -1
  121. package/dist/esm/entryPoints/dev-run-controller.d.ts +58 -0
  122. package/dist/esm/entryPoints/dev-run-controller.js +652 -0
  123. package/dist/esm/entryPoints/dev-run-controller.js.map +1 -0
  124. package/dist/esm/entryPoints/dev-run-worker.js +394 -199
  125. package/dist/esm/entryPoints/dev-run-worker.js.map +1 -1
  126. package/dist/esm/entryPoints/managed/controller.d.ts +63 -0
  127. package/dist/esm/entryPoints/managed/controller.js +502 -0
  128. package/dist/esm/entryPoints/managed/controller.js.map +1 -0
  129. package/dist/esm/entryPoints/managed/env.d.ts +170 -0
  130. package/dist/esm/entryPoints/managed/env.js +199 -0
  131. package/dist/esm/entryPoints/managed/env.js.map +1 -0
  132. package/dist/esm/entryPoints/managed/execution.d.ts +143 -0
  133. package/dist/esm/entryPoints/managed/execution.js +901 -0
  134. package/dist/esm/entryPoints/managed/execution.js.map +1 -0
  135. package/dist/esm/entryPoints/managed/logger.d.ts +30 -0
  136. package/dist/esm/entryPoints/managed/logger.js +47 -0
  137. package/dist/esm/entryPoints/managed/logger.js.map +1 -0
  138. package/dist/esm/entryPoints/managed/notifier.d.ts +30 -0
  139. package/dist/esm/entryPoints/managed/notifier.js +63 -0
  140. package/dist/esm/entryPoints/managed/notifier.js.map +1 -0
  141. package/dist/esm/entryPoints/managed/overrides.d.ts +18 -0
  142. package/dist/esm/entryPoints/managed/overrides.js +19 -0
  143. package/dist/esm/entryPoints/managed/overrides.js.map +1 -0
  144. package/dist/esm/entryPoints/managed/poller.d.ts +31 -0
  145. package/dist/esm/entryPoints/managed/poller.js +89 -0
  146. package/dist/esm/entryPoints/managed/poller.js.map +1 -0
  147. package/dist/esm/entryPoints/managed/snapshot.d.ts +54 -0
  148. package/dist/esm/entryPoints/managed/snapshot.js +293 -0
  149. package/dist/esm/entryPoints/managed/snapshot.js.map +1 -0
  150. package/dist/esm/entryPoints/managed/taskRunProcessProvider.d.ts +62 -0
  151. package/dist/esm/entryPoints/managed/taskRunProcessProvider.js +252 -0
  152. package/dist/esm/entryPoints/managed/taskRunProcessProvider.js.map +1 -0
  153. package/dist/esm/entryPoints/{deploy-index-controller.js → managed-index-controller.js} +27 -3
  154. package/dist/esm/entryPoints/managed-index-controller.js.map +1 -0
  155. package/dist/esm/entryPoints/{deploy-index-worker.js → managed-index-worker.js} +50 -21
  156. package/dist/esm/entryPoints/managed-index-worker.js.map +1 -0
  157. package/dist/esm/entryPoints/managed-run-controller.js +13 -0
  158. package/dist/esm/entryPoints/managed-run-controller.js.map +1 -0
  159. package/dist/esm/entryPoints/managed-run-worker.js +512 -0
  160. package/dist/esm/entryPoints/managed-run-worker.js.map +1 -0
  161. package/dist/esm/executions/taskRunProcess.d.ts +28 -82
  162. package/dist/esm/executions/taskRunProcess.js +130 -74
  163. package/dist/esm/executions/taskRunProcess.js.map +1 -1
  164. package/dist/esm/indexing/indexWorkerManifest.d.ts +21 -5
  165. package/dist/esm/indexing/indexWorkerManifest.js +4 -4
  166. package/dist/esm/indexing/indexWorkerManifest.js.map +1 -1
  167. package/dist/esm/indexing/registerResources.d.ts +5 -0
  168. package/dist/esm/indexing/registerResources.js +44 -0
  169. package/dist/esm/indexing/registerResources.js.map +1 -0
  170. package/dist/esm/mcp/auth.d.ts +12 -0
  171. package/dist/esm/mcp/auth.js +152 -0
  172. package/dist/esm/mcp/auth.js.map +1 -0
  173. package/dist/esm/mcp/capabilities.d.ts +4 -0
  174. package/dist/esm/mcp/capabilities.js +22 -0
  175. package/dist/esm/mcp/capabilities.js.map +1 -0
  176. package/dist/esm/mcp/config.d.ts +82 -0
  177. package/dist/esm/mcp/config.js +87 -0
  178. package/dist/esm/mcp/config.js.map +1 -0
  179. package/dist/esm/mcp/context.d.ts +45 -0
  180. package/dist/esm/mcp/context.js +129 -0
  181. package/dist/esm/mcp/context.js.map +1 -0
  182. package/dist/esm/mcp/formatters.d.ts +7 -0
  183. package/dist/esm/mcp/formatters.js +330 -0
  184. package/dist/esm/mcp/formatters.js.map +1 -0
  185. package/dist/esm/mcp/logger.d.ts +11 -0
  186. package/dist/esm/mcp/logger.js +34 -0
  187. package/dist/esm/mcp/logger.js.map +1 -0
  188. package/dist/esm/mcp/mintlifyClient.d.ts +1 -0
  189. package/dist/esm/mcp/mintlifyClient.js +65 -0
  190. package/dist/esm/mcp/mintlifyClient.js.map +1 -0
  191. package/dist/esm/mcp/schemas.d.ts +324 -0
  192. package/dist/esm/mcp/schemas.js +144 -0
  193. package/dist/esm/mcp/schemas.js.map +1 -0
  194. package/dist/esm/mcp/tools/deploys.d.ts +174 -0
  195. package/dist/esm/mcp/tools/deploys.js +161 -0
  196. package/dist/esm/mcp/tools/deploys.js.map +1 -0
  197. package/dist/esm/mcp/tools/docs.d.ts +77 -0
  198. package/dist/esm/mcp/tools/docs.js +18 -0
  199. package/dist/esm/mcp/tools/docs.js.map +1 -0
  200. package/dist/esm/mcp/tools/orgs.d.ts +172 -0
  201. package/dist/esm/mcp/tools/orgs.js +172 -0
  202. package/dist/esm/mcp/tools/orgs.js.map +1 -0
  203. package/dist/esm/mcp/tools/previewBranches.d.ts +78 -0
  204. package/dist/esm/mcp/tools/previewBranches.js +28 -0
  205. package/dist/esm/mcp/tools/previewBranches.js.map +1 -0
  206. package/dist/esm/mcp/tools/runs.d.ts +335 -0
  207. package/dist/esm/mcp/tools/runs.js +160 -0
  208. package/dist/esm/mcp/tools/runs.js.map +1 -0
  209. package/dist/esm/mcp/tools/tasks.d.ts +200 -0
  210. package/dist/esm/mcp/tools/tasks.js +117 -0
  211. package/dist/esm/mcp/tools/tasks.js.map +1 -0
  212. package/dist/esm/mcp/tools.d.ts +2 -0
  213. package/dist/esm/mcp/tools.js +40 -0
  214. package/dist/esm/mcp/tools.js.map +1 -0
  215. package/dist/esm/mcp/types.d.ts +6 -0
  216. package/dist/esm/mcp/types.js +2 -0
  217. package/dist/esm/mcp/types.js.map +1 -0
  218. package/dist/esm/mcp/utils.d.ts +89 -0
  219. package/dist/esm/mcp/utils.js +95 -0
  220. package/dist/esm/mcp/utils.js.map +1 -0
  221. package/dist/esm/rules/install.d.ts +1 -0
  222. package/dist/esm/rules/install.js +2 -0
  223. package/dist/esm/rules/install.js.map +1 -0
  224. package/dist/esm/rules/manifest.d.ts +145 -0
  225. package/dist/esm/rules/manifest.js +110 -0
  226. package/dist/esm/rules/manifest.js.map +1 -0
  227. package/dist/esm/rules/types.d.ts +3 -0
  228. package/dist/esm/rules/types.js +3 -0
  229. package/dist/esm/rules/types.js.map +1 -0
  230. package/dist/esm/utilities/accessTokens.d.ts +12 -0
  231. package/dist/esm/utilities/accessTokens.js +30 -0
  232. package/dist/esm/utilities/accessTokens.js.map +1 -0
  233. package/dist/esm/utilities/analyze.d.ts +13 -0
  234. package/dist/esm/utilities/analyze.js +463 -0
  235. package/dist/esm/utilities/analyze.js.map +1 -0
  236. package/dist/esm/utilities/cliOutput.d.ts +6 -1
  237. package/dist/esm/utilities/cliOutput.js +11 -2
  238. package/dist/esm/utilities/cliOutput.js.map +1 -1
  239. package/dist/esm/utilities/configFiles.d.ts +65 -15
  240. package/dist/esm/utilities/configFiles.js +124 -26
  241. package/dist/esm/utilities/configFiles.js.map +1 -1
  242. package/dist/esm/utilities/eventBus.d.ts +7 -3
  243. package/dist/esm/utilities/eventBus.js.map +1 -1
  244. package/dist/esm/utilities/fileSystem.d.ts +7 -1
  245. package/dist/esm/utilities/fileSystem.js +42 -4
  246. package/dist/esm/utilities/fileSystem.js.map +1 -1
  247. package/dist/esm/utilities/gitMeta.d.ts +2 -0
  248. package/dist/esm/utilities/gitMeta.js +220 -0
  249. package/dist/esm/utilities/gitMeta.js.map +1 -0
  250. package/dist/esm/utilities/githubActions.d.ts +4 -0
  251. package/dist/esm/utilities/githubActions.js +18 -0
  252. package/dist/esm/utilities/githubActions.js.map +1 -0
  253. package/dist/esm/utilities/initialBanner.js +18 -6
  254. package/dist/esm/utilities/initialBanner.js.map +1 -1
  255. package/dist/esm/utilities/localEnvVars.d.ts +3 -0
  256. package/dist/esm/utilities/localEnvVars.js +19 -0
  257. package/dist/esm/utilities/localEnvVars.js.map +1 -0
  258. package/dist/esm/utilities/sanitizeEnvVars.d.ts +16 -3
  259. package/dist/esm/utilities/sanitizeEnvVars.js +15 -0
  260. package/dist/esm/utilities/sanitizeEnvVars.js.map +1 -1
  261. package/dist/esm/utilities/session.d.ts +14 -0
  262. package/dist/esm/utilities/session.js +44 -47
  263. package/dist/esm/utilities/session.js.map +1 -1
  264. package/dist/esm/utilities/supportsHyperlinks.d.ts +15 -0
  265. package/dist/esm/utilities/supportsHyperlinks.js +122 -0
  266. package/dist/esm/utilities/supportsHyperlinks.js.map +1 -0
  267. package/dist/esm/utilities/tempDirectories.d.ts +1 -0
  268. package/dist/esm/utilities/tempDirectories.js +19 -2
  269. package/dist/esm/utilities/tempDirectories.js.map +1 -1
  270. package/dist/esm/utilities/terminalLink.d.ts +56 -0
  271. package/dist/esm/utilities/terminalLink.js +76 -0
  272. package/dist/esm/utilities/terminalLink.js.map +1 -0
  273. package/dist/esm/utilities/windows.js +65 -1
  274. package/dist/esm/utilities/windows.js.map +1 -1
  275. package/dist/esm/version.js +1 -1
  276. package/package.json +44 -25
  277. package/dist/esm/entryPoints/deploy-index-controller.js.map +0 -1
  278. package/dist/esm/entryPoints/deploy-index-worker.js.map +0 -1
  279. package/dist/esm/entryPoints/deploy-run-controller.js +0 -1099
  280. package/dist/esm/entryPoints/deploy-run-controller.js.map +0 -1
  281. package/dist/esm/entryPoints/deploy-run-worker.js +0 -366
  282. package/dist/esm/entryPoints/deploy-run-worker.js.map +0 -1
  283. package/dist/esm/indexing/registerTasks.d.ts +0 -2
  284. package/dist/esm/indexing/registerTasks.js +0 -62
  285. package/dist/esm/indexing/registerTasks.js.map +0 -1
  286. package/dist/esm/telemetry/tracing.d.ts +0 -3
  287. package/dist/esm/telemetry/tracing.js +0 -58
  288. package/dist/esm/telemetry/tracing.js.map +0 -1
  289. /package/dist/esm/entryPoints/{deploy-index-controller.d.ts → managed-index-controller.d.ts} +0 -0
  290. /package/dist/esm/entryPoints/{deploy-index-worker.d.ts → managed-index-worker.d.ts} +0 -0
  291. /package/dist/esm/entryPoints/{deploy-run-controller.d.ts → managed-run-controller.d.ts} +0 -0
  292. /package/dist/esm/entryPoints/{deploy-run-worker.d.ts → managed-run-worker.d.ts} +0 -0
@@ -0,0 +1,293 @@
1
+ import { tryCatch } from "@trigger.dev/core/utils";
2
+ import { assertExhaustive } from "@trigger.dev/core/utils";
3
+ export class SnapshotManager {
4
+ runFriendlyId;
5
+ runnerId;
6
+ logger;
7
+ metadataClient;
8
+ state;
9
+ isSuspendable = false;
10
+ onSnapshotChange;
11
+ onSuspendable;
12
+ changeQueue = [];
13
+ isProcessingQueue = false;
14
+ constructor(opts) {
15
+ this.runFriendlyId = opts.runFriendlyId;
16
+ this.runnerId = opts.runnerId;
17
+ this.logger = opts.logger;
18
+ this.metadataClient = opts.metadataClient;
19
+ this.state = {
20
+ id: opts.initialSnapshotId,
21
+ status: opts.initialStatus,
22
+ };
23
+ this.onSnapshotChange = opts.onSnapshotChange;
24
+ this.onSuspendable = opts.onSuspendable;
25
+ }
26
+ get snapshotId() {
27
+ return this.state.id;
28
+ }
29
+ get status() {
30
+ return this.state.status;
31
+ }
32
+ get suspendable() {
33
+ return this.isSuspendable;
34
+ }
35
+ async setSuspendable(suspendable) {
36
+ if (this.isSuspendable === suspendable) {
37
+ this.sendDebugLog(`skipping suspendable update, already ${suspendable}`);
38
+ return;
39
+ }
40
+ this.sendDebugLog(`setting suspendable to ${suspendable}`);
41
+ return this.enqueueSnapshotChange({
42
+ id: crypto.randomUUID(),
43
+ type: "suspendable",
44
+ value: suspendable,
45
+ });
46
+ }
47
+ /**
48
+ * Update the snapshot ID and status without invoking any handlers
49
+ *
50
+ * @param snapshotId - The ID of the snapshot to update to
51
+ * @param status - The status to update to
52
+ */
53
+ updateSnapshot(snapshotId, status) {
54
+ // Check if this is an old snapshot
55
+ if (snapshotId < this.state.id) {
56
+ this.sendDebugLog("skipping update for old snapshot", {
57
+ incomingId: snapshotId,
58
+ currentId: this.state.id,
59
+ });
60
+ return;
61
+ }
62
+ this.state = { id: snapshotId, status };
63
+ }
64
+ async handleSnapshotChanges(snapshots) {
65
+ if (!this.statusCheck(snapshots)) {
66
+ return;
67
+ }
68
+ return this.enqueueSnapshotChange({
69
+ id: crypto.randomUUID(),
70
+ type: "snapshot",
71
+ snapshots,
72
+ });
73
+ }
74
+ get queueLength() {
75
+ return this.changeQueue.length;
76
+ }
77
+ statusCheck(snapshots) {
78
+ const latestSnapshot = snapshots[snapshots.length - 1];
79
+ if (!latestSnapshot) {
80
+ this.sendDebugLog("skipping status check for empty snapshots", {
81
+ snapshots,
82
+ });
83
+ return false;
84
+ }
85
+ const { run, snapshot } = latestSnapshot;
86
+ const statusCheckData = {
87
+ incomingId: snapshot.friendlyId,
88
+ incomingStatus: snapshot.executionStatus,
89
+ currentId: this.state.id,
90
+ currentStatus: this.state.status,
91
+ };
92
+ // Ensure run ID matches
93
+ if (run.friendlyId !== this.runFriendlyId) {
94
+ this.sendDebugLog("skipping update for mismatched run ID", {
95
+ statusCheckData,
96
+ });
97
+ return false;
98
+ }
99
+ // Skip if this is an old snapshot
100
+ if (snapshot.friendlyId < this.state.id) {
101
+ this.sendDebugLog("skipping update for old snapshot", {
102
+ statusCheckData,
103
+ });
104
+ return false;
105
+ }
106
+ // Skip if this is the current snapshot
107
+ if (snapshot.friendlyId === this.state.id) {
108
+ // DO NOT REMOVE (very noisy, but helpful for debugging)
109
+ // this.sendDebugLog("skipping update for duplicate snapshot", {
110
+ // statusCheckData,
111
+ // });
112
+ return false;
113
+ }
114
+ return true;
115
+ }
116
+ async enqueueSnapshotChange(change) {
117
+ return new Promise((resolve, reject) => {
118
+ // For suspendable changes, resolve and remove any pending suspendable changes since only the last one matters
119
+ if (change.type === "suspendable") {
120
+ const pendingSuspendable = this.changeQueue.filter((item) => item.change.type === "suspendable");
121
+ // Resolve any pending suspendable changes - they're effectively done since we're superseding them
122
+ for (const item of pendingSuspendable) {
123
+ item.resolve();
124
+ }
125
+ // Remove the exact items we just resolved
126
+ const resolvedIds = new Set(pendingSuspendable.map((item) => item.change.id));
127
+ this.changeQueue = this.changeQueue.filter((item) => !resolvedIds.has(item.change.id));
128
+ }
129
+ this.changeQueue.push({ change, resolve, reject });
130
+ // Sort queue:
131
+ // 1. Suspendable changes always go to the back
132
+ // 2. Snapshot changes are ordered by creation time, with the latest snapshot last
133
+ this.changeQueue.sort((a, b) => {
134
+ if (a.change.type === "suspendable" && b.change.type === "snapshot") {
135
+ return 1; // a goes after b
136
+ }
137
+ if (a.change.type === "snapshot" && b.change.type === "suspendable") {
138
+ return -1; // a goes before b
139
+ }
140
+ if (a.change.type === "snapshot" && b.change.type === "snapshot") {
141
+ const snapshotA = a.change.snapshots[a.change.snapshots.length - 1];
142
+ const snapshotB = b.change.snapshots[b.change.snapshots.length - 1];
143
+ if (!snapshotA || !snapshotB) {
144
+ return 0;
145
+ }
146
+ // Sort snapshot changes by creation time, old -> new
147
+ return snapshotA.snapshot.createdAt.getTime() - snapshotB.snapshot.createdAt.getTime();
148
+ }
149
+ return 0; // both suspendable, maintain insertion order
150
+ });
151
+ // Start processing if not already running
152
+ this.processQueue().catch((error) => {
153
+ this.sendDebugLog("error processing queue", { error: error.message });
154
+ });
155
+ });
156
+ }
157
+ async processQueue() {
158
+ if (this.isProcessingQueue) {
159
+ return;
160
+ }
161
+ this.isProcessingQueue = true;
162
+ try {
163
+ while (this.queueLength > 0) {
164
+ // Remove first item from queue
165
+ const item = this.changeQueue.shift();
166
+ if (!item) {
167
+ break;
168
+ }
169
+ const [error] = await tryCatch(this.applyChange(item.change));
170
+ // Resolve/reject promise
171
+ if (error) {
172
+ item.reject(error);
173
+ }
174
+ else {
175
+ item.resolve();
176
+ }
177
+ }
178
+ }
179
+ finally {
180
+ const hasMoreItems = this.queueLength > 0;
181
+ this.isProcessingQueue = false;
182
+ if (hasMoreItems) {
183
+ this.processQueue().catch((error) => {
184
+ this.sendDebugLog("error processing queue (finally)", { error: error.message });
185
+ });
186
+ }
187
+ }
188
+ }
189
+ async applyChange(change) {
190
+ switch (change.type) {
191
+ case "snapshot": {
192
+ const { snapshots } = change;
193
+ // Double check we should process this snapshot
194
+ if (!this.statusCheck(snapshots)) {
195
+ return;
196
+ }
197
+ const latestSnapshot = change.snapshots[change.snapshots.length - 1];
198
+ if (!latestSnapshot) {
199
+ return;
200
+ }
201
+ // These are the snapshots between the current and the latest one
202
+ const previousSnapshots = snapshots.slice(0, -1);
203
+ // Check if any previous snapshot is QUEUED or SUSPENDED
204
+ const deprecatedStatus = ["QUEUED", "SUSPENDED"];
205
+ const deprecatedSnapshots = previousSnapshots.filter((snap) => deprecatedStatus.includes(snap.snapshot.executionStatus));
206
+ let deprecated = false;
207
+ if (deprecatedSnapshots.length > 0) {
208
+ const hasBeenRestored = await this.hasBeenRestored();
209
+ if (hasBeenRestored) {
210
+ // It's normal for a restored run to have deprecation markers, e.g. it will have been SUSPENDED
211
+ deprecated = false;
212
+ }
213
+ else {
214
+ deprecated = true;
215
+ }
216
+ }
217
+ const { snapshot } = latestSnapshot;
218
+ const oldState = { ...this.state };
219
+ this.updateSnapshot(snapshot.friendlyId, snapshot.executionStatus);
220
+ this.sendDebugLog(`status changed to ${snapshot.executionStatus}`, {
221
+ oldId: oldState.id,
222
+ newId: snapshot.friendlyId,
223
+ oldStatus: oldState.status,
224
+ newStatus: snapshot.executionStatus,
225
+ deprecated,
226
+ });
227
+ // Execute handler
228
+ await this.onSnapshotChange(latestSnapshot, deprecated);
229
+ // Check suspendable state after snapshot change
230
+ await this.checkSuspendableState();
231
+ break;
232
+ }
233
+ case "suspendable": {
234
+ this.isSuspendable = change.value;
235
+ // Check suspendable state after suspendable change
236
+ await this.checkSuspendableState();
237
+ break;
238
+ }
239
+ default: {
240
+ assertExhaustive(change);
241
+ }
242
+ }
243
+ }
244
+ async hasBeenRestored() {
245
+ if (!this.metadataClient) {
246
+ return false;
247
+ }
248
+ const [error, overrides] = await this.metadataClient.getEnvOverrides();
249
+ if (error) {
250
+ return false;
251
+ }
252
+ if (!overrides.TRIGGER_RUNNER_ID) {
253
+ return false;
254
+ }
255
+ if (overrides.TRIGGER_RUNNER_ID === this.runnerId) {
256
+ return false;
257
+ }
258
+ this.runnerId = overrides.TRIGGER_RUNNER_ID;
259
+ return true;
260
+ }
261
+ async checkSuspendableState() {
262
+ if (this.isSuspendable &&
263
+ (this.state.status === "EXECUTING_WITH_WAITPOINTS" ||
264
+ this.state.status === "QUEUED_EXECUTING")) {
265
+ // DO NOT REMOVE (very noisy, but helpful for debugging)
266
+ // this.sendDebugLog("run is now suspendable, executing handler");
267
+ await this.onSuspendable(this.state);
268
+ }
269
+ }
270
+ stop() {
271
+ this.sendDebugLog("stop");
272
+ // Clear any pending changes
273
+ for (const item of this.changeQueue) {
274
+ item.reject(new Error("SnapshotManager stopped"));
275
+ }
276
+ this.changeQueue = [];
277
+ }
278
+ sendDebugLog(message, properties) {
279
+ this.logger.sendDebugLog({
280
+ runId: this.runFriendlyId,
281
+ message: `[snapshot] ${message}`,
282
+ properties: {
283
+ ...properties,
284
+ snapshotId: this.state.id,
285
+ status: this.state.status,
286
+ suspendable: this.isSuspendable,
287
+ queueLength: this.queueLength,
288
+ isProcessingQueue: this.isProcessingQueue,
289
+ },
290
+ });
291
+ }
292
+ }
293
+ //# sourceMappingURL=snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../../../src/entryPoints/managed/snapshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import { WorkerManifest } from "@trigger.dev/core/v3";
2
+ import { TaskRunProcess } from "../../executions/taskRunProcess.js";
3
+ import { RunnerEnv } from "./env.js";
4
+ import { RunLogger } from "./logger.js";
5
+ export interface TaskRunProcessProviderOptions {
6
+ workerManifest: WorkerManifest;
7
+ env: RunnerEnv;
8
+ logger: RunLogger;
9
+ processKeepAliveEnabled: boolean;
10
+ processKeepAliveMaxExecutionCount: number;
11
+ }
12
+ export interface GetProcessOptions {
13
+ taskRunEnv: Record<string, string>;
14
+ isWarmStart?: boolean;
15
+ }
16
+ export declare class TaskRunProcessProvider {
17
+ private readonly workerManifest;
18
+ private readonly env;
19
+ private readonly logger;
20
+ private readonly processKeepAliveEnabled;
21
+ private readonly processKeepAliveMaxExecutionCount;
22
+ private persistentProcess;
23
+ private executionCount;
24
+ constructor(opts: TaskRunProcessProviderOptions);
25
+ get hasPersistentProcess(): boolean;
26
+ handleImmediateRetry(): Promise<void>;
27
+ /**
28
+ * Gets a TaskRunProcess, either by reusing an existing one or creating a new one
29
+ */
30
+ getProcess(opts: GetProcessOptions): Promise<TaskRunProcess>;
31
+ /**
32
+ * Returns a process after execution, handling keep-alive logic and cleanup
33
+ */
34
+ returnProcess(process: TaskRunProcess): Promise<void>;
35
+ suspendProcess(flush: boolean, process?: TaskRunProcess): Promise<void>;
36
+ /**
37
+ * Handles process abort/kill scenarios
38
+ */
39
+ handleProcessAbort(process: TaskRunProcess): Promise<void>;
40
+ killProcess(process: TaskRunProcess): Promise<void>;
41
+ /**
42
+ * Forces cleanup of any persistent process
43
+ */
44
+ cleanup(): Promise<void>;
45
+ /**
46
+ * Gets metrics about the provider state
47
+ */
48
+ get metrics(): {
49
+ processKeepAlive: {
50
+ enabled: boolean;
51
+ executionCount: number;
52
+ maxExecutionCount: number;
53
+ hasPersistentProcess: boolean;
54
+ };
55
+ };
56
+ private createTaskRunProcess;
57
+ private buildProcessEnvironment;
58
+ private shouldReusePersistentProcess;
59
+ private shouldKeepProcessAlive;
60
+ private cleanupProcess;
61
+ private sendDebugLog;
62
+ }
@@ -0,0 +1,252 @@
1
+ import { TaskRunProcess } from "../../executions/taskRunProcess.js";
2
+ export class TaskRunProcessProvider {
3
+ workerManifest;
4
+ env;
5
+ logger;
6
+ processKeepAliveEnabled;
7
+ processKeepAliveMaxExecutionCount;
8
+ // Process keep-alive state
9
+ persistentProcess = null;
10
+ executionCount = 0;
11
+ constructor(opts) {
12
+ this.workerManifest = opts.workerManifest;
13
+ this.env = opts.env;
14
+ this.logger = opts.logger;
15
+ this.processKeepAliveEnabled = opts.processKeepAliveEnabled;
16
+ this.processKeepAliveMaxExecutionCount = opts.processKeepAliveMaxExecutionCount;
17
+ }
18
+ get hasPersistentProcess() {
19
+ return !!this.persistentProcess;
20
+ }
21
+ async handleImmediateRetry() {
22
+ if (!this.processKeepAliveEnabled) {
23
+ // For immediate retries, we need to ensure we have a clean process
24
+ if (this.persistentProcess) {
25
+ // If the process is not prepared for the next attempt, we need to get a fresh one
26
+ if (!this.persistentProcess.isPreparedForNextAttempt) {
27
+ this.sendDebugLog("existing task run process not prepared for retry, will get fresh process");
28
+ await this.persistentProcess.kill("SIGKILL");
29
+ this.persistentProcess = null;
30
+ }
31
+ }
32
+ }
33
+ }
34
+ /**
35
+ * Gets a TaskRunProcess, either by reusing an existing one or creating a new one
36
+ */
37
+ async getProcess(opts) {
38
+ this.sendDebugLog("Getting TaskRunProcess", {
39
+ processKeepAliveEnabled: this.processKeepAliveEnabled,
40
+ hasPersistentProcess: !!this.persistentProcess,
41
+ executionCount: this.executionCount,
42
+ maxExecutionCount: this.processKeepAliveMaxExecutionCount,
43
+ isWarmStart: opts.isWarmStart,
44
+ });
45
+ // If process keep-alive is disabled, always create a new process
46
+ if (!this.processKeepAliveEnabled) {
47
+ this.sendDebugLog("Creating new TaskRunProcess (keep-alive disabled)");
48
+ return this.createTaskRunProcess(opts);
49
+ }
50
+ // If process keep-alive is enabled and we have a healthy persistent process, reuse it
51
+ if (this.shouldReusePersistentProcess()) {
52
+ this.sendDebugLog("Reusing persistent TaskRunProcess", {
53
+ executionCount: this.executionCount,
54
+ });
55
+ return this.persistentProcess;
56
+ }
57
+ // Create new process (keep-alive enabled but no reusable process available)
58
+ this.sendDebugLog("Creating new TaskRunProcess", {
59
+ hadPersistentProcess: !!this.persistentProcess,
60
+ reason: this.processKeepAliveEnabled
61
+ ? "execution limit reached or unhealthy"
62
+ : "keep-alive disabled",
63
+ });
64
+ const existingPersistentProcess = this.persistentProcess;
65
+ // Clean up old persistent process if it exists
66
+ if (existingPersistentProcess) {
67
+ await this.cleanupProcess(existingPersistentProcess);
68
+ }
69
+ this.persistentProcess = this.createTaskRunProcess(opts);
70
+ this.executionCount = 0;
71
+ return this.persistentProcess;
72
+ }
73
+ /**
74
+ * Returns a process after execution, handling keep-alive logic and cleanup
75
+ */
76
+ async returnProcess(process) {
77
+ this.sendDebugLog("Returning TaskRunProcess", {
78
+ processKeepAliveEnabled: this.processKeepAliveEnabled,
79
+ executionCount: this.executionCount,
80
+ maxExecutionCount: this.processKeepAliveMaxExecutionCount,
81
+ });
82
+ if (!this.processKeepAliveEnabled) {
83
+ // Keep-alive disabled - immediately cleanup the process
84
+ this.sendDebugLog("Keep-alive disabled, cleaning up process immediately");
85
+ await process.cleanup(true);
86
+ return;
87
+ }
88
+ // Keep-alive enabled - check if we should keep the process alive
89
+ if (this.shouldKeepProcessAlive(process)) {
90
+ this.sendDebugLog("Keeping TaskRunProcess alive for next run", {
91
+ executionCount: this.executionCount,
92
+ maxExecutionCount: this.processKeepAliveMaxExecutionCount,
93
+ });
94
+ // Call cleanup(false) to prepare for next run but keep process alive
95
+ await process.cleanup(false);
96
+ this.persistentProcess = process;
97
+ this.executionCount++;
98
+ }
99
+ else {
100
+ this.sendDebugLog("Not keeping TaskRunProcess alive, cleaning up", {
101
+ executionCount: this.executionCount,
102
+ maxExecutionCount: this.processKeepAliveMaxExecutionCount,
103
+ isHealthy: process.isHealthy,
104
+ });
105
+ // Cleanup the process completely
106
+ await process.cleanup(true);
107
+ }
108
+ }
109
+ async suspendProcess(flush, process) {
110
+ if (this.persistentProcess) {
111
+ if (process) {
112
+ if (this.persistentProcess.pid === process.pid) {
113
+ this.sendDebugLog("Suspending matching persistent TaskRunProcess (process provided)", {
114
+ pid: process.pid,
115
+ flush,
116
+ });
117
+ this.persistentProcess = null;
118
+ this.executionCount = 0;
119
+ await process.suspend({ flush });
120
+ }
121
+ else {
122
+ this.sendDebugLog("Suspending TaskRunProcess (does not match persistent process)", {
123
+ pid: process.pid,
124
+ flush,
125
+ });
126
+ await process.suspend({ flush });
127
+ }
128
+ }
129
+ else {
130
+ this.sendDebugLog("Suspending persistent TaskRunProcess (no process provided)", {
131
+ pid: this.persistentProcess.pid,
132
+ flush,
133
+ });
134
+ this.persistentProcess = null;
135
+ this.executionCount = 0;
136
+ }
137
+ }
138
+ else {
139
+ if (process) {
140
+ this.sendDebugLog("Suspending non-persistent TaskRunProcess (process provided)", {
141
+ pid: process.pid,
142
+ flush,
143
+ });
144
+ await process.suspend({ flush });
145
+ }
146
+ else {
147
+ this.sendDebugLog("Suspending non-persistent TaskRunProcess (no process provided)", {
148
+ flush,
149
+ });
150
+ }
151
+ }
152
+ }
153
+ /**
154
+ * Handles process abort/kill scenarios
155
+ */
156
+ async handleProcessAbort(process) {
157
+ this.sendDebugLog("Handling process abort");
158
+ // If this was our persistent process, clear it
159
+ if (this.persistentProcess?.pid === process.pid) {
160
+ this.persistentProcess = null;
161
+ this.executionCount = 0;
162
+ }
163
+ // Kill the process
164
+ await process.cleanup(true);
165
+ }
166
+ async killProcess(process) {
167
+ this.sendDebugLog("Killing process");
168
+ // If this was our persistent process, clear it
169
+ if (this.persistentProcess?.pid === process.pid) {
170
+ this.persistentProcess = null;
171
+ this.executionCount = 0;
172
+ }
173
+ // Kill the process
174
+ await this.cleanupProcess(process);
175
+ }
176
+ /**
177
+ * Forces cleanup of any persistent process
178
+ */
179
+ async cleanup() {
180
+ if (this.persistentProcess) {
181
+ this.sendDebugLog("cleanup() called");
182
+ await this.cleanupProcess(this.persistentProcess);
183
+ }
184
+ }
185
+ /**
186
+ * Gets metrics about the provider state
187
+ */
188
+ get metrics() {
189
+ return {
190
+ processKeepAlive: {
191
+ enabled: this.processKeepAliveEnabled,
192
+ executionCount: this.executionCount,
193
+ maxExecutionCount: this.processKeepAliveMaxExecutionCount,
194
+ hasPersistentProcess: !!this.persistentProcess,
195
+ },
196
+ };
197
+ }
198
+ createTaskRunProcess({ taskRunEnv, isWarmStart }) {
199
+ const processEnv = this.buildProcessEnvironment(taskRunEnv);
200
+ const taskRunProcess = new TaskRunProcess({
201
+ workerManifest: this.workerManifest,
202
+ env: processEnv,
203
+ serverWorker: {
204
+ id: "managed",
205
+ contentHash: this.env.TRIGGER_CONTENT_HASH,
206
+ version: this.env.TRIGGER_DEPLOYMENT_VERSION,
207
+ engine: "V2",
208
+ },
209
+ machineResources: {
210
+ cpu: Number(this.env.TRIGGER_MACHINE_CPU),
211
+ memory: Number(this.env.TRIGGER_MACHINE_MEMORY),
212
+ },
213
+ isWarmStart,
214
+ }).initialize();
215
+ return taskRunProcess;
216
+ }
217
+ buildProcessEnvironment(taskRunEnv) {
218
+ return {
219
+ ...taskRunEnv,
220
+ ...this.env.gatherProcessEnv(),
221
+ HEARTBEAT_INTERVAL_MS: String(this.env.TRIGGER_HEARTBEAT_INTERVAL_SECONDS * 1000),
222
+ };
223
+ }
224
+ shouldReusePersistentProcess() {
225
+ this.sendDebugLog("Checking if persistent process should be reused", {
226
+ executionCount: this.executionCount,
227
+ maxExecutionCount: this.processKeepAliveMaxExecutionCount,
228
+ pid: this.persistentProcess?.pid ?? "unknown",
229
+ isBeingKilled: this.persistentProcess?.isBeingKilled ?? "unknown",
230
+ });
231
+ return (!!this.persistentProcess &&
232
+ this.executionCount < this.processKeepAliveMaxExecutionCount &&
233
+ this.persistentProcess.isHealthy);
234
+ }
235
+ shouldKeepProcessAlive(process) {
236
+ return this.executionCount < this.processKeepAliveMaxExecutionCount && process.isHealthy;
237
+ }
238
+ async cleanupProcess(taskRunProcess) {
239
+ if (taskRunProcess && taskRunProcess.pid !== undefined) {
240
+ this.sendDebugLog("Cleaning up TaskRunProcess", { pid: taskRunProcess.pid });
241
+ await taskRunProcess.kill("SIGKILL").catch(() => { });
242
+ }
243
+ }
244
+ sendDebugLog(message, properties) {
245
+ this.logger.sendDebugLog({
246
+ runId: undefined, // Provider doesn't have access to current run ID
247
+ message: `[taskRunProcessProvider] ${message}`,
248
+ properties,
249
+ });
250
+ }
251
+ }
252
+ //# sourceMappingURL=taskRunProcessProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taskRunProcessProvider.js","sourceRoot":"","sources":["../../../../src/entryPoints/managed/taskRunProcessProvider.ts"],"names":[],"mappings":"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"}