trigger.dev 0.0.0-v3-prerelease-20250108141813 → 0.0.0-v4-prerelease-20250916125920

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 +482 -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 +141 -0
  133. package/dist/esm/entryPoints/managed/execution.js +869 -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 +51 -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
@@ -1,63 +1,79 @@
1
- import { clock, logger, runtime, taskCatalog, TaskRunErrorCodes, WorkerToExecutorMessageCatalog, WorkerManifest, ExecutorToWorkerMessageCatalog, timeout, runMetadata, waitUntil, apiClientManager, } from "@trigger.dev/core/v3";
1
+ import { apiClientManager, attemptKey, clock, ExecutorToWorkerMessageCatalog, lifecycleHooks, localsAPI, logger, OTEL_LOG_ATTRIBUTE_COUNT_LIMIT, resourceCatalog, runMetadata, runtime, runTimelineMetrics, taskContext, TaskRunContext, TaskRunErrorCodes, timeout, waitUntil, WorkerManifest, WorkerToExecutorMessageCatalog, traceContext, heartbeats, } from "@trigger.dev/core/v3";
2
2
  import { TriggerTracer } from "@trigger.dev/core/v3/tracer";
3
- import { DevRuntimeManager } from "@trigger.dev/core/v3/dev";
4
- import { ConsoleInterceptor, DevUsageManager, UsageTimeoutManager, DurableClock, getEnvVar, logLevels, OtelTaskLogger, StandardTaskCatalog, TaskExecutor, TracingSDK, usage, getNumberEnvVar, StandardMetadataManager, StandardWaitUntilManager, } from "@trigger.dev/core/v3/workers";
3
+ import { ConsoleInterceptor, DevUsageManager, DurableClock, getEnvVar, getNumberEnvVar, logLevels, SharedRuntimeManager, OtelTaskLogger, populateEnv, StandardLifecycleHooksManager, StandardLocalsManager, StandardMetadataManager, StandardResourceCatalog, StandardRunTimelineMetricsManager, StandardWaitUntilManager, TaskExecutor, TracingSDK, usage, UsageTimeoutManager, StandardTraceContextManager, StandardHeartbeatsManager, } from "@trigger.dev/core/v3/workers";
5
4
  import { ZodIpcConnection } from "@trigger.dev/core/v3/zodIpc";
6
5
  import { readFile } from "node:fs/promises";
6
+ import { setTimeout } from "node:timers/promises";
7
7
  import sourceMapSupport from "source-map-support";
8
- import { VERSION } from "../version.js";
9
8
  import { env } from "std-env";
10
9
  import { normalizeImportPath } from "../utilities/normalizeImportPath.js";
10
+ import { VERSION } from "../version.js";
11
+ import { promiseWithResolvers } from "@trigger.dev/core/utils";
11
12
  sourceMapSupport.install({
12
13
  handleUncaughtExceptions: false,
13
14
  environment: "node",
14
15
  hookRequire: false,
15
16
  });
