trigger.dev 0.0.0-re2-20250204143529 → 0.0.0-re2-20250312163355

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 (101) hide show
  1. package/README.md +31 -0
  2. package/dist/esm/apiClient.d.ts +32 -340
  3. package/dist/esm/apiClient.js +69 -27
  4. package/dist/esm/apiClient.js.map +1 -1
  5. package/dist/esm/build/buildWorker.d.ts +7 -7
  6. package/dist/esm/build/bundle.js +22 -4
  7. package/dist/esm/build/bundle.js.map +1 -1
  8. package/dist/esm/build/entryPoints.d.ts +2 -0
  9. package/dist/esm/build/entryPoints.js +27 -7
  10. package/dist/esm/build/entryPoints.js.map +1 -1
  11. package/dist/esm/build/packageModules.d.ts +0 -5
  12. package/dist/esm/build/packageModules.js +0 -45
  13. package/dist/esm/build/packageModules.js.map +1 -1
  14. package/dist/esm/cli/common.d.ts +2 -2
  15. package/dist/esm/cli/index.js +2 -0
  16. package/dist/esm/cli/index.js.map +1 -1
  17. package/dist/esm/commands/deploy.js +52 -10
  18. package/dist/esm/commands/deploy.js.map +1 -1
  19. package/dist/esm/commands/dev.d.ts +11 -2
  20. package/dist/esm/commands/dev.js +7 -1
  21. package/dist/esm/commands/dev.js.map +1 -1
  22. package/dist/esm/commands/list-profiles.d.ts +2 -2
  23. package/dist/esm/commands/login.d.ts +2 -2
  24. package/dist/esm/commands/logout.d.ts +2 -2
  25. package/dist/esm/commands/promote.d.ts +3 -0
  26. package/dist/esm/commands/promote.js +75 -0
  27. package/dist/esm/commands/promote.js.map +1 -0
  28. package/dist/esm/commands/switch.d.ts +2 -2
  29. package/dist/esm/commands/trigger.d.ts +4 -4
  30. package/dist/esm/commands/update.d.ts +2 -2
  31. package/dist/esm/commands/whoami.d.ts +2 -2
  32. package/dist/esm/config.js +15 -3
  33. package/dist/esm/config.js.map +1 -1
  34. package/dist/esm/deploy/buildImage.d.ts +3 -1
  35. package/dist/esm/deploy/buildImage.js +10 -5
  36. package/dist/esm/deploy/buildImage.js.map +1 -1
  37. package/dist/esm/dev/backgroundWorker.d.ts +2 -240
  38. package/dist/esm/dev/backgroundWorker.js +8 -304
  39. package/dist/esm/dev/backgroundWorker.js.map +1 -1
  40. package/dist/esm/dev/devOutput.js +11 -2
  41. package/dist/esm/dev/devOutput.js.map +1 -1
  42. package/dist/esm/dev/devSession.js +14 -4
  43. package/dist/esm/dev/devSession.js.map +1 -1
  44. package/dist/esm/dev/devSupervisor.js +266 -40
  45. package/dist/esm/dev/devSupervisor.js.map +1 -1
  46. package/dist/esm/dev/mcpServer.d.ts +10 -0
  47. package/dist/esm/dev/mcpServer.js +201 -0
  48. package/dist/esm/dev/mcpServer.js.map +1 -0
  49. package/dist/esm/dev/workerRuntime.d.ts +0 -1
  50. package/dist/esm/dev/workerRuntime.js +1 -270
  51. package/dist/esm/dev/workerRuntime.js.map +1 -1
  52. package/dist/esm/entryPoints/dev-run-controller.d.ts +19 -9
  53. package/dist/esm/entryPoints/dev-run-controller.js +148 -101
  54. package/dist/esm/entryPoints/dev-run-controller.js.map +1 -1
  55. package/dist/esm/entryPoints/dev-run-worker.js +39 -20
  56. package/dist/esm/entryPoints/dev-run-worker.js.map +1 -1
  57. package/dist/esm/entryPoints/managed-run-controller.js +15 -31
  58. package/dist/esm/entryPoints/managed-run-controller.js.map +1 -1
  59. package/dist/esm/entryPoints/managed-run-worker.js +16 -8
  60. package/dist/esm/entryPoints/managed-run-worker.js.map +1 -1
  61. package/dist/esm/executions/taskRunProcess.d.ts +1 -69
  62. package/dist/esm/executions/taskRunProcess.js +7 -10
  63. package/dist/esm/executions/taskRunProcess.js.map +1 -1
  64. package/dist/esm/indexing/indexWorkerManifest.d.ts +9 -6
  65. package/dist/esm/indexing/registerTasks.js +3 -0
  66. package/dist/esm/indexing/registerTasks.js.map +1 -1
  67. package/dist/esm/utilities/eventBus.d.ts +8 -5
  68. package/dist/esm/utilities/eventBus.js.map +1 -1
  69. package/dist/esm/utilities/githubActions.d.ts +4 -0
  70. package/dist/esm/utilities/githubActions.js +18 -0
  71. package/dist/esm/utilities/githubActions.js.map +1 -0
  72. package/dist/esm/utilities/logger.d.ts +1 -1
  73. package/dist/esm/version.js +1 -1
  74. package/package.json +10 -6
  75. package/dist/esm/dev/backgroundWorkerEngine2.d.ts +0 -21
  76. package/dist/esm/dev/backgroundWorkerEngine2.js +0 -68
  77. package/dist/esm/dev/backgroundWorkerEngine2.js.map +0 -1
  78. package/dist/esm/entryPoints/deploy-index-controller.d.ts +0 -1
  79. package/dist/esm/entryPoints/deploy-index-controller.js +0 -86
  80. package/dist/esm/entryPoints/deploy-index-controller.js.map +0 -1
  81. package/dist/esm/entryPoints/deploy-index-worker.d.ts +0 -1
  82. package/dist/esm/entryPoints/deploy-index-worker.js +0 -142
  83. package/dist/esm/entryPoints/deploy-index-worker.js.map +0 -1
  84. package/dist/esm/entryPoints/deploy-run-controller.d.ts +0 -1
  85. package/dist/esm/entryPoints/deploy-run-controller.js +0 -1102
  86. package/dist/esm/entryPoints/deploy-run-controller.js.map +0 -1
  87. package/dist/esm/entryPoints/deploy-run-worker.d.ts +0 -1
  88. package/dist/esm/entryPoints/deploy-run-worker.js +0 -367
  89. package/dist/esm/entryPoints/deploy-run-worker.js.map +0 -1
  90. package/dist/esm/entryPoints/unmanaged-index-controller.d.ts +0 -1
  91. package/dist/esm/entryPoints/unmanaged-index-controller.js +0 -86
  92. package/dist/esm/entryPoints/unmanaged-index-controller.js.map +0 -1
  93. package/dist/esm/entryPoints/unmanaged-index-worker.d.ts +0 -1
  94. package/dist/esm/entryPoints/unmanaged-index-worker.js +0 -128
  95. package/dist/esm/entryPoints/unmanaged-index-worker.js.map +0 -1
  96. package/dist/esm/entryPoints/unmanaged-run-controller.d.ts +0 -1
  97. package/dist/esm/entryPoints/unmanaged-run-controller.js +0 -147
  98. package/dist/esm/entryPoints/unmanaged-run-controller.js.map +0 -1
  99. package/dist/esm/entryPoints/unmanaged-run-worker.d.ts +0 -1
  100. package/dist/esm/entryPoints/unmanaged-run-worker.js +0 -360
  101. package/dist/esm/entryPoints/unmanaged-run-worker.js.map +0 -1
