@osolmaz/pi-workflows 0.10.0 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/README.md +32 -14
  2. package/dist/builtins/autodoc.workflow.d.ts +58 -0
  3. package/dist/builtins/autodoc.workflow.js +266 -0
  4. package/dist/builtins/autodoc.workflow.js.map +1 -0
  5. package/dist/builtins/autoimplement.workflow.d.ts +212 -11
  6. package/dist/builtins/autoimplement.workflow.js +431 -22
  7. package/dist/builtins/autoimplement.workflow.js.map +1 -1
  8. package/dist/builtins/{autodevise.workflow.d.ts → autoplan.workflow.d.ts} +9 -9
  9. package/dist/builtins/{autodevise.workflow.js → autoplan.workflow.js} +20 -20
  10. package/dist/builtins/autoplan.workflow.js.map +1 -0
  11. package/dist/builtins/catalog.js +8 -4
  12. package/dist/builtins/catalog.js.map +1 -1
  13. package/dist/builtins/index.d.ts +6 -3
  14. package/dist/builtins/index.js +5 -2
  15. package/dist/builtins/index.js.map +1 -1
  16. package/dist/builtins/monitor.workflow.d.ts +4 -0
  17. package/dist/builtins/monitor.workflow.js +134 -9
  18. package/dist/builtins/monitor.workflow.js.map +1 -1
  19. package/dist/builtins/plan-approval.workflow.d.ts +83 -0
  20. package/dist/builtins/plan-approval.workflow.js +148 -0
  21. package/dist/builtins/plan-approval.workflow.js.map +1 -0
  22. package/dist/builtins/plan-presentation.d.ts +7 -0
  23. package/dist/builtins/plan-presentation.js +44 -0
  24. package/dist/builtins/plan-presentation.js.map +1 -0
  25. package/dist/extension/decision-channels.d.ts +132 -0
  26. package/dist/extension/decision-channels.js +1082 -0
  27. package/dist/extension/decision-channels.js.map +1 -0
  28. package/dist/extension/index.d.ts +1 -0
  29. package/dist/extension/index.js +426 -11
  30. package/dist/extension/index.js.map +1 -1
  31. package/dist/extension/widget.js +26 -2
  32. package/dist/extension/widget.js.map +1 -1
  33. package/dist/extension/workflow-tool.d.ts +1 -37
  34. package/dist/extension/workflow-tool.js +1 -42
  35. package/dist/extension/workflow-tool.js.map +1 -1
  36. package/dist/herdr/setup.d.ts +13 -1
  37. package/dist/herdr/setup.js +349 -36
  38. package/dist/herdr/setup.js.map +1 -1
  39. package/dist/host/rpc-bridge.js +4 -21
  40. package/dist/host/rpc-bridge.js.map +1 -1
  41. package/dist/render/graph-render.js +33 -8
  42. package/dist/render/graph-render.js.map +1 -1
  43. package/dist/viewer/cli.d.ts +1 -0
  44. package/dist/viewer/cli.js +21 -10
  45. package/dist/viewer/cli.js.map +1 -1
  46. package/dist/viewer/render.js +36 -2
  47. package/dist/viewer/render.js.map +1 -1
  48. package/dist/workflows/composition.js +15 -1
  49. package/dist/workflows/composition.js.map +1 -1
  50. package/dist/workflows/decision-presentation.d.ts +18 -0
  51. package/dist/workflows/decision-presentation.js +417 -0
  52. package/dist/workflows/decision-presentation.js.map +1 -0
  53. package/dist/workflows/engine.d.ts +2 -1
  54. package/dist/workflows/engine.js +86 -4
  55. package/dist/workflows/engine.js.map +1 -1
  56. package/dist/workflows/human-decision.d.ts +87 -0
  57. package/dist/workflows/human-decision.js +583 -0
  58. package/dist/workflows/human-decision.js.map +1 -0
  59. package/dist/workflows/index.d.ts +3 -1
  60. package/dist/workflows/index.js +2 -0
  61. package/dist/workflows/index.js.map +1 -1
  62. package/dist/workflows/schema.js +15 -0
  63. package/dist/workflows/schema.js.map +1 -1
  64. package/dist/workflows/store.js +7 -0
  65. package/dist/workflows/store.js.map +1 -1
  66. package/dist/workflows/tool-input.d.ts +72 -0
  67. package/dist/workflows/tool-input.js +141 -0
  68. package/dist/workflows/tool-input.js.map +1 -0
  69. package/dist/workflows/types.d.ts +223 -0
  70. package/docs/HUMAN_DECISIONS.md +371 -0
  71. package/docs/HUMAN_DECISION_PRESENTATIONS.md +323 -0
  72. package/docs/MONITOR.md +17 -6
  73. package/docs/WORKFLOW_COMPOSITION.md +13 -6
  74. package/docs/plans/2026-08-19-human-decision-gates-plan.md +296 -0
  75. package/docs/plans/2026-08-19-human-decision-presentations-plan.md +172 -0
  76. package/docs/plans/2026-08-19-provider-compatible-workflow-tool-schema-plan.md +45 -0
  77. package/docs/plans/2026-08-19-workflow-composition-plan.md +25 -17
  78. package/docs/plans/2026-08-20-autoimplement-blocker-challenge-plan.md +138 -0
  79. package/docs/plans/2026-08-20-herdr-plugin-sync-plan.md +104 -0
  80. package/docs/run-bundles.md +23 -2
  81. package/docs/workflows.md +47 -5
  82. package/examples/workflows/approved-plan.workflow.ts +58 -0
  83. package/examples/workflows/autoplan.workflow.ts +1 -0
  84. package/examples/workflows/human-decision.workflow.ts +62 -0
  85. package/herdr-plugin.toml +1 -1
  86. package/package.json +2 -1
  87. package/schemas/decision-presentation-v1.schema.json +83 -0
  88. package/schemas/human-decision-accepted-v1.schema.json +44 -0
  89. package/schemas/human-decision-accepted-v2.schema.json +50 -0
  90. package/schemas/human-decision-answer-attempt-v1.schema.json +37 -0
  91. package/schemas/human-decision-cancellation-v1.schema.json +15 -0
  92. package/schemas/human-decision-continuation-v1.schema.json +16 -0
  93. package/schemas/human-decision-delivery-v1.schema.json +28 -0
  94. package/schemas/human-decision-delivery-v2.schema.json +36 -0
  95. package/schemas/human-decision-receipt-v1.schema.json +33 -0
  96. package/schemas/human-decision-receipt-v2.schema.json +39 -0
  97. package/schemas/human-decision-request-v1.schema.json +59 -0
  98. package/schemas/human-decision-request-v2.schema.json +69 -0
  99. package/schemas/human-decision-resolution-v1.schema.json +27 -0
  100. package/schemas/human-decision-resolution-v2.schema.json +27 -0
  101. package/schemas/human-decision-settlement-v1.schema.json +28 -0
  102. package/skills/autodoc/SKILL.md +43 -0
  103. package/skills/autoimplement/SKILL.md +58 -0
  104. package/skills/autoimplement/agents/openai.yaml +4 -0
  105. package/skills/autoplan/SKILL.md +25 -0
  106. package/skills/monitor/SKILL.md +3 -1
  107. package/skills/pi-workflows/SKILL.md +3 -3
  108. package/src/builtins/autodoc.workflow.ts +325 -0
  109. package/src/builtins/autoimplement.workflow.ts +493 -23
  110. package/src/builtins/{autodevise.workflow.ts → autoplan.workflow.ts} +32 -32
  111. package/src/builtins/catalog.ts +8 -4
  112. package/src/builtins/index.ts +25 -6
  113. package/src/builtins/monitor.workflow.ts +162 -8
  114. package/src/builtins/plan-approval.workflow.ts +190 -0
  115. package/src/builtins/plan-presentation.ts +57 -0
  116. package/src/extension/decision-channels.ts +1533 -0
  117. package/src/extension/index.ts +499 -9
  118. package/src/extension/widget.ts +39 -2
  119. package/src/extension/workflow-tool.ts +5 -81
  120. package/src/herdr/setup.ts +429 -39
  121. package/src/host/rpc-bridge.ts +7 -30
  122. package/src/render/graph-render.ts +40 -3
  123. package/src/viewer/cli.ts +22 -10
  124. package/src/viewer/render.ts +56 -3
  125. package/src/workflows/composition.ts +16 -1
  126. package/src/workflows/decision-presentation.ts +501 -0
  127. package/src/workflows/engine.ts +108 -4
  128. package/src/workflows/human-decision.ts +819 -0
  129. package/src/workflows/index.ts +69 -0
  130. package/src/workflows/schema.ts +17 -0
  131. package/src/workflows/store.ts +8 -0
  132. package/src/workflows/tool-input.ts +202 -0
  133. package/src/workflows/types.ts +265 -0
  134. package/dist/builtins/autodevise.workflow.js.map +0 -1
  135. package/examples/workflows/autodevise.workflow.ts +0 -1
