@sapiom/harness 0.8.9 → 0.9.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/CHANGELOG.md +63 -0
- package/README.md +11 -1
- package/dist/core/agent-project-discovery.d.ts +235 -1
- package/dist/core/agent-project-discovery.d.ts.map +1 -1
- package/dist/core/agent-project-discovery.js +303 -1
- package/dist/core/agent-project-discovery.js.map +1 -1
- package/dist/core/canvas-interconnections.d.ts +31 -0
- package/dist/core/canvas-interconnections.d.ts.map +1 -1
- package/dist/core/canvas-interconnections.js +294 -21
- package/dist/core/canvas-interconnections.js.map +1 -1
- package/dist/core/canvas-render.d.ts +32 -0
- package/dist/core/canvas-render.d.ts.map +1 -1
- package/dist/core/canvas-render.js +50 -41
- package/dist/core/canvas-render.js.map +1 -1
- package/dist/core/definition-name.d.ts +12 -0
- package/dist/core/definition-name.d.ts.map +1 -1
- package/dist/core/definition-name.js +14 -5
- package/dist/core/definition-name.js.map +1 -1
- package/dist/core/system-graph-inventory.d.ts +68 -0
- package/dist/core/system-graph-inventory.d.ts.map +1 -0
- package/dist/core/system-graph-inventory.js +312 -0
- package/dist/core/system-graph-inventory.js.map +1 -0
- package/dist/core/system-graph-relationships.d.ts +41 -0
- package/dist/core/system-graph-relationships.d.ts.map +1 -0
- package/dist/core/system-graph-relationships.js +98 -0
- package/dist/core/system-graph-relationships.js.map +1 -0
- package/dist/core/system-graph-store.d.ts +45 -0
- package/dist/core/system-graph-store.d.ts.map +1 -0
- package/dist/core/system-graph-store.js +222 -0
- package/dist/core/system-graph-store.js.map +1 -0
- package/dist/core/system-graph-watcher.d.ts +51 -0
- package/dist/core/system-graph-watcher.d.ts.map +1 -0
- package/dist/core/system-graph-watcher.js +448 -0
- package/dist/core/system-graph-watcher.js.map +1 -0
- package/dist/core/system-graph.d.ts +43 -0
- package/dist/core/system-graph.d.ts.map +1 -0
- package/dist/core/system-graph.js +321 -0
- package/dist/core/system-graph.js.map +1 -0
- package/dist/core/workflow-registry.d.ts +84 -6
- package/dist/core/workflow-registry.d.ts.map +1 -1
- package/dist/core/workflow-registry.js +191 -91
- package/dist/core/workflow-registry.js.map +1 -1
- package/dist/core/workspace-watcher.d.ts +21 -13
- package/dist/core/workspace-watcher.d.ts.map +1 -1
- package/dist/core/workspace-watcher.js +79 -81
- package/dist/core/workspace-watcher.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/server/agent-move.d.ts +134 -0
- package/dist/server/agent-move.d.ts.map +1 -0
- package/dist/server/agent-move.js +343 -0
- package/dist/server/agent-move.js.map +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +275 -22
- package/dist/server/index.js.map +1 -1
- package/dist/server/rest.d.ts +3 -0
- package/dist/server/rest.d.ts.map +1 -1
- package/dist/server/rest.js +3 -0
- package/dist/server/rest.js.map +1 -1
- package/dist/server/studio-rail.d.ts +76 -0
- package/dist/server/studio-rail.d.ts.map +1 -0
- package/dist/server/studio-rail.js +234 -0
- package/dist/server/studio-rail.js.map +1 -0
- package/dist/server/system-graph.d.ts +14 -0
- package/dist/server/system-graph.d.ts.map +1 -0
- package/dist/server/system-graph.js +40 -0
- package/dist/server/system-graph.js.map +1 -0
- package/dist/server/workflow-graph.d.ts +43 -0
- package/dist/server/workflow-graph.d.ts.map +1 -0
- package/dist/server/workflow-graph.js +200 -0
- package/dist/server/workflow-graph.js.map +1 -0
- package/dist/shared/system-graph.d.ts +59 -0
- package/dist/shared/system-graph.d.ts.map +1 -0
- package/dist/shared/system-graph.js +76 -0
- package/dist/shared/system-graph.js.map +1 -0
- package/dist/shared/types.d.ts +45 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js.map +1 -1
- package/dist/web/assets/index-2Fab6dzf.js +508 -0
- package/dist/web/assets/index-D0doaFvT.css +32 -0
- package/dist/web/index.html +2 -2
- package/package.json +5 -5
- package/dist/web/assets/index-B18B2y5o.js +0 -494
- package/dist/web/assets/index-jGBbXx9R.css +0 -32
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
* Heuristic scan of a workflow project's TypeScript sources for two things the
|
|
3
3
|
* canvas surfaces, in a single pass:
|
|
4
4
|
*
|
|
5
|
-
* - cross-
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* - direct cross-agent invocations — current `agents.run` / `agents.launch`
|
|
6
|
+
* calls and the supported legacy `orchestrations.launch` form, extracted
|
|
7
|
+
* with a syntax-only TypeScript walk; and
|
|
8
8
|
* - Sapiom capabilities — `ctx.sapiom.<ns>.<method>(...)` call sites, rendered
|
|
9
|
-
* as capability chips on the step (the thing Sapiom bills for
|
|
9
|
+
* as capability chips on the step (usually the thing Sapiom bills for;
|
|
10
|
+
* `agents.run` remains temporarily for per-agent Canvas compatibility).
|
|
10
11
|
*
|
|
11
12
|
* Each call is attributed to the step whose `defineStep({ ... })` block it
|
|
12
13
|
* literally sits inside — a brace-balanced extent, not merely the nearest
|
|
@@ -15,29 +16,41 @@
|
|
|
15
16
|
* the last step in the file — for a capability chip that would read as a false
|
|
16
17
|
* claim about what a step calls.
|
|
17
18
|
*
|
|
18
|
-
* This
|
|
19
|
-
*
|
|
20
|
-
*
|
|
19
|
+
* This deliberately does not create a Program or TypeChecker. Supported direct
|
|
20
|
+
* calls are syntax-accurate (comments and strings cannot become relationships),
|
|
21
|
+
* while dynamic targets are returned as explicit extraction warnings.
|
|
21
22
|
*/
|
|
22
23
|
import * as fs from "node:fs/promises";
|
|
23
24
|
import * as path from "node:path";
|
|
24
|
-
|
|
25
|
+
import ts from "typescript";
|
|
26
|
+
const SKIP_DIR_NAMES = new Set([
|
|
27
|
+
"node_modules",
|
|
28
|
+
".git",
|
|
29
|
+
"dist",
|
|
30
|
+
"build",
|
|
31
|
+
".sapiom",
|
|
32
|
+
]);
|
|
25
33
|
const SOURCE_EXTENSIONS = new Set([".ts", ".tsx"]);
|
|
26
34
|
const MAX_FILES_PER_WORKFLOW = 200;
|
|
27
35
|
const MAX_FILE_BYTES = 512 * 1024;
|
|
28
|
-
// Matches `orchestrations.launch({ ...definition: "slug"... })` (old SDK) and
|
|
29
|
-
// `agents.launch({ ...definition: "slug"... })` (current SDK), tolerating
|
|
30
|
-
// other fields before `definition` in the object literal (bounded lookahead
|
|
31
|
-
// so an unrelated huge object literal can't make this pathological).
|
|
32
|
-
const LAUNCH_CALL_PATTERN = /(?:orchestrations|agents)\s*\.\s*launch\s*\(\s*\{[\s\S]{0,400}?definition\s*:\s*(['"`])([^'"`]+)\1/g;
|
|
33
36
|
// Matches `sapiom.<ns>.<method>(` chains — e.g. `ctx.sapiom.web.search(`,
|
|
34
37
|
// `sapiom.email.messages.send(`. Captures the dotted chain AFTER `sapiom.`
|
|
35
38
|
// (the capability id: "web.search", "email.messages.send"), tolerating
|
|
36
39
|
// whitespace around the dots. The negative lookbehind avoids matching an
|
|
37
40
|
// identifier that merely ends in "sapiom".
|
|
38
41
|
const CAPABILITY_CALL_PATTERN = /(?<![\w$])sapiom\s*\.\s*([a-z][\w$]*(?:\s*\.\s*[a-z][\w$]*)+)\s*\(/gi;
|
|
39
|
-
//
|
|
40
|
-
|
|
42
|
+
// Async launches already render as launched-agent nodes on the per-agent
|
|
43
|
+
// Canvas. Keep blocking `agents.run` in that Canvas's existing capability-chip
|
|
44
|
+
// projection until it gains a blocking relationship node of its own.
|
|
45
|
+
const NON_CAPABILITY_CALLS = new Set([
|
|
46
|
+
"agents.launch",
|
|
47
|
+
"orchestrations.launch",
|
|
48
|
+
]);
|
|
49
|
+
/** Most workflow files contain no cross-agent API at all. Avoid constructing a
|
|
50
|
+
* TypeScript tree for that hot path while keeping every supported spelling. */
|
|
51
|
+
function mayContainAgentInvocation(content) {
|
|
52
|
+
return content.includes("agents") || content.includes("orchestrations");
|
|
53
|
+
}
|
|
41
54
|
// A `name: "..."` property declaration — the step-name key `defineStep`
|
|
42
55
|
// blocks always open with. The lookbehind rejects longer identifiers ending
|
|
43
56
|
// in "name" (fromName, vendorName) without consuming the preceding char.
|
|
@@ -63,6 +76,7 @@ export async function listSourceFiles(root) {
|
|
|
63
76
|
catch {
|
|
64
77
|
return;
|
|
65
78
|
}
|
|
79
|
+
entries.sort((left, right) => left.name.localeCompare(right.name));
|
|
66
80
|
for (const entry of entries) {
|
|
67
81
|
if (files.length >= MAX_FILES_PER_WORKFLOW)
|
|
68
82
|
return;
|
|
@@ -136,7 +150,9 @@ function stepBlockRanges(content, knownStepIds) {
|
|
|
136
150
|
const open = match.index + match[0].length - 1; // the `(` of defineStep(
|
|
137
151
|
const end = matchingParen(content, open);
|
|
138
152
|
let stepId = null;
|
|
139
|
-
for (const nameMatch of content
|
|
153
|
+
for (const nameMatch of content
|
|
154
|
+
.slice(open, end)
|
|
155
|
+
.matchAll(STEP_NAME_PATTERN)) {
|
|
140
156
|
if (knownStepIds.has(nameMatch[2])) {
|
|
141
157
|
stepId = nameMatch[2];
|
|
142
158
|
break;
|
|
@@ -155,6 +171,243 @@ function attributeTo(blocks, index) {
|
|
|
155
171
|
}
|
|
156
172
|
return null;
|
|
157
173
|
}
|
|
174
|
+
function collectSupportedNamespaces(sourceFile) {
|
|
175
|
+
const current = new Set();
|
|
176
|
+
const legacy = new Set();
|
|
177
|
+
for (const statement of sourceFile.statements) {
|
|
178
|
+
if (!ts.isImportDeclaration(statement) ||
|
|
179
|
+
!ts.isStringLiteral(statement.moduleSpecifier) ||
|
|
180
|
+
statement.moduleSpecifier.text !== "@sapiom/tools") {
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
const clause = statement.importClause;
|
|
184
|
+
if (!clause ||
|
|
185
|
+
clause.isTypeOnly ||
|
|
186
|
+
!clause.namedBindings ||
|
|
187
|
+
!ts.isNamedImports(clause.namedBindings)) {
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
for (const specifier of clause.namedBindings.elements) {
|
|
191
|
+
if (specifier.isTypeOnly)
|
|
192
|
+
continue;
|
|
193
|
+
const imported = specifier.propertyName?.text ?? specifier.name.text;
|
|
194
|
+
if (imported === "agents")
|
|
195
|
+
current.add(specifier.name.text);
|
|
196
|
+
if (imported === "orchestrations")
|
|
197
|
+
legacy.add(specifier.name.text);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return { current, legacy };
|
|
201
|
+
}
|
|
202
|
+
function unwrapExpression(expression) {
|
|
203
|
+
if (ts.isParenthesizedExpression(expression) ||
|
|
204
|
+
ts.isAsExpression(expression) ||
|
|
205
|
+
ts.isTypeAssertionExpression(expression) ||
|
|
206
|
+
ts.isSatisfiesExpression(expression) ||
|
|
207
|
+
ts.isNonNullExpression(expression)) {
|
|
208
|
+
return unwrapExpression(expression.expression);
|
|
209
|
+
}
|
|
210
|
+
return expression;
|
|
211
|
+
}
|
|
212
|
+
function propertyAccessChain(expression) {
|
|
213
|
+
const current = unwrapExpression(expression);
|
|
214
|
+
if (ts.isIdentifier(current))
|
|
215
|
+
return [current.text];
|
|
216
|
+
if (!ts.isPropertyAccessExpression(current) || current.questionDotToken) {
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
const parent = propertyAccessChain(current.expression);
|
|
220
|
+
return parent ? [...parent, current.name.text] : null;
|
|
221
|
+
}
|
|
222
|
+
function bindingContainsName(binding, name) {
|
|
223
|
+
if (ts.isIdentifier(binding))
|
|
224
|
+
return binding.text === name;
|
|
225
|
+
return binding.elements.some((element) => !ts.isOmittedExpression(element) &&
|
|
226
|
+
bindingContainsName(element.name, name));
|
|
227
|
+
}
|
|
228
|
+
function declarationListContainsName(declarationList, name) {
|
|
229
|
+
return declarationList.declarations.some((declaration) => bindingContainsName(declaration.name, name));
|
|
230
|
+
}
|
|
231
|
+
function statementDeclaresName(statement, name) {
|
|
232
|
+
if (ts.isVariableStatement(statement)) {
|
|
233
|
+
return declarationListContainsName(statement.declarationList, name);
|
|
234
|
+
}
|
|
235
|
+
if ((ts.isFunctionDeclaration(statement) ||
|
|
236
|
+
ts.isClassDeclaration(statement) ||
|
|
237
|
+
ts.isEnumDeclaration(statement)) &&
|
|
238
|
+
statement.name) {
|
|
239
|
+
return statement.name.text === name;
|
|
240
|
+
}
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
function functionBodyDeclaresVar(body, name) {
|
|
244
|
+
if (!body)
|
|
245
|
+
return false;
|
|
246
|
+
let found = false;
|
|
247
|
+
const visit = (node) => {
|
|
248
|
+
if (found)
|
|
249
|
+
return;
|
|
250
|
+
if (node !== body && ts.isFunctionLike(node))
|
|
251
|
+
return;
|
|
252
|
+
if (ts.isVariableDeclarationList(node) &&
|
|
253
|
+
!(node.flags & ts.NodeFlags.BlockScoped) &&
|
|
254
|
+
declarationListContainsName(node, name)) {
|
|
255
|
+
found = true;
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
ts.forEachChild(node, visit);
|
|
259
|
+
};
|
|
260
|
+
visit(body);
|
|
261
|
+
return found;
|
|
262
|
+
}
|
|
263
|
+
/** Import aliases are proven only while they still refer to that import. This
|
|
264
|
+
* syntax-only scope check covers lexical declarations and parameters without
|
|
265
|
+
* escalating to a Program or TypeChecker. */
|
|
266
|
+
function isImportedNamespaceShadowed(call, name, sourceFile) {
|
|
267
|
+
for (let ancestor = call.parent; ancestor && ancestor !== sourceFile; ancestor = ancestor.parent) {
|
|
268
|
+
if (ts.isFunctionLike(ancestor)) {
|
|
269
|
+
if (ancestor.parameters.some((parameter) => bindingContainsName(parameter.name, name))) {
|
|
270
|
+
return true;
|
|
271
|
+
}
|
|
272
|
+
if (functionBodyDeclaresVar(ancestor.body, name)) {
|
|
273
|
+
return true;
|
|
274
|
+
}
|
|
275
|
+
if ((ts.isFunctionDeclaration(ancestor) ||
|
|
276
|
+
ts.isFunctionExpression(ancestor)) &&
|
|
277
|
+
ancestor.name?.text === name) {
|
|
278
|
+
return true;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
if (ts.isBlock(ancestor) &&
|
|
282
|
+
ancestor.statements.some((statement) => statementDeclaresName(statement, name))) {
|
|
283
|
+
return true;
|
|
284
|
+
}
|
|
285
|
+
if (ts.isCatchClause(ancestor) &&
|
|
286
|
+
ancestor.variableDeclaration &&
|
|
287
|
+
bindingContainsName(ancestor.variableDeclaration.name, name)) {
|
|
288
|
+
return true;
|
|
289
|
+
}
|
|
290
|
+
if ((ts.isForStatement(ancestor) ||
|
|
291
|
+
ts.isForInStatement(ancestor) ||
|
|
292
|
+
ts.isForOfStatement(ancestor)) &&
|
|
293
|
+
ancestor.initializer &&
|
|
294
|
+
ts.isVariableDeclarationList(ancestor.initializer) &&
|
|
295
|
+
declarationListContainsName(ancestor.initializer, name)) {
|
|
296
|
+
return true;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
return false;
|
|
300
|
+
}
|
|
301
|
+
function invocationMode(call, namespaces, sourceFile) {
|
|
302
|
+
const chain = propertyAccessChain(call.expression);
|
|
303
|
+
if (!chain)
|
|
304
|
+
return null;
|
|
305
|
+
if (chain.length === 4 &&
|
|
306
|
+
chain[0] === "ctx" &&
|
|
307
|
+
chain[1] === "sapiom" &&
|
|
308
|
+
chain[2] === "agents") {
|
|
309
|
+
if (chain[3] === "run")
|
|
310
|
+
return "blocking";
|
|
311
|
+
if (chain[3] === "launch")
|
|
312
|
+
return "async";
|
|
313
|
+
return null;
|
|
314
|
+
}
|
|
315
|
+
if (chain.length !== 2)
|
|
316
|
+
return null;
|
|
317
|
+
const [namespace, method] = chain;
|
|
318
|
+
if (namespaces.current.has(namespace) &&
|
|
319
|
+
!isImportedNamespaceShadowed(call, namespace, sourceFile)) {
|
|
320
|
+
if (method === "run")
|
|
321
|
+
return "blocking";
|
|
322
|
+
if (method === "launch")
|
|
323
|
+
return "async";
|
|
324
|
+
}
|
|
325
|
+
if (namespaces.legacy.has(namespace) &&
|
|
326
|
+
method === "launch" &&
|
|
327
|
+
!isImportedNamespaceShadowed(call, namespace, sourceFile)) {
|
|
328
|
+
return "async";
|
|
329
|
+
}
|
|
330
|
+
return null;
|
|
331
|
+
}
|
|
332
|
+
function propertyName(name) {
|
|
333
|
+
if (ts.isIdentifier(name) || ts.isStringLiteral(name))
|
|
334
|
+
return name.text;
|
|
335
|
+
return null;
|
|
336
|
+
}
|
|
337
|
+
/** Mirrors object-literal overwrite order sufficiently for a direct target:
|
|
338
|
+
* an explicit `definition` after a spread wins; a later spread makes it
|
|
339
|
+
* dynamic again because it could overwrite the target. */
|
|
340
|
+
function directDefinitionTarget(call) {
|
|
341
|
+
const argument = call.arguments[0];
|
|
342
|
+
if (!argument)
|
|
343
|
+
return { kind: "dynamic" };
|
|
344
|
+
const unwrapped = unwrapExpression(argument);
|
|
345
|
+
if (!ts.isObjectLiteralExpression(unwrapped))
|
|
346
|
+
return { kind: "dynamic" };
|
|
347
|
+
let result = { kind: "dynamic" };
|
|
348
|
+
for (const property of unwrapped.properties) {
|
|
349
|
+
if (ts.isSpreadAssignment(property)) {
|
|
350
|
+
result = { kind: "dynamic" };
|
|
351
|
+
continue;
|
|
352
|
+
}
|
|
353
|
+
if (!property.name || propertyName(property.name) !== "definition") {
|
|
354
|
+
continue;
|
|
355
|
+
}
|
|
356
|
+
if (!ts.isPropertyAssignment(property)) {
|
|
357
|
+
result = { kind: "dynamic" };
|
|
358
|
+
continue;
|
|
359
|
+
}
|
|
360
|
+
const value = unwrapExpression(property.initializer);
|
|
361
|
+
result =
|
|
362
|
+
ts.isStringLiteral(value) || ts.isNoSubstitutionTemplateLiteral(value)
|
|
363
|
+
? { kind: "literal", slug: value.text }
|
|
364
|
+
: { kind: "dynamic" };
|
|
365
|
+
}
|
|
366
|
+
return result;
|
|
367
|
+
}
|
|
368
|
+
function relativeEvidence(root, file, sourceFile, position) {
|
|
369
|
+
const location = sourceFile.getLineAndCharacterOfPosition(position);
|
|
370
|
+
return {
|
|
371
|
+
file: path.relative(root, file).split(path.sep).join(path.posix.sep),
|
|
372
|
+
line: location.line + 1,
|
|
373
|
+
column: location.character + 1,
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
function scanAgentInvocationsInFile(root, file, content, blocks) {
|
|
377
|
+
const sourceFile = ts.createSourceFile(path.basename(file), content, ts.ScriptTarget.Latest, true, path.extname(file) === ".tsx" ? ts.ScriptKind.TSX : ts.ScriptKind.TS);
|
|
378
|
+
const namespaces = collectSupportedNamespaces(sourceFile);
|
|
379
|
+
const invocations = [];
|
|
380
|
+
const warnings = [];
|
|
381
|
+
const visit = (node) => {
|
|
382
|
+
if (ts.isCallExpression(node)) {
|
|
383
|
+
const mode = invocationMode(node, namespaces, sourceFile);
|
|
384
|
+
if (mode) {
|
|
385
|
+
const position = node.expression.getStart(sourceFile);
|
|
386
|
+
const evidence = relativeEvidence(root, file, sourceFile, position);
|
|
387
|
+
const target = directDefinitionTarget(node);
|
|
388
|
+
if (target.kind === "literal") {
|
|
389
|
+
invocations.push({
|
|
390
|
+
slug: target.slug,
|
|
391
|
+
mode,
|
|
392
|
+
fromStepId: attributeTo(blocks, position),
|
|
393
|
+
evidence,
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
else {
|
|
397
|
+
warnings.push({ code: "dynamic-target", mode, evidence });
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
ts.forEachChild(node, visit);
|
|
402
|
+
};
|
|
403
|
+
visit(sourceFile);
|
|
404
|
+
return { invocations, warnings };
|
|
405
|
+
}
|
|
406
|
+
function evidenceOrder(left, right) {
|
|
407
|
+
return (left.file.localeCompare(right.file) ||
|
|
408
|
+
left.line - right.line ||
|
|
409
|
+
left.column - right.column);
|
|
410
|
+
}
|
|
158
411
|
/**
|
|
159
412
|
* One pass over `root`'s sources returning both the cross-workflow launches and
|
|
160
413
|
* the Sapiom capability calls, each attributed to the `defineStep` block it
|
|
@@ -167,7 +420,8 @@ function attributeTo(blocks, index) {
|
|
|
167
420
|
* so the shared pass halves the I/O on the hot path.
|
|
168
421
|
*/
|
|
169
422
|
export async function scanWorkflowSources(root, knownStepIds) {
|
|
170
|
-
const
|
|
423
|
+
const invocations = [];
|
|
424
|
+
const invocationWarnings = [];
|
|
171
425
|
const capabilities = [];
|
|
172
426
|
for (const file of await listSourceFiles(root)) {
|
|
173
427
|
let content;
|
|
@@ -181,17 +435,36 @@ export async function scanWorkflowSources(root, knownStepIds) {
|
|
|
181
435
|
continue;
|
|
182
436
|
}
|
|
183
437
|
const blocks = stepBlockRanges(content, knownStepIds);
|
|
184
|
-
|
|
185
|
-
|
|
438
|
+
if (mayContainAgentInvocation(content)) {
|
|
439
|
+
const invocationScan = scanAgentInvocationsInFile(root, file, content, blocks);
|
|
440
|
+
invocations.push(...invocationScan.invocations);
|
|
441
|
+
invocationWarnings.push(...invocationScan.warnings);
|
|
186
442
|
}
|
|
187
443
|
for (const match of content.matchAll(CAPABILITY_CALL_PATTERN)) {
|
|
188
444
|
const capability = match[1].replace(/\s+/g, "");
|
|
189
445
|
if (NON_CAPABILITY_CALLS.has(capability))
|
|
190
446
|
continue;
|
|
191
|
-
capabilities.push({
|
|
447
|
+
capabilities.push({
|
|
448
|
+
capability,
|
|
449
|
+
fromStepId: attributeTo(blocks, match.index),
|
|
450
|
+
});
|
|
192
451
|
}
|
|
193
452
|
}
|
|
194
|
-
|
|
453
|
+
invocations.sort((left, right) => evidenceOrder(left.evidence, right.evidence));
|
|
454
|
+
invocationWarnings.sort((left, right) => evidenceOrder(left.evidence, right.evidence));
|
|
455
|
+
const launches = invocations
|
|
456
|
+
.filter((invocation) => invocation.mode === "async")
|
|
457
|
+
.map(({ slug, fromStepId }) => ({ slug, fromStepId }));
|
|
458
|
+
return { launches, invocations, invocationWarnings, capabilities };
|
|
459
|
+
}
|
|
460
|
+
/** Direct agent invocations plus deterministic warnings for supported calls
|
|
461
|
+
* whose target is not a direct literal. */
|
|
462
|
+
export async function detectAgentInvocations(root, knownStepIds) {
|
|
463
|
+
const scan = await scanWorkflowSources(root, knownStepIds);
|
|
464
|
+
return {
|
|
465
|
+
invocations: scan.invocations,
|
|
466
|
+
warnings: scan.invocationWarnings,
|
|
467
|
+
};
|
|
195
468
|
}
|
|
196
469
|
/** Just the launches from {@link scanWorkflowSources}. */
|
|
197
470
|
export async function detectWorkflowLaunches(root, knownStepIds) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas-interconnections.js","sourceRoot":"","sources":["../../src/core/canvas-interconnections.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"canvas-interconnections.js","sourceRoot":"","sources":["../../src/core/canvas-interconnections.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { CanvasGraph } from "./canvas-graph.js";
|
|
2
|
+
import type { CanvasEnrichment } from "./canvas-enrichment.js";
|
|
1
3
|
export interface RenderableSession {
|
|
2
4
|
cwd: string;
|
|
3
5
|
boundWorkflowPath: string | null;
|
|
@@ -69,6 +71,36 @@ export interface RenderCanvasOptions {
|
|
|
69
71
|
* extraction, no write (`mode: "empty"`).
|
|
70
72
|
*/
|
|
71
73
|
export declare function renderCanvasForSession(session: RenderableSession, workflows: readonly RenderableWorkflow[], options?: RenderCanvasOptions): Promise<CanvasRenderOutcome>;
|
|
74
|
+
/**
|
|
75
|
+
* Everything the deterministic render pipeline computes for ONE workflow,
|
|
76
|
+
* WITHOUT touching the filesystem's render file: the extracted graph, its
|
|
77
|
+
* derived enrichment, and the finished canvas document. Shared by the write
|
|
78
|
+
* path ({@link renderWorkflowRenderFile}) and the session-free workflow-keyed
|
|
79
|
+
* graph route (server/workflow-graph.ts), so a board read by agent path can
|
|
80
|
+
* never disagree with the one a bound session sees.
|
|
81
|
+
*/
|
|
82
|
+
export interface WorkflowCanvasDerivation {
|
|
83
|
+
/** "ok": extracted and rendered. "preparing": dependencies aren't installed
|
|
84
|
+
* yet, so extraction was skipped and the calm placeholder was built
|
|
85
|
+
* instead. "error": extraction ran and failed — the honest error panel. */
|
|
86
|
+
status: "ok" | "preparing" | "error";
|
|
87
|
+
graph: CanvasGraph | null;
|
|
88
|
+
enrichment: CanvasEnrichment | null;
|
|
89
|
+
/** The extraction failure reason ("error" only); null otherwise. */
|
|
90
|
+
reason: string | null;
|
|
91
|
+
/** True when the graph came from the extraction cache — no child process ran. */
|
|
92
|
+
cached: boolean;
|
|
93
|
+
/** The canvas document — byte-identical to what the render file would hold. */
|
|
94
|
+
document: string;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Extracts `workflow`'s graph and builds its canvas document. Pure with
|
|
98
|
+
* respect to the render file: nothing is written and no render path is
|
|
99
|
+
* consulted, so this is safe to call for a workflow no session is bound to.
|
|
100
|
+
* Never throws — extraction failure comes back as `status: "error"` with the
|
|
101
|
+
* reason, exactly as the write path renders it.
|
|
102
|
+
*/
|
|
103
|
+
export declare function deriveWorkflowCanvas(workflow: RenderableWorkflow, options?: RenderCanvasOptions): Promise<WorkflowCanvasDerivation>;
|
|
72
104
|
/**
|
|
73
105
|
* Renders ONE workflow to its render file under `cwd`, merging in the
|
|
74
106
|
* deterministic enrichment derived from the freshly extracted graph
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas-render.d.ts","sourceRoot":"","sources":["../../src/core/canvas-render.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"canvas-render.d.ts","sourceRoot":"","sources":["../../src/core/canvas-render.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAS/D,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAShE;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED,MAAM,WAAW,mBAAmB;IAClC;;8EAE0E;IAC1E,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yGAAyG;IACzG,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;iDAC6C;IAC7C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,8HAA8H;IAC9H,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gHAAgH;IAChH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;kEAG8D;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;;;;OAOG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC;;;;;;;OAOG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAqCD;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,SAAS,kBAAkB,EAAE,EACxC,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,mBAAmB,CAAC,CAM9B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,wBAAwB;IACvC;;gFAE4E;IAC5E,MAAM,EAAE,IAAI,GAAG,WAAW,GAAG,OAAO,CAAC;IACrC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,oEAAoE;IACpE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,iFAAiF;IACjF,MAAM,EAAE,OAAO,CAAC;IAChB,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,wBAAwB,CAAC,CAoCnC;AAED;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,kBAAkB,EACzB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,mBAAmB,CAAC,CA0B9B"}
|
|
@@ -84,66 +84,76 @@ export async function renderCanvasForSession(session, workflows, options = {}) {
|
|
|
84
84
|
return renderWorkflowRenderFile(session.cwd, bound, options);
|
|
85
85
|
}
|
|
86
86
|
/**
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
* file is per-workflow.
|
|
87
|
+
* Extracts `workflow`'s graph and builds its canvas document. Pure with
|
|
88
|
+
* respect to the render file: nothing is written and no render path is
|
|
89
|
+
* consulted, so this is safe to call for a workflow no session is bound to.
|
|
90
|
+
* Never throws — extraction failure comes back as `status: "error"` with the
|
|
91
|
+
* reason, exactly as the write path renders it.
|
|
93
92
|
*/
|
|
94
|
-
export async function
|
|
95
|
-
const renderPath = renderFileFor(cwd, bound.path);
|
|
93
|
+
export async function deriveWorkflowCanvas(workflow, options = {}) {
|
|
96
94
|
// A freshly scaffolded project — between `scaffold` and the coding agent's
|
|
97
95
|
// `npm install` — has no installed SDK, so extraction (an esbuild bundle of
|
|
98
96
|
// the project's own index.ts) is guaranteed to fail with "Could not resolve
|
|
99
97
|
// @sapiom/agent / zod/v4". That's not an error the user caused or can act on;
|
|
100
98
|
// it self-resolves when install finishes. So skip extraction entirely and
|
|
101
|
-
//
|
|
102
|
-
//
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
99
|
+
// build a calm "preparing" placeholder. A bundle failure WITH deps installed
|
|
100
|
+
// stays a genuine error (below).
|
|
101
|
+
if (!options.surfaceErrorOnMissingDeps && !(await agentDepsInstalled(workflow.path))) {
|
|
102
|
+
return {
|
|
103
|
+
status: "preparing",
|
|
104
|
+
graph: null,
|
|
105
|
+
enrichment: null,
|
|
106
|
+
reason: null,
|
|
107
|
+
cached: false,
|
|
108
|
+
document: renderCanvasDocument(buildPreparingPanelHtml(workflow.name)),
|
|
111
109
|
};
|
|
112
|
-
// Preserve semantics: an unprompted render must not replace an existing
|
|
113
|
-
// (possibly good) diagram just because deps went missing — but still flag
|
|
114
|
-
// depsMissing so the watcher re-renders when they return.
|
|
115
|
-
if (options.preserveExistingOnFailure && (await pathExists(renderPath))) {
|
|
116
|
-
outcome.preservedExisting = true;
|
|
117
|
-
return outcome;
|
|
118
|
-
}
|
|
119
|
-
await writeRenderFile(renderPath, buildPreparingPanelHtml(bound.name), outcome);
|
|
120
|
-
return outcome;
|
|
121
110
|
}
|
|
122
|
-
const { result, cached } = await extractWorkflowGraphCached(
|
|
123
|
-
const failed = !result.ok;
|
|
111
|
+
const { result, cached } = await extractWorkflowGraphCached(workflow.path);
|
|
124
112
|
// Enrichment only decorates a successful extraction — deriving annotations
|
|
125
113
|
// for an error panel whose steps we can't even show would be noise. Derived
|
|
126
114
|
// deterministically from the freshly extracted graph, so it's always in sync
|
|
127
115
|
// with the diagram and can never go stale.
|
|
128
116
|
const enrichment = result.ok ? deriveEnrichment(result.graph) : null;
|
|
129
|
-
const body = buildSingleBody(
|
|
117
|
+
const body = buildSingleBody(workflow, result.ok ? result.graph : null, result.ok ? null : result.reason, enrichment);
|
|
118
|
+
return {
|
|
119
|
+
status: result.ok ? "ok" : "error",
|
|
120
|
+
graph: result.ok ? result.graph : null,
|
|
121
|
+
enrichment,
|
|
122
|
+
reason: result.ok ? null : result.reason,
|
|
123
|
+
cached,
|
|
124
|
+
document: renderCanvasDocument(body),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Renders ONE workflow to its render file under `cwd`, merging in the
|
|
129
|
+
* deterministic enrichment derived from the freshly extracted graph
|
|
130
|
+
* (core/canvas-derive.ts). This is the write path shared by every render
|
|
131
|
+
* trigger — bind, session-create/boot, and the visualize/refresh macro — all
|
|
132
|
+
* via `renderCanvasForSession`; it targets a workflow directly and the render
|
|
133
|
+
* file is per-workflow.
|
|
134
|
+
*/
|
|
135
|
+
export async function renderWorkflowRenderFile(cwd, bound, options = {}) {
|
|
136
|
+
const renderPath = renderFileFor(cwd, bound.path);
|
|
137
|
+
const derived = await deriveWorkflowCanvas(bound, options);
|
|
130
138
|
const outcome = {
|
|
131
139
|
mode: "single",
|
|
132
140
|
workflowPath: bound.path,
|
|
133
141
|
renderPath,
|
|
134
|
-
extractionFailed:
|
|
135
|
-
|
|
136
|
-
|
|
142
|
+
extractionFailed: derived.status === "error" ? [bound.name] : [],
|
|
143
|
+
...(derived.status === "preparing"
|
|
144
|
+
? { depsMissing: true }
|
|
145
|
+
: { cachedExtraction: derived.cached }),
|
|
146
|
+
...(derived.enrichment ? { enrichmentApplied: true } : {}),
|
|
137
147
|
};
|
|
138
|
-
// An unprompted render that failed
|
|
139
|
-
//
|
|
140
|
-
//
|
|
141
|
-
//
|
|
142
|
-
if (options.preserveExistingOnFailure &&
|
|
148
|
+
// An unprompted render that failed must not destroy an existing (possibly
|
|
149
|
+
// good) diagram for this workflow — an agent mid-edit whose sources are
|
|
150
|
+
// transiently un-buildable, or deps that went missing. `depsMissing` is still
|
|
151
|
+
// flagged above so the server's install watcher re-renders when they return.
|
|
152
|
+
if (options.preserveExistingOnFailure && derived.status !== "ok" && (await pathExists(renderPath))) {
|
|
143
153
|
outcome.preservedExisting = true;
|
|
144
154
|
return outcome;
|
|
145
155
|
}
|
|
146
|
-
await writeRenderFile(renderPath,
|
|
156
|
+
await writeRenderFile(renderPath, derived.document, outcome);
|
|
147
157
|
return outcome;
|
|
148
158
|
}
|
|
149
159
|
/** True if `p` exists (any type). */
|
|
@@ -158,9 +168,8 @@ async function pathExists(p) {
|
|
|
158
168
|
* no-op now that any workflow source edit triggers a re-render). A write
|
|
159
169
|
* failure (e.g. an unwritable cwd) is captured on `outcome.writeError`;
|
|
160
170
|
* extraction success/failure is unaffected. */
|
|
161
|
-
async function writeRenderFile(renderPath,
|
|
171
|
+
async function writeRenderFile(renderPath, document, outcome) {
|
|
162
172
|
try {
|
|
163
|
-
const document = renderCanvasDocument(body);
|
|
164
173
|
const existing = await fs.readFile(renderPath, "utf8").catch(() => null);
|
|
165
174
|
if (existing !== document) {
|
|
166
175
|
await fs.mkdir(path.dirname(renderPath), { recursive: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas-render.js","sourceRoot":"","sources":["../../src/core/canvas-render.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"canvas-render.js","sourceRoot":"","sources":["../../src/core/canvas-render.ts"],"names":[],"mappings":"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"}
|