@sapiom/harness 0.1.5 → 0.2.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 +151 -0
- package/dist/cli/args.d.ts +16 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +80 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/bin.js +30 -66
- package/dist/cli/bin.js.map +1 -1
- package/dist/cli/consent.js +1 -1
- package/dist/cli/settings.d.ts.map +1 -1
- package/dist/cli/settings.js +33 -1
- package/dist/cli/settings.js.map +1 -1
- package/dist/core/adapters/adapter.d.ts +2 -2
- package/dist/core/adapters/claude-code.d.ts +60 -2
- package/dist/core/adapters/claude-code.d.ts.map +1 -1
- package/dist/core/adapters/claude-code.js +119 -32
- package/dist/core/adapters/claude-code.js.map +1 -1
- package/dist/core/adapters/codex.d.ts +21 -2
- package/dist/core/adapters/codex.d.ts.map +1 -1
- package/dist/core/adapters/codex.js +53 -2
- package/dist/core/adapters/codex.js.map +1 -1
- package/dist/core/adapters/detect.d.ts +9 -0
- package/dist/core/adapters/detect.d.ts.map +1 -1
- package/dist/core/adapters/detect.js +9 -0
- package/dist/core/adapters/detect.js.map +1 -1
- package/dist/core/api-key-provider.d.ts +79 -0
- package/dist/core/api-key-provider.d.ts.map +1 -0
- package/dist/core/api-key-provider.js +91 -0
- package/dist/core/api-key-provider.js.map +1 -0
- package/dist/core/canvas-body.d.ts +28 -28
- package/dist/core/canvas-body.d.ts.map +1 -1
- package/dist/core/canvas-body.js +117 -55
- package/dist/core/canvas-body.js.map +1 -1
- package/dist/core/canvas-derive.d.ts +43 -0
- package/dist/core/canvas-derive.d.ts.map +1 -0
- package/dist/core/canvas-derive.js +95 -0
- package/dist/core/canvas-derive.js.map +1 -0
- package/dist/core/canvas-enrichment.d.ts +52 -127
- package/dist/core/canvas-enrichment.d.ts.map +1 -1
- package/dist/core/canvas-enrichment.js +17 -178
- package/dist/core/canvas-enrichment.js.map +1 -1
- package/dist/core/canvas-graph.d.ts +40 -1
- package/dist/core/canvas-graph.d.ts.map +1 -1
- package/dist/core/canvas-graph.js +71 -9
- package/dist/core/canvas-graph.js.map +1 -1
- package/dist/core/canvas-interconnections.d.ts +26 -8
- package/dist/core/canvas-interconnections.d.ts.map +1 -1
- package/dist/core/canvas-interconnections.js +132 -24
- package/dist/core/canvas-interconnections.js.map +1 -1
- package/dist/core/canvas-manifest-check.d.ts.map +1 -1
- package/dist/core/canvas-manifest-check.js +15 -2
- package/dist/core/canvas-manifest-check.js.map +1 -1
- package/dist/core/canvas-render.d.ts +8 -15
- package/dist/core/canvas-render.d.ts.map +1 -1
- package/dist/core/canvas-render.js +29 -41
- package/dist/core/canvas-render.js.map +1 -1
- package/dist/core/canvas-run-state.d.ts +50 -5
- package/dist/core/canvas-run-state.d.ts.map +1 -1
- package/dist/core/canvas-run-state.js +176 -11
- package/dist/core/canvas-run-state.js.map +1 -1
- package/dist/core/canvas-svg.d.ts +9 -4
- package/dist/core/canvas-svg.d.ts.map +1 -1
- package/dist/core/canvas-svg.js +84 -13
- package/dist/core/canvas-svg.js.map +1 -1
- package/dist/core/canvas-template.d.ts +9 -10
- package/dist/core/canvas-template.d.ts.map +1 -1
- package/dist/core/canvas-template.js +57 -20
- package/dist/core/canvas-template.js.map +1 -1
- package/dist/core/canvas-watcher.d.ts +22 -1
- package/dist/core/canvas-watcher.d.ts.map +1 -1
- package/dist/core/canvas-watcher.js +111 -30
- package/dist/core/canvas-watcher.js.map +1 -1
- package/dist/core/collector/normalizer.d.ts +8 -0
- package/dist/core/collector/normalizer.d.ts.map +1 -1
- package/dist/core/collector/normalizer.js +8 -0
- package/dist/core/collector/normalizer.js.map +1 -1
- package/dist/core/collector/store.d.ts +75 -1
- package/dist/core/collector/store.d.ts.map +1 -1
- package/dist/core/collector/store.js +334 -2
- package/dist/core/collector/store.js.map +1 -1
- package/dist/core/definition-slug-resolver.d.ts +13 -0
- package/dist/core/definition-slug-resolver.d.ts.map +1 -1
- package/dist/core/definition-slug-resolver.js +29 -0
- package/dist/core/definition-slug-resolver.js.map +1 -1
- package/dist/core/errors.d.ts +10 -4
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +11 -5
- package/dist/core/errors.js.map +1 -1
- package/dist/core/example-seed.d.ts +8 -0
- package/dist/core/example-seed.d.ts.map +1 -1
- package/dist/core/example-seed.js +47 -10
- package/dist/core/example-seed.js.map +1 -1
- package/dist/core/inject/system-prompt.d.ts +8 -0
- package/dist/core/inject/system-prompt.d.ts.map +1 -1
- package/dist/core/inject/system-prompt.js +3 -1
- package/dist/core/inject/system-prompt.js.map +1 -1
- package/dist/core/macros.d.ts.map +1 -1
- package/dist/core/macros.js +5 -6
- package/dist/core/macros.js.map +1 -1
- package/dist/core/paths.d.ts +1 -0
- package/dist/core/paths.d.ts.map +1 -1
- package/dist/core/paths.js +1 -0
- package/dist/core/paths.js.map +1 -1
- package/dist/core/record-archive.d.ts +187 -0
- package/dist/core/record-archive.d.ts.map +1 -0
- package/dist/core/record-archive.js +465 -0
- package/dist/core/record-archive.js.map +1 -0
- package/dist/core/rehydration.d.ts +72 -0
- package/dist/core/rehydration.d.ts.map +1 -0
- package/dist/core/rehydration.js +72 -0
- package/dist/core/rehydration.js.map +1 -0
- package/dist/core/render-local-run.d.ts +82 -0
- package/dist/core/render-local-run.d.ts.map +1 -0
- package/dist/core/render-local-run.js +105 -0
- package/dist/core/render-local-run.js.map +1 -0
- package/dist/core/render-log-slice.d.ts +30 -0
- package/dist/core/render-log-slice.d.ts.map +1 -0
- package/dist/core/render-log-slice.js +49 -0
- package/dist/core/render-log-slice.js.map +1 -0
- package/dist/core/render-run-state.d.ts.map +1 -1
- package/dist/core/render-run-state.js +30 -49
- package/dist/core/render-run-state.js.map +1 -1
- package/dist/core/resume-brief.d.ts +130 -0
- package/dist/core/resume-brief.d.ts.map +1 -0
- package/dist/core/resume-brief.js +404 -0
- package/dist/core/resume-brief.js.map +1 -0
- package/dist/core/rolling-summary.d.ts +130 -0
- package/dist/core/rolling-summary.d.ts.map +1 -0
- package/dist/core/rolling-summary.js +227 -0
- package/dist/core/rolling-summary.js.map +1 -0
- package/dist/core/run-local-bootstrap.d.ts +93 -0
- package/dist/core/run-local-bootstrap.d.ts.map +1 -0
- package/dist/core/run-local-bootstrap.js +155 -0
- package/dist/core/run-local-bootstrap.js.map +1 -0
- package/dist/core/run-state.d.ts +16 -1
- package/dist/core/run-state.d.ts.map +1 -1
- package/dist/core/run-state.js +75 -25
- package/dist/core/run-state.js.map +1 -1
- package/dist/core/session-manager.d.ts +11 -3
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +56 -7
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-record.d.ts +165 -0
- package/dist/core/session-record.d.ts.map +1 -0
- package/dist/core/session-record.js +470 -0
- package/dist/core/session-record.js.map +1 -0
- package/dist/core/spawn-target.d.ts +12 -0
- package/dist/core/spawn-target.d.ts.map +1 -0
- package/dist/core/spawn-target.js +187 -0
- package/dist/core/spawn-target.js.map +1 -0
- package/dist/core/stub-feedback.d.ts +52 -0
- package/dist/core/stub-feedback.d.ts.map +1 -0
- package/dist/core/stub-feedback.js +33 -0
- package/dist/core/stub-feedback.js.map +1 -0
- package/dist/core/task-manager.d.ts.map +1 -1
- package/dist/core/task-manager.js +9 -1
- package/dist/core/task-manager.js.map +1 -1
- package/dist/core/template-catalog.d.ts +48 -0
- package/dist/core/template-catalog.d.ts.map +1 -0
- package/dist/core/template-catalog.js +338 -0
- package/dist/core/template-catalog.js.map +1 -0
- package/dist/core/workflow-registry.d.ts.map +1 -1
- package/dist/core/workflow-registry.js +2 -2
- package/dist/core/workflow-registry.js.map +1 -1
- package/dist/core/workspace-watcher.d.ts.map +1 -1
- package/dist/core/workspace-watcher.js +4 -3
- package/dist/core/workspace-watcher.js.map +1 -1
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -1
- package/dist/profiles/default.d.ts.map +1 -1
- package/dist/profiles/default.js +9 -14
- package/dist/profiles/default.js.map +1 -1
- package/dist/server/actions.d.ts +139 -0
- package/dist/server/actions.d.ts.map +1 -0
- package/dist/server/actions.js +430 -0
- package/dist/server/actions.js.map +1 -0
- package/dist/server/auth-routes.d.ts +92 -0
- package/dist/server/auth-routes.d.ts.map +1 -0
- package/dist/server/auth-routes.js +151 -0
- package/dist/server/auth-routes.js.map +1 -0
- package/dist/server/canvas.d.ts.map +1 -1
- package/dist/server/canvas.js +7 -7
- package/dist/server/canvas.js.map +1 -1
- package/dist/server/fs.d.ts.map +1 -1
- package/dist/server/fs.js +17 -1
- package/dist/server/fs.js.map +1 -1
- package/dist/server/index.d.ts +12 -3
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +0 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/ingest.d.ts +11 -0
- package/dist/server/ingest.d.ts.map +1 -1
- package/dist/server/ingest.js +1 -0
- package/dist/server/ingest.js.map +1 -1
- package/dist/server/macros.d.ts +4 -6
- package/dist/server/macros.d.ts.map +1 -1
- package/dist/server/macros.js.map +1 -1
- package/dist/server/rest.d.ts +18 -6
- package/dist/server/rest.d.ts.map +1 -1
- package/dist/server/rest.js +185 -50
- package/dist/server/rest.js.map +1 -1
- package/dist/server/runs.d.ts +16 -15
- package/dist/server/runs.d.ts.map +1 -1
- package/dist/server/runs.js +15 -80
- package/dist/server/runs.js.map +1 -1
- package/dist/server/static.d.ts +15 -1
- package/dist/server/static.d.ts.map +1 -1
- package/dist/server/static.js +54 -4
- package/dist/server/static.js.map +1 -1
- package/dist/server/templates.d.ts +24 -0
- package/dist/server/templates.d.ts.map +1 -0
- package/dist/server/templates.js +54 -0
- package/dist/server/templates.js.map +1 -0
- package/dist/shared/types.d.ts +558 -66
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js +19 -11
- package/dist/shared/types.js.map +1 -1
- package/dist/web/assets/index-DC65cskq.js +446 -0
- package/dist/web/assets/index-xtD-3FFa.css +32 -0
- package/dist/web/canvas/sess-boot/index.html +305 -0
- package/dist/web/index.html +4 -9
- package/package.json +8 -4
- package/dist/core/canvas-enrich.d.ts +0 -115
- package/dist/core/canvas-enrich.d.ts.map +0 -1
- package/dist/core/canvas-enrich.js +0 -186
- package/dist/core/canvas-enrich.js.map +0 -1
- package/dist/core/run-spend.d.ts +0 -55
- package/dist/core/run-spend.d.ts.map +0 -1
- package/dist/core/run-spend.js +0 -109
- package/dist/core/run-spend.js.map +0 -1
- package/dist/core/run-transactions.d.ts +0 -60
- package/dist/core/run-transactions.d.ts.map +0 -1
- package/dist/core/run-transactions.js +0 -129
- package/dist/core/run-transactions.js.map +0 -1
- package/dist/profiles/canvas-guidelines.d.ts +0 -20
- package/dist/profiles/canvas-guidelines.d.ts.map +0 -1
- package/dist/profiles/canvas-guidelines.js +0 -48
- package/dist/profiles/canvas-guidelines.js.map +0 -1
- package/dist/server/skills.d.ts +0 -51
- package/dist/server/skills.d.ts.map +0 -1
- package/dist/server/skills.js +0 -312
- package/dist/server/skills.js.map +0 -1
- package/dist/web/assets/index-DM84J83Y.js +0 -234
- package/dist/web/assets/index-DemtWW4L.css +0 -32
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas-graph.js","sourceRoot":"","sources":["../../src/core/canvas-graph.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,
|
|
1
|
+
{"version":3,"file":"canvas-graph.js","sourceRoot":"","sources":["../../src/core/canvas-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,17 +8,35 @@ export declare function listSourceFiles(root: string): Promise<string[]>;
|
|
|
8
8
|
export interface DetectedLaunch {
|
|
9
9
|
/** The `definition` slug the launch call referenced. */
|
|
10
10
|
slug: string;
|
|
11
|
-
/** The step (by declared name) the call was attributed to — the
|
|
12
|
-
*
|
|
13
|
-
*
|
|
11
|
+
/** The step (by declared name) the call was attributed to — the step whose
|
|
12
|
+
* `defineStep` block it sits in — or null when it sits outside any step
|
|
13
|
+
* (e.g. a launch in a shared helper). */
|
|
14
14
|
fromStepId: string | null;
|
|
15
15
|
}
|
|
16
|
+
export interface DetectedCapability {
|
|
17
|
+
/** The dotted capability id (e.g. "web.search", "email.messages.send"). */
|
|
18
|
+
capability: string;
|
|
19
|
+
/** The step the call was attributed to, or null (a shared helper). */
|
|
20
|
+
fromStepId: string | null;
|
|
21
|
+
}
|
|
22
|
+
export interface WorkflowSourceScan {
|
|
23
|
+
launches: DetectedLaunch[];
|
|
24
|
+
capabilities: DetectedCapability[];
|
|
25
|
+
}
|
|
16
26
|
/**
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* (`knownStepIds` = the workflow's real step names, so an unrelated
|
|
20
|
-
* property can never be mistaken for a step). Never throws: unreadable
|
|
21
|
-
* files/directories simply contribute
|
|
27
|
+
* One pass over `root`'s sources returning both the cross-workflow launches and
|
|
28
|
+
* the Sapiom capability calls, each attributed to the `defineStep` block it
|
|
29
|
+
* sits in (`knownStepIds` = the workflow's real step names, so an unrelated
|
|
30
|
+
* `name:` property can never be mistaken for a step). Never throws: unreadable
|
|
31
|
+
* files/directories simply contribute nothing.
|
|
32
|
+
*
|
|
33
|
+
* A single walk + read + block computation per file: the callers used to scan
|
|
34
|
+
* the tree twice (once per detector), and auto-render now fires on every save,
|
|
35
|
+
* so the shared pass halves the I/O on the hot path.
|
|
22
36
|
*/
|
|
37
|
+
export declare function scanWorkflowSources(root: string, knownStepIds: ReadonlySet<string>): Promise<WorkflowSourceScan>;
|
|
38
|
+
/** Just the launches from {@link scanWorkflowSources}. */
|
|
23
39
|
export declare function detectWorkflowLaunches(root: string, knownStepIds: ReadonlySet<string>): Promise<DetectedLaunch[]>;
|
|
40
|
+
/** Just the capabilities from {@link scanWorkflowSources}. */
|
|
41
|
+
export declare function detectStepCapabilities(root: string, knownStepIds: ReadonlySet<string>): Promise<DetectedCapability[]>;
|
|
24
42
|
//# sourceMappingURL=canvas-interconnections.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas-interconnections.d.ts","sourceRoot":"","sources":["../../src/core/canvas-interconnections.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"canvas-interconnections.d.ts","sourceRoot":"","sources":["../../src/core/canvas-interconnections.ts"],"names":[],"mappings":"AAwDA;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAsBrE;AAsFD,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb;;8CAE0C;IAC1C,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,2EAA2E;IAC3E,UAAU,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,YAAY,EAAE,kBAAkB,EAAE,CAAC;CACpC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAyB7B;AAED,0DAA0D;AAC1D,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,GAChC,OAAO,CAAC,cAAc,EAAE,CAAC,CAE3B;AAED,8DAA8D;AAC9D,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,GAChC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAE/B"}
|
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Heuristic
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
2
|
+
* Heuristic scan of a workflow project's TypeScript sources for two things the
|
|
3
|
+
* canvas surfaces, in a single pass:
|
|
4
|
+
*
|
|
5
|
+
* - cross-workflow launches — `orchestrations.launch({ definition: "<slug>" })`
|
|
6
|
+
* (old SDK) and `agents.launch({ definition: ... })` (current SDK), rendered
|
|
7
|
+
* as dashed "launched workflow" nodes; and
|
|
8
|
+
* - Sapiom capabilities — `ctx.sapiom.<ns>.<method>(...)` call sites, rendered
|
|
9
|
+
* as capability chips on the step (the thing Sapiom bills for).
|
|
10
|
+
*
|
|
11
|
+
* Each call is attributed to the step whose `defineStep({ ... })` block it
|
|
12
|
+
* literally sits inside — a brace-balanced extent, not merely the nearest
|
|
13
|
+
* preceding `name:`. A call in a shared helper (or anywhere outside a step
|
|
14
|
+
* block) is left unattributed (`fromStepId: null`) rather than mis-billed to
|
|
15
|
+
* the last step in the file — for a capability chip that would read as a false
|
|
16
|
+
* claim about what a step calls.
|
|
9
17
|
*
|
|
10
18
|
* This is deliberately a grep, not a type-aware analysis — a step can compute
|
|
11
|
-
* its `definition
|
|
12
|
-
* negatives are fine here
|
|
13
|
-
* truth.
|
|
19
|
+
* its `definition`/call dynamically, in which case it's simply not detected;
|
|
20
|
+
* false negatives are fine here.
|
|
14
21
|
*/
|
|
15
22
|
import * as fs from "node:fs/promises";
|
|
16
23
|
import * as path from "node:path";
|
|
@@ -23,10 +30,21 @@ const MAX_FILE_BYTES = 512 * 1024;
|
|
|
23
30
|
// other fields before `definition` in the object literal (bounded lookahead
|
|
24
31
|
// so an unrelated huge object literal can't make this pathological).
|
|
25
32
|
const LAUNCH_CALL_PATTERN = /(?:orchestrations|agents)\s*\.\s*launch\s*\(\s*\{[\s\S]{0,400}?definition\s*:\s*(['"`])([^'"`]+)\1/g;
|
|
33
|
+
// Matches `sapiom.<ns>.<method>(` chains — e.g. `ctx.sapiom.web.search(`,
|
|
34
|
+
// `sapiom.email.messages.send(`. Captures the dotted chain AFTER `sapiom.`
|
|
35
|
+
// (the capability id: "web.search", "email.messages.send"), tolerating
|
|
36
|
+
// whitespace around the dots. The negative lookbehind avoids matching an
|
|
37
|
+
// identifier that merely ends in "sapiom".
|
|
38
|
+
const CAPABILITY_CALL_PATTERN = /(?<![\w$])sapiom\s*\.\s*([a-z][\w$]*(?:\s*\.\s*[a-z][\w$]*)+)\s*\(/gi;
|
|
39
|
+
// Launch calls are surfaced as dashed launched-workflow nodes, not capabilities.
|
|
40
|
+
const NON_CAPABILITY_CALLS = new Set(["agents.launch", "orchestrations.launch"]);
|
|
26
41
|
// A `name: "..."` property declaration — the step-name key `defineStep`
|
|
27
42
|
// blocks always open with. The lookbehind rejects longer identifiers ending
|
|
28
43
|
// in "name" (fromName, vendorName) without consuming the preceding char.
|
|
29
44
|
const STEP_NAME_PATTERN = /(?<![\w$.])name\s*:\s*(['"`])([^'"`]+)\1/g;
|
|
45
|
+
// A `defineStep(` call opener (not `myDefineStep(`). Its brace-balanced extent
|
|
46
|
+
// is what bounds a step's attribution below.
|
|
47
|
+
const DEFINE_STEP_PATTERN = /(?<![\w$.])defineStep\s*\(/g;
|
|
30
48
|
/**
|
|
31
49
|
* Lists the workflow's own `.ts`/`.tsx` sources (skipping node_modules and
|
|
32
50
|
* friends), bounded to MAX_FILES_PER_WORKFLOW. Shared with the extraction
|
|
@@ -61,15 +79,96 @@ export async function listSourceFiles(root) {
|
|
|
61
79
|
await walk(root);
|
|
62
80
|
return files;
|
|
63
81
|
}
|
|
82
|
+
// --- attribution: which step's defineStep(...) block a call sits in ---------
|
|
83
|
+
/** From the opening quote at `open`, the index of the matching close quote (or
|
|
84
|
+
* the last index). Escapes are honored; a template literal is treated as one
|
|
85
|
+
* opaque span (its balanced `${…}` parens never leak into the paren count). */
|
|
86
|
+
function skipString(content, open) {
|
|
87
|
+
const quote = content[open];
|
|
88
|
+
for (let i = open + 1; i < content.length; i++) {
|
|
89
|
+
if (content[i] === "\\") {
|
|
90
|
+
i++;
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (content[i] === quote)
|
|
94
|
+
return i;
|
|
95
|
+
}
|
|
96
|
+
return content.length - 1;
|
|
97
|
+
}
|
|
98
|
+
/** From the `(` at `open`, the index of its matching `)` (or end of file),
|
|
99
|
+
* skipping string and comment content so parens inside them can't miscount. */
|
|
100
|
+
function matchingParen(content, open) {
|
|
101
|
+
let depth = 0;
|
|
102
|
+
for (let i = open; i < content.length; i++) {
|
|
103
|
+
const c = content[i];
|
|
104
|
+
if (c === "'" || c === '"' || c === "`") {
|
|
105
|
+
i = skipString(content, i);
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
if (c === "/" && content[i + 1] === "/") {
|
|
109
|
+
const nl = content.indexOf("\n", i);
|
|
110
|
+
if (nl === -1)
|
|
111
|
+
return content.length;
|
|
112
|
+
i = nl;
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
if (c === "/" && content[i + 1] === "*") {
|
|
116
|
+
const close = content.indexOf("*/", i + 2);
|
|
117
|
+
i = close === -1 ? content.length : close + 1;
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
if (c === "(")
|
|
121
|
+
depth++;
|
|
122
|
+
else if (c === ")") {
|
|
123
|
+
depth--;
|
|
124
|
+
if (depth === 0)
|
|
125
|
+
return i;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return content.length;
|
|
129
|
+
}
|
|
130
|
+
/** The brace-balanced extent of each `defineStep(...)` call whose declared
|
|
131
|
+
* `name` is a known step — so a call can be attributed to the step it sits in,
|
|
132
|
+
* not the nearest preceding `name:` (which mis-binds trailing helpers). */
|
|
133
|
+
function stepBlockRanges(content, knownStepIds) {
|
|
134
|
+
const blocks = [];
|
|
135
|
+
for (const match of content.matchAll(DEFINE_STEP_PATTERN)) {
|
|
136
|
+
const open = match.index + match[0].length - 1; // the `(` of defineStep(
|
|
137
|
+
const end = matchingParen(content, open);
|
|
138
|
+
let stepId = null;
|
|
139
|
+
for (const nameMatch of content.slice(open, end).matchAll(STEP_NAME_PATTERN)) {
|
|
140
|
+
if (knownStepIds.has(nameMatch[2])) {
|
|
141
|
+
stepId = nameMatch[2];
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (stepId)
|
|
146
|
+
blocks.push({ start: open, end, stepId });
|
|
147
|
+
}
|
|
148
|
+
return blocks;
|
|
149
|
+
}
|
|
150
|
+
/** The step whose block contains `index`, or null (top-level / shared helper). */
|
|
151
|
+
function attributeTo(blocks, index) {
|
|
152
|
+
for (const block of blocks) {
|
|
153
|
+
if (index > block.start && index < block.end)
|
|
154
|
+
return block.stepId;
|
|
155
|
+
}
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
64
158
|
/**
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
* (`knownStepIds` = the workflow's real step names, so an unrelated
|
|
68
|
-
* property can never be mistaken for a step). Never throws: unreadable
|
|
69
|
-
* files/directories simply contribute
|
|
159
|
+
* One pass over `root`'s sources returning both the cross-workflow launches and
|
|
160
|
+
* the Sapiom capability calls, each attributed to the `defineStep` block it
|
|
161
|
+
* sits in (`knownStepIds` = the workflow's real step names, so an unrelated
|
|
162
|
+
* `name:` property can never be mistaken for a step). Never throws: unreadable
|
|
163
|
+
* files/directories simply contribute nothing.
|
|
164
|
+
*
|
|
165
|
+
* A single walk + read + block computation per file: the callers used to scan
|
|
166
|
+
* the tree twice (once per detector), and auto-render now fires on every save,
|
|
167
|
+
* so the shared pass halves the I/O on the hot path.
|
|
70
168
|
*/
|
|
71
|
-
export async function
|
|
169
|
+
export async function scanWorkflowSources(root, knownStepIds) {
|
|
72
170
|
const launches = [];
|
|
171
|
+
const capabilities = [];
|
|
73
172
|
for (const file of await listSourceFiles(root)) {
|
|
74
173
|
let content;
|
|
75
174
|
try {
|
|
@@ -81,16 +180,25 @@ export async function detectWorkflowLaunches(root, knownStepIds) {
|
|
|
81
180
|
catch {
|
|
82
181
|
continue;
|
|
83
182
|
}
|
|
84
|
-
const
|
|
85
|
-
for (const match of content.matchAll(STEP_NAME_PATTERN)) {
|
|
86
|
-
if (knownStepIds.has(match[2]))
|
|
87
|
-
stepDeclarations.push({ index: match.index, stepId: match[2] });
|
|
88
|
-
}
|
|
183
|
+
const blocks = stepBlockRanges(content, knownStepIds);
|
|
89
184
|
for (const match of content.matchAll(LAUNCH_CALL_PATTERN)) {
|
|
90
|
-
|
|
91
|
-
|
|
185
|
+
launches.push({ slug: match[2], fromStepId: attributeTo(blocks, match.index) });
|
|
186
|
+
}
|
|
187
|
+
for (const match of content.matchAll(CAPABILITY_CALL_PATTERN)) {
|
|
188
|
+
const capability = match[1].replace(/\s+/g, "");
|
|
189
|
+
if (NON_CAPABILITY_CALLS.has(capability))
|
|
190
|
+
continue;
|
|
191
|
+
capabilities.push({ capability, fromStepId: attributeTo(blocks, match.index) });
|
|
92
192
|
}
|
|
93
193
|
}
|
|
94
|
-
return launches;
|
|
194
|
+
return { launches, capabilities };
|
|
195
|
+
}
|
|
196
|
+
/** Just the launches from {@link scanWorkflowSources}. */
|
|
197
|
+
export async function detectWorkflowLaunches(root, knownStepIds) {
|
|
198
|
+
return (await scanWorkflowSources(root, knownStepIds)).launches;
|
|
199
|
+
}
|
|
200
|
+
/** Just the capabilities from {@link scanWorkflowSources}. */
|
|
201
|
+
export async function detectStepCapabilities(root, knownStepIds) {
|
|
202
|
+
return (await scanWorkflowSources(root, knownStepIds)).capabilities;
|
|
95
203
|
}
|
|
96
204
|
//# sourceMappingURL=canvas-interconnections.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas-interconnections.js","sourceRoot":"","sources":["../../src/core/canvas-interconnections.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"canvas-interconnections.js","sourceRoot":"","sources":["../../src/core/canvas-interconnections.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;AACrF,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AACnD,MAAM,sBAAsB,GAAG,GAAG,CAAC;AACnC,MAAM,cAAc,GAAG,GAAG,GAAG,IAAI,CAAC;AAElC,8EAA8E;AAC9E,0EAA0E;AAC1E,4EAA4E;AAC5E,qEAAqE;AACrE,MAAM,mBAAmB,GACvB,qGAAqG,CAAC;AAExG,0EAA0E;AAC1E,2EAA2E;AAC3E,uEAAuE;AACvE,yEAAyE;AACzE,2CAA2C;AAC3C,MAAM,uBAAuB,GAC3B,sEAAsE,CAAC;AAEzE,iFAAiF;AACjF,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,eAAe,EAAE,uBAAuB,CAAC,CAAC,CAAC;AAEjF,wEAAwE;AACxE,4EAA4E;AAC5E,yEAAyE;AACzE,MAAM,iBAAiB,GAAG,2CAA2C,CAAC;AAEtE,+EAA+E;AAC/E,6CAA6C;AAC7C,MAAM,mBAAmB,GAAG,6BAA6B,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,UAAU,IAAI,CAAC,GAAW;QAC7B,IAAI,KAAK,CAAC,MAAM,IAAI,sBAAsB;YAAE,OAAO;QACnD,IAAI,OAAmC,CAAC;QACxC,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,MAAM,IAAI,sBAAsB;gBAAE,OAAO;YACnD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAC7C,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACzC,CAAC;iBAAM,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBAC3D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+EAA+E;AAE/E;;gFAEgF;AAChF,SAAS,UAAU,CAAC,OAAe,EAAE,IAAY;IAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACxB,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK;YAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED;gFACgF;AAChF,SAAS,aAAa,CAAC,OAAe,EAAE,IAAY;IAClD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACxC,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC3B,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACxC,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACpC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAAE,OAAO,OAAO,CAAC,MAAM,CAAC;YACrC,CAAC,GAAG,EAAE,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3C,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YAC9C,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,GAAG;YAAE,KAAK,EAAE,CAAC;aAClB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACnB,KAAK,EAAE,CAAC;YACR,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC;AACxB,CAAC;AAWD;;4EAE4E;AAC5E,SAAS,eAAe,CAAC,OAAe,EAAE,YAAiC;IACzE,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,yBAAyB;QACzE,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,MAAM,GAAkB,IAAI,CAAC;QACjC,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC7E,IAAI,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;gBACpC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC;gBACvB,MAAM;YACR,CAAC;QACH,CAAC;QACD,IAAI,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,kFAAkF;AAClF,SAAS,WAAW,CAAC,MAA4B,EAAE,KAAa;IAC9D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC;IACpE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAuBD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAY,EACZ,YAAiC;IAEjC,MAAM,QAAQ,GAAqB,EAAE,CAAC;IACtC,MAAM,YAAY,GAAyB,EAAE,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,MAAM,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,IAAI,CAAC,IAAI,GAAG,cAAc;gBAAE,SAAS;YACzC,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAEtD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;YAC9D,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACjD,IAAI,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC;gBAAE,SAAS;YACnD,YAAY,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AACpC,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAAY,EACZ,YAAiC;IAEjC,OAAO,CAAC,MAAM,mBAAmB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC;AAClE,CAAC;AAED,8DAA8D;AAC9D,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAAY,EACZ,YAAiC;IAEjC,OAAO,CAAC,MAAM,mBAAmB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;AACtE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas-manifest-check.d.ts","sourceRoot":"","sources":["../../src/core/canvas-manifest-check.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"canvas-manifest-check.d.ts","sourceRoot":"","sources":["../../src/core/canvas-manifest-check.ts"],"names":[],"mappings":"AAoEA,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,IAAI,CAAC;IACT,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,mBAAmB,GAAG,oBAAoB,GAAG,oBAAoB,CAAC;AAE9E;;2DAE2D;AAC3D,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAsChF"}
|
|
@@ -36,7 +36,12 @@ const MAX_BUFFER_BYTES = 10 * 1024 * 1024;
|
|
|
36
36
|
// This module lives at either src/core/ (tsx dev, vitest) or dist/core/
|
|
37
37
|
// (built) — both two directories below the package root.
|
|
38
38
|
function packageRoot() {
|
|
39
|
-
|
|
39
|
+
const root = join(dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
40
|
+
// When embedded in Electron, an asarUnpack'd module still reports its
|
|
41
|
+
// app.asar (virtual) path via import.meta.url. Using that as a child
|
|
42
|
+
// process `cwd` fails with `spawn ENOTDIR` (app.asar is a file). Point at the
|
|
43
|
+
// unpacked twin — the desktop app must asarUnpack this package.
|
|
44
|
+
return root.replace(/([\\/])app\.asar([\\/])/, "$1app.asar.unpacked$2");
|
|
40
45
|
}
|
|
41
46
|
const RUNNER_SOURCE = `
|
|
42
47
|
import { check, AgentOperationError } from "@sapiom/agent-core";
|
|
@@ -64,7 +69,15 @@ export function runManifestCheck(sourceDir) {
|
|
|
64
69
|
return new Promise((resolve) => {
|
|
65
70
|
execFile(process.execPath, ["--input-type=module", "-e", RUNNER_SOURCE], {
|
|
66
71
|
cwd: packageRoot(),
|
|
67
|
-
env: {
|
|
72
|
+
env: {
|
|
73
|
+
...process.env,
|
|
74
|
+
SAPIOM_CANVAS_CHECK_SOURCE_DIR: sourceDir,
|
|
75
|
+
// When embedded in Electron, `process.execPath` is the Electron
|
|
76
|
+
// binary, which would try to launch `-e <src>` as an app. This flag
|
|
77
|
+
// makes it behave as plain Node. No-op under the CLI (real node), and
|
|
78
|
+
// only set when actually running inside Electron.
|
|
79
|
+
...(process.versions.electron ? { ELECTRON_RUN_AS_NODE: "1" } : {}),
|
|
80
|
+
},
|
|
68
81
|
timeout: CHECK_TIMEOUT_MS,
|
|
69
82
|
maxBuffer: MAX_BUFFER_BYTES,
|
|
70
83
|
}, (err, stdout, stderr) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas-manifest-check.js","sourceRoot":"","sources":["../../src/core/canvas-manifest-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;sCAGsC;AACtC,MAAM,gBAAgB,GAAG,KAAM,CAAC;AAChC,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAE1C,wEAAwE;AACxE,yDAAyD;AACzD,SAAS,WAAW;IAClB,
|
|
1
|
+
{"version":3,"file":"canvas-manifest-check.js","sourceRoot":"","sources":["../../src/core/canvas-manifest-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;sCAGsC;AACtC,MAAM,gBAAgB,GAAG,KAAM,CAAC;AAChC,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAE1C,wEAAwE;AACxE,yDAAyD;AACzD,SAAS,WAAW;IAClB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACvE,sEAAsE;IACtE,qEAAqE;IACrE,8EAA8E;IAC9E,gEAAgE;IAChE,OAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,uBAAuB,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;CAkBrB,CAAC;AAeF;;2DAE2D;AAC3D,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IAChD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,QAAQ,CACN,OAAO,CAAC,QAAQ,EAChB,CAAC,qBAAqB,EAAE,IAAI,EAAE,aAAa,CAAC,EAC5C;YACE,GAAG,EAAE,WAAW,EAAE;YAClB,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;gBACd,8BAA8B,EAAE,SAAS;gBACzC,gEAAgE;gBAChE,oEAAoE;gBACpE,sEAAsE;gBACtE,kDAAkD;gBAClD,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpE;YACD,OAAO,EAAE,gBAAgB;YACzB,SAAS,EAAE,gBAAgB;SAC5B,EACD,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACtB,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,QAAQ,GAAI,GAAoD,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC;gBAC1G,OAAO,CAAC;oBACN,EAAE,EAAE,KAAK;oBACT,MAAM,EAAE,QAAQ;wBACd,CAAC,CAAC,8BAA8B,gBAAgB,GAAG,IAAI,IAAI;wBAC3D,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC;iBACnC,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAwB,CAAC,CAAC;YACrD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,6CAA6C,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YACtG,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -16,9 +16,6 @@ export interface RenderableWorkflow {
|
|
|
16
16
|
export declare function slugForWorkflowPath(workflowPath: string): string;
|
|
17
17
|
/** Absolute path of `workflowPath`'s render file under `cwd`'s canvas dir. */
|
|
18
18
|
export declare function renderFileFor(cwd: string, workflowPath: string): string;
|
|
19
|
-
/** Absolute path of `workflowPath`'s enrichment cache file under `cwd`'s
|
|
20
|
-
* canvas dir — same slug scheme as the render file. */
|
|
21
|
-
export declare function enrichmentCacheFileFor(cwd: string, workflowPath: string): string;
|
|
22
19
|
export interface CanvasRenderOutcome {
|
|
23
20
|
/** "single": a bound workflow was rendered to its render file. "empty":
|
|
24
21
|
* the session is unbound (or bound to an unknown path) — nothing was
|
|
@@ -31,12 +28,9 @@ export interface CanvasRenderOutcome {
|
|
|
31
28
|
extractionFailed: string[];
|
|
32
29
|
/** True when the graph came from the extraction cache — no child process ran. */
|
|
33
30
|
cachedExtraction?: boolean;
|
|
34
|
-
/** True when
|
|
35
|
-
* successful extraction only). */
|
|
31
|
+
/** True when the deterministic enrichment was merged into the render (mode
|
|
32
|
+
* "single", successful extraction only). */
|
|
36
33
|
enrichmentApplied?: boolean;
|
|
37
|
-
/** True when the merged enrichment's fingerprint no longer matches the
|
|
38
|
-
* current sources — rendered with the "stale" chip. */
|
|
39
|
-
enrichmentStale?: boolean;
|
|
40
34
|
/** Set only when writing the file itself failed (e.g. an unwritable cwd) — extraction success/failure above is unaffected. */
|
|
41
35
|
writeError?: string;
|
|
42
36
|
/** True when `preserveExistingOnFailure` kept the existing render instead of writing an error panel over it. */
|
|
@@ -61,13 +55,12 @@ export interface RenderCanvasOptions {
|
|
|
61
55
|
*/
|
|
62
56
|
export declare function renderCanvasForSession(session: RenderableSession, workflows: readonly RenderableWorkflow[], options?: RenderCanvasOptions): Promise<CanvasRenderOutcome>;
|
|
63
57
|
/**
|
|
64
|
-
* Renders ONE workflow to its render file under `cwd`, merging in
|
|
65
|
-
* enrichment
|
|
66
|
-
*
|
|
67
|
-
* bind
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* the task ran, and the render file is per-workflow anyway.
|
|
58
|
+
* Renders ONE workflow to its render file under `cwd`, merging in the
|
|
59
|
+
* deterministic enrichment derived from the freshly extracted graph
|
|
60
|
+
* (core/canvas-derive.ts). This is the write path shared by every render
|
|
61
|
+
* trigger — bind, session-create/boot, and the visualize/refresh macro — all
|
|
62
|
+
* via `renderCanvasForSession`; it targets a workflow directly and the render
|
|
63
|
+
* file is per-workflow.
|
|
71
64
|
*/
|
|
72
65
|
export declare function renderWorkflowRenderFile(cwd: string, bound: RenderableWorkflow, options?: RenderCanvasOptions): Promise<CanvasRenderOutcome>;
|
|
73
66
|
//# sourceMappingURL=canvas-render.d.ts.map
|
|
@@ -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":"AAsCA,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;CAC7B;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;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;;;;OAOG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAsBD;;;;;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,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,kBAAkB,EACzB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,mBAAmB,CAAC,CAmD9B"}
|
|
@@ -24,12 +24,11 @@
|
|
|
24
24
|
import { createHash } from "node:crypto";
|
|
25
25
|
import * as fs from "node:fs/promises";
|
|
26
26
|
import * as path from "node:path";
|
|
27
|
-
import {
|
|
27
|
+
import { CANVAS_RENDERS_DIR } from "../shared/types.js";
|
|
28
28
|
import { renderCanvasDocument } from "./canvas-template.js";
|
|
29
29
|
import { extractWorkflowGraphCached } from "./canvas-cache.js";
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
32
|
-
import { assembleCanvasBody, buildErrorPanelHtml, buildLegendHtml, buildWorkflowPanelHtml, } from "./canvas-body.js";
|
|
30
|
+
import { deriveEnrichment } from "./canvas-derive.js";
|
|
31
|
+
import { assembleCanvasBody, buildErrorPanelHtml, buildWorkflowPanelHtml, } from "./canvas-body.js";
|
|
33
32
|
/**
|
|
34
33
|
* Stable, filesystem-safe render-file name for a workflow: its directory
|
|
35
34
|
* basename (readable in `ls`) plus a short path hash (two same-named
|
|
@@ -49,31 +48,17 @@ export function slugForWorkflowPath(workflowPath) {
|
|
|
49
48
|
export function renderFileFor(cwd, workflowPath) {
|
|
50
49
|
return path.join(cwd, CANVAS_RENDERS_DIR, `${slugForWorkflowPath(workflowPath)}.html`);
|
|
51
50
|
}
|
|
52
|
-
/** Absolute path of `workflowPath`'s enrichment cache file under `cwd`'s
|
|
53
|
-
* canvas dir — same slug scheme as the render file. */
|
|
54
|
-
export function enrichmentCacheFileFor(cwd, workflowPath) {
|
|
55
|
-
return path.join(cwd, CANVAS_CACHE_DIR, `${slugForWorkflowPath(workflowPath)}.json`);
|
|
56
|
-
}
|
|
57
51
|
function badgesFor(workflow) {
|
|
58
52
|
return [workflow.definitionId != null ? "deployed" : "local only"];
|
|
59
53
|
}
|
|
60
|
-
function buildSingleBody(workflow, graph, reason,
|
|
54
|
+
function buildSingleBody(workflow, graph, reason, enrichment) {
|
|
61
55
|
if (!graph) {
|
|
62
56
|
return assembleCanvasBody({
|
|
63
57
|
panels: [buildErrorPanelHtml(workflow.name, reason ?? "unknown extraction failure")],
|
|
64
|
-
legend: "",
|
|
65
|
-
note: "Static preview — this workflow has a build error; regenerate once it's fixed.",
|
|
66
58
|
});
|
|
67
59
|
}
|
|
68
|
-
const used = usedKinds(graph);
|
|
69
60
|
return assembleCanvasBody({
|
|
70
|
-
panels: [buildWorkflowPanelHtml(graph, { title: workflow.name, badges: badgesFor(workflow) },
|
|
71
|
-
legend: buildLegendHtml(used.nodeKinds, used.edgeKinds),
|
|
72
|
-
note: "Static preview — re-renders automatically when the workflow changes.",
|
|
73
|
-
...(panelEnrichment?.enrichment.notes ? { notes: panelEnrichment.enrichment.notes } : {}),
|
|
74
|
-
...(panelEnrichment?.enrichment.crossWorkflow
|
|
75
|
-
? { crossWorkflow: panelEnrichment.enrichment.crossWorkflow }
|
|
76
|
-
: {}),
|
|
61
|
+
panels: [buildWorkflowPanelHtml(graph, { title: workflow.name, badges: badgesFor(workflow) }, enrichment)],
|
|
77
62
|
});
|
|
78
63
|
}
|
|
79
64
|
/**
|
|
@@ -90,27 +75,22 @@ export async function renderCanvasForSession(session, workflows, options = {}) {
|
|
|
90
75
|
return renderWorkflowRenderFile(session.cwd, bound, options);
|
|
91
76
|
}
|
|
92
77
|
/**
|
|
93
|
-
* Renders ONE workflow to its render file under `cwd`, merging in
|
|
94
|
-
* enrichment
|
|
95
|
-
*
|
|
96
|
-
* bind
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
* the task ran, and the render file is per-workflow anyway.
|
|
78
|
+
* Renders ONE workflow to its render file under `cwd`, merging in the
|
|
79
|
+
* deterministic enrichment derived from the freshly extracted graph
|
|
80
|
+
* (core/canvas-derive.ts). This is the write path shared by every render
|
|
81
|
+
* trigger — bind, session-create/boot, and the visualize/refresh macro — all
|
|
82
|
+
* via `renderCanvasForSession`; it targets a workflow directly and the render
|
|
83
|
+
* file is per-workflow.
|
|
100
84
|
*/
|
|
101
85
|
export async function renderWorkflowRenderFile(cwd, bound, options = {}) {
|
|
102
|
-
const { result, cached
|
|
86
|
+
const { result, cached } = await extractWorkflowGraphCached(bound.path);
|
|
103
87
|
const failed = !result.ok;
|
|
104
|
-
//
|
|
105
|
-
// error panel
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
panelEnrichment = { enrichment: entry.enrichment, stale: entry.sourceFingerprint !== fingerprint };
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
const body = buildSingleBody(bound, result.ok ? result.graph : null, result.ok ? null : result.reason, panelEnrichment);
|
|
88
|
+
// Enrichment only decorates a successful extraction — deriving annotations
|
|
89
|
+
// for an error panel whose steps we can't even show would be noise. Derived
|
|
90
|
+
// deterministically from the freshly extracted graph, so it's always in sync
|
|
91
|
+
// with the diagram and can never go stale.
|
|
92
|
+
const enrichment = result.ok ? deriveEnrichment(result.graph) : null;
|
|
93
|
+
const body = buildSingleBody(bound, result.ok ? result.graph : null, result.ok ? null : result.reason, enrichment);
|
|
114
94
|
const renderPath = renderFileFor(cwd, bound.path);
|
|
115
95
|
const outcome = {
|
|
116
96
|
mode: "single",
|
|
@@ -118,7 +98,7 @@ export async function renderWorkflowRenderFile(cwd, bound, options = {}) {
|
|
|
118
98
|
renderPath,
|
|
119
99
|
extractionFailed: failed ? [bound.name] : [],
|
|
120
100
|
cachedExtraction: cached,
|
|
121
|
-
...(
|
|
101
|
+
...(enrichment ? { enrichmentApplied: true } : {}),
|
|
122
102
|
};
|
|
123
103
|
// An unprompted render that failed to extract must not destroy an existing
|
|
124
104
|
// (possibly good) diagram for this workflow — e.g. a project that merely
|
|
@@ -134,8 +114,16 @@ export async function renderWorkflowRenderFile(cwd, bound, options = {}) {
|
|
|
134
114
|
}
|
|
135
115
|
}
|
|
136
116
|
try {
|
|
137
|
-
|
|
138
|
-
await fs.
|
|
117
|
+
const document = renderCanvasDocument(body);
|
|
118
|
+
const existing = await fs.readFile(renderPath, "utf8").catch(() => null);
|
|
119
|
+
// Skip the write when nothing changed: an identical rewrite would still
|
|
120
|
+
// bump the render file's mtime and make the canvas watcher fire a needless
|
|
121
|
+
// iframe reload. This matters now that any workflow source edit triggers a
|
|
122
|
+
// re-render — a save that doesn't change the diagram is a true no-op.
|
|
123
|
+
if (existing !== document) {
|
|
124
|
+
await fs.mkdir(path.dirname(renderPath), { recursive: true });
|
|
125
|
+
await fs.writeFile(renderPath, document, "utf8");
|
|
126
|
+
}
|
|
139
127
|
}
|
|
140
128
|
catch (err) {
|
|
141
129
|
outcome.writeError = err instanceof Error ? err.message : String(err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas-render.js","sourceRoot":"","sources":["../../src/core/canvas-render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"canvas-render.js","sourceRoot":"","sources":["../../src/core/canvas-render.ts"],"names":[],"mappings":"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"}
|
|
@@ -79,11 +79,15 @@ export declare function bootCanvasRunState(): void;
|
|
|
79
79
|
/**
|
|
80
80
|
* Wires the reverse click channel: iframe → parent.
|
|
81
81
|
*
|
|
82
|
-
* Adds
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
82
|
+
* Adds a delegated `click` listener on `document` AND a `message` listener for
|
|
83
|
+
* the harness gesture layer's `sapiom-canvas:pick` / `sapiom-canvas:hover`.
|
|
84
|
+
* The gesture layer overlays the iframe (for pan / zoom) and swallows raw
|
|
85
|
+
* clicks, so the direct listener alone never fires in the harness; the layer
|
|
86
|
+
* instead forwards the click/hover point, which we hit-test with
|
|
87
|
+
* `elementFromPoint`. Either path resolves the `.canvas-node[data-step-name]`
|
|
88
|
+
* under the point and posts `{ type: "sapiom:node-click", stepName }` to the
|
|
89
|
+
* parent (hover answers `{ type: "sapiom-canvas:hit", id }` for the cursor).
|
|
90
|
+
* The parent maps the step name to the current RunView to open the inspector.
|
|
87
91
|
*
|
|
88
92
|
* Uses a delegated listener (one listener on document) rather than per-node
|
|
89
93
|
* listeners so it works even when the SVG is replaced (e.g. after a
|
|
@@ -92,4 +96,45 @@ export declare function bootCanvasRunState(): void;
|
|
|
92
96
|
* Stringified into the iframe template by `canvas-template.ts`.
|
|
93
97
|
*/
|
|
94
98
|
export declare function bootCanvasNodeClicks(): void;
|
|
99
|
+
/**
|
|
100
|
+
* Wires the view (pan/zoom) channel and announces the graph's natural size.
|
|
101
|
+
*
|
|
102
|
+
* The sandboxed iframe element itself NEVER transforms — that keeps the gesture
|
|
103
|
+
* layer's forwarded click/hover points in this frame's coordinate space (see
|
|
104
|
+
* bootCanvasNodeClicks). Instead the harness gesture layer captures wheel/drag,
|
|
105
|
+
* tracks a `{ zoom, x, y }` view, and posts `{ type: "sapiom-canvas:view" }`;
|
|
106
|
+
* this applies it as a CSS transform on `#canvas-root`. Without this handler the
|
|
107
|
+
* view messages are dropped and the canvas can neither zoom nor pan.
|
|
108
|
+
*
|
|
109
|
+
* On load it posts `{ type: "sapiom-canvas:size", width, height, ... }` — the
|
|
110
|
+
* graph's natural px (canvas-svg.ts pins the `<svg>` to explicit width/height) —
|
|
111
|
+
* which is the parent's fit-to-view input. `#canvas-root` and the `<svg>` are
|
|
112
|
+
* looked up lazily because this runs from `<head>`, before `<body>` is parsed.
|
|
113
|
+
*
|
|
114
|
+
* Stringified into the iframe template by `canvas-template.ts`.
|
|
115
|
+
*/
|
|
116
|
+
export declare function bootCanvasView(): void;
|
|
117
|
+
/**
|
|
118
|
+
* Posts the workflow's step graph to the parent so the Steps tab / inspector
|
|
119
|
+
* can project it (`{ type: "sapiom-canvas:graph", graph }`).
|
|
120
|
+
*
|
|
121
|
+
* The graph is embedded by `canvas-body.ts` as a `<script type="application/json"
|
|
122
|
+
* id="sapiom-graph">` data block (NOT executed — it's read as text here). Without
|
|
123
|
+
* this the board (SVG) still shows, but the Steps tab has no graph and reads
|
|
124
|
+
* "No steps yet" even though the diagram is visible. Deferred to DOM-ready
|
|
125
|
+
* because this boots from `<head>`, before `<body>` (and the data block) parses.
|
|
126
|
+
*
|
|
127
|
+
* Stringified into the iframe template by `canvas-template.ts`.
|
|
128
|
+
*/
|
|
129
|
+
export declare function bootCanvasGraph(): void;
|
|
130
|
+
/**
|
|
131
|
+
* Posts the workflow-level overview (`{ description, stats, notes }`) so the
|
|
132
|
+
* Canvas tab's bottom panel can show it — the deterministic equivalent of the
|
|
133
|
+
* demo doc's overview. Embedded by `canvas-body.ts` as a `<script
|
|
134
|
+
* type="application/json" id="sapiom-overview">` data block (read as text, same
|
|
135
|
+
* pattern as the graph). A missing block posts nothing and the parent keeps its
|
|
136
|
+
* empty state; a malformed one is swallowed rather than thrown. Stringified into
|
|
137
|
+
* the template by `canvas-template.ts`.
|
|
138
|
+
*/
|
|
139
|
+
export declare function bootCanvasOverview(): void;
|
|
95
140
|
//# sourceMappingURL=canvas-run-state.d.ts.map
|