@osolmaz/pi-workflows 0.12.0 → 0.12.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.
- package/README.md +4 -3
- package/dist/builtins/autoimplement.workflow.d.ts +485 -126
- package/dist/builtins/autoimplement.workflow.js +17 -105
- package/dist/builtins/autoimplement.workflow.js.map +1 -1
- package/dist/builtins/catalog.js +4 -4
- package/dist/builtins/index.d.ts +2 -1
- package/dist/builtins/index.js +2 -1
- package/dist/builtins/index.js.map +1 -1
- package/dist/builtins/monitor.workflow.d.ts +2 -4
- package/dist/builtins/monitor.workflow.js +26 -128
- 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/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 +301 -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 +5 -3
- package/dist/builtins/sanity-check.workflow.js +105 -21
- package/dist/builtins/sanity-check.workflow.js.map +1 -1
- package/dist/extension/decision-channels.d.ts +2 -2
- package/dist/extension/decision-channels.js +22 -28
- package/dist/extension/decision-channels.js.map +1 -1
- package/dist/extension/index.js +62 -33
- package/dist/extension/index.js.map +1 -1
- package/dist/extension/session-events.d.ts +2 -2
- package/dist/extension/widget.js +23 -3
- package/dist/extension/widget.js.map +1 -1
- package/dist/render/graph-render.js +1 -2
- package/dist/render/graph-render.js.map +1 -1
- package/dist/viewer/render.js +7 -6
- package/dist/viewer/render.js.map +1 -1
- package/dist/workflows/catalog.js +7 -2
- package/dist/workflows/catalog.js.map +1 -1
- package/dist/workflows/composition.js +8 -0
- 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/engine.d.ts +2 -2
- package/dist/workflows/engine.js +14 -13
- package/dist/workflows/engine.js.map +1 -1
- package/dist/workflows/errors.d.ts +13 -0
- package/dist/workflows/errors.js +15 -0
- package/dist/workflows/errors.js.map +1 -1
- package/dist/workflows/human-decision.d.ts +16 -4
- package/dist/workflows/human-decision.js +175 -72
- package/dist/workflows/human-decision.js.map +1 -1
- package/dist/workflows/index.d.ts +2 -2
- package/dist/workflows/index.js +1 -1
- 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 +10 -0
- package/dist/workflows/schema.js.map +1 -1
- package/dist/workflows/store.js +5 -0
- package/dist/workflows/store.js.map +1 -1
- package/dist/workflows/types.d.ts +33 -45
- package/docs/HUMAN_DECISIONS.md +25 -35
- package/docs/HUMAN_DECISION_PRESENTATIONS.md +14 -24
- package/docs/MONITOR.md +5 -11
- package/docs/WORKFLOW_COMPOSITION.md +8 -7
- package/docs/plans/2026-08-21-plan-change-approval-policy-plan.md +322 -0
- package/docs/plans/2026-08-21-sanity-check-plan.md +202 -94
- package/docs/run-bundles.md +6 -6
- package/docs/workflows.md +26 -6
- package/examples/workflows/approved-plan.workflow.ts +19 -46
- package/herdr-plugin.toml +1 -1
- package/package.json +7 -7
- 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/monitor/SKILL.md +31 -3
- package/skills/pi-workflows/SKILL.md +2 -1
- package/skills/sanity-check/SKILL.md +44 -0
- package/src/builtins/autoimplement.workflow.ts +19 -118
- package/src/builtins/catalog.ts +4 -4
- package/src/builtins/index.ts +11 -0
- package/src/builtins/monitor.workflow.ts +27 -150
- package/src/builtins/pi-agent-group.ts +1407 -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 +186 -41
- package/src/extension/decision-channels.ts +29 -59
- package/src/extension/index.ts +79 -41
- package/src/extension/session-events.ts +2 -2
- package/src/extension/widget.ts +24 -5
- package/src/render/graph-render.ts +1 -2
- package/src/viewer/render.ts +7 -6
- package/src/workflows/catalog.ts +7 -2
- package/src/workflows/composition.ts +9 -0
- package/src/workflows/decision-presentation.ts +56 -43
- package/src/workflows/engine.ts +17 -15
- package/src/workflows/errors.ts +24 -0
- package/src/workflows/human-decision.ts +218 -101
- package/src/workflows/index.ts +5 -11
- package/src/workflows/progress.ts +18 -3
- package/src/workflows/schema.ts +17 -0
- package/src/workflows/store.ts +5 -0
- package/src/workflows/types.ts +39 -56
- 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/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
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { WorkflowNodeContext } from "../workflows/types.js";
|
|
2
2
|
import { type AutodocInput } from "./autodoc.workflow.js";
|
|
3
3
|
import { type AutoimplementConcurrency } from "./autoimplement-command-batches.js";
|
|
4
|
-
import { type
|
|
5
|
-
import { type
|
|
4
|
+
import { type PlanApprovalPolicy } from "./plan-approval.workflow.js";
|
|
5
|
+
import { type NormalizedPlanChangeInput } from "./plan-change.workflow.js";
|
|
6
6
|
export type AutoimplementInput = {
|
|
7
7
|
task: string;
|
|
8
8
|
plan?: unknown;
|
|
@@ -17,10 +17,7 @@ export type AutoimplementInput = {
|
|
|
17
17
|
planDigest: string;
|
|
18
18
|
documents: string[];
|
|
19
19
|
};
|
|
20
|
-
approval?:
|
|
21
|
-
audience: string;
|
|
22
|
-
maxReplans: number;
|
|
23
|
-
};
|
|
20
|
+
approval?: PlanApprovalPolicy;
|
|
24
21
|
concurrency?: Partial<AutoimplementConcurrency>;
|
|
25
22
|
};
|
|
26
23
|
export type ExistingPlanDiscovery = {
|
|
@@ -116,48 +113,79 @@ export declare const autoimplementWorkflow: import("../workflows/types.js").Work
|
|
|
116
113
|
};
|
|
117
114
|
};
|
|
118
115
|
}>;
|
|
119
|
-
readonly
|
|
120
|
-
readonly
|
|
121
|
-
readonly from: "
|
|
122
|
-
readonly validate: (value: unknown) => import("./plan-
|
|
123
|
-
};
|
|
124
|
-
readonly stop: {
|
|
125
|
-
readonly from: "stopped";
|
|
126
|
-
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalStop;
|
|
116
|
+
readonly redesign: import("../workflows/types.js").WorkflowIncludeDefinition<import("../workflows/types.js").WorkflowDefinition<NormalizedPlanChangeInput, {
|
|
117
|
+
readonly ready: {
|
|
118
|
+
readonly from: "finalize";
|
|
119
|
+
readonly validate: (value: unknown) => import("./plan-change.workflow.js").PlanChangeReady;
|
|
127
120
|
};
|
|
128
|
-
readonly
|
|
129
|
-
readonly from: "
|
|
130
|
-
readonly validate: (value: unknown) => import("./plan-
|
|
121
|
+
readonly blocked: {
|
|
122
|
+
readonly from: "blocked";
|
|
123
|
+
readonly validate: (value: unknown) => import("./plan-change.workflow.js").PlanChangeBlocked;
|
|
131
124
|
};
|
|
132
|
-
},
|
|
133
|
-
|
|
134
|
-
readonly
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
readonly
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
125
|
+
}, {
|
|
126
|
+
readonly design: import("../workflows/types.js").WorkflowIncludeDefinition<import("../workflows/types.js").WorkflowDefinition<import("./autoplan.workflow.js").AutoplanInput, {
|
|
127
|
+
readonly ready: {
|
|
128
|
+
readonly from: "finalize";
|
|
129
|
+
readonly validate: (value: unknown) => import("./autoplan.workflow.js").AutoplanReady;
|
|
130
|
+
};
|
|
131
|
+
readonly blocked: {
|
|
132
|
+
readonly from: "blocked";
|
|
133
|
+
readonly validate: (value: unknown) => import("./autoplan.workflow.js").AutoplanBlocked;
|
|
134
|
+
};
|
|
135
|
+
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
136
|
+
nodes: {
|
|
137
|
+
readonly frame: import("../workflows/types.js").AgentNodeDefinition;
|
|
138
|
+
readonly propose: import("../workflows/types.js").AgentNodeDefinition;
|
|
139
|
+
readonly ideal: import("../workflows/types.js").AgentNodeDefinition;
|
|
140
|
+
readonly choose: import("../workflows/types.js").AgentNodeDefinition;
|
|
141
|
+
readonly plan: import("../workflows/types.js").AgentNodeDefinition;
|
|
142
|
+
readonly blocked: import("../workflows/types.js").ComputeNodeDefinition;
|
|
143
|
+
readonly finalize: import("../workflows/types.js").ComputeNodeDefinition;
|
|
144
|
+
};
|
|
145
|
+
includes?: import("../workflows/types.js").WorkflowIncludeMap;
|
|
146
|
+
exits?: {
|
|
147
|
+
readonly ready: {
|
|
148
|
+
readonly from: "finalize";
|
|
149
|
+
readonly validate: (value: unknown) => import("./autoplan.workflow.js").AutoplanReady;
|
|
150
|
+
};
|
|
151
|
+
readonly blocked: {
|
|
152
|
+
readonly from: "blocked";
|
|
153
|
+
readonly validate: (value: unknown) => import("./autoplan.workflow.js").AutoplanBlocked;
|
|
153
154
|
};
|
|
154
155
|
};
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
readonly
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
156
|
+
}>;
|
|
157
|
+
readonly documentation: import("../workflows/types.js").WorkflowIncludeDefinition<import("../workflows/types.js").WorkflowDefinition<AutodocInput, {
|
|
158
|
+
readonly ready: {
|
|
159
|
+
readonly from: "finalize";
|
|
160
|
+
readonly validate: (value: unknown) => import("./autodoc.workflow.js").DocumentedPlan;
|
|
161
|
+
};
|
|
162
|
+
readonly blocked: {
|
|
163
|
+
readonly from: "blocked";
|
|
164
|
+
readonly validate: (value: unknown) => import("./autodoc.workflow.js").AutodocBlocked;
|
|
165
|
+
};
|
|
166
|
+
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
167
|
+
nodes: {
|
|
168
|
+
readonly prepare: import("../workflows/types.js").ComputeNodeDefinition;
|
|
169
|
+
readonly locatePlan: import("../workflows/types.js").AgentNodeDefinition;
|
|
170
|
+
readonly inspectDocumentation: import("../workflows/types.js").AgentNodeDefinition;
|
|
171
|
+
readonly updateDocumentation: import("../workflows/types.js").AgentNodeDefinition;
|
|
172
|
+
readonly verifyDocumentation: import("../workflows/types.js").AgentNodeDefinition;
|
|
173
|
+
readonly finalize: import("../workflows/types.js").ComputeNodeDefinition;
|
|
174
|
+
readonly blocked: import("../workflows/types.js").ComputeNodeDefinition;
|
|
175
|
+
};
|
|
176
|
+
includes?: import("../workflows/types.js").WorkflowIncludeMap;
|
|
177
|
+
exits?: {
|
|
178
|
+
readonly ready: {
|
|
179
|
+
readonly from: "finalize";
|
|
180
|
+
readonly validate: (value: unknown) => import("./autodoc.workflow.js").DocumentedPlan;
|
|
181
|
+
};
|
|
182
|
+
readonly blocked: {
|
|
183
|
+
readonly from: "blocked";
|
|
184
|
+
readonly validate: (value: unknown) => import("./autodoc.workflow.js").AutodocBlocked;
|
|
185
|
+
};
|
|
186
|
+
};
|
|
187
|
+
}>;
|
|
188
|
+
readonly approval: import("../workflows/types.js").WorkflowIncludeDefinition<import("../workflows/types.js").WorkflowDefinition<import("./plan-approval.workflow.js").NormalizedPlanApprovalInput, {
|
|
161
189
|
readonly continue: {
|
|
162
190
|
readonly from: "continued";
|
|
163
191
|
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalContinue;
|
|
@@ -170,36 +198,187 @@ export declare const autoimplementWorkflow: import("../workflows/types.js").Work
|
|
|
170
198
|
readonly from: "replan";
|
|
171
199
|
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalReplan;
|
|
172
200
|
};
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
201
|
+
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
202
|
+
nodes: {
|
|
203
|
+
readonly routePolicy: import("../workflows/types.js").ComputeNodeDefinition;
|
|
204
|
+
readonly approve: import("../workflows/types.js").WorkflowNodeCommon & {
|
|
205
|
+
nodeType: "checkpoint";
|
|
206
|
+
summary?: string;
|
|
207
|
+
run?: (context: WorkflowNodeContext) => import("../workflows/types.js").MaybePromise<unknown>;
|
|
208
|
+
humanDecision?: import("../workflows/types.js").HumanDecisionNodeContract;
|
|
209
|
+
} & {
|
|
210
|
+
readonly __humanChoices?: {
|
|
211
|
+
readonly continue: {
|
|
212
|
+
readonly label: "Yes, continue";
|
|
213
|
+
};
|
|
214
|
+
readonly stop: {
|
|
215
|
+
readonly label: "No, stop";
|
|
216
|
+
};
|
|
217
|
+
readonly replan: {
|
|
218
|
+
readonly label: "Replan";
|
|
219
|
+
readonly input: import("../workflows/types.js").HumanDecisionTextInput & {
|
|
220
|
+
name: "instructions";
|
|
221
|
+
};
|
|
222
|
+
};
|
|
223
|
+
};
|
|
224
|
+
};
|
|
225
|
+
readonly continued: import("../workflows/types.js").ComputeNodeDefinition;
|
|
226
|
+
readonly stopped: import("../workflows/types.js").ComputeNodeDefinition;
|
|
227
|
+
readonly replan: import("../workflows/types.js").ComputeNodeDefinition;
|
|
228
|
+
};
|
|
229
|
+
includes?: import("../workflows/types.js").WorkflowIncludeMap;
|
|
230
|
+
exits?: {
|
|
231
|
+
readonly continue: {
|
|
232
|
+
readonly from: "continued";
|
|
233
|
+
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalContinue;
|
|
234
|
+
};
|
|
235
|
+
readonly stop: {
|
|
236
|
+
readonly from: "stopped";
|
|
237
|
+
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalStop;
|
|
238
|
+
};
|
|
239
|
+
readonly replan: {
|
|
240
|
+
readonly from: "replan";
|
|
241
|
+
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalReplan;
|
|
242
|
+
};
|
|
243
|
+
};
|
|
244
|
+
}>;
|
|
245
|
+
}> & {
|
|
185
246
|
nodes: {
|
|
186
|
-
readonly
|
|
187
|
-
readonly
|
|
188
|
-
readonly
|
|
189
|
-
readonly choose: import("../workflows/types.js").AgentNodeDefinition;
|
|
190
|
-
readonly plan: import("../workflows/types.js").AgentNodeDefinition;
|
|
191
|
-
readonly blocked: import("../workflows/types.js").ComputeNodeDefinition;
|
|
247
|
+
readonly start: import("../workflows/types.js").ComputeNodeDefinition;
|
|
248
|
+
readonly assessPlan: import("../workflows/types.js").ComputeNodeDefinition;
|
|
249
|
+
readonly replanGuard: import("../workflows/types.js").ComputeNodeDefinition;
|
|
192
250
|
readonly finalize: import("../workflows/types.js").ComputeNodeDefinition;
|
|
251
|
+
readonly blocked: import("../workflows/types.js").ComputeNodeDefinition;
|
|
252
|
+
};
|
|
253
|
+
includes?: {
|
|
254
|
+
readonly design: import("../workflows/types.js").WorkflowIncludeDefinition<import("../workflows/types.js").WorkflowDefinition<import("./autoplan.workflow.js").AutoplanInput, {
|
|
255
|
+
readonly ready: {
|
|
256
|
+
readonly from: "finalize";
|
|
257
|
+
readonly validate: (value: unknown) => import("./autoplan.workflow.js").AutoplanReady;
|
|
258
|
+
};
|
|
259
|
+
readonly blocked: {
|
|
260
|
+
readonly from: "blocked";
|
|
261
|
+
readonly validate: (value: unknown) => import("./autoplan.workflow.js").AutoplanBlocked;
|
|
262
|
+
};
|
|
263
|
+
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
264
|
+
nodes: {
|
|
265
|
+
readonly frame: import("../workflows/types.js").AgentNodeDefinition;
|
|
266
|
+
readonly propose: import("../workflows/types.js").AgentNodeDefinition;
|
|
267
|
+
readonly ideal: import("../workflows/types.js").AgentNodeDefinition;
|
|
268
|
+
readonly choose: import("../workflows/types.js").AgentNodeDefinition;
|
|
269
|
+
readonly plan: import("../workflows/types.js").AgentNodeDefinition;
|
|
270
|
+
readonly blocked: import("../workflows/types.js").ComputeNodeDefinition;
|
|
271
|
+
readonly finalize: import("../workflows/types.js").ComputeNodeDefinition;
|
|
272
|
+
};
|
|
273
|
+
includes?: import("../workflows/types.js").WorkflowIncludeMap;
|
|
274
|
+
exits?: {
|
|
275
|
+
readonly ready: {
|
|
276
|
+
readonly from: "finalize";
|
|
277
|
+
readonly validate: (value: unknown) => import("./autoplan.workflow.js").AutoplanReady;
|
|
278
|
+
};
|
|
279
|
+
readonly blocked: {
|
|
280
|
+
readonly from: "blocked";
|
|
281
|
+
readonly validate: (value: unknown) => import("./autoplan.workflow.js").AutoplanBlocked;
|
|
282
|
+
};
|
|
283
|
+
};
|
|
284
|
+
}>;
|
|
285
|
+
readonly documentation: import("../workflows/types.js").WorkflowIncludeDefinition<import("../workflows/types.js").WorkflowDefinition<AutodocInput, {
|
|
286
|
+
readonly ready: {
|
|
287
|
+
readonly from: "finalize";
|
|
288
|
+
readonly validate: (value: unknown) => import("./autodoc.workflow.js").DocumentedPlan;
|
|
289
|
+
};
|
|
290
|
+
readonly blocked: {
|
|
291
|
+
readonly from: "blocked";
|
|
292
|
+
readonly validate: (value: unknown) => import("./autodoc.workflow.js").AutodocBlocked;
|
|
293
|
+
};
|
|
294
|
+
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
295
|
+
nodes: {
|
|
296
|
+
readonly prepare: import("../workflows/types.js").ComputeNodeDefinition;
|
|
297
|
+
readonly locatePlan: import("../workflows/types.js").AgentNodeDefinition;
|
|
298
|
+
readonly inspectDocumentation: import("../workflows/types.js").AgentNodeDefinition;
|
|
299
|
+
readonly updateDocumentation: import("../workflows/types.js").AgentNodeDefinition;
|
|
300
|
+
readonly verifyDocumentation: import("../workflows/types.js").AgentNodeDefinition;
|
|
301
|
+
readonly finalize: import("../workflows/types.js").ComputeNodeDefinition;
|
|
302
|
+
readonly blocked: import("../workflows/types.js").ComputeNodeDefinition;
|
|
303
|
+
};
|
|
304
|
+
includes?: import("../workflows/types.js").WorkflowIncludeMap;
|
|
305
|
+
exits?: {
|
|
306
|
+
readonly ready: {
|
|
307
|
+
readonly from: "finalize";
|
|
308
|
+
readonly validate: (value: unknown) => import("./autodoc.workflow.js").DocumentedPlan;
|
|
309
|
+
};
|
|
310
|
+
readonly blocked: {
|
|
311
|
+
readonly from: "blocked";
|
|
312
|
+
readonly validate: (value: unknown) => import("./autodoc.workflow.js").AutodocBlocked;
|
|
313
|
+
};
|
|
314
|
+
};
|
|
315
|
+
}>;
|
|
316
|
+
readonly approval: import("../workflows/types.js").WorkflowIncludeDefinition<import("../workflows/types.js").WorkflowDefinition<import("./plan-approval.workflow.js").NormalizedPlanApprovalInput, {
|
|
317
|
+
readonly continue: {
|
|
318
|
+
readonly from: "continued";
|
|
319
|
+
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalContinue;
|
|
320
|
+
};
|
|
321
|
+
readonly stop: {
|
|
322
|
+
readonly from: "stopped";
|
|
323
|
+
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalStop;
|
|
324
|
+
};
|
|
325
|
+
readonly replan: {
|
|
326
|
+
readonly from: "replan";
|
|
327
|
+
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalReplan;
|
|
328
|
+
};
|
|
329
|
+
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
330
|
+
nodes: {
|
|
331
|
+
readonly routePolicy: import("../workflows/types.js").ComputeNodeDefinition;
|
|
332
|
+
readonly approve: import("../workflows/types.js").WorkflowNodeCommon & {
|
|
333
|
+
nodeType: "checkpoint";
|
|
334
|
+
summary?: string;
|
|
335
|
+
run?: (context: WorkflowNodeContext) => import("../workflows/types.js").MaybePromise<unknown>;
|
|
336
|
+
humanDecision?: import("../workflows/types.js").HumanDecisionNodeContract;
|
|
337
|
+
} & {
|
|
338
|
+
readonly __humanChoices?: {
|
|
339
|
+
readonly continue: {
|
|
340
|
+
readonly label: "Yes, continue";
|
|
341
|
+
};
|
|
342
|
+
readonly stop: {
|
|
343
|
+
readonly label: "No, stop";
|
|
344
|
+
};
|
|
345
|
+
readonly replan: {
|
|
346
|
+
readonly label: "Replan";
|
|
347
|
+
readonly input: import("../workflows/types.js").HumanDecisionTextInput & {
|
|
348
|
+
name: "instructions";
|
|
349
|
+
};
|
|
350
|
+
};
|
|
351
|
+
};
|
|
352
|
+
};
|
|
353
|
+
readonly continued: import("../workflows/types.js").ComputeNodeDefinition;
|
|
354
|
+
readonly stopped: import("../workflows/types.js").ComputeNodeDefinition;
|
|
355
|
+
readonly replan: import("../workflows/types.js").ComputeNodeDefinition;
|
|
356
|
+
};
|
|
357
|
+
includes?: import("../workflows/types.js").WorkflowIncludeMap;
|
|
358
|
+
exits?: {
|
|
359
|
+
readonly continue: {
|
|
360
|
+
readonly from: "continued";
|
|
361
|
+
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalContinue;
|
|
362
|
+
};
|
|
363
|
+
readonly stop: {
|
|
364
|
+
readonly from: "stopped";
|
|
365
|
+
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalStop;
|
|
366
|
+
};
|
|
367
|
+
readonly replan: {
|
|
368
|
+
readonly from: "replan";
|
|
369
|
+
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalReplan;
|
|
370
|
+
};
|
|
371
|
+
};
|
|
372
|
+
}>;
|
|
193
373
|
};
|
|
194
|
-
includes?: import("../workflows/types.js").WorkflowIncludeMap;
|
|
195
374
|
exits?: {
|
|
196
375
|
readonly ready: {
|
|
197
376
|
readonly from: "finalize";
|
|
198
|
-
readonly validate: (value: unknown) => import("./
|
|
377
|
+
readonly validate: (value: unknown) => import("./plan-change.workflow.js").PlanChangeReady;
|
|
199
378
|
};
|
|
200
379
|
readonly blocked: {
|
|
201
380
|
readonly from: "blocked";
|
|
202
|
-
readonly validate: (value: unknown) => import("./
|
|
381
|
+
readonly validate: (value: unknown) => import("./plan-change.workflow.js").PlanChangeBlocked;
|
|
203
382
|
};
|
|
204
383
|
};
|
|
205
384
|
}>;
|
|
@@ -209,8 +388,6 @@ export declare const autoimplementWorkflow: import("../workflows/types.js").Work
|
|
|
209
388
|
readonly findPlan: import("../workflows/types.js").AgentNodeDefinition;
|
|
210
389
|
readonly routeFoundPlan: import("../workflows/types.js").ComputeNodeDefinition;
|
|
211
390
|
readonly adoptPlan: import("../workflows/types.js").ComputeNodeDefinition;
|
|
212
|
-
readonly maybeApproval: import("../workflows/types.js").ComputeNodeDefinition;
|
|
213
|
-
readonly replanGuard: import("../workflows/types.js").ComputeNodeDefinition;
|
|
214
391
|
readonly timeoutFallbackGuard: import("../workflows/types.js").ComputeNodeDefinition;
|
|
215
392
|
readonly timeoutFallback: import("../workflows/types.js").AgentNodeDefinition;
|
|
216
393
|
readonly routeTimeoutFallback: import("../workflows/types.js").ComputeNodeDefinition;
|
|
@@ -279,48 +456,79 @@ export declare const autoimplementWorkflow: import("../workflows/types.js").Work
|
|
|
279
456
|
};
|
|
280
457
|
};
|
|
281
458
|
}>;
|
|
282
|
-
readonly
|
|
283
|
-
readonly
|
|
284
|
-
readonly from: "
|
|
285
|
-
readonly validate: (value: unknown) => import("./plan-
|
|
286
|
-
};
|
|
287
|
-
readonly stop: {
|
|
288
|
-
readonly from: "stopped";
|
|
289
|
-
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalStop;
|
|
459
|
+
readonly redesign: import("../workflows/types.js").WorkflowIncludeDefinition<import("../workflows/types.js").WorkflowDefinition<NormalizedPlanChangeInput, {
|
|
460
|
+
readonly ready: {
|
|
461
|
+
readonly from: "finalize";
|
|
462
|
+
readonly validate: (value: unknown) => import("./plan-change.workflow.js").PlanChangeReady;
|
|
290
463
|
};
|
|
291
|
-
readonly
|
|
292
|
-
readonly from: "
|
|
293
|
-
readonly validate: (value: unknown) => import("./plan-
|
|
464
|
+
readonly blocked: {
|
|
465
|
+
readonly from: "blocked";
|
|
466
|
+
readonly validate: (value: unknown) => import("./plan-change.workflow.js").PlanChangeBlocked;
|
|
294
467
|
};
|
|
295
|
-
},
|
|
296
|
-
|
|
297
|
-
readonly
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
readonly
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
468
|
+
}, {
|
|
469
|
+
readonly design: import("../workflows/types.js").WorkflowIncludeDefinition<import("../workflows/types.js").WorkflowDefinition<import("./autoplan.workflow.js").AutoplanInput, {
|
|
470
|
+
readonly ready: {
|
|
471
|
+
readonly from: "finalize";
|
|
472
|
+
readonly validate: (value: unknown) => import("./autoplan.workflow.js").AutoplanReady;
|
|
473
|
+
};
|
|
474
|
+
readonly blocked: {
|
|
475
|
+
readonly from: "blocked";
|
|
476
|
+
readonly validate: (value: unknown) => import("./autoplan.workflow.js").AutoplanBlocked;
|
|
477
|
+
};
|
|
478
|
+
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
479
|
+
nodes: {
|
|
480
|
+
readonly frame: import("../workflows/types.js").AgentNodeDefinition;
|
|
481
|
+
readonly propose: import("../workflows/types.js").AgentNodeDefinition;
|
|
482
|
+
readonly ideal: import("../workflows/types.js").AgentNodeDefinition;
|
|
483
|
+
readonly choose: import("../workflows/types.js").AgentNodeDefinition;
|
|
484
|
+
readonly plan: import("../workflows/types.js").AgentNodeDefinition;
|
|
485
|
+
readonly blocked: import("../workflows/types.js").ComputeNodeDefinition;
|
|
486
|
+
readonly finalize: import("../workflows/types.js").ComputeNodeDefinition;
|
|
487
|
+
};
|
|
488
|
+
includes?: import("../workflows/types.js").WorkflowIncludeMap;
|
|
489
|
+
exits?: {
|
|
490
|
+
readonly ready: {
|
|
491
|
+
readonly from: "finalize";
|
|
492
|
+
readonly validate: (value: unknown) => import("./autoplan.workflow.js").AutoplanReady;
|
|
493
|
+
};
|
|
494
|
+
readonly blocked: {
|
|
495
|
+
readonly from: "blocked";
|
|
496
|
+
readonly validate: (value: unknown) => import("./autoplan.workflow.js").AutoplanBlocked;
|
|
316
497
|
};
|
|
317
498
|
};
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
readonly
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
499
|
+
}>;
|
|
500
|
+
readonly documentation: import("../workflows/types.js").WorkflowIncludeDefinition<import("../workflows/types.js").WorkflowDefinition<AutodocInput, {
|
|
501
|
+
readonly ready: {
|
|
502
|
+
readonly from: "finalize";
|
|
503
|
+
readonly validate: (value: unknown) => import("./autodoc.workflow.js").DocumentedPlan;
|
|
504
|
+
};
|
|
505
|
+
readonly blocked: {
|
|
506
|
+
readonly from: "blocked";
|
|
507
|
+
readonly validate: (value: unknown) => import("./autodoc.workflow.js").AutodocBlocked;
|
|
508
|
+
};
|
|
509
|
+
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
510
|
+
nodes: {
|
|
511
|
+
readonly prepare: import("../workflows/types.js").ComputeNodeDefinition;
|
|
512
|
+
readonly locatePlan: import("../workflows/types.js").AgentNodeDefinition;
|
|
513
|
+
readonly inspectDocumentation: import("../workflows/types.js").AgentNodeDefinition;
|
|
514
|
+
readonly updateDocumentation: import("../workflows/types.js").AgentNodeDefinition;
|
|
515
|
+
readonly verifyDocumentation: import("../workflows/types.js").AgentNodeDefinition;
|
|
516
|
+
readonly finalize: import("../workflows/types.js").ComputeNodeDefinition;
|
|
517
|
+
readonly blocked: import("../workflows/types.js").ComputeNodeDefinition;
|
|
518
|
+
};
|
|
519
|
+
includes?: import("../workflows/types.js").WorkflowIncludeMap;
|
|
520
|
+
exits?: {
|
|
521
|
+
readonly ready: {
|
|
522
|
+
readonly from: "finalize";
|
|
523
|
+
readonly validate: (value: unknown) => import("./autodoc.workflow.js").DocumentedPlan;
|
|
524
|
+
};
|
|
525
|
+
readonly blocked: {
|
|
526
|
+
readonly from: "blocked";
|
|
527
|
+
readonly validate: (value: unknown) => import("./autodoc.workflow.js").AutodocBlocked;
|
|
528
|
+
};
|
|
529
|
+
};
|
|
530
|
+
}>;
|
|
531
|
+
readonly approval: import("../workflows/types.js").WorkflowIncludeDefinition<import("../workflows/types.js").WorkflowDefinition<import("./plan-approval.workflow.js").NormalizedPlanApprovalInput, {
|
|
324
532
|
readonly continue: {
|
|
325
533
|
readonly from: "continued";
|
|
326
534
|
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalContinue;
|
|
@@ -333,36 +541,187 @@ export declare const autoimplementWorkflow: import("../workflows/types.js").Work
|
|
|
333
541
|
readonly from: "replan";
|
|
334
542
|
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalReplan;
|
|
335
543
|
};
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
544
|
+
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
545
|
+
nodes: {
|
|
546
|
+
readonly routePolicy: import("../workflows/types.js").ComputeNodeDefinition;
|
|
547
|
+
readonly approve: import("../workflows/types.js").WorkflowNodeCommon & {
|
|
548
|
+
nodeType: "checkpoint";
|
|
549
|
+
summary?: string;
|
|
550
|
+
run?: (context: WorkflowNodeContext) => import("../workflows/types.js").MaybePromise<unknown>;
|
|
551
|
+
humanDecision?: import("../workflows/types.js").HumanDecisionNodeContract;
|
|
552
|
+
} & {
|
|
553
|
+
readonly __humanChoices?: {
|
|
554
|
+
readonly continue: {
|
|
555
|
+
readonly label: "Yes, continue";
|
|
556
|
+
};
|
|
557
|
+
readonly stop: {
|
|
558
|
+
readonly label: "No, stop";
|
|
559
|
+
};
|
|
560
|
+
readonly replan: {
|
|
561
|
+
readonly label: "Replan";
|
|
562
|
+
readonly input: import("../workflows/types.js").HumanDecisionTextInput & {
|
|
563
|
+
name: "instructions";
|
|
564
|
+
};
|
|
565
|
+
};
|
|
566
|
+
};
|
|
567
|
+
};
|
|
568
|
+
readonly continued: import("../workflows/types.js").ComputeNodeDefinition;
|
|
569
|
+
readonly stopped: import("../workflows/types.js").ComputeNodeDefinition;
|
|
570
|
+
readonly replan: import("../workflows/types.js").ComputeNodeDefinition;
|
|
571
|
+
};
|
|
572
|
+
includes?: import("../workflows/types.js").WorkflowIncludeMap;
|
|
573
|
+
exits?: {
|
|
574
|
+
readonly continue: {
|
|
575
|
+
readonly from: "continued";
|
|
576
|
+
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalContinue;
|
|
577
|
+
};
|
|
578
|
+
readonly stop: {
|
|
579
|
+
readonly from: "stopped";
|
|
580
|
+
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalStop;
|
|
581
|
+
};
|
|
582
|
+
readonly replan: {
|
|
583
|
+
readonly from: "replan";
|
|
584
|
+
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalReplan;
|
|
585
|
+
};
|
|
586
|
+
};
|
|
587
|
+
}>;
|
|
588
|
+
}> & {
|
|
348
589
|
nodes: {
|
|
349
|
-
readonly
|
|
350
|
-
readonly
|
|
351
|
-
readonly
|
|
352
|
-
readonly choose: import("../workflows/types.js").AgentNodeDefinition;
|
|
353
|
-
readonly plan: import("../workflows/types.js").AgentNodeDefinition;
|
|
354
|
-
readonly blocked: import("../workflows/types.js").ComputeNodeDefinition;
|
|
590
|
+
readonly start: import("../workflows/types.js").ComputeNodeDefinition;
|
|
591
|
+
readonly assessPlan: import("../workflows/types.js").ComputeNodeDefinition;
|
|
592
|
+
readonly replanGuard: import("../workflows/types.js").ComputeNodeDefinition;
|
|
355
593
|
readonly finalize: import("../workflows/types.js").ComputeNodeDefinition;
|
|
594
|
+
readonly blocked: import("../workflows/types.js").ComputeNodeDefinition;
|
|
595
|
+
};
|
|
596
|
+
includes?: {
|
|
597
|
+
readonly design: import("../workflows/types.js").WorkflowIncludeDefinition<import("../workflows/types.js").WorkflowDefinition<import("./autoplan.workflow.js").AutoplanInput, {
|
|
598
|
+
readonly ready: {
|
|
599
|
+
readonly from: "finalize";
|
|
600
|
+
readonly validate: (value: unknown) => import("./autoplan.workflow.js").AutoplanReady;
|
|
601
|
+
};
|
|
602
|
+
readonly blocked: {
|
|
603
|
+
readonly from: "blocked";
|
|
604
|
+
readonly validate: (value: unknown) => import("./autoplan.workflow.js").AutoplanBlocked;
|
|
605
|
+
};
|
|
606
|
+
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
607
|
+
nodes: {
|
|
608
|
+
readonly frame: import("../workflows/types.js").AgentNodeDefinition;
|
|
609
|
+
readonly propose: import("../workflows/types.js").AgentNodeDefinition;
|
|
610
|
+
readonly ideal: import("../workflows/types.js").AgentNodeDefinition;
|
|
611
|
+
readonly choose: import("../workflows/types.js").AgentNodeDefinition;
|
|
612
|
+
readonly plan: import("../workflows/types.js").AgentNodeDefinition;
|
|
613
|
+
readonly blocked: import("../workflows/types.js").ComputeNodeDefinition;
|
|
614
|
+
readonly finalize: import("../workflows/types.js").ComputeNodeDefinition;
|
|
615
|
+
};
|
|
616
|
+
includes?: import("../workflows/types.js").WorkflowIncludeMap;
|
|
617
|
+
exits?: {
|
|
618
|
+
readonly ready: {
|
|
619
|
+
readonly from: "finalize";
|
|
620
|
+
readonly validate: (value: unknown) => import("./autoplan.workflow.js").AutoplanReady;
|
|
621
|
+
};
|
|
622
|
+
readonly blocked: {
|
|
623
|
+
readonly from: "blocked";
|
|
624
|
+
readonly validate: (value: unknown) => import("./autoplan.workflow.js").AutoplanBlocked;
|
|
625
|
+
};
|
|
626
|
+
};
|
|
627
|
+
}>;
|
|
628
|
+
readonly documentation: import("../workflows/types.js").WorkflowIncludeDefinition<import("../workflows/types.js").WorkflowDefinition<AutodocInput, {
|
|
629
|
+
readonly ready: {
|
|
630
|
+
readonly from: "finalize";
|
|
631
|
+
readonly validate: (value: unknown) => import("./autodoc.workflow.js").DocumentedPlan;
|
|
632
|
+
};
|
|
633
|
+
readonly blocked: {
|
|
634
|
+
readonly from: "blocked";
|
|
635
|
+
readonly validate: (value: unknown) => import("./autodoc.workflow.js").AutodocBlocked;
|
|
636
|
+
};
|
|
637
|
+
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
638
|
+
nodes: {
|
|
639
|
+
readonly prepare: import("../workflows/types.js").ComputeNodeDefinition;
|
|
640
|
+
readonly locatePlan: import("../workflows/types.js").AgentNodeDefinition;
|
|
641
|
+
readonly inspectDocumentation: import("../workflows/types.js").AgentNodeDefinition;
|
|
642
|
+
readonly updateDocumentation: import("../workflows/types.js").AgentNodeDefinition;
|
|
643
|
+
readonly verifyDocumentation: import("../workflows/types.js").AgentNodeDefinition;
|
|
644
|
+
readonly finalize: import("../workflows/types.js").ComputeNodeDefinition;
|
|
645
|
+
readonly blocked: import("../workflows/types.js").ComputeNodeDefinition;
|
|
646
|
+
};
|
|
647
|
+
includes?: import("../workflows/types.js").WorkflowIncludeMap;
|
|
648
|
+
exits?: {
|
|
649
|
+
readonly ready: {
|
|
650
|
+
readonly from: "finalize";
|
|
651
|
+
readonly validate: (value: unknown) => import("./autodoc.workflow.js").DocumentedPlan;
|
|
652
|
+
};
|
|
653
|
+
readonly blocked: {
|
|
654
|
+
readonly from: "blocked";
|
|
655
|
+
readonly validate: (value: unknown) => import("./autodoc.workflow.js").AutodocBlocked;
|
|
656
|
+
};
|
|
657
|
+
};
|
|
658
|
+
}>;
|
|
659
|
+
readonly approval: import("../workflows/types.js").WorkflowIncludeDefinition<import("../workflows/types.js").WorkflowDefinition<import("./plan-approval.workflow.js").NormalizedPlanApprovalInput, {
|
|
660
|
+
readonly continue: {
|
|
661
|
+
readonly from: "continued";
|
|
662
|
+
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalContinue;
|
|
663
|
+
};
|
|
664
|
+
readonly stop: {
|
|
665
|
+
readonly from: "stopped";
|
|
666
|
+
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalStop;
|
|
667
|
+
};
|
|
668
|
+
readonly replan: {
|
|
669
|
+
readonly from: "replan";
|
|
670
|
+
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalReplan;
|
|
671
|
+
};
|
|
672
|
+
}, import("../workflows/types.js").WorkflowIncludeMap> & {
|
|
673
|
+
nodes: {
|
|
674
|
+
readonly routePolicy: import("../workflows/types.js").ComputeNodeDefinition;
|
|
675
|
+
readonly approve: import("../workflows/types.js").WorkflowNodeCommon & {
|
|
676
|
+
nodeType: "checkpoint";
|
|
677
|
+
summary?: string;
|
|
678
|
+
run?: (context: WorkflowNodeContext) => import("../workflows/types.js").MaybePromise<unknown>;
|
|
679
|
+
humanDecision?: import("../workflows/types.js").HumanDecisionNodeContract;
|
|
680
|
+
} & {
|
|
681
|
+
readonly __humanChoices?: {
|
|
682
|
+
readonly continue: {
|
|
683
|
+
readonly label: "Yes, continue";
|
|
684
|
+
};
|
|
685
|
+
readonly stop: {
|
|
686
|
+
readonly label: "No, stop";
|
|
687
|
+
};
|
|
688
|
+
readonly replan: {
|
|
689
|
+
readonly label: "Replan";
|
|
690
|
+
readonly input: import("../workflows/types.js").HumanDecisionTextInput & {
|
|
691
|
+
name: "instructions";
|
|
692
|
+
};
|
|
693
|
+
};
|
|
694
|
+
};
|
|
695
|
+
};
|
|
696
|
+
readonly continued: import("../workflows/types.js").ComputeNodeDefinition;
|
|
697
|
+
readonly stopped: import("../workflows/types.js").ComputeNodeDefinition;
|
|
698
|
+
readonly replan: import("../workflows/types.js").ComputeNodeDefinition;
|
|
699
|
+
};
|
|
700
|
+
includes?: import("../workflows/types.js").WorkflowIncludeMap;
|
|
701
|
+
exits?: {
|
|
702
|
+
readonly continue: {
|
|
703
|
+
readonly from: "continued";
|
|
704
|
+
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalContinue;
|
|
705
|
+
};
|
|
706
|
+
readonly stop: {
|
|
707
|
+
readonly from: "stopped";
|
|
708
|
+
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalStop;
|
|
709
|
+
};
|
|
710
|
+
readonly replan: {
|
|
711
|
+
readonly from: "replan";
|
|
712
|
+
readonly validate: (value: unknown) => import("./plan-approval.workflow.js").PlanApprovalReplan;
|
|
713
|
+
};
|
|
714
|
+
};
|
|
715
|
+
}>;
|
|
356
716
|
};
|
|
357
|
-
includes?: import("../workflows/types.js").WorkflowIncludeMap;
|
|
358
717
|
exits?: {
|
|
359
718
|
readonly ready: {
|
|
360
719
|
readonly from: "finalize";
|
|
361
|
-
readonly validate: (value: unknown) => import("./
|
|
720
|
+
readonly validate: (value: unknown) => import("./plan-change.workflow.js").PlanChangeReady;
|
|
362
721
|
};
|
|
363
722
|
readonly blocked: {
|
|
364
723
|
readonly from: "blocked";
|
|
365
|
-
readonly validate: (value: unknown) => import("./
|
|
724
|
+
readonly validate: (value: unknown) => import("./plan-change.workflow.js").PlanChangeBlocked;
|
|
366
725
|
};
|
|
367
726
|
};
|
|
368
727
|
}>;
|