poly-weaver 0.7.0 → 0.8.0

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 (186) hide show
  1. package/dist/ansi.d.ts +7 -0
  2. package/dist/ansi.d.ts.map +1 -1
  3. package/dist/ansi.js +30 -0
  4. package/dist/ansi.js.map +1 -1
  5. package/dist/app-header.d.ts +16 -0
  6. package/dist/app-header.d.ts.map +1 -0
  7. package/dist/app-header.js +74 -0
  8. package/dist/app-header.js.map +1 -0
  9. package/dist/cli.js +81 -59
  10. package/dist/cli.js.map +1 -1
  11. package/dist/config.d.ts +1 -0
  12. package/dist/config.d.ts.map +1 -1
  13. package/dist/config.js +6 -0
  14. package/dist/config.js.map +1 -1
  15. package/dist/dump/collector.d.ts +2 -1
  16. package/dist/dump/collector.d.ts.map +1 -1
  17. package/dist/dump/collector.js +1 -0
  18. package/dist/dump/collector.js.map +1 -1
  19. package/dist/dump/hotkey.d.ts +9 -30
  20. package/dist/dump/hotkey.d.ts.map +1 -1
  21. package/dist/dump/hotkey.js +15 -158
  22. package/dist/dump/hotkey.js.map +1 -1
  23. package/dist/dump/service.d.ts +3 -2
  24. package/dist/dump/service.d.ts.map +1 -1
  25. package/dist/dump/service.js +4 -1
  26. package/dist/dump/service.js.map +1 -1
  27. package/dist/dump/types.d.ts +5 -0
  28. package/dist/dump/types.d.ts.map +1 -1
  29. package/dist/flow/built-in/default-factory.d.ts +21 -0
  30. package/dist/flow/built-in/default-factory.d.ts.map +1 -0
  31. package/dist/flow/built-in/default-factory.js +155 -0
  32. package/dist/flow/built-in/default-factory.js.map +1 -0
  33. package/dist/flow/built-in/default.d.ts +4 -4
  34. package/dist/flow/built-in/default.d.ts.map +1 -1
  35. package/dist/flow/built-in/default.js +3 -141
  36. package/dist/flow/built-in/default.js.map +1 -1
  37. package/dist/flow/built-in/default.ts +5 -169
  38. package/dist/flow/built-in/why-so-serious-factory.d.ts +16 -0
  39. package/dist/flow/built-in/why-so-serious-factory.d.ts.map +1 -0
  40. package/dist/flow/built-in/why-so-serious-factory.js +187 -0
  41. package/dist/flow/built-in/why-so-serious-factory.js.map +1 -0
  42. package/dist/flow/built-in/why-so-serious.d.ts +3 -2
  43. package/dist/flow/built-in/why-so-serious.d.ts.map +1 -1
  44. package/dist/flow/built-in/why-so-serious.js +3 -164
  45. package/dist/flow/built-in/why-so-serious.js.map +1 -1
  46. package/dist/flow/custom/AUTHORING.md +13 -0
  47. package/dist/flow/custom/load.d.ts +16 -1
  48. package/dist/flow/custom/load.d.ts.map +1 -1
  49. package/dist/flow/custom/load.js +69 -18
  50. package/dist/flow/custom/load.js.map +1 -1
  51. package/dist/flow/dsl.js +1 -1
  52. package/dist/flow/dsl.js.map +1 -1
  53. package/dist/flow/executor.d.ts.map +1 -1
  54. package/dist/flow/executor.js +44 -8
  55. package/dist/flow/executor.js.map +1 -1
  56. package/dist/flow/types.d.ts +20 -2
  57. package/dist/flow/types.d.ts.map +1 -1
  58. package/dist/flow/types.js.map +1 -1
  59. package/dist/flow-editor/tui.d.ts.map +1 -1
  60. package/dist/flow-editor/tui.js +9 -18
  61. package/dist/flow-editor/tui.js.map +1 -1
  62. package/dist/markdown.d.ts.map +1 -1
  63. package/dist/markdown.js +60 -0
  64. package/dist/markdown.js.map +1 -1
  65. package/dist/orchestrator.d.ts +43 -0
  66. package/dist/orchestrator.d.ts.map +1 -1
  67. package/dist/orchestrator.js +230 -92
  68. package/dist/orchestrator.js.map +1 -1
  69. package/dist/providers/claude/completion-plan-mode.d.ts.map +1 -1
  70. package/dist/providers/claude/completion-plan-mode.js +7 -1
  71. package/dist/providers/claude/completion-plan-mode.js.map +1 -1
  72. package/dist/providers/claude/tool-tracking.d.ts +1 -0
  73. package/dist/providers/claude/tool-tracking.d.ts.map +1 -1
  74. package/dist/providers/claude/tool-tracking.js +3 -0
  75. package/dist/providers/claude/tool-tracking.js.map +1 -1
  76. package/dist/providers/copilot/session.d.ts +35 -1
  77. package/dist/providers/copilot/session.d.ts.map +1 -1
  78. package/dist/providers/copilot/session.js +121 -1
  79. package/dist/providers/copilot/session.js.map +1 -1
  80. package/dist/providers/types.d.ts +3 -1
  81. package/dist/providers/types.d.ts.map +1 -1
  82. package/dist/pty/spawn.d.ts.map +1 -1
  83. package/dist/pty/spawn.js +6 -1
  84. package/dist/pty/spawn.js.map +1 -1
  85. package/dist/pty/types.d.ts +7 -2
  86. package/dist/pty/types.d.ts.map +1 -1
  87. package/dist/resume-tui.d.ts +52 -0
  88. package/dist/resume-tui.d.ts.map +1 -0
  89. package/dist/resume-tui.js +344 -0
  90. package/dist/resume-tui.js.map +1 -0
  91. package/dist/session/flow-snapshot.d.ts +14 -0
  92. package/dist/session/flow-snapshot.d.ts.map +1 -0
  93. package/dist/session/flow-snapshot.js +28 -0
  94. package/dist/session/flow-snapshot.js.map +1 -0
  95. package/dist/session/list.d.ts +16 -0
  96. package/dist/session/list.d.ts.map +1 -0
  97. package/dist/session/list.js +89 -0
  98. package/dist/session/list.js.map +1 -0
  99. package/dist/session/lock.d.ts +26 -0
  100. package/dist/session/lock.d.ts.map +1 -0
  101. package/dist/session/lock.js +95 -0
  102. package/dist/session/lock.js.map +1 -0
  103. package/dist/session/manifest.d.ts +80 -0
  104. package/dist/session/manifest.d.ts.map +1 -0
  105. package/dist/session/manifest.js +2 -0
  106. package/dist/session/manifest.js.map +1 -0
  107. package/dist/session/persistence.d.ts +19 -0
  108. package/dist/session/persistence.d.ts.map +1 -0
  109. package/dist/session/persistence.js +68 -0
  110. package/dist/session/persistence.js.map +1 -0
  111. package/dist/session/process-start-time.d.ts +17 -0
  112. package/dist/session/process-start-time.d.ts.map +1 -0
  113. package/dist/session/process-start-time.js +99 -0
  114. package/dist/session/process-start-time.js.map +1 -0
  115. package/dist/session/restore.d.ts +31 -0
  116. package/dist/session/restore.d.ts.map +1 -0
  117. package/dist/session/restore.js +111 -0
  118. package/dist/session/restore.js.map +1 -0
  119. package/dist/session/resume.d.ts +5 -0
  120. package/dist/session/resume.d.ts.map +1 -0
  121. package/dist/session/resume.js +109 -0
  122. package/dist/session/resume.js.map +1 -0
  123. package/dist/session/session-store.d.ts +43 -0
  124. package/dist/session/session-store.d.ts.map +1 -0
  125. package/dist/session/session-store.js +134 -0
  126. package/dist/session/session-store.js.map +1 -0
  127. package/dist/startup-tui.d.ts +10 -11
  128. package/dist/startup-tui.d.ts.map +1 -1
  129. package/dist/startup-tui.js +25 -108
  130. package/dist/startup-tui.js.map +1 -1
  131. package/dist/status-bar.js +1 -26
  132. package/dist/status-bar.js.map +1 -1
  133. package/dist/terminal/host.d.ts +22 -9
  134. package/dist/terminal/host.d.ts.map +1 -1
  135. package/dist/terminal/host.js +67 -78
  136. package/dist/terminal/host.js.map +1 -1
  137. package/dist/terminal/input-router.d.ts +24 -103
  138. package/dist/terminal/input-router.d.ts.map +1 -1
  139. package/dist/terminal/input-router.js +63 -364
  140. package/dist/terminal/input-router.js.map +1 -1
  141. package/dist/terminal/key-event-source.d.ts +52 -0
  142. package/dist/terminal/key-event-source.d.ts.map +1 -0
  143. package/dist/terminal/key-event-source.js +31 -0
  144. package/dist/terminal/key-event-source.js.map +1 -0
  145. package/dist/terminal/key-to-bytes.d.ts +11 -0
  146. package/dist/terminal/key-to-bytes.d.ts.map +1 -0
  147. package/dist/terminal/key-to-bytes.js +81 -0
  148. package/dist/terminal/key-to-bytes.js.map +1 -0
  149. package/dist/terminal/koffi-loader.d.ts +14 -0
  150. package/dist/terminal/koffi-loader.d.ts.map +1 -1
  151. package/dist/terminal/koffi-loader.js.map +1 -1
  152. package/dist/terminal/render.d.ts +1 -2
  153. package/dist/terminal/render.d.ts.map +1 -1
  154. package/dist/terminal/render.js +1 -30
  155. package/dist/terminal/render.js.map +1 -1
  156. package/dist/terminal/stdin-byte-source.d.ts +27 -0
  157. package/dist/terminal/stdin-byte-source.d.ts.map +1 -0
  158. package/dist/terminal/stdin-byte-source.js +92 -0
  159. package/dist/terminal/stdin-byte-source.js.map +1 -0
  160. package/dist/terminal/win32-console-mode.d.ts.map +1 -1
  161. package/dist/terminal/win32-console-mode.js.map +1 -1
  162. package/dist/terminal/win32-console-source.d.ts +26 -0
  163. package/dist/terminal/win32-console-source.d.ts.map +1 -0
  164. package/dist/terminal/win32-console-source.js +275 -0
  165. package/dist/terminal/win32-console-source.js.map +1 -0
  166. package/dist/terminal/win32-key-translator.d.ts +26 -0
  167. package/dist/terminal/win32-key-translator.d.ts.map +1 -0
  168. package/dist/terminal/win32-key-translator.js +87 -0
  169. package/dist/terminal/win32-key-translator.js.map +1 -0
  170. package/dist/terminal-input.d.ts +10 -0
  171. package/dist/terminal-input.d.ts.map +1 -1
  172. package/dist/terminal-input.js +132 -113
  173. package/dist/terminal-input.js.map +1 -1
  174. package/dist/user/host-curate-prompt.d.ts +2 -1
  175. package/dist/user/host-curate-prompt.d.ts.map +1 -1
  176. package/dist/user/host-curate-prompt.js +13 -11
  177. package/dist/user/host-curate-prompt.js.map +1 -1
  178. package/dist/user/host-prompt.d.ts +4 -1
  179. package/dist/user/host-prompt.d.ts.map +1 -1
  180. package/dist/user/host-prompt.js +24 -6
  181. package/dist/user/host-prompt.js.map +1 -1
  182. package/dist/user/prompt.d.ts +7 -9
  183. package/dist/user/prompt.d.ts.map +1 -1
  184. package/dist/user/prompt.js +14 -23
  185. package/dist/user/prompt.js.map +1 -1
  186. package/package.json +1 -1
