poly-weaver 0.7.1 → 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.
- package/dist/ansi.d.ts +7 -0
- package/dist/ansi.d.ts.map +1 -1
- package/dist/ansi.js +30 -0
- package/dist/ansi.js.map +1 -1
- package/dist/app-header.d.ts +16 -0
- package/dist/app-header.d.ts.map +1 -0
- package/dist/app-header.js +74 -0
- package/dist/app-header.js.map +1 -0
- package/dist/cli.js +81 -59
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +6 -0
- package/dist/config.js.map +1 -1
- package/dist/dump/collector.d.ts +2 -1
- package/dist/dump/collector.d.ts.map +1 -1
- package/dist/dump/collector.js +1 -0
- package/dist/dump/collector.js.map +1 -1
- package/dist/dump/hotkey.d.ts +9 -30
- package/dist/dump/hotkey.d.ts.map +1 -1
- package/dist/dump/hotkey.js +15 -158
- package/dist/dump/hotkey.js.map +1 -1
- package/dist/dump/service.d.ts +3 -2
- package/dist/dump/service.d.ts.map +1 -1
- package/dist/dump/service.js +4 -1
- package/dist/dump/service.js.map +1 -1
- package/dist/dump/types.d.ts +5 -0
- package/dist/dump/types.d.ts.map +1 -1
- package/dist/flow/built-in/default-factory.d.ts +21 -0
- package/dist/flow/built-in/default-factory.d.ts.map +1 -0
- package/dist/flow/built-in/default-factory.js +155 -0
- package/dist/flow/built-in/default-factory.js.map +1 -0
- package/dist/flow/built-in/default.d.ts +4 -4
- package/dist/flow/built-in/default.d.ts.map +1 -1
- package/dist/flow/built-in/default.js +3 -141
- package/dist/flow/built-in/default.js.map +1 -1
- package/dist/flow/built-in/default.ts +5 -169
- package/dist/flow/built-in/why-so-serious-factory.d.ts +16 -0
- package/dist/flow/built-in/why-so-serious-factory.d.ts.map +1 -0
- package/dist/flow/built-in/why-so-serious-factory.js +187 -0
- package/dist/flow/built-in/why-so-serious-factory.js.map +1 -0
- package/dist/flow/built-in/why-so-serious.d.ts +3 -2
- package/dist/flow/built-in/why-so-serious.d.ts.map +1 -1
- package/dist/flow/built-in/why-so-serious.js +3 -164
- package/dist/flow/built-in/why-so-serious.js.map +1 -1
- package/dist/flow/custom/AUTHORING.md +13 -0
- package/dist/flow/custom/load.d.ts +16 -1
- package/dist/flow/custom/load.d.ts.map +1 -1
- package/dist/flow/custom/load.js +69 -18
- package/dist/flow/custom/load.js.map +1 -1
- package/dist/flow/dsl.js +1 -1
- package/dist/flow/dsl.js.map +1 -1
- package/dist/flow/executor.d.ts.map +1 -1
- package/dist/flow/executor.js +44 -8
- package/dist/flow/executor.js.map +1 -1
- package/dist/flow/types.d.ts +20 -2
- package/dist/flow/types.d.ts.map +1 -1
- package/dist/flow/types.js.map +1 -1
- package/dist/flow-editor/tui.d.ts.map +1 -1
- package/dist/flow-editor/tui.js +9 -18
- package/dist/flow-editor/tui.js.map +1 -1
- package/dist/orchestrator.d.ts +43 -0
- package/dist/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator.js +230 -92
- package/dist/orchestrator.js.map +1 -1
- package/dist/providers/claude/completion-plan-mode.d.ts.map +1 -1
- package/dist/providers/claude/completion-plan-mode.js +5 -2
- package/dist/providers/claude/completion-plan-mode.js.map +1 -1
- package/dist/providers/claude/tool-tracking.d.ts +1 -0
- package/dist/providers/claude/tool-tracking.d.ts.map +1 -1
- package/dist/providers/claude/tool-tracking.js +3 -0
- package/dist/providers/claude/tool-tracking.js.map +1 -1
- package/dist/pty/spawn.d.ts.map +1 -1
- package/dist/pty/spawn.js +6 -1
- package/dist/pty/spawn.js.map +1 -1
- package/dist/pty/types.d.ts +7 -2
- package/dist/pty/types.d.ts.map +1 -1
- package/dist/resume-tui.d.ts +52 -0
- package/dist/resume-tui.d.ts.map +1 -0
- package/dist/resume-tui.js +344 -0
- package/dist/resume-tui.js.map +1 -0
- package/dist/session/flow-snapshot.d.ts +14 -0
- package/dist/session/flow-snapshot.d.ts.map +1 -0
- package/dist/session/flow-snapshot.js +28 -0
- package/dist/session/flow-snapshot.js.map +1 -0
- package/dist/session/list.d.ts +16 -0
- package/dist/session/list.d.ts.map +1 -0
- package/dist/session/list.js +89 -0
- package/dist/session/list.js.map +1 -0
- package/dist/session/lock.d.ts +26 -0
- package/dist/session/lock.d.ts.map +1 -0
- package/dist/session/lock.js +95 -0
- package/dist/session/lock.js.map +1 -0
- package/dist/session/manifest.d.ts +80 -0
- package/dist/session/manifest.d.ts.map +1 -0
- package/dist/session/manifest.js +2 -0
- package/dist/session/manifest.js.map +1 -0
- package/dist/session/persistence.d.ts +19 -0
- package/dist/session/persistence.d.ts.map +1 -0
- package/dist/session/persistence.js +68 -0
- package/dist/session/persistence.js.map +1 -0
- package/dist/session/process-start-time.d.ts +17 -0
- package/dist/session/process-start-time.d.ts.map +1 -0
- package/dist/session/process-start-time.js +99 -0
- package/dist/session/process-start-time.js.map +1 -0
- package/dist/session/restore.d.ts +31 -0
- package/dist/session/restore.d.ts.map +1 -0
- package/dist/session/restore.js +111 -0
- package/dist/session/restore.js.map +1 -0
- package/dist/session/resume.d.ts +5 -0
- package/dist/session/resume.d.ts.map +1 -0
- package/dist/session/resume.js +109 -0
- package/dist/session/resume.js.map +1 -0
- package/dist/session/session-store.d.ts +43 -0
- package/dist/session/session-store.d.ts.map +1 -0
- package/dist/session/session-store.js +134 -0
- package/dist/session/session-store.js.map +1 -0
- package/dist/startup-tui.d.ts +10 -11
- package/dist/startup-tui.d.ts.map +1 -1
- package/dist/startup-tui.js +25 -108
- package/dist/startup-tui.js.map +1 -1
- package/dist/status-bar.js +1 -26
- package/dist/status-bar.js.map +1 -1
- package/dist/terminal/host.d.ts +22 -9
- package/dist/terminal/host.d.ts.map +1 -1
- package/dist/terminal/host.js +67 -78
- package/dist/terminal/host.js.map +1 -1
- package/dist/terminal/input-router.d.ts +24 -103
- package/dist/terminal/input-router.d.ts.map +1 -1
- package/dist/terminal/input-router.js +63 -364
- package/dist/terminal/input-router.js.map +1 -1
- package/dist/terminal/key-event-source.d.ts +52 -0
- package/dist/terminal/key-event-source.d.ts.map +1 -0
- package/dist/terminal/key-event-source.js +31 -0
- package/dist/terminal/key-event-source.js.map +1 -0
- package/dist/terminal/key-to-bytes.d.ts +11 -0
- package/dist/terminal/key-to-bytes.d.ts.map +1 -0
- package/dist/terminal/key-to-bytes.js +81 -0
- package/dist/terminal/key-to-bytes.js.map +1 -0
- package/dist/terminal/koffi-loader.d.ts +14 -0
- package/dist/terminal/koffi-loader.d.ts.map +1 -1
- package/dist/terminal/koffi-loader.js.map +1 -1
- package/dist/terminal/render.d.ts +1 -2
- package/dist/terminal/render.d.ts.map +1 -1
- package/dist/terminal/render.js +1 -30
- package/dist/terminal/render.js.map +1 -1
- package/dist/terminal/stdin-byte-source.d.ts +27 -0
- package/dist/terminal/stdin-byte-source.d.ts.map +1 -0
- package/dist/terminal/stdin-byte-source.js +92 -0
- package/dist/terminal/stdin-byte-source.js.map +1 -0
- package/dist/terminal/win32-console-mode.d.ts.map +1 -1
- package/dist/terminal/win32-console-mode.js.map +1 -1
- package/dist/terminal/win32-console-source.d.ts +26 -0
- package/dist/terminal/win32-console-source.d.ts.map +1 -0
- package/dist/terminal/win32-console-source.js +275 -0
- package/dist/terminal/win32-console-source.js.map +1 -0
- package/dist/terminal/win32-key-translator.d.ts +26 -0
- package/dist/terminal/win32-key-translator.d.ts.map +1 -0
- package/dist/terminal/win32-key-translator.js +87 -0
- package/dist/terminal/win32-key-translator.js.map +1 -0
- package/dist/terminal-input.d.ts +10 -0
- package/dist/terminal-input.d.ts.map +1 -1
- package/dist/terminal-input.js +132 -113
- package/dist/terminal-input.js.map +1 -1
- package/dist/user/host-curate-prompt.d.ts +2 -1
- package/dist/user/host-curate-prompt.d.ts.map +1 -1
- package/dist/user/host-curate-prompt.js +13 -11
- package/dist/user/host-curate-prompt.js.map +1 -1
- package/dist/user/host-prompt.d.ts +4 -1
- package/dist/user/host-prompt.d.ts.map +1 -1
- package/dist/user/host-prompt.js +24 -6
- package/dist/user/host-prompt.js.map +1 -1
- package/dist/user/prompt.d.ts +7 -9
- package/dist/user/prompt.d.ts.map +1 -1
- package/dist/user/prompt.js +14 -23
- package/dist/user/prompt.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,168 +1,7 @@
|
|
|
1
1
|
import { flowDSL } from "../../dsl.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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":"AAAA,OAAO,EAAE,OAAO,
|
|
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
|
|
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;
|
|
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"}
|
package/dist/flow/custom/load.js
CHANGED
|
@@ -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
|
-
|
|
7
|
-
|
|
8
|
-
"../built-in/
|
|
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
|
-
|
|
14
|
-
|
|
15
|
-
const
|
|
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 ${
|
|
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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../../src/flow/custom/load.ts"],"names":[],"mappings":"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"}
|
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.
|
|
191
|
+
const fn = (ctx) => (ctx.loopIterations.get(loopId) ?? 1) > 1 ? subsequent : first;
|
|
192
192
|
fn._displayHint = first;
|
|
193
193
|
step.phaseLabel = fn;
|
|
194
194
|
}
|
package/dist/flow/dsl.js.map
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/flow/executor.js
CHANGED
|
@@ -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:
|
|
50
|
-
//
|
|
51
|
-
//
|
|
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
|
-
//
|
|
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)
|