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.
Files changed (194) hide show
  1. package/dist/cliUi.d.ts +8 -0
  2. package/dist/cliUi.d.ts.map +1 -1
  3. package/dist/cliUi.js +44 -0
  4. package/dist/cliUi.js.map +1 -1
  5. package/dist/codegen.d.ts +0 -15
  6. package/dist/codegen.d.ts.map +1 -1
  7. package/dist/codegen.js +81 -466
  8. package/dist/codegen.js.map +1 -1
  9. package/dist/commands/deploy.d.ts.map +1 -1
  10. package/dist/commands/deploy.js +13 -0
  11. package/dist/commands/deploy.js.map +1 -1
  12. package/dist/commands/resume.d.ts +5 -0
  13. package/dist/commands/resume.d.ts.map +1 -0
  14. package/dist/commands/resume.js +29 -0
  15. package/dist/commands/resume.js.map +1 -0
  16. package/dist/commands/run.d.ts.map +1 -1
  17. package/dist/commands/run.js +5 -2
  18. package/dist/commands/run.js.map +1 -1
  19. package/dist/commands/test.d.ts.map +1 -1
  20. package/dist/commands/test.js +19 -12
  21. package/dist/commands/test.js.map +1 -1
  22. package/dist/deploy.d.ts +1 -2
  23. package/dist/deploy.d.ts.map +1 -1
  24. package/dist/deploy.js +38 -61
  25. package/dist/deploy.js.map +1 -1
  26. package/dist/generate.d.ts +1 -2
  27. package/dist/generate.d.ts.map +1 -1
  28. package/dist/generate.js +69 -67
  29. package/dist/generate.js.map +1 -1
  30. package/dist/index.js +18 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/init.d.ts +1 -2
  33. package/dist/init.d.ts.map +1 -1
  34. package/dist/init.js +96 -45
  35. package/dist/init.js.map +1 -1
  36. package/dist/integrate.d.ts +0 -1
  37. package/dist/integrate.d.ts.map +1 -1
  38. package/dist/integrate.js +11 -191
  39. package/dist/integrate.js.map +1 -1
  40. package/dist/jsonOutput.d.ts +19 -0
  41. package/dist/jsonOutput.d.ts.map +1 -0
  42. package/dist/jsonOutput.js +25 -0
  43. package/dist/jsonOutput.js.map +1 -0
  44. package/dist/nonInteractive.d.ts +2 -4
  45. package/dist/nonInteractive.d.ts.map +1 -1
  46. package/dist/nonInteractive.js +2 -5
  47. package/dist/nonInteractive.js.map +1 -1
  48. package/dist/providers/LanguageProvider.d.ts +13 -0
  49. package/dist/providers/LanguageProvider.d.ts.map +1 -1
  50. package/dist/providers/python/PythonProvider.js +0 -1
  51. package/dist/providers/python/PythonProvider.js.map +1 -1
  52. package/dist/providers/typescript/TypeScriptProvider.d.ts +13 -0
  53. package/dist/providers/typescript/TypeScriptProvider.d.ts.map +1 -1
  54. package/dist/providers/typescript/TypeScriptProvider.js +32 -95
  55. package/dist/providers/typescript/TypeScriptProvider.js.map +1 -1
  56. package/dist/providers/typescript/durableRuntime.d.ts +19 -0
  57. package/dist/providers/typescript/durableRuntime.d.ts.map +1 -0
  58. package/dist/providers/typescript/durableRuntime.js +180 -0
  59. package/dist/providers/typescript/durableRuntime.js.map +1 -0
  60. package/dist/providers/typescript/jobMacro.d.ts +12 -0
  61. package/dist/providers/typescript/jobMacro.d.ts.map +1 -0
  62. package/dist/providers/typescript/jobMacro.js +128 -0
  63. package/dist/providers/typescript/jobMacro.js.map +1 -0
  64. package/dist/providers/typescript/parkSignals.d.ts +7 -0
  65. package/dist/providers/typescript/parkSignals.d.ts.map +1 -0
  66. package/dist/providers/typescript/parkSignals.js +45 -0
  67. package/dist/providers/typescript/parkSignals.js.map +1 -0
  68. package/dist/providers/typescript/rewindRun.d.ts +9 -0
  69. package/dist/providers/typescript/rewindRun.d.ts.map +1 -0
  70. package/dist/providers/typescript/rewindRun.js +111 -0
  71. package/dist/providers/typescript/rewindRun.js.map +1 -0
  72. package/dist/providers/typescript/runtimes/JobRuntime.d.ts +23 -0
  73. package/dist/providers/typescript/runtimes/JobRuntime.d.ts.map +1 -0
  74. package/dist/providers/typescript/runtimes/JobRuntime.js +19 -0
  75. package/dist/providers/typescript/runtimes/JobRuntime.js.map +1 -0
  76. package/dist/providers/typescript/runtimes/directJobRuntime.d.ts +3 -0
  77. package/dist/providers/typescript/runtimes/directJobRuntime.d.ts.map +1 -0
  78. package/dist/providers/typescript/runtimes/directJobRuntime.js +50 -0
  79. package/dist/providers/typescript/runtimes/directJobRuntime.js.map +1 -0
  80. package/dist/providers/typescript/runtimes/durableJobRuntime.d.ts +3 -0
  81. package/dist/providers/typescript/runtimes/durableJobRuntime.d.ts.map +1 -0
  82. package/dist/providers/typescript/runtimes/durableJobRuntime.js +95 -0
  83. package/dist/providers/typescript/runtimes/durableJobRuntime.js.map +1 -0
  84. package/dist/providers/typescript/runtimes/index.d.ts +4 -0
  85. package/dist/providers/typescript/runtimes/index.d.ts.map +1 -0
  86. package/dist/providers/typescript/runtimes/index.js +3 -0
  87. package/dist/providers/typescript/runtimes/index.js.map +1 -0
  88. package/dist/providers/typescript/runtimes/session.d.ts +2 -0
  89. package/dist/providers/typescript/runtimes/session.d.ts.map +1 -0
  90. package/dist/providers/typescript/runtimes/session.js +61 -0
  91. package/dist/providers/typescript/runtimes/session.js.map +1 -0
  92. package/dist/providers/typescript/stepMacro.d.ts +37 -0
  93. package/dist/providers/typescript/stepMacro.d.ts.map +1 -0
  94. package/dist/providers/typescript/stepMacro.js +179 -0
  95. package/dist/providers/typescript/stepMacro.js.map +1 -0
  96. package/dist/providers/typescript/terseWorkflowBuilder.d.ts +8 -0
  97. package/dist/providers/typescript/terseWorkflowBuilder.d.ts.map +1 -0
  98. package/dist/providers/typescript/terseWorkflowBuilder.js +66 -0
  99. package/dist/providers/typescript/terseWorkflowBuilder.js.map +1 -0
  100. package/dist/replay.d.ts +3 -0
  101. package/dist/replay.d.ts.map +1 -0
  102. package/dist/replay.js +20 -0
  103. package/dist/replay.js.map +1 -0
  104. package/dist/run.d.ts +11 -2
  105. package/dist/run.d.ts.map +1 -1
  106. package/dist/run.js +153 -42
  107. package/dist/run.js.map +1 -1
  108. package/dist/runLocalTestJob.d.ts +5 -1
  109. package/dist/runLocalTestJob.d.ts.map +1 -1
  110. package/dist/runLocalTestJob.js +6 -5
  111. package/dist/runLocalTestJob.js.map +1 -1
  112. package/dist/sampleEventId.d.ts +4 -0
  113. package/dist/sampleEventId.d.ts.map +1 -1
  114. package/dist/sampleEventId.js +4 -0
  115. package/dist/sampleEventId.js.map +1 -1
  116. package/dist/shared/ApiRoutes.d.ts +0 -19
  117. package/dist/shared/ApiRoutes.d.ts.map +1 -1
  118. package/dist/shared/ApiRoutes.js +1 -17
  119. package/dist/shared/ApiRoutes.js.map +1 -1
  120. package/dist/shared/Configs.d.ts +2 -24
  121. package/dist/shared/Configs.d.ts.map +1 -1
  122. package/dist/shared/Configs.js +2 -32
  123. package/dist/shared/Configs.js.map +1 -1
  124. package/dist/shared/Integrations.d.ts +1 -18
  125. package/dist/shared/Integrations.d.ts.map +1 -1
  126. package/dist/shared/Integrations.js +1 -10
  127. package/dist/shared/Integrations.js.map +1 -1
  128. package/dist/shared/InvalidationKeys.d.ts +0 -1
  129. package/dist/shared/InvalidationKeys.d.ts.map +1 -1
  130. package/dist/shared/InvalidationKeys.js +0 -3
  131. package/dist/shared/InvalidationKeys.js.map +1 -1
  132. package/dist/shared/ModelEvents.d.ts +0 -9
  133. package/dist/shared/ModelEvents.d.ts.map +1 -1
  134. package/dist/shared/ModelEvents.js +0 -15
  135. package/dist/shared/ModelEvents.js.map +1 -1
  136. package/dist/shared/ToolDisplayUtils.d.ts.map +1 -1
  137. package/dist/shared/ToolDisplayUtils.js +11 -107
  138. package/dist/shared/ToolDisplayUtils.js.map +1 -1
  139. package/dist/shared/types.d.ts +108 -1013
  140. package/dist/shared/types.d.ts.map +1 -1
  141. package/dist/shared/types.js.map +1 -1
  142. package/dist/terseWorld.d.ts +4 -0
  143. package/dist/terseWorld.d.ts.map +1 -0
  144. package/dist/terseWorld.js +46 -0
  145. package/dist/terseWorld.js.map +1 -0
  146. package/dist/test.d.ts +1 -2
  147. package/dist/test.d.ts.map +1 -1
  148. package/dist/test.js +23 -43
  149. package/dist/test.js.map +1 -1
  150. package/dist/urls.d.ts +3 -0
  151. package/dist/urls.d.ts.map +1 -0
  152. package/dist/urls.js +27 -0
  153. package/dist/urls.js.map +1 -0
  154. package/dist/util.d.ts +3 -2
  155. package/dist/util.d.ts.map +1 -1
  156. package/dist/util.js +3 -3
  157. package/dist/util.js.map +1 -1
  158. package/package.json +7 -3
  159. package/dist/commands/deployTheme.d.ts +0 -28
  160. package/dist/commands/deployTheme.d.ts.map +0 -1
  161. package/dist/commands/deployTheme.js +0 -68
  162. package/dist/commands/deployTheme.js.map +0 -1
  163. package/dist/commands/dev.d.ts +0 -3
  164. package/dist/commands/dev.d.ts.map +0 -1
  165. package/dist/commands/dev.js +0 -47
  166. package/dist/commands/dev.js.map +0 -1
  167. package/dist/commands/fsExec.d.ts +0 -8
  168. package/dist/commands/fsExec.d.ts.map +0 -1
  169. package/dist/commands/fsExec.js +0 -46
  170. package/dist/commands/fsExec.js.map +0 -1
  171. package/dist/commands/serve.d.ts +0 -1
  172. package/dist/commands/serve.d.ts.map +0 -1
  173. package/dist/commands/serve.js +0 -2
  174. package/dist/commands/serve.js.map +0 -1
  175. package/dist/commands/terseCliTheme.d.ts +0 -28
  176. package/dist/commands/terseCliTheme.d.ts.map +0 -1
  177. package/dist/commands/terseCliTheme.js +0 -68
  178. package/dist/commands/terseCliTheme.js.map +0 -1
  179. package/dist/perf.d.ts +0 -9
  180. package/dist/perf.d.ts.map +0 -1
  181. package/dist/perf.js +0 -59
  182. package/dist/perf.js.map +0 -1
  183. package/dist/providers/codegen.test.d.ts +0 -2
  184. package/dist/providers/codegen.test.d.ts.map +0 -1
  185. package/dist/providers/codegen.test.js +0 -45
  186. package/dist/providers/codegen.test.js.map +0 -1
  187. package/dist/providers/python/PythonProvider.test.d.ts +0 -2
  188. package/dist/providers/python/PythonProvider.test.d.ts.map +0 -1
  189. package/dist/providers/python/PythonProvider.test.js +0 -169
  190. package/dist/providers/python/PythonProvider.test.js.map +0 -1
  191. package/dist/providers/typescript/prepareCodegenData.test.d.ts +0 -2
  192. package/dist/providers/typescript/prepareCodegenData.test.d.ts.map +0 -1
  193. package/dist/providers/typescript/prepareCodegenData.test.js +0 -54
  194. 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":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAG5B,OAAO,EAAE,YAAY,EAA+B,kBAAkB,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAK9I,4BAA4B;AAE5B,MAAM,UAAU,kBAAkB,CAAC,EAAa,EAAE,MAAc,EAAE,QAAgB;IAC9E,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;IAC3E,MAAM,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IACnG,MAAM,IAAI,GAAe,EAAE,CAAA;IAC3B,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,MAAM,KAAK,GAAe,EAAE,CAAA;IAE5B,MAAM,MAAM,GAAG,CAAC,CAA8B,EAAE,GAAW,EAA8B,EAAE,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,CAAA;IAExK,MAAM,KAAK,GAAG,CAAC,IAAa,EAAQ,EAAE;QAClC,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxL,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;YAC7B,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;YAC5D,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAA;YAClE,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAA;YAChE,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW,CAAA;YAC9G,MAAM,OAAO,GAAG,QAAQ,IAAI,EAAE,CAAC,mBAAmB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;YAChH,MAAM,EAAE,GAAG,SAAS,EAAE,WAAW,CAAA;YAEjC,IAAI,OAAO,IAAI,EAAE,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACtF,MAAM,MAAM,GAAG,WAAW,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAA;gBAChE,MAAM,KAAK,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;gBAChF,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;gBACzF,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;gBACzE,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAA;gBAC3G,OAAO,CAAC,IAAI,CACR,kBAAkB,MAAM,kBAAkB;oBACtC,oBAAoB;oBACpB,WAAW,KAAK,mCAAmC;oBACnD,WAAW,UAAU,8BAA8B,UAAU,KAAK;oBAClE,IAAI;oBACJ,GAAG,CACV,CAAA;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,SAAU,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,cAAc,MAAM,EAAE,EAAE,CAAC,CAAA;gBACtG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;YACxC,CAAC;QACL,CAAC;QACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAChC,CAAC,CAAA;IACD,KAAK,CAAC,EAAE,CAAC,CAAA;IAET,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IAExE,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAA;IAC5D,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/E,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IAE/F,MAAM,UAAU,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,kBAAkB,EAAE,yBAAyB,CAAC,CAAC,CAAA;IACjH,IAAI,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAEtC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,oBAAoB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAA;IACnK,CAAC;IAED,IAAI,IAAI,GAAG,SAAS,CAAA;IACpB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAEnH,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACjF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAA;AACpC,CAAC;AAED,0BAA0B;AAE1B,SAAS,eAAe,CAAC,EAAa,EAAE,MAAc,EAAE,QAAgB;IACpE,MAAM,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IAChG,MAAM,QAAQ,GAAc,EAAE,CAAA;IAC9B,MAAM,KAAK,GAAe,EAAE,CAAA;IAC5B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;IAC3C,IAAI,OAAO,GAAG,CAAC,CAAA;IAEf,MAAM,KAAK,GAAG,CAAC,IAAa,EAAQ,EAAE;QAClC,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;QAC9C,IAAI,IAAI,EAAE,CAAC;YACP,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;gBAChB,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;oBACrB,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAA;oBACpF,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;oBACtB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBAChB,OAAM;gBACV,CAAC;gBACD,KAAK,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;oBACxB,MAAM,WAAW,GAAG,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;oBAC/E,IAAI,WAAW,EAAE,CAAC;wBACd,OAAO,EAAE,CAAA;wBACT,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;wBAClC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;wBAC5B,OAAM;oBACV,CAAC;oBACD,MAAK;gBACT,CAAC;YACL,CAAC;QACL,CAAC;QACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAChC,CAAC,CAAA;IACD,KAAK,CAAC,EAAE,CAAC,CAAA;IAET,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;IAC7D,IAAI,IAAI,GAAG,MAAM,CAAA;IACjB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACnH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;AAC7B,CAAC;AAED,oFAAoF;AACpF,gFAAgF;AAChF,SAAS,gBAAgB,CAAC,EAAa,EAAE,EAAiB,EAAE,QAAmB;IAC3E,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU;SAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;SACtC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;SACvB,IAAI,CAAC,IAAI,CAAC,CAAA;IACf,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAClD,OAAO,GAAG,UAAU,OAAO,IAAI,IAAI,CAAA;AACvC,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAa,EAAE,IAAa;IACnD,MAAM,IAAI,GAAG,CAAC,CAAU,EAAoB,EAAE,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;IAC/K,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAA;AAC9B,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAgB;IAC1C,OAAO,KAAK,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,gBAAgB,CAAA;AAC1F,CAAC;AAED,gBAAgB;AAEhB,SAAS,aAAa,CAAC,EAAa,EAAE,EAAiB,EAAE,OAA+B,EAAE,aAAqB,EAAE,KAAe;IAC5H,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,IAAI,KAAK,WAAW,CAAC,CAAA;IACxH,MAAM,KAAK,GAAG,SAAS,EAAE,YAAY,EAAE,aAAa,CAAA;IACpD,IAAI,SAAS,IAAI,KAAK,IAAI,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAA;QACjF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;QACrC,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAC7D,IAAI,WAAW,EAAE,CAAC;YACd,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,EAAE,CAAA;YAChC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAA;QACpE,CAAC;IACL,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAA;AAClH,CAAC"}
@@ -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,3 @@
1
+ import { type JobRuntime } from "./JobRuntime.js";
2
+ export declare const directJobRuntime: JobRuntime;
3
+ //# sourceMappingURL=directJobRuntime.d.ts.map
@@ -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,3 @@
1
+ import { type JobRuntime } from "./JobRuntime.js";
2
+ export declare const durableJobRuntime: JobRuntime;
3
+ //# sourceMappingURL=durableJobRuntime.d.ts.map
@@ -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,4 @@
1
+ export { directJobRuntime } from "./directJobRuntime.js";
2
+ export { durableJobRuntime } from "./durableJobRuntime.js";
3
+ export type { JobRuntime, ResumeRunOptions, RunJobOptions } from "./JobRuntime.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ export { directJobRuntime } from "./directJobRuntime.js";
2
+ export { durableJobRuntime } from "./durableJobRuntime.js";
3
+ //# sourceMappingURL=index.js.map
@@ -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,2 @@
1
+ export declare function withSession<T>(apiKey: string, isVerbose: boolean, pauseUiAround: <U>(fn: () => Promise<U>) => Promise<U>, action: (sessionId: string) => Promise<T>): Promise<T>;
2
+ //# sourceMappingURL=session.d.ts.map
@@ -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"}