@@ -0,0 +1,201 @@
1
+ import polka from "polka";
2
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
4
+ import { z } from "zod";
5
+ import { logger } from "../utilities/logger.js";
6
+ import { ApiClient, RunStatus } from "@trigger.dev/core/v3";
7
+ import { eventBus } from "../utilities/eventBus.js";
8
+ let allTaskIds = [];
9
+ let projectRef;
10
+ let dashboardUrl;
11
+ // there is some overlap between `ApiClient` and `CliApiClient` which is not ideal
12
+ // we can address in this in the future, but for now we need keep using both
13
+ // as `ApiClient` exposes most of the methods needed for the MCP tools
14
+ let sdkApiClient;
15
+ let mcpTransport = null;
16
+ const server = new McpServer({
17
+ name: "trigger.dev",
18
+ version: "1.0.0",
19
+ });
20
+ // The `list-all-tasks` tool primarily helps to enable fuzzy matching of task IDs (names).
21
+ // This way, one doesn't need to specify the full task ID and rather let the LLM figure it out.
22
+ // This could be a good fit for the `resource` entity in MCP.
23
+ // Also, a custom `prompt` entity could be useful to instruct the LLM to prompt the user
24
+ // for selecting a task from a list of matching tasks, when the confidence for an exact match is low.
25
+ server.tool("list-all-tasks", "List all available task IDs in the worker.", async () => {
26
+ return {
27
+ content: [
28
+ {
29
+ text: JSON.stringify(allTaskIds, null, 2),
30
+ type: "text",
31
+ },
32
+ ],
33
+ };
34
+ });
35
+ server.tool("trigger-task", "Trigger a task", {
36
+ id: z.string().describe("The ID of the task to trigger"),
37
+ payload: z
38
+ .string()
39
+ .transform((val, ctx) => {
40
+ try {
41
+ return JSON.parse(val);
42
+ }
43
+ catch {
44
+ ctx.addIssue({
45
+ code: z.ZodIssueCode.custom,
46
+ message: "The payload must be a valid JSON string",
47
+ });
48
+ return z.NEVER;
49
+ }
50
+ })
51
+ .describe("The payload to pass to the task run, must be a valid JSON"),
52
+ // TODO: expose more parameteres from the trigger options
53
+ }, async ({ id, payload }) => {
54
+ const result = await sdkApiClient.triggerTask(id, {
55
+ payload,
56
+ });
57
+ const taskRunUrl = `${dashboardUrl}/projects/v3/${projectRef}/runs/${result.id}`;
58
+ return {
59
+ content: [
60
+ {
61
+ type: "text",
62
+ text: JSON.stringify({ ...result, taskRunUrl }, null, 2),
63
+ },
64
+ ],
65
+ };
66
+ });
67
+ server.tool("list-runs", "List task runs. This returns a paginated list which shows the details of the runs, e.g., status, attempts, cost, etc.", {
68
+ filters: z
69
+ .object({
70
+ status: RunStatus.optional().describe("The status of the run. Can be WAITING_FOR_DEPLOY, QUEUED, EXECUTING, REATTEMPTING, or FROZEN"),
71
+ taskIdentifier: z
72
+ .union([z.array(z.string()), z.string()])
73
+ .optional()
74
+ .describe("The identifier of the task that was run"),
75
+ version: z
76
+ .union([z.array(z.string()), z.string()])
77
+ .optional()
78
+ .describe("The version of the worker that executed the run"),
79
+ from: z
80
+ .union([z.date(), z.number()])
81
+ .optional()
82
+ .describe("Start date/time for filtering runs"),
83
+ to: z.union([z.date(), z.number()]).optional().describe("End date/time for filtering runs"),
84
+ period: z.string().optional().describe("Time period for filtering runs"),
85
+ bulkAction: z
86
+ .string()
87
+ .optional()
88
+ .describe("The bulk action ID to filter the runs by (e.g., bulk_1234)"),
89
+ tag: z
90
+ .union([z.array(z.string()), z.string()])
91
+ .optional()
92
+ .describe("The tags that are attached to the run"),
93
+ schedule: z
94
+ .string()
95
+ .optional()
96
+ .describe("The schedule ID to filter the runs by (e.g., schedule_1234)"),
97
+ isTest: z.boolean().optional().describe("Whether the run is a test run or not"),
98
+ batch: z.string().optional().describe("The batch identifier to filter runs by"),
99
+ })
100
+ .describe("Parameters for listing task runs"),
101
+ }, async ({ filters }) => {
102
+ const { data, pagination } = await sdkApiClient.listRuns(filters);
103
+ return {
104
+ content: [
105
+ {
106
+ type: "text",
107
+ text: JSON.stringify({ data, pagination }, null, 2),
108
+ },
109
+ ],
110
+ };
111
+ });
112
+ server.tool("get-run", "Retrieve the details of a task run, e.g., status, attempts, cost, etc.", {
113
+ runId: z.string().describe("The ID of the task run to get"),
114
+ }, async ({ runId }) => {
115
+ const result = await sdkApiClient.retrieveRun(runId);
116
+ return {
117
+ content: [
118
+ {
119
+ type: "text",
120
+ text: JSON.stringify(result, null, 2),
121
+ },
122
+ ],
123
+ };
124
+ });
125
+ server.tool("cancel-run", "Cancel an in-progress run. Runs that have already completed cannot be cancelled.", {
126
+ runId: z.string().describe("The ID of the task run to cancel"),
127
+ }, async ({ runId }) => {
128
+ const run = await sdkApiClient.retrieveRun(runId);
129
+ if (run?.status === "COMPLETED") {
130
+ return {
131
+ content: [
132
+ {
133
+ type: "text",
134
+ text: JSON.stringify({ message: "This run is already completed, no action taken.", run }, null, 2),
135
+ },
136
+ ],
137
+ };
138
+ }
139
+ await sdkApiClient.cancelRun(runId);
140
+ // we could also skip fetching the run again, but it provides more context to the LLM
141
+ // and one extra API call is no big deal
142
+ const updatedRun = await sdkApiClient.retrieveRun(runId);
143
+ return {
144
+ content: [
145
+ {
146
+ type: "text",
147
+ text: JSON.stringify({
148
+ message: "Task run was cancelled",
149
+ previousStatus: run.status,
150
+ currentStatus: updatedRun.status,
151
+ updatedTaskRun: updatedRun,
152
+ }, null, 2),
153
+ },
154
+ ],
155
+ };
156
+ });
157
+ server.tool("get-run-logs", "Retrieve the logs output of a task run.", {
158
+ runId: z.string().describe("The ID of the task run to get"),
159
+ }, async ({ runId }) => {
160
+ const result = await sdkApiClient.listRunEvents(runId);
161
+ return {
162
+ content: [
163
+ {
164
+ text: JSON.stringify(result, null, 2),
165
+ type: "text",
166
+ },
167
+ ],
168
+ };
169
+ });
170
+ const app = polka();
171
+ app.get("/sse", (_req, res) => {
172
+ mcpTransport = new SSEServerTransport("/messages", res);
173
+ server.connect(mcpTransport);
174
+ });
175
+ app.post("/messages", (req, res) => {
176
+ if (mcpTransport) {
177
+ mcpTransport.handlePostMessage(req, res);
178
+ }
179
+ });
180
+ eventBus.on("backgroundWorkerInitialized", (worker) => {
181
+ allTaskIds = worker.manifest?.tasks.map((task) => task.id) ?? [];
182
+ });
183
+ export const startMcpServer = async (options) => {
184
+ const { apiURL, accessToken } = options.cliApiClient;
185
+ if (!accessToken) {
186
+ logger.error("No access token found in the API client, failed to start the MCP server");
187
+ return;
188
+ }
189
+ sdkApiClient = new ApiClient(apiURL, accessToken);
190
+ projectRef = options.devSession.projectRef;
191
+ dashboardUrl = options.devSession.dashboardUrl;
192
+ app.listen(options.port, () => {
193
+ logger.info(`Trigger.dev MCP Server is now running on port ${options.port} ✨`);
194
+ });
195
+ };
196
+ export const stopMcpServer = () => {
197
+ app.server?.close(() => {
198
+ logger.info(`Trigger.dev MCP Server is now stopped`);
199
+ });
200
+ };
201
+ //# sourceMappingURL=mcpServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpServer.js","sourceRoot":"","sources":["../../../src/dev/mcpServer.ts"],"names":[],"mappings":"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"}
@@ -13,4 +13,3 @@ export type WorkerRuntimeOptions = {
13
13
  client: CliApiClient;
14
14
  dashboardUrl: string;
15
15
  };
