terse-cli 0.1.69 → 0.1.71
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/dist/cliUi.d.ts +8 -0
- package/dist/cliUi.d.ts.map +1 -1
- package/dist/cliUi.js +44 -0
- package/dist/cliUi.js.map +1 -1
- package/dist/codegen.d.ts +0 -15
- package/dist/codegen.d.ts.map +1 -1
- package/dist/codegen.js +81 -466
- package/dist/codegen.js.map +1 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +13 -0
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/resume.d.ts +5 -0
- package/dist/commands/resume.d.ts.map +1 -0
- package/dist/commands/resume.js +29 -0
- package/dist/commands/resume.js.map +1 -0
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +5 -2
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/test.d.ts.map +1 -1
- package/dist/commands/test.js +19 -12
- package/dist/commands/test.js.map +1 -1
- package/dist/deploy.d.ts +1 -2
- package/dist/deploy.d.ts.map +1 -1
- package/dist/deploy.js +38 -61
- package/dist/deploy.js.map +1 -1
- package/dist/generate.d.ts +1 -2
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +69 -67
- package/dist/generate.js.map +1 -1
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +1 -2
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +96 -45
- package/dist/init.js.map +1 -1
- package/dist/integrate.d.ts +0 -1
- package/dist/integrate.d.ts.map +1 -1
- package/dist/integrate.js +11 -191
- package/dist/integrate.js.map +1 -1
- package/dist/jsonOutput.d.ts +19 -0
- package/dist/jsonOutput.d.ts.map +1 -0
- package/dist/jsonOutput.js +25 -0
- package/dist/jsonOutput.js.map +1 -0
- package/dist/nonInteractive.d.ts +2 -4
- package/dist/nonInteractive.d.ts.map +1 -1
- package/dist/nonInteractive.js +2 -5
- package/dist/nonInteractive.js.map +1 -1
- package/dist/providers/LanguageProvider.d.ts +13 -0
- package/dist/providers/LanguageProvider.d.ts.map +1 -1
- package/dist/providers/python/PythonProvider.js +0 -1
- package/dist/providers/python/PythonProvider.js.map +1 -1
- package/dist/providers/typescript/TypeScriptProvider.d.ts +13 -0
- package/dist/providers/typescript/TypeScriptProvider.d.ts.map +1 -1
- package/dist/providers/typescript/TypeScriptProvider.js +32 -95
- package/dist/providers/typescript/TypeScriptProvider.js.map +1 -1
- package/dist/providers/typescript/durableRuntime.d.ts +19 -0
- package/dist/providers/typescript/durableRuntime.d.ts.map +1 -0
- package/dist/providers/typescript/durableRuntime.js +180 -0
- package/dist/providers/typescript/durableRuntime.js.map +1 -0
- package/dist/providers/typescript/jobMacro.d.ts +12 -0
- package/dist/providers/typescript/jobMacro.d.ts.map +1 -0
- package/dist/providers/typescript/jobMacro.js +128 -0
- package/dist/providers/typescript/jobMacro.js.map +1 -0
- package/dist/providers/typescript/parkSignals.d.ts +7 -0
- package/dist/providers/typescript/parkSignals.d.ts.map +1 -0
- package/dist/providers/typescript/parkSignals.js +45 -0
- package/dist/providers/typescript/parkSignals.js.map +1 -0
- package/dist/providers/typescript/rewindRun.d.ts +9 -0
- package/dist/providers/typescript/rewindRun.d.ts.map +1 -0
- package/dist/providers/typescript/rewindRun.js +111 -0
- package/dist/providers/typescript/rewindRun.js.map +1 -0
- package/dist/providers/typescript/runtimes/JobRuntime.d.ts +23 -0
- package/dist/providers/typescript/runtimes/JobRuntime.d.ts.map +1 -0
- package/dist/providers/typescript/runtimes/JobRuntime.js +19 -0
- package/dist/providers/typescript/runtimes/JobRuntime.js.map +1 -0
- package/dist/providers/typescript/runtimes/directJobRuntime.d.ts +3 -0
- package/dist/providers/typescript/runtimes/directJobRuntime.d.ts.map +1 -0
- package/dist/providers/typescript/runtimes/directJobRuntime.js +50 -0
- package/dist/providers/typescript/runtimes/directJobRuntime.js.map +1 -0
- package/dist/providers/typescript/runtimes/durableJobRuntime.d.ts +3 -0
- package/dist/providers/typescript/runtimes/durableJobRuntime.d.ts.map +1 -0
- package/dist/providers/typescript/runtimes/durableJobRuntime.js +95 -0
- package/dist/providers/typescript/runtimes/durableJobRuntime.js.map +1 -0
- package/dist/providers/typescript/runtimes/index.d.ts +4 -0
- package/dist/providers/typescript/runtimes/index.d.ts.map +1 -0
- package/dist/providers/typescript/runtimes/index.js +3 -0
- package/dist/providers/typescript/runtimes/index.js.map +1 -0
- package/dist/providers/typescript/runtimes/session.d.ts +2 -0
- package/dist/providers/typescript/runtimes/session.d.ts.map +1 -0
- package/dist/providers/typescript/runtimes/session.js +61 -0
- package/dist/providers/typescript/runtimes/session.js.map +1 -0
- package/dist/providers/typescript/stepMacro.d.ts +37 -0
- package/dist/providers/typescript/stepMacro.d.ts.map +1 -0
- package/dist/providers/typescript/stepMacro.js +179 -0
- package/dist/providers/typescript/stepMacro.js.map +1 -0
- package/dist/providers/typescript/terseWorkflowBuilder.d.ts +8 -0
- package/dist/providers/typescript/terseWorkflowBuilder.d.ts.map +1 -0
- package/dist/providers/typescript/terseWorkflowBuilder.js +66 -0
- package/dist/providers/typescript/terseWorkflowBuilder.js.map +1 -0
- package/dist/replay.d.ts +3 -0
- package/dist/replay.d.ts.map +1 -0
- package/dist/replay.js +20 -0
- package/dist/replay.js.map +1 -0
- package/dist/run.d.ts +11 -2
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +153 -42
- package/dist/run.js.map +1 -1
- package/dist/runLocalTestJob.d.ts +5 -1
- package/dist/runLocalTestJob.d.ts.map +1 -1
- package/dist/runLocalTestJob.js +6 -5
- package/dist/runLocalTestJob.js.map +1 -1
- package/dist/sampleEventId.d.ts +4 -0
- package/dist/sampleEventId.d.ts.map +1 -1
- package/dist/sampleEventId.js +4 -0
- package/dist/sampleEventId.js.map +1 -1
- package/dist/shared/ApiRoutes.d.ts +0 -19
- package/dist/shared/ApiRoutes.d.ts.map +1 -1
- package/dist/shared/ApiRoutes.js +1 -17
- package/dist/shared/ApiRoutes.js.map +1 -1
- package/dist/shared/Configs.d.ts +2 -24
- package/dist/shared/Configs.d.ts.map +1 -1
- package/dist/shared/Configs.js +2 -32
- package/dist/shared/Configs.js.map +1 -1
- package/dist/shared/Integrations.d.ts +1 -18
- package/dist/shared/Integrations.d.ts.map +1 -1
- package/dist/shared/Integrations.js +1 -10
- package/dist/shared/Integrations.js.map +1 -1
- package/dist/shared/InvalidationKeys.d.ts +0 -1
- package/dist/shared/InvalidationKeys.d.ts.map +1 -1
- package/dist/shared/InvalidationKeys.js +0 -3
- package/dist/shared/InvalidationKeys.js.map +1 -1
- package/dist/shared/ModelEvents.d.ts +0 -9
- package/dist/shared/ModelEvents.d.ts.map +1 -1
- package/dist/shared/ModelEvents.js +0 -15
- package/dist/shared/ModelEvents.js.map +1 -1
- package/dist/shared/ToolDisplayUtils.d.ts.map +1 -1
- package/dist/shared/ToolDisplayUtils.js +11 -107
- package/dist/shared/ToolDisplayUtils.js.map +1 -1
- package/dist/shared/types.d.ts +108 -1013
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js.map +1 -1
- package/dist/terseWorld.d.ts +4 -0
- package/dist/terseWorld.d.ts.map +1 -0
- package/dist/terseWorld.js +46 -0
- package/dist/terseWorld.js.map +1 -0
- package/dist/test.d.ts +1 -2
- package/dist/test.d.ts.map +1 -1
- package/dist/test.js +23 -43
- package/dist/test.js.map +1 -1
- package/dist/urls.d.ts +3 -0
- package/dist/urls.d.ts.map +1 -0
- package/dist/urls.js +27 -0
- package/dist/urls.js.map +1 -0
- package/dist/util.d.ts +3 -2
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +3 -3
- package/dist/util.js.map +1 -1
- package/package.json +7 -3
- package/dist/commands/deployTheme.d.ts +0 -28
- package/dist/commands/deployTheme.d.ts.map +0 -1
- package/dist/commands/deployTheme.js +0 -68
- package/dist/commands/deployTheme.js.map +0 -1
- package/dist/commands/dev.d.ts +0 -3
- package/dist/commands/dev.d.ts.map +0 -1
- package/dist/commands/dev.js +0 -47
- package/dist/commands/dev.js.map +0 -1
- package/dist/commands/fsExec.d.ts +0 -8
- package/dist/commands/fsExec.d.ts.map +0 -1
- package/dist/commands/fsExec.js +0 -46
- package/dist/commands/fsExec.js.map +0 -1
- package/dist/commands/serve.d.ts +0 -1
- package/dist/commands/serve.d.ts.map +0 -1
- package/dist/commands/serve.js +0 -2
- package/dist/commands/serve.js.map +0 -1
- package/dist/commands/terseCliTheme.d.ts +0 -28
- package/dist/commands/terseCliTheme.d.ts.map +0 -1
- package/dist/commands/terseCliTheme.js +0 -68
- package/dist/commands/terseCliTheme.js.map +0 -1
- package/dist/perf.d.ts +0 -9
- package/dist/perf.d.ts.map +0 -1
- package/dist/perf.js +0 -59
- package/dist/perf.js.map +0 -1
- package/dist/providers/codegen.test.d.ts +0 -2
- package/dist/providers/codegen.test.d.ts.map +0 -1
- package/dist/providers/codegen.test.js +0 -45
- package/dist/providers/codegen.test.js.map +0 -1
- package/dist/providers/python/PythonProvider.test.d.ts +0 -2
- package/dist/providers/python/PythonProvider.test.d.ts.map +0 -1
- package/dist/providers/python/PythonProvider.test.js +0 -169
- package/dist/providers/python/PythonProvider.test.js.map +0 -1
- package/dist/providers/typescript/prepareCodegenData.test.d.ts +0 -2
- package/dist/providers/typescript/prepareCodegenData.test.d.ts.map +0 -1
- package/dist/providers/typescript/prepareCodegenData.test.js +0 -54
- package/dist/providers/typescript/prepareCodegenData.test.js.map +0 -1
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { StepCallKind, findStepImportName, matchStepCall, transformJobStep, transformStep } from "./stepMacro.js";
|
|
3
|
+
// MARK: Rewrite job sources
|
|
4
|
+
export function transformJobSource(ts, source, fileName) {
|
|
5
|
+
const { code: withSteps, stepDefs } = extractJobSteps(ts, source, fileName);
|
|
6
|
+
const sf = ts.createSourceFile(fileName, withSteps, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
7
|
+
const jobs = [];
|
|
8
|
+
const hoisted = [];
|
|
9
|
+
const edits = [];
|
|
10
|
+
const isProp = (p, key) => ts.isPropertyAssignment(p) && ts.isIdentifier(p.name) && p.name.text === key;
|
|
11
|
+
const visit = (node) => {
|
|
12
|
+
if (ts.isCallExpression(node) && ts.isIdentifier(node.expression) && node.expression.text === "createJob" && node.arguments.length > 0 && ts.isObjectLiteralExpression(node.arguments[0])) {
|
|
13
|
+
const obj = node.arguments[0];
|
|
14
|
+
const nameProp = obj.properties.find(p => isProp(p, "name"));
|
|
15
|
+
const onTrigger = obj.properties.find(p => isProp(p, "onTrigger"));
|
|
16
|
+
const statesProp = obj.properties.find(p => isProp(p, "states"));
|
|
17
|
+
const durable = obj.properties.find(p => isProp(p, "durable"))?.initializer.kind === ts.SyntaxKind.TrueKeyword;
|
|
18
|
+
const jobName = nameProp && ts.isStringLiteralLike(nameProp.initializer) ? nameProp.initializer.text : undefined;
|
|
19
|
+
const fn = onTrigger?.initializer;
|
|
20
|
+
if (jobName && fn && durable && (ts.isArrowFunction(fn) || ts.isFunctionExpression(fn))) {
|
|
21
|
+
const fnName = `terseWf_${Buffer.from(jobName).toString("hex")}`;
|
|
22
|
+
const param = fn.parameters.length ? fn.parameters[0].name.getText(sf) : "event";
|
|
23
|
+
const stateParam = fn.parameters.length > 1 ? fn.parameters[1].name.getText(sf) : "state";
|
|
24
|
+
const statesText = statesProp ? statesProp.initializer.getText(sf) : "[]";
|
|
25
|
+
const body = ts.isBlock(fn.body) ? fn.body.getText(sf).slice(1, -1) : `\n return ${fn.body.getText(sf)}\n`;
|
|
26
|
+
hoisted.push(`async function ${fnName}(__rawEvent) {\n` +
|
|
27
|
+
` "use workflow"\n` +
|
|
28
|
+
` const ${param} = createSDKTrigger(__rawEvent)\n` +
|
|
29
|
+
` const ${stateParam} = __buildJobStateAccessor(${statesText})\n` +
|
|
30
|
+
body +
|
|
31
|
+
`}`);
|
|
32
|
+
edits.push({ start: onTrigger.getStart(sf), end: onTrigger.getEnd(), text: `onTrigger: ${fnName}` });
|
|
33
|
+
jobs.push({ name: jobName, fnName });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
ts.forEachChild(node, visit);
|
|
37
|
+
};
|
|
38
|
+
visit(sf);
|
|
39
|
+
if (jobs.length === 0)
|
|
40
|
+
return { code: withSteps, stepsCode: null, jobs };
|
|
41
|
+
const imports = sf.statements.filter(ts.isImportDeclaration);
|
|
42
|
+
const lastImportEnd = imports.length ? imports[imports.length - 1].getEnd() : 0;
|
|
43
|
+
edits.push({ start: lastImportEnd, end: lastImportEnd, text: `\n\n${hoisted.join("\n\n")}\n` });
|
|
44
|
+
const importEdit = sdkImportEdit(ts, sf, imports, lastImportEnd, ["createSDKTrigger", "__buildJobStateAccessor"]);
|
|
45
|
+
if (importEdit)
|
|
46
|
+
edits.push(importEdit);
|
|
47
|
+
if (stepDefs.length > 0) {
|
|
48
|
+
edits.push({ start: lastImportEnd, end: lastImportEnd, text: `\nimport { ${stepDefs.map(s => s.name).join(", ")} } from "${stepsImportSpecifier(fileName)}"` });
|
|
49
|
+
}
|
|
50
|
+
let code = withSteps;
|
|
51
|
+
for (const e of edits.sort((a, b) => b.start - a.start))
|
|
52
|
+
code = code.slice(0, e.start) + e.text + code.slice(e.end);
|
|
53
|
+
const stepsCode = stepDefs.length > 0 ? buildStepsModule(ts, sf, stepDefs) : null;
|
|
54
|
+
return { code, stepsCode, jobs };
|
|
55
|
+
}
|
|
56
|
+
// MARK: Extract job steps
|
|
57
|
+
function extractJobSteps(ts, source, fileName) {
|
|
58
|
+
const sf = ts.createSourceFile(fileName, source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
59
|
+
const stepDefs = [];
|
|
60
|
+
const edits = [];
|
|
61
|
+
const stepName = findStepImportName(ts, sf);
|
|
62
|
+
let counter = 0;
|
|
63
|
+
const visit = (node) => {
|
|
64
|
+
const step = matchStepCall(ts, node, stepName);
|
|
65
|
+
if (step) {
|
|
66
|
+
switch (step.kind) {
|
|
67
|
+
case StepCallKind.Step: {
|
|
68
|
+
const { stepDef, edit } = transformStep(ts, sf, step, fileName, counter++, stepName);
|
|
69
|
+
stepDefs.push(stepDef);
|
|
70
|
+
edits.push(edit);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
case StepCallKind.JobStep: {
|
|
74
|
+
const transformed = transformJobStep(ts, sf, step, fileName, counter, stepName);
|
|
75
|
+
if (transformed) {
|
|
76
|
+
counter++;
|
|
77
|
+
stepDefs.push(transformed.stepDef);
|
|
78
|
+
edits.push(transformed.edit);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
ts.forEachChild(node, visit);
|
|
86
|
+
};
|
|
87
|
+
visit(sf);
|
|
88
|
+
if (edits.length === 0)
|
|
89
|
+
return { code: source, stepDefs: [] };
|
|
90
|
+
let code = source;
|
|
91
|
+
for (const e of edits.sort((a, b) => b.start - a.start))
|
|
92
|
+
code = code.slice(0, e.start) + e.text + code.slice(e.end);
|
|
93
|
+
return { code, stepDefs };
|
|
94
|
+
}
|
|
95
|
+
// Steps execute from a separate bundle, so the module scope the hoisted code relies
|
|
96
|
+
// on (clients, env guards, helpers) must exist there too, not just the imports.
|
|
97
|
+
function buildStepsModule(ts, sf, stepDefs) {
|
|
98
|
+
const moduleCode = sf.statements
|
|
99
|
+
.filter(s => !containsCreateJob(ts, s))
|
|
100
|
+
.map(s => s.getText(sf))
|
|
101
|
+
.join("\n");
|
|
102
|
+
const defs = stepDefs.map(s => s.def).join("\n\n");
|
|
103
|
+
return `${moduleCode}\n\n${defs}\n`;
|
|
104
|
+
}
|
|
105
|
+
function containsCreateJob(ts, node) {
|
|
106
|
+
const walk = (n) => (ts.isCallExpression(n) && ts.isIdentifier(n.expression) && n.expression.text === "createJob" ? true : ts.forEachChild(n, walk));
|
|
107
|
+
return walk(node) ?? false;
|
|
108
|
+
}
|
|
109
|
+
function stepsImportSpecifier(fileName) {
|
|
110
|
+
return `./${path.basename(fileName).replace(/\.(ts|tsx|mts|cts)$/, "")}.__terse.steps`;
|
|
111
|
+
}
|
|
112
|
+
// MARK: Imports
|
|
113
|
+
function sdkImportEdit(ts, sf, imports, lastImportEnd, names) {
|
|
114
|
+
const sdkImport = imports.find(i => ts.isStringLiteralLike(i.moduleSpecifier) && i.moduleSpecifier.text === "terse-sdk");
|
|
115
|
+
const named = sdkImport?.importClause?.namedBindings;
|
|
116
|
+
if (sdkImport && named && ts.isNamedImports(named)) {
|
|
117
|
+
const missing = names.filter(n => !named.elements.some(el => el.name.text === n));
|
|
118
|
+
if (missing.length === 0)
|
|
119
|
+
return null;
|
|
120
|
+
const lastElement = named.elements[named.elements.length - 1];
|
|
121
|
+
if (lastElement) {
|
|
122
|
+
const pos = lastElement.getEnd();
|
|
123
|
+
return { start: pos, end: pos, text: `, ${missing.join(", ")}` };
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return { start: lastImportEnd, end: lastImportEnd, text: `\nimport { ${names.join(", ")} } from "terse-sdk"` };
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=jobMacro.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobMacro.js","sourceRoot":"","sources":["../../../src/providers/typescript/jobMacro.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
type Handler = (request: Request) => Promise<Response>;
|
|
2
|
+
export declare function noteEnqueue(): void;
|
|
3
|
+
export declare function setParkListener(listener: (() => void) | undefined): void;
|
|
4
|
+
export declare function trackStepHandler(handler: Handler): Handler;
|
|
5
|
+
export declare function trackWorkflowHandler(handler: Handler, dataDir: string): Handler;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=parkSignals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parkSignals.d.ts","sourceRoot":"","sources":["../../../src/providers/typescript/parkSignals.ts"],"names":[],"mappings":"AAYA,KAAK,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAOtD,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAExE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAS1D;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAY/E"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
let enqueueCount = 0;
|
|
4
|
+
let inFlightSteps = 0;
|
|
5
|
+
let onParked;
|
|
6
|
+
// terseWorld calls this for every queue() call, delayed or not.
|
|
7
|
+
export function noteEnqueue() {
|
|
8
|
+
enqueueCount++;
|
|
9
|
+
}
|
|
10
|
+
export function setParkListener(listener) {
|
|
11
|
+
onParked = listener;
|
|
12
|
+
}
|
|
13
|
+
export function trackStepHandler(handler) {
|
|
14
|
+
return async (request) => {
|
|
15
|
+
inFlightSteps++;
|
|
16
|
+
try {
|
|
17
|
+
return await handler(request);
|
|
18
|
+
}
|
|
19
|
+
finally {
|
|
20
|
+
inFlightSteps--;
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function trackWorkflowHandler(handler, dataDir) {
|
|
25
|
+
return async (request) => {
|
|
26
|
+
const enqueuesBefore = enqueueCount;
|
|
27
|
+
try {
|
|
28
|
+
return await handler(request);
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
const scheduledNothing = enqueueCount === enqueuesBefore;
|
|
32
|
+
if (scheduledNothing && inFlightSteps === 0 && hasUnresolvedHooks(dataDir)) {
|
|
33
|
+
onParked?.();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// helpers
|
|
39
|
+
function hasUnresolvedHooks(dataDir) {
|
|
40
|
+
const hooksDir = path.join(dataDir, "hooks");
|
|
41
|
+
if (!fs.existsSync(hooksDir))
|
|
42
|
+
return false;
|
|
43
|
+
return fs.readdirSync(hooksDir).some(file => file.endsWith(".json"));
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=parkSignals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parkSignals.js","sourceRoot":"","sources":["../../../src/providers/typescript/parkSignals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAa5B,IAAI,YAAY,GAAG,CAAC,CAAA;AACpB,IAAI,aAAa,GAAG,CAAC,CAAA;AACrB,IAAI,QAAkC,CAAA;AAEtC,gEAAgE;AAChE,MAAM,UAAU,WAAW;IACvB,YAAY,EAAE,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAkC;IAC9D,QAAQ,GAAG,QAAQ,CAAA;AACvB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC7C,OAAO,KAAK,EAAC,OAAO,EAAC,EAAE;QACnB,aAAa,EAAE,CAAA;QACf,IAAI,CAAC;YACD,OAAO,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;QACjC,CAAC;gBAAS,CAAC;YACP,aAAa,EAAE,CAAA;QACnB,CAAC;IACL,CAAC,CAAA;AACL,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAgB,EAAE,OAAe;IAClE,OAAO,KAAK,EAAC,OAAO,EAAC,EAAE;QACnB,MAAM,cAAc,GAAG,YAAY,CAAA;QACnC,IAAI,CAAC;YACD,OAAO,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;QACjC,CAAC;gBAAS,CAAC;YACP,MAAM,gBAAgB,GAAG,YAAY,KAAK,cAAc,CAAA;YACxD,IAAI,gBAAgB,IAAI,aAAa,KAAK,CAAC,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzE,QAAQ,EAAE,EAAE,CAAA;YAChB,CAAC;QACL,CAAC;IACL,CAAC,CAAA;AACL,CAAC;AAED,UAAU;AAEV,SAAS,kBAAkB,CAAC,OAAe;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC5C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAA;IAC1C,OAAO,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAA;AACxE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type RewindResult = {
|
|
2
|
+
workflowRunId: string;
|
|
3
|
+
rewoundStepId: string | null;
|
|
4
|
+
deletedEvents: number;
|
|
5
|
+
};
|
|
6
|
+
export declare function resolveWorkflowRunId(dataDir: string, id: string): string;
|
|
7
|
+
export declare function readRunStatus(dataDir: string, workflowRunId: string): string | null;
|
|
8
|
+
export declare function rewindFailedRun(dataDir: string, workflowRunId: string): RewindResult;
|
|
9
|
+
//# sourceMappingURL=rewindRun.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rewindRun.d.ts","sourceRoot":"","sources":["../../../src/providers/typescript/rewindRun.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,YAAY,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAA;AAIzG,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAWxE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEnF;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,YAAY,CA8CpF"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
const STEP_EVENT_TYPES = new Set(["step_created", "step_started", "step_completed", "step_failed", "step_retrying"]);
|
|
4
|
+
export function resolveWorkflowRunId(dataDir, id) {
|
|
5
|
+
if (id.startsWith("wrun_"))
|
|
6
|
+
return id;
|
|
7
|
+
const runsDir = path.join(dataDir, "runs");
|
|
8
|
+
if (fs.existsSync(runsDir)) {
|
|
9
|
+
for (const file of fs.readdirSync(runsDir)) {
|
|
10
|
+
if (!file.endsWith(".json"))
|
|
11
|
+
continue;
|
|
12
|
+
const run = readJson(path.join(runsDir, file));
|
|
13
|
+
if (run?.attributes?.runId === id)
|
|
14
|
+
return run.runId;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
throw new Error(`No durable run is mapped to Terse run id "${id}". Pass a workflow run id (wrun_...) directly if you have it.`);
|
|
18
|
+
}
|
|
19
|
+
export function readRunStatus(dataDir, workflowRunId) {
|
|
20
|
+
return readJson(path.join(dataDir, "runs", `${workflowRunId}.json`))?.status ?? null;
|
|
21
|
+
}
|
|
22
|
+
export function rewindFailedRun(dataDir, workflowRunId) {
|
|
23
|
+
const runFile = path.join(dataDir, "runs", `${workflowRunId}.json`);
|
|
24
|
+
const run = readJson(runFile);
|
|
25
|
+
if (!run)
|
|
26
|
+
throw new Error(`Run "${workflowRunId}" not found in ${dataDir}.`);
|
|
27
|
+
if (run.status !== "failed")
|
|
28
|
+
throw new Error(`Run "${workflowRunId}" is "${run.status}", not "failed" — nothing to rewind.`);
|
|
29
|
+
const events = listRunEvents(dataDir, workflowRunId);
|
|
30
|
+
// Only operate on journal shapes we can reason about; otherwise the caller
|
|
31
|
+
// should re-run the job fresh instead.
|
|
32
|
+
if (hasUnclosed(events, "wait_created", "wait_completed"))
|
|
33
|
+
throw new Error(`Run "${workflowRunId}" has an open wait; re-drive is not supported. Re-run it fresh instead.`);
|
|
34
|
+
if (hasUnclosed(events, "hook_created", "hook_disposed"))
|
|
35
|
+
throw new Error(`Run "${workflowRunId}" has an open hook; re-drive is not supported. Re-run it fresh instead.`);
|
|
36
|
+
const completed = new Set(events.filter(e => e.eventType === "step_completed").map(e => e.correlationId));
|
|
37
|
+
const touched = new Set(events.filter(e => STEP_EVENT_TYPES.has(e.eventType) && e.correlationId).map(e => e.correlationId));
|
|
38
|
+
const incomplete = [...touched].filter(id => !completed.has(id));
|
|
39
|
+
if (incomplete.length > 1)
|
|
40
|
+
throw new Error(`Run "${workflowRunId}" has ${incomplete.length} incomplete steps; re-drive only supports a single failed step. Re-run it fresh instead.`);
|
|
41
|
+
const rewoundStepId = incomplete[0] ?? null;
|
|
42
|
+
backupRun(dataDir, workflowRunId, runFile, events);
|
|
43
|
+
let deletedEvents = 0;
|
|
44
|
+
for (const e of events) {
|
|
45
|
+
const isFailureMarker = e.eventType === "run_failed";
|
|
46
|
+
const isRewoundStepEvent = rewoundStepId !== null && e.correlationId === rewoundStepId && STEP_EVENT_TYPES.has(e.eventType);
|
|
47
|
+
if (isFailureMarker || isRewoundStepEvent) {
|
|
48
|
+
fs.rmSync(path.join(dataDir, "events", e.file), { force: true });
|
|
49
|
+
deletedEvents++;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Drop any non-completed step entity (covers the failed step regardless of how its
|
|
53
|
+
// composite key is derived) so replay re-executes it rather than seeing it terminal.
|
|
54
|
+
for (const file of listRunStepFiles(dataDir, workflowRunId)) {
|
|
55
|
+
const step = readJson(path.join(dataDir, "steps", file));
|
|
56
|
+
if (step && step.status !== "completed")
|
|
57
|
+
fs.rmSync(path.join(dataDir, "steps", file), { force: true });
|
|
58
|
+
}
|
|
59
|
+
delete run.error;
|
|
60
|
+
delete run.completedAt;
|
|
61
|
+
delete run.output;
|
|
62
|
+
run.status = "running";
|
|
63
|
+
run.updatedAt = new Date().toISOString();
|
|
64
|
+
fs.writeFileSync(runFile, JSON.stringify(run, null, 2));
|
|
65
|
+
return { workflowRunId, rewoundStepId, deletedEvents };
|
|
66
|
+
}
|
|
67
|
+
function listRunEvents(dataDir, workflowRunId) {
|
|
68
|
+
const eventsDir = path.join(dataDir, "events");
|
|
69
|
+
if (!fs.existsSync(eventsDir))
|
|
70
|
+
return [];
|
|
71
|
+
const prefix = `${workflowRunId}-`;
|
|
72
|
+
const out = [];
|
|
73
|
+
for (const file of fs.readdirSync(eventsDir)) {
|
|
74
|
+
if (!file.startsWith(prefix) || !file.endsWith(".json"))
|
|
75
|
+
continue;
|
|
76
|
+
const event = readJson(path.join(eventsDir, file));
|
|
77
|
+
if (event?.eventType)
|
|
78
|
+
out.push({ file, eventType: event.eventType, correlationId: event.correlationId });
|
|
79
|
+
}
|
|
80
|
+
return out;
|
|
81
|
+
}
|
|
82
|
+
function listRunStepFiles(dataDir, workflowRunId) {
|
|
83
|
+
const stepsDir = path.join(dataDir, "steps");
|
|
84
|
+
if (!fs.existsSync(stepsDir))
|
|
85
|
+
return [];
|
|
86
|
+
return fs.readdirSync(stepsDir).filter(file => file.startsWith(`${workflowRunId}-`) && file.endsWith(".json"));
|
|
87
|
+
}
|
|
88
|
+
function hasUnclosed(events, openType, closeType) {
|
|
89
|
+
const closed = new Set(events.filter(e => e.eventType === closeType).map(e => e.correlationId));
|
|
90
|
+
return events.some(e => e.eventType === openType && !closed.has(e.correlationId));
|
|
91
|
+
}
|
|
92
|
+
function backupRun(dataDir, workflowRunId, runFile, events) {
|
|
93
|
+
const dir = path.join(dataDir, ".rewind-backup", `${workflowRunId}-${Date.now()}`);
|
|
94
|
+
fs.mkdirSync(path.join(dir, "events"), { recursive: true });
|
|
95
|
+
fs.mkdirSync(path.join(dir, "steps"), { recursive: true });
|
|
96
|
+
fs.mkdirSync(path.join(dir, "runs"), { recursive: true });
|
|
97
|
+
fs.copyFileSync(runFile, path.join(dir, "runs", `${workflowRunId}.json`));
|
|
98
|
+
for (const e of events)
|
|
99
|
+
fs.copyFileSync(path.join(dataDir, "events", e.file), path.join(dir, "events", e.file));
|
|
100
|
+
for (const file of listRunStepFiles(dataDir, workflowRunId))
|
|
101
|
+
fs.copyFileSync(path.join(dataDir, "steps", file), path.join(dir, "steps", file));
|
|
102
|
+
}
|
|
103
|
+
function readJson(file) {
|
|
104
|
+
try {
|
|
105
|
+
return JSON.parse(fs.readFileSync(file, "utf8"));
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=rewindRun.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rewindRun.js","sourceRoot":"","sources":["../../../src/providers/typescript/rewindRun.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { CreateJobParameters } from "terse-sdk";
|
|
2
|
+
import type { SerializedEvent } from "terse-types";
|
|
3
|
+
export type RunJobOptions = {
|
|
4
|
+
verbose?: boolean;
|
|
5
|
+
entryFile?: string;
|
|
6
|
+
projectId?: string;
|
|
7
|
+
pauseUiAround?: <T>(fn: () => Promise<T>) => Promise<T>;
|
|
8
|
+
};
|
|
9
|
+
export type ResumeRunOptions = {
|
|
10
|
+
verbose?: boolean;
|
|
11
|
+
pauseUiAround?: <T>(fn: () => Promise<T>) => Promise<T>;
|
|
12
|
+
};
|
|
13
|
+
export type ResumeHookInput = {
|
|
14
|
+
token: string;
|
|
15
|
+
payload: unknown;
|
|
16
|
+
};
|
|
17
|
+
export interface JobRuntime {
|
|
18
|
+
executeJob(job: CreateJobParameters, runId: string | null, event: SerializedEvent, opts?: RunJobOptions): Promise<void>;
|
|
19
|
+
resumeRun(runId: string, opts?: ResumeRunOptions): Promise<void>;
|
|
20
|
+
resumeRunWithInput(runId: string, input: ResumeHookInput, opts?: ResumeRunOptions): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
export declare function formatErrorDetail(error: unknown): string;
|
|
23
|
+
//# sourceMappingURL=JobRuntime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JobRuntime.d.ts","sourceRoot":"","sources":["../../../../src/providers/typescript/runtimes/JobRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD,MAAM,MAAM,aAAa,GAAG;IACxB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;CAC1D,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;CAC1D,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,WAAW,UAAU;IACvB,UAAU,CAAC,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEvH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhE,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACpG;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAOxD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export function formatErrorDetail(error) {
|
|
2
|
+
if (error instanceof Error)
|
|
3
|
+
return error.message;
|
|
4
|
+
if (typeof error === "string")
|
|
5
|
+
return error;
|
|
6
|
+
if (error && typeof error === "object") {
|
|
7
|
+
return stringifyErrorObject(error);
|
|
8
|
+
}
|
|
9
|
+
return String(error);
|
|
10
|
+
}
|
|
11
|
+
function stringifyErrorObject(error) {
|
|
12
|
+
try {
|
|
13
|
+
return JSON.stringify(error);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return String(error);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=JobRuntime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JobRuntime.js","sourceRoot":"","sources":["../../../../src/providers/typescript/runtimes/JobRuntime.ts"],"names":[],"mappings":"AA4BA,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC5C,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC,OAAO,CAAA;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC3C,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAA;IACtC,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACxB,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAa;IACvC,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAChC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directJobRuntime.d.ts","sourceRoot":"","sources":["../../../../src/providers/typescript/runtimes/directJobRuntime.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,UAAU,EAAqB,MAAM,iBAAiB,CAAA;AAGpE,eAAO,MAAM,gBAAgB,EAAE,UAuC9B,CAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { __buildJobStateAccessor, createSDKTrigger } from "terse-sdk";
|
|
3
|
+
import { runWithJobContext } from "terse-sdk/dist/runIdentity/jobContextStore.js";
|
|
4
|
+
import { readApiKeyOrBail } from "../../../api.js";
|
|
5
|
+
import { CliError } from "../../../cliError.js";
|
|
6
|
+
import { BACKEND_URL } from "../../../config.js";
|
|
7
|
+
import { formatErrorDetail } from "./JobRuntime.js";
|
|
8
|
+
import { withSession } from "./session.js";
|
|
9
|
+
export const directJobRuntime = {
|
|
10
|
+
async executeJob(job, runId, event, opts) {
|
|
11
|
+
const isVerbose = opts?.verbose ?? true;
|
|
12
|
+
const pauseUiAround = opts?.pauseUiAround ?? (async (fn) => fn());
|
|
13
|
+
const apiKey = readApiKeyOrBail({ title: "TERSE_API_KEY is not set.", detail: "Please set it in your environment variables." });
|
|
14
|
+
const inputEvent = createSDKTrigger(event);
|
|
15
|
+
try {
|
|
16
|
+
await withSession(apiKey, isVerbose, pauseUiAround, async (sessionId) => {
|
|
17
|
+
await runWithJobContext({ sessionId, runId, apiBaseUrl: BACKEND_URL, projectId: opts?.projectId, jobName: job.name }, async () => {
|
|
18
|
+
const state = __buildJobStateAccessor(job.states ?? []);
|
|
19
|
+
if (job.filter && !(await job.filter(inputEvent, state))) {
|
|
20
|
+
if (isVerbose)
|
|
21
|
+
console.log(chalk.dim(`\n Job "${job.name}" skipped (filter returned false).\n`));
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (isVerbose)
|
|
25
|
+
console.log(chalk.cyan(` Job "${job.name}" started`));
|
|
26
|
+
await job.onTrigger(inputEvent, state);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
if (error instanceof CliError)
|
|
32
|
+
throw error;
|
|
33
|
+
if (error instanceof Error && error.name === "DurableOnlyError") {
|
|
34
|
+
throw new CliError("durable_only", error.message, { actionRequired: true });
|
|
35
|
+
}
|
|
36
|
+
throw new CliError("job_execution_failed", `Job "${job.name}" threw an error.`, { detail: formatErrorDetail(error) });
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
async resumeRun() {
|
|
40
|
+
throw new CliError("resume_not_durable", "Only durable jobs can be resumed.", {
|
|
41
|
+
detail: "This run belongs to a non-durable job — non-durable jobs run to completion and never suspend."
|
|
42
|
+
});
|
|
43
|
+
},
|
|
44
|
+
async resumeRunWithInput() {
|
|
45
|
+
throw new CliError("resume_not_durable", "Only durable jobs can be resumed.", {
|
|
46
|
+
detail: "This run belongs to a non-durable job — non-durable jobs run to completion and never suspend."
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=directJobRuntime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directJobRuntime.js","sourceRoot":"","sources":["../../../../src/providers/typescript/runtimes/directJobRuntime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"durableJobRuntime.d.ts","sourceRoot":"","sources":["../../../../src/providers/typescript/runtimes/durableJobRuntime.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,UAAU,EAAkE,MAAM,iBAAiB,CAAA;AAGjH,eAAO,MAAM,iBAAiB,EAAE,UA6B/B,CAAA"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { readApiKeyOrBail } from "../../../api.js";
|
|
4
|
+
import { CliError } from "../../../cliError.js";
|
|
5
|
+
import { BACKEND_URL } from "../../../config.js";
|
|
6
|
+
import { isCliRunCommandEnabled } from "../../../env.js";
|
|
7
|
+
import { getDurableRuntime } from "../durableRuntime.js";
|
|
8
|
+
import { readRunStatus, resolveWorkflowRunId, rewindFailedRun } from "../rewindRun.js";
|
|
9
|
+
import { formatErrorDetail } from "./JobRuntime.js";
|
|
10
|
+
import { withSession } from "./session.js";
|
|
11
|
+
export const durableJobRuntime = {
|
|
12
|
+
async executeJob(job, runId, event, opts) {
|
|
13
|
+
const isVerbose = opts?.verbose ?? true;
|
|
14
|
+
const pauseUiAround = opts?.pauseUiAround ?? (async (fn) => fn());
|
|
15
|
+
const apiKey = readApiKeyOrBail({ title: "TERSE_API_KEY is not set.", detail: "Please set it in your environment variables." });
|
|
16
|
+
try {
|
|
17
|
+
await withSession(apiKey, isVerbose, pauseUiAround, async (sessionId) => {
|
|
18
|
+
if (isVerbose)
|
|
19
|
+
console.log(chalk.cyan(` Job "${job.name}" started`));
|
|
20
|
+
const rt = await getDurableRuntime(process.cwd());
|
|
21
|
+
await rt.start();
|
|
22
|
+
const dispatched = await rt.dispatchJob(job.name, { sessionId, runId, apiBaseUrl: BACKEND_URL }, event);
|
|
23
|
+
// We can't await in the Modal Sandbox. This polls, and a blocked run will never exit.
|
|
24
|
+
if (!isCliRunCommandEnabled())
|
|
25
|
+
await dispatched.awaitResult();
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
if (error instanceof CliError)
|
|
30
|
+
throw error;
|
|
31
|
+
throw new CliError("job_execution_failed", `Job "${job.name}" threw an error.`, { detail: formatErrorDetail(error) });
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
async resumeRun(runId, opts) {
|
|
35
|
+
return driveResume(runId, opts);
|
|
36
|
+
},
|
|
37
|
+
async resumeRunWithInput(runId, input, opts) {
|
|
38
|
+
return driveResume(runId, opts, input);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
async function driveResume(runId, opts, input) {
|
|
42
|
+
const isVerbose = opts?.verbose ?? true;
|
|
43
|
+
const pauseUiAround = opts?.pauseUiAround ?? (async (fn) => fn());
|
|
44
|
+
const apiKey = readApiKeyOrBail({ title: "TERSE_API_KEY is not set.", detail: "Please set it in your environment variables." });
|
|
45
|
+
const dataDir = resolveDataDir();
|
|
46
|
+
const workflowRunId = resolveWorkflowRunId(dataDir, runId);
|
|
47
|
+
const status = readRunStatus(dataDir, workflowRunId);
|
|
48
|
+
try {
|
|
49
|
+
await withSession(apiKey, isVerbose, pauseUiAround, async () => {
|
|
50
|
+
if (status === "failed") {
|
|
51
|
+
const { rewoundStepId } = rewindFailedRun(dataDir, workflowRunId);
|
|
52
|
+
if (isVerbose)
|
|
53
|
+
console.log(chalk.yellow(` Re-driving failed run ${workflowRunId}${rewoundStepId ? " from the failed step" : ""}; completed steps replay from the journal`));
|
|
54
|
+
}
|
|
55
|
+
else if (isVerbose) {
|
|
56
|
+
console.log(chalk.cyan(` Resuming run ${workflowRunId}`));
|
|
57
|
+
}
|
|
58
|
+
const rt = await getDurableRuntime(process.cwd());
|
|
59
|
+
if (input) {
|
|
60
|
+
await deliverInput(rt, input, isVerbose);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
await rt.start();
|
|
64
|
+
}
|
|
65
|
+
if (isCliRunCommandEnabled())
|
|
66
|
+
return;
|
|
67
|
+
await rt.awaitRunResult(workflowRunId);
|
|
68
|
+
if (isVerbose)
|
|
69
|
+
console.log(chalk.green(` Run ${workflowRunId} completed`));
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
if (error instanceof CliError)
|
|
74
|
+
throw error;
|
|
75
|
+
throw new CliError("run_resume_failed", `Run "${runId}" could not be resumed.`, { detail: formatErrorDetail(error) });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function resolveDataDir() {
|
|
79
|
+
return process.env.WORKFLOW_LOCAL_DATA_DIR ?? path.join(process.cwd(), ".terse", "data");
|
|
80
|
+
}
|
|
81
|
+
// Input resumes skip start(): resumeHook re-queues the run itself, and start()'s
|
|
82
|
+
// crash-recovery wake would add a concurrent second replay.
|
|
83
|
+
async function deliverInput(rt, input, isVerbose) {
|
|
84
|
+
try {
|
|
85
|
+
await rt.deliverInput(input.token, input.payload);
|
|
86
|
+
if (isVerbose)
|
|
87
|
+
console.log(chalk.cyan(` Delivered input response to hook ${input.token}`));
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
// Stale token: recovery replay instead; the run re-parks on its real wait.
|
|
91
|
+
console.log(chalk.yellow(` Could not deliver input response to hook ${input.token}: ${formatErrorDetail(error)}`));
|
|
92
|
+
await rt.start();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=durableJobRuntime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"durableJobRuntime.js","sourceRoot":"","sources":["../../../../src/providers/typescript/runtimes/durableJobRuntime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/providers/typescript/runtimes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/providers/typescript/runtimes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../src/providers/typescript/runtimes/session.ts"],"names":[],"mappings":"AAUA,wBAAsB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAqDtL"}
|