@@ -1,4 +1,7 @@
1
- import { type AutodeviseInput } from "./autodevise.workflow.js";
1
+ import type { WorkflowNodeContext } from "../workflows/types.js";
2
+ import { type AutodocInput } from "./autodoc.workflow.js";
3
+ import { type AutoplanInput } from "./autoplan.workflow.js";
4
+ import { type PlanApprovalInput } from "./plan-approval.workflow.js";
2
5
  export type AutoimplementInput = {
3
6
  task: string;
4
7
  plan?: unknown;
@@ -7,6 +10,24 @@ export type AutoimplementInput = {
7
10
  repository?: string;
8
11
  baseBranch?: string;
9
12
  merge?: boolean;
13
+ documents?: string[];
14
+ documentation?: {
15
+ status: "current";
16
+ planDigest: string;
17
+ documents: string[];
18
+ };
19
+ approval?: {
20
+ audience: string;
21
+ maxReplans: number;
22
+ };
23
+ };
24
+ export type ExistingPlanDiscovery = {
25
+ route: "found" | "blocked";
26
+ plan?: unknown;
27
+ documentation?: "current" | "missing" | "stale";
28
+ documents: string[];
29
+ reason: string;
30
+ evidence: unknown;
10
31
  };
11
32
  type ReviewFinding = {
12
33
  severity: "P0" | "P1" | "P2" | "lower";
@@ -48,14 +69,101 @@ export declare const autoimplementWorkflow: import("../workflows/types.js").Work
48
69
  readonly validate: (value: unknown) => AutoimplementBlocked;
49
70
  };
50
71
  }, {
51
- readonly redesign: import("../workflows/types.js").WorkflowIncludeDefinition<import("../workflows/types.js").WorkflowDefinition<AutodeviseInput, {
72
+ readonly documentation: import("../workflows/types.js").WorkflowIncludeDefinition<import("../workflows/types.js").WorkflowDefinition<AutodocInput, {
52
73
  readonly ready: {
53
74
  readonly from: "finalize";
54
- readonly validate: (value: unknown) => import("./autodevise.workflow.js").AutodeviseReady;
75
+ readonly validate: (value: unknown) => import("./autodoc.workflow.js").DocumentedPlan;
55
76
  };
56
77
  readonly blocked: {
57
78
  readonly from: "blocked";
58
- readonly validate: (value: unknown) => import("./autodevise.workflow.js").AutodeviseBlocked;
79
+ readonly validate: (value: unknown) => import("./autodoc.workflow.js").AutodocBlocked;
80
+ };
81
+ }, import("../workflows/types.js").WorkflowIncludeMap> & {
82
+ nodes: {
83
+ readonly prepare: import("../workflows/types.js").ComputeNodeDefinition;
84
+ readonly locatePlan: import("../workflows/types.js").AgentNodeDefinition;
85
+ readonly inspectDocumentation: import("../workflows/types.js").AgentNodeDefinition;
86
+ readonly updateDocumentation: import("../workflows/types.js").AgentNodeDefinition;
87
+ readonly verifyDocumentation: import("../workflows/types.js").AgentNodeDefinition;
88
+ readonly finalize: import("../workflows/types.js").ComputeNodeDefinition;
89
+ readonly blocked: import("../workflows/types.js").ComputeNodeDefinition;
90
+ };
91
+ includes?: import("../workflows/types.js").WorkflowIncludeMap;
92
+ exits?: {
93
+ readonly ready: {
94
+ readonly from: "finalize";
95
+ readonly validate: (value: unknown) => import("./autodoc.workflow.js").DocumentedPlan;
96
+ };
97
+ readonly blocked: {
98
+ readonly from: "blocked";
99
+ readonly validate: (value: unknown) => import("./autodoc.workflow.js").AutodocBlocked;
100
+ };
101
+ };
102
+ }>;
103
+ readonly approval: import("../workflows/types.js").WorkflowIncludeDefinition<import("../workflows/types.js").WorkflowDefinition<PlanApprovalInput, {
104
+ readonly continue: {
105
+ readonly from: "continued";
106
+ readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalContinue;
107
+ };
108
+ readonly stop: {
109
+ readonly from: "stopped";
110
+ readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalStop;
111
+ };
112
+ readonly replan: {
113
+ readonly from: "replan";
114
+ readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalReplan;
115
+ };
116
+ }, import("../workflows/types.js").WorkflowIncludeMap> & {
117
+ nodes: {
118
+ readonly approve: import("../workflows/types.js").WorkflowNodeCommon & {
119
+ nodeType: "checkpoint";
120
+ summary?: string;
121
+ run?: (context: WorkflowNodeContext) => import("../workflows/types.js").MaybePromise<unknown>;
122
+ humanDecision?: import("../workflows/types.js").HumanDecisionNodeContract;
123
+ } & {
124
+ readonly __humanChoices?: {
125
+ readonly continue: {
126
+ readonly label: "Yes, continue";
127
+ };
128
+ readonly stop: {
129
+ readonly label: "No, stop";
130
+ };
131
+ readonly replan: {
132
+ readonly label: "Replan";
133
+ readonly input: import("../workflows/types.js").HumanDecisionTextInput & {
134
+ name: "instructions";
135
+ };
136
+ };
137
+ };
138
+ };
139
+ readonly continued: import("../workflows/types.js").ComputeNodeDefinition;
140
+ readonly stopped: import("../workflows/types.js").ComputeNodeDefinition;
141
+ readonly replan: import("../workflows/types.js").ComputeNodeDefinition;
142
+ };
143
+ includes?: import("../workflows/types.js").WorkflowIncludeMap;
144
+ exits?: {
145
+ readonly continue: {
146
+ readonly from: "continued";
147
+ readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalContinue;
148
+ };
149
+ readonly stop: {
150
+ readonly from: "stopped";
151
+ readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalStop;
152
+ };
153
+ readonly replan: {
154
+ readonly from: "replan";
155
+ readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalReplan;
156
+ };
157
+ };
158
+ }>;
159
+ readonly redesign: import("../workflows/types.js").WorkflowIncludeDefinition<import("../workflows/types.js").WorkflowDefinition<AutoplanInput, {
160
+ readonly ready: {
161
+ readonly from: "finalize";
162
+ readonly validate: (value: unknown) => import("./autoplan.workflow.js").AutoplanReady;
163
+ };
164
+ readonly blocked: {
165
+ readonly from: "blocked";
166
+ readonly validate: (value: unknown) => import("./autoplan.workflow.js").AutoplanBlocked;
59
167
  };
60
168
  }, import("../workflows/types.js").WorkflowIncludeMap> & {
61
169
  nodes: {
@@ -71,20 +179,26 @@ export declare const autoimplementWorkflow: import("../workflows/types.js").Work
71
179
  exits?: {
72
180
  readonly ready: {
73
181
  readonly from: "finalize";
74
- readonly validate: (value: unknown) => import("./autodevise.workflow.js").AutodeviseReady;
182
+ readonly validate: (value: unknown) => import("./autoplan.workflow.js").AutoplanReady;
75
183
  };
76
184
  readonly blocked: {
77
185
  readonly from: "blocked";
78
- readonly validate: (value: unknown) => import("./autodevise.workflow.js").AutodeviseBlocked;
186
+ readonly validate: (value: unknown) => import("./autoplan.workflow.js").AutoplanBlocked;
79
187
  };
80
188
  };
81
189
  }>;
82
190
  }> & {
83
191
  nodes: {
84
192
  readonly prepare: import("../workflows/types.js").ComputeNodeDefinition;
193
+ readonly findPlan: import("../workflows/types.js").AgentNodeDefinition;
194
+ readonly routeFoundPlan: import("../workflows/types.js").ComputeNodeDefinition;
85
195
  readonly adoptPlan: import("../workflows/types.js").ComputeNodeDefinition;
196
+ readonly maybeApproval: import("../workflows/types.js").ComputeNodeDefinition;
197
+ readonly replanGuard: import("../workflows/types.js").ComputeNodeDefinition;
86
198
  readonly implement: import("../workflows/types.js").AgentNodeDefinition;
87
199
  readonly classifyImplementation: import("../workflows/types.js").AgentNodeDefinition;
200
+ readonly challengeBlockerGuard: import("../workflows/types.js").ComputeNodeDefinition;
201
+ readonly challengeBlocker: import("../workflows/types.js").AgentNodeDefinition;
88
202
  readonly verify: import("../workflows/types.js").AgentNodeDefinition;
89
203
  readonly classifyVerification: import("../workflows/types.js").AgentNodeDefinition;
90
204
  readonly fix: import("../workflows/types.js").AgentNodeDefinition;
@@ -108,14 +222,101 @@ export declare const autoimplementWorkflow: import("../workflows/types.js").Work
108
222
  readonly finalize: import("../workflows/types.js").ComputeNodeDefinition;
109
223
  };
110
224
  includes?: {
111
- readonly redesign: import("../workflows/types.js").WorkflowIncludeDefinition<import("../workflows/types.js").WorkflowDefinition<AutodeviseInput, {
225
+ readonly documentation: import("../workflows/types.js").WorkflowIncludeDefinition<import("../workflows/types.js").WorkflowDefinition<AutodocInput, {
226
+ readonly ready: {
227
+ readonly from: "finalize";
228
+ readonly validate: (value: unknown) => import("./autodoc.workflow.js").DocumentedPlan;
229
+ };
230
+ readonly blocked: {
231
+ readonly from: "blocked";
232
+ readonly validate: (value: unknown) => import("./autodoc.workflow.js").AutodocBlocked;
233
+ };
234
+ }, import("../workflows/types.js").WorkflowIncludeMap> & {
235
+ nodes: {
236
+ readonly prepare: import("../workflows/types.js").ComputeNodeDefinition;
237
+ readonly locatePlan: import("../workflows/types.js").AgentNodeDefinition;
238
+ readonly inspectDocumentation: import("../workflows/types.js").AgentNodeDefinition;
239
+ readonly updateDocumentation: import("../workflows/types.js").AgentNodeDefinition;
240
+ readonly verifyDocumentation: import("../workflows/types.js").AgentNodeDefinition;
241
+ readonly finalize: import("../workflows/types.js").ComputeNodeDefinition;
242
+ readonly blocked: import("../workflows/types.js").ComputeNodeDefinition;
243
+ };
244
+ includes?: import("../workflows/types.js").WorkflowIncludeMap;
245
+ exits?: {
246
+ readonly ready: {
247
+ readonly from: "finalize";
248
+ readonly validate: (value: unknown) => import("./autodoc.workflow.js").DocumentedPlan;
249
+ };
250
+ readonly blocked: {
251
+ readonly from: "blocked";
252
+ readonly validate: (value: unknown) => import("./autodoc.workflow.js").AutodocBlocked;
253
+ };
254
+ };
255
+ }>;
256
+ readonly approval: import("../workflows/types.js").WorkflowIncludeDefinition<import("../workflows/types.js").WorkflowDefinition<PlanApprovalInput, {
257
+ readonly continue: {
258
+ readonly from: "continued";
259
+ readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalContinue;
260
+ };
261
+ readonly stop: {
262
+ readonly from: "stopped";
263
+ readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalStop;
264
+ };
265
+ readonly replan: {
266
+ readonly from: "replan";
267
+ readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalReplan;
268
+ };
269
+ }, import("../workflows/types.js").WorkflowIncludeMap> & {
270
+ nodes: {
271
+ readonly approve: import("../workflows/types.js").WorkflowNodeCommon & {
272
+ nodeType: "checkpoint";
273
+ summary?: string;
274
+ run?: (context: WorkflowNodeContext) => import("../workflows/types.js").MaybePromise<unknown>;
275
+ humanDecision?: import("../workflows/types.js").HumanDecisionNodeContract;
276
+ } & {
277
+ readonly __humanChoices?: {
278
+ readonly continue: {
279
+ readonly label: "Yes, continue";
280
+ };
281
+ readonly stop: {
282
+ readonly label: "No, stop";
283
+ };
284
+ readonly replan: {
285
+ readonly label: "Replan";
286
+ readonly input: import("../workflows/types.js").HumanDecisionTextInput & {
287
+ name: "instructions";
288
+ };
289
+ };
290
+ };
291
+ };
292
+ readonly continued: import("../workflows/types.js").ComputeNodeDefinition;
293
+ readonly stopped: import("../workflows/types.js").ComputeNodeDefinition;
294
+ readonly replan: import("../workflows/types.js").ComputeNodeDefinition;
295
+ };
296
+ includes?: import("../workflows/types.js").WorkflowIncludeMap;
297
+ exits?: {
298
+ readonly continue: {
299
+ readonly from: "continued";
300
+ readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalContinue;
301
+ };
302
+ readonly stop: {
303
+ readonly from: "stopped";
304
+ readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalStop;
305
+ };
306
+ readonly replan: {
307
+ readonly from: "replan";
308
+ readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalReplan;
309
+ };
310
+ };
311
+ }>;
312
+ readonly redesign: import("../workflows/types.js").WorkflowIncludeDefinition<import("../workflows/types.js").WorkflowDefinition<AutoplanInput, {
112
313
  readonly ready: {
113
314
  readonly from: "finalize";
114
- readonly validate: (value: unknown) => import("./autodevise.workflow.js").AutodeviseReady;
315
+ readonly validate: (value: unknown) => import("./autoplan.workflow.js").AutoplanReady;
115
316
  };
116
317
  readonly blocked: {
117
318
  readonly from: "blocked";
118
- readonly validate: (value: unknown) => import("./autodevise.workflow.js").AutodeviseBlocked;
319
+ readonly validate: (value: unknown) => import("./autoplan.workflow.js").AutoplanBlocked;
119
320
  };
120
321
  }, import("../workflows/types.js").WorkflowIncludeMap> & {
121
322
  nodes: {
@@ -131,11 +332,11 @@ export declare const autoimplementWorkflow: import("../workflows/types.js").Work
131
332
  exits?: {
132
333
  readonly ready: {
133
334
  readonly from: "finalize";
134
- readonly validate: (value: unknown) => import("./autodevise.workflow.js").AutodeviseReady;
335
+ readonly validate: (value: unknown) => import("./autoplan.workflow.js").AutoplanReady;
135
336
  };
136
337
  readonly blocked: {
137
338
  readonly from: "blocked";
138
- readonly validate: (value: unknown) => import("./autodevise.workflow.js").AutodeviseBlocked;
339
+ readonly validate: (value: unknown) => import("./autoplan.workflow.js").AutoplanBlocked;
139
340
  };
140
341
  };
141
342
  }>;