16
- export declare function startWorkerRuntime(options: WorkerRuntimeOptions): Promise<WorkerRuntime>;
@@ -1,271 +1,2 @@
1
- import { clientWebsocketMessages, SemanticInternalAttributes, serverWebsocketMessages, } from "@trigger.dev/core/v3";
2
- import { ZodMessageHandler, ZodMessageSender, } from "@trigger.dev/core/v3/zodMessageHandler";
3
- import { WebSocket } from "partysocket";
4
- import { WebSocket as wsWebSocket } from "ws";
5
- import { chalkError, chalkTask } from "../utilities/cliOutput.js";
6
- import { resolveDotEnvVars } from "../utilities/dotEnv.js";
7
- import { eventBus } from "../utilities/eventBus.js";
8
- import { logger } from "../utilities/logger.js";
9
- import { resolveSourceFiles } from "../utilities/sourceFiles.js";
10
- import { BackgroundWorker, BackgroundWorkerCoordinator } from "./backgroundWorker.js";
11
- import { sanitizeEnvVars } from "../utilities/sanitizeEnvVars.js";
12
- import { VERSION } from "../version.js";
13
- export async function startWorkerRuntime(options) {
14
- const runtime = new DevWorkerRuntime(options);
15
- await runtime.init();
16
- return runtime;
17
- }
18
- class DevWorkerRuntime {
19
- options;
20
- websocket;
21
- backgroundWorkerCoordinator;
22
- sender;
23
- websocketMessageHandler;
24
- lastBuild;
25
- constructor(options) {
26
- this.options = options;
27
- const websocketUrl = new URL(this.options.client.apiURL);
28
- websocketUrl.protocol = websocketUrl.protocol.replace("http", "ws");
29
- websocketUrl.pathname = `/ws`;
30
- this.sender = new ZodMessageSender({
31
- schema: clientWebsocketMessages,
32
- sender: async (message) => {
33
- this.websocket.send(JSON.stringify(message));
34
- },
35
- });
36
- this.backgroundWorkerCoordinator = new BackgroundWorkerCoordinator();
37
- this.backgroundWorkerCoordinator.onWorkerTaskRunHeartbeat.attach(async ({ worker, backgroundWorkerId, id }) => {
38
- await this.sender.send("BACKGROUND_WORKER_MESSAGE", {
39
- backgroundWorkerId,
40
- data: {
41
- type: "TASK_RUN_HEARTBEAT",
42
- id,
43
- },
44
- });
45
- });
46
- this.backgroundWorkerCoordinator.onTaskCompleted.attach(async ({ backgroundWorkerId, completion, execution }) => {
47
- await this.sender.send("BACKGROUND_WORKER_MESSAGE", {
48
- backgroundWorkerId,
49
- data: {
50
- type: "TASK_RUN_COMPLETED",
51
- completion,
52
- execution,
53
- },
54
- });
55
- });
56
- this.backgroundWorkerCoordinator.onTaskFailedToRun.attach(async ({ backgroundWorkerId, completion }) => {
57
- await this.sender.send("BACKGROUND_WORKER_MESSAGE", {
58
- backgroundWorkerId,
59
- data: {
60
- type: "TASK_RUN_FAILED_TO_RUN",
61
- completion,
62
- },
63
- });
64
- });
65
- this.backgroundWorkerCoordinator.onWorkerRegistered.attach(async ({ id, worker, record }) => {
66
- await this.sender.send("READY_FOR_TASKS", {
67
- backgroundWorkerId: id,
68
- });
69
- });
70
- this.websocketMessageHandler = new ZodMessageHandler({
71
- schema: serverWebsocketMessages,
72
- messages: {
73
- SERVER_READY: async (payload) => {
74
- await this.#serverReady(payload);
75
- },
76
- BACKGROUND_WORKER_MESSAGE: async (payload) => {
77
- await this.#backgroundWorkerMessage(payload);
78
- },
79
- },
80
- });
81
- this.websocket = new WebSocket(websocketUrl.href, [], {
82
- WebSocket: WebsocketFactory(this.options.client.accessToken),
83
- connectionTimeout: 10000,
84
- maxRetries: 64,
85
- minReconnectionDelay: 1000,
86
- maxReconnectionDelay: 5000,
87
- reconnectionDelayGrowFactor: 1.4,
88
- maxEnqueuedMessages: 1250,
89
- });
90
- this.websocket.addEventListener("open", async (event) => {
91
- logger.debug("WebSocket opened", { event });
92
- });
93
- this.websocket.addEventListener("close", (event) => {
94
- logger.debug("WebSocket closed", { event });
95
- });
96
- this.websocket.addEventListener("error", (event) => {
97
- logger.debug(`${chalkError("WebSocketError:")} ${event.error.message}`);
98
- });
99
- this.websocket.addEventListener("message", this.#handleWebsocketMessage.bind(this));
100
- }
101
- async init() {
102
- logger.debug("initialized worker runtime", { options: this.options });
103
- }
104
- async shutdown() {
105
- try {
106
- if (this.websocket.readyState === WebSocket.OPEN ||
107
- this.websocket.readyState === WebSocket.CONNECTING) {
108
- this.websocket.close();
109
- }
110
- }
111
- catch (error) {
112
- logger.debug("Error while shutting down worker runtime", { error });
113
- }
114
- }
115
- async initializeWorker(manifest, stop) {
116
- if (this.lastBuild && this.lastBuild.contentHash === manifest.contentHash) {
117
- eventBus.emit("workerSkipped");
118
- stop();
119
- return;
120
- }
121
- const env = await this.#getEnvVars();
122
- const backgroundWorker = new BackgroundWorker(manifest, {
123
- env,
124
- cwd: this.options.config.workingDir,
125
- stop,
126
- });
127
- await backgroundWorker.initialize();
128
- if (!backgroundWorker.manifest) {
129
- stop();
130
- throw new Error("Could not initialize worker");
131
- }
132
- const issues = validateWorkerManifest(backgroundWorker.manifest);
133
- if (issues.length > 0) {
134
- issues.forEach((issue) => logger.error(issue));
135
- stop();
136
- return;
137
- }
138
- const sourceFiles = resolveSourceFiles(manifest.sources, backgroundWorker.manifest.tasks);
139
- const backgroundWorkerBody = {
140
- localOnly: true,
141
- metadata: {
142
- packageVersion: manifest.packageVersion,
143
- cliPackageVersion: manifest.cliPackageVersion,
144
- tasks: backgroundWorker.manifest.tasks,
145
- contentHash: manifest.contentHash,
146
- sourceFiles,
147
- },
148
- supportsLazyAttempts: true,
149
- };
150
- const backgroundWorkerRecord = await this.options.client.createBackgroundWorker(this.options.config.project, backgroundWorkerBody);
151
- if (!backgroundWorkerRecord.success) {
152
- stop();
153
- throw new Error(backgroundWorkerRecord.error);
154
- }
155
- backgroundWorker.serverWorker = backgroundWorkerRecord.data;
156
- this.backgroundWorkerCoordinator.registerWorker(backgroundWorker);
157
- this.lastBuild = manifest;
158
- // eventBus.emit("backgroundWorkerInitialized", backgroundWorker);
159
- }
160
- async #getEnvVars() {
161
- const environmentVariablesResponse = await this.options.client.getEnvironmentVariables(this.options.config.project);
162
- const processEnv = gatherProcessEnv();
163
- const dotEnvVars = resolveDotEnvVars(undefined, this.options.args.envFile);
164
- const OTEL_IMPORT_HOOK_INCLUDES = (this.options.config.instrumentedPackageNames ?? []).join(",");
165
- return {
166
- ...sanitizeEnvVars(processEnv),
167
- ...sanitizeEnvVars(environmentVariablesResponse.success ? environmentVariablesResponse.data.variables : {}),
168
- ...sanitizeEnvVars(dotEnvVars),
169
- TRIGGER_API_URL: this.options.client.apiURL,
170
- TRIGGER_SECRET_KEY: this.options.client.accessToken,
171
- OTEL_EXPORTER_OTLP_COMPRESSION: "none",
172
- OTEL_RESOURCE_ATTRIBUTES: JSON.stringify({
173
- [SemanticInternalAttributes.PROJECT_DIR]: this.options.config.workingDir,
174
- }),
175
- OTEL_IMPORT_HOOK_INCLUDES,
176
- };
177
- }
178
- async #handleWebsocketMessage(event) {
179
- try {
180
- const data = JSON.parse(typeof event.data === "string" ? event.data : new TextDecoder("utf-8").decode(event.data));
181
- await this.websocketMessageHandler.handleMessage(data);
182
- }
183
- catch (error) {
184
- if (error instanceof Error) {
185
- logger.error("Error while handling websocket message", { error: error.message });
186
- }
187
- else {
188
- logger.error("Unkown error while handling websocket message, use `-l debug` for additional output");
189
- logger.debug("Error while handling websocket message", { error });
190
- }
191
- }
192
- }
193
- async #serverReady(payload) {
194
- for (const worker of this.backgroundWorkerCoordinator.currentWorkers) {
195
- await this.sender.send("READY_FOR_TASKS", {
196
- backgroundWorkerId: worker.id,
197
- inProgressRuns: worker.worker.inProgressRuns,
198
- });
199
- }
200
- }
201
- async #backgroundWorkerMessage(payload) {
202
- const message = payload.data;
203
- logger.debug(`Received message from worker ${payload.backgroundWorkerId}`, JSON.stringify({ workerMessage: message }));
204
- switch (message.type) {
205
- case "CANCEL_ATTEMPT": {
206
- // Need to cancel the attempt somehow here
207
- this.backgroundWorkerCoordinator.cancelRun(payload.backgroundWorkerId, message.taskRunId);
208
- break;
209
- }
210
- case "EXECUTE_RUN_LAZY_ATTEMPT": {
211
- await this.#executeTaskRunLazyAttempt(payload.backgroundWorkerId, message.payload);
212
- }
213
- }
214
- }
215
- async #executeTaskRunLazyAttempt(id, payload) {
216
- const attemptResponse = await this.options.client.createTaskRunAttempt(payload.runId);
217
- if (!attemptResponse.success) {
218
- throw new Error(`Failed to create task run attempt: ${attemptResponse.error}`);
219
- }
220
- const execution = attemptResponse.data;
221
- logger.debug("Executing task run lazy attempt", { execution });
222
- const completion = await this.backgroundWorkerCoordinator.executeTaskRun(id, { execution, traceContext: payload.traceContext, environment: payload.environment }, payload.messageId);
223
- return { execution, completion };
224
- }
225
- }
226
- function WebsocketFactory(apiKey) {
227
- return class extends wsWebSocket {
228
- constructor(address, options) {
229
- super(address, {
230
- ...(options ?? {}),
231
- headers: {
232
- Authorization: `Bearer ${apiKey}`,
233
- "User-Agent": `trigger.dev-cli/${VERSION}`,
234
- },
235
- });
236
- }
237
- };
238
- }
239
- function gatherProcessEnv() {
240
- const $env = {
241
- ...process.env,
242
- NODE_ENV: "development",
243
- };
244
- // Filter out undefined values
245
- return Object.fromEntries(Object.entries($env).filter(([key, value]) => value !== undefined));
246
- }
247
- function validateWorkerManifest(manifest) {
248
- const issues = [];
249
- if (!manifest.tasks || manifest.tasks.length === 0) {
250
- issues.push("No tasks defined. Make sure you are exporting tasks.");
251
- }
252
- // Check for any duplicate task ids
253
- const taskIds = manifest.tasks.map((task) => task.id);
254
- const duplicateTaskIds = taskIds.filter((id, index) => taskIds.indexOf(id) !== index);
255
- if (duplicateTaskIds.length > 0) {
256
- issues.push(createDuplicateTaskIdOutputErrorMessage(duplicateTaskIds, manifest.tasks));
257
- }
258
- return issues;
259
- }
260
- function createDuplicateTaskIdOutputErrorMessage(duplicateTaskIds, tasks) {
261
- const duplicateTable = duplicateTaskIds
262
- .map((id) => {
263
- const $tasks = tasks.filter((task) => task.id === id);
264
- return `\n\n${chalkTask(id)} was found in:${tasks
265
- .map((task) => `\n${task.filePath} -> ${task.exportName}`)
266
- .join("")}`;
267
- })
268
- .join("");
269
- return `Duplicate ${chalkTask("task id")} detected:${duplicateTable}`;
270
- }
1
+ export {};
271
2
  //# sourceMappingURL=workerRuntime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"workerRuntime.js","sourceRoot":"","sources":["../../../src/dev/workerRuntime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workerRuntime.js","sourceRoot":"","sources":["../../../src/dev/workerRuntime.ts"],"names":[],"mappings":""}
