@sapiom/harness 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/core/bracketed-paste.d.ts +55 -0
- package/dist/core/bracketed-paste.d.ts.map +1 -0
- package/dist/core/bracketed-paste.js +97 -0
- package/dist/core/bracketed-paste.js.map +1 -0
- package/dist/core/canvas-body.d.ts +9 -0
- package/dist/core/canvas-body.d.ts.map +1 -1
- package/dist/core/canvas-body.js +30 -12
- package/dist/core/canvas-body.js.map +1 -1
- package/dist/core/canvas-run-state.d.ts +19 -1
- package/dist/core/canvas-run-state.d.ts.map +1 -1
- package/dist/core/canvas-run-state.js +43 -1
- package/dist/core/canvas-run-state.js.map +1 -1
- package/dist/core/canvas-template.d.ts.map +1 -1
- package/dist/core/canvas-template.js +40 -10
- package/dist/core/canvas-template.js.map +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +23 -2
- package/dist/core/session-manager.js.map +1 -1
- package/dist/web/assets/index-BuH6LNdL.js +463 -0
- package/dist/web/assets/index-Dmj2SA0s.css +32 -0
- package/dist/web/canvas/sess-boot/index.html +4 -10
- package/dist/web/index.html +2 -2
- package/package.json +3 -3
- package/dist/web/assets/index-CoTrWYef.css +0 -32
- package/dist/web/assets/index-D97Llt9O.js +0 -463
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @sapiom/harness
|
|
2
2
|
|
|
3
|
+
## 0.5.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 7612e30: Submit injected prompts as a bracketed paste, so a click that sends a prompt to the CLI chat lands as one prompt and actually sends. Multi-line prompts (the canvas chat prepends step context to every question) no longer submit at their first newline, and the trailing Enter is a keypress rather than a race against the coding agent's paste heuristic — which is why the same click sometimes needed a manual Enter. Sessions whose harness never enables bracketed paste keep the previous raw write.
|
|
8
|
+
|
|
3
9
|
## 0.5.0
|
|
4
10
|
|
|
5
11
|
### Minor Changes
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bracketed paste (DEC private mode 2004) for programmatic prompt injection.
|
|
3
|
+
*
|
|
4
|
+
* `submitInput()` writes a prompt into a coding agent's pty and then a `\r` to
|
|
5
|
+
* send it. Both halves are ambiguous to a TUI unless the paste is bracketed:
|
|
6
|
+
*
|
|
7
|
+
* - A prompt with newlines in it (the canvas chat prepends a multi-line step
|
|
8
|
+
* context to every question) is a stream of `\n`s to the app. Ink — Claude
|
|
9
|
+
* Code's input layer — maps a bare `\n` to Return exactly like `\r`, so a
|
|
10
|
+
* raw write submits at the FIRST newline and the rest of the prompt lands
|
|
11
|
+
* as further half-prompts.
|
|
12
|
+
* - The trailing `\r` is only a "submit" keypress if the app has already
|
|
13
|
+
* stopped treating the write as pasted content. Its paste heuristic is a
|
|
14
|
+
* timing/size guess, so the same click can submit or sit in the composer
|
|
15
|
+
* depending on how busy the agent was — the reported inconsistency.
|
|
16
|
+
*
|
|
17
|
+
* With mode 2004 on, the app is told where pasted content starts and ends, so
|
|
18
|
+
* newlines inside stay literal and the following `\r` is unambiguously a
|
|
19
|
+
* keypress. The mode is only usable when the app turned it on, so
|
|
20
|
+
* {@link trackBracketedPaste} reads that fact off the pty's own output rather
|
|
21
|
+
* than assuming it: an app that never enables 2004 keeps the previous raw
|
|
22
|
+
* behaviour instead of being fed escape sequences it would render as text.
|
|
23
|
+
*
|
|
24
|
+
* Pure — no I/O, no pty — so the parsing is unit-testable on strings.
|
|
25
|
+
*/
|
|
26
|
+
/** Start of pasted content (`ESC [ 200 ~`). */
|
|
27
|
+
export declare const PASTE_START = "\u001B[200~";
|
|
28
|
+
/** End of pasted content (`ESC [ 201 ~`). */
|
|
29
|
+
export declare const PASTE_END = "\u001B[201~";
|
|
30
|
+
/** Incremental scan state — see {@link trackBracketedPaste}. */
|
|
31
|
+
export interface BracketedPasteState {
|
|
32
|
+
/** Whether the app currently has mode 2004 on. */
|
|
33
|
+
enabled: boolean;
|
|
34
|
+
/** Trailing bytes of the last chunk that may be an unfinished sequence. */
|
|
35
|
+
carry: string;
|
|
36
|
+
}
|
|
37
|
+
export declare const initialBracketedPasteState: BracketedPasteState;
|
|
38
|
+
/**
|
|
39
|
+
* Fold one chunk of pty output into the running bracketed-paste mode state.
|
|
40
|
+
* The LAST 2004 set/reset in the chunk wins, matching how the terminal itself
|
|
41
|
+
* would apply them in order.
|
|
42
|
+
*/
|
|
43
|
+
export declare function trackBracketedPaste(state: BracketedPasteState, chunk: string): BracketedPasteState;
|
|
44
|
+
/**
|
|
45
|
+
* Wrap `text` as bracketed pasted content.
|
|
46
|
+
*
|
|
47
|
+
* Any `ESC [ 201 ~` inside the text would end the paste early and hand the
|
|
48
|
+
* remainder to the app as keystrokes, so it is dropped — to a FIXPOINT, since
|
|
49
|
+
* removing one terminator can let the bytes on either side re-form another
|
|
50
|
+
* (`"\x1b[20" + ESC[201~ + "1~"` collapses to a fresh `ESC[201~`). `\r` is then
|
|
51
|
+
* normalized to `\n`, because a carriage return inside a paste is what the app
|
|
52
|
+
* reads as Return, which is precisely the premature submit this exists to prevent.
|
|
53
|
+
*/
|
|
54
|
+
export declare function wrapPaste(text: string): string;
|
|
55
|
+
//# sourceMappingURL=bracketed-paste.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bracketed-paste.d.ts","sourceRoot":"","sources":["../../src/core/bracketed-paste.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,+CAA+C;AAC/C,eAAO,MAAM,WAAW,gBAAc,CAAC;AACvC,6CAA6C;AAC7C,eAAO,MAAM,SAAS,gBAAc,CAAC;AAkBrC,gEAAgE;AAChE,MAAM,WAAW,mBAAmB;IAClC,kDAAkD;IAClD,OAAO,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,0BAA0B,EAAE,mBAAmD,CAAC;AAsB7F;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,mBAAmB,EAC1B,KAAK,EAAE,MAAM,GACZ,mBAAmB,CAOrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK9C"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bracketed paste (DEC private mode 2004) for programmatic prompt injection.
|
|
3
|
+
*
|
|
4
|
+
* `submitInput()` writes a prompt into a coding agent's pty and then a `\r` to
|
|
5
|
+
* send it. Both halves are ambiguous to a TUI unless the paste is bracketed:
|
|
6
|
+
*
|
|
7
|
+
* - A prompt with newlines in it (the canvas chat prepends a multi-line step
|
|
8
|
+
* context to every question) is a stream of `\n`s to the app. Ink — Claude
|
|
9
|
+
* Code's input layer — maps a bare `\n` to Return exactly like `\r`, so a
|
|
10
|
+
* raw write submits at the FIRST newline and the rest of the prompt lands
|
|
11
|
+
* as further half-prompts.
|
|
12
|
+
* - The trailing `\r` is only a "submit" keypress if the app has already
|
|
13
|
+
* stopped treating the write as pasted content. Its paste heuristic is a
|
|
14
|
+
* timing/size guess, so the same click can submit or sit in the composer
|
|
15
|
+
* depending on how busy the agent was — the reported inconsistency.
|
|
16
|
+
*
|
|
17
|
+
* With mode 2004 on, the app is told where pasted content starts and ends, so
|
|
18
|
+
* newlines inside stay literal and the following `\r` is unambiguously a
|
|
19
|
+
* keypress. The mode is only usable when the app turned it on, so
|
|
20
|
+
* {@link trackBracketedPaste} reads that fact off the pty's own output rather
|
|
21
|
+
* than assuming it: an app that never enables 2004 keeps the previous raw
|
|
22
|
+
* behaviour instead of being fed escape sequences it would render as text.
|
|
23
|
+
*
|
|
24
|
+
* Pure — no I/O, no pty — so the parsing is unit-testable on strings.
|
|
25
|
+
*/
|
|
26
|
+
/** Start of pasted content (`ESC [ 200 ~`). */
|
|
27
|
+
export const PASTE_START = "\x1b[200~";
|
|
28
|
+
/** End of pasted content (`ESC [ 201 ~`). */
|
|
29
|
+
export const PASTE_END = "\x1b[201~";
|
|
30
|
+
/**
|
|
31
|
+
* A DEC private mode set/reset: `ESC [ ? <params> h|l`, where params is a
|
|
32
|
+
* `;`-separated list (apps commonly batch, e.g. `ESC[?1049;2004h`).
|
|
33
|
+
*/
|
|
34
|
+
// eslint-disable-next-line no-control-regex
|
|
35
|
+
const PRIVATE_MODE_RE = /\x1b\[\?([0-9;]*)([hl])/g;
|
|
36
|
+
/**
|
|
37
|
+
* Longest partial private-mode sequence worth carrying between chunks: an
|
|
38
|
+
* `ESC [ ? <params>` with no terminator yet. A pty chunk can split an escape
|
|
39
|
+
* sequence at any byte, so such a tail is re-scanned with the next chunk
|
|
40
|
+
* instead of being dropped. Sized to hold a realistically long *batched* set —
|
|
41
|
+
* a terminal enables several modes at once, e.g. `ESC[?1049;1000;1002;…;2004h`.
|
|
42
|
+
*/
|
|
43
|
+
const MAX_CARRY = 64;
|
|
44
|
+
export const initialBracketedPasteState = { enabled: false, carry: "" };
|
|
45
|
+
/**
|
|
46
|
+
* The tail of `chunk` that could still grow into a private-mode set/reset on
|
|
47
|
+
* the next chunk. Anchored on the last ESC — not on the full `ESC[?` — so a
|
|
48
|
+
* boundary that falls *inside* the introducer (`ESC` | `[?…`, or `ESC[` | `?…`)
|
|
49
|
+
* still carries, instead of dropping the mode change (and, for a RESET split
|
|
50
|
+
* that way, leaving 2004 wrongly stuck on and pasting escape bytes at an app
|
|
51
|
+
* that has turned bracketed paste off).
|
|
52
|
+
*/
|
|
53
|
+
function pendingCarry(chunk) {
|
|
54
|
+
const esc = chunk.lastIndexOf("\x1b");
|
|
55
|
+
if (esc === -1)
|
|
56
|
+
return "";
|
|
57
|
+
const tail = chunk.slice(esc);
|
|
58
|
+
// Keep it only while it is still a viable prefix of `ESC [ ? <params>` with no
|
|
59
|
+
// terminator yet: a final h/l, a second byte other than "[", or a post-"["
|
|
60
|
+
// byte other than "?" all mean it can never become a private-mode sequence.
|
|
61
|
+
// eslint-disable-next-line no-control-regex
|
|
62
|
+
if (!/^\x1b(\[(\?[0-9;]*)?)?$/.test(tail))
|
|
63
|
+
return "";
|
|
64
|
+
return tail.length > MAX_CARRY ? "" : tail;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Fold one chunk of pty output into the running bracketed-paste mode state.
|
|
68
|
+
* The LAST 2004 set/reset in the chunk wins, matching how the terminal itself
|
|
69
|
+
* would apply them in order.
|
|
70
|
+
*/
|
|
71
|
+
export function trackBracketedPaste(state, chunk) {
|
|
72
|
+
const scanned = state.carry + chunk;
|
|
73
|
+
let enabled = state.enabled;
|
|
74
|
+
for (const match of scanned.matchAll(PRIVATE_MODE_RE)) {
|
|
75
|
+
if (match[1]?.split(";").includes("2004"))
|
|
76
|
+
enabled = match[2] === "h";
|
|
77
|
+
}
|
|
78
|
+
return { enabled, carry: pendingCarry(scanned) };
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Wrap `text` as bracketed pasted content.
|
|
82
|
+
*
|
|
83
|
+
* Any `ESC [ 201 ~` inside the text would end the paste early and hand the
|
|
84
|
+
* remainder to the app as keystrokes, so it is dropped — to a FIXPOINT, since
|
|
85
|
+
* removing one terminator can let the bytes on either side re-form another
|
|
86
|
+
* (`"\x1b[20" + ESC[201~ + "1~"` collapses to a fresh `ESC[201~`). `\r` is then
|
|
87
|
+
* normalized to `\n`, because a carriage return inside a paste is what the app
|
|
88
|
+
* reads as Return, which is precisely the premature submit this exists to prevent.
|
|
89
|
+
*/
|
|
90
|
+
export function wrapPaste(text) {
|
|
91
|
+
let body = text;
|
|
92
|
+
while (body.includes(PASTE_END))
|
|
93
|
+
body = body.split(PASTE_END).join("");
|
|
94
|
+
body = body.replace(/\r\n?/g, "\n");
|
|
95
|
+
return PASTE_START + body + PASTE_END;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=bracketed-paste.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bracketed-paste.js","sourceRoot":"","sources":["../../src/core/bracketed-paste.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,+CAA+C;AAC/C,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW,CAAC;AACvC,6CAA6C;AAC7C,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC;AAErC;;;GAGG;AACH,4CAA4C;AAC5C,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAEnD;;;;;;GAMG;AACH,MAAM,SAAS,GAAG,EAAE,CAAC;AAUrB,MAAM,CAAC,MAAM,0BAA0B,GAAwB,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAE7F;;;;;;;GAOG;AACH,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,+EAA+E;IAC/E,2EAA2E;IAC3E,4EAA4E;IAC5E,4CAA4C;IAC5C,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACrD,OAAO,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAA0B,EAC1B,KAAa;IAEb,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACpC,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QACtD,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;IACxE,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;AACnD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACpC,OAAO,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC;AACxC,CAAC"}
|
|
@@ -27,6 +27,15 @@ export interface WorkflowPanelMeta {
|
|
|
27
27
|
* Returns "" when nothing is worth keying, so the panel omits the footer.
|
|
28
28
|
*/
|
|
29
29
|
export declare function buildLegendHtml(nodeKinds: Set<CanvasNodeKind>, edgeKinds: Set<CanvasEdgeKind>): string;
|
|
30
|
+
/**
|
|
31
|
+
* The same key as `buildLegendHtml`, as data rather than markup: the app's
|
|
32
|
+
* overview panel renders it beside the graph instead of the board floating it
|
|
33
|
+
* over itself.
|
|
34
|
+
*/
|
|
35
|
+
export declare function buildLegendItems(nodeKinds: Set<CanvasNodeKind>, edgeKinds: Set<CanvasEdgeKind>): Array<{
|
|
36
|
+
kind: string;
|
|
37
|
+
label: string;
|
|
38
|
+
}>;
|
|
30
39
|
/** One workflow's full panel: title/badges + summary header and the SVG
|
|
31
40
|
* diagram, with the deterministic enrichment merged in (summary line and
|
|
32
41
|
* node/edge annotations), plus the embedded step-graph payload the Steps tab
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas-body.d.ts","sourceRoot":"","sources":["../../src/core/canvas-body.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAO/D,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAoBD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,GAAG,MAAM,CAYtG;
|
|
1
|
+
{"version":3,"file":"canvas-body.d.ts","sourceRoot":"","sources":["../../src/core/canvas-body.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAO/D,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAoBD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,GAAG,MAAM,CAYtG;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,EAC9B,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,GAC7B,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CASxC;AAsFD;;;aAGa;AACb,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,iBAAiB,EACvB,UAAU,CAAC,EAAE,gBAAgB,GAAG,IAAI,GACnC,MAAM,CAyBR;AAED;;qCAEqC;AACrC,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAczE;AAED;;;;;;+DAM+D;AAC/D,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAY7D;AAED;;gFAEgF;AAChF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,MAAM,CAEtE"}
|
package/dist/core/canvas-body.js
CHANGED
|
@@ -32,6 +32,21 @@ export function buildLegendHtml(nodeKinds, edgeKinds) {
|
|
|
32
32
|
return "";
|
|
33
33
|
return `<footer class="canvas-legend">${items.join("")}</footer>`;
|
|
34
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* The same key as `buildLegendHtml`, as data rather than markup: the app's
|
|
37
|
+
* overview panel renders it beside the graph instead of the board floating it
|
|
38
|
+
* over itself.
|
|
39
|
+
*/
|
|
40
|
+
export function buildLegendItems(nodeKinds, edgeKinds) {
|
|
41
|
+
const items = NODE_KIND_ORDER.filter((k) => nodeKinds.has(k)).map((k) => ({
|
|
42
|
+
kind: k,
|
|
43
|
+
label: NODE_KIND_LABEL[k],
|
|
44
|
+
}));
|
|
45
|
+
if (edgeKinds.has("cross")) {
|
|
46
|
+
items.push({ kind: "cross", label: "cross-agent signal/handoff" });
|
|
47
|
+
}
|
|
48
|
+
return items;
|
|
49
|
+
}
|
|
35
50
|
/**
|
|
36
51
|
* Serializes the graph (enrichment merged) into the JSON payload the app's
|
|
37
52
|
* Steps tab / inspector consumes, embedded as a `<script id="sapiom-graph">`
|
|
@@ -78,10 +93,12 @@ function buildGraphPayload(graph, enrichment) {
|
|
|
78
93
|
}
|
|
79
94
|
/** The workflow-level overview the Canvas tab's bottom panel shows: a
|
|
80
95
|
* deterministic stats line ("N steps · M exits · <entry> entry"), the shape
|
|
81
|
-
* summary as the description,
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
|
|
96
|
+
* summary as the description, the graph's validation notes, and the chrome
|
|
97
|
+
* the board used to float over itself — the status badges and the node-kind
|
|
98
|
+
* key. Embedded as a JSON data block (read by bootCanvasOverview), the same
|
|
99
|
+
* pattern as the step graph — everything here is derived from the graph, no
|
|
100
|
+
* LLM. */
|
|
101
|
+
function buildOverviewPayload(graph, badges, legend, enrichment) {
|
|
85
102
|
const exits = graph.nodes.filter((n) => n.kind === "terminal-success" || n.kind === "terminal-warn").length;
|
|
86
103
|
const steps = graph.nodes.filter((n) => n.kind !== "terminal-success" &&
|
|
87
104
|
n.kind !== "terminal-warn" &&
|
|
@@ -98,6 +115,8 @@ function buildOverviewPayload(graph, enrichment) {
|
|
|
98
115
|
description: graph.description ?? "",
|
|
99
116
|
stats: parts.join(" · "),
|
|
100
117
|
notes: enrichment?.notes ?? [],
|
|
118
|
+
badges,
|
|
119
|
+
legend,
|
|
101
120
|
};
|
|
102
121
|
// JSON in a <script> block: neutralize any "</script>"/"<" in derived text.
|
|
103
122
|
return JSON.stringify(overview).replace(/</g, "\\u003c");
|
|
@@ -107,23 +126,22 @@ function buildOverviewPayload(graph, enrichment) {
|
|
|
107
126
|
* node/edge annotations), plus the embedded step-graph payload the Steps tab
|
|
108
127
|
* reads. */
|
|
109
128
|
export function buildWorkflowPanelHtml(graph, meta, enrichment) {
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
.
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
: "";
|
|
129
|
+
const badgeLabels = [...(meta.badges ?? [])];
|
|
130
|
+
if (graph.warnings.length > 0) {
|
|
131
|
+
badgeLabels.push(`${graph.warnings.length} warning${graph.warnings.length === 1 ? "" : "s"}`);
|
|
132
|
+
}
|
|
133
|
+
const badges = badgeLabels.map((b) => `<span class="canvas-badge">${esc(b)}</span>`).join("");
|
|
116
134
|
const summary = enrichment?.summary ? `\n <p class="canvas-subtitle">${esc(enrichment.summary)}</p>` : "";
|
|
117
135
|
const used = usedKinds(graph);
|
|
118
136
|
const legend = buildLegendHtml(used.nodeKinds, used.edgeKinds);
|
|
119
137
|
const legendHtml = legend ? `\n ${legend}` : "";
|
|
120
138
|
const graphData = buildGraphPayload(graph, enrichment);
|
|
121
|
-
const overviewData = buildOverviewPayload(graph, enrichment);
|
|
139
|
+
const overviewData = buildOverviewPayload(graph, badgeLabels, buildLegendItems(used.nodeKinds, used.edgeKinds), enrichment);
|
|
122
140
|
return `<section class="canvas-panel">
|
|
123
141
|
<header class="canvas-header">
|
|
124
142
|
<div class="canvas-title-row">
|
|
125
143
|
<h1 class="canvas-title">${esc(meta.title)}</h1>
|
|
126
|
-
${badges}
|
|
144
|
+
${badges}
|
|
127
145
|
</div>${summary}
|
|
128
146
|
</header>
|
|
129
147
|
<div class="canvas-diagram-panel">
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas-body.js","sourceRoot":"","sources":["../../src/core/canvas-body.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"canvas-body.js","sourceRoot":"","sources":["../../src/core/canvas-body.ts"],"names":[],"mappings":"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"}
|
|
@@ -96,6 +96,23 @@ export declare function bootCanvasRunState(): void;
|
|
|
96
96
|
* Stringified into the iframe template by `canvas-template.ts`.
|
|
97
97
|
*/
|
|
98
98
|
export declare function bootCanvasNodeClicks(): void;
|
|
99
|
+
/**
|
|
100
|
+
* Keeps the board's selected node lit while the parent's bottom inspector
|
|
101
|
+
* shows that step.
|
|
102
|
+
*
|
|
103
|
+
* Without this the served board answers a pick (see `bootCanvasNodeClicks`)
|
|
104
|
+
* and then looks untouched: the inspector swaps its content with nothing on
|
|
105
|
+
* the graph to say WHICH card it is describing — change blindness on every
|
|
106
|
+
* pick. The parent posts `{ type: "sapiom-canvas:select", id }` (null clears)
|
|
107
|
+
* with the graph node id, which the SVG carries as `data-step-id`; older
|
|
108
|
+
* documents that only carry a label fall back to `data-step-name`.
|
|
109
|
+
*
|
|
110
|
+
* Selection is orthogonal to run state: `is-selected` only rings the node, so
|
|
111
|
+
* a running/passed/failed card keeps its own lighting while selected.
|
|
112
|
+
*
|
|
113
|
+
* Stringified into the iframe template by `canvas-template.ts`.
|
|
114
|
+
*/
|
|
115
|
+
export declare function bootCanvasSelection(): void;
|
|
99
116
|
/**
|
|
100
117
|
* Wires the view (pan/zoom) channel and announces the graph's natural size.
|
|
101
118
|
*
|
|
@@ -128,7 +145,8 @@ export declare function bootCanvasView(): void;
|
|
|
128
145
|
*/
|
|
129
146
|
export declare function bootCanvasGraph(): void;
|
|
130
147
|
/**
|
|
131
|
-
* Posts the workflow-level overview (`{ description, stats, notes
|
|
148
|
+
* Posts the workflow-level overview (`{ description, stats, notes, badges,
|
|
149
|
+
* legend }`) so the
|
|
132
150
|
* Canvas tab's bottom panel can show it — the deterministic equivalent of the
|
|
133
151
|
* demo doc's overview. Embedded by `canvas-body.ts` as a `<script
|
|
134
152
|
* type="application/json" id="sapiom-overview">` data block (read as text, same
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas-run-state.d.ts","sourceRoot":"","sources":["../../src/core/canvas-run-state.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAExE;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKxD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,QAAQ,EACb,GAAG,EAAE;IACH,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GACA,IAAI,CAwDN;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAMzC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAqC3C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAkDrC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAkBtC;AAED
|
|
1
|
+
{"version":3,"file":"canvas-run-state.d.ts","sourceRoot":"","sources":["../../src/core/canvas-run-state.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAExE;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKxD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,QAAQ,EACb,GAAG,EAAE;IACH,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GACA,IAAI,CAwDN;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAMzC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAqC3C;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAmB1C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAkDrC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAkBtC;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CA4BzC;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAuBtC"}
|
|
@@ -196,6 +196,43 @@ export function bootCanvasNodeClicks() {
|
|
|
196
196
|
}
|
|
197
197
|
});
|
|
198
198
|
}
|
|
199
|
+
/**
|
|
200
|
+
* Keeps the board's selected node lit while the parent's bottom inspector
|
|
201
|
+
* shows that step.
|
|
202
|
+
*
|
|
203
|
+
* Without this the served board answers a pick (see `bootCanvasNodeClicks`)
|
|
204
|
+
* and then looks untouched: the inspector swaps its content with nothing on
|
|
205
|
+
* the graph to say WHICH card it is describing — change blindness on every
|
|
206
|
+
* pick. The parent posts `{ type: "sapiom-canvas:select", id }` (null clears)
|
|
207
|
+
* with the graph node id, which the SVG carries as `data-step-id`; older
|
|
208
|
+
* documents that only carry a label fall back to `data-step-name`.
|
|
209
|
+
*
|
|
210
|
+
* Selection is orthogonal to run state: `is-selected` only rings the node, so
|
|
211
|
+
* a running/passed/failed card keeps its own lighting while selected.
|
|
212
|
+
*
|
|
213
|
+
* Stringified into the iframe template by `canvas-template.ts`.
|
|
214
|
+
*/
|
|
215
|
+
export function bootCanvasSelection() {
|
|
216
|
+
window.addEventListener("message", function (e) {
|
|
217
|
+
const d = e && e.data;
|
|
218
|
+
if (!d || d.type !== "sapiom-canvas:select")
|
|
219
|
+
return;
|
|
220
|
+
const previous = document.querySelectorAll(".canvas-node.is-selected");
|
|
221
|
+
for (let i = 0; i < previous.length; i++)
|
|
222
|
+
previous[i].classList.remove("is-selected");
|
|
223
|
+
if (typeof d.id !== "string" || !d.id)
|
|
224
|
+
return;
|
|
225
|
+
const nodes = document.querySelectorAll(".canvas-node");
|
|
226
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
227
|
+
const node = nodes[i];
|
|
228
|
+
if (node.getAttribute("data-step-id") === d.id ||
|
|
229
|
+
node.getAttribute("data-step-name") === d.id) {
|
|
230
|
+
node.classList.add("is-selected");
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
}
|
|
199
236
|
/**
|
|
200
237
|
* Wires the view (pan/zoom) channel and announces the graph's natural size.
|
|
201
238
|
*
|
|
@@ -299,7 +336,8 @@ export function bootCanvasGraph() {
|
|
|
299
336
|
}
|
|
300
337
|
}
|
|
301
338
|
/**
|
|
302
|
-
* Posts the workflow-level overview (`{ description, stats, notes
|
|
339
|
+
* Posts the workflow-level overview (`{ description, stats, notes, badges,
|
|
340
|
+
* legend }`) so the
|
|
303
341
|
* Canvas tab's bottom panel can show it — the deterministic equivalent of the
|
|
304
342
|
* demo doc's overview. Embedded by `canvas-body.ts` as a `<script
|
|
305
343
|
* type="application/json" id="sapiom-overview">` data block (read as text, same
|
|
@@ -319,6 +357,10 @@ export function bootCanvasOverview() {
|
|
|
319
357
|
description: typeof data.description === "string" ? data.description : "",
|
|
320
358
|
stats: typeof data.stats === "string" ? data.stats : "",
|
|
321
359
|
notes: Array.isArray(data.notes) ? data.notes : [],
|
|
360
|
+
// Chrome the board no longer floats over the graph: the app renders
|
|
361
|
+
// both in the overview panel (see canvas-body.ts).
|
|
362
|
+
badges: Array.isArray(data.badges) ? data.badges : [],
|
|
363
|
+
legend: Array.isArray(data.legend) ? data.legend : [],
|
|
322
364
|
}, "*");
|
|
323
365
|
}
|
|
324
366
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas-run-state.js","sourceRoot":"","sources":["../../src/core/canvas-run-state.ts"],"names":[],"mappings":"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
|
|
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-template.d.ts","sourceRoot":"","sources":["../../src/core/canvas-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"canvas-template.d.ts","sourceRoot":"","sources":["../../src/core/canvas-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAkBH;;uEAEuE;AACvE,eAAO,MAAM,oBAAoB,kCAAiC,CAAC;AA+WnE;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAyB7D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAyBnF;AAgCD;yEACyE;AACzE,eAAO,MAAM,aAAa,QAAsC,CAAC;AAoBjE;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIrE"}
|
|
@@ -17,7 +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, bootCanvasError, bootCanvasGraph, bootCanvasOverview, bootCanvasNodeClicks, bootCanvasRunState, bootCanvasView, runStateNodeClass, } from "./canvas-run-state.js";
|
|
20
|
+
import { applyRunStateToCanvas, bootCanvasError, bootCanvasGraph, bootCanvasOverview, bootCanvasNodeClicks, bootCanvasRunState, bootCanvasSelection, bootCanvasView, runStateNodeClass, } from "./canvas-run-state.js";
|
|
21
21
|
/** Lives alongside index.html, in the same CANVAS_DIR — a pristine copy of
|
|
22
22
|
* the template, written once and never touched again, so "clone the
|
|
23
23
|
* template" always has a clean, un-filled-in source to clone from. */
|
|
@@ -98,8 +98,7 @@ body {
|
|
|
98
98
|
#canvas-root { max-width: 1100px; padding: 24px 20px; display: flex; flex-direction: column; gap: 18px; }
|
|
99
99
|
|
|
100
100
|
/* --- structural classes: keep these, and their names, untouched --- */
|
|
101
|
-
.canvas-panel { background: transparent; border: 0; padding: 20px; }
|
|
102
|
-
.canvas-header { display: flex; flex-direction: column; gap: 10px; margin-bottom: 14px; }
|
|
101
|
+
.canvas-panel { background: transparent; border: 0; padding: 20px; }.canvas-header { display: flex; flex-direction: column; gap: 10px; margin-bottom: 14px; }
|
|
103
102
|
.canvas-title-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
|
|
104
103
|
.canvas-title { margin: 0; font-size: 20px; font-weight: 600; letter-spacing: -0.01em; }
|
|
105
104
|
.canvas-badge {
|
|
@@ -126,7 +125,10 @@ body {
|
|
|
126
125
|
.canvas-node { cursor: pointer; }
|
|
127
126
|
.canvas-node:hover .canvas-node-rect { stroke-width: 2.5; }
|
|
128
127
|
.canvas-node .canvas-node-rect { fill: var(--canvas-panel); stroke-width: 1.5; stroke: var(--canvas-border-strong); }
|
|
129
|
-
|
|
128
|
+
/* Entry is a POSITION in the graph, not a state: it reads from the card's own
|
|
129
|
+
"entry" caption and from sitting at the top. It carries no accent, so the
|
|
130
|
+
only accented card on the board is the one the inspector is describing. */
|
|
131
|
+
.node--entry .canvas-node-rect { stroke: var(--canvas-border-strong); }
|
|
130
132
|
.node--pause .canvas-node-rect { stroke: var(--canvas-text-dim); stroke-dasharray: 5 4; }
|
|
131
133
|
.node--terminal-success .canvas-node-rect { stroke: var(--canvas-success); }
|
|
132
134
|
.node--terminal-warn .canvas-node-rect { stroke: var(--canvas-escalation); }
|
|
@@ -151,19 +153,26 @@ body {
|
|
|
151
153
|
|
|
152
154
|
/* --- legend + interconnections --- */
|
|
153
155
|
.canvas-legend { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; font-size: 11px; color: var(--canvas-text-dim); }
|
|
154
|
-
/* In a diagram panel the legend is a footer under the SVG — separate it with a
|
|
155
|
-
hairline so it reads as a key, not part of the graph. Scoped to .canvas-panel
|
|
156
|
-
so the overview/seed legends keep their own layout. */
|
|
157
|
-
.canvas-panel .canvas-legend { margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--canvas-border); }
|
|
158
156
|
.canvas-legend-item { display: flex; align-items: center; gap: 6px; }
|
|
159
157
|
.canvas-legend-marker { width: 10px; height: 10px; border-radius: 50%; display: inline-block; flex: 0 0 auto; }
|
|
160
|
-
.canvas-legend-marker--entry {
|
|
158
|
+
.canvas-legend-marker--entry { border: 1.5px solid var(--canvas-border-strong); background: transparent; }
|
|
161
159
|
.canvas-legend-marker--step { border: 1.5px solid var(--canvas-border-strong); background: transparent; }
|
|
162
160
|
.canvas-legend-marker--pause { border: 1.5px dashed var(--canvas-text-dim); background: transparent; }
|
|
163
161
|
.canvas-legend-marker--terminal-success { background: var(--canvas-success); border-radius: 3px; }
|
|
164
162
|
.canvas-legend-marker--terminal-warn { background: var(--canvas-escalation); border-radius: 3px; }
|
|
165
163
|
.canvas-legend-marker--cross { border: 1.5px dashed var(--canvas-text-dim); border-radius: 2px; background: transparent; }
|
|
166
164
|
.canvas-legend-marker--launched-workflow { border: 1.5px dashed var(--canvas-accent); border-radius: 3px; background: transparent; }
|
|
165
|
+
/* The board is ONLY the graph. Title, badges, summary line, stats and the
|
|
166
|
+
node-kind key are app chrome: the SPA renders them in the overview panel
|
|
167
|
+
around this iframe (canvas-body.ts posts them), so floating a second copy
|
|
168
|
+
over the board would just crowd the diagram. Kept in the markup — hidden,
|
|
169
|
+
not deleted — so the classes stay a stable contract for hand-authored
|
|
170
|
+
documents and the run-state badge still has something to update. */
|
|
171
|
+
.canvas-header,
|
|
172
|
+
.canvas-legend {
|
|
173
|
+
position: absolute; width: 1px; height: 1px; overflow: hidden;
|
|
174
|
+
clip-path: inset(50%); white-space: nowrap; margin: 0; padding: 0;
|
|
175
|
+
}
|
|
167
176
|
.canvas-interconnections { display: flex; flex-direction: column; gap: 12px; }
|
|
168
177
|
.canvas-panel-title { margin: 0; font-size: 12px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--canvas-text-dim); }
|
|
169
178
|
.canvas-interconnection-row { display: grid; grid-template-columns: 12px 1fr auto; column-gap: 8px; row-gap: 2px; align-items: baseline; }
|
|
@@ -222,6 +231,27 @@ template { display: none; }
|
|
|
222
231
|
opacity: 0.5;
|
|
223
232
|
}
|
|
224
233
|
|
|
234
|
+
/* --- selection ----------------------------------------------------------- */
|
|
235
|
+
/* The card the bottom inspector is describing (canvas-run-state.ts's
|
|
236
|
+
bootCanvasSelection, driven by the parent). A ring plus a faint accent wash,
|
|
237
|
+
so the pick reads at a glance without repainting the node: run-state fill
|
|
238
|
+
still wins on the same rect, and a selected pending node comes back to full
|
|
239
|
+
opacity so the thing you just clicked is never the dimmest card on the
|
|
240
|
+
board. */
|
|
241
|
+
.canvas-node.is-selected .canvas-node-rect {
|
|
242
|
+
stroke: var(--canvas-accent);
|
|
243
|
+
stroke-width: 3;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
.canvas-node.is-selected:not(.is-running):not(.is-passed):not(.is-failed) .canvas-node-rect {
|
|
247
|
+
fill: var(--canvas-accent);
|
|
248
|
+
fill-opacity: 0.1;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
.canvas-node.is-selected.is-pending {
|
|
252
|
+
opacity: 1;
|
|
253
|
+
}
|
|
254
|
+
|
|
225
255
|
/* Active-run header badge — accent background signals a live run. */
|
|
226
256
|
.canvas-badge.canvas-badge--active {
|
|
227
257
|
color: var(--canvas-bg);
|
|
@@ -350,7 +380,7 @@ const NAME_SHIM = "function __name(fn){return fn;}";
|
|
|
350
380
|
* embedded step graph so the Steps tab can project it — all via the same
|
|
351
381
|
* stringify pattern. `NAME_SHIM` MUST come first (see its doc — without it,
|
|
352
382
|
* esbuild/tsx output throws in the iframe). */
|
|
353
|
-
const RUN_STATE_SCRIPT = `${NAME_SHIM}\n${runStateNodeClass.toString()}\n${applyRunStateToCanvas.toString()}\n${bootCanvasRunState.toString()}\nbootCanvasRunState();\n${bootCanvasNodeClicks.toString()}\nbootCanvasNodeClicks();\n${bootCanvasView.toString()}\nbootCanvasView();\n${bootCanvasGraph.toString()}\nbootCanvasGraph();\n${bootCanvasOverview.toString()}\nbootCanvasOverview();\n${bootCanvasError.toString()}\nbootCanvasError();`;
|
|
383
|
+
const RUN_STATE_SCRIPT = `${NAME_SHIM}\n${runStateNodeClass.toString()}\n${applyRunStateToCanvas.toString()}\n${bootCanvasRunState.toString()}\nbootCanvasRunState();\n${bootCanvasNodeClicks.toString()}\nbootCanvasNodeClicks();\n${bootCanvasSelection.toString()}\nbootCanvasSelection();\n${bootCanvasView.toString()}\nbootCanvasView();\n${bootCanvasGraph.toString()}\nbootCanvasGraph();\n${bootCanvasOverview.toString()}\nbootCanvasOverview();\n${bootCanvasError.toString()}\nbootCanvasError();`;
|
|
354
384
|
/**
|
|
355
385
|
* Wraps `bodyHtml` in the shared canvas document shell: doctype, the theme
|
|
356
386
|
* switch script, the run-state listener, and every CSS class an agent's markup
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas-template.js","sourceRoot":"","sources":["../../src/core/canvas-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAE/B;;uEAEuE;AACvE,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,UAAU,iBAAiB,CAAC;AAEnE,SAAS,eAAe;IACtB,yEAAyE;IACzE,0EAA0E;IAC1E,mEAAmE;IACnE,yEAAyE;IACzE,wEAAwE;IACxE,OAAO
|
|
1
|
+
{"version":3,"file":"canvas-template.js","sourceRoot":"","sources":["../../src/core/canvas-template.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/core/session-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,UAAU,EAEhB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/core/session-manager.ts"],"names":[],"mappings":"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"}
|