trigger.dev 0.0.0-v3-prerelease-20250108142426 → 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.
- 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 +482 -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 +141 -0
- package/dist/esm/entryPoints/managed/execution.js +869 -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 +51 -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
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { readFile } from "../utilities/fileSystem.js";
|
|
3
|
+
import { tryCatch } from "@trigger.dev/core/utils";
|
|
4
|
+
import { logger } from "../utilities/logger.js";
|
|
5
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
6
|
+
import { existsSync, unlinkSync } from "node:fs";
|
|
7
|
+
import { onExit } from "signal-exit";
|
|
8
|
+
const LOCK_FILE_NAME = "dev.lock";
|
|
9
|
+
export async function createLockFile(cwd) {
|
|
10
|
+
const currentPid = process.pid;
|
|
11
|
+
const lockFilePath = path.join(cwd, ".trigger", LOCK_FILE_NAME);
|
|
12
|
+
logger.debug("Checking for lockfile", { lockFilePath, currentPid });
|
|
13
|
+
const removeLockFile = () => {
|
|
14
|
+
try {
|
|
15
|
+
logger.debug("Removing lockfile", { lockFilePath });
|
|
16
|
+
return unlinkSync(lockFilePath);
|
|
17
|
+
}
|
|
18
|
+
catch (e) {
|
|
19
|
+
// This sometimes fails on Windows with EBUSY
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
const removeExitListener = onExit(removeLockFile);
|
|
23
|
+
const [, existingLockfileContents] = await tryCatch(readFile(lockFilePath));
|
|
24
|
+
if (existingLockfileContents) {
|
|
25
|
+
// Read the pid number from the lockfile
|
|
26
|
+
const existingPid = Number(existingLockfileContents);
|
|
27
|
+
logger.debug("Lockfile exists", { lockFilePath, existingPid, currentPid });
|
|
28
|
+
if (existingPid === currentPid) {
|
|
29
|
+
logger.debug("Lockfile exists and is owned by current process", {
|
|
30
|
+
lockFilePath,
|
|
31
|
+
existingPid,
|
|
32
|
+
currentPid,
|
|
33
|
+
});
|
|
34
|
+
return () => {
|
|
35
|
+
removeExitListener();
|
|
36
|
+
removeLockFile();
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
// If the pid is different, try and kill the existing pid
|
|
40
|
+
logger.debug("Lockfile exists and is owned by another process, killing it", {
|
|
41
|
+
lockFilePath,
|
|
42
|
+
existingPid,
|
|
43
|
+
currentPid,
|
|
44
|
+
});
|
|
45
|
+
try {
|
|
46
|
+
process.kill(existingPid);
|
|
47
|
+
// If it did kill the process, it will have exited, deleting the lockfile, so let's wait for that to happen
|
|
48
|
+
// But let's not wait forever
|
|
49
|
+
await new Promise((resolve, reject) => {
|
|
50
|
+
const timeout = setTimeout(() => {
|
|
51
|
+
clearInterval(interval);
|
|
52
|
+
reject(new Error("Timed out waiting for lockfile to be deleted"));
|
|
53
|
+
}, 5000);
|
|
54
|
+
const interval = setInterval(() => {
|
|
55
|
+
if (!existsSync(lockFilePath)) {
|
|
56
|
+
clearInterval(interval);
|
|
57
|
+
clearTimeout(timeout);
|
|
58
|
+
resolve(true);
|
|
59
|
+
}
|
|
60
|
+
}, 100);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
logger.debug("Failed to kill existing process, lets assume it's not running", { error });
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Now write the current pid to the lockfile
|
|
68
|
+
await writeFileAndEnsureDirExists(lockFilePath, currentPid.toString());
|
|
69
|
+
logger.debug("Lockfile created", { lockFilePath, currentPid });
|
|
70
|
+
return () => {
|
|
71
|
+
removeExitListener();
|
|
72
|
+
removeLockFile();
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
async function writeFileAndEnsureDirExists(filePath, data) {
|
|
76
|
+
const dir = path.dirname(filePath);
|
|
77
|
+
await mkdir(dir, { recursive: true });
|
|
78
|
+
await writeFile(filePath, data);
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../../src/dev/lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { CliApiClient } from "../apiClient.js";
|
|
2
|
+
export declare const startMcpServer: (options: {
|
|
3
|
+
port: number;
|
|
4
|
+
cliApiClient: CliApiClient;
|
|
5
|
+
devSession: {
|
|
6
|
+
dashboardUrl: string;
|
|
7
|
+
projectRef: string;
|
|
8
|
+
};
|
|
9
|
+
}) => Promise<void>;
|
|
10
|
+
export declare const stopMcpServer: () => void;
|
|
@@ -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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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { MachinePresetResources, ServerBackgroundWorker, WorkerManifest } from "@trigger.dev/core/v3";
|
|
2
|
+
import { TaskRunProcess } from "../executions/taskRunProcess.js";
|
|
3
|
+
export type TaskRunProcessPoolOptions = {
|
|
4
|
+
env: Record<string, string>;
|
|
5
|
+
cwd: string;
|
|
6
|
+
enableProcessReuse: boolean;
|
|
7
|
+
maxPoolSize?: number;
|
|
8
|
+
maxExecutionsPerProcess?: number;
|
|
9
|
+
};
|
|
10
|
+
export declare class TaskRunProcessPool {
|
|
11
|
+
private availableProcessesByVersion;
|
|
12
|
+
private busyProcessesByVersion;
|
|
13
|
+
private readonly options;
|
|
14
|
+
private readonly maxPoolSize;
|
|
15
|
+
private readonly maxExecutionsPerProcess;
|
|
16
|
+
private readonly executionCountsPerProcess;
|
|
17
|
+
private readonly deprecatedVersions;
|
|
18
|
+
constructor(options: TaskRunProcessPoolOptions);
|
|
19
|
+
deprecateVersion(version: string): void;
|
|
20
|
+
getProcess(workerManifest: WorkerManifest, serverWorker: ServerBackgroundWorker, machineResources: MachinePresetResources, env?: Record<string, string>, cwd?: string): Promise<{
|
|
21
|
+
taskRunProcess: TaskRunProcess;
|
|
22
|
+
isReused: boolean;
|
|
23
|
+
}>;
|
|
24
|
+
returnProcess(process: TaskRunProcess, version: string): Promise<void>;
|
|
25
|
+
private findReusableProcess;
|
|
26
|
+
private shouldReuseProcess;
|
|
27
|
+
private isProcessHealthy;
|
|
28
|
+
private killProcess;
|
|
29
|
+
shutdown(): Promise<void>;
|
|
30
|
+
getStats(): {
|
|
31
|
+
availableCount: number;
|
|
32
|
+
busyCount: number;
|
|
33
|
+
totalCount: number;
|
|
34
|
+
byVersion: Record<string, {
|
|
35
|
+
available: number;
|
|
36
|
+
busy: number;
|
|
37
|
+
}>;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { TaskRunProcess } from "../executions/taskRunProcess.js";
|
|
2
|
+
import { logger } from "../utilities/logger.js";
|
|
3
|
+
export class TaskRunProcessPool {
|
|
4
|
+
// Group processes by worker version
|
|
5
|
+
availableProcessesByVersion = new Map();
|
|
6
|
+
busyProcessesByVersion = new Map();
|
|
7
|
+
options;
|
|
8
|
+
maxPoolSize;
|
|
9
|
+
maxExecutionsPerProcess;
|
|
10
|
+
executionCountsPerProcess = new Map();
|
|
11
|
+
deprecatedVersions = new Set();
|
|
12
|
+
constructor(options) {
|
|
13
|
+
this.options = options;
|
|
14
|
+
this.maxPoolSize = options.maxPoolSize ?? 3;
|
|
15
|
+
this.maxExecutionsPerProcess = options.maxExecutionsPerProcess ?? 50;
|
|
16
|
+
}
|
|
17
|
+
deprecateVersion(version) {
|
|
18
|
+
this.deprecatedVersions.add(version);
|
|
19
|
+
logger.debug("[TaskRunProcessPool] Deprecating version", { version });
|
|
20
|
+
const versionProcesses = this.availableProcessesByVersion.get(version) || [];
|
|
21
|
+
const processesToKill = versionProcesses.filter((process) => !process.isExecuting());
|
|
22
|
+
Promise.all(processesToKill.map((process) => this.killProcess(process))).then(() => {
|
|
23
|
+
this.availableProcessesByVersion.delete(version);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
async getProcess(workerManifest, serverWorker, machineResources, env, cwd) {
|
|
27
|
+
const version = serverWorker.version || "unknown";
|
|
28
|
+
// Try to reuse an existing process if enabled
|
|
29
|
+
if (this.options.enableProcessReuse) {
|
|
30
|
+
const reusableProcess = this.findReusableProcess(version);
|
|
31
|
+
if (reusableProcess) {
|
|
32
|
+
const availableCount = this.availableProcessesByVersion.get(version)?.length || 0;
|
|
33
|
+
const busyCount = this.busyProcessesByVersion.get(version)?.size || 0;
|
|
34
|
+
logger.debug("[TaskRunProcessPool] Reusing existing process", {
|
|
35
|
+
version,
|
|
36
|
+
availableCount,
|
|
37
|
+
busyCount,
|
|
38
|
+
});
|
|
39
|
+
// Remove from available and add to busy for this version
|
|
40
|
+
const availableProcesses = this.availableProcessesByVersion.get(version) || [];
|
|
41
|
+
this.availableProcessesByVersion.set(version, availableProcesses.filter((p) => p !== reusableProcess));
|
|
42
|
+
if (!this.busyProcessesByVersion.has(version)) {
|
|
43
|
+
this.busyProcessesByVersion.set(version, new Set());
|
|
44
|
+
}
|
|
45
|
+
this.busyProcessesByVersion.get(version).add(reusableProcess);
|
|
46
|
+
return { taskRunProcess: reusableProcess, isReused: true };
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
const availableCount = this.availableProcessesByVersion.get(version)?.length || 0;
|
|
50
|
+
const busyCount = this.busyProcessesByVersion.get(version)?.size || 0;
|
|
51
|
+
logger.debug("[TaskRunProcessPool] No reusable process found", {
|
|
52
|
+
version,
|
|
53
|
+
availableCount,
|
|
54
|
+
busyCount,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Create new process
|
|
59
|
+
const availableCount = this.availableProcessesByVersion.get(version)?.length || 0;
|
|
60
|
+
const busyCount = this.busyProcessesByVersion.get(version)?.size || 0;
|
|
61
|
+
logger.debug("[TaskRunProcessPool] Creating new process", {
|
|
62
|
+
version,
|
|
63
|
+
availableCount,
|
|
64
|
+
busyCount,
|
|
65
|
+
workerManifest,
|
|
66
|
+
});
|
|
67
|
+
const newProcess = new TaskRunProcess({
|
|
68
|
+
workerManifest,
|
|
69
|
+
env: {
|
|
70
|
+
...this.options.env,
|
|
71
|
+
...env,
|
|
72
|
+
},
|
|
73
|
+
serverWorker,
|
|
74
|
+
machineResources,
|
|
75
|
+
cwd: cwd ?? this.options.cwd,
|
|
76
|
+
}).initialize();
|
|
77
|
+
// Add to busy processes for this version
|
|
78
|
+
if (!this.busyProcessesByVersion.has(version)) {
|
|
79
|
+
this.busyProcessesByVersion.set(version, new Set());
|
|
80
|
+
}
|
|
81
|
+
this.busyProcessesByVersion.get(version).add(newProcess);
|
|
82
|
+
return { taskRunProcess: newProcess, isReused: false };
|
|
83
|
+
}
|
|
84
|
+
async returnProcess(process, version) {
|
|
85
|
+
// Remove from busy processes for this version
|
|
86
|
+
const busyProcesses = this.busyProcessesByVersion.get(version);
|
|
87
|
+
if (busyProcesses) {
|
|
88
|
+
busyProcesses.delete(process);
|
|
89
|
+
}
|
|
90
|
+
if (process.pid) {
|
|
91
|
+
this.executionCountsPerProcess.set(process.pid, (this.executionCountsPerProcess.get(process.pid) ?? 0) + 1);
|
|
92
|
+
}
|
|
93
|
+
if (this.shouldReuseProcess(process, version)) {
|
|
94
|
+
const availableCount = this.availableProcessesByVersion.get(version)?.length || 0;
|
|
95
|
+
const busyCount = this.busyProcessesByVersion.get(version)?.size || 0;
|
|
96
|
+
logger.debug("[TaskRunProcessPool] Returning process to pool", {
|
|
97
|
+
version,
|
|
98
|
+
availableCount,
|
|
99
|
+
busyCount,
|
|
100
|
+
});
|
|
101
|
+
// Clean up but don't kill the process
|
|
102
|
+
try {
|
|
103
|
+
await process.cleanup(false);
|
|
104
|
+
// Add to available processes for this version
|
|
105
|
+
if (!this.availableProcessesByVersion.has(version)) {
|
|
106
|
+
this.availableProcessesByVersion.set(version, []);
|
|
107
|
+
}
|
|
108
|
+
this.availableProcessesByVersion.get(version).push(process);
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
logger.debug("[TaskRunProcessPool] Failed to cleanup process for reuse, killing it", {
|
|
112
|
+
error,
|
|
113
|
+
});
|
|
114
|
+
await this.killProcess(process);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
const availableCount = this.availableProcessesByVersion.get(version)?.length || 0;
|
|
119
|
+
const busyCount = this.busyProcessesByVersion.get(version)?.size || 0;
|
|
120
|
+
logger.debug("[TaskRunProcessPool] Killing process", {
|
|
121
|
+
version,
|
|
122
|
+
availableCount,
|
|
123
|
+
busyCount,
|
|
124
|
+
});
|
|
125
|
+
await this.killProcess(process);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
findReusableProcess(version) {
|
|
129
|
+
const availableProcesses = this.availableProcessesByVersion.get(version) || [];
|
|
130
|
+
return availableProcesses.find((process) => this.isProcessHealthy(process));
|
|
131
|
+
}
|
|
132
|
+
shouldReuseProcess(process, version) {
|
|
133
|
+
const isHealthy = this.isProcessHealthy(process);
|
|
134
|
+
const isBeingKilled = process.isBeingKilled;
|
|
135
|
+
const pid = process.pid;
|
|
136
|
+
const executionCount = this.executionCountsPerProcess.get(pid ?? 0) ?? 0;
|
|
137
|
+
const availableCount = this.availableProcessesByVersion.get(version)?.length || 0;
|
|
138
|
+
const busyCount = this.busyProcessesByVersion.get(version)?.size || 0;
|
|
139
|
+
const isDeprecated = this.deprecatedVersions.has(version);
|
|
140
|
+
logger.debug("[TaskRunProcessPool] Checking if process should be reused", {
|
|
141
|
+
version,
|
|
142
|
+
isHealthy,
|
|
143
|
+
isBeingKilled,
|
|
144
|
+
pid,
|
|
145
|
+
availableCount,
|
|
146
|
+
busyCount,
|
|
147
|
+
maxPoolSize: this.maxPoolSize,
|
|
148
|
+
executionCount,
|
|
149
|
+
isDeprecated,
|
|
150
|
+
});
|
|
151
|
+
return (this.options.enableProcessReuse &&
|
|
152
|
+
this.isProcessHealthy(process) &&
|
|
153
|
+
availableCount < this.maxPoolSize &&
|
|
154
|
+
executionCount < this.maxExecutionsPerProcess &&
|
|
155
|
+
!isDeprecated);
|
|
156
|
+
}
|
|
157
|
+
isProcessHealthy(process) {
|
|
158
|
+
// Basic health checks - we can expand this later
|
|
159
|
+
return process.isHealthy;
|
|
160
|
+
}
|
|
161
|
+
async killProcess(process) {
|
|
162
|
+
if (!process.isHealthy) {
|
|
163
|
+
logger.debug("[TaskRunProcessPool] Process is not healthy, skipping cleanup", {
|
|
164
|
+
processId: process.pid,
|
|
165
|
+
});
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
try {
|
|
169
|
+
await process.cleanup(true);
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
logger.debug("[TaskRunProcessPool] Error killing process", { error });
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
async shutdown() {
|
|
176
|
+
const totalAvailable = Array.from(this.availableProcessesByVersion.values()).reduce((sum, processes) => sum + processes.length, 0);
|
|
177
|
+
const totalBusy = Array.from(this.busyProcessesByVersion.values()).reduce((sum, processes) => sum + processes.size, 0);
|
|
178
|
+
logger.debug("[TaskRunProcessPool] Shutting down pool", {
|
|
179
|
+
availableCount: totalAvailable,
|
|
180
|
+
busyCount: totalBusy,
|
|
181
|
+
versions: Array.from(this.availableProcessesByVersion.keys()),
|
|
182
|
+
});
|
|
183
|
+
// Kill all available processes across all versions
|
|
184
|
+
const allAvailableProcesses = Array.from(this.availableProcessesByVersion.values()).flat();
|
|
185
|
+
await Promise.all(allAvailableProcesses.map((process) => this.killProcess(process)));
|
|
186
|
+
this.availableProcessesByVersion.clear();
|
|
187
|
+
// Kill all busy processes across all versions
|
|
188
|
+
const allBusyProcesses = Array.from(this.busyProcessesByVersion.values())
|
|
189
|
+
.map((processSet) => Array.from(processSet))
|
|
190
|
+
.flat();
|
|
191
|
+
await Promise.all(allBusyProcesses.map((process) => this.killProcess(process)));
|
|
192
|
+
this.busyProcessesByVersion.clear();
|
|
193
|
+
}
|
|
194
|
+
getStats() {
|
|
195
|
+
const totalAvailable = Array.from(this.availableProcessesByVersion.values()).reduce((sum, processes) => sum + processes.length, 0);
|
|
196
|
+
const totalBusy = Array.from(this.busyProcessesByVersion.values()).reduce((sum, processes) => sum + processes.size, 0);
|
|
197
|
+
const statsByVersion = {};
|
|
198
|
+
for (const [version, processes] of this.availableProcessesByVersion.entries()) {
|
|
199
|
+
statsByVersion[version] = {
|
|
200
|
+
available: processes.length,
|
|
201
|
+
busy: this.busyProcessesByVersion.get(version)?.size || 0,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
for (const [version, processes] of this.busyProcessesByVersion.entries()) {
|
|
205
|
+
if (!statsByVersion[version]) {
|
|
206
|
+
statsByVersion[version] = {
|
|
207
|
+
available: 0,
|
|
208
|
+
busy: processes.size,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return {
|
|
213
|
+
availableCount: totalAvailable,
|
|
214
|
+
busyCount: totalBusy,
|
|
215
|
+
totalCount: totalAvailable + totalBusy,
|
|
216
|
+
byVersion: statsByVersion,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=taskRunProcessPool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taskRunProcessPool.js","sourceRoot":"","sources":["../../../src/dev/taskRunProcessPool.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,10 @@ import { BuildManifest } from "@trigger.dev/core/v3";
|
|
|
2
2
|
import { ResolvedConfig } from "@trigger.dev/core/v3/build";
|
|
3
3
|
import { CliApiClient } from "../apiClient.js";
|
|
4
4
|
import { DevCommandOptions } from "../commands/dev.js";
|
|
5
|
+
import type { Metafile } from "esbuild";
|
|
5
6
|
export interface WorkerRuntime {
|
|
6
7
|
shutdown(): Promise<void>;
|
|
7
|
-
initializeWorker(manifest: BuildManifest): Promise<void>;
|
|
8
|
+
initializeWorker(manifest: BuildManifest, metafile: Metafile, stop: () => void): Promise<void>;
|
|
8
9
|
}
|
|
9
10
|
export type WorkerRuntimeOptions = {
|
|
10
11
|
name: string | undefined;
|
|
@@ -13,4 +14,3 @@ export type WorkerRuntimeOptions = {
|
|
|
13
14
|
client: CliApiClient;
|
|
14
15
|
dashboardUrl: string;
|
|
15
16
|
};
|
|
16
|
-
export declare function startWorkerRuntime(options: WorkerRuntimeOptions): Promise<WorkerRuntime>;
|