@@ -1,43 +1,53 @@
1
- import { BuildManifest, DequeuedMessage, WorkerManifest } from "@trigger.dev/core/v3";
1
+ import { DequeuedMessage, LogLevel } from "@trigger.dev/core/v3";
2
2
  import { CliApiClient } from "../apiClient.js";
3
+ import { BackgroundWorker } from "../dev/backgroundWorker.js";
3
4
  type DevRunControllerOptions = {
4
5
  runFriendlyId: string;
5
- workerManifest: WorkerManifest;
6
- buildManifest: BuildManifest;
7
- envVars: Record<string, string>;
8
- version: string;
6
+ worker: BackgroundWorker;
9
7
  httpClient: CliApiClient;
8
+ logLevel: LogLevel;
10
9
  heartbeatIntervalSeconds?: number;
10
+ onSubscribeToRunNotifications: (run: Run, snapshot: Snapshot) => void;
11
+ onUnsubscribeFromRunNotifications: (run: Run, snapshot: Snapshot) => void;
11
12
  onFinished: () => void;
12
13
  };
14
+ type Run = {
15
+ friendlyId: string;
16
+ attemptNumber?: number | null;
17
+ };
18
+ type Snapshot = {
19
+ friendlyId: string;
20
+ };
13
21
  export declare class DevRunController {
14
22
  private readonly opts;
15
23
  private taskRunProcess?;
16
- private workerManifest;
24
+ private readonly worker;
17
25
  private readonly httpClient;
18
26
  private readonly runHeartbeat;
19
27
  private readonly heartbeatIntervalSeconds;
20
28
  private readonly snapshotPoller;
21
29
  private readonly snapshotPollIntervalSeconds;
22
- private readonly envVars;
23
30
  private state;
24
31
  private enterRunPhase;
25
32
  constructor(opts: DevRunControllerOptions);
33
+ private sigterm;
26
34
  private updateRunPhase;
27
35
  private onExitRunPhase;
28
36
  private subscribeToRunNotifications;
29
37
  private unsubscribeFromRunNotifications;
30
38
  private get runFriendlyId();
31
39
  private get snapshotFriendlyId();
40
+ get workerFriendlyId(): string;
32
41
  private handleSnapshotChangeLock;
33
42
  private handleSnapshotChange;
34
43
  private startAndExecuteRunAttempt;
35
44
  private executeRun;
36
45
  private handleCompletionResult;
37
- private handleWait;
38
46
  private runFinished;
39
- cancelAttempt(runId: string): Promise<void>;
47
+ private cancelAttempt;
40
48
  start(dequeueMessage: DequeuedMessage): Promise<void>;
41
49
  stop(): Promise<void>;
50
+ getLatestSnapshot(): Promise<void>;
51
+ resubscribeToRunNotifications(): void;
42
52
  }
43
53
  export {};