@sapiom/harness 0.1.4 → 0.1.6

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.
Files changed (98) hide show
  1. package/CHANGELOG.md +74 -0
  2. package/dist/cli/bin.js +24 -7
  3. package/dist/cli/bin.js.map +1 -1
  4. package/dist/cli/consent.js +1 -1
  5. package/dist/core/adapters/adapter.d.ts +2 -2
  6. package/dist/core/api-key-provider.d.ts +79 -0
  7. package/dist/core/api-key-provider.d.ts.map +1 -0
  8. package/dist/core/api-key-provider.js +91 -0
  9. package/dist/core/api-key-provider.js.map +1 -0
  10. package/dist/core/canvas-run-state.d.ts +99 -0
  11. package/dist/core/canvas-run-state.d.ts.map +1 -0
  12. package/dist/core/canvas-run-state.js +191 -0
  13. package/dist/core/canvas-run-state.js.map +1 -0
  14. package/dist/core/canvas-svg.d.ts.map +1 -1
  15. package/dist/core/canvas-svg.js +28 -8
  16. package/dist/core/canvas-svg.js.map +1 -1
  17. package/dist/core/canvas-template.d.ts +4 -3
  18. package/dist/core/canvas-template.d.ts.map +1 -1
  19. package/dist/core/canvas-template.js +75 -3
  20. package/dist/core/canvas-template.js.map +1 -1
  21. package/dist/core/definition-slug-resolver.d.ts +46 -0
  22. package/dist/core/definition-slug-resolver.d.ts.map +1 -0
  23. package/dist/core/definition-slug-resolver.js +110 -0
  24. package/dist/core/definition-slug-resolver.js.map +1 -0
  25. package/dist/core/execution-detector.d.ts +59 -0
  26. package/dist/core/execution-detector.d.ts.map +1 -0
  27. package/dist/core/execution-detector.js +110 -0
  28. package/dist/core/execution-detector.js.map +1 -0
  29. package/dist/core/inject/mcp-config.d.ts.map +1 -1
  30. package/dist/core/inject/mcp-config.js +9 -1
  31. package/dist/core/inject/mcp-config.js.map +1 -1
  32. package/dist/core/render-local-run.d.ts +82 -0
  33. package/dist/core/render-local-run.d.ts.map +1 -0
  34. package/dist/core/render-local-run.js +105 -0
  35. package/dist/core/render-local-run.js.map +1 -0
  36. package/dist/core/render-log-slice.d.ts +30 -0
  37. package/dist/core/render-log-slice.d.ts.map +1 -0
  38. package/dist/core/render-log-slice.js +49 -0
  39. package/dist/core/render-log-slice.js.map +1 -0
  40. package/dist/core/render-run-state.d.ts +9 -0
  41. package/dist/core/render-run-state.d.ts.map +1 -0
  42. package/dist/core/render-run-state.js +120 -0
  43. package/dist/core/render-run-state.js.map +1 -0
  44. package/dist/core/run-local-bootstrap.d.ts +93 -0
  45. package/dist/core/run-local-bootstrap.d.ts.map +1 -0
  46. package/dist/core/run-local-bootstrap.js +155 -0
  47. package/dist/core/run-local-bootstrap.js.map +1 -0
  48. package/dist/core/run-state.d.ts +60 -0
  49. package/dist/core/run-state.d.ts.map +1 -0
  50. package/dist/core/run-state.js +122 -0
  51. package/dist/core/run-state.js.map +1 -0
  52. package/dist/core/stub-feedback.d.ts +52 -0
  53. package/dist/core/stub-feedback.d.ts.map +1 -0
  54. package/dist/core/stub-feedback.js +33 -0
  55. package/dist/core/stub-feedback.js.map +1 -0
  56. package/dist/core/workflow-registry.d.ts +12 -1
  57. package/dist/core/workflow-registry.d.ts.map +1 -1
  58. package/dist/core/workflow-registry.js +2 -0
  59. package/dist/core/workflow-registry.js.map +1 -1
  60. package/dist/server/actions.d.ts +139 -0
  61. package/dist/server/actions.d.ts.map +1 -0
  62. package/dist/server/actions.js +430 -0
  63. package/dist/server/actions.js.map +1 -0
  64. package/dist/server/auth-routes.d.ts +92 -0
  65. package/dist/server/auth-routes.d.ts.map +1 -0
  66. package/dist/server/auth-routes.js +151 -0
  67. package/dist/server/auth-routes.js.map +1 -0
  68. package/dist/server/index.d.ts.map +1 -1
  69. package/dist/server/index.js +0 -0
  70. package/dist/server/index.js.map +1 -1
  71. package/dist/server/rest.d.ts +5 -0
  72. package/dist/server/rest.d.ts.map +1 -1
  73. package/dist/server/rest.js +36 -12
  74. package/dist/server/rest.js.map +1 -1
  75. package/dist/server/runs.d.ts +34 -0
  76. package/dist/server/runs.d.ts.map +1 -0
  77. package/dist/server/runs.js +59 -0
  78. package/dist/server/runs.js.map +1 -0
  79. package/dist/server/static.d.ts +15 -1
  80. package/dist/server/static.d.ts.map +1 -1
  81. package/dist/server/static.js +54 -4
  82. package/dist/server/static.js.map +1 -1
  83. package/dist/shared/types.d.ts +136 -2
  84. package/dist/shared/types.d.ts.map +1 -1
  85. package/dist/shared/types.js.map +1 -1
  86. package/dist/web/assets/index-DCtyI4VW.css +32 -0
  87. package/dist/web/assets/index-WSw5RvYR.js +445 -0
  88. package/dist/web/canvas/sess-boot/index.html +305 -0
  89. package/dist/web/index.html +4 -9
  90. package/dist/web/welcome-hero-dark.png +0 -0
  91. package/dist/web/welcome-hero-light.png +0 -0
  92. package/package.json +6 -3
  93. package/dist/server/skills.d.ts +0 -51
  94. package/dist/server/skills.d.ts.map +0 -1
  95. package/dist/server/skills.js +0 -312
  96. package/dist/server/skills.js.map +0 -1
  97. package/dist/web/assets/index-BhKGSTTT.js +0 -214
  98. package/dist/web/assets/index-DRTrwTku.css +0 -32
