@osolmaz/pi-workflows 0.12.0 → 0.13.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/README.md +56 -31
- package/dist/builtins/autodoc.workflow.d.ts +4 -4
- package/dist/builtins/autoimplement.workflow.d.ts +797 -142
- package/dist/builtins/autoimplement.workflow.js +17 -105
- package/dist/builtins/autoimplement.workflow.js.map +1 -1
- package/dist/builtins/autoplan.workflow.d.ts +126 -13
- package/dist/builtins/autoplan.workflow.js +200 -29
- package/dist/builtins/autoplan.workflow.js.map +1 -1
- package/dist/builtins/catalog.js +7 -5
- package/dist/builtins/catalog.js.map +1 -1
- package/dist/builtins/index.d.ts +4 -2
- package/dist/builtins/index.js +3 -1
- package/dist/builtins/index.js.map +1 -1
- package/dist/builtins/monitor.workflow.d.ts +56 -23
- package/dist/builtins/monitor.workflow.js +508 -329
- package/dist/builtins/monitor.workflow.js.map +1 -1
- package/dist/builtins/pi-agent-group.d.ts +72 -0
- package/dist/builtins/pi-agent-group.js +1087 -0
- package/dist/builtins/pi-agent-group.js.map +1 -0
- package/dist/builtins/plain-summary.workflow.d.ts +32 -0
- package/dist/builtins/plain-summary.workflow.js +134 -0
- package/dist/builtins/plain-summary.workflow.js.map +1 -0
- package/dist/builtins/plan-approval.workflow.d.ts +39 -5
- package/dist/builtins/plan-approval.workflow.js +92 -14
- package/dist/builtins/plan-approval.workflow.js.map +1 -1
- package/dist/builtins/plan-change.workflow.d.ts +449 -0
- package/dist/builtins/plan-change.workflow.js +256 -0
- package/dist/builtins/plan-change.workflow.js.map +1 -0
- package/dist/builtins/plan-presentation.js +2 -2
- package/dist/builtins/plan-presentation.js.map +1 -1
- package/dist/builtins/sanity-check.workflow.d.ts +50 -6
- package/dist/builtins/sanity-check.workflow.js +150 -28
- package/dist/builtins/sanity-check.workflow.js.map +1 -1
- package/dist/controllers/effects.d.ts +3 -2
- package/dist/controllers/effects.js +8 -1
- package/dist/controllers/effects.js.map +1 -1
- package/dist/controllers/index.d.ts +1 -1
- package/dist/controllers/index.js +1 -1
- package/dist/controllers/index.js.map +1 -1
- package/dist/controllers/manager.d.ts +1 -0
- package/dist/controllers/manager.js +41 -17
- package/dist/controllers/manager.js.map +1 -1
- package/dist/controllers/sqlite.d.ts +107 -85
- package/dist/controllers/sqlite.js +1611 -1486
- package/dist/controllers/sqlite.js.map +1 -1
- package/dist/controllers/store.d.ts +9 -8
- package/dist/controllers/store.js +1 -31
- package/dist/controllers/store.js.map +1 -1
- package/dist/controllers/types.d.ts +3 -0
- package/dist/controllers/workflow-engine-scheduler.d.ts +1 -1
- package/dist/controllers/workflow-engine-scheduler.js +3 -5
- package/dist/controllers/workflow-engine-scheduler.js.map +1 -1
- package/dist/controllers/workflows.d.ts +2 -2
- package/dist/controllers/workflows.js +11 -10
- package/dist/controllers/workflows.js.map +1 -1
- package/dist/extension/controller-host.js +2 -2
- package/dist/extension/controller-host.js.map +1 -1
- package/dist/extension/decision-channels.d.ts +4 -2
- package/dist/extension/decision-channels.js +333 -146
- package/dist/extension/decision-channels.js.map +1 -1
- package/dist/extension/executor.d.ts +9 -2
- package/dist/extension/executor.js +89 -2
- package/dist/extension/executor.js.map +1 -1
- package/dist/extension/herdr-viewer.d.ts +0 -1
- package/dist/extension/herdr-viewer.js +0 -4
- package/dist/extension/herdr-viewer.js.map +1 -1
- package/dist/extension/index.js +209 -127
- package/dist/extension/index.js.map +1 -1
- package/dist/extension/recorder.d.ts +3 -10
- package/dist/extension/recorder.js +13 -22
- package/dist/extension/recorder.js.map +1 -1
- package/dist/extension/session-events.d.ts +2 -2
- package/dist/extension/step-message.d.ts +7 -2
- package/dist/extension/step-message.js +94 -2
- package/dist/extension/step-message.js.map +1 -1
- package/dist/extension/widget.js +29 -3
- package/dist/extension/widget.js.map +1 -1
- package/dist/host/rpc-executor.d.ts +3 -0
- package/dist/host/rpc-executor.js +2 -0
- package/dist/host/rpc-executor.js.map +1 -1
- package/dist/host/runner.d.ts +3 -6
- package/dist/host/runner.js +83 -32
- package/dist/host/runner.js.map +1 -1
- package/dist/render/graph-render.js +15 -10
- package/dist/render/graph-render.js.map +1 -1
- package/dist/state/database.d.ts +35 -0
- package/dist/state/database.js +287 -0
- package/dist/state/database.js.map +1 -0
- package/dist/state/index.d.ts +4 -0
- package/dist/state/index.js +5 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/json.d.ts +6 -0
- package/dist/state/json.js +38 -0
- package/dist/state/json.js.map +1 -0
- package/dist/state/mutation.d.ts +57 -0
- package/dist/state/mutation.js +255 -0
- package/dist/state/mutation.js.map +1 -0
- package/dist/state/schema.d.ts +6 -0
- package/dist/state/schema.js +473 -0
- package/dist/state/schema.js.map +1 -0
- package/dist/viewer/cli.d.ts +2 -2
- package/dist/viewer/cli.js +142 -122
- package/dist/viewer/cli.js.map +1 -1
- package/dist/viewer/render.d.ts +4 -4
- package/dist/viewer/render.js +9 -23
- package/dist/viewer/render.js.map +1 -1
- package/dist/viewer/session-reducer.d.ts +1 -1
- package/dist/viewer/session-reducer.js +1 -1
- package/dist/viewer/tui.d.ts +3 -3
- package/dist/viewer/tui.js +15 -13
- package/dist/viewer/tui.js.map +1 -1
- package/dist/viewer/watch.d.ts +2 -5
- package/dist/viewer/watch.js +13 -13
- package/dist/viewer/watch.js.map +1 -1
- package/dist/workflows/catalog.js +7 -2
- package/dist/workflows/catalog.js.map +1 -1
- package/dist/workflows/composition.js +20 -2
- package/dist/workflows/composition.js.map +1 -1
- package/dist/workflows/decision-presentation.d.ts +1 -1
- package/dist/workflows/decision-presentation.js +51 -38
- package/dist/workflows/decision-presentation.js.map +1 -1
- package/dist/workflows/definition.d.ts +6 -2
- package/dist/workflows/definition.js +17 -0
- package/dist/workflows/definition.js.map +1 -1
- package/dist/workflows/engine.d.ts +7 -7
- package/dist/workflows/engine.js +196 -115
- package/dist/workflows/engine.js.map +1 -1
- package/dist/workflows/errors.d.ts +16 -3
- package/dist/workflows/errors.js +18 -3
- package/dist/workflows/errors.js.map +1 -1
- package/dist/workflows/human-decision.d.ts +45 -8
- package/dist/workflows/human-decision.js +641 -274
- package/dist/workflows/human-decision.js.map +1 -1
- package/dist/workflows/index.d.ts +5 -6
- package/dist/workflows/index.js +4 -5
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/progress.d.ts +1 -0
- package/dist/workflows/progress.js +15 -3
- package/dist/workflows/progress.js.map +1 -1
- package/dist/workflows/schema.js +27 -1
- package/dist/workflows/schema.js.map +1 -1
- package/dist/workflows/store.d.ts +83 -103
- package/dist/workflows/store.js +907 -951
- package/dist/workflows/store.js.map +1 -1
- package/dist/workflows/types.d.ts +88 -126
- package/docs/CONTROLLERS.md +10 -8
- package/docs/DEFERRED_TURNS.md +2 -2
- package/docs/DESIGN_PHILOSOPHY.md +4 -2
- package/docs/HUMAN_DECISIONS.md +36 -47
- package/docs/HUMAN_DECISION_PRESENTATIONS.md +14 -24
- package/docs/MONITOR.md +179 -237
- package/docs/SQLITE_STATE.md +219 -0
- package/docs/WORKFLOW_COMPOSITION.md +27 -26
- package/docs/WORKFLOW_STEP_MESSAGES.md +20 -18
- package/docs/WORKFLOW_UPDATES.md +10 -9
- package/docs/development.md +9 -9
- package/docs/live-replay-protocol.md +28 -37
- package/docs/plans/2026-08-16-workflow-updates-plan.md +1 -1
- package/docs/plans/2026-08-19-human-decision-gates-plan.md +1 -1
- package/docs/plans/2026-08-21-autoimplement-timeout-fallback-plan.md +1 -1
- package/docs/plans/2026-08-21-plan-change-approval-policy-plan.md +322 -0
- package/docs/plans/2026-08-21-sanity-check-plan.md +217 -95
- package/docs/plans/2026-08-22-goal-finishing-monitor-plan.md +200 -0
- package/docs/plans/2026-08-23-assistant-agent-completion-plan.md +701 -0
- package/docs/plans/2026-08-23-sqlite-state-plan.md +970 -0
- package/docs/plans/replayable-run-bundles-implementation-plan.md +2 -2
- package/docs/plans/session-event-replay-implementation-plan.md +1 -1
- package/docs/plans/tui-viewer-implementation-plan.md +1 -1
- package/docs/session-event-journal.md +63 -434
- package/docs/tui-viewer.md +13 -15
- package/docs/workflows.md +127 -53
- package/examples/workflows/approved-plan.workflow.ts +19 -46
- package/examples/workflows/plain-summary.workflow.ts +1 -0
- package/herdr-plugin.toml +1 -1
- package/package.json +7 -7
- package/plugins/herdr/viewer.mjs +1 -11
- package/schemas/human-decision-accepted-v1.schema.json +15 -3
- package/schemas/human-decision-continuation-v1.schema.json +10 -1
- package/schemas/human-decision-delivery-v1.schema.json +8 -0
- package/schemas/human-decision-receipt-v1.schema.json +8 -0
- package/schemas/human-decision-request-v1.schema.json +24 -4
- package/skills/autoimplement/SKILL.md +27 -0
- package/skills/autoplan/SKILL.md +5 -4
- package/skills/monitor/SKILL.md +91 -135
- package/skills/pi-workflows/SKILL.md +9 -8
- package/skills/sanity-check/SKILL.md +44 -0
- package/src/builtins/autoimplement.workflow.ts +19 -118
- package/src/builtins/autoplan.workflow.ts +290 -40
- package/src/builtins/catalog.ts +7 -5
- package/src/builtins/index.ts +18 -1
- package/src/builtins/monitor.workflow.ts +673 -382
- package/src/builtins/pi-agent-group.ts +1407 -0
- package/src/builtins/plain-summary.workflow.ts +185 -0
- package/src/builtins/plan-approval.workflow.ts +157 -24
- package/src/builtins/plan-change.workflow.ts +321 -0
- package/src/builtins/plan-presentation.ts +2 -2
- package/src/builtins/sanity-check.workflow.ts +248 -48
- package/src/controllers/effects.ts +7 -0
- package/src/controllers/index.ts +0 -6
- package/src/controllers/manager.ts +72 -32
- package/src/controllers/sqlite.ts +2420 -1948
- package/src/controllers/store.ts +17 -38
- package/src/controllers/types.ts +3 -0
- package/src/controllers/workflow-engine-scheduler.ts +4 -8
- package/src/controllers/workflows.ts +45 -21
- package/src/extension/controller-host.ts +1 -2
- package/src/extension/decision-channels.ts +456 -203
- package/src/extension/executor.ts +105 -2
- package/src/extension/herdr-viewer.ts +0 -5
- package/src/extension/index.ts +251 -151
- package/src/extension/recorder.ts +13 -22
- package/src/extension/session-events.ts +2 -2
- package/src/extension/step-message.ts +106 -4
- package/src/extension/widget.ts +32 -5
- package/src/host/rpc-executor.ts +4 -0
- package/src/host/runner.ts +93 -41
- package/src/render/graph-render.ts +12 -6
- package/src/state/database.ts +375 -0
- package/src/state/index.ts +29 -0
- package/src/state/json.ts +42 -0
- package/src/state/mutation.ts +435 -0
- package/src/state/schema.ts +475 -0
- package/src/viewer/cli.ts +151 -144
- package/src/viewer/render.ts +19 -30
- package/src/viewer/session-reducer.ts +1 -1
- package/src/viewer/tui.ts +18 -17
- package/src/viewer/watch.ts +13 -17
- package/src/workflows/catalog.ts +7 -2
- package/src/workflows/composition.ts +21 -3
- package/src/workflows/decision-presentation.ts +56 -43
- package/src/workflows/definition.ts +36 -3
- package/src/workflows/engine.ts +228 -130
- package/src/workflows/errors.ts +27 -3
- package/src/workflows/human-decision.ts +921 -349
- package/src/workflows/index.ts +20 -30
- package/src/workflows/progress.ts +18 -3
- package/src/workflows/schema.ts +36 -1
- package/src/workflows/store.ts +1300 -1163
- package/src/workflows/types.ts +100 -137
- package/dist/builtins/sanity-check-session.d.ts +0 -17
- package/dist/builtins/sanity-check-session.js +0 -168
- package/dist/builtins/sanity-check-session.js.map +0 -1
- package/dist/workflows/artifacts.d.ts +0 -40
- package/dist/workflows/artifacts.js +0 -155
- package/dist/workflows/artifacts.js.map +0 -1
- package/dist/workflows/migrate-sources.d.ts +0 -42
- package/dist/workflows/migrate-sources.js +0 -133
- package/dist/workflows/migrate-sources.js.map +0 -1
- package/docs/run-bundles.md +0 -481
- package/schemas/human-decision-accepted-v2.schema.json +0 -50
- package/schemas/human-decision-delivery-v2.schema.json +0 -36
- package/schemas/human-decision-receipt-v2.schema.json +0 -39
- package/schemas/human-decision-request-v2.schema.json +0 -69
- package/schemas/human-decision-resolution-v2.schema.json +0 -27
- package/src/builtins/sanity-check-session.ts +0 -205
- package/src/workflows/artifacts.ts +0 -188
- package/src/workflows/migrate-sources.ts +0 -178
|
@@ -27,8 +27,8 @@ import {
|
|
|
27
27
|
type PublishedRepository,
|
|
28
28
|
type VerificationCommandPlan,
|
|
29
29
|
} from "./autoimplement-command-batches.js";
|
|
30
|
-
import
|
|
31
|
-
import
|
|
30
|
+
import { parsePlanApprovalPolicy, type PlanApprovalPolicy } from "./plan-approval.workflow.js";
|
|
31
|
+
import planChangeWorkflow, { type NormalizedPlanChangeInput } from "./plan-change.workflow.js";
|
|
32
32
|
|
|
33
33
|
export type AutoimplementInput = {
|
|
34
34
|
task: string;
|
|
@@ -44,10 +44,7 @@ export type AutoimplementInput = {
|
|
|
44
44
|
planDigest: string;
|
|
45
45
|
documents: string[];
|
|
46
46
|
};
|
|
47
|
-
approval?:
|
|
48
|
-
audience: string;
|
|
49
|
-
maxReplans: number;
|
|
50
|
-
};
|
|
47
|
+
approval?: PlanApprovalPolicy;
|
|
51
48
|
concurrency?: Partial<AutoimplementConcurrency>;
|
|
52
49
|
};
|
|
53
50
|
|
|
@@ -465,22 +462,7 @@ function parseInput(value: unknown): AutoimplementInput {
|
|
|
465
462
|
};
|
|
466
463
|
}
|
|
467
464
|
const concurrency = parseAutoimplementConcurrency(input.concurrency);
|
|
468
|
-
|
|
469
|
-
if (input.approval !== undefined) {
|
|
470
|
-
const raw = requireRecord(input.approval, "autoimplement approval");
|
|
471
|
-
const maxReplans = raw.maxReplans ?? 3;
|
|
472
|
-
if (
|
|
473
|
-
!Number.isInteger(maxReplans) ||
|
|
474
|
-
(maxReplans as number) < 1 ||
|
|
475
|
-
(maxReplans as number) > 20
|
|
476
|
-
) {
|
|
477
|
-
throw new Error("autoimplement approval maxReplans must be from 1 through 20");
|
|
478
|
-
}
|
|
479
|
-
approval = {
|
|
480
|
-
audience: requireString(raw.audience, "autoimplement approval audience"),
|
|
481
|
-
maxReplans: maxReplans as number,
|
|
482
|
-
};
|
|
483
|
-
}
|
|
465
|
+
const approval = parsePlanApprovalPolicy(input.approval);
|
|
484
466
|
return {
|
|
485
467
|
task: requireString(input.task, "autoimplement task"),
|
|
486
468
|
...(input.plan !== undefined ? { plan: input.plan } : {}),
|
|
@@ -495,7 +477,7 @@ function parseInput(value: unknown): AutoimplementInput {
|
|
|
495
477
|
merge: input.merge === true,
|
|
496
478
|
...(documents !== undefined ? { documents: [...documents] as string[] } : {}),
|
|
497
479
|
...(documentation !== undefined ? { documentation } : {}),
|
|
498
|
-
|
|
480
|
+
approval,
|
|
499
481
|
concurrency,
|
|
500
482
|
};
|
|
501
483
|
}
|
|
@@ -637,20 +619,6 @@ function currentPlan(context: WorkflowNodeContext): unknown {
|
|
|
637
619
|
return (context.input as AutoimplementInput).plan;
|
|
638
620
|
}
|
|
639
621
|
|
|
640
|
-
function currentPlanDigest(context: WorkflowNodeContext): string {
|
|
641
|
-
const adopted = context.outputs.adoptPlan as { planDigest?: unknown } | undefined;
|
|
642
|
-
if (typeof adopted?.planDigest === "string") return adopted.planDigest;
|
|
643
|
-
const documented = context.outputs.documentation as
|
|
644
|
-
| { exit?: string; output?: { planDigest?: unknown } }
|
|
645
|
-
| undefined;
|
|
646
|
-
if (documented?.exit === "ready" && typeof documented.output?.planDigest === "string") {
|
|
647
|
-
return documented.output.planDigest;
|
|
648
|
-
}
|
|
649
|
-
const plan = currentPlan(context);
|
|
650
|
-
if (plan === undefined) throw new Error("autoimplement does not have a selected plan");
|
|
651
|
-
return digest(plan);
|
|
652
|
-
}
|
|
653
|
-
|
|
654
622
|
function blockerChallenges(context: WorkflowNodeContext): BlockerChallenge[] {
|
|
655
623
|
return context.state.steps
|
|
656
624
|
.filter((step) => step.nodeId === "challengeBlocker" && step.outcome === "ok")
|
|
@@ -688,16 +656,6 @@ function recentWorkflowAttempts(context: WorkflowNodeContext): unknown[] {
|
|
|
688
656
|
}
|
|
689
657
|
|
|
690
658
|
function latestIssue(context: WorkflowNodeContext): unknown {
|
|
691
|
-
const approval = context.outputs.approval as
|
|
692
|
-
| { exit?: string; output?: { instructions?: unknown } }
|
|
693
|
-
| undefined;
|
|
694
|
-
if (approval?.exit === "replan" && typeof approval.output?.instructions === "string") {
|
|
695
|
-
return {
|
|
696
|
-
source: "human-replan",
|
|
697
|
-
instructions: approval.output.instructions,
|
|
698
|
-
priorPlanDigest: currentPlanDigest(context),
|
|
699
|
-
};
|
|
700
|
-
}
|
|
701
659
|
const ids = [
|
|
702
660
|
"challengeBlocker",
|
|
703
661
|
"classifyImplementation",
|
|
@@ -1145,11 +1103,10 @@ function latestBlockedReason(context: WorkflowNodeContext): { reason: string; ev
|
|
|
1145
1103
|
"classifyImplementation",
|
|
1146
1104
|
"classifyVerification",
|
|
1147
1105
|
"triageReview",
|
|
1148
|
-
"
|
|
1106
|
+
"redesign",
|
|
1149
1107
|
"adoptPlan",
|
|
1150
1108
|
"findPlan",
|
|
1151
1109
|
"documentation",
|
|
1152
|
-
"approval",
|
|
1153
1110
|
];
|
|
1154
1111
|
for (let index = context.state.steps.length - 1; index >= 0; index -= 1) {
|
|
1155
1112
|
const step = context.state.steps[index];
|
|
@@ -1191,37 +1148,18 @@ export const autoimplementWorkflow = defineWorkflow({
|
|
|
1191
1148
|
};
|
|
1192
1149
|
},
|
|
1193
1150
|
}),
|
|
1194
|
-
|
|
1195
|
-
input: (context):
|
|
1151
|
+
redesign: includeWorkflow(planChangeWorkflow, {
|
|
1152
|
+
input: (context): NormalizedPlanChangeInput => {
|
|
1196
1153
|
const request = context.input as AutoimplementInput;
|
|
1197
|
-
if (request.approval === undefined) {
|
|
1198
|
-
throw new Error("autoimplement approval was entered without an approval policy");
|
|
1199
|
-
}
|
|
1200
|
-
const plan = currentPlan(context);
|
|
1201
|
-
if (plan === undefined) throw new Error("autoimplement approval is missing a plan");
|
|
1202
|
-
const revisions = context.state.steps.filter(
|
|
1203
|
-
(step) => step.nodeId === "approval/approve",
|
|
1204
|
-
).length;
|
|
1205
1154
|
return {
|
|
1206
1155
|
task: request.task,
|
|
1207
|
-
plan,
|
|
1208
|
-
planDigest: currentPlanDigest(context),
|
|
1209
|
-
audience: request.approval.audience,
|
|
1210
|
-
revision: revisions + 1,
|
|
1211
|
-
};
|
|
1212
|
-
},
|
|
1213
|
-
}),
|
|
1214
|
-
redesign: includeWorkflow({
|
|
1215
|
-
workflow: "autoplan",
|
|
1216
|
-
contract: autoplanWorkflow,
|
|
1217
|
-
input: (context): AutoplanInput => {
|
|
1218
|
-
const request = context.input as AutoimplementInput;
|
|
1219
|
-
return {
|
|
1220
|
-
problem: request.task,
|
|
1221
1156
|
...(request.scope !== undefined ? { scope: request.scope } : {}),
|
|
1222
1157
|
...(request.constraints !== undefined ? { constraints: request.constraints } : {}),
|
|
1158
|
+
...(request.repository !== undefined ? { repository: request.repository } : {}),
|
|
1159
|
+
documents: request.documents ?? request.documentation?.documents ?? [],
|
|
1223
1160
|
...(currentPlan(context) !== undefined ? { previousPlan: currentPlan(context) } : {}),
|
|
1224
1161
|
newEvidence: latestIssue(context),
|
|
1162
|
+
approval: parsePlanApprovalPolicy(request.approval),
|
|
1225
1163
|
};
|
|
1226
1164
|
},
|
|
1227
1165
|
}),
|
|
@@ -1285,40 +1223,17 @@ export const autoimplementWorkflow = defineWorkflow({
|
|
|
1285
1223
|
}),
|
|
1286
1224
|
adoptPlan: compute({
|
|
1287
1225
|
run: ({ outputs }) => {
|
|
1288
|
-
const result = includedResult(
|
|
1226
|
+
const result = includedResult(planChangeWorkflow, outputs.redesign);
|
|
1289
1227
|
if (result.exit !== "ready") throw new Error("redesign did not return a ready plan");
|
|
1290
1228
|
return {
|
|
1291
|
-
route: result.output.changed ? "document" : "blocked",
|
|
1292
1229
|
plan: result.output.plan,
|
|
1293
1230
|
planDigest: result.output.planDigest,
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
: "Redesign returned the same plan for the same unresolved evidence.",
|
|
1231
|
+
documents: result.output.documents,
|
|
1232
|
+
approval: result.output.approval,
|
|
1233
|
+
reason: "The changed plan was documented and passed its approval policy.",
|
|
1298
1234
|
};
|
|
1299
1235
|
},
|
|
1300
1236
|
}),
|
|
1301
|
-
maybeApproval: compute({
|
|
1302
|
-
run: ({ input }) => ({
|
|
1303
|
-
route: (input as AutoimplementInput).approval === undefined ? "implement" : "approve",
|
|
1304
|
-
}),
|
|
1305
|
-
}),
|
|
1306
|
-
replanGuard: compute({
|
|
1307
|
-
run: (context) => {
|
|
1308
|
-
const request = context.input as AutoimplementInput;
|
|
1309
|
-
const limit = request.approval?.maxReplans ?? 3;
|
|
1310
|
-
const replans = context.state.steps.filter(
|
|
1311
|
-
(step) => step.nodeId === "approval/replan",
|
|
1312
|
-
).length;
|
|
1313
|
-
return replans > limit
|
|
1314
|
-
? {
|
|
1315
|
-
route: "blocked",
|
|
1316
|
-
reason: `Plan approval reached the ${limit}-replan safety limit.`,
|
|
1317
|
-
evidence: context.outputs.approval,
|
|
1318
|
-
}
|
|
1319
|
-
: { route: "redesign", replans, limit };
|
|
1320
|
-
},
|
|
1321
|
-
}),
|
|
1322
1237
|
timeoutFallbackGuard: compute({
|
|
1323
1238
|
run: timeoutFallbackGuard,
|
|
1324
1239
|
}),
|
|
@@ -1808,7 +1723,7 @@ export const autoimplementWorkflow = defineWorkflow({
|
|
|
1808
1723
|
from: "prepare",
|
|
1809
1724
|
switch: {
|
|
1810
1725
|
on: "$.route",
|
|
1811
|
-
cases: { find: "findPlan", document: "documentation", ready: "
|
|
1726
|
+
cases: { find: "findPlan", document: "documentation", ready: "implement" },
|
|
1812
1727
|
},
|
|
1813
1728
|
},
|
|
1814
1729
|
{
|
|
@@ -1819,28 +1734,14 @@ export const autoimplementWorkflow = defineWorkflow({
|
|
|
1819
1734
|
from: "routeFoundPlan",
|
|
1820
1735
|
switch: {
|
|
1821
1736
|
on: "$.route",
|
|
1822
|
-
cases: { ready: "
|
|
1737
|
+
cases: { ready: "implement", document: "documentation", blocked: "blocked" },
|
|
1823
1738
|
},
|
|
1824
1739
|
},
|
|
1825
1740
|
{ from: "redesign.ready", to: "adoptPlan" },
|
|
1826
1741
|
{ from: "redesign.blocked", to: "blocked" },
|
|
1827
|
-
{
|
|
1828
|
-
|
|
1829
|
-
switch: { on: "$.route", cases: { document: "documentation", blocked: "blocked" } },
|
|
1830
|
-
},
|
|
1831
|
-
{ from: "documentation.ready", to: "maybeApproval" },
|
|
1742
|
+
{ from: "adoptPlan", to: "implement" },
|
|
1743
|
+
{ from: "documentation.ready", to: "implement" },
|
|
1832
1744
|
{ from: "documentation.blocked", to: "blocked" },
|
|
1833
|
-
{
|
|
1834
|
-
from: "maybeApproval",
|
|
1835
|
-
switch: { on: "$.route", cases: { approve: "approval", implement: "implement" } },
|
|
1836
|
-
},
|
|
1837
|
-
{ from: "approval.continue", to: "implement" },
|
|
1838
|
-
{ from: "approval.stop", to: "blocked" },
|
|
1839
|
-
{ from: "approval.replan", to: "replanGuard" },
|
|
1840
|
-
{
|
|
1841
|
-
from: "replanGuard",
|
|
1842
|
-
switch: { on: "$.route", cases: { redesign: "redesign", blocked: "blocked" } },
|
|
1843
|
-
},
|
|
1844
1745
|
{
|
|
1845
1746
|
from: "timeoutFallbackGuard",
|
|
1846
1747
|
switch: { on: "$.route", cases: { recover: "timeoutFallback", blocked: "blocked" } },
|