@atom-workflow-agent/workflow-planner 0.1.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/LICENSE +201 -0
- package/README.md +39 -0
- package/README.zh-CN.md +39 -0
- package/dist/capabilities/capability-coverage-resolver.d.ts +5 -0
- package/dist/capabilities/capability-coverage-resolver.d.ts.map +1 -0
- package/dist/capabilities/capability-coverage-resolver.js +229 -0
- package/dist/capabilities/capability-coverage-resolver.js.map +1 -0
- package/dist/catalog/planner-catalog.d.ts +14 -0
- package/dist/catalog/planner-catalog.d.ts.map +1 -0
- package/dist/catalog/planner-catalog.js +47 -0
- package/dist/catalog/planner-catalog.js.map +1 -0
- package/dist/draft/planner-draft-normalizer.d.ts +20 -0
- package/dist/draft/planner-draft-normalizer.d.ts.map +1 -0
- package/dist/draft/planner-draft-normalizer.js +534 -0
- package/dist/draft/planner-draft-normalizer.js.map +1 -0
- package/dist/evaluation/planning-quality.d.ts +80 -0
- package/dist/evaluation/planning-quality.d.ts.map +1 -0
- package/dist/evaluation/planning-quality.js +120 -0
- package/dist/evaluation/planning-quality.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/model/planning-model-port.d.ts +41 -0
- package/dist/model/planning-model-port.d.ts.map +1 -0
- package/dist/model/planning-model-port.js +16 -0
- package/dist/model/planning-model-port.js.map +1 -0
- package/dist/planning/planning-controller.d.ts +77 -0
- package/dist/planning/planning-controller.d.ts.map +1 -0
- package/dist/planning/planning-controller.js +773 -0
- package/dist/planning/planning-controller.js.map +1 -0
- package/dist/store/local-plan-store.d.ts +57 -0
- package/dist/store/local-plan-store.d.ts.map +1 -0
- package/dist/store/local-plan-store.js +190 -0
- package/dist/store/local-plan-store.js.map +1 -0
- package/dist/store/plan-storage-layout.d.ts +14 -0
- package/dist/store/plan-storage-layout.d.ts.map +1 -0
- package/dist/store/plan-storage-layout.js +25 -0
- package/dist/store/plan-storage-layout.js.map +1 -0
- package/dist/validation/planning-draft-validator.d.ts +20 -0
- package/dist/validation/planning-draft-validator.d.ts.map +1 -0
- package/dist/validation/planning-draft-validator.js +76 -0
- package/dist/validation/planning-draft-validator.js.map +1 -0
- package/dist/workspace/map-aggregate-schema.d.ts +8 -0
- package/dist/workspace/map-aggregate-schema.d.ts.map +1 -0
- package/dist/workspace/map-aggregate-schema.js +20 -0
- package/dist/workspace/map-aggregate-schema.js.map +1 -0
- package/dist/workspace/planning-frontier.d.ts +15 -0
- package/dist/workspace/planning-frontier.d.ts.map +1 -0
- package/dist/workspace/planning-frontier.js +185 -0
- package/dist/workspace/planning-frontier.js.map +1 -0
- package/dist/workspace/planning-workspace-service.d.ts +72 -0
- package/dist/workspace/planning-workspace-service.d.ts.map +1 -0
- package/dist/workspace/planning-workspace-service.js +528 -0
- package/dist/workspace/planning-workspace-service.js.map +1 -0
- package/dist/workspace/semantic-plan-compiler.d.ts +19 -0
- package/dist/workspace/semantic-plan-compiler.d.ts.map +1 -0
- package/dist/workspace/semantic-plan-compiler.js +643 -0
- package/dist/workspace/semantic-plan-compiler.js.map +1 -0
- package/dist/workspace/strict-binding-validator.d.ts +9 -0
- package/dist/workspace/strict-binding-validator.d.ts.map +1 -0
- package/dist/workspace/strict-binding-validator.js +232 -0
- package/dist/workspace/strict-binding-validator.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,534 @@
|
|
|
1
|
+
import { classifyReferenceLikeString, WorkflowSpecSchema, } from "@atom-workflow-agent/contracts";
|
|
2
|
+
function error(path, message, hint) {
|
|
3
|
+
return {
|
|
4
|
+
code: "PLANNER_DRAFT_NORMALIZATION_FAILED",
|
|
5
|
+
stage: "draft-normalization",
|
|
6
|
+
path,
|
|
7
|
+
message,
|
|
8
|
+
...(hint ? { hint } : {}),
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
function zodPath(path) {
|
|
12
|
+
let result = "$";
|
|
13
|
+
for (const segment of path) {
|
|
14
|
+
if (typeof segment === "number")
|
|
15
|
+
result += `[${segment}]`;
|
|
16
|
+
else if (typeof segment === "string" && /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(segment))
|
|
17
|
+
result += `.${segment}`;
|
|
18
|
+
else
|
|
19
|
+
result += `[${JSON.stringify(String(segment))}]`;
|
|
20
|
+
}
|
|
21
|
+
return result;
|
|
22
|
+
}
|
|
23
|
+
class DraftNormalizer {
|
|
24
|
+
draft;
|
|
25
|
+
selectedAtomKeys;
|
|
26
|
+
workflowInputs;
|
|
27
|
+
nodes = new Map();
|
|
28
|
+
paths = new Map();
|
|
29
|
+
errors = [];
|
|
30
|
+
mappings = [];
|
|
31
|
+
constructor(draft, selectedAtomKeys, workflowInputs) {
|
|
32
|
+
this.draft = draft;
|
|
33
|
+
this.selectedAtomKeys = selectedAtomKeys;
|
|
34
|
+
this.workflowInputs = workflowInputs;
|
|
35
|
+
}
|
|
36
|
+
normalize() {
|
|
37
|
+
const fragment = this.compileStep(this.draft.flow, "$.flow");
|
|
38
|
+
if (fragment.parallelTail) {
|
|
39
|
+
this.errors.push(error("$.flow", "A Workflow cannot terminate directly from a parallel block", "Add a following Atom that joins all parallel branches before the Workflow terminates"));
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
this.connect(fragment.exits, ["$end"]);
|
|
43
|
+
}
|
|
44
|
+
const outputs = this.transformOutputs(this.draft.outputs, "$.outputs");
|
|
45
|
+
if (this.errors.length > 0)
|
|
46
|
+
return this.failure();
|
|
47
|
+
const candidate = {
|
|
48
|
+
schemaVersion: "1.2",
|
|
49
|
+
name: this.draft.name,
|
|
50
|
+
inputs: this.workflowInputs,
|
|
51
|
+
entry: [...fragment.entries],
|
|
52
|
+
nodes: [...this.nodes.values()],
|
|
53
|
+
outputs,
|
|
54
|
+
};
|
|
55
|
+
const parsed = WorkflowSpecSchema.safeParse(candidate);
|
|
56
|
+
if (!parsed.success) {
|
|
57
|
+
for (const issue of parsed.error.issues) {
|
|
58
|
+
this.errors.push({
|
|
59
|
+
code: "WORKFLOW_SCHEMA_INVALID",
|
|
60
|
+
stage: "workflow-schema",
|
|
61
|
+
path: zodPath(issue.path),
|
|
62
|
+
message: issue.message,
|
|
63
|
+
hint: "Correct the PlannerDraft field mapped to this generated Workflow field",
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
return this.failure();
|
|
67
|
+
}
|
|
68
|
+
return { success: true, workflow: parsed.data, pathMappings: Object.freeze([...this.mappings]) };
|
|
69
|
+
}
|
|
70
|
+
failure() {
|
|
71
|
+
return { success: false, errors: Object.freeze([...this.errors]), pathMappings: Object.freeze([...this.mappings]) };
|
|
72
|
+
}
|
|
73
|
+
compileStep(step, path) {
|
|
74
|
+
switch (step.kind) {
|
|
75
|
+
case "atom": return this.compileAtom(step, path);
|
|
76
|
+
case "map": return this.compileMap(step.as, step.body, step.items, step.maxItems, step.maxConcurrency, path);
|
|
77
|
+
case "sequence": return this.compileSequence(step.steps, path);
|
|
78
|
+
case "parallel": return this.compileParallel(step.branches, path);
|
|
79
|
+
case "decision": return this.compileDecision(step, path);
|
|
80
|
+
case "repeat": return this.compileRepeat(step, path);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
reserve(alias, use, path) {
|
|
84
|
+
const previous = this.paths.get(alias);
|
|
85
|
+
if (previous) {
|
|
86
|
+
this.errors.push({
|
|
87
|
+
code: "PLANNER_DRAFT_ALIAS_DUPLICATE",
|
|
88
|
+
stage: "draft-normalization",
|
|
89
|
+
path: `${path}.as`,
|
|
90
|
+
message: `PlannerDraft alias is duplicated: ${alias}`,
|
|
91
|
+
received: alias,
|
|
92
|
+
hint: `Use a unique alias; the first declaration is at ${previous}.as`,
|
|
93
|
+
});
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
if (!this.selectedAtomKeys.has(use)) {
|
|
97
|
+
this.errors.push({
|
|
98
|
+
code: "PLANNER_DRAFT_ATOM_NOT_SELECTED",
|
|
99
|
+
stage: "atom-resolution",
|
|
100
|
+
path: `${path}.use`,
|
|
101
|
+
message: `Atom was not selected into the Planning Catalog: ${use}`,
|
|
102
|
+
received: use,
|
|
103
|
+
hint: "Request a Catalog expansion or use one of the selected exact Atom keys",
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
this.paths.set(alias, path);
|
|
107
|
+
this.mappings.push({ alias, draftPath: path, workflowNodeId: alias });
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
compileAtom(step, path) {
|
|
111
|
+
this.reserve(step.as, step.use, path);
|
|
112
|
+
const dependencies = new Set();
|
|
113
|
+
const input = this.transformValue(step.input, `${path}.input`, dependencies, "node-input");
|
|
114
|
+
const node = {
|
|
115
|
+
kind: "atom",
|
|
116
|
+
id: step.as,
|
|
117
|
+
atom: step.use,
|
|
118
|
+
dependsOn: [...dependencies].sort(),
|
|
119
|
+
input,
|
|
120
|
+
next: { to: "$end", with: {} },
|
|
121
|
+
...(step.policy !== undefined ? { policy: step.policy } : {}),
|
|
122
|
+
};
|
|
123
|
+
this.nodes.set(step.as, node);
|
|
124
|
+
return { entries: [step.as], exits: [{ kind: "next", nodeId: step.as }], parallelTail: false };
|
|
125
|
+
}
|
|
126
|
+
compileMap(group, body, items, maxItems, maxConcurrency, path) {
|
|
127
|
+
const before = new Set(this.nodes.keys());
|
|
128
|
+
const fragment = this.compileStep(body, `${path}.body`);
|
|
129
|
+
const created = [...this.nodes.keys()].filter((id) => !before.has(id));
|
|
130
|
+
const dependencies = new Set();
|
|
131
|
+
const resolved = this.transformValue(items, `${path}.items`, dependencies, "map-items");
|
|
132
|
+
if (!this.isReference(resolved)) {
|
|
133
|
+
this.errors.push({
|
|
134
|
+
code: "PLANNER_DRAFT_REFERENCE_INVALID",
|
|
135
|
+
stage: "draft-normalization",
|
|
136
|
+
path: `${path}.items`,
|
|
137
|
+
message: "map.items must be one $input or $output reference",
|
|
138
|
+
received: resolved,
|
|
139
|
+
hint: "Use {\"$input\":\"items\"} or {\"$output\":\"query.items\"}",
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
for (const nodeId of created) {
|
|
144
|
+
const node = this.nodes.get(nodeId);
|
|
145
|
+
node.map = {
|
|
146
|
+
items: resolved,
|
|
147
|
+
maxItems,
|
|
148
|
+
...(maxConcurrency !== undefined ? { maxConcurrency } : {}),
|
|
149
|
+
group,
|
|
150
|
+
};
|
|
151
|
+
node.dependsOn = [...new Set([...node.dependsOn, ...dependencies])].sort();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return fragment;
|
|
155
|
+
}
|
|
156
|
+
compileSequence(steps, path) {
|
|
157
|
+
let result = this.compileStep(steps[0], `${path}.steps[0]`);
|
|
158
|
+
for (let index = 1; index < steps.length; index += 1) {
|
|
159
|
+
const next = this.compileStep(steps[index], `${path}.steps[${index}]`);
|
|
160
|
+
this.connect(result.exits, next.entries);
|
|
161
|
+
if (result.parallelTail)
|
|
162
|
+
this.addJoinDependencies(next.entries, result.exits.map((port) => port.nodeId), `${path}.steps[${index}]`);
|
|
163
|
+
result = { entries: result.entries, exits: next.exits, parallelTail: next.parallelTail };
|
|
164
|
+
}
|
|
165
|
+
return result;
|
|
166
|
+
}
|
|
167
|
+
compileParallel(branches, path) {
|
|
168
|
+
const compiled = branches.map((branch, index) => this.compileStep(branch, `${path}.branches[${index}]`));
|
|
169
|
+
if (compiled.some((fragment) => fragment.parallelTail)) {
|
|
170
|
+
this.errors.push(error(path, "A parallel branch cannot itself end with an unjoined parallel block", "Add a joining Atom inside the nested branch"));
|
|
171
|
+
}
|
|
172
|
+
return {
|
|
173
|
+
entries: compiled.flatMap((fragment) => fragment.entries),
|
|
174
|
+
exits: compiled.flatMap((fragment) => fragment.exits),
|
|
175
|
+
parallelTail: true,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
compileDecision(step, path) {
|
|
179
|
+
this.reserve(step.as, step.use, path);
|
|
180
|
+
const dependencies = new Set();
|
|
181
|
+
const input = this.transformValue(step.input, `${path}.input`, dependencies, "node-input");
|
|
182
|
+
const compiledBranches = Object.entries(step.branches).map(([branchId, branch]) => {
|
|
183
|
+
const branchPath = `${path}.branches.${branchId}`;
|
|
184
|
+
const revisit = branch.kind === "revisit";
|
|
185
|
+
const pass = branch.kind === "continue";
|
|
186
|
+
const terminal = branch.kind === "terminal";
|
|
187
|
+
if (pass || terminal) {
|
|
188
|
+
return {
|
|
189
|
+
branchId,
|
|
190
|
+
fragment: { entries: [], exits: [], parallelTail: false },
|
|
191
|
+
revisit: false,
|
|
192
|
+
pass,
|
|
193
|
+
terminal: terminal ? branch.status : undefined,
|
|
194
|
+
maxIterations: undefined,
|
|
195
|
+
result: step.merge?.branches[branchId],
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
const before = new Set(this.nodes.keys());
|
|
199
|
+
const fragment = this.compileStep(revisit ? branch.body : branch, revisit ? `${branchPath}.body` : branchPath);
|
|
200
|
+
if (revisit) {
|
|
201
|
+
this.connect(fragment.exits, [step.as], branch.maxIterations, branch.reentry, `${branchPath}.reentry`);
|
|
202
|
+
const created = [...this.nodes.keys()].filter((nodeId) => !before.has(nodeId));
|
|
203
|
+
this.boundControlRegion(created, branch.maxIterations);
|
|
204
|
+
}
|
|
205
|
+
return {
|
|
206
|
+
branchId, fragment, revisit, pass: false, terminal: undefined,
|
|
207
|
+
result: step.merge?.branches[branchId],
|
|
208
|
+
...(revisit ? { maxIterations: branch.maxIterations } : {}),
|
|
209
|
+
};
|
|
210
|
+
});
|
|
211
|
+
for (const branch of compiledBranches) {
|
|
212
|
+
if (branch.fragment.parallelTail) {
|
|
213
|
+
this.errors.push(error(`${path}.branches.${branch.branchId}`, "A Decision branch cannot end with an unjoined parallel block", "Add a joining Atom before leaving this branch"));
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
if (step.merge) {
|
|
217
|
+
this.reserveControl(step.merge.as, `${path}.merge.as`);
|
|
218
|
+
const continuingIds = compiledBranches.filter(({ revisit, terminal }) => !revisit && !terminal).map(({ branchId }) => branchId).sort();
|
|
219
|
+
const resultIds = Object.keys(step.merge.branches).sort();
|
|
220
|
+
if (JSON.stringify(continuingIds) !== JSON.stringify(resultIds)) {
|
|
221
|
+
this.errors.push({
|
|
222
|
+
code: "PLANNER_DRAFT_NORMALIZATION_FAILED", stage: "draft-normalization", path: `${path}.merge.branches`,
|
|
223
|
+
message: "Decision merge must provide one result for every continuing branch and no terminal/revisit branch",
|
|
224
|
+
expected: continuingIds, received: resultIds,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
this.nodes.set(step.merge.as, {
|
|
228
|
+
kind: "merge",
|
|
229
|
+
id: step.merge.as,
|
|
230
|
+
dependsOn: [],
|
|
231
|
+
outputSchema: step.merge.outputSchema,
|
|
232
|
+
next: { to: "$end", with: {} },
|
|
233
|
+
});
|
|
234
|
+
for (const branch of compiledBranches) {
|
|
235
|
+
if (branch.revisit || branch.terminal || branch.pass)
|
|
236
|
+
continue;
|
|
237
|
+
if (branch.result === undefined)
|
|
238
|
+
continue;
|
|
239
|
+
this.connect(branch.fragment.exits, [step.merge.as], undefined, branch.result, `${path}.merge.branches.${branch.branchId}`);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
const branches = Object.fromEntries(compiledBranches.map(({ branchId, fragment, revisit, pass, terminal, maxIterations, result }) => [
|
|
243
|
+
branchId,
|
|
244
|
+
{
|
|
245
|
+
to: terminal === "failure" ? "$failed" : terminal === "success" ? "$end" : pass ? (step.merge?.as ?? "$end") : this.target(fragment.entries),
|
|
246
|
+
with: pass && step.merge && result !== undefined
|
|
247
|
+
? this.transformEdgeValue(result, `${path}.merge.branches.${branchId}`, step.as)
|
|
248
|
+
: {},
|
|
249
|
+
...(revisit ? { maxTraversals: maxIterations } : {}),
|
|
250
|
+
},
|
|
251
|
+
]));
|
|
252
|
+
const defaultBranch = compiledBranches.find(({ branchId }) => branchId === step.defaultBranch);
|
|
253
|
+
const node = {
|
|
254
|
+
kind: "decision",
|
|
255
|
+
id: step.as,
|
|
256
|
+
atom: step.use,
|
|
257
|
+
dependsOn: [...dependencies].sort(),
|
|
258
|
+
input,
|
|
259
|
+
select: { $ref: `node.output.${step.select}` },
|
|
260
|
+
branches,
|
|
261
|
+
default: {
|
|
262
|
+
to: defaultBranch?.terminal === "failure"
|
|
263
|
+
? "$failed"
|
|
264
|
+
: defaultBranch?.terminal === "success" || defaultBranch?.pass
|
|
265
|
+
? (defaultBranch?.terminal === "success" ? "$end" : step.merge?.as ?? "$end")
|
|
266
|
+
: this.target(defaultBranch?.fragment.entries ?? ["$failed"]),
|
|
267
|
+
with: defaultBranch?.pass && step.merge && defaultBranch.result !== undefined
|
|
268
|
+
? this.transformEdgeValue(defaultBranch.result, `${path}.merge.branches.${step.defaultBranch}`, step.as)
|
|
269
|
+
: {},
|
|
270
|
+
...(defaultBranch?.revisit && defaultBranch.maxIterations !== undefined
|
|
271
|
+
? { maxTraversals: defaultBranch.maxIterations }
|
|
272
|
+
: {}),
|
|
273
|
+
},
|
|
274
|
+
...(step.policy !== undefined ? { policy: step.policy } : {}),
|
|
275
|
+
};
|
|
276
|
+
this.nodes.set(step.as, node);
|
|
277
|
+
if (step.merge) {
|
|
278
|
+
return {
|
|
279
|
+
entries: [step.as],
|
|
280
|
+
exits: [{ kind: "next", nodeId: step.merge.as }],
|
|
281
|
+
parallelTail: false,
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
return {
|
|
285
|
+
entries: [step.as],
|
|
286
|
+
exits: compiledBranches.flatMap(({ branchId, fragment, revisit, pass, terminal }) => revisit || terminal ? [] : pass ? [{ kind: "branch", nodeId: step.as, branchId }] : fragment.exits),
|
|
287
|
+
parallelTail: false,
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
reserveControl(alias, path) {
|
|
291
|
+
const previous = this.paths.get(alias);
|
|
292
|
+
if (previous) {
|
|
293
|
+
this.errors.push({
|
|
294
|
+
code: "PLANNER_DRAFT_ALIAS_DUPLICATE", stage: "draft-normalization", path,
|
|
295
|
+
message: `PlannerDraft alias is duplicated: ${alias}`, received: alias,
|
|
296
|
+
hint: `Use a unique alias; the first declaration is at ${previous}`,
|
|
297
|
+
});
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
this.paths.set(alias, path);
|
|
301
|
+
this.mappings.push({ alias, draftPath: path, workflowNodeId: alias });
|
|
302
|
+
}
|
|
303
|
+
compileRepeat(step, path) {
|
|
304
|
+
const body = this.compileStep(step.body, `${path}.body`);
|
|
305
|
+
const decision = step.decision;
|
|
306
|
+
this.reserve(decision.as, decision.use, `${path}.decision`);
|
|
307
|
+
const dependencies = new Set();
|
|
308
|
+
const input = this.transformValue(decision.input, `${path}.decision.input`, dependencies, "node-input");
|
|
309
|
+
// The body-to-decision edge is part of the same control cycle as the
|
|
310
|
+
// decision back-edge, so it must carry an explicit traversal bound too.
|
|
311
|
+
this.connect(body.exits, [decision.as], step.maxIterations);
|
|
312
|
+
if (body.parallelTail)
|
|
313
|
+
for (const predecessor of body.exits.map((port) => port.nodeId))
|
|
314
|
+
dependencies.add(predecessor);
|
|
315
|
+
const continueTransition = { to: this.target(body.entries), with: {}, maxTraversals: step.maxIterations - 1 };
|
|
316
|
+
const exitTransition = { to: "$end", with: {} };
|
|
317
|
+
const node = {
|
|
318
|
+
kind: "decision",
|
|
319
|
+
id: decision.as,
|
|
320
|
+
atom: decision.use,
|
|
321
|
+
dependsOn: [...dependencies].sort(),
|
|
322
|
+
input,
|
|
323
|
+
select: { $ref: `node.output.${decision.select}` },
|
|
324
|
+
branches: {
|
|
325
|
+
[decision.continueBranch]: continueTransition,
|
|
326
|
+
[decision.exitBranch]: exitTransition,
|
|
327
|
+
},
|
|
328
|
+
default: decision.defaultBranch === decision.continueBranch ? { ...continueTransition } : { ...exitTransition },
|
|
329
|
+
...(decision.policy !== undefined ? { policy: decision.policy } : {}),
|
|
330
|
+
};
|
|
331
|
+
this.nodes.set(decision.as, node);
|
|
332
|
+
const exits = [{ kind: "branch", nodeId: decision.as, branchId: decision.exitBranch }];
|
|
333
|
+
if (decision.defaultBranch === decision.exitBranch)
|
|
334
|
+
exits.push({ kind: "default", nodeId: decision.as });
|
|
335
|
+
return { entries: body.entries, exits, parallelTail: false };
|
|
336
|
+
}
|
|
337
|
+
connect(exits, targets, maxTraversals, reentry, path = "$.flow") {
|
|
338
|
+
for (const exit of exits) {
|
|
339
|
+
const node = this.nodes.get(exit.nodeId);
|
|
340
|
+
if (!node)
|
|
341
|
+
continue;
|
|
342
|
+
const withInput = reentry
|
|
343
|
+
? Object.fromEntries(Object.entries(reentry).map(([name, value]) => [
|
|
344
|
+
name,
|
|
345
|
+
this.transformEdgeValue(value, `${path}.${name}`, exit.nodeId),
|
|
346
|
+
]))
|
|
347
|
+
: {};
|
|
348
|
+
const transition = { to: this.target(targets), with: withInput, ...(maxTraversals !== undefined ? { maxTraversals } : {}) };
|
|
349
|
+
if (exit.kind === "next")
|
|
350
|
+
node.next = transition;
|
|
351
|
+
else if (exit.kind === "default")
|
|
352
|
+
node.default = transition;
|
|
353
|
+
else {
|
|
354
|
+
const branches = node.branches;
|
|
355
|
+
branches[exit.branchId] = transition;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
transformEdgeValue(value, path, sourceNodeId) {
|
|
360
|
+
const transformed = this.transformValue(value, path, new Set(), "edge-input");
|
|
361
|
+
const rewrite = (current) => {
|
|
362
|
+
if (Array.isArray(current))
|
|
363
|
+
return current.map(rewrite);
|
|
364
|
+
if (current === null || typeof current !== "object")
|
|
365
|
+
return current;
|
|
366
|
+
if (Object.keys(current).length === 1 && typeof current.$ref === "string") {
|
|
367
|
+
const prefix = `dependencies.${sourceNodeId}.output`;
|
|
368
|
+
if (current.$ref === prefix)
|
|
369
|
+
return { $ref: "node.output" };
|
|
370
|
+
if (current.$ref.startsWith(`${prefix}.`))
|
|
371
|
+
return { $ref: `node.output.${current.$ref.slice(prefix.length + 1)}` };
|
|
372
|
+
return current;
|
|
373
|
+
}
|
|
374
|
+
return Object.fromEntries(Object.entries(current).map(([key, nested]) => [key, rewrite(nested)]));
|
|
375
|
+
};
|
|
376
|
+
return rewrite(transformed);
|
|
377
|
+
}
|
|
378
|
+
boundControlRegion(nodeIds, maxTraversals) {
|
|
379
|
+
const bound = (transition) => {
|
|
380
|
+
if (!transition || typeof transition !== "object")
|
|
381
|
+
return;
|
|
382
|
+
const record = transition;
|
|
383
|
+
if (record.to === "$end" || record.to === "$failed")
|
|
384
|
+
return;
|
|
385
|
+
if (record.maxTraversals === undefined)
|
|
386
|
+
record.maxTraversals = maxTraversals;
|
|
387
|
+
};
|
|
388
|
+
for (const nodeId of nodeIds) {
|
|
389
|
+
const node = this.nodes.get(nodeId);
|
|
390
|
+
if (!node)
|
|
391
|
+
continue;
|
|
392
|
+
bound(node.next);
|
|
393
|
+
bound(node.default);
|
|
394
|
+
if (node.branches && typeof node.branches === "object") {
|
|
395
|
+
for (const transition of Object.values(node.branches))
|
|
396
|
+
bound(transition);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
addJoinDependencies(entries, predecessors, path) {
|
|
401
|
+
const unique = [...new Set(predecessors)].sort();
|
|
402
|
+
for (const entry of entries) {
|
|
403
|
+
const node = this.nodes.get(entry);
|
|
404
|
+
if (!node)
|
|
405
|
+
continue;
|
|
406
|
+
node.dependsOn = [...new Set([...node.dependsOn, ...unique])].sort();
|
|
407
|
+
if (node.dependsOn.includes(entry))
|
|
408
|
+
this.errors.push(error(path, `Parallel join would make ${entry} depend on itself`));
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
transformValue(value, path, dependencies, scope) {
|
|
412
|
+
if (Array.isArray(value))
|
|
413
|
+
return value.map((item, index) => this.transformValue(item, `${path}[${index}]`, dependencies, scope));
|
|
414
|
+
if (typeof value === "string") {
|
|
415
|
+
const referenceKind = classifyReferenceLikeString(value);
|
|
416
|
+
if (referenceKind) {
|
|
417
|
+
this.errors.push({
|
|
418
|
+
code: "PLANNER_DRAFT_REFERENCE_INVALID",
|
|
419
|
+
stage: "draft-normalization",
|
|
420
|
+
path,
|
|
421
|
+
message: `Reference-like string cannot be used as a literal PlannerDraft value: ${value}`,
|
|
422
|
+
received: value,
|
|
423
|
+
hint: referenceKind === "planner-draft"
|
|
424
|
+
? "Use one structured reference object such as {\"$input\":\"request\"}, {\"$output\":\"alias.field\"}, {\"$item\":\"field\"}, or {\"$index\":true}"
|
|
425
|
+
: "PlannerDraft must use $input/$output/$item/$index objects; compiled Workflow $ref syntax is not accepted here",
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
return value;
|
|
429
|
+
}
|
|
430
|
+
if (value === null || typeof value !== "object")
|
|
431
|
+
return value;
|
|
432
|
+
const entries = Object.entries(value);
|
|
433
|
+
const special = entries.filter(([key]) => ["$input", "$output", "$item", "$index", "$ref"].includes(key));
|
|
434
|
+
const unknownDirectives = entries.filter(([key]) => key.startsWith("$")
|
|
435
|
+
&& !["$input", "$output", "$item", "$index", "$ref"].includes(key));
|
|
436
|
+
if (unknownDirectives.length > 0) {
|
|
437
|
+
this.errors.push({
|
|
438
|
+
code: "PLANNER_DRAFT_REFERENCE_INVALID",
|
|
439
|
+
stage: "draft-normalization",
|
|
440
|
+
path,
|
|
441
|
+
message: `Unknown PlannerDraft reference directive: ${unknownDirectives[0][0]}`,
|
|
442
|
+
received: value,
|
|
443
|
+
hint: "Use exactly one of $input, $output, $item, or $index; pass reserved-key business data through a Workflow input instead of an inline literal",
|
|
444
|
+
});
|
|
445
|
+
return value;
|
|
446
|
+
}
|
|
447
|
+
if (special.length > 0) {
|
|
448
|
+
if (entries.length !== 1 || special.length !== 1) {
|
|
449
|
+
this.errors.push({
|
|
450
|
+
code: "PLANNER_DRAFT_REFERENCE_INVALID",
|
|
451
|
+
stage: "draft-normalization",
|
|
452
|
+
path,
|
|
453
|
+
message: "A PlannerDraft reference object must contain exactly one reference key",
|
|
454
|
+
received: value,
|
|
455
|
+
hint: "Use exactly one of $input, $output, $item, or $index",
|
|
456
|
+
});
|
|
457
|
+
return value;
|
|
458
|
+
}
|
|
459
|
+
const [key, reference] = special[0];
|
|
460
|
+
if (key === "$ref") {
|
|
461
|
+
this.errors.push({
|
|
462
|
+
code: "PLANNER_DRAFT_REFERENCE_INVALID",
|
|
463
|
+
stage: "draft-normalization",
|
|
464
|
+
path,
|
|
465
|
+
message: "$ref is reserved for compiled WorkflowSpec and cannot be used in PlannerDraft",
|
|
466
|
+
received: value,
|
|
467
|
+
hint: "Use exactly one of $input, $output, $item, or $index",
|
|
468
|
+
});
|
|
469
|
+
return value;
|
|
470
|
+
}
|
|
471
|
+
if (key === "$index") {
|
|
472
|
+
if (reference !== true)
|
|
473
|
+
this.errors.push(error(path, "$index must be true"));
|
|
474
|
+
return { $ref: "map.index" };
|
|
475
|
+
}
|
|
476
|
+
if (typeof reference !== "string" || reference.trim() === "") {
|
|
477
|
+
this.errors.push(error(path, `${key} must be a non-empty string`));
|
|
478
|
+
return value;
|
|
479
|
+
}
|
|
480
|
+
if (key === "$input")
|
|
481
|
+
return { $ref: `workflow.inputs.${reference}` };
|
|
482
|
+
if (key === "$item")
|
|
483
|
+
return { $ref: reference === "." ? "map.item" : `map.item.${reference}` };
|
|
484
|
+
const separator = reference.indexOf(".");
|
|
485
|
+
const alias = separator < 0 ? reference : reference.slice(0, separator);
|
|
486
|
+
const suffix = separator < 0 ? "" : reference.slice(separator + 1);
|
|
487
|
+
if (!this.paths.has(alias)) {
|
|
488
|
+
this.errors.push({
|
|
489
|
+
code: "PLANNER_DRAFT_REFERENCE_INVALID",
|
|
490
|
+
stage: "draft-normalization",
|
|
491
|
+
path: `${path}.$output`,
|
|
492
|
+
message: `PlannerDraft output reference uses an unknown alias: ${alias}`,
|
|
493
|
+
received: reference,
|
|
494
|
+
hint: "Reference the as alias of a declared Atom",
|
|
495
|
+
});
|
|
496
|
+
}
|
|
497
|
+
dependencies.add(alias);
|
|
498
|
+
return { $ref: `dependencies.${alias}.output${suffix ? `.${suffix}` : ""}` };
|
|
499
|
+
}
|
|
500
|
+
return Object.fromEntries(entries.map(([key, nested]) => [key, this.transformValue(nested, `${path}.${key}`, dependencies, scope)]));
|
|
501
|
+
}
|
|
502
|
+
transformOutputs(outputs, path) {
|
|
503
|
+
return Object.fromEntries(Object.entries(outputs).map(([name, value]) => {
|
|
504
|
+
if (value === null || Array.isArray(value) || typeof value !== "object" || Object.keys(value).length !== 1 || typeof value.$output !== "string") {
|
|
505
|
+
this.errors.push({
|
|
506
|
+
code: "PLANNER_DRAFT_REFERENCE_INVALID",
|
|
507
|
+
stage: "draft-normalization",
|
|
508
|
+
path: `${path}.${name}`,
|
|
509
|
+
message: "A Workflow draft output must be one $output reference",
|
|
510
|
+
received: value,
|
|
511
|
+
hint: "Use {\"$output\":\"alias.path\"}",
|
|
512
|
+
});
|
|
513
|
+
return [name, value];
|
|
514
|
+
}
|
|
515
|
+
const reference = value.$output;
|
|
516
|
+
const separator = reference.indexOf(".");
|
|
517
|
+
const alias = separator < 0 ? reference : reference.slice(0, separator);
|
|
518
|
+
const suffix = separator < 0 ? "" : reference.slice(separator + 1);
|
|
519
|
+
if (!this.paths.has(alias))
|
|
520
|
+
this.errors.push(error(`${path}.${name}`, `Workflow output references an unknown alias: ${alias}`));
|
|
521
|
+
return [name, { $ref: `nodes.${alias}.activations.lastSuccessful.output${suffix ? `.${suffix}` : ""}` }];
|
|
522
|
+
}));
|
|
523
|
+
}
|
|
524
|
+
isReference(value) {
|
|
525
|
+
return value !== null && !Array.isArray(value) && typeof value === "object" && Object.keys(value).length === 1 && typeof value.$ref === "string";
|
|
526
|
+
}
|
|
527
|
+
target(targets) {
|
|
528
|
+
return targets.length === 1 ? targets[0] : [...targets];
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
export function normalizePlannerDraft(draft, options) {
|
|
532
|
+
return new DraftNormalizer(draft, options.selectedAtomKeys, options.workflowInputs).normalize();
|
|
533
|
+
}
|
|
534
|
+
//# sourceMappingURL=planner-draft-normalizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planner-draft-normalizer.js","sourceRoot":"","sources":["../../src/draft/planner-draft-normalizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { PlannerAttempt, PlannerTokenUsage, WorkflowValidationStage } from "@atom-workflow-agent/contracts";
|
|
2
|
+
import type { PlanningAudit } from "../planning/planning-controller.js";
|
|
3
|
+
export declare const STANDARD_PLANNING_CASES: readonly [{
|
|
4
|
+
readonly id: "serial";
|
|
5
|
+
readonly title: "简单串行";
|
|
6
|
+
readonly requiredStructures: readonly ["sequence"];
|
|
7
|
+
}, {
|
|
8
|
+
readonly id: "parallel-join";
|
|
9
|
+
readonly title: "并行与汇合";
|
|
10
|
+
readonly requiredStructures: readonly ["sequence", "parallel"];
|
|
11
|
+
}, {
|
|
12
|
+
readonly id: "n-way-decision";
|
|
13
|
+
readonly title: "N 路条件分支";
|
|
14
|
+
readonly requiredStructures: readonly ["decision"];
|
|
15
|
+
}, {
|
|
16
|
+
readonly id: "map";
|
|
17
|
+
readonly title: "集合映射处理";
|
|
18
|
+
readonly requiredStructures: readonly ["map"];
|
|
19
|
+
}, {
|
|
20
|
+
readonly id: "bounded-repeat";
|
|
21
|
+
readonly title: "有界修订回路";
|
|
22
|
+
readonly requiredStructures: readonly ["repeat", "decision"];
|
|
23
|
+
}, {
|
|
24
|
+
readonly id: "signal-host";
|
|
25
|
+
readonly title: "Signal 与 Host Model 暂停恢复";
|
|
26
|
+
readonly requiredStructures: readonly ["sequence", "decision"];
|
|
27
|
+
}, {
|
|
28
|
+
readonly id: "travel-complex";
|
|
29
|
+
readonly title: "旅行规划复杂链路";
|
|
30
|
+
readonly requiredStructures: readonly ["sequence", "parallel", "decision", "map", "repeat"];
|
|
31
|
+
}];
|
|
32
|
+
export interface PlanningQualitySample {
|
|
33
|
+
readonly caseId: string;
|
|
34
|
+
readonly providerId: string;
|
|
35
|
+
readonly protocol: "workflow-spec" | "planner-draft" | "planning-workspace";
|
|
36
|
+
readonly capabilityCoverageExact: boolean;
|
|
37
|
+
readonly firstTransactionAccepted: boolean;
|
|
38
|
+
readonly repairSucceeded: boolean;
|
|
39
|
+
readonly finalWorkflowValid: boolean;
|
|
40
|
+
readonly capabilityTurns: number;
|
|
41
|
+
readonly workspaceTurns: number;
|
|
42
|
+
readonly planningTurns: number;
|
|
43
|
+
readonly durationMs: number;
|
|
44
|
+
readonly catalogIndexBytes: number;
|
|
45
|
+
readonly planningCatalogBytes: number;
|
|
46
|
+
readonly promptPayloadBytes: number;
|
|
47
|
+
readonly tokenUsage?: PlannerTokenUsage;
|
|
48
|
+
readonly errorStages: readonly WorkflowValidationStage[];
|
|
49
|
+
}
|
|
50
|
+
export interface PlanningQualitySummary {
|
|
51
|
+
readonly sampleCount: number;
|
|
52
|
+
readonly capabilityCoverageAccuracy: number;
|
|
53
|
+
readonly firstTransactionAcceptanceRate: number;
|
|
54
|
+
readonly repairSuccessRate: number;
|
|
55
|
+
readonly finalWorkflowValidityRate: number;
|
|
56
|
+
readonly averageCapabilityTurns: number;
|
|
57
|
+
readonly averageWorkspaceTurns: number;
|
|
58
|
+
readonly averagePlanningTurns: number;
|
|
59
|
+
readonly averageDurationMs: number;
|
|
60
|
+
readonly averageCatalogIndexBytes: number;
|
|
61
|
+
readonly averagePlanningCatalogBytes: number;
|
|
62
|
+
readonly averagePromptPayloadBytes: number;
|
|
63
|
+
readonly totalTokenUsage?: PlannerTokenUsage;
|
|
64
|
+
readonly errorsByStage: Readonly<Partial<Record<WorkflowValidationStage, number>>>;
|
|
65
|
+
}
|
|
66
|
+
/** Converts one persisted planning audit into a provider-neutral evaluation sample. */
|
|
67
|
+
export declare function createPlanningQualitySample(input: {
|
|
68
|
+
readonly caseId: string;
|
|
69
|
+
readonly expectedAtomKeys: readonly string[];
|
|
70
|
+
readonly attempts: readonly PlannerAttempt[];
|
|
71
|
+
readonly audit: PlanningAudit;
|
|
72
|
+
readonly finalWorkflowValid: boolean;
|
|
73
|
+
}): PlanningQualitySample;
|
|
74
|
+
/** Aggregates comparable quality, size, latency and token metrics for Codex, Trae or future providers. */
|
|
75
|
+
export declare function summarizePlanningQuality(samples: readonly PlanningQualitySample[]): PlanningQualitySummary;
|
|
76
|
+
/** Produces independent provider reports so Codex, Trae and future ACP agents remain comparable. */
|
|
77
|
+
export declare function summarizePlanningQualityByProvider(samples: readonly PlanningQualitySample[]): Readonly<Record<string, PlanningQualitySummary>>;
|
|
78
|
+
/** Compares the legacy complete WorkflowSpec baseline with the PlannerDraft protocol. */
|
|
79
|
+
export declare function summarizePlanningQualityByProtocol(samples: readonly PlanningQualitySample[]): Readonly<Partial<Record<PlanningQualitySample["protocol"], PlanningQualitySummary>>>;
|
|
80
|
+
//# sourceMappingURL=planning-quality.d.ts.map
|