@@ -1,168 +1,7 @@
1
1
  import { flowDSL } from "../../dsl.js";
2
- const implVerdict = "impl-verdict";
3
- const revisePlan = "revise-plan";
4
- // Factory — single source of truth
5
- export default function createWhySoSeriousFlow({ defineFlow, loop, artifactData, ctxField, cyclePhase, plan, review, implement, simplify, user, TASK }) {
6
- const implIssuesExceedThreshold = (ctx) => {
7
- const data = ctx.artifacts.getData(implVerdict);
8
- const exceeds = data != null && Array.isArray(data.issues) && data.issues.length > 2;
9
- if (!exceeds) {
10
- // Clear stale revise-plan artifact so the implementor uses normal mode.
11
- ctx.artifacts.set(revisePlan, {});
12
- }
13
- return exceeds;
14
- };
15
- return {
16
- name: "why-so-serious",
17
- params: [
18
- // Driver selections
19
- { key: "planner", type: "driver", role: "planner", label: "Planner", default: "claude",
20
- description: "Which CLI plans" },
21
- { key: "reviewer", type: "driver", role: "reviewer", label: "Reviewer", default: "codex",
22
- description: "Which CLI reviews" },
23
- { key: "implementor", type: "driver", role: "implementor", label: "Implementor", default: "claude",
24
- description: "Which CLI implements" },
25
- { key: "simplifier", type: "driver", role: "simplifier", label: "Simplifier", default: "claude",
26
- description: "Which CLI simplifies" },
27
- // Loop limits
28
- { key: "maxIterations", type: "number", label: "Max Planning Iterations",
29
- default: 5, min: 1, max: 50 },
30
- { key: "maxImplIterations", type: "number", label: "Max Impl Iterations",
31
- default: 5, min: 1, max: 50 },
32
- // Mode toggles
33
- { key: "auto", type: "boolean", label: "Auto Mode", default: false,
34
- description: "Skip user review phases" },
35
- { key: "planOnly", type: "boolean", label: "Plan Only", default: false,
36
- description: "Skip implementation phase" },
37
- { key: "curateAllVerdicts", type: "boolean", label: "Curate All Verdicts", default: true,
38
- description: "Curate every plan-review verdict (off = first verdict only)" },
39
- ],
40
- build(values) {
41
- const maxPlan = values.maxIterations;
42
- const maxImpl = values.maxImplIterations;
43
- const isPlanOnly = values.planOnly;
44
- const isAuto = values.auto;
45
- const curateAll = values.curateAllVerdicts;
46
- const plannerDriver = values.planner;
47
- const reviewerDriver = values.reviewer;
48
- const implementorDriver = values.implementor;
49
- const simplifierDriver = values.simplifier;
50
- const steps = [];
51
- // ── Planning phase: identical to default ──
52
- if (isAuto) {
53
- steps.push(loop(maxPlan, artifactData("verdict", "approved"), [
54
- plan({
55
- driver: plannerDriver,
56
- phaseLabel: cyclePhase("📝 Planning...", "✏️ Revising Plan..."),
57
- reads: { task: TASK, verdict: "verdict" },
58
- writes: { plan: "plan" },
59
- }),
60
- review({
61
- driver: reviewerDriver,
62
- variant: "plan",
63
- reads: { task: TASK, plan: "plan" },
64
- writes: { verdict: "verdict" },
65
- }),
66
- ]));
67
- }
68
- else {
69
- steps.push(loop(Infinity, () => false, [
70
- plan({
71
- driver: plannerDriver,
72
- phaseLabel: cyclePhase("📝 Planning...", "✏️ Addressing Feedback..."),
73
- reads: { task: TASK, verdict: "verdict" },
74
- writes: { plan: "plan" },
75
- }),
76
- user("user:feedback", { writes: { verdict: "verdict" } }),
77
- loop(maxPlan, artifactData("verdict", "approved"), [
78
- plan({
79
- driver: plannerDriver,
80
- when: ctxField("iteration", "!=", 1),
81
- phaseLabel: "✏️ Revising Plan...",
82
- reads: { task: TASK, verdict: "verdict" },
83
- writes: { plan: "plan" },
84
- }),
85
- review({
86
- driver: reviewerDriver,
87
- variant: "plan",
88
- sessionShareKey: "reviewer-plan",
89
- reads: { task: TASK, plan: "plan" },
90
- writes: { verdict: "verdict" },
91
- sessionBoundary: ctxField("iteration", "==", 1),
92
- }),
93
- loop(Infinity, (ctx) => {
94
- const v = ctx.artifacts.getData("verdict");
95
- if (!v || v.approved || (v.issues?.length ?? 0) === 0)
96
- return true;
97
- const decisions = ctx.artifacts
98
- .getData("user-decisions")
99
- ?.decisions;
100
- return !decisions?.some((d) => d.decision === "revise");
101
- }, [
102
- review({
103
- driver: reviewerDriver,
104
- variant: "plan",
105
- sessionShareKey: "reviewer-plan",
106
- when: ctxField("iteration", "!=", 1),
107
- reads: { task: TASK, plan: "plan", userDecisions: "user-decisions" },
108
- writes: { verdict: "verdict" },
109
- }),
110
- user("user:curate-verdict", {
111
- variant: "curate-verdict",
112
- when: (ctx) => {
113
- const v = ctx.artifacts.getData("verdict");
114
- return !!v && (v.issues?.length ?? 0) > 0;
115
- },
116
- reads: { verdict: "verdict", plan: "plan" },
117
- writes: { verdict: "verdict", userDecisions: "user-decisions" },
118
- feedbackToTask: false,
119
- }),
120
- ], {
121
- when: curateAll ? () => true : ctxField("iteration", "==", 1),
122
- untilLabel: "no revise comments",
123
- }),
124
- ]),
125
- user("user:approval", {
126
- breakOnAccept: true,
127
- writes: { verdict: "verdict" },
128
- }),
129
- ]));
130
- }
131
- // ── Implementation loop: the difference — conditional planner:impl ──
132
- if (!isPlanOnly) {
133
- steps.push(loop(maxImpl, artifactData("impl-verdict", "approved"), [
134
- plan({
135
- when: implIssuesExceedThreshold,
136
- whenLabel: "impl-verdict.issues>2",
137
- driver: plannerDriver,
138
- reads: { task: "plan", verdict: implVerdict },
139
- writes: { plan: revisePlan },
140
- phaseLabel: "📋 Planning Fixes...",
141
- }),
142
- implement({
143
- driver: implementorDriver,
144
- reads: { plan: "plan", revisePlan, verdict: implVerdict },
145
- phaseLabel: cyclePhase("🔨 Implementing...", "✏️ Revising Impl..."),
146
- }),
147
- review({
148
- driver: reviewerDriver,
149
- variant: "impl",
150
- reads: { task: TASK, plan: "plan" },
151
- writes: { verdict: implVerdict },
152
- }),
153
- ]), simplify({
154
- driver: simplifierDriver,
155
- writes: { plan: "simplify-plan" },
156
- }), implement({
157
- driver: implementorDriver,
158
- reads: { plan: "simplify-plan" },
159
- phaseLabel: "🔨 Applying Simplifications...",
160
- }));
161
- }
162
- return defineFlow("why-so-serious", steps);
163
- },
164
- };
165
- }
2
+ import createWhySoSeriousFlow, { SOURCE_FILE } from "./why-so-serious-factory.js";
3
+ export { SOURCE_FILE };
4
+ export default createWhySoSeriousFlow;
166
5
  // Static convenience (tests, backward compat)