@@ -0,0 +1,191 @@
1
+ /// <reference lib="dom" />
2
+ /**
3
+ * Canvas run-state: live step lighting for the sandboxed iframe, plus the
4
+ * reverse click channel (iframe → parent).
5
+ *
6
+ * HOW IT WORKS — the stringify-into-iframe pattern
7
+ * ─────────────────────────────────────────────────
8
+ * The canvas iframe is served with `sandbox="allow-scripts"` which makes it
9
+ * an opaque origin. The parent page cannot reach its DOM via any API — the
10
+ * ONLY communication channel is `window.postMessage`.
11
+ *
12
+ * To apply live run state to the SVG nodes, we need code that runs INSIDE the
13
+ * iframe's document. We cannot bundle a separate script for it (no fetch
14
+ * inside a sandboxed iframe, no src="" script). Instead, `canvas-template.ts`
15
+ * stringifies the functions below with `.toString()` and injects them
16
+ * directly into the `<script>` block that `renderCanvasDocument` emits.
17
+ *
18
+ * REVERSE CHANNEL (iframe → parent)
19
+ * ───────────────────────────────────
20
+ * `bootCanvasNodeClicks` adds a single delegated click listener on
21
+ * `document`. When a click lands inside a `.canvas-node[data-step-name]`
22
+ * element, it posts `{ type: "sapiom:node-click", stepName }` to the parent
23
+ * via `window.parent.postMessage`. The parent listens for this and opens the
24
+ * step-detail panel.
25
+ *
26
+ * CONSTRAINTS on these functions
27
+ * ────────────────────────────────
28
+ * • No TypeScript-only syntax inside the function bodies (they are stringified
29
+ * as-is and executed in a plain-JS browser context with no transpiler).
30
+ * • No imports or module-level references (same reason).
31
+ * • All functions must be top-level `function` declarations (not arrow
32
+ * functions, not const lambdas) so they are referenceable by name after
33
+ * stringification.
34
+ * • `runStateNodeClass` is the one pure piece (no DOM); it is also exported and
35
+ * unit-tested in `canvas-run-state.test.ts`. The other functions are DOM-only
36
+ * and not unit-testable in a Node/Vitest environment.
37
+ */
38
+ /**
39
+ * Pure: map a step status to its canvas node CSS state class.
40
+ *
41
+ * Unit-tested. Safe to call from Node and from the browser.
42
+ */
43
+ export function runStateNodeClass(status) {
44
+ if (status === "running")
45
+ return "is-running";
46
+ if (status === "passed")
47
+ return "is-passed";
48
+ if (status === "failed")
49
+ return "is-failed";
50
+ return "is-pending";
51
+ }
52
+ /**
53
+ * DOM: apply a run-state message to a canvas document.
54
+ *
55
+ * For each step, finds the matching `[data-step-name]` node (falling back to
56
+ * `[data-step-id]`), strips the four is-* state classes, and applies the one
57
+ * matching the step's current status. Also updates the first `.canvas-badge`
58
+ * inside `.canvas-title-row`: while the run is active it shows "running" or
59
+ * "testing" (with the `canvas-badge--active` styling class); on completion it
60
+ * restores the original text from `data-idle-label`.
61
+ *
62
+ * Browser-only — not unit-tested (no jsdom in the harness test env).
63
+ * Stringified into the iframe template by `canvas-template.ts`.
64
+ */
65
+ export function applyRunStateToCanvas(doc, msg) {
66
+ const stateClasses = ["is-running", "is-passed", "is-failed", "is-pending"];
67
+ for (let i = 0; i < msg.steps.length; i++) {
68
+ const step = msg.steps[i];
69
+ // Match by step name (the node's data-step-name), falling back to the
70
+ // step id. Wrapped in try/catch: a step name with a quote/bracket would
71
+ // make an invalid selector throw, which must not abort the whole loop.
72
+ let node = null;
73
+ try {
74
+ node =
75
+ doc.querySelector('[data-step-name="' + step.name + '"]') ||
76
+ (step.id
77
+ ? doc.querySelector('[data-step-id="' + step.id + '"]')
78
+ : null);
79
+ }
80
+ catch {
81
+ node = null;
82
+ }
83
+ if (!node)
84
+ continue;
85
+ for (let j = 0; j < stateClasses.length; j++) {
86
+ node.classList.remove(stateClasses[j]);
87
+ }
88
+ node.classList.add(runStateNodeClass(step.status));
89
+ if (step.latencyMs != null) {
90
+ node.setAttribute("data-latency", String(step.latencyMs));
91
+ }
92
+ }
93
+ const titleRow = doc.querySelector(".canvas-title-row");
94
+ if (!titleRow)
95
+ return;
96
+ const badge = titleRow.querySelector(".canvas-badge");
97
+ if (!badge)
98
+ return;
99
+ if (msg.status === "running") {
100
+ if (!badge.getAttribute("data-idle-label")) {
101
+ badge.setAttribute("data-idle-label", badge.textContent || "");
102
+ }
103
+ badge.textContent = msg.target === "local" ? "testing" : "running";
104
+ badge.classList.add("canvas-badge--active");
105
+ }
106
+ else {
107
+ const idleLabel = badge.getAttribute("data-idle-label");
108
+ if (idleLabel != null) {
109
+ badge.textContent = idleLabel;
110
+ badge.removeAttribute("data-idle-label");
111
+ }
112
+ badge.classList.remove("canvas-badge--active");
113
+ }
114
+ }
115
+ /**
116
+ * Wires the postMessage listener.
117
+ *
118
+ * Called once at the bottom of the injected `<script>` block. Listens for
119
+ * `{ type: "sapiom:run-state", steps, status, target }` messages from the
120
+ * parent page. The type guard is the only security boundary needed: because
121
+ * the iframe is opaque-origin, no other page can impersonate the parent, and
122
+ * the parent posts to `"*"` (required — we cannot know the opaque origin).
123
+ *
124
+ * Stringified into the iframe template by `canvas-template.ts`.
125
+ */
126
+ export function bootCanvasRunState() {
127
+ window.addEventListener("message", function (e) {
128
+ const d = e && e.data;
129
+ if (!d || d.type !== "sapiom:run-state")
130
+ return;
131
+ applyRunStateToCanvas(document, d);
132
+ });
133
+ }
134
+ /**
135
+ * Wires the reverse click channel: iframe → parent.
136
+ *
137
+ * Adds a delegated `click` listener on `document` AND a `message` listener for
138
+ * the harness gesture layer's `sapiom-canvas:pick` / `sapiom-canvas:hover`.
139
+ * The gesture layer overlays the iframe (for pan / zoom) and swallows raw
140
+ * clicks, so the direct listener alone never fires in the harness; the layer
141
+ * instead forwards the click/hover point, which we hit-test with
142
+ * `elementFromPoint`. Either path resolves the `.canvas-node[data-step-name]`
143
+ * under the point and posts `{ type: "sapiom:node-click", stepName }` to the
144
+ * parent (hover answers `{ type: "sapiom-canvas:hit", id }` for the cursor).
145
+ * The parent maps the step name to the current RunView to open the inspector.
146
+ *
147
+ * Uses a delegated listener (one listener on document) rather than per-node
148
+ * listeners so it works even when the SVG is replaced (e.g. after a
149
+ * canvas.reload), without needing to re-wire.
150
+ *
151
+ * Stringified into the iframe template by `canvas-template.ts`.
152
+ */
153
+ export function bootCanvasNodeClicks() {
154
+ // Resolve the step name of the `.canvas-node[data-step-name]` at or above an
155
+ // element (null when the point/target is not on a node).
156
+ function stepNameAt(target) {
157
+ const node = target && target.closest ? target.closest(".canvas-node[data-step-name]") : null;
158
+ return node ? node.getAttribute("data-step-name") : null;
159
+ }
160
+ function emitNodeClick(target) {
161
+ const stepName = stepNameAt(target);
162
+ if (stepName) {
163
+ window.parent.postMessage({ type: "sapiom:node-click", stepName: stepName }, "*");
164
+ }
165
+ }
166
+ // Direct clicks on the board — the path when nothing overlays the iframe.
167
+ document.addEventListener("click", function (e) {
168
+ if (e && e.target)
169
+ emitNodeClick(/** @type {Element} */ e.target);
170
+ });
171
+ // The harness renders a gesture layer OVER this iframe (for pan / zoom), so
172
+ // raw clicks never reach this document. That layer forwards a click as
173
+ // `{ type: "sapiom-canvas:pick", x, y }` and hovers as
174
+ // `{ type: "sapiom-canvas:hover", x, y }` in this frame's coordinate space —
175
+ // the iframe never transforms, so a frame-local point IS a viewport point.
176
+ // Hit-test with elementFromPoint so a node still selects on click, and answer
177
+ // hovers with `{ type: "sapiom-canvas:hit", id }` so the layer shows a
178
+ // pointer cursor over nodes (and keeps a node's selection on click).
179
+ window.addEventListener("message", function (e) {
180
+ const d = e && e.data;
181
+ if (!d)
182
+ return;
183
+ if (d.type === "sapiom-canvas:pick") {
184
+ emitNodeClick(document.elementFromPoint(d.x, d.y));
185
+ }
186
+ else if (d.type === "sapiom-canvas:hover") {
187
+ window.parent.postMessage({ type: "sapiom-canvas:hit", id: stepNameAt(document.elementFromPoint(d.x, d.y)) }, "*");
188
+ }
189
+ });
190
+ }
191
+ //# sourceMappingURL=canvas-run-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas-run-state.js","sourceRoot":"","sources":["../../src/core/canvas-run-state.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"canvas-svg.d.ts","sourceRoot":"","sources":["../../src/core/canvas-svg.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC7G,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAElF,eAAO,MAAM,MAAM,MAAM,CAAC;AAC1B,eAAO,MAAM,MAAM,KAAK,CAAC;AAOzB,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;4DAG4D;AAC5D,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,EAAE,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAqC7G;AAED;;;8DAG8D;AAC9D,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,iBAAiB,CAAC,WAAW,CAAC,GAAG,WAAW,CAyBvG;AAkFD;;;;;yEAKyE;AACzE,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,gBAAgB,GAAG,IAAI,GAAG,MAAM,CA4E/F;AAED,wEAAwE;AACxE,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG;IAAE,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IAAC,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,CAAA;CAAE,CAKhH"}
1
+ {"version":3,"file":"canvas-svg.d.ts","sourceRoot":"","sources":["../../src/core/canvas-svg.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,WAAW,EACX,UAAU,EACV,cAAc,EACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,wBAAwB,CAAC;AAEhC,eAAO,MAAM,MAAM,MAAM,CAAC;AAC1B,eAAO,MAAM,MAAM,KAAK,CAAC;AAOzB,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;4DAG4D;AAC5D,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,KAAK,EAAE,SAAS,UAAU,EAAE,GAC3B,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAsCrB;AAED;;;8DAG8D;AAC9D,wBAAgB,WAAW,CACzB,KAAK,EAAE,WAAW,EAClB,SAAS,CAAC,EAAE,iBAAiB,CAAC,WAAW,CAAC,GACzC,WAAW,CAiCb;AAiGD;;;;;yEAKyE;AACzE,wBAAgB,cAAc,CAC5B,KAAK,EAAE,WAAW,EAClB,UAAU,CAAC,EAAE,gBAAgB,GAAG,IAAI,GACnC,MAAM,CA4FR;AAED,wEAAwE;AACxE,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG;IAC7C,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IAC/B,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CAChC,CAKA"}
@@ -74,7 +74,10 @@ export function layoutGraph(graph, laneOrder) {
74
74
  const rowWidth = idsInLayer.length * NODE_W + (idsInLayer.length - 1) * COL_GAP;
75
75
  const startX = (width - rowWidth) / 2;
76
76
  idsInLayer.forEach((id, i) => {
77
- pos[id] = { x: startX + i * (NODE_W + COL_GAP), y: MARGIN + l * (NODE_H + LAYER_GAP) };
77
+ pos[id] = {
78
+ x: startX + i * (NODE_W + COL_GAP),
79
+ y: MARGIN + l * (NODE_H + LAYER_GAP),
80
+ };
78
81
  });
79
82
  }
80
83
  const height = MARGIN * 2 + (layers.length - 1) * (NODE_H + LAYER_GAP) + NODE_H;
@@ -103,7 +106,11 @@ function applyLaneOrder(byLayer, graph, laneOrder) {
103
106
  }
104
107
  }
