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.
- package/README.md +28 -1
- package/dist/esm/apiClient.d.ts +158 -74
- package/dist/esm/apiClient.js +341 -76
- package/dist/esm/apiClient.js.map +1 -1
- package/dist/esm/build/buildWorker.d.ts +10 -6
- package/dist/esm/build/buildWorker.js +22 -38
- package/dist/esm/build/buildWorker.js.map +1 -1
- package/dist/esm/build/bundle.d.ts +18 -1
- package/dist/esm/build/bundle.js +142 -52
- package/dist/esm/build/bundle.js.map +1 -1
- package/dist/esm/build/entryPoints.d.ts +12 -0
- package/dist/esm/build/entryPoints.js +127 -0
- package/dist/esm/build/entryPoints.js.map +1 -0
- package/dist/esm/build/extensions.js +17 -0
- package/dist/esm/build/extensions.js.map +1 -1
- package/dist/esm/build/externals.js +184 -2
- package/dist/esm/build/externals.js.map +1 -1
- package/dist/esm/build/packageModules.d.ts +15 -5
- package/dist/esm/build/packageModules.js +154 -36
- package/dist/esm/build/packageModules.js.map +1 -1
- package/dist/esm/cli/common.d.ts +1 -1
- package/dist/esm/cli/common.js +38 -45
- package/dist/esm/cli/common.js.map +1 -1
- package/dist/esm/cli/index.js +19 -3
- package/dist/esm/cli/index.js.map +1 -1
- package/dist/esm/commands/analyze.d.ts +23 -0
- package/dist/esm/commands/analyze.js +122 -0
- package/dist/esm/commands/analyze.js.map +1 -0
- package/dist/esm/commands/deploy.d.ts +5 -2
- package/dist/esm/commands/deploy.js +271 -160
- package/dist/esm/commands/deploy.js.map +1 -1
- package/dist/esm/commands/dev.d.ts +36 -6
- package/dist/esm/commands/dev.js +71 -2
- package/dist/esm/commands/dev.js.map +1 -1
- package/dist/esm/commands/env.d.ts +2 -0
- package/dist/esm/commands/env.js +298 -0
- package/dist/esm/commands/env.js.map +1 -0
- package/dist/esm/commands/init.d.ts +9 -1
- package/dist/esm/commands/init.js +132 -65
- package/dist/esm/commands/init.js.map +1 -1
- package/dist/esm/commands/install-mcp.d.ts +50 -0
- package/dist/esm/commands/install-mcp.js +497 -0
- package/dist/esm/commands/install-mcp.js.map +1 -0
- package/dist/esm/commands/install-rules.d.ts +11 -0
- package/dist/esm/commands/install-rules.js +381 -0
- package/dist/esm/commands/install-rules.js.map +1 -0
- package/dist/esm/commands/list-profiles.d.ts +3 -7
- package/dist/esm/commands/list-profiles.js +7 -4
- package/dist/esm/commands/list-profiles.js.map +1 -1
- package/dist/esm/commands/login.d.ts +9 -5
- package/dist/esm/commands/login.js +40 -7
- package/dist/esm/commands/login.js.map +1 -1
- package/dist/esm/commands/logout.d.ts +1 -1
- package/dist/esm/commands/mcp.d.ts +38 -0
- package/dist/esm/commands/mcp.js +82 -0
- package/dist/esm/commands/mcp.js.map +1 -0
- package/dist/esm/commands/preview.d.ts +5 -0
- package/dist/esm/commands/preview.js +93 -0
- package/dist/esm/commands/preview.js.map +1 -0
- package/dist/esm/commands/promote.d.ts +3 -0
- package/dist/esm/commands/promote.js +86 -0
- package/dist/esm/commands/promote.js.map +1 -0
- package/dist/esm/commands/switch.d.ts +19 -0
- package/dist/esm/commands/switch.js +93 -0
- package/dist/esm/commands/switch.js.map +1 -0
- package/dist/esm/commands/trigger.d.ts +33 -0
- package/dist/esm/commands/trigger.js +88 -0
- package/dist/esm/commands/trigger.js.map +1 -0
- package/dist/esm/commands/update.d.ts +3 -2
- package/dist/esm/commands/update.js +23 -9
- package/dist/esm/commands/update.js.map +1 -1
- package/dist/esm/commands/whoami.d.ts +12 -1
- package/dist/esm/commands/whoami.js +36 -6
- package/dist/esm/commands/whoami.js.map +1 -1
- package/dist/esm/commands/workers/build.d.ts +4 -0
- package/dist/esm/commands/workers/build.js +345 -0
- package/dist/esm/commands/workers/build.js.map +1 -0
- package/dist/esm/commands/workers/create.d.ts +2 -0
- package/dist/esm/commands/workers/create.js +91 -0
- package/dist/esm/commands/workers/create.js.map +1 -0
- package/dist/esm/commands/workers/index.d.ts +2 -0
- package/dist/esm/commands/workers/index.js +13 -0
- package/dist/esm/commands/workers/index.js.map +1 -0
- package/dist/esm/commands/workers/list.d.ts +2 -0
- package/dist/esm/commands/workers/list.js +80 -0
- package/dist/esm/commands/workers/list.js.map +1 -0
- package/dist/esm/commands/workers/run.d.ts +2 -0
- package/dist/esm/commands/workers/run.js +105 -0
- package/dist/esm/commands/workers/run.js.map +1 -0
- package/dist/esm/config.d.ts +2 -1
- package/dist/esm/config.js +35 -8
- package/dist/esm/config.js.map +1 -1
- package/dist/esm/deploy/buildImage.d.ts +12 -11
- package/dist/esm/deploy/buildImage.js +360 -115
- package/dist/esm/deploy/buildImage.js.map +1 -1
- package/dist/esm/dev/backgroundWorker.d.ts +6 -245
- package/dist/esm/dev/backgroundWorker.js +11 -320
- package/dist/esm/dev/backgroundWorker.js.map +1 -1
- package/dist/esm/dev/devOutput.js +48 -9
- package/dist/esm/dev/devOutput.js.map +1 -1
- package/dist/esm/dev/devSession.d.ts +2 -1
- package/dist/esm/dev/devSession.js +68 -65
- package/dist/esm/dev/devSession.js.map +1 -1
- package/dist/esm/dev/devSupervisor.d.ts +12 -0
- package/dist/esm/dev/devSupervisor.js +568 -0
- package/dist/esm/dev/devSupervisor.js.map +1 -0
- package/dist/esm/dev/lock.d.ts +1 -0
- package/dist/esm/dev/lock.js +80 -0
- package/dist/esm/dev/lock.js.map +1 -0
- package/dist/esm/dev/mcpServer.d.ts +10 -0
- package/dist/esm/dev/mcpServer.js +201 -0
- package/dist/esm/dev/mcpServer.js.map +1 -0
- package/dist/esm/dev/taskRunProcessPool.d.ts +39 -0
- package/dist/esm/dev/taskRunProcessPool.js +220 -0
- package/dist/esm/dev/taskRunProcessPool.js.map +1 -0
- package/dist/esm/dev/workerRuntime.d.ts +2 -2
- package/dist/esm/dev/workerRuntime.js +1 -265
- package/dist/esm/dev/workerRuntime.js.map +1 -1
- package/dist/esm/entryPoints/dev-index-worker.js +45 -8
- package/dist/esm/entryPoints/dev-index-worker.js.map +1 -1
- package/dist/esm/entryPoints/dev-run-controller.d.ts +58 -0
- package/dist/esm/entryPoints/dev-run-controller.js +652 -0
- package/dist/esm/entryPoints/dev-run-controller.js.map +1 -0
- package/dist/esm/entryPoints/dev-run-worker.js +394 -199
- package/dist/esm/entryPoints/dev-run-worker.js.map +1 -1
- package/dist/esm/entryPoints/managed/controller.d.ts +63 -0
- package/dist/esm/entryPoints/managed/controller.js +502 -0
- package/dist/esm/entryPoints/managed/controller.js.map +1 -0
- package/dist/esm/entryPoints/managed/env.d.ts +170 -0
- package/dist/esm/entryPoints/managed/env.js +199 -0
- package/dist/esm/entryPoints/managed/env.js.map +1 -0
- package/dist/esm/entryPoints/managed/execution.d.ts +143 -0
- package/dist/esm/entryPoints/managed/execution.js +901 -0
- package/dist/esm/entryPoints/managed/execution.js.map +1 -0
- package/dist/esm/entryPoints/managed/logger.d.ts +30 -0
- package/dist/esm/entryPoints/managed/logger.js +47 -0
- package/dist/esm/entryPoints/managed/logger.js.map +1 -0
- package/dist/esm/entryPoints/managed/notifier.d.ts +30 -0
- package/dist/esm/entryPoints/managed/notifier.js +63 -0
- package/dist/esm/entryPoints/managed/notifier.js.map +1 -0
- package/dist/esm/entryPoints/managed/overrides.d.ts +18 -0
- package/dist/esm/entryPoints/managed/overrides.js +19 -0
- package/dist/esm/entryPoints/managed/overrides.js.map +1 -0
- package/dist/esm/entryPoints/managed/poller.d.ts +31 -0
- package/dist/esm/entryPoints/managed/poller.js +89 -0
- package/dist/esm/entryPoints/managed/poller.js.map +1 -0
- package/dist/esm/entryPoints/managed/snapshot.d.ts +54 -0
- package/dist/esm/entryPoints/managed/snapshot.js +293 -0
- package/dist/esm/entryPoints/managed/snapshot.js.map +1 -0
- package/dist/esm/entryPoints/managed/taskRunProcessProvider.d.ts +62 -0
- package/dist/esm/entryPoints/managed/taskRunProcessProvider.js +252 -0
- package/dist/esm/entryPoints/managed/taskRunProcessProvider.js.map +1 -0
- package/dist/esm/entryPoints/{deploy-index-controller.js → managed-index-controller.js} +27 -3
- package/dist/esm/entryPoints/managed-index-controller.js.map +1 -0
- package/dist/esm/entryPoints/{deploy-index-worker.js → managed-index-worker.js} +50 -21
- package/dist/esm/entryPoints/managed-index-worker.js.map +1 -0
- package/dist/esm/entryPoints/managed-run-controller.js +13 -0
- package/dist/esm/entryPoints/managed-run-controller.js.map +1 -0
- package/dist/esm/entryPoints/managed-run-worker.js +512 -0
- package/dist/esm/entryPoints/managed-run-worker.js.map +1 -0
- package/dist/esm/executions/taskRunProcess.d.ts +28 -82
- package/dist/esm/executions/taskRunProcess.js +130 -74
- package/dist/esm/executions/taskRunProcess.js.map +1 -1
- package/dist/esm/indexing/indexWorkerManifest.d.ts +21 -5
- package/dist/esm/indexing/indexWorkerManifest.js +4 -4
- package/dist/esm/indexing/indexWorkerManifest.js.map +1 -1
- package/dist/esm/indexing/registerResources.d.ts +5 -0
- package/dist/esm/indexing/registerResources.js +44 -0
- package/dist/esm/indexing/registerResources.js.map +1 -0
- package/dist/esm/mcp/auth.d.ts +12 -0
- package/dist/esm/mcp/auth.js +152 -0
- package/dist/esm/mcp/auth.js.map +1 -0
- package/dist/esm/mcp/capabilities.d.ts +4 -0
- package/dist/esm/mcp/capabilities.js +22 -0
- package/dist/esm/mcp/capabilities.js.map +1 -0
- package/dist/esm/mcp/config.d.ts +82 -0
- package/dist/esm/mcp/config.js +87 -0
- package/dist/esm/mcp/config.js.map +1 -0
- package/dist/esm/mcp/context.d.ts +45 -0
- package/dist/esm/mcp/context.js +129 -0
- package/dist/esm/mcp/context.js.map +1 -0
- package/dist/esm/mcp/formatters.d.ts +7 -0
- package/dist/esm/mcp/formatters.js +330 -0
- package/dist/esm/mcp/formatters.js.map +1 -0
- package/dist/esm/mcp/logger.d.ts +11 -0
- package/dist/esm/mcp/logger.js +34 -0
- package/dist/esm/mcp/logger.js.map +1 -0
- package/dist/esm/mcp/mintlifyClient.d.ts +1 -0
- package/dist/esm/mcp/mintlifyClient.js +65 -0
- package/dist/esm/mcp/mintlifyClient.js.map +1 -0
- package/dist/esm/mcp/schemas.d.ts +324 -0
- package/dist/esm/mcp/schemas.js +144 -0
- package/dist/esm/mcp/schemas.js.map +1 -0
- package/dist/esm/mcp/tools/deploys.d.ts +174 -0
- package/dist/esm/mcp/tools/deploys.js +161 -0
- package/dist/esm/mcp/tools/deploys.js.map +1 -0
- package/dist/esm/mcp/tools/docs.d.ts +77 -0
- package/dist/esm/mcp/tools/docs.js +18 -0
- package/dist/esm/mcp/tools/docs.js.map +1 -0
- package/dist/esm/mcp/tools/orgs.d.ts +172 -0
- package/dist/esm/mcp/tools/orgs.js +172 -0
- package/dist/esm/mcp/tools/orgs.js.map +1 -0
- package/dist/esm/mcp/tools/previewBranches.d.ts +78 -0
- package/dist/esm/mcp/tools/previewBranches.js +28 -0
- package/dist/esm/mcp/tools/previewBranches.js.map +1 -0
- package/dist/esm/mcp/tools/runs.d.ts +335 -0
- package/dist/esm/mcp/tools/runs.js +160 -0
- package/dist/esm/mcp/tools/runs.js.map +1 -0
- package/dist/esm/mcp/tools/tasks.d.ts +200 -0
- package/dist/esm/mcp/tools/tasks.js +117 -0
- package/dist/esm/mcp/tools/tasks.js.map +1 -0
- package/dist/esm/mcp/tools.d.ts +2 -0
- package/dist/esm/mcp/tools.js +40 -0
- package/dist/esm/mcp/tools.js.map +1 -0
- package/dist/esm/mcp/types.d.ts +6 -0
- package/dist/esm/mcp/types.js +2 -0
- package/dist/esm/mcp/types.js.map +1 -0
- package/dist/esm/mcp/utils.d.ts +89 -0
- package/dist/esm/mcp/utils.js +95 -0
- package/dist/esm/mcp/utils.js.map +1 -0
- package/dist/esm/rules/install.d.ts +1 -0
- package/dist/esm/rules/install.js +2 -0
- package/dist/esm/rules/install.js.map +1 -0
- package/dist/esm/rules/manifest.d.ts +145 -0
- package/dist/esm/rules/manifest.js +110 -0
- package/dist/esm/rules/manifest.js.map +1 -0
- package/dist/esm/rules/types.d.ts +3 -0
- package/dist/esm/rules/types.js +3 -0
- package/dist/esm/rules/types.js.map +1 -0
- package/dist/esm/utilities/accessTokens.d.ts +12 -0
- package/dist/esm/utilities/accessTokens.js +30 -0
- package/dist/esm/utilities/accessTokens.js.map +1 -0
- package/dist/esm/utilities/analyze.d.ts +13 -0
- package/dist/esm/utilities/analyze.js +463 -0
- package/dist/esm/utilities/analyze.js.map +1 -0
- package/dist/esm/utilities/cliOutput.d.ts +6 -1
- package/dist/esm/utilities/cliOutput.js +11 -2
- package/dist/esm/utilities/cliOutput.js.map +1 -1
- package/dist/esm/utilities/configFiles.d.ts +65 -15
- package/dist/esm/utilities/configFiles.js +124 -26
- package/dist/esm/utilities/configFiles.js.map +1 -1
- package/dist/esm/utilities/eventBus.d.ts +7 -3
- package/dist/esm/utilities/eventBus.js.map +1 -1
- package/dist/esm/utilities/fileSystem.d.ts +7 -1
- package/dist/esm/utilities/fileSystem.js +42 -4
- package/dist/esm/utilities/fileSystem.js.map +1 -1
- package/dist/esm/utilities/gitMeta.d.ts +2 -0
- package/dist/esm/utilities/gitMeta.js +220 -0
- package/dist/esm/utilities/gitMeta.js.map +1 -0
- package/dist/esm/utilities/githubActions.d.ts +4 -0
- package/dist/esm/utilities/githubActions.js +18 -0
- package/dist/esm/utilities/githubActions.js.map +1 -0
- package/dist/esm/utilities/initialBanner.js +18 -6
- package/dist/esm/utilities/initialBanner.js.map +1 -1
- package/dist/esm/utilities/localEnvVars.d.ts +3 -0
- package/dist/esm/utilities/localEnvVars.js +19 -0
- package/dist/esm/utilities/localEnvVars.js.map +1 -0
- package/dist/esm/utilities/sanitizeEnvVars.d.ts +16 -3
- package/dist/esm/utilities/sanitizeEnvVars.js +15 -0
- package/dist/esm/utilities/sanitizeEnvVars.js.map +1 -1
- package/dist/esm/utilities/session.d.ts +14 -0
- package/dist/esm/utilities/session.js +44 -47
- package/dist/esm/utilities/session.js.map +1 -1
- package/dist/esm/utilities/supportsHyperlinks.d.ts +15 -0
- package/dist/esm/utilities/supportsHyperlinks.js +122 -0
- package/dist/esm/utilities/supportsHyperlinks.js.map +1 -0
- package/dist/esm/utilities/tempDirectories.d.ts +1 -0
- package/dist/esm/utilities/tempDirectories.js +19 -2
- package/dist/esm/utilities/tempDirectories.js.map +1 -1
- package/dist/esm/utilities/terminalLink.d.ts +56 -0
- package/dist/esm/utilities/terminalLink.js +76 -0
- package/dist/esm/utilities/terminalLink.js.map +1 -0
- package/dist/esm/utilities/windows.js +65 -1
- package/dist/esm/utilities/windows.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/package.json +44 -25
- package/dist/esm/entryPoints/deploy-index-controller.js.map +0 -1
- package/dist/esm/entryPoints/deploy-index-worker.js.map +0 -1
- package/dist/esm/entryPoints/deploy-run-controller.js +0 -1099
- package/dist/esm/entryPoints/deploy-run-controller.js.map +0 -1
- package/dist/esm/entryPoints/deploy-run-worker.js +0 -366
- package/dist/esm/entryPoints/deploy-run-worker.js.map +0 -1
- package/dist/esm/indexing/registerTasks.d.ts +0 -2
- package/dist/esm/indexing/registerTasks.js +0 -62
- package/dist/esm/indexing/registerTasks.js.map +0 -1
- package/dist/esm/telemetry/tracing.d.ts +0 -3
- package/dist/esm/telemetry/tracing.js +0 -58
- package/dist/esm/telemetry/tracing.js.map +0 -1
- /package/dist/esm/entryPoints/{deploy-index-controller.d.ts → managed-index-controller.d.ts} +0 -0
- /package/dist/esm/entryPoints/{deploy-index-worker.d.ts → managed-index-worker.d.ts} +0 -0
- /package/dist/esm/entryPoints/{deploy-run-controller.d.ts → managed-run-controller.d.ts} +0 -0
- /package/dist/esm/entryPoints/{deploy-run-worker.d.ts → managed-run-worker.d.ts} +0 -0
|
@@ -1,63 +1,79 @@
|
|
|
1
|
-
import { clock, logger,
|
|
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 {
|
|
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: "
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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: "
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
|
|
46
|
+
version: "v1",
|
|
38
47
|
},
|
|
39
|
-
version: "v1",
|
|
40
48
|
});
|
|
41
49
|
}
|
|
42
50
|
});
|
|
43
|
-
|
|
44
|
-
const
|
|
45
|
-
|
|
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
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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 (
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
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
|
-
|
|
211
|
+
_lastEnv = env;
|
|
137
212
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
if (
|
|
188
|
-
|
|
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.
|
|
232
|
+
code: TaskRunErrorCodes.TASK_ALREADY_RUNNING,
|
|
197
233
|
},
|
|
198
234
|
usage: {
|
|
199
235
|
durationMs: 0,
|
|
200
236
|
},
|
|
201
|
-
|
|
237
|
+
flushedMetadata: await runMetadataManager.stopAndReturnLastFlush(),
|
|
202
238
|
},
|
|
203
239
|
});
|
|
204
240
|
return;
|
|
205
241
|
}
|
|
206
|
-
const
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
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
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
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.
|
|
236
|
-
message:
|
|
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:
|
|
314
|
+
durationMs: 0,
|
|
240
315
|
},
|
|
241
|
-
|
|
242
|
-
metadata: runMetadataManager.stopAndReturnLastFlush(),
|
|
316
|
+
flushedMetadata: await runMetadataManager.stopAndReturnLastFlush(),
|
|
243
317
|
},
|
|
244
318
|
});
|
|
319
|
+
return;
|
|
245
320
|
}
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
if (
|
|
250
|
-
|
|
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
|
-
|
|
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:
|
|
336
|
+
durationMs: 0,
|
|
256
337
|
},
|
|
257
|
-
|
|
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
|
-
|
|
264
|
-
|
|
265
|
-
|
|
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
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
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 }
|
|
281
|
-
await
|
|
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
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
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
|
-
|
|
301
|
-
|
|
302
|
-
//
|
|
303
|
-
|
|
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
|
-
|
|
500
|
+
log(`Executor started`);
|
|
306
501
|
//# sourceMappingURL=dev-run-worker.js.map
|