@osolmaz/pi-workflows 0.13.2 → 0.13.3
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 +5 -3
- package/dist/builtins/autodoc.workflow.d.ts +5 -5
- package/dist/builtins/autoimplement.workflow.d.ts +65 -61
- package/dist/builtins/autoimplement.workflow.js +47 -8
- package/dist/builtins/autoimplement.workflow.js.map +1 -1
- package/dist/builtins/autoplan.workflow.d.ts +5 -5
- package/dist/builtins/catalog.js +1 -1
- package/dist/builtins/change-verification.workflow.d.ts +1 -1
- package/dist/builtins/plain-summary.workflow.d.ts +1 -1
- package/dist/builtins/plan-approval.workflow.d.ts +1 -1
- package/dist/builtins/plan-change.workflow.d.ts +23 -23
- package/dist/builtins/sanity-check.workflow.d.ts +3 -3
- package/dist/builtins/workspace-preparation.workflow.d.ts +1 -1
- package/dist/controllers/index.d.ts +2 -2
- package/dist/controllers/index.js.map +1 -1
- package/dist/controllers/sqlite.js +85 -23
- package/dist/controllers/sqlite.js.map +1 -1
- package/dist/controllers/types.d.ts +34 -0
- package/dist/controllers/workflow-engine-scheduler.d.ts +5 -1
- package/dist/controllers/workflow-engine-scheduler.js +83 -1
- package/dist/controllers/workflow-engine-scheduler.js.map +1 -1
- package/dist/controllers/workflows.d.ts +8 -1
- package/dist/controllers/workflows.js +36 -0
- package/dist/controllers/workflows.js.map +1 -1
- package/dist/extension/controller-host.d.ts +2 -1
- package/dist/extension/controller-host.js +1 -1
- package/dist/extension/controller-host.js.map +1 -1
- package/dist/extension/follow-up-coordinator.d.ts +27 -0
- package/dist/extension/follow-up-coordinator.js +131 -0
- package/dist/extension/follow-up-coordinator.js.map +1 -0
- package/dist/extension/index.d.ts +9 -0
- package/dist/extension/index.js +460 -75
- package/dist/extension/index.js.map +1 -1
- package/dist/extension/session-events.d.ts +2 -3
- package/dist/extension/session-events.js +11 -10
- package/dist/extension/session-events.js.map +1 -1
- package/dist/extension/widget.js +9 -0
- package/dist/extension/widget.js.map +1 -1
- package/dist/state/database.d.ts +2 -1
- package/dist/state/database.js +11 -13
- package/dist/state/database.js.map +1 -1
- package/dist/state/json.js +6 -1
- package/dist/state/json.js.map +1 -1
- package/dist/state/mutation.d.ts +1 -1
- package/dist/state/mutation.js.map +1 -1
- package/dist/state/prune.d.ts +18 -0
- package/dist/state/prune.js +373 -0
- package/dist/state/prune.js.map +1 -0
- package/dist/state/schema.d.ts +1 -1
- package/dist/state/schema.js +116 -18
- package/dist/state/schema.js.map +1 -1
- package/dist/viewer/cli.d.ts +3 -1
- package/dist/viewer/cli.js +55 -4
- package/dist/viewer/cli.js.map +1 -1
- package/dist/viewer/render.js +19 -1
- package/dist/viewer/render.js.map +1 -1
- package/dist/workflows/composition.d.ts +2 -0
- package/dist/workflows/composition.js +15 -0
- package/dist/workflows/composition.js.map +1 -1
- package/dist/workflows/definition.d.ts +6 -3
- package/dist/workflows/definition.js +3 -0
- package/dist/workflows/definition.js.map +1 -1
- package/dist/workflows/engine.d.ts +6 -1
- package/dist/workflows/engine.js +301 -35
- package/dist/workflows/engine.js.map +1 -1
- package/dist/workflows/human-decision.d.ts +1 -0
- package/dist/workflows/human-decision.js +25 -9
- package/dist/workflows/human-decision.js.map +1 -1
- package/dist/workflows/index.d.ts +3 -1
- package/dist/workflows/index.js +2 -0
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/json-patch.d.ts +47 -0
- package/dist/workflows/json-patch.js +298 -0
- package/dist/workflows/json-patch.js.map +1 -0
- package/dist/workflows/schema.js +29 -1
- package/dist/workflows/schema.js.map +1 -1
- package/dist/workflows/settings.d.ts +128 -0
- package/dist/workflows/settings.js +199 -0
- package/dist/workflows/settings.js.map +1 -0
- package/dist/workflows/store.d.ts +75 -2
- package/dist/workflows/store.js +1349 -89
- package/dist/workflows/store.js.map +1 -1
- package/dist/workflows/tool-input.d.ts +22 -0
- package/dist/workflows/tool-input.js +43 -0
- package/dist/workflows/tool-input.js.map +1 -1
- package/dist/workflows/types.d.ts +40 -5
- package/docs/2026-08-25-workflow-follow-ups.md +132 -0
- package/docs/2026-08-25-workflow-settings.md +169 -0
- package/docs/DEFERRED_TURNS.md +6 -0
- package/docs/DESIGN_PHILOSOPHY.md +2 -0
- package/docs/SQLITE_STATE.md +31 -18
- package/docs/WORKFLOW_COMPOSITION.md +15 -0
- package/docs/WORKFLOW_STEP_MESSAGES.md +4 -2
- package/docs/plans/2026-08-25-live-workflow-settings-plan.md +532 -0
- package/docs/plans/2026-08-25-workflow-run-storage-plan.md +67 -0
- package/docs/tui-viewer.md +7 -6
- package/docs/workflows.md +22 -1
- package/examples/workflows/live-settings.workflow.ts +93 -0
- package/herdr-plugin.toml +1 -1
- package/package.json +1 -1
- package/src/builtins/autoimplement.workflow.ts +56 -8
- package/src/builtins/catalog.ts +1 -1
- package/src/controllers/index.ts +6 -0
- package/src/controllers/sqlite.ts +129 -35
- package/src/controllers/types.ts +40 -0
- package/src/controllers/workflow-engine-scheduler.ts +103 -1
- package/src/controllers/workflows.ts +68 -0
- package/src/extension/controller-host.ts +6 -1
- package/src/extension/follow-up-coordinator.ts +151 -0
- package/src/extension/index.ts +538 -88
- package/src/extension/session-events.ts +15 -13
- package/src/extension/widget.ts +8 -0
- package/src/state/database.ts +12 -12
- package/src/state/json.ts +6 -1
- package/src/state/mutation.ts +4 -1
- package/src/state/prune.ts +502 -0
- package/src/state/schema.ts +116 -18
- package/src/viewer/cli.ts +52 -5
- package/src/viewer/render.ts +43 -1
- package/src/workflows/composition.ts +19 -0
- package/src/workflows/definition.ts +19 -5
- package/src/workflows/engine.ts +363 -35
- package/src/workflows/human-decision.ts +41 -11
- package/src/workflows/index.ts +43 -0
- package/src/workflows/json-patch.ts +375 -0
- package/src/workflows/schema.ts +31 -1
- package/src/workflows/settings.ts +430 -0
- package/src/workflows/store.ts +1977 -184
- package/src/workflows/tool-input.ts +58 -0
- package/src/workflows/types.ts +43 -4
|
@@ -59,7 +59,7 @@ export declare const planChangeWorkflow: import("../workflows/types.js").Workflo
|
|
|
59
59
|
readonly from: "finish";
|
|
60
60
|
readonly validate: (value: unknown) => import("./plain-summary.workflow.js").PlainSummaryResult;
|
|
61
61
|
};
|
|
62
|
-
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
62
|
+
}, import("../workflows/types.js").WorkflowIncludeMap, unknown> & {
|
|
63
63
|
nodes: {
|
|
64
64
|
readonly summarize: import("../workflows/types.js").AssistantAgentNodeDefinition;
|
|
65
65
|
readonly finish: import("../workflows/types.js").ComputeNodeDefinition;
|
|
@@ -77,7 +77,7 @@ export declare const planChangeWorkflow: import("../workflows/types.js").Workflo
|
|
|
77
77
|
readonly from: "finish";
|
|
78
78
|
readonly validate: (value: unknown) => import("./plain-summary.workflow.js").PlainSummaryResult;
|
|
79
79
|
};
|
|
80
|
-
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
80
|
+
}, import("../workflows/types.js").WorkflowIncludeMap, unknown> & {
|
|
81
81
|
nodes: {
|
|
82
82
|
readonly summarize: import("../workflows/types.js").AssistantAgentNodeDefinition;
|
|
83
83
|
readonly finish: import("../workflows/types.js").ComputeNodeDefinition;
|
|
@@ -90,7 +90,7 @@ export declare const planChangeWorkflow: import("../workflows/types.js").Workflo
|
|
|
90
90
|
};
|
|
91
91
|
};
|
|
92
92
|
}>;
|
|
93
|
-
}> & {
|
|
93
|
+
}, unknown> & {
|
|
94
94
|
nodes: {
|
|
95
95
|
readonly captureIntent: import("../workflows/types.js").SubmittedAgentNodeDefinition;
|
|
96
96
|
readonly frame: import("../workflows/types.js").SubmittedAgentNodeDefinition;
|
|
@@ -107,7 +107,7 @@ export declare const planChangeWorkflow: import("../workflows/types.js").Workflo
|
|
|
107
107
|
readonly from: "finish";
|
|
108
108
|
readonly validate: (value: unknown) => import("./plain-summary.workflow.js").PlainSummaryResult;
|
|
109
109
|
};
|
|
110
|
-
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
110
|
+
}, import("../workflows/types.js").WorkflowIncludeMap, unknown> & {
|
|
111
111
|
nodes: {
|
|
112
112
|
readonly summarize: import("../workflows/types.js").AssistantAgentNodeDefinition;
|
|
113
113
|
readonly finish: import("../workflows/types.js").ComputeNodeDefinition;
|
|
@@ -125,7 +125,7 @@ export declare const planChangeWorkflow: import("../workflows/types.js").Workflo
|
|
|
125
125
|
readonly from: "finish";
|
|
126
126
|
readonly validate: (value: unknown) => import("./plain-summary.workflow.js").PlainSummaryResult;
|
|
127
127
|
};
|
|
128
|
-
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
128
|
+
}, import("../workflows/types.js").WorkflowIncludeMap, unknown> & {
|
|
129
129
|
nodes: {
|
|
130
130
|
readonly summarize: import("../workflows/types.js").AssistantAgentNodeDefinition;
|
|
131
131
|
readonly finish: import("../workflows/types.js").ComputeNodeDefinition;
|
|
@@ -180,7 +180,7 @@ export declare const planChangeWorkflow: import("../workflows/types.js").Workflo
|
|
|
180
180
|
evidence: string[];
|
|
181
181
|
};
|
|
182
182
|
};
|
|
183
|
-
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
183
|
+
}, import("../workflows/types.js").WorkflowIncludeMap, unknown> & {
|
|
184
184
|
nodes: {
|
|
185
185
|
readonly inspect: import("../workflows/types.js").FunctionActionNodeDefinition;
|
|
186
186
|
readonly propose: import("../workflows/types.js").SubmittedAgentNodeDefinition;
|
|
@@ -220,7 +220,7 @@ export declare const planChangeWorkflow: import("../workflows/types.js").Workflo
|
|
|
220
220
|
readonly from: "blocked";
|
|
221
221
|
readonly validate: (value: unknown) => import("./change-verification.workflow.js").ChangeVerificationResult;
|
|
222
222
|
};
|
|
223
|
-
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
223
|
+
}, import("../workflows/types.js").WorkflowIncludeMap, unknown> & {
|
|
224
224
|
nodes: {
|
|
225
225
|
readonly selectChecks: import("../workflows/types.js").ComputeNodeDefinition;
|
|
226
226
|
readonly planChecks: import("../workflows/types.js").SubmittedAgentNodeDefinition;
|
|
@@ -246,7 +246,7 @@ export declare const planChangeWorkflow: import("../workflows/types.js").Workflo
|
|
|
246
246
|
};
|
|
247
247
|
};
|
|
248
248
|
}>;
|
|
249
|
-
}> & {
|
|
249
|
+
}, unknown> & {
|
|
250
250
|
nodes: {
|
|
251
251
|
readonly prepare: import("../workflows/types.js").ComputeNodeDefinition;
|
|
252
252
|
readonly locatePlan: import("../workflows/types.js").SubmittedAgentNodeDefinition;
|
|
@@ -277,7 +277,7 @@ export declare const planChangeWorkflow: import("../workflows/types.js").Workflo
|
|
|
277
277
|
evidence: string[];
|
|
278
278
|
};
|
|
279
279
|
};
|
|
280
|
-
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
280
|
+
}, import("../workflows/types.js").WorkflowIncludeMap, unknown> & {
|
|
281
281
|
nodes: {
|
|
282
282
|
readonly inspect: import("../workflows/types.js").FunctionActionNodeDefinition;
|
|
283
283
|
readonly propose: import("../workflows/types.js").SubmittedAgentNodeDefinition;
|
|
@@ -317,7 +317,7 @@ export declare const planChangeWorkflow: import("../workflows/types.js").Workflo
|
|
|
317
317
|
readonly from: "blocked";
|
|
318
318
|
readonly validate: (value: unknown) => import("./change-verification.workflow.js").ChangeVerificationResult;
|
|
319
319
|
};
|
|
320
|
-
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
320
|
+
}, import("../workflows/types.js").WorkflowIncludeMap, unknown> & {
|
|
321
321
|
nodes: {
|
|
322
322
|
readonly selectChecks: import("../workflows/types.js").ComputeNodeDefinition;
|
|
323
323
|
readonly planChecks: import("../workflows/types.js").SubmittedAgentNodeDefinition;
|
|
@@ -368,7 +368,7 @@ export declare const planChangeWorkflow: import("../workflows/types.js").Workflo
|
|
|
368
368
|
readonly from: "replan";
|
|
369
369
|
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalReplan;
|
|
370
370
|
};
|
|
371
|
-
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
371
|
+
}, import("../workflows/types.js").WorkflowIncludeMap, unknown> & {
|
|
372
372
|
nodes: {
|
|
373
373
|
readonly routePolicy: import("../workflows/types.js").ComputeNodeDefinition;
|
|
374
374
|
readonly approve: import("../workflows/types.js").WorkflowNodeCommon & {
|
|
@@ -412,7 +412,7 @@ export declare const planChangeWorkflow: import("../workflows/types.js").Workflo
|
|
|
412
412
|
};
|
|
413
413
|
};
|
|
414
414
|
}>;
|
|
415
|
-
}> & {
|
|
415
|
+
}, unknown> & {
|
|
416
416
|
nodes: {
|
|
417
417
|
readonly start: import("../workflows/types.js").ComputeNodeDefinition;
|
|
418
418
|
readonly assessPlan: import("../workflows/types.js").ComputeNodeDefinition;
|
|
@@ -436,7 +436,7 @@ export declare const planChangeWorkflow: import("../workflows/types.js").Workflo
|
|
|
436
436
|
readonly from: "finish";
|
|
437
437
|
readonly validate: (value: unknown) => import("./plain-summary.workflow.js").PlainSummaryResult;
|
|
438
438
|
};
|
|
439
|
-
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
439
|
+
}, import("../workflows/types.js").WorkflowIncludeMap, unknown> & {
|
|
440
440
|
nodes: {
|
|
441
441
|
readonly summarize: import("../workflows/types.js").AssistantAgentNodeDefinition;
|
|
442
442
|
readonly finish: import("../workflows/types.js").ComputeNodeDefinition;
|
|
@@ -454,7 +454,7 @@ export declare const planChangeWorkflow: import("../workflows/types.js").Workflo
|
|
|
454
454
|
readonly from: "finish";
|
|
455
455
|
readonly validate: (value: unknown) => import("./plain-summary.workflow.js").PlainSummaryResult;
|
|
456
456
|
};
|
|
457
|
-
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
457
|
+
}, import("../workflows/types.js").WorkflowIncludeMap, unknown> & {
|
|
458
458
|
nodes: {
|
|
459
459
|
readonly summarize: import("../workflows/types.js").AssistantAgentNodeDefinition;
|
|
460
460
|
readonly finish: import("../workflows/types.js").ComputeNodeDefinition;
|
|
@@ -467,7 +467,7 @@ export declare const planChangeWorkflow: import("../workflows/types.js").Workflo
|
|
|
467
467
|
};
|
|
468
468
|
};
|
|
469
469
|
}>;
|
|
470
|
-
}> & {
|
|
470
|
+
}, unknown> & {
|
|
471
471
|
nodes: {
|
|
472
472
|
readonly captureIntent: import("../workflows/types.js").SubmittedAgentNodeDefinition;
|
|
473
473
|
readonly frame: import("../workflows/types.js").SubmittedAgentNodeDefinition;
|
|
@@ -484,7 +484,7 @@ export declare const planChangeWorkflow: import("../workflows/types.js").Workflo
|
|
|
484
484
|
readonly from: "finish";
|
|
485
485
|
readonly validate: (value: unknown) => import("./plain-summary.workflow.js").PlainSummaryResult;
|
|
486
486
|
};
|
|
487
|
-
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
487
|
+
}, import("../workflows/types.js").WorkflowIncludeMap, unknown> & {
|
|
488
488
|
nodes: {
|
|
489
489
|
readonly summarize: import("../workflows/types.js").AssistantAgentNodeDefinition;
|
|
490
490
|
readonly finish: import("../workflows/types.js").ComputeNodeDefinition;
|
|
@@ -502,7 +502,7 @@ export declare const planChangeWorkflow: import("../workflows/types.js").Workflo
|
|
|
502
502
|
readonly from: "finish";
|
|
503
503
|
readonly validate: (value: unknown) => import("./plain-summary.workflow.js").PlainSummaryResult;
|
|
504
504
|
};
|
|
505
|
-
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
505
|
+
}, import("../workflows/types.js").WorkflowIncludeMap, unknown> & {
|
|
506
506
|
nodes: {
|
|
507
507
|
readonly summarize: import("../workflows/types.js").AssistantAgentNodeDefinition;
|
|
508
508
|
readonly finish: import("../workflows/types.js").ComputeNodeDefinition;
|
|
@@ -557,7 +557,7 @@ export declare const planChangeWorkflow: import("../workflows/types.js").Workflo
|
|
|
557
557
|
evidence: string[];
|
|
558
558
|
};
|
|
559
559
|
};
|
|
560
|
-
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
560
|
+
}, import("../workflows/types.js").WorkflowIncludeMap, unknown> & {
|
|
561
561
|
nodes: {
|
|
562
562
|
readonly inspect: import("../workflows/types.js").FunctionActionNodeDefinition;
|
|
563
563
|
readonly propose: import("../workflows/types.js").SubmittedAgentNodeDefinition;
|
|
@@ -597,7 +597,7 @@ export declare const planChangeWorkflow: import("../workflows/types.js").Workflo
|
|
|
597
597
|
readonly from: "blocked";
|
|
598
598
|
readonly validate: (value: unknown) => import("./change-verification.workflow.js").ChangeVerificationResult;
|
|
599
599
|
};
|
|
600
|
-
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
600
|
+
}, import("../workflows/types.js").WorkflowIncludeMap, unknown> & {
|
|
601
601
|
nodes: {
|
|
602
602
|
readonly selectChecks: import("../workflows/types.js").ComputeNodeDefinition;
|
|
603
603
|
readonly planChecks: import("../workflows/types.js").SubmittedAgentNodeDefinition;
|
|
@@ -623,7 +623,7 @@ export declare const planChangeWorkflow: import("../workflows/types.js").Workflo
|
|
|
623
623
|
};
|
|
624
624
|
};
|
|
625
625
|
}>;
|
|
626
|
-
}> & {
|
|
626
|
+
}, unknown> & {
|
|
627
627
|
nodes: {
|
|
628
628
|
readonly prepare: import("../workflows/types.js").ComputeNodeDefinition;
|
|
629
629
|
readonly locatePlan: import("../workflows/types.js").SubmittedAgentNodeDefinition;
|
|
@@ -654,7 +654,7 @@ export declare const planChangeWorkflow: import("../workflows/types.js").Workflo
|
|
|
654
654
|
evidence: string[];
|
|
655
655
|
};
|
|
656
656
|
};
|
|
657
|
-
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
657
|
+
}, import("../workflows/types.js").WorkflowIncludeMap, unknown> & {
|
|
658
658
|
nodes: {
|
|
659
659
|
readonly inspect: import("../workflows/types.js").FunctionActionNodeDefinition;
|
|
660
660
|
readonly propose: import("../workflows/types.js").SubmittedAgentNodeDefinition;
|
|
@@ -694,7 +694,7 @@ export declare const planChangeWorkflow: import("../workflows/types.js").Workflo
|
|
|
694
694
|
readonly from: "blocked";
|
|
695
695
|
readonly validate: (value: unknown) => import("./change-verification.workflow.js").ChangeVerificationResult;
|
|
696
696
|
};
|
|
697
|
-
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
697
|
+
}, import("../workflows/types.js").WorkflowIncludeMap, unknown> & {
|
|
698
698
|
nodes: {
|
|
699
699
|
readonly selectChecks: import("../workflows/types.js").ComputeNodeDefinition;
|
|
700
700
|
readonly planChecks: import("../workflows/types.js").SubmittedAgentNodeDefinition;
|
|
@@ -745,7 +745,7 @@ export declare const planChangeWorkflow: import("../workflows/types.js").Workflo
|
|
|
745
745
|
readonly from: "replan";
|
|
746
746
|
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalReplan;
|
|
747
747
|
};
|
|
748
|
-
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
748
|
+
}, import("../workflows/types.js").WorkflowIncludeMap, unknown> & {
|
|
749
749
|
nodes: {
|
|
750
750
|
readonly routePolicy: import("../workflows/types.js").ComputeNodeDefinition;
|
|
751
751
|
readonly approve: import("../workflows/types.js").WorkflowNodeCommon & {
|
|
@@ -80,7 +80,7 @@ export declare const sanityCheckWorkflow: import("../workflows/types.js").Workfl
|
|
|
80
80
|
readonly from: "finish";
|
|
81
81
|
readonly validate: (value: unknown) => import("./plain-summary.workflow.js").PlainSummaryResult;
|
|
82
82
|
};
|
|
83
|
-
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
83
|
+
}, import("../workflows/types.js").WorkflowIncludeMap, unknown> & {
|
|
84
84
|
nodes: {
|
|
85
85
|
readonly summarize: import("../workflows/types.js").AssistantAgentNodeDefinition;
|
|
86
86
|
readonly finish: import("../workflows/types.js").ComputeNodeDefinition;
|
|
@@ -93,7 +93,7 @@ export declare const sanityCheckWorkflow: import("../workflows/types.js").Workfl
|
|
|
93
93
|
};
|
|
94
94
|
};
|
|
95
95
|
}>;
|
|
96
|
-
}> & {
|
|
96
|
+
}, unknown> & {
|
|
97
97
|
nodes: {
|
|
98
98
|
readonly prepare: import("../workflows/types.js").ComputeNodeDefinition;
|
|
99
99
|
readonly collectEvidence: import("../workflows/types.js").FunctionActionNodeDefinition;
|
|
@@ -108,7 +108,7 @@ export declare const sanityCheckWorkflow: import("../workflows/types.js").Workfl
|
|
|
108
108
|
readonly from: "finish";
|
|
109
109
|
readonly validate: (value: unknown) => import("./plain-summary.workflow.js").PlainSummaryResult;
|
|
110
110
|
};
|
|
111
|
-
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
111
|
+
}, import("../workflows/types.js").WorkflowIncludeMap, unknown> & {
|
|
112
112
|
nodes: {
|
|
113
113
|
readonly summarize: import("../workflows/types.js").AssistantAgentNodeDefinition;
|
|
114
114
|
readonly finish: import("../workflows/types.js").ComputeNodeDefinition;
|
|
@@ -52,7 +52,7 @@ export declare const workspacePreparationWorkflow: import("../workflows/types.js
|
|
|
52
52
|
readonly from: "blocked";
|
|
53
53
|
readonly validate: (value: unknown) => WorkspaceInspection;
|
|
54
54
|
};
|
|
55
|
-
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
55
|
+
}, import("../workflows/types.js").WorkflowIncludeMap, unknown> & {
|
|
56
56
|
nodes: {
|
|
57
57
|
readonly inspect: import("../workflows/types.js").FunctionActionNodeDefinition;
|
|
58
58
|
readonly propose: import("../workflows/types.js").SubmittedAgentNodeDefinition;
|
|
@@ -9,5 +9,5 @@ export { SqliteControllerStore, type RunEventRecord, type WorkflowNotificationRe
|
|
|
9
9
|
export { type ControllerStore, type EffectReservation, type QueueItem, type QueueRequeueOptions, type WorkflowRecordUpdate, type WorkflowReservation, } from "./store.js";
|
|
10
10
|
export { controllerFileStem, controllerSearchDirs, discoverControllers, loadControllerFile, loadDiscoveredControllers, type DiscoveredController, } from "./loader.js";
|
|
11
11
|
export { WorkflowEngineScheduler, type ResolvedChildWorkflow, type WorkflowEngineSchedulerOptions, } from "./workflow-engine-scheduler.js";
|
|
12
|
-
export { ControllerWorkflowCoordinator, type ControllerWorkflowScheduler, type WorkflowSchedulerRequest, type WorkflowSchedulerResult, } from "./workflows.js";
|
|
13
|
-
export type { AnyControllerDefinition, ChildWorkflowRecord, ChildWorkflowReference, ChildWorkflowRequest, ChildWorkflowState, ControllerCondition, ControllerConditionInput, ControllerConditionStatus, ControllerDefinition, ControllerEffects, ControllerEvent, ControllerQueueClaim, ControllerResource, ControllerResourceRef, ControllerResourceStatus, ControllerStatusPatch, ControllerWorkflows, EffectApplication, EffectDefinition, EffectObservation, EffectRecord, EffectState, JsonObject, JsonPrimitive, JsonValue, MaybePromise, ReconcileContext, ReconcileResult, } from "./types.js";
|
|
12
|
+
export { ControllerWorkflowCoordinator, type ControllerWorkflowControlRequest, type ControllerWorkflowScheduler, type WorkflowSchedulerRequest, type WorkflowSchedulerResult, } from "./workflows.js";
|
|
13
|
+
export type { AnyControllerDefinition, ChildWorkflowRecord, ChildWorkflowReference, ChildWorkflowRequest, ChildWorkflowState, ControllerCondition, ControllerConditionInput, ControllerConditionStatus, ControllerDefinition, ControllerEffects, ControllerFollowUpResult, ControllerQueueFollowUpRequest, ControllerRemoveFollowUpRequest, ControllerSettingsChangeRequest, ControllerSettingsChangeResult, ControllerEvent, ControllerQueueClaim, ControllerResource, ControllerResourceRef, ControllerResourceStatus, ControllerStatusPatch, ControllerWorkflows, EffectApplication, EffectDefinition, EffectObservation, EffectRecord, EffectState, JsonObject, JsonPrimitive, JsonValue, MaybePromise, ReconcileContext, ReconcileResult, } from "./types.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/controllers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,+BAA+B,EAC/B,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAiC,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EACL,qBAAqB,GAItB,MAAM,aAAa,CAAC;AACrB,OAAO,EAON,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,yBAAyB,GAE1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,uBAAuB,GAGxB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,6BAA6B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/controllers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,+BAA+B,EAC/B,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAiC,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EACL,qBAAqB,GAItB,MAAM,aAAa,CAAC;AACrB,OAAO,EAON,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,yBAAyB,GAE1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,uBAAuB,GAGxB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,6BAA6B,GAK9B,MAAM,gBAAgB,CAAC"}
|
|
@@ -534,8 +534,6 @@ export class SqliteControllerStore {
|
|
|
534
534
|
const resourceId = resourceIdFor("run", options.runId);
|
|
535
535
|
const definitionHash = this.state.putJson(options.definitionSnapshot, now);
|
|
536
536
|
const queuedSource = queuedWorkflowSource(options.workflowSource);
|
|
537
|
-
const sourceHash = this.state.putJson(queuedSource.root, now);
|
|
538
|
-
const mountedSourcesHash = queuedSource.mounted.length === 0 ? null : this.state.putJson(queuedSource.mounted, now);
|
|
539
537
|
const inputHash = this.state.putJson(options.input ?? null, now);
|
|
540
538
|
const launchHash = this.state.putJson(options.launchOptions ?? {}, now);
|
|
541
539
|
this.state.connection
|
|
@@ -551,15 +549,14 @@ export class SqliteControllerStore {
|
|
|
551
549
|
this.state.connection
|
|
552
550
|
.prepare("INSERT INTO leases(resource_id, generation) VALUES (?, 0)")
|
|
553
551
|
.run(resourceId);
|
|
554
|
-
const source = sourceParts(options.workflowSourceRef, options.definitionDigest);
|
|
555
552
|
this.state.connection
|
|
556
553
|
.prepare(`INSERT INTO runs(
|
|
557
554
|
run_id, resource_id, project_id, parent_run_id, definition_digest,
|
|
558
|
-
workflow_ref,
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
555
|
+
workflow_ref, launch_options_hash, status, paused,
|
|
556
|
+
input_hash, created_at, updated_at
|
|
557
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, 'queued', 0, ?, ?, ?)`)
|
|
558
|
+
.run(options.runId, resourceId, this.requireProjectId(), options.parentRunId ?? null, definitionDigest, options.workflowSourceRef, launchHash, inputHash, now, now);
|
|
559
|
+
insertQueuedRunSources(this.state, options.runId, queuedSource);
|
|
563
560
|
this.state.connection
|
|
564
561
|
.prepare(`INSERT INTO run_bindings(run_id, origin_session_id, execution_mode, created_at)
|
|
565
562
|
VALUES (?, ?, 'interactive', ?)`)
|
|
@@ -1284,10 +1281,7 @@ export class SqliteControllerStore {
|
|
|
1284
1281
|
runId: row.runId,
|
|
1285
1282
|
workflowName: row.workflowName,
|
|
1286
1283
|
workflowSourceRef: row.workflowRef,
|
|
1287
|
-
workflowSource:
|
|
1288
|
-
root: this.state.readJson(row.workflowSourceHash),
|
|
1289
|
-
mounted: row.workflowSourcesHash === null ? [] : this.state.readJson(row.workflowSourcesHash),
|
|
1290
|
-
},
|
|
1284
|
+
workflowSource: readQueuedRunSources(this.state, row),
|
|
1291
1285
|
initialized: row.runStatus !== "queued",
|
|
1292
1286
|
definitionDigest: `sha256:${row.definitionDigest.toString("hex")}`,
|
|
1293
1287
|
input: this.state.readJson(row.inputHash),
|
|
@@ -1433,8 +1427,6 @@ export class SqliteControllerStore {
|
|
|
1433
1427
|
this.state.connection
|
|
1434
1428
|
.prepare(`UPDATE runs
|
|
1435
1429
|
SET status = ?, paused = 0, status_detail = NULL, error_hash = ?,
|
|
1436
|
-
current_node = NULL, current_attempt_id = NULL,
|
|
1437
|
-
current_node_started_at = NULL, waiting_on = NULL,
|
|
1438
1430
|
updated_at = ?, finished_at = ?
|
|
1439
1431
|
WHERE run_id = ?`)
|
|
1440
1432
|
.run(status, errorHash, now, now, runId);
|
|
@@ -1631,9 +1623,8 @@ function workflowSelect(clause) {
|
|
|
1631
1623
|
function workflowRunSelect(clause) {
|
|
1632
1624
|
return `SELECT r.run_id AS runId, r.resource_id AS resourceId,
|
|
1633
1625
|
d.workflow_name AS workflowName, r.workflow_ref AS workflowRef, r.status AS runStatus,
|
|
1634
|
-
r.
|
|
1635
|
-
r.
|
|
1636
|
-
r.definition_digest AS definitionDigest, r.input_hash AS inputHash,
|
|
1626
|
+
r.definition_digest AS definitionDigest, d.definition_hash AS definitionHash,
|
|
1627
|
+
r.input_hash AS inputHash,
|
|
1637
1628
|
r.launch_options_hash AS launchOptionsHash,
|
|
1638
1629
|
q.status, q.available_at AS availableAt, q.affinity_runner_id AS affinityRunnerId,
|
|
1639
1630
|
q.consecutive_errors AS consecutiveErrors, q.error_code AS errorCode,
|
|
@@ -1681,6 +1672,9 @@ function isLeaseRow(value) {
|
|
|
1681
1672
|
function isRunRow(value) {
|
|
1682
1673
|
return isRecord(value);
|
|
1683
1674
|
}
|
|
1675
|
+
function isRunSourceIdentityRow(value) {
|
|
1676
|
+
return isRecord(value);
|
|
1677
|
+
}
|
|
1684
1678
|
function isEffectRow(value) {
|
|
1685
1679
|
return isRecord(value);
|
|
1686
1680
|
}
|
|
@@ -1753,18 +1747,86 @@ function digestBuffer(value) {
|
|
|
1753
1747
|
return Buffer.from(hex, "hex");
|
|
1754
1748
|
}
|
|
1755
1749
|
function queuedWorkflowSource(value) {
|
|
1756
|
-
if (
|
|
1750
|
+
if (isWorkflowSource(value)) {
|
|
1757
1751
|
return { root: value, mounted: [] };
|
|
1758
1752
|
}
|
|
1759
|
-
if (isRecord(value) &&
|
|
1753
|
+
if (isRecord(value) &&
|
|
1754
|
+
isWorkflowSource(value.root) &&
|
|
1755
|
+
Array.isArray(value.mounted) &&
|
|
1756
|
+
value.mounted.every(isMountedWorkflowSource)) {
|
|
1760
1757
|
return { root: value.root, mounted: value.mounted };
|
|
1761
1758
|
}
|
|
1762
1759
|
throw new Error("Stored workflow source identity is invalid");
|
|
1763
1760
|
}
|
|
1764
|
-
function
|
|
1765
|
-
return
|
|
1766
|
-
|
|
1767
|
-
|
|
1761
|
+
function isWorkflowSource(value) {
|
|
1762
|
+
return (isRecord(value) &&
|
|
1763
|
+
((value.kind === "builtin" &&
|
|
1764
|
+
typeof value.id === "string" &&
|
|
1765
|
+
typeof value.revision === "string") ||
|
|
1766
|
+
(value.kind === "file" && typeof value.path === "string" && typeof value.hash === "string")));
|
|
1767
|
+
}
|
|
1768
|
+
function isMountedWorkflowSource(value) {
|
|
1769
|
+
return (isRecord(value) &&
|
|
1770
|
+
Array.isArray(value.mountPath) &&
|
|
1771
|
+
value.mountPath.every((part) => typeof part === "string") &&
|
|
1772
|
+
typeof value.workflowName === "string" &&
|
|
1773
|
+
isWorkflowSource(value.source));
|
|
1774
|
+
}
|
|
1775
|
+
function insertQueuedRunSources(state, runId, value) {
|
|
1776
|
+
const insert = state.connection.prepare(`INSERT INTO run_sources(run_id, mount_path, source_type, source_ref, source_revision)
|
|
1777
|
+
VALUES (?, ?, ?, ?, ?)`);
|
|
1778
|
+
const root = queuedSourceParts(value.root);
|
|
1779
|
+
insert.run(runId, "", root.type, root.ref, root.revision);
|
|
1780
|
+
for (const mounted of value.mounted) {
|
|
1781
|
+
const source = queuedSourceParts(mounted.source);
|
|
1782
|
+
insert.run(runId, mounted.mountPath.join("/"), source.type, source.ref, source.revision);
|
|
1783
|
+
}
|
|
1784
|
+
}
|
|
1785
|
+
function queuedSourceParts(source) {
|
|
1786
|
+
return source.kind === "builtin"
|
|
1787
|
+
? { type: "builtin", ref: source.id, revision: source.revision }
|
|
1788
|
+
: { type: "file", ref: source.path, revision: source.hash };
|
|
1789
|
+
}
|
|
1790
|
+
function readQueuedRunSources(state, run) {
|
|
1791
|
+
const rows = state.connection
|
|
1792
|
+
.prepare(`SELECT mount_path AS mountPath, source_type AS sourceType,
|
|
1793
|
+
source_ref AS sourceRef, source_revision AS sourceRevision
|
|
1794
|
+
FROM run_sources WHERE run_id = ? ORDER BY mount_path`)
|
|
1795
|
+
.all(run.runId)
|
|
1796
|
+
.filter(isRunSourceIdentityRow);
|
|
1797
|
+
const rootRow = rows.find((row) => row.mountPath === "");
|
|
1798
|
+
if (rootRow === undefined)
|
|
1799
|
+
throw new Error(`Workflow run source is missing: ${run.runId}`);
|
|
1800
|
+
const snapshot = state.readJson(run.definitionHash);
|
|
1801
|
+
const mounts = isRecord(snapshot) &&
|
|
1802
|
+
isRecord(snapshot.composition) &&
|
|
1803
|
+
Array.isArray(snapshot.composition.mounts)
|
|
1804
|
+
? snapshot.composition.mounts
|
|
1805
|
+
: [];
|
|
1806
|
+
const names = new Map(mounts.flatMap((mount) => {
|
|
1807
|
+
if (!isRecord(mount) ||
|
|
1808
|
+
!Array.isArray(mount.mountPath) ||
|
|
1809
|
+
!mount.mountPath.every((part) => typeof part === "string") ||
|
|
1810
|
+
typeof mount.workflowName !== "string") {
|
|
1811
|
+
return [];
|
|
1812
|
+
}
|
|
1813
|
+
return [[mount.mountPath.join("/"), mount.workflowName]];
|
|
1814
|
+
}));
|
|
1815
|
+
return {
|
|
1816
|
+
root: rowToSource(rootRow),
|
|
1817
|
+
mounted: rows
|
|
1818
|
+
.filter((row) => row.mountPath !== "")
|
|
1819
|
+
.map((row) => ({
|
|
1820
|
+
mountPath: row.mountPath.split("/"),
|
|
1821
|
+
workflowName: names.get(row.mountPath) ?? row.mountPath,
|
|
1822
|
+
source: rowToSource(row),
|
|
1823
|
+
})),
|
|
1824
|
+
};
|
|
1825
|
+
}
|
|
1826
|
+
function rowToSource(row) {
|
|
1827
|
+
return row.sourceType === "builtin"
|
|
1828
|
+
? { kind: "builtin", id: row.sourceRef, revision: row.sourceRevision }
|
|
1829
|
+
: { kind: "file", path: row.sourceRef, hash: row.sourceRevision };
|
|
1768
1830
|
}
|
|
1769
1831
|
function effectStatus(value) {
|
|
1770
1832
|
return value === "indeterminate" ? "ambiguous" : value;
|