105
108
  function esc(s) {
106
- return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
109
+ return s
110
+ .replace(/&/g, "&amp;")
111
+ .replace(/</g, "&lt;")
112
+ .replace(/>/g, "&gt;")
113
+ .replace(/"/g, "&quot;");
107
114
  }
108
115
  function edgeColorClass(nodesById, edge) {
109
116
  const target = nodesById.get(edge.to);
@@ -140,7 +147,9 @@ function groupBandMarkup(groups, graph, layout) {
140
147
  .map((group) => {
141
148
  if (!group.nodeIds.every((id) => nodeIds.has(id)))
142
149
  return "";
143
- const positions = group.nodeIds.map((id) => layout.pos[id]).filter(Boolean);
150
+ const positions = group.nodeIds
151
+ .map((id) => layout.pos[id])
152
+ .filter(Boolean);
144
153
  if (positions.length === 0)
145
154
  return "";
146
155
  const minX = Math.min(...positions.map((p) => p.x)) - GROUP_PAD;
@@ -175,13 +184,22 @@ export function renderGraphSvg(graph, enrichment) {
175
184
  const y2 = to.y;
176
185
  // Cross (signal/handoff) and launch edges are always dashed-neutral,
177
186
  // never colored by their destination.
178
- const dashedClass = edge.kind === "cross" ? "canvas-edge--cross" : edge.kind === "launch" ? "canvas-edge--launch" : null;
187
+ const dashedClass = edge.kind === "cross"
188
+ ? "canvas-edge--cross"
189
+ : edge.kind === "launch"
190
+ ? "canvas-edge--launch"
191
+ : null;
179
192
  const colorSuffix = dashedClass ? "" : edgeColorClass(nodesById, edge);
180
- const classes = ["canvas-edge", dashedClass ?? (colorSuffix && `canvas-edge${colorSuffix}`)]
193
+ const classes = [
194
+ "canvas-edge",
195
+ dashedClass ?? (colorSuffix && `canvas-edge${colorSuffix}`),
196
+ ]
181
197
  .filter(Boolean)
182
198
  .join(" ");
183
199
  const d = edgePath(edge.kind, x1, y1, x2, y2);
184
- const marker = dashedClass ? "url(#canvas-arrow)" : arrowMarker(colorSuffix);
200
+ const marker = dashedClass
201
+ ? "url(#canvas-arrow)"
202
+ : arrowMarker(colorSuffix);
185
203
  const path = `<path class="${classes}" d="${d}" marker-end="${marker}" />`;
186
204
  // An enriched label (an intent/condition name the AI read out of the
187
205
  // step body) wins over the structural default (e.g. "launch()").
@@ -208,8 +226,10 @@ export function renderGraphSvg(graph, enrichment) {
208
226
  : "";
209
227
  // SVG <title> = native hover tooltip; the only enrichment slot with
210
228
  // room for a full sentence.
211
- const description = details?.description ? `<title>${esc(details.description)}</title>` : "";
212
- return (`<g class="canvas-node node--${node.kind}" filter="url(#canvas-glow)" transform="translate(${p.x},${p.y})">` +
229
+ const description = details?.description
230
+ ? `<title>${esc(details.description)}</title>`
231
+ : "";
232
+ return (`<g class="canvas-node node--${node.kind}" filter="url(#canvas-glow)" transform="translate(${p.x},${p.y})" data-step-name="${esc(node.label)}" data-step-id="${esc(node.id)}">` +
213
233
  description +
214
234
  `<rect class="canvas-node-rect" width="${NODE_W}" height="${NODE_H}" rx="14" />` +
215
235
  `<text class="canvas-node-title" x="${NODE_W / 2}" y="${titleY}">${esc(node.label)}</text>` +
@@ -1 +1 @@
1
- {"version":3,"file":"canvas-svg.js","sourceRoot":"","sources":["../../src/core/canvas-svg.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canvas-svg.js","sourceRoot":"","sources":["../../src/core/canvas-svg.ts"],"names":[],"mappings":"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"}
@@ -19,9 +19,10 @@
19
19
  export declare const CANVAS_TEMPLATE_FILE = ".sapiom/canvas/_template.html";
20
20
  /**
21
21
  * Wraps `bodyHtml` in the shared canvas document shell: doctype, the theme
22
- * switch script, and every CSS class an agent's markup can use. This is the
23
- * single source both the pristine template and `scripts/seed-example.mjs`'s
24
- * prefilled instance render through, so they can't drift from each other.
22
+ * switch script, the run-state listener, and every CSS class an agent's markup
23
+ * can use. This is the single source both the pristine template and
24
+ * `scripts/seed-example.mjs`'s prefilled instance render through, so they
25
+ * can't drift from each other.
25
26
  */
26
27
  export declare function renderCanvasDocument(bodyHtml: string): string;
27
28
  /** The exact document written to both `_template.html` and the initial
@@ -1 +1 @@
1
- {"version":3,"file":"canvas-template.d.ts","sourceRoot":"","sources":["../../src/core/canvas-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH;;uEAEuE;AACvE,eAAO,MAAM,oBAAoB,kCAAiC,CAAC;AAiOnE;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAsB7D;AAgCD;yEACyE;AACzE,eAAO,MAAM,aAAa,QAAsC,CAAC;AAiBjE;;;;;;;;;;;GAWG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIrE"}
1
+ {"version":3,"file":"canvas-template.d.ts","sourceRoot":"","sources":["../../src/core/canvas-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAaH;;uEAEuE;AACvE,eAAO,MAAM,oBAAoB,kCAAiC,CAAC;AAqSnE;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAyB7D;AAgCD;yEACyE;AACzE,eAAO,MAAM,aAAa,QAAsC,CAAC;AAoBjE;;;;;;;;;;;GAWG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIrE"}
@@ -17,6 +17,7 @@ import * as fs from "node:fs/promises";
17
17
  import * as path from "node:path";
18
18
  import { CANVAS_DIR, CANVAS_INDEX } from "../shared/types.js";
19
19
  import { isLegacyDeterministicCanvas } from "./canvas-index-classify.js";
20
+ import { applyRunStateToCanvas, bootCanvasNodeClicks, bootCanvasRunState, runStateNodeClass, } from "./canvas-run-state.js";
20
21
  /** Lives alongside index.html, in the same CANVAS_DIR — a pristine copy of
21
22
  * the template, written once and never touched again, so "clone the
22
23
  * template" always has a clean, un-filled-in source to clone from. */
@@ -37,6 +38,8 @@ function themeStyleBlock() {
37
38
  --canvas-text-dim: #737373;
38
39
  --canvas-accent: #05a9bc;
39
40
  --canvas-success: #05a9bc;
41
+ --canvas-running: #2563eb;
42
+ --canvas-passed: #16a34a;
40
43
  --canvas-escalation: #b45309;
41
44
  --canvas-failure: #ef4444;
42
45
  }
@@ -49,6 +52,8 @@ function themeStyleBlock() {
49
52
  --canvas-text-dim: #a1a1aa;
50
53
  --canvas-accent: #6be195;
51
54
  --canvas-success: #6be195;
55
+ --canvas-running: #60a5fa;
56
+ --canvas-passed: #4ade80;
52
57
  --canvas-escalation: #f59e0b;
53
58
  --canvas-failure: #f87171;
54
59
  }
@@ -98,6 +103,10 @@ html, body {
98
103
  .canvas-graph-svg { display: block; margin: 0 auto; }
99
104
 
100
105
  /* --- node kinds: entry | step | pause | terminal-success | terminal-warn | launched-workflow --- */
106
+ /* Nodes are clickable — pointer cursor signals this, and a subtle stroke-width bump on hover
107
+ makes the affordance visible without requiring external JS to track hover state. */
108
+ .canvas-node { cursor: pointer; }
109
+ .canvas-node:hover .canvas-node-rect { stroke-width: 2.5; }
101
110
  .canvas-node .canvas-node-rect { fill: var(--canvas-panel); stroke-width: 1.5; stroke: var(--canvas-border-strong); }
102
111
  .node--entry .canvas-node-rect { stroke: var(--canvas-accent); }
103
112
  .node--pause .canvas-node-rect { stroke: var(--canvas-text-dim); stroke-dasharray: 5 4; }
@@ -144,6 +153,59 @@ html, body {
144
153
  .canvas-notes { margin: 0; padding-left: 16px; display: flex; flex-direction: column; gap: 3px; font-size: 11.5px; color: var(--canvas-text-dim); }
145
154
  .canvas-cross-workflow { margin: 0; font-size: 11.5px; color: var(--canvas-text-dim); }
146
155
  template { display: none; }
156
+
157
+ /* --- live run-state node lighting ---------------------------------------- */
158
+ /* Applied by the postMessage listener (canvas-run-state.ts) while a run is
159
+ active. Each step's <g class="canvas-node"> gains one of is-running /
160
+ is-passed / is-failed / is-pending, lighting up its rect in place. */
161
+
162
+ @keyframes canvas-node-pulse {
163
+ 0%, 100% { stroke-opacity: 1; }
164
+ 50% { stroke-opacity: 0.45; }
165
+ }
166
+
167
+ /* running/in-flight: blue, tinted fill, and a pulse so you SEE it working. */
168
+ .canvas-node.is-running .canvas-node-rect {
169
+ fill: var(--canvas-running);
170
+ fill-opacity: 0.12;
171
+ stroke: var(--canvas-running);
172
+ stroke-width: 2.5;
173
+ animation: canvas-node-pulse 1.4s ease-in-out infinite;
174
+ }
175
+
176
+ @media (prefers-reduced-motion: reduce) {
177
+ .canvas-node.is-running .canvas-node-rect {
178
+ animation: none;
179
+ }
180
+ }
181
+
182
+ /* passed: green box. */
183
+ .canvas-node.is-passed .canvas-node-rect {
184
+ fill: var(--canvas-passed);
185
+ fill-opacity: 0.14;
186
+ stroke: var(--canvas-passed);
187
+ stroke-width: 2.5;
188
+ }
189
+
190
+ /* failed: red box. */
191
+ .canvas-node.is-failed .canvas-node-rect {
192
+ fill: var(--canvas-failure);
193
+ fill-opacity: 0.14;
194
+ stroke: var(--canvas-failure);
195
+ stroke-width: 2.5;
196
+ }
197
+
198
+ /* pending: dim, so not-yet-run steps read as inactive. */
199
+ .canvas-node.is-pending {
200
+ opacity: 0.5;
201
+ }
202
+
203
+ /* Active-run header badge — accent background signals a live run. */
204
+ .canvas-badge.canvas-badge--active {
205
+ color: var(--canvas-bg);
206
+ background: var(--canvas-accent);
207
+ border-color: var(--canvas-accent);
208
+ }
147
209
  `.trim();
148
210
  }
149
211
  /** Reads the current theme from `?theme=light|dark`, falling back to
@@ -240,11 +302,18 @@ const SVG_DEFS = `
240
302
  </defs>
241
303
  </svg>
242
304
  `.trim();
305
+ /** Stringified run-state listener and node-click channel injected into every
306
+ * canvas document. The run-state functions must all be in scope together
307
+ * because `bootCanvasRunState` calls `applyRunStateToCanvas`, which calls
308
+ * `runStateNodeClass`. `bootCanvasNodeClicks` adds the reverse click channel
309
+ * (iframe → parent) using the same stringify pattern. */
310
+ const RUN_STATE_SCRIPT = `${runStateNodeClass.toString()}\n${applyRunStateToCanvas.toString()}\n${bootCanvasRunState.toString()}\nbootCanvasRunState();\n${bootCanvasNodeClicks.toString()}\nbootCanvasNodeClicks();`;
243
311
  /**
244
312
  * Wraps `bodyHtml` in the shared canvas document shell: doctype, the theme
245
- * switch script, and every CSS class an agent's markup can use. This is the
246
- * single source both the pristine template and `scripts/seed-example.mjs`'s
247
- * prefilled instance render through, so they can't drift from each other.
313
+ * switch script, the run-state listener, and every CSS class an agent's markup
314
+ * can use. This is the single source both the pristine template and
315
+ * `scripts/seed-example.mjs`'s prefilled instance render through, so they
316
+ * can't drift from each other.
248
317
  */
249
318
  export function renderCanvasDocument(bodyHtml) {
250
319
  return `<!DOCTYPE html>
@@ -256,6 +325,9 @@ export function renderCanvasDocument(bodyHtml) {
256
325
  <script>
257
326
  ${THEME_SCRIPT}
258
327
  </script>
328
+ <script>
329
+ ${RUN_STATE_SCRIPT}
330
+ </script>
259
331
  <style>
260
332
  ${themeStyleBlock()}
261
333
  </style>
@@ -1 +1 @@
1
- {"version":3,"file":"canvas-template.js","sourceRoot":"","sources":["../../src/core/canvas-template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canvas-template.js","sourceRoot":"","sources":["../../src/core/canvas-template.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Serve-time enrichment: resolves a deployed agent's `definitionSlug` from the
3
+ * Sapiom Agents API by its `definitionId`. The registry only knows the id (from
4
+ * `sapiom.json`'s `{ "definitionId": "188" }`) — the slug lives server-side,
5
+ * keyed by id.
6
+ *
7
+ * Resolution is cached in-memory (id→slug is stable once deployed; a slug
8
+ * never changes for a given id) so repeat calls across requests are free.
9
+ * Null resolutions are NOT cached: a transient network failure should be
10
+ * retryable without a server restart.
11
+ *
12
+ * Mirrors `@sapiom/tools`'s DEFAULT_BASE_URL for the base URL resolution.
13
+ */
14
+ /** Returns the agents API base URL, honouring the same env-var precedence as
15
+ * @sapiom/tools's DEFAULT_BASE_URL. */
16
+ export declare function resolveAgentsBaseUrl(): string;
17
+ /**
18
+ * Resolve the CORE surface base URL (`api.<env>`), distinct from the agents
19
+ * host (`tools.<env>`) resolved above. A run lives in the agents env, and any
20
+ * core-surface call for that run must target the MATCHING core env — otherwise
21
+ * a prod run queried against dev 401s. So we DERIVE the core host from the
22
+ * agents host (`tools.<env>` → `api.<env>`) rather than reading
23
+ * `SAPIOM_API_URL`, which in some setups points at a different env than the
24
+ * agents surface. An explicit `SAPIOM_CORE_URL` still wins for full control.
25
+ *
26
+ * Co-located with {@link resolveAgentsBaseUrl} (its sole dependency) so the two
27
+ * env-precedence helpers live together.
28
+ */
29
+ export declare function resolveCoreBaseUrl(): string;
30
+ export interface DefinitionSlugResolver {
31
+ resolve(definitionId: string): Promise<string | null>;
32
+ }
33
+ /**
34
+ * Creates a resolver that fetches `GET /agents/v1/definitions/<id>` with the
35
+ * caller's API key and returns the `slug` field from the response.
36
+ *
37
+ * Safe to call from any request handler: never throws, returns null on any
38
+ * failure (network, 4xx, missing field, unparseable body).
39
+ */
40
+ export declare function createDefinitionSlugResolver(opts: {
41
+ apiKey: string | null;
42
+ baseUrl?: string;
43
+ /** Injectable for unit tests; defaults to the global `fetch`. */
44
+ fetchImpl?: typeof fetch;
45
+ }): DefinitionSlugResolver;
46
+ //# sourceMappingURL=definition-slug-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition-slug-resolver.d.ts","sourceRoot":"","sources":["../../src/core/definition-slug-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;wCACwC;AACxC,wBAAgB,oBAAoB,IAAI,MAAM,CAM7C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAc3C;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACvD;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE;IACjD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B,GAAG,sBAAsB,CAyDzB"}