16
17
  process.on("uncaughtException", function (error, origin) {
18
+ logError("Uncaught exception", { error, origin });
17
19
  if (error instanceof Error) {
18
20
  process.send &&
19
21
  process.send({
20
- type: "UNCAUGHT_EXCEPTION",
21
- payload: {
22
- error: { name: error.name, message: error.message, stack: error.stack },
23
- origin,
22
+ type: "EVENT",
23
+ message: {
24
+ type: "UNCAUGHT_EXCEPTION",
25
+ payload: {
26
+ error: { name: error.name, message: error.message, stack: error.stack },
27
+ origin,
28
+ },
29
+ version: "v1",
24
30
  },
25
- version: "v1",
26
31
  });
27
32
  }
28
33
  else {
29
34
  process.send &&
30
35
  process.send({
31
- type: "UNCAUGHT_EXCEPTION",
32
- payload: {
33
- error: {
34
- name: "Error",
35
- message: typeof error === "string" ? error : JSON.stringify(error),
36
+ type: "EVENT",
37
+ message: {
38
+ type: "UNCAUGHT_EXCEPTION",
39
+ payload: {
40
+ error: {
41
+ name: "Error",
42
+ message: typeof error === "string" ? error : JSON.stringify(error),
43
+ },
44
+ origin,
36
45
  },
37
- origin,
46
+ version: "v1",
38
47
  },
39
- version: "v1",
40
48
  });
41
49
  }
42
50
  });
43
- taskCatalog.setGlobalTaskCatalog(new StandardTaskCatalog());
44
- const durableClock = new DurableClock();
45
- clock.setGlobalClock(durableClock);
51
+ process.title = `trigger-dev-run-worker (${getEnvVar("TRIGGER_WORKER_VERSION") ?? "unknown version"})`;
52
+ const heartbeatIntervalMs = getEnvVar("HEARTBEAT_INTERVAL_MS");
53
+ const standardLocalsManager = new StandardLocalsManager();
54
+ localsAPI.setGlobalLocalsManager(standardLocalsManager);
55
+ const standardLifecycleHooksManager = new StandardLifecycleHooksManager();
56
+ lifecycleHooks.setGlobalLifecycleHooksManager(standardLifecycleHooksManager);
57
+ const standardRunTimelineMetricsManager = new StandardRunTimelineMetricsManager();
58
+ runTimelineMetrics.setGlobalManager(standardRunTimelineMetricsManager);
46
59
  const devUsageManager = new DevUsageManager();
47
60
  usage.setGlobalUsageManager(devUsageManager);
48
- const devRuntimeManager = new DevRuntimeManager();
49
- runtime.setGlobalRuntimeManager(devRuntimeManager);
50
- timeout.setGlobalManager(new UsageTimeoutManager(devUsageManager));
51
- const runMetadataManager = new StandardMetadataManager(apiClientManager.clientOrThrow(), getEnvVar("TRIGGER_STREAM_URL", getEnvVar("TRIGGER_API_URL")) ?? "https://api.trigger.dev", (getEnvVar("TRIGGER_REALTIME_STREAM_VERSION") ?? "v1"));
61
+ const usageTimeoutManager = new UsageTimeoutManager(devUsageManager);
62
+ timeout.setGlobalManager(usageTimeoutManager);
63
+ const standardResourceCatalog = new StandardResourceCatalog();
64
+ resourceCatalog.setGlobalResourceCatalog(standardResourceCatalog);
65
+ const standardTraceContextManager = new StandardTraceContextManager();
66
+ traceContext.setGlobalManager(standardTraceContextManager);
67
+ const durableClock = new DurableClock();
68
+ clock.setGlobalClock(durableClock);
69
+ const runMetadataManager = new StandardMetadataManager(apiClientManager.clientOrThrow(), getEnvVar("TRIGGER_STREAM_URL", getEnvVar("TRIGGER_API_URL")) ?? "https://api.trigger.dev");
52
70
  runMetadata.setGlobalManager(runMetadataManager);
53
71
  const waitUntilManager = new StandardWaitUntilManager();
54
72
  waitUntil.setGlobalManager(waitUntilManager);
55
- // Wait for all streams to finish before completing the run
56
- waitUntil.register({
57
- requiresResolving: () => runMetadataManager.hasActiveStreams(),
58
- promise: () => runMetadataManager.waitForAllStreams(),
59
- });
60
73
  const triggerLogLevel = getEnvVar("TRIGGER_LOG_LEVEL");
74
+ const showInternalLogs = getEnvVar("RUN_WORKER_SHOW_LOGS") === "true";
75
+ const standardHeartbeatsManager = new StandardHeartbeatsManager(parseInt(heartbeatIntervalMs ?? "30000", 10));
76
+ heartbeats.setGlobalManager(standardHeartbeatsManager);
61
77
  async function importConfig(configPath) {
62
78
  const configModule = await import(normalizeImportPath(configPath));
63
79
  const config = configModule?.default ?? configModule?.config;
@@ -71,121 +87,141 @@ async function loadWorkerManifest() {
71
87
  const raw = JSON.parse(manifestContents);
72
88
  return WorkerManifest.parse(raw);
73
89
  }
74
- async function bootstrap() {
75
- const workerManifest = await loadWorkerManifest();
76
- const { config, handleError } = await importConfig(workerManifest.configPath);
77
- const tracingSDK = new TracingSDK({
78
- url: env.OTEL_EXPORTER_OTLP_ENDPOINT ?? "http://0.0.0.0:4318",
79
- instrumentations: config.instrumentations ?? [],
80
- diagLogLevel: env.OTEL_LOG_LEVEL ?? "none",
81
- forceFlushTimeoutMillis: 30_000,
82
- });
83
- const otelTracer = tracingSDK.getTracer("trigger-dev-worker", VERSION);
84
- const otelLogger = tracingSDK.getLogger("trigger-dev-worker", VERSION);
85
- const tracer = new TriggerTracer({ tracer: otelTracer, logger: otelLogger });
86
- const consoleInterceptor = new ConsoleInterceptor(otelLogger, typeof config.enableConsoleLogging === "boolean" ? config.enableConsoleLogging : true);
87
- const configLogLevel = triggerLogLevel ?? config.logLevel ?? "info";
88
- const otelTaskLogger = new OtelTaskLogger({
89
- logger: otelLogger,
90
- tracer: tracer,
91
- level: logLevels.includes(configLogLevel) ? configLogLevel : "info",
92
- });
93
- logger.setGlobalTaskLogger(otelTaskLogger);
94
- for (const task of workerManifest.tasks) {
95
- taskCatalog.registerTaskFileMetadata(task.id, {
96
- exportName: task.exportName,
97
- filePath: task.filePath,
98
- entryPoint: task.entryPoint,
90
+ async function doBootstrap() {
91
+ return await runTimelineMetrics.measureMetric("trigger.dev/start", "bootstrap", {}, async () => {
92
+ log("Bootstrapping worker");
93
+ const workerManifest = await loadWorkerManifest();
94
+ resourceCatalog.registerWorkerManifest(workerManifest);
95
+ const { config, handleError } = await importConfig(workerManifest.configPath);
96
+ const tracingSDK = new TracingSDK({
97
+ url: env.TRIGGER_OTEL_EXPORTER_OTLP_ENDPOINT ?? "http://0.0.0.0:4318",
98
+ instrumentations: config.telemetry?.instrumentations ?? config.instrumentations ?? [],
99
+ exporters: config.telemetry?.exporters ?? [],
100
+ logExporters: config.telemetry?.logExporters ?? [],
101
+ diagLogLevel: env.TRIGGER_OTEL_LOG_LEVEL ?? "none",
102
+ forceFlushTimeoutMillis: 30_000,
99
103
  });
104
+ const otelTracer = tracingSDK.getTracer("trigger-dev-worker", VERSION);
105
+ const otelLogger = tracingSDK.getLogger("trigger-dev-worker", VERSION);
106
+ const tracer = new TriggerTracer({ tracer: otelTracer, logger: otelLogger });
107
+ const consoleInterceptor = new ConsoleInterceptor(otelLogger, typeof config.enableConsoleLogging === "boolean" ? config.enableConsoleLogging : true, typeof config.disableConsoleInterceptor === "boolean"
108
+ ? config.disableConsoleInterceptor
109
+ : false, OTEL_LOG_ATTRIBUTE_COUNT_LIMIT);
110
+ const configLogLevel = triggerLogLevel ?? config.logLevel ?? "info";
111
+ const otelTaskLogger = new OtelTaskLogger({
112
+ logger: otelLogger,
113
+ tracer: tracer,
114
+ level: logLevels.includes(configLogLevel) ? configLogLevel : "info",
115
+ maxAttributeCount: OTEL_LOG_ATTRIBUTE_COUNT_LIMIT,
116
+ });
117
+ logger.setGlobalTaskLogger(otelTaskLogger);
118
+ if (config.init) {
119
+ lifecycleHooks.registerGlobalInitHook({
120
+ id: "config",
121
+ fn: config.init,
122
+ });
123
+ }
124
+ if (config.onStart) {
125
+ lifecycleHooks.registerGlobalStartHook({
126
+ id: "config",
127
+ fn: config.onStart,
128
+ });
129
+ }
130
+ if (config.onSuccess) {
131
+ lifecycleHooks.registerGlobalSuccessHook({
132
+ id: "config",
133
+ fn: config.onSuccess,
134
+ });
135
+ }
136
+ if (config.onFailure) {
137
+ lifecycleHooks.registerGlobalFailureHook({
138
+ id: "config",
139
+ fn: config.onFailure,
140
+ });
141
+ }
142
+ if (handleError) {
143
+ lifecycleHooks.registerGlobalCatchErrorHook({
144
+ id: "config",
145
+ fn: handleError,
146
+ });
147
+ }
148
+ log("Bootstrapped worker");
149
+ return {
150
+ tracer,
151
+ tracingSDK,
152
+ consoleInterceptor,
153
+ config,
154
+ workerManifest,
155
+ };
156
+ });
157
+ }
158
+ let bootstrapCache;
159
+ async function bootstrap() {
160
+ if (!bootstrapCache) {
161
+ bootstrapCache = await doBootstrap();
100
162
  }
101
- return {
102
- tracer,
103
- tracingSDK,
104
- consoleInterceptor,
105
- config,
106
- handleErrorFn: handleError,
107
- workerManifest,
108
- };
163
+ return bootstrapCache;
109
164
  }
110
165
  let _execution;
111
166
  let _isRunning = false;
167
+ let _isCancelled = false;
112
168
  let _tracingSDK;
169
+ let _executionMeasurement;
170
+ let _cancelController = new AbortController();
171
+ let _lastFlushPromise;
172
+ let _sharedWorkerRuntime;
173
+ let _lastEnv;
174
+ let _executionCount = 0;
175
+ function resetExecutionEnvironment() {
176
+ _execution = undefined;
177
+ _isRunning = false;
178
+ _isCancelled = false;
179
+ _executionMeasurement = undefined;
180
+ _cancelController = new AbortController();
181
+ standardLocalsManager.reset();
182
+ standardLifecycleHooksManager.reset();
183
+ standardRunTimelineMetricsManager.reset();
184
+ devUsageManager.reset();
185
+ usageTimeoutManager.reset();
186
+ runMetadataManager.reset();
187
+ waitUntilManager.reset();
188
+ _sharedWorkerRuntime?.reset();
189
+ durableClock.reset();
190
+ taskContext.disable();
191
+ standardTraceContextManager.reset();
192
+ standardHeartbeatsManager.reset();
193
+ // Wait for all streams to finish before completing the run
194
+ waitUntil.register({
195
+ requiresResolving: () => runMetadataManager.hasActiveStreams(),
196
+ promise: () => runMetadataManager.waitForAllStreams(),
197
+ });
198
+ log(`[${new Date().toISOString()}] Reset execution environment`);
199
+ }
113
200
  const zodIpc = new ZodIpcConnection({
114
201
  listenSchema: WorkerToExecutorMessageCatalog,
115
202
  emitSchema: ExecutorToWorkerMessageCatalog,
116
203
  process,
117
204
  handlers: {
118
- EXECUTE_TASK_RUN: async ({ execution, traceContext, metadata }, sender) => {
119
- if (_isRunning) {
120
- console.error("Worker is already running a task");
121
- await sender.send("TASK_RUN_COMPLETED", {
122
- execution,
123
- result: {
124
- ok: false,
125
- id: execution.run.id,
126
- error: {
127
- type: "INTERNAL_ERROR",
128
- code: TaskRunErrorCodes.TASK_ALREADY_RUNNING,
129
- },
130
- usage: {
131
- durationMs: 0,
132
- },
133
- taskIdentifier: execution.task.id,
134
- },
205
+ EXECUTE_TASK_RUN: async ({ execution, traceContext, metadata, metrics, env, isWarmStart }, sender) => {
206
+ if (env) {
207
+ populateEnv(env, {
208
+ override: true,
209
+ previousEnv: _lastEnv,
135
210
  });
136
- return;
211
+ _lastEnv = env;
137
212
  }
138
- const { tracer, tracingSDK, consoleInterceptor, config, handleErrorFn, workerManifest } = await bootstrap();
139
- _tracingSDK = tracingSDK;
140
- const taskManifest = workerManifest.tasks.find((t) => t.id === execution.task.id);
141
- if (!taskManifest) {
142
- console.error(`Could not find task ${execution.task.id}`);
143
- await sender.send("TASK_RUN_COMPLETED", {
144
- execution,
145
- result: {
146
- ok: false,
147
- id: execution.run.id,
148
- error: {
149
- type: "INTERNAL_ERROR",
150
- code: TaskRunErrorCodes.COULD_NOT_FIND_TASK,
151
- },
152
- usage: {
153
- durationMs: 0,
154
- },
155
- taskIdentifier: execution.task.id,
156
- },
157
- });
158
- return;
159
- }
160
- try {
161
- await import(normalizeImportPath(taskManifest.entryPoint));
162
- }
163
- catch (err) {
164
- console.error(`Failed to import task ${execution.task.id}`, err);
165
- await sender.send("TASK_RUN_COMPLETED", {
166
- execution,
167
- result: {
168
- ok: false,
169
- id: execution.run.id,
170
- error: {
171
- type: "INTERNAL_ERROR",
172
- code: TaskRunErrorCodes.COULD_NOT_IMPORT_TASK,
173
- message: err instanceof Error ? err.message : String(err),
174
- stackTrace: err instanceof Error ? err.stack : undefined,
175
- },
176
- usage: {
177
- durationMs: 0,
178
- },
179
- taskIdentifier: execution.task.id,
180
- },
181
- });
182
- return;
213
+ log(`[${new Date().toISOString()}] Received EXECUTE_TASK_RUN`, execution);
214
+ if (_lastFlushPromise) {
215
+ const now = performance.now();
216
+ await _lastFlushPromise;
217
+ const duration = performance.now() - now;
218
+ log(`[${new Date().toISOString()}] Awaited last flush in ${duration}ms`);
183
219
  }
184
- process.title = `trigger-dev-worker: ${execution.task.id} ${execution.run.id}`;
185
- // Import the task module
186
- const task = taskCatalog.getTask(execution.task.id);
187
- if (!task) {
188
- console.error(`Could not find task ${execution.task.id}`);
220
+ resetExecutionEnvironment();
221
+ standardTraceContextManager.traceContext = traceContext;
222
+ standardRunTimelineMetricsManager.registerMetricsFromExecution(metrics, isWarmStart);
223
+ if (_isRunning) {
224
+ logError("Worker is already running a task");
189
225
  await sender.send("TASK_RUN_COMPLETED", {
190
226
  execution,
191
227
  result: {
@@ -193,38 +229,76 @@ const zodIpc = new ZodIpcConnection({
193
229
  id: execution.run.id,
194
230
  error: {
195
231
  type: "INTERNAL_ERROR",
196
- code: TaskRunErrorCodes.COULD_NOT_FIND_EXECUTOR,
232
+ code: TaskRunErrorCodes.TASK_ALREADY_RUNNING,
197
233
  },
198
234
  usage: {
199
235
  durationMs: 0,
200
236
  },
201
- taskIdentifier: execution.task.id,
237
+ flushedMetadata: await runMetadataManager.stopAndReturnLastFlush(),
202
238
  },
203
239
  });
204
240
  return;
205
241
  }
206
- const executor = new TaskExecutor(task, {
207
- tracer,
208
- tracingSDK,
209
- consoleInterceptor,
210
- config,
211
- handleErrorFn,
242
+ const ctx = TaskRunContext.parse(execution);
243
+ taskContext.setGlobalTaskContext({
244
+ ctx,
245
+ worker: metadata,
246
+ isWarmStart: isWarmStart ?? false,
212
247
  });
213
248
  try {
214
- _execution = execution;
215
- _isRunning = true;
216
- runMetadataManager.runId = execution.run.id;
217
- runMetadataManager.startPeriodicFlush(getNumberEnvVar("TRIGGER_RUN_METADATA_FLUSH_INTERVAL", 1000));
218
- const measurement = usage.start();
219
- // This lives outside of the executor because this will eventually be moved to the controller level
220
- const signal = execution.run.maxDuration
221
- ? timeout.abortAfterTimeout(execution.run.maxDuration)
222
- : undefined;
223
- signal?.addEventListener("abort", async (e) => {
224
- if (_isRunning) {
225
- _isRunning = false;
226
- _execution = undefined;
227
- const usageSample = usage.stop(measurement);
249
+ const { tracer, tracingSDK, consoleInterceptor, config, workerManifest } = await bootstrap();
250
+ _tracingSDK = tracingSDK;
251
+ const taskManifest = workerManifest.tasks.find((t) => t.id === execution.task.id);
252
+ if (!taskManifest) {
253
+ logError(`Could not find task ${execution.task.id}`);
254
+ await sender.send("TASK_RUN_COMPLETED", {
255
+ execution,
256
+ result: {
257
+ ok: false,
258
+ id: execution.run.id,
259
+ error: {
260
+ type: "INTERNAL_ERROR",
261
+ code: TaskRunErrorCodes.COULD_NOT_FIND_TASK,
262
+ message: `Could not find task ${execution.task.id}. Make sure the task is exported and the ID is correct.`,
263
+ },
264
+ usage: {
265
+ durationMs: 0,
266
+ },
267
+ flushedMetadata: await runMetadataManager.stopAndReturnLastFlush(),
268
+ },
269
+ });
270
+ return;
271
+ }
272
+ // First attempt to get the task from the resource catalog
273
+ let task = resourceCatalog.getTask(execution.task.id);
274
+ if (!task) {
275
+ log(`Could not find task ${execution.task.id} in resource catalog, importing...`);
276
+ try {
277
+ await runTimelineMetrics.measureMetric("trigger.dev/start", "import", {
278
+ entryPoint: taskManifest.entryPoint,
279
+ file: taskManifest.filePath,
280
+ }, async () => {
281
+ const beforeImport = performance.now();
282
+ resourceCatalog.setCurrentFileContext(taskManifest.entryPoint, taskManifest.filePath);
283
+ // Load init file if it exists
284
+ if (workerManifest.initEntryPoint) {
285
+ try {
286
+ await import(normalizeImportPath(workerManifest.initEntryPoint));
287
+ log(`Loaded init file from ${workerManifest.initEntryPoint}`);
288
+ }
289
+ catch (err) {
290
+ logError(`Failed to load init file`, err);
291
+ throw err;
292
+ }
293
+ }
294
+ await import(normalizeImportPath(taskManifest.entryPoint));
295
+ resourceCatalog.clearCurrentFileContext();
296
+ const durationMs = performance.now() - beforeImport;
297
+ log(`Imported task ${execution.task.id} [${taskManifest.entryPoint}] in ${durationMs}ms`);
298
+ });
299
+ }
300
+ catch (err) {
301
+ logError(`Failed to import task ${execution.task.id}`, err);
228
302
  await sender.send("TASK_RUN_COMPLETED", {
229
303
  execution,
230
304
  result: {
@@ -232,75 +306,196 @@ const zodIpc = new ZodIpcConnection({
232
306
  id: execution.run.id,
233
307
  error: {
234
308
  type: "INTERNAL_ERROR",
235
- code: TaskRunErrorCodes.MAX_DURATION_EXCEEDED,
236
- message: signal.reason instanceof Error ? signal.reason.message : String(signal.reason),
309
+ code: TaskRunErrorCodes.COULD_NOT_IMPORT_TASK,
310
+ message: err instanceof Error ? err.message : String(err),
311
+ stackTrace: err instanceof Error ? err.stack : undefined,
237
312
  },
238
313
  usage: {
239
- durationMs: usageSample.cpuTime,
314
+ durationMs: 0,
240
315
  },
241
- taskIdentifier: execution.task.id,
242
- metadata: runMetadataManager.stopAndReturnLastFlush(),
316
+ flushedMetadata: await runMetadataManager.stopAndReturnLastFlush(),
243
317
  },
244
318
  });
319
+ return;
245
320
  }
246
- });
247
- const { result } = await executor.execute(execution, metadata, traceContext, measurement, signal);
248
- const usageSample = usage.stop(measurement);
249
- if (_isRunning) {
250
- return sender.send("TASK_RUN_COMPLETED", {
321
+ // Now try and get the task again
322
+ task = resourceCatalog.getTask(execution.task.id);
323
+ }
324
+ if (!task) {
325
+ logError(`Could not find task ${execution.task.id}`);
326
+ await sender.send("TASK_RUN_COMPLETED", {
251
327
  execution,
252
328
  result: {
253
- ...result,
329
+ ok: false,
330
+ id: execution.run.id,
331
+ error: {
332
+ type: "INTERNAL_ERROR",
333
+ code: TaskRunErrorCodes.COULD_NOT_FIND_EXECUTOR,
334
+ },
254
335
  usage: {
255
- durationMs: usageSample.cpuTime,
336
+ durationMs: 0,
256
337
  },
257
- taskIdentifier: execution.task.id,
258
- metadata: runMetadataManager.stopAndReturnLastFlush(),
338
+ flushedMetadata: await runMetadataManager.stopAndReturnLastFlush(),
259
339
  },
260
340
  });
341
+ return;
342
+ }
343
+ runMetadataManager.runId = execution.run.id;
344
+ runMetadataManager.runIdIsRoot = typeof execution.run.rootTaskRunId === "undefined";
345
+ _executionCount++;
346
+ const executor = new TaskExecutor(task, {
347
+ tracer,
348
+ tracingSDK,
349
+ consoleInterceptor,
350
+ retries: config.retries,
351
+ isWarmStart,
352
+ executionCount: _executionCount,
353
+ });
354
+ try {
355
+ _execution = execution;
356
+ _isRunning = true;
357
+ standardHeartbeatsManager.startHeartbeat(attemptKey(execution));
358
+ runMetadataManager.startPeriodicFlush(getNumberEnvVar("TRIGGER_RUN_METADATA_FLUSH_INTERVAL", 1000));
359
+ devUsageManager.setInitialState({
360
+ cpuTime: execution.run.durationMs ?? 0,
361
+ costInCents: execution.run.costInCents ?? 0,
362
+ });
363
+ _executionMeasurement = usage.start();
364
+ const timeoutController = timeout.abortAfterTimeout(execution.run.maxDuration);
365
+ const signal = AbortSignal.any([_cancelController.signal, timeoutController.signal]);
366
+ const { result } = await executor.execute(execution, ctx, signal);
367
+ if (_isRunning && !_isCancelled) {
368
+ const usageSample = usage.stop(_executionMeasurement);
369
+ return sender.send("TASK_RUN_COMPLETED", {
370
+ execution,
371
+ result: {
372
+ ...result,
373
+ usage: {
374
+ durationMs: usageSample.cpuTime,
375
+ },
376
+ flushedMetadata: await runMetadataManager.stopAndReturnLastFlush(),
377
+ },
378
+ });
379
+ }
380
+ }
381
+ finally {
382
+ standardHeartbeatsManager.stopHeartbeat();
383
+ _execution = undefined;
384
+ _isRunning = false;
385
+ log(`[${new Date().toISOString()}] Task run completed`);
261
386
  }
262
387
  }
263
- finally {
264
- _execution = undefined;
265
- _isRunning = false;
388
+ catch (err) {
389
+ logError("Failed to execute task", err);
390
+ await sender.send("TASK_RUN_COMPLETED", {
391
+ execution,
392
+ result: {
393
+ ok: false,
394
+ id: execution.run.id,
395
+ error: {
396
+ type: "INTERNAL_ERROR",
397
+ code: TaskRunErrorCodes.CONFIGURED_INCORRECTLY,
398
+ message: err instanceof Error ? err.message : String(err),
399
+ stackTrace: err instanceof Error ? err.stack : undefined,
400
+ },
401
+ usage: {
402
+ durationMs: 0,
403
+ },
404
+ flushedMetadata: await runMetadataManager.stopAndReturnLastFlush(),
405
+ },
406
+ });
266
407
  }
267
408
  },
268
- TASK_RUN_COMPLETED_NOTIFICATION: async (payload) => {
269
- switch (payload.version) {
270
- case "v1": {
271
- devRuntimeManager.resumeTask(payload.completion, payload.execution.run.id);
272
- break;
273
- }
274
- case "v2": {
275
- devRuntimeManager.resumeTask(payload.completion, payload.completion.id);
276
- break;
277
- }
409
+ CANCEL: async ({ timeoutInMs }) => {
410
+ _isCancelled = true;
411
+ _cancelController.abort("run cancelled");
412
+ await callCancelHooks(timeoutInMs);
413
+ if (_executionMeasurement) {
414
+ usage.stop(_executionMeasurement);
278
415
  }
416
+ await flushAll(timeoutInMs);
279
417
  },
280
- FLUSH: async ({ timeoutInMs }, sender) => {
281
- await Promise.allSettled([_tracingSDK?.flush(), runMetadataManager.flush()]);
418
+ FLUSH: async ({ timeoutInMs }) => {
419
+ await flushAll(timeoutInMs);
420
+ },
421
+ RESOLVE_WAITPOINT: async ({ waitpoint }) => {
422
+ _sharedWorkerRuntime?.resolveWaitpoints([waitpoint]);
282
423
  },
283
424
  },
284
425
  });
285
- process.title = "trigger-dev-worker";
286
- async function asyncHeartbeat(initialDelayInSeconds = 30, intervalInSeconds = 30) {
287
- async function _doHeartbeat() {
288
- while (true) {
289
- if (_isRunning && _execution) {
290
- try {
291
- await zodIpc.send("TASK_HEARTBEAT", { id: _execution.attempt.id });
292
- }
293
- catch (err) {
294
- console.error("Failed to send HEARTBEAT message", err);
295
- }
296
- }
297
- await new Promise((resolve) => setTimeout(resolve, 1000 * intervalInSeconds));
298
- }
426
+ async function callCancelHooks(timeoutInMs = 10_000) {
427
+ const now = performance.now();
428
+ try {
429
+ await Promise.race([lifecycleHooks.callOnCancelHookListeners(), setTimeout(timeoutInMs)]);
430
+ }
431
+ finally {
432
+ const duration = performance.now() - now;
433
+ log(`Called cancel hooks in ${duration}ms`);
434
+ }
435
+ }
436
+ async function flushAll(timeoutInMs = 10_000) {
437
+ const now = performance.now();
438
+ const { promise, resolve } = promiseWithResolvers();
439
+ _lastFlushPromise = promise;
440
+ const results = await Promise.allSettled([
441
+ flushTracingSDK(timeoutInMs),
442
+ flushMetadata(timeoutInMs),
443
+ ]);
444
+ const successfulFlushes = results
445
+ .filter((result) => result.status === "fulfilled")
446
+ .map((result) => result.value.flushed);
447
+ const failedFlushes = ["tracingSDK", "runMetadata"].filter((flushed) => !successfulFlushes.includes(flushed));
448
+ if (failedFlushes.length > 0) {
449
+ logError(`Failed to flush ${failedFlushes.join(", ")}`);
450
+ }
451
+ const errorMessages = results
452
+ .filter((result) => result.status === "rejected")
453
+ .map((result) => result.reason);
454
+ if (errorMessages.length > 0) {
455
+ logError(errorMessages.join("\n"));
456
+ }
457
+ for (const flushed of successfulFlushes) {
458
+ log(`Flushed ${flushed} successfully`);
299
459
  }
300
- // Wait for the initial delay
301
- await new Promise((resolve) => setTimeout(resolve, 1000 * initialDelayInSeconds));
302
- // Wait for 5 seconds before the next execution
303
- return _doHeartbeat();
460
+ const duration = performance.now() - now;
461
+ log(`Flushed all in ${duration}ms`);
462
+ // Resolve the last flush promise
463
+ resolve();
464
+ }
465
+ async function flushTracingSDK(timeoutInMs = 10_000) {
466
+ const now = performance.now();
467
+ await Promise.race([_tracingSDK?.flush(), setTimeout(timeoutInMs)]);
468
+ const duration = performance.now() - now;
469
+ log(`Flushed tracingSDK in ${duration}ms`);
470
+ return {
471
+ flushed: "tracingSDK",
472
+ durationMs: duration,
473
+ };
474
+ }
475
+ async function flushMetadata(timeoutInMs = 10_000) {
476
+ const now = performance.now();
477
+ await Promise.race([runMetadataManager.flush(), setTimeout(timeoutInMs)]);
478
+ const duration = performance.now() - now;
479
+ log(`Flushed runMetadata in ${duration}ms`);
480
+ return {
481
+ flushed: "runMetadata",
482
+ durationMs: duration,
483
+ };
484
+ }
485
+ _sharedWorkerRuntime = new SharedRuntimeManager(zodIpc, showInternalLogs);
486
+ runtime.setGlobalRuntimeManager(_sharedWorkerRuntime);
487
+ standardHeartbeatsManager.registerListener(async (id) => {
488
+ await zodIpc.send("TASK_HEARTBEAT", { id });
489
+ });
490
+ function log(message, ...args) {
491
+ if (!showInternalLogs)
492
+ return;
493
+ console.log(`[${new Date().toISOString()}] ${message}`, args);
494
+ }
495
+ function logError(message, error) {
496
+ if (!showInternalLogs)
497
+ return;
498
+ console.error(`[${new Date().toISOString()}] ${message}`, error);
304
499
  }
305
- await asyncHeartbeat();
500
+ log(`Executor started`);
306
501
  //# sourceMappingURL=dev-run-worker.js.map