167
6
  export const whySoSeriousFlowTemplate = createWhySoSeriousFlow(flowDSL);
168
7
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"why-so-serious.js","sourceRoot":"","sources":["../../../src/flow/built-in/why-so-serious.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"why-so-serious.js","sourceRoot":"","sources":["../../../src/flow/built-in/why-so-serious.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,sBAAsB,EAAE,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAGlF,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,eAAe,sBAAsB,CAAC;AAEtC,8CAA8C;AAC9C,MAAM,CAAC,MAAM,wBAAwB,GAAiB,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAEtF;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAOrC;IACC,OAAO,wBAAwB,CAAC,KAAK,CAAC;QACpC,aAAa,EAAE,IAAI,EAAE,iBAAiB,IAAI,CAAC;QAC3C,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,IAAI,CAAC,IAAI,EAAE,iBAAiB,IAAI,CAAC,CAAC;QAC5E,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,qBAAqB,IAAI,KAAK,CAAC;QACjD,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,KAAK;QACzB,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,IAAI,IAAI;QAClD,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,QAAQ;QACrB,UAAU,EAAE,IAAI,EAAE,UAAU,IAAI,QAAQ;KACzC,CAAC,CAAC;AACL,CAAC"}
@@ -45,6 +45,19 @@ export default function (dsl) {
45
45
  }
46
46
  ```
47
47
 
48
+ ## 1a. Single-file constraint
49
+
50
+ Custom flows are snapshotted as a single file when a session is created (so the flow's logic can be restored even if you edit or delete the source file later — see Resume below). The factory file is the **only** thing copied into the session directory.
51
+
52
+ Therefore custom flows may **not** use relative imports — `import x from "./helper.mjs"` or `import("./local.mjs")` would resolve against the session directory at resume time and fail. The loader rejects flows that contain `./` or `../` import specifiers, with an error pointing at the offending line.
53
+
54
+ Allowed:
55
+
56
+ - bare specifiers (`import fs from "node:fs"`, npm packages, `#pkg/sub` subpath imports)
57
+ - inlining any helpers you need directly into the factory body
58
+
59
+ If your factory does I/O at module top level (reading config files, network calls, etc.), that I/O will re-run on resume because the snapshot is re-evaluated. Prefer pure factories.
60
+
48
61
  ## 2. DSL Helper Defaults
49
62
 
50
63
  Every helper supplies defaults for optional fields. When you omit an option, the default below applies. When you set an option explicitly, your value wins.
@@ -6,13 +6,28 @@ export interface LoadError {
6
6
  export interface LoadResult {
7
7
  templates: FlowTemplate[];
8
8
  errors: LoadError[];
9
+ /** Map of template name → absolute source-file path (for snapshotting). */
10
+ sources: Map<string, string>;
9
11
  }
10
12
  export interface AllFlowsResult extends LoadResult {
11
13
  builtinCount: number;
12
14
  customDir: string;
13
15
  }
14
- export declare function loadBuiltinFlows(): Promise<FlowTemplate[]>;
16
+ export interface BuiltinLoadResult {
17
+ templates: FlowTemplate[];
18
+ sources: Map<string, string>;
19
+ }
20
+ export declare function loadBuiltinFlows(): Promise<BuiltinLoadResult>;
15
21
  export declare function validateTemplate(template: unknown, file: string): FlowTemplate;
22
+ /**
23
+ * Reject relative imports in custom flow sources — the flow is snapshotted
24
+ * as a single file for resume safety, so relative specifiers would fail
25
+ * at resume time (helpers not in the session dir).
26
+ *
27
+ * Returns null when no relative imports are found, or a short snippet
28
+ * naming the offending specifier for the error message.
29
+ */
30
+ export declare function findRelativeImport(source: string): string | null;
16
31
  export declare function loadCustomFlows(dir?: string): Promise<LoadResult>;
17
32
  /** Load all flows: built-in (from package) + custom (from user dir). */
18
33
  export declare function loadAllFlows(customDir?: string): Promise<AllFlowsResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../../src/flow/custom/load.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AASD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAYhE;AAID,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAe9E;AAED,wBAAsB,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAqDvE;AAID,wEAAwE;AACxE,wBAAsB,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAwB9E"}
1
+ {"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../../src/flow/custom/load.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,2EAA2E;IAC3E,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAeD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAkBnE;AAID,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAe9E;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwBhE;AAED,wBAAsB,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAkEvE;AAID,wEAAwE;AACxE,wBAAsB,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA8B9E"}
@@ -1,25 +1,30 @@
1
- import { readdir } from "node:fs/promises";
1
+ import { readdir, readFile } from "node:fs/promises";
2
2
  import { join } from "node:path";
3
3
  import { pathToFileURL } from "node:url";
4
4
  import { flowDSL } from "../../dsl.js";
5
5
  import { getFlowsDir } from "../../config.js";
6
- // ─── Built-in flows ─────────────────────────────────────────────────────
7
- const BUILTIN_SPECIFIERS = [
8
- "../built-in/default.js",
9
- "../built-in/why-so-serious.js",
6
+ const BUILTIN_SPECS = [
7
+ { specifier: "../built-in/default.js", factorySpecifier: "../built-in/default-factory.js" },
8
+ { specifier: "../built-in/why-so-serious.js", factorySpecifier: "../built-in/why-so-serious-factory.js" },
10
9
  ];
11
10
  export async function loadBuiltinFlows() {
12
11
  const templates = [];
13
- for (const specifier of BUILTIN_SPECIFIERS) {
14
- const mod = await import(specifier);
15
- const factory = mod.default;
12
+ const sources = new Map();
13
+ for (const spec of BUILTIN_SPECS) {
14
+ const factoryMod = await import(spec.factorySpecifier);
15
+ const factory = factoryMod.default;
16
16
  if (typeof factory !== "function") {
17
- throw new Error(`Built-in flow ${specifier}: default export is not a function`);
17
+ throw new Error(`Built-in flow ${spec.factorySpecifier}: default export is not a function`);
18
+ }
19
+ const sourceFile = factoryMod.SOURCE_FILE;
20
+ if (typeof sourceFile !== "string") {
21
+ throw new Error(`Built-in flow ${spec.factorySpecifier}: missing SOURCE_FILE export`);
18
22
  }
19
23
  const template = factory(flowDSL);
20
24
  templates.push(template);
25
+ sources.set(template.name, sourceFile);
21
26
  }
22
- return templates;
27
+ return { templates, sources };
23
28
  }
24
29
  // ─── Custom flows ───────────────────────────────────────────────────────
25
30
  export function validateTemplate(template, file) {
@@ -38,25 +43,54 @@ export function validateTemplate(template, file) {
38
43
  }
39
44
  return t;
40
45
  }
46
+ /**
47
+ * Reject relative imports in custom flow sources — the flow is snapshotted
48
+ * as a single file for resume safety, so relative specifiers would fail
49
+ * at resume time (helpers not in the session dir).
50
+ *
51
+ * Returns null when no relative imports are found, or a short snippet
52
+ * naming the offending specifier for the error message.
53
+ */
54
+ export function findRelativeImport(source) {
55
+ // Strip block comments first (replace with whitespace so line breaks /
56
+ // offsets are roughly preserved). Then strip single-line comments
57
+ // line-by-line — the per-line strip is safe even when the import itself
58
+ // spans multiple lines, since `//` cannot appear in the middle of a
59
+ // valid `import { ... } from "..."` statement.
60
+ const noBlock = source.replace(/\/\*[\s\S]*?\*\//g, (m) => m.replace(/[^\n]/g, " "));
61
+ const cleaned = noBlock
62
+ .split(/\r?\n/)
63
+ .map((line) => line.replace(/\/\/.*$/, ""))
64
+ .join("\n");
65
+ // Patterns: import/export … from "./…" or "../…"; import("./…"); require("./…")
66
+ // `[\s\S]{0,500}?` allows the binding block to span multiple lines (the
67
+ // `import { a, b, c } from "./…"` shape).
68
+ const re = /(?:^|[^A-Za-z0-9_$])(?:import\s*[\s\S]{0,500}?from\s*|export\s+[\s\S]{0,500}?from\s*|import\s*\(\s*|require\s*\(\s*)(['"])(\.\.?\/[^'"]+)\1/;
69
+ const m = re.exec(cleaned);
70
+ if (!m)
71
+ return null;
72
+ // m[3] is the relative specifier itself; collapse the full match to a
73
+ // single line so the error message reads cleanly.
74
+ return m[0].replace(/\s+/g, " ").trim();
75
+ }
41
76
  export async function loadCustomFlows(dir) {
42
77
  const flowsDir = dir ?? getFlowsDir();
43
78
  const templates = [];
44
79
  const errors = [];
80
+ const sources = new Map();
45
81
  let entries;
46
82
  try {
47
83
  entries = await readdir(flowsDir);
48
84
  }
49
85
  catch (err) {
50
- // Directory doesn't exist — no custom flows
51
86
  if (err.code === "ENOENT") {
52
- return { templates, errors };
87
+ return { templates, errors, sources };
53
88
  }
54
- // Other filesystem errors (permissions, etc.) — report, don't suppress
55
89
  errors.push({
56
90
  file: flowsDir,
57
91
  message: `Cannot read flows directory: ${err instanceof Error ? err.message : String(err)}`,
58
92
  });
59
- return { templates, errors };
93
+ return { templates, errors, sources };
60
94
  }
61
95
  const files = entries
62
96
  .filter(f => f.endsWith(".mjs") || f.endsWith(".js"))
@@ -65,6 +99,17 @@ export async function loadCustomFlows(dir) {
65
99
  for (const file of files) {
66
100
  const fullPath = join(flowsDir, file);
67
101
  try {
102
+ // Single-file constraint: reject relative imports before we load.
103
+ const sourceText = await readFile(fullPath, "utf-8");
104
+ const offending = findRelativeImport(sourceText);
105
+ if (offending) {
106
+ errors.push({
107
+ file,
108
+ message: `Custom flow may not use relative imports (snapshot would break on resume). ` +
109
+ `Offending line: ${offending}`,
110
+ });
111
+ continue;
112
+ }
68
113
  const mod = await import(pathToFileURL(fullPath).href);
69
114
  const factory = mod.default ?? mod.createTemplate;
70
115
  if (typeof factory !== "function") {
@@ -79,6 +124,7 @@ export async function loadCustomFlows(dir) {
79
124
  }
80
125
  seen.add(template.name);
81
126
  templates.push(template);
127
+ sources.set(template.name, fullPath);
82
128
  }
83
129
  catch (err) {
84
130
  errors.push({
@@ -87,15 +133,14 @@ export async function loadCustomFlows(dir) {
87
133
  });
88
134
  }
89
135
  }
90
- return { templates, errors };
136
+ return { templates, errors, sources };
91
137
  }
92
138
  // ─── Combined loader ────────────────────────────────────────────────────
93
139
  /** Load all flows: built-in (from package) + custom (from user dir). */
94
140
  export async function loadAllFlows(customDir) {
95
- const builtins = await loadBuiltinFlows();
141
+ const { templates: builtins, sources: builtinSources } = await loadBuiltinFlows();
96
142
  const resolvedCustomDir = customDir ?? getFlowsDir();
97
- const { templates: customs, errors } = await loadCustomFlows(resolvedCustomDir);
98
- // Reject custom names that shadow built-in names
143
+ const { templates: customs, errors, sources: customSources } = await loadCustomFlows(resolvedCustomDir);
99
144
  const builtinNames = new Set(builtins.map(t => t.name));
100
145
  const validCustoms = customs.filter(t => {
101
146
  if (builtinNames.has(t.name)) {
@@ -103,15 +148,21 @@ export async function loadAllFlows(customDir) {
103
148
  file: t.name,
104
149
  message: `Custom flow "${t.name}" shadows a built-in flow — skipped`,
105
150
  });
151
+ customSources.delete(t.name);
106
152
  return false;
107
153
  }
108
154
  return true;
109
155
  });
156
+ const sources = new Map([
157
+ ...builtinSources.entries(),
158
+ ...customSources.entries(),
159
+ ]);
110
160
  return {
111
161
  templates: [...builtins, ...validCustoms],
112
162
  errors,
113
163
  builtinCount: builtins.length,
114
164
  customDir: resolvedCustomDir,
165
+ sources,
115
166
  };
116
167
  }
117
168
  //# sourceMappingURL=load.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"load.js","sourceRoot":"","sources":["../../../src/flow/custom/load.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"load.js","sourceRoot":"","sources":["../../../src/flow/custom/load.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA4B9C,MAAM,aAAa,GAAkB;IACnC,EAAE,SAAS,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,gCAAgC,EAAE;IAC3F,EAAE,SAAS,EAAE,+BAA+B,EAAE,gBAAgB,EAAE,uCAAuC,EAAE;CAC1G,CAAC;AAOF,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,SAAS,GAAmB,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QACnC,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,gBAAgB,oCAAoC,CAAC,CAAC;QAC9F,CAAC;QACD,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC;QAC1C,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,gBAAgB,8BAA8B,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAiB,CAAC;QAClD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AAChC,CAAC;AAED,2EAA2E;AAE3E,MAAM,UAAU,gBAAgB,CAAC,QAAiB,EAAE,IAAY;IAC9D,MAAM,CAAC,GAAG,QAAmC,CAAC;IAC9C,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,CAA4B,CAAC;AACtC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,uEAAuE;IACvE,kEAAkE;IAClE,wEAAwE;IACxE,oEAAoE;IACpE,+CAA+C;IAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CACxD,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CACzB,CAAC;IACF,MAAM,OAAO,GAAG,OAAO;SACpB,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;SAC1C,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,gFAAgF;IAChF,wEAAwE;IACxE,0CAA0C;IAC1C,MAAM,EAAE,GAAG,6IAA6I,CAAC;IAEzJ,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,sEAAsE;IACtE,kDAAkD;IAClD,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAY;IAChD,MAAM,QAAQ,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;IACtC,MAAM,SAAS,GAAmB,EAAE,CAAC;IACrC,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE1C,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QACxC,CAAC;QACD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,gCAAgC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;SAC5F,CAAC,CAAC;QACH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACxC,CAAC;IAED,MAAM,KAAK,GAAG,OAAO;SAClB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SACpD,IAAI,EAAE,CAAC;IACV,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC;YACH,kEAAkE;YAClE,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,SAAS,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;YACjD,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI;oBACJ,OAAO,EACL,6EAA6E;wBAC7E,mBAAmB,SAAS,EAAE;iBACjC,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,cAAc,CAAC;YAClD,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;gBAClC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,oDAAoD,EAAE,CAAC,CAAC;gBACrF,SAAS;YACX,CAAC;YACD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAC7B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAE7C,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,4BAA4B,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;gBACvF,SAAS;YACX,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACxB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI;gBACJ,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aAC1D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AACxC,CAAC;AAED,2EAA2E;AAE3E,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,SAAkB;IACnD,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAClF,MAAM,iBAAiB,GAAG,SAAS,IAAI,WAAW,EAAE,CAAC;IACrD,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM,eAAe,CAAC,iBAAiB,CAAC,CAAC;IAExG,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QACtC,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,OAAO,EAAE,gBAAgB,CAAC,CAAC,IAAI,qCAAqC;aACrE,CAAC,CAAC;YACH,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC7B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAI,GAAG,CAAiB;QACtC,GAAG,cAAc,CAAC,OAAO,EAAE;QAC3B,GAAG,aAAa,CAAC,OAAO,EAAE;KAC3B,CAAC,CAAC;IAEH,OAAO;QACL,SAAS,EAAE,CAAC,GAAG,QAAQ,EAAE,GAAG,YAAY,CAAC;QACzC,MAAM;QACN,YAAY,EAAE,QAAQ,CAAC,MAAM;QAC7B,SAAS,EAAE,iBAAiB;QAC5B,OAAO;KACR,CAAC;AACJ,CAAC"}
package/dist/flow/dsl.js CHANGED
@@ -188,7 +188,7 @@ function resolveExecutableStep(step, tracker, containingLoopId) {
188
188
  }
189
189
  const loopId = containingLoopId;
190
190
  const { first, subsequent } = rawLabel;
191
- const fn = (ctx) => (ctx.loopCycle.get(loopId) ?? 1) > 1 ? subsequent : first;
191
+ const fn = (ctx) => (ctx.loopIterations.get(loopId) ?? 1) > 1 ? subsequent : first;
192
192
  fn._displayHint = first;
193
193
  step.phaseLabel = fn;
194
194
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dsl.js","sourceRoot":"","sources":["../../src/flow/dsl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dsl.js","sourceRoot":"","sources":["../../src/flow/dsl.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/flow/executor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAKL,KAAK,cAAc,EAGnB,KAAK,WAAW,EAEhB,KAAK,cAAc,EAEpB,MAAM,YAAY,CAAC;AAGpB,qBAAa,YAAY;IAKrB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS,CAAC;IANpB,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,OAAO,CAAK;gBAGV,IAAI,EAAE,cAAc,EACpB,QAAQ,EAAE,cAAc,EACxB,SAAS,CAAC,EAAE,SAAS,YAAA;IAGzB,OAAO,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;YAIhC,YAAY;YAsBZ,WAAW;YA8FX,WAAW;YAeX,eAAe;IAqD7B;;;OAGG;YACW,mBAAmB;IA+CjC,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,uBAAuB;CAQhC"}
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/flow/executor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAKL,KAAK,cAAc,EAGnB,KAAK,WAAW,EAGhB,KAAK,cAAc,EAEpB,MAAM,YAAY,CAAC;AAQpB,qBAAa,YAAY;IAKrB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS,CAAC;IANpB,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,OAAO,CAAK;gBAGV,IAAI,EAAE,cAAc,EACpB,QAAQ,EAAE,cAAc,EACxB,SAAS,CAAC,EAAE,SAAS,YAAA;IAGzB,OAAO,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;YAIhC,YAAY;YAsBZ,WAAW;YA6HX,WAAW;YAeX,eAAe;IAqD7B;;;OAGG;YACW,mBAAmB;IAoDjC,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,uBAAuB;CAQhC"}
@@ -5,6 +5,7 @@ import { runPhaseWithRetries, logPhase } from "../orchestrator.js";
5
5
  import { builtinStrategies } from "../providers/registry.js";
6
6
  import { TASK, handlerKey, } from "./types.js";
7
7
  import { snapshotArtifacts } from "../dump/types.js";
8
+ import { applyRestoredSnapshot, buildSkippedRecord, inferRestoredStepSignal, } from "../session/restore.js";
8
9
  export class FlowExecutor {
9
10
  flow;
10
11
  handlers;
@@ -37,19 +38,32 @@ export class FlowExecutor {
37
38
  return { kind: "continue" };
38
39
  }
39
40
  async executeStep(step, ctx) {
40
- // Evaluate `when` predicate — skip if false
41
+ // Evaluate `when` predicate — skip if false. Runs before the fast-forward
42
+ // check so the predicate sees the same state it saw on the original run.
41
43
  if (step.when && !step.when(ctx)) {
42
44
  return { kind: "continue" };
43
45
  }
46
+ // Fast-forward: this step was completed on a prior run. Restore its
47
+ // post-execution state and synthesize an onStepCompleted emission.
48
+ if (ctx.resumeUntilSeq !== undefined && this.stepSeq <= ctx.resumeUntilSeq) {
49
+ const snap = ctx.completedSnapshots?.get(this.stepSeq);
50
+ if (snap)
51
+ await applyRestoredSnapshot(snap, ctx);
52
+ ctx.previousStepRole = step.role;
53
+ if (ctx.onStepCompleted) {
54
+ await ctx.onStepCompleted(buildSkippedRecord(this.stepSeq, step, snap));
55
+ }
56
+ this.stepSeq++;
57
+ return inferRestoredStepSignal(step, snap);
58
+ }
44
59
  const key = handlerKey(step);
45
60
  const handler = this.handlers.get(key);
46
61
  if (!handler) {
47
62
  throw new Error(`No handler registered for role "${key}"`);
48
63
  }
49
- // Step-boundary clear: drop buffered orchestration messages from the
50
- // previous step so retry warnings do not bleed into the next phase.
51
- // Within a single step, retries occur inside one `handler.execute(...)`
52
- // call, so this does not clear warnings mid-cycle.
64
+ // Step-boundary clear: prior-step retry warnings must not bleed into the
65
+ // next phase. Within-step retries happen inside one handler.execute call
66
+ // and so are unaffected by this.
53
67
  ctx.output?.clear();
54
68
  ctx.totalIterations++;
55
69
  const phase = typeof step.phaseLabel === "function"
@@ -65,7 +79,6 @@ export class FlowExecutor {
65
79
  maxIterations: this.getCurrentMaxIterations(),
66
80
  });
67
81
  ctx.lastStepSessionFilePaths = [];
68
- // Only track step metadata when dump recording is active
69
82
  const dumpActive = !!ctx.onStepCompleted;
70
83
  let inputSnapshots;
71
84
  if (dumpActive) {
@@ -103,7 +116,25 @@ export class FlowExecutor {
103
116
  ctx.inFlightStep = undefined;
104
117
  }
105
118
  ctx.previousStepRole = step.role;
106
- // Snapshot outputs and emit StepRecord
119
+ // Producer metadata must be stamped BEFORE onStepCompleted fires, so the
120
+ // SessionStore snapshot includes it.
121
+ if (step.type === "agent") {
122
+ const meta = {
123
+ role: step.role,
124
+ driver: step.driver,
125
+ variant: step.variant,
126
+ displayName: builtinStrategies().get(step.driver)?.displayName ?? step.driver,
127
+ };
128
+ for (const storeKey of Object.values(step.writes)) {
129
+ const existing = ctx.artifacts.get(storeKey);
130
+ if (existing) {
131
+ ctx.artifacts.set(storeKey, {
132
+ ...existing,
133
+ meta: { ...existing.meta, producer: meta },
134
+ });
135
+ }
136
+ }
137
+ }
107
138
  if (ctx.onStepCompleted) {
108
139
  const outputSnapshots = snapshotArtifacts(step.writes, ctx.artifacts);
109
140
  const record = {
@@ -116,7 +147,7 @@ export class FlowExecutor {
116
147
  outputs: outputSnapshots,
117
148
  sessionFilePaths: ctx.lastStepSessionFilePaths ?? [],
118
149
  };
119
- ctx.onStepCompleted(record);
150
+ await ctx.onStepCompleted(record);
120
151
  }
121
152
  return signal;
122
153
  }
@@ -179,6 +210,11 @@ export class FlowExecutor {
179
210
  * Reads artifact.text verbatim, writes to feedback.md, appends to task.
180
211
  */
181
212
  async incorporateFeedback(loop, ctx) {
213
+ // During resume fast-forward, clarifications are already baked into the
214
+ // snapshotted TASK text; re-appending would double-stamp them.
215
+ if (ctx.resumeUntilSeq !== undefined && this.stepSeq <= ctx.resumeUntilSeq) {
216
+ return;
217
+ }
182
218
  const feedbackFile = join(ctx.sessionDir, "feedback.md");
183
219
  for (const step of loop.steps) {
184
220
  if (step.type === "loop" || !step.feedbackToTask)