@osolmaz/pi-workflows 0.9.1 → 0.11.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 +64 -19
- package/dist/builtins/autodoc.workflow.d.ts +58 -0
- package/dist/builtins/autodoc.workflow.js +266 -0
- package/dist/builtins/autodoc.workflow.js.map +1 -0
- package/dist/builtins/autoimplement.workflow.d.ts +353 -0
- package/dist/builtins/autoimplement.workflow.js +961 -0
- package/dist/builtins/autoimplement.workflow.js.map +1 -0
- package/dist/builtins/autoplan.workflow.d.ts +58 -0
- package/dist/builtins/autoplan.workflow.js +190 -0
- package/dist/builtins/autoplan.workflow.js.map +1 -0
- package/dist/builtins/catalog.js +9 -1
- package/dist/builtins/catalog.js.map +1 -1
- package/dist/builtins/index.d.ts +6 -0
- package/dist/builtins/index.js +7 -0
- package/dist/builtins/index.js.map +1 -0
- package/dist/builtins/monitor.workflow.d.ts +29 -3
- package/dist/builtins/monitor.workflow.js +325 -13
- package/dist/builtins/monitor.workflow.js.map +1 -1
- package/dist/builtins/plan-approval.workflow.d.ts +83 -0
- package/dist/builtins/plan-approval.workflow.js +148 -0
- package/dist/builtins/plan-approval.workflow.js.map +1 -0
- package/dist/builtins/plan-presentation.d.ts +7 -0
- package/dist/builtins/plan-presentation.js +44 -0
- package/dist/builtins/plan-presentation.js.map +1 -0
- package/dist/extension/decision-channels.d.ts +132 -0
- package/dist/extension/decision-channels.js +1082 -0
- package/dist/extension/decision-channels.js.map +1 -0
- package/dist/extension/index.d.ts +1 -0
- package/dist/extension/index.js +426 -11
- package/dist/extension/index.js.map +1 -1
- package/dist/extension/widget.js +26 -2
- package/dist/extension/widget.js.map +1 -1
- package/dist/extension/workflow-tool.d.ts +1 -37
- package/dist/extension/workflow-tool.js +1 -42
- package/dist/extension/workflow-tool.js.map +1 -1
- package/dist/host/rpc-bridge.js +4 -21
- package/dist/host/rpc-bridge.js.map +1 -1
- package/dist/render/graph-render.js +46 -10
- package/dist/render/graph-render.js.map +1 -1
- package/dist/viewer/render.js +36 -2
- package/dist/viewer/render.js.map +1 -1
- package/dist/workflows/catalog.d.ts +1 -0
- package/dist/workflows/catalog.js +6 -0
- package/dist/workflows/catalog.js.map +1 -1
- package/dist/workflows/composition.d.ts +45 -0
- package/dist/workflows/composition.js +485 -0
- package/dist/workflows/composition.js.map +1 -0
- package/dist/workflows/decision-presentation.d.ts +18 -0
- package/dist/workflows/decision-presentation.js +417 -0
- package/dist/workflows/decision-presentation.js.map +1 -0
- package/dist/workflows/decision.d.ts +11 -5
- package/dist/workflows/decision.js.map +1 -1
- package/dist/workflows/definition.d.ts +22 -3
- package/dist/workflows/definition.js +46 -3
- package/dist/workflows/definition.js.map +1 -1
- package/dist/workflows/engine.d.ts +2 -1
- package/dist/workflows/engine.js +199 -18
- package/dist/workflows/engine.js.map +1 -1
- package/dist/workflows/graph.js +8 -6
- package/dist/workflows/graph.js.map +1 -1
- package/dist/workflows/human-decision.d.ts +87 -0
- package/dist/workflows/human-decision.js +583 -0
- package/dist/workflows/human-decision.js.map +1 -0
- package/dist/workflows/index.d.ts +5 -2
- package/dist/workflows/index.js +4 -1
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/loader.d.ts +5 -4
- package/dist/workflows/loader.js +118 -18
- package/dist/workflows/loader.js.map +1 -1
- package/dist/workflows/schema.d.ts +3 -1
- package/dist/workflows/schema.js +64 -2
- package/dist/workflows/schema.js.map +1 -1
- package/dist/workflows/store.js +39 -2
- package/dist/workflows/store.js.map +1 -1
- package/dist/workflows/tool-input.d.ts +72 -0
- package/dist/workflows/tool-input.js +141 -0
- package/dist/workflows/tool-input.js.map +1 -0
- package/dist/workflows/types.d.ts +300 -2
- package/docs/CONTROLLERS.md +1 -1
- package/docs/DESIGN_PHILOSOPHY.md +1 -1
- package/docs/HUMAN_DECISIONS.md +371 -0
- package/docs/HUMAN_DECISION_PRESENTATIONS.md +323 -0
- package/docs/MONITOR.md +46 -18
- package/docs/WORKFLOW_COMPOSITION.md +333 -0
- package/docs/plans/2026-08-19-human-decision-gates-plan.md +296 -0
- package/docs/plans/2026-08-19-human-decision-presentations-plan.md +172 -0
- package/docs/plans/2026-08-19-provider-compatible-workflow-tool-schema-plan.md +45 -0
- package/docs/plans/2026-08-19-workflow-composition-plan.md +308 -0
- package/docs/run-bundles.md +45 -10
- package/docs/workflows.md +106 -15
- package/examples/workflows/approved-plan.workflow.ts +58 -0
- package/examples/workflows/autoimplement.workflow.ts +1 -92
- package/examples/workflows/autoplan.workflow.ts +1 -0
- package/examples/workflows/human-decision.workflow.ts +62 -0
- package/herdr-plugin.toml +1 -1
- package/package.json +6 -1
- package/schemas/decision-presentation-v1.schema.json +83 -0
- package/schemas/human-decision-accepted-v1.schema.json +44 -0
- package/schemas/human-decision-accepted-v2.schema.json +50 -0
- package/schemas/human-decision-answer-attempt-v1.schema.json +37 -0
- package/schemas/human-decision-cancellation-v1.schema.json +15 -0
- package/schemas/human-decision-continuation-v1.schema.json +16 -0
- package/schemas/human-decision-delivery-v1.schema.json +28 -0
- package/schemas/human-decision-delivery-v2.schema.json +36 -0
- package/schemas/human-decision-receipt-v1.schema.json +33 -0
- package/schemas/human-decision-receipt-v2.schema.json +39 -0
- package/schemas/human-decision-request-v1.schema.json +59 -0
- package/schemas/human-decision-request-v2.schema.json +69 -0
- package/schemas/human-decision-resolution-v1.schema.json +27 -0
- package/schemas/human-decision-resolution-v2.schema.json +27 -0
- package/schemas/human-decision-settlement-v1.schema.json +28 -0
- package/skills/autodoc/SKILL.md +43 -0
- package/skills/autoimplement/SKILL.md +58 -0
- package/skills/autoimplement/agents/openai.yaml +4 -0
- package/skills/autoplan/SKILL.md +25 -0
- package/skills/monitor/SKILL.md +8 -1
- package/skills/pi-workflows/SKILL.md +5 -3
- package/src/builtins/autodoc.workflow.ts +325 -0
- package/src/builtins/autoimplement.workflow.ts +1123 -0
- package/src/builtins/autoplan.workflow.ts +231 -0
- package/src/builtins/catalog.ts +9 -1
- package/src/builtins/index.ts +32 -0
- package/src/builtins/monitor.workflow.ts +396 -15
- package/src/builtins/plan-approval.workflow.ts +190 -0
- package/src/builtins/plan-presentation.ts +57 -0
- package/src/extension/decision-channels.ts +1533 -0
- package/src/extension/index.ts +499 -9
- package/src/extension/widget.ts +39 -2
- package/src/extension/workflow-tool.ts +5 -81
- package/src/host/rpc-bridge.ts +7 -30
- package/src/render/graph-render.ts +54 -5
- package/src/viewer/render.ts +56 -3
- package/src/workflows/catalog.ts +7 -0
- package/src/workflows/composition.ts +642 -0
- package/src/workflows/decision-presentation.ts +501 -0
- package/src/workflows/decision.ts +12 -5
- package/src/workflows/definition.ts +118 -8
- package/src/workflows/engine.ts +257 -20
- package/src/workflows/graph.ts +8 -6
- package/src/workflows/human-decision.ts +819 -0
- package/src/workflows/index.ts +89 -0
- package/src/workflows/loader.ts +186 -18
- package/src/workflows/schema.ts +79 -2
- package/src/workflows/store.ts +45 -2
- package/src/workflows/tool-input.ts +202 -0
- package/src/workflows/types.ts +374 -2
- package/examples/workflows/elegant-solution.workflow.ts +0 -95
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { agent, compute, defineWorkflow } from "../workflows/definition.js";
|
|
3
|
+
|
|
4
|
+
export type AutoplanInput = {
|
|
5
|
+
problem: string;
|
|
6
|
+
scope?: string;
|
|
7
|
+
constraints?: string[];
|
|
8
|
+
previousPlan?: unknown;
|
|
9
|
+
newEvidence?: unknown;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export type AutoplanReady = {
|
|
13
|
+
status: "ready";
|
|
14
|
+
frame: unknown;
|
|
15
|
+
proposal: unknown;
|
|
16
|
+
ideal: unknown;
|
|
17
|
+
selection: unknown;
|
|
18
|
+
plan: unknown;
|
|
19
|
+
planDigest: string;
|
|
20
|
+
previousPlanDigest?: string;
|
|
21
|
+
changed: boolean;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export type AutoplanBlocked = {
|
|
25
|
+
status: "blocked";
|
|
26
|
+
frame: unknown;
|
|
27
|
+
proposal: unknown;
|
|
28
|
+
ideal: unknown;
|
|
29
|
+
selection: unknown;
|
|
30
|
+
reason: string;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
function requireRecord(value: unknown, label: string): Record<string, unknown> {
|
|
34
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
35
|
+
throw new Error(`${label} must be an object`);
|
|
36
|
+
}
|
|
37
|
+
return value as Record<string, unknown>;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function requireString(value: unknown, label: string): string {
|
|
41
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
42
|
+
throw new Error(`${label} must be a non-empty string`);
|
|
43
|
+
}
|
|
44
|
+
return value.trim();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function parseInput(value: unknown): AutoplanInput {
|
|
48
|
+
const input = requireRecord(value, "autoplan input");
|
|
49
|
+
const constraints = input.constraints;
|
|
50
|
+
if (
|
|
51
|
+
constraints !== undefined &&
|
|
52
|
+
(!Array.isArray(constraints) || constraints.some((item) => typeof item !== "string"))
|
|
53
|
+
) {
|
|
54
|
+
throw new Error("autoplan constraints must be an array of strings");
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
problem: requireString(input.problem, "autoplan problem"),
|
|
58
|
+
...(input.scope !== undefined ? { scope: requireString(input.scope, "autoplan scope") } : {}),
|
|
59
|
+
...(constraints !== undefined ? { constraints: [...constraints] as string[] } : {}),
|
|
60
|
+
...(input.previousPlan !== undefined ? { previousPlan: input.previousPlan } : {}),
|
|
61
|
+
...(input.newEvidence !== undefined ? { newEvidence: input.newEvidence } : {}),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function parseSelection(value: unknown): Record<string, unknown> {
|
|
66
|
+
const selection = requireRecord(value, "autoplan selection");
|
|
67
|
+
if (selection.status !== "ready" && selection.status !== "blocked") {
|
|
68
|
+
throw new Error("autoplan selection status must be ready or blocked");
|
|
69
|
+
}
|
|
70
|
+
requireString(selection.selected, "autoplan selected solution");
|
|
71
|
+
requireString(selection.why, "autoplan selection reason");
|
|
72
|
+
if (selection.status === "blocked") requireString(selection.blocker, "autoplan blocker");
|
|
73
|
+
return selection;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function digest(value: unknown): string {
|
|
77
|
+
return `sha256:${createHash("sha256").update(JSON.stringify(value)).digest("hex")}`;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export const autoplanWorkflow = defineWorkflow({
|
|
81
|
+
source: import.meta.url,
|
|
82
|
+
contractId: "pi-workflows.autoplan.v1",
|
|
83
|
+
name: "autoplan",
|
|
84
|
+
input: parseInput,
|
|
85
|
+
title: ({ input }) => `autoplan: ${input.problem.slice(0, 60)}`,
|
|
86
|
+
presentationPrompt: [
|
|
87
|
+
"Present the selected practical solution and its implementation plan.",
|
|
88
|
+
"Briefly state how the ideal informed the choice and what was excluded as outside scope.",
|
|
89
|
+
"Do not ask the user to choose between the options.",
|
|
90
|
+
].join("\n"),
|
|
91
|
+
startAt: "frame",
|
|
92
|
+
maxSteps: 10,
|
|
93
|
+
exits: {
|
|
94
|
+
ready: {
|
|
95
|
+
from: "finalize",
|
|
96
|
+
validate: (value: unknown): AutoplanReady => value as AutoplanReady,
|
|
97
|
+
},
|
|
98
|
+
blocked: {
|
|
99
|
+
from: "blocked",
|
|
100
|
+
validate: (value: unknown): AutoplanBlocked => value as AutoplanBlocked,
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
nodes: {
|
|
104
|
+
frame: agent({
|
|
105
|
+
statusDetail: "framing the problem",
|
|
106
|
+
prompt: ({ input }) => {
|
|
107
|
+
const request = input as AutoplanInput;
|
|
108
|
+
return [
|
|
109
|
+
`Frame this problem: ${request.problem}`,
|
|
110
|
+
`Authorized scope: ${request.scope ?? "infer it conservatively from the request and current project"}.`,
|
|
111
|
+
`Constraints: ${JSON.stringify(request.constraints ?? [])}.`,
|
|
112
|
+
`Previous plan: ${JSON.stringify(request.previousPlan ?? null)}.`,
|
|
113
|
+
`New evidence: ${JSON.stringify(request.newEvidence ?? null)}.`,
|
|
114
|
+
"Identify the goal, observable success criteria, systems in scope, systems outside scope, and interfaces we control.",
|
|
115
|
+
"Do not invent permission to change an upstream project, external service, or unrelated repository.",
|
|
116
|
+
].join("\n");
|
|
117
|
+
},
|
|
118
|
+
expectedOutput: `{ "problem": "concise statement", "success": ["criterion"], "inScope": ["change"], "outOfScope": ["change"], "constraints": ["constraint"], "controlBoundary": "what can change" }`,
|
|
119
|
+
validate: (value) => requireRecord(value, "autoplan frame"),
|
|
120
|
+
}),
|
|
121
|
+
propose: agent({
|
|
122
|
+
statusDetail: "devising a solution",
|
|
123
|
+
prompt: ({ outputs }) =>
|
|
124
|
+
[
|
|
125
|
+
"Devise the most elegant, long-term production-ready solution within the framed scope.",
|
|
126
|
+
"Prefer a small number of general parts, clear ownership boundaries, and existing public interfaces.",
|
|
127
|
+
"Avoid one-off mechanisms and unnecessary infrastructure.",
|
|
128
|
+
"Do not implement anything.",
|
|
129
|
+
`Problem frame: ${JSON.stringify(outputs.frame)}`,
|
|
130
|
+
].join("\n"),
|
|
131
|
+
expectedOutput: `{ "solution": "proposal", "rationale": "why", "parts": ["part"], "tradeoffs": ["trade-off"] }`,
|
|
132
|
+
validate: (value) => requireRecord(value, "autoplan proposal"),
|
|
133
|
+
}),
|
|
134
|
+
ideal: agent({
|
|
135
|
+
statusDetail: "describing the ideal end state",
|
|
136
|
+
prompt: ({ outputs, input }) =>
|
|
137
|
+
[
|
|
138
|
+
"Set the proposal aside and describe the holy grail for this problem.",
|
|
139
|
+
"The holy grail can match the proposal or exceed the current scope.",
|
|
140
|
+
"Name dependencies outside our authority instead of assuming they can change.",
|
|
141
|
+
"Explain the practical value beyond the proposal.",
|
|
142
|
+
`Problem frame: ${JSON.stringify(outputs.frame)}`,
|
|
143
|
+
`Proposal: ${JSON.stringify(outputs.propose)}`,
|
|
144
|
+
`New evidence: ${JSON.stringify((input as AutoplanInput).newEvidence ?? null)}`,
|
|
145
|
+
].join("\n"),
|
|
146
|
+
expectedOutput: `{ "ideal": "ideal end state", "outsideDependencies": ["dependency"], "additionalValue": ["benefit"] }`,
|
|
147
|
+
validate: (value) => requireRecord(value, "autoplan ideal"),
|
|
148
|
+
}),
|
|
149
|
+
choose: agent({
|
|
150
|
+
statusDetail: "choosing the practical solution",
|
|
151
|
+
prompt: ({ outputs }) =>
|
|
152
|
+
[
|
|
153
|
+
"Choose the right solution without asking the user to decide.",
|
|
154
|
+
"Choose the ideal when it is production-ready, proportionate, in scope, and implementable through interfaces we control.",
|
|
155
|
+
"Otherwise choose the strongest practical in-scope solution with a clear path toward the ideal.",
|
|
156
|
+
"Do not block only because the ideal depends on work outside our authority.",
|
|
157
|
+
"Do not make an upstream change, unrelated repository, new service, or unapproved resource a requirement.",
|
|
158
|
+
"Prefer the simpler choice when options give materially equivalent results.",
|
|
159
|
+
"Return blocked only when no truthful in-scope solution can meet the success criteria.",
|
|
160
|
+
`Frame: ${JSON.stringify(outputs.frame)}`,
|
|
161
|
+
`Proposal: ${JSON.stringify(outputs.propose)}`,
|
|
162
|
+
`Ideal: ${JSON.stringify(outputs.ideal)}`,
|
|
163
|
+
].join("\n"),
|
|
164
|
+
expectedOutput: `{ "status": "ready" | "blocked", "selected": "solution", "why": "reason", "relationshipToIdeal": "relationship", "excluded": ["excluded work"], "compromises": ["compromise"], "blocker": "required only when blocked" }`,
|
|
165
|
+
validate: parseSelection,
|
|
166
|
+
}),
|
|
167
|
+
plan: agent({
|
|
168
|
+
timeoutMs: 30 * 60_000,
|
|
169
|
+
statusDetail: "writing the implementation plan",
|
|
170
|
+
prompt: ({ outputs, input }) =>
|
|
171
|
+
[
|
|
172
|
+
"Write a detailed implementation-ready plan for the selected solution.",
|
|
173
|
+
"Keep every step inside the framed scope and authority.",
|
|
174
|
+
"For each step, state what changes, where it changes, and how to verify it.",
|
|
175
|
+
"Include contract changes, compatibility boundaries, tests, rollout or migration work, and failure handling when they apply.",
|
|
176
|
+
"Use the new evidence to correct the previous plan when one exists.",
|
|
177
|
+
"Do not implement the plan.",
|
|
178
|
+
`Frame: ${JSON.stringify(outputs.frame)}`,
|
|
179
|
+
`Selection: ${JSON.stringify(outputs.choose)}`,
|
|
180
|
+
`Previous plan: ${JSON.stringify((input as AutoplanInput).previousPlan ?? null)}`,
|
|
181
|
+
`New evidence: ${JSON.stringify((input as AutoplanInput).newEvidence ?? null)}`,
|
|
182
|
+
].join("\n"),
|
|
183
|
+
expectedOutput: `{ "summary": "approach", "steps": [{ "change": "change", "where": "location", "verification": "evidence" }], "contracts": ["impact"], "tests": ["test"], "risks": [{ "risk": "risk", "mitigation": "mitigation" }], "boundaries": ["excluded work"] }`,
|
|
184
|
+
validate: (value) => requireRecord(value, "autoplan plan"),
|
|
185
|
+
}),
|
|
186
|
+
blocked: compute({
|
|
187
|
+
run: ({ outputs }) => {
|
|
188
|
+
const selection = outputs.choose as Record<string, unknown>;
|
|
189
|
+
return {
|
|
190
|
+
status: "blocked",
|
|
191
|
+
frame: outputs.frame,
|
|
192
|
+
proposal: outputs.propose,
|
|
193
|
+
ideal: outputs.ideal,
|
|
194
|
+
selection,
|
|
195
|
+
reason: requireString(selection.blocker, "autoplan blocker"),
|
|
196
|
+
} satisfies AutoplanBlocked;
|
|
197
|
+
},
|
|
198
|
+
}),
|
|
199
|
+
finalize: compute({
|
|
200
|
+
run: ({ outputs, input }) => {
|
|
201
|
+
const request = input as AutoplanInput;
|
|
202
|
+
const planDigest = digest(outputs.plan);
|
|
203
|
+
const previousPlanDigest =
|
|
204
|
+
request.previousPlan === undefined ? undefined : digest(request.previousPlan);
|
|
205
|
+
return {
|
|
206
|
+
status: "ready",
|
|
207
|
+
frame: outputs.frame,
|
|
208
|
+
proposal: outputs.propose,
|
|
209
|
+
ideal: outputs.ideal,
|
|
210
|
+
selection: outputs.choose,
|
|
211
|
+
plan: outputs.plan,
|
|
212
|
+
planDigest,
|
|
213
|
+
...(previousPlanDigest !== undefined ? { previousPlanDigest } : {}),
|
|
214
|
+
changed: previousPlanDigest === undefined || previousPlanDigest !== planDigest,
|
|
215
|
+
} satisfies AutoplanReady;
|
|
216
|
+
},
|
|
217
|
+
}),
|
|
218
|
+
},
|
|
219
|
+
edges: [
|
|
220
|
+
{ from: "frame", to: "propose" },
|
|
221
|
+
{ from: "propose", to: "ideal" },
|
|
222
|
+
{ from: "ideal", to: "choose" },
|
|
223
|
+
{
|
|
224
|
+
from: "choose",
|
|
225
|
+
switch: { on: "$.status", cases: { ready: "plan", blocked: "blocked" } },
|
|
226
|
+
},
|
|
227
|
+
{ from: "plan", to: "finalize" },
|
|
228
|
+
],
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
export default autoplanWorkflow;
|
package/src/builtins/catalog.ts
CHANGED
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
import { BuiltinWorkflowCatalog } from "../workflows/catalog.js";
|
|
2
|
+
import autodocWorkflow from "./autodoc.workflow.js";
|
|
3
|
+
import autoimplementWorkflow from "./autoimplement.workflow.js";
|
|
4
|
+
import autoplanWorkflow from "./autoplan.workflow.js";
|
|
2
5
|
import monitorWorkflow from "./monitor.workflow.js";
|
|
6
|
+
import planApprovalWorkflow from "./plan-approval.workflow.js";
|
|
3
7
|
|
|
4
8
|
export const builtinWorkflowCatalog = new BuiltinWorkflowCatalog([
|
|
9
|
+
{ id: "autoplan", revision: "1", definition: autoplanWorkflow },
|
|
10
|
+
{ id: "autodoc", revision: "1", definition: autodocWorkflow },
|
|
11
|
+
{ id: "autoimplement", revision: "4", definition: autoimplementWorkflow },
|
|
12
|
+
{ id: "plan-approval", revision: "2", definition: planApprovalWorkflow },
|
|
5
13
|
{
|
|
6
14
|
id: "monitor",
|
|
7
|
-
revision: "
|
|
15
|
+
revision: "7",
|
|
8
16
|
definition: monitorWorkflow,
|
|
9
17
|
legacySources: [
|
|
10
18
|
{
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export {
|
|
2
|
+
autoplanWorkflow,
|
|
3
|
+
type AutoplanBlocked,
|
|
4
|
+
type AutoplanInput,
|
|
5
|
+
type AutoplanReady,
|
|
6
|
+
} from "./autoplan.workflow.js";
|
|
7
|
+
export {
|
|
8
|
+
autodocWorkflow,
|
|
9
|
+
type AutodocBlocked,
|
|
10
|
+
type AutodocInput,
|
|
11
|
+
type DocumentedPlan,
|
|
12
|
+
} from "./autodoc.workflow.js";
|
|
13
|
+
export {
|
|
14
|
+
autoimplementWorkflow,
|
|
15
|
+
type AutoimplementBlocked,
|
|
16
|
+
type AutoimplementCompleted,
|
|
17
|
+
type AutoimplementInput,
|
|
18
|
+
type ExistingPlanDiscovery,
|
|
19
|
+
} from "./autoimplement.workflow.js";
|
|
20
|
+
export {
|
|
21
|
+
default as monitorWorkflow,
|
|
22
|
+
type MonitorInput,
|
|
23
|
+
type MonitorRepairPolicy,
|
|
24
|
+
} from "./monitor.workflow.js";
|
|
25
|
+
export { presentPlan } from "./plan-presentation.js";
|
|
26
|
+
export {
|
|
27
|
+
planApprovalWorkflow,
|
|
28
|
+
type PlanApprovalContinue,
|
|
29
|
+
type PlanApprovalInput,
|
|
30
|
+
type PlanApprovalReplan,
|
|
31
|
+
type PlanApprovalStop,
|
|
32
|
+
} from "./plan-approval.workflow.js";
|