@sapiom/harness 0.1.3 → 0.1.5

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 (85) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/dist/core/adapters/adapter.d.ts +9 -0
  3. package/dist/core/adapters/adapter.d.ts.map +1 -1
  4. package/dist/core/adapters/claude-code-info.d.ts.map +1 -1
  5. package/dist/core/adapters/claude-code-info.js +2 -0
  6. package/dist/core/adapters/claude-code-info.js.map +1 -1
  7. package/dist/core/adapters/claude-code.d.ts +4 -0
  8. package/dist/core/adapters/claude-code.d.ts.map +1 -1
  9. package/dist/core/adapters/claude-code.js +133 -47
  10. package/dist/core/adapters/claude-code.js.map +1 -1
  11. package/dist/core/adapters/codex-info.d.ts.map +1 -1
  12. package/dist/core/adapters/codex-info.js +2 -0
  13. package/dist/core/adapters/codex-info.js.map +1 -1
  14. package/dist/core/adapters/conductor.d.ts.map +1 -1
  15. package/dist/core/adapters/conductor.js +2 -0
  16. package/dist/core/adapters/conductor.js.map +1 -1
  17. package/dist/core/adapters/opencode.d.ts.map +1 -1
  18. package/dist/core/adapters/opencode.js +2 -0
  19. package/dist/core/adapters/opencode.js.map +1 -1
  20. package/dist/core/adapters/pi.d.ts.map +1 -1
  21. package/dist/core/adapters/pi.js +2 -0
  22. package/dist/core/adapters/pi.js.map +1 -1
  23. package/dist/core/canvas-run-state.d.ts +95 -0
  24. package/dist/core/canvas-run-state.d.ts.map +1 -0
  25. package/dist/core/canvas-run-state.js +162 -0
  26. package/dist/core/canvas-run-state.js.map +1 -0
  27. package/dist/core/canvas-svg.d.ts.map +1 -1
  28. package/dist/core/canvas-svg.js +28 -8
  29. package/dist/core/canvas-svg.js.map +1 -1
  30. package/dist/core/canvas-template.d.ts +4 -3
  31. package/dist/core/canvas-template.d.ts.map +1 -1
  32. package/dist/core/canvas-template.js +75 -3
  33. package/dist/core/canvas-template.js.map +1 -1
  34. package/dist/core/definition-slug-resolver.d.ts +33 -0
  35. package/dist/core/definition-slug-resolver.d.ts.map +1 -0
  36. package/dist/core/definition-slug-resolver.js +81 -0
  37. package/dist/core/definition-slug-resolver.js.map +1 -0
  38. package/dist/core/execution-detector.d.ts +59 -0
  39. package/dist/core/execution-detector.d.ts.map +1 -0
  40. package/dist/core/execution-detector.js +110 -0
  41. package/dist/core/execution-detector.js.map +1 -0
  42. package/dist/core/inject/mcp-config.d.ts.map +1 -1
  43. package/dist/core/inject/mcp-config.js +9 -1
  44. package/dist/core/inject/mcp-config.js.map +1 -1
  45. package/dist/core/render-run-state.d.ts +9 -0
  46. package/dist/core/render-run-state.d.ts.map +1 -0
  47. package/dist/core/render-run-state.js +139 -0
  48. package/dist/core/render-run-state.js.map +1 -0
  49. package/dist/core/run-spend.d.ts +55 -0
  50. package/dist/core/run-spend.d.ts.map +1 -0
  51. package/dist/core/run-spend.js +109 -0
  52. package/dist/core/run-spend.js.map +1 -0
  53. package/dist/core/run-state.d.ts +45 -0
  54. package/dist/core/run-state.d.ts.map +1 -0
  55. package/dist/core/run-state.js +72 -0
  56. package/dist/core/run-state.js.map +1 -0
  57. package/dist/core/run-transactions.d.ts +60 -0
  58. package/dist/core/run-transactions.d.ts.map +1 -0
  59. package/dist/core/run-transactions.js +129 -0
  60. package/dist/core/run-transactions.js.map +1 -0
  61. package/dist/core/workflow-registry.d.ts +12 -1
  62. package/dist/core/workflow-registry.d.ts.map +1 -1
  63. package/dist/core/workflow-registry.js +2 -0
  64. package/dist/core/workflow-registry.js.map +1 -1
  65. package/dist/server/index.d.ts.map +1 -1
  66. package/dist/server/index.js +0 -0
  67. package/dist/server/index.js.map +1 -1
  68. package/dist/server/rest.d.ts +5 -0
  69. package/dist/server/rest.d.ts.map +1 -1
  70. package/dist/server/rest.js +151 -12
  71. package/dist/server/rest.js.map +1 -1
  72. package/dist/server/runs.d.ts +33 -0
  73. package/dist/server/runs.d.ts.map +1 -0
  74. package/dist/server/runs.js +124 -0
  75. package/dist/server/runs.js.map +1 -0
  76. package/dist/shared/types.d.ts +157 -0
  77. package/dist/shared/types.d.ts.map +1 -1
  78. package/dist/shared/types.js +30 -0
  79. package/dist/shared/types.js.map +1 -1
  80. package/dist/web/assets/index-DM84J83Y.js +234 -0
  81. package/dist/web/assets/index-DemtWW4L.css +32 -0
  82. package/dist/web/index.html +2 -2
  83. package/package.json +4 -4
  84. package/dist/web/assets/index-BTm-QNRt.css +0 -32
  85. package/dist/web/assets/index-CvNiFngP.js +0 -204
package/CHANGELOG.md CHANGED
@@ -1,5 +1,62 @@
1
1
  # @sapiom/harness
2
2
 
3
+ ## 0.1.5
4
+
5
+ ### Patch Changes
6
+
7
+ - 5752434: Show live run status on the canvas step graph itself — each step node lights up running/passed/failed with latency while a run executes, and the header badge switches to running/testing — replacing the separate status panel.
8
+ - 5752434: Show per-step and total run cost (in credits) on the live canvas — total at the top, per-step in the step panel — and include cost in the debug-macro context.
9
+ - 5752434: Show the live run canvas for runs started via the agent tooling, not just the CLI. The run detector now recognizes the run tool's `executionId` result in addition to the CLI's start line, so pressing Prod Run lights up the live step graph. Also stop polling a run whose state can't be fetched after repeated attempts, so a stale or malformed id can't poll indefinitely.
10
+ - 5752434: Show a live step graph on the canvas while a deployed run executes — steps update from running to passed/failed with latency, driven by the run-state poll loop.
11
+ - 5752434: Add a harness endpoint that reports a deployed run's live per-step state (status, latency, errors, logs) so the canvas can show progress during a run. The Sapiom credential stays server-side.
12
+ - 5752434: Make the deployed-agent trigger snippet resilient when the agent's slug can't be resolved from the deployment. The panel now falls back to the project name (and flags it as inferred so you can verify) instead of showing a fill-in placeholder in the read-only slug field, and it targets the configured Agents API host so the copy-paste call reaches the same environment the agent was deployed to.
13
+ - 5752434: Click a step on the live canvas to see its status, latency, and logs, and run debug macros that hand the step's logs to your coding agent — plus a free-form ask.
14
+ - 5752434: Add the web poll loop that fetches a run's live state during execution — polling on a fixed cadence, stopping when the run finishes, and pausing while the tab is hidden.
15
+
16
+ ## 0.1.4
17
+
18
+ ### Patch Changes
19
+
20
+ - eff9d50: fix(harness): separate inspecting a workflow from binding it, and keep the rail highlight in sync with the canvas
21
+
22
+ Clicking a workflow in the workspace rail used to immediately rebind it to the
23
+ active session, so just _looking_ at another workflow clobbered what the session
24
+ was working on. Selecting is now pure inspection (it highlights the row and docks
25
+ the action strip); a session's binding changes only via an explicit "Work on
26
+ this" control on the strip (or by running a macro against the workflow, which is
27
+ already an explicit action).
28
+
29
+ Switching session tabs now always snaps the rail/strip highlight to that
30
+ session's own binding — including clearing it when the session has no binding, so
31
+ the rail no longer stays lit on the previous session's workflow while the canvas
32
+ shows nothing.
33
+
34
+ - 524ffdf: fix(harness): resume/history rows are distinguishable — real titles + branch/turns/last-active
35
+
36
+ Resume-history rows were near-indistinguishable: on any long session the title
37
+ fell back to the bare `agentSessionId` UUID (the tail-only transcript read
38
+ missed the first prompt), and rows carried no differentiating metadata.
39
+
40
+ The claude-code adapter now derives a human-readable title from Claude's own
41
+ generated `ai-title` (falling back to a compaction `summary`, then the first
42
+ human prompt, then the directory basename — never a bare UUID), and surfaces
43
+ the session's git branch and an exact human-turn count. Transcripts small
44
+ enough to scan in full report an exact turn count; larger ones are still read
45
+ only at head+tail (so the dropdown never parses a 100MB file) and simply omit
46
+ the count. The history dropdown renders branch · turns · last-active under each
47
+ title so many sessions in one directory can be told apart.
48
+
49
+ - c8eecf0: fix(harness): workspace/workflow rail no longer clips below the fold on first paint
50
+
51
+ `.rail` was missing `min-height: 0`, so as a grid/flex item it grew to its
52
+ content height instead of the grid row's — the nav clipped below the fold and
53
+ `.rail-list`'s `overflow-y: auto` never engaged until a reflow (only a hard
54
+ refresh appeared to fix it). The rail is now constrained to the viewport and
55
+ scrolls internally on the initial render.
56
+
57
+ - Updated dependencies [c8eecf0]
58
+ - @sapiom/agent-core@0.9.5
59
+
3
60
  ## 0.1.3
4
61
 
5
62
  ### Patch Changes
@@ -45,6 +45,15 @@ export interface HarnessAdapterBase {
45
45
  * supported harnesses.
46
46
  */
47
47
  experimental?: boolean;
48
+ /**
49
+ * Whether this harness can consume an image the composer attaches. The
50
+ * harness relays an image by writing it to disk (see HARNESS_UPLOADS_DIR)
51
+ * and injecting its path into the agent's prompt, so this is true exactly
52
+ * for harnesses whose CLI reads image files referenced by path. The upload
53
+ * endpoint rejects attaches to a harness where this is false, and the SPA
54
+ * hides the attach affordance for it.
55
+ */
56
+ imageInput: boolean;
48
57
  }
49
58
  /**
50
59
  * An adapter the harness spawns inside a pty session.
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,oEAAoE;AACpE,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,OAAO,GACP,IAAI,GACJ,UAAU,GACV,WAAW,CAAC;AAEhB;oCACoC;AACpC,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,UAAU,CAAC;AAEzD,yDAAyD;AACzD,MAAM,WAAW,kBAAkB;IACjC,+DAA+D;IAC/D,EAAE,EAAE,gBAAgB,CAAC;IACrB,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,IAAI,EAAE,kBAAkB,CAAC;IACzB;;;;;OAKG;IACH,gBAAgB,IAAI,MAAM,CAAC;IAC3B;;;OAGG;IACH,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,0BAA2B,SAAQ,kBAAkB;IACpE,IAAI,EAAE,UAAU,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,0BAA2B,SAAQ,kBAAkB;IACpE,IAAI,EAAE,UAAU,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,0BAA0B,GAAG,0BAA0B,CAAC"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,oEAAoE;AACpE,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,OAAO,GACP,IAAI,GACJ,UAAU,GACV,WAAW,CAAC;AAEhB;oCACoC;AACpC,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,UAAU,CAAC;AAEzD,yDAAyD;AACzD,MAAM,WAAW,kBAAkB;IACjC,+DAA+D;IAC/D,EAAE,EAAE,gBAAgB,CAAC;IACrB,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,IAAI,EAAE,kBAAkB,CAAC;IACzB;;;;;OAKG;IACH,gBAAgB,IAAI,MAAM,CAAC;IAC3B;;;OAGG;IACH,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;;;OAOG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,0BAA2B,SAAQ,kBAAkB;IACpE,IAAI,EAAE,UAAU,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,0BAA2B,SAAQ,kBAAkB;IACpE,IAAI,EAAE,UAAU,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,0BAA0B,GAAG,0BAA0B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code-info.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/claude-code-info.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAkB/D,eAAO,MAAM,qBAAqB,EAAE,0BAUnC,CAAC"}
1
+ {"version":3,"file":"claude-code-info.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/claude-code-info.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAkB/D,eAAO,MAAM,qBAAqB,EAAE,0BAYnC,CAAC"}
@@ -17,6 +17,8 @@ export const claudeCodeAdapterInfo = {
17
17
  id: "claude-code",
18
18
  label: "Claude Code",
19
19
  mode: "embedded",
20
+ // Claude Code reads images referenced by path in a prompt.
21
+ imageInput: true,
20
22
  installMcpPrompt() {
21
23
  return INSTALL_MCP_PROMPT;
22
24
  },
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code-info.js","sourceRoot":"","sources":["../../../src/core/adapters/claude-code-info.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,kBAAkB,GAAG;IACzB,+CAA+C;IAC/C,EAAE;IACF,oDAAoD;IACpD,EAAE;IACF,oDAAoD;IACpD,EAAE;IACF,yEAAyE;IACzE,uEAAuE;IACvE,yEAAyE;IACzE,0EAA0E;IAC1E,0EAA0E;IAC1E,uDAAuD;CACxD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,qBAAqB,GAA+B;IAC/D,EAAE,EAAE,aAAa;IACjB,KAAK,EAAE,aAAa;IACpB,IAAI,EAAE,UAAU;IAChB,gBAAgB;QACd,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,eAAe;QACb,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"claude-code-info.js","sourceRoot":"","sources":["../../../src/core/adapters/claude-code-info.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,kBAAkB,GAAG;IACzB,+CAA+C;IAC/C,EAAE;IACF,oDAAoD;IACpD,EAAE;IACF,oDAAoD;IACpD,EAAE;IACF,yEAAyE;IACzE,uEAAuE;IACvE,yEAAyE;IACzE,0EAA0E;IAC1E,0EAA0E;IAC1E,uDAAuD;CACxD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,qBAAqB,GAA+B;IAC/D,EAAE,EAAE,aAAa;IACjB,KAAK,EAAE,aAAa;IACpB,IAAI,EAAE,UAAU;IAChB,2DAA2D;IAC3D,UAAU,EAAE,IAAI;IAChB,gBAAgB;QACd,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,eAAe;QACb,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;CACF,CAAC"}
@@ -10,12 +10,16 @@ export interface ClaudeCodeAdapterOptions {
10
10
  binary?: string;
11
11
  /** Overridable for tests. Defaults to the real home directory. */
12
12
  homeDir?: string;
13
+ /** Overridable for tests. Max transcript size (bytes) to read in full for an
14
+ * exact turn count; larger files are read only at head+tail. */
15
+ fullScanMaxBytes?: number;
13
16
  }
14
17
  export declare class ClaudeCodeAdapter implements HarnessAdapter {
15
18
  readonly id: "claude-code";
16
19
  readonly eventSource: "hooks";
17
20
  private readonly binary;
18
21
  private readonly homeDir;
22
+ private readonly fullScanMaxBytes;
19
23
  constructor(options?: ClaudeCodeAdapterOptions);
20
24
  doctor(): Promise<DoctorCheck[]>;
21
25
  launch(opts: LaunchOpts): SpawnSpec;
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/claude-code.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,UAAU,EACV,cAAc,EACd,SAAS,EACV,MAAM,uBAAuB,CAAC;AAiB/B,MAAM,WAAW,wBAAwB;IACvC,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA8FD,qBAAa,iBAAkB,YAAW,cAAc;IACtD,QAAQ,CAAC,EAAE,EAAG,aAAa,CAAU;IACrC,QAAQ,CAAC,WAAW,EAAG,OAAO,CAAU;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,GAAE,wBAA6B;IAK5C,MAAM,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAetC,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS;IAgBnC,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,SAAS;IAa3D;;;;;;;;;;;;;OAaG;IACH,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS;IAmBjC,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CA8B/D;AAcD,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,cAAc,CAE1F"}
1
+ {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/claude-code.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,UAAU,EACV,cAAc,EACd,SAAS,EACV,MAAM,uBAAuB,CAAC;AA2B/B,MAAM,WAAW,wBAAwB;IACvC,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;qEACiE;IACjE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAwMD,qBAAa,iBAAkB,YAAW,cAAc;IACtD,QAAQ,CAAC,EAAE,EAAG,aAAa,CAAU;IACrC,QAAQ,CAAC,WAAW,EAAG,OAAO,CAAU;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;gBAE9B,OAAO,GAAE,wBAA6B;IAM5C,MAAM,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAetC,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS;IAgBnC,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,SAAS;IAa3D;;;;;;;;;;;;;OAaG;IACH,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS;IAmBjC,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CAsC/D;AAcD,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,cAAc,CAE1F"}
@@ -20,9 +20,18 @@ function encodeProjectPath(cwd) {
20
20
  return normalized.replace(/:/g, "").replace(/[/.]/g, "-");
21
21
  }
22
22
  const execFileAsync = promisify(execFile);
23
- /** Bytes read from the tail of a transcript file. Files can be 100MB+; the
24
- * summary/title we need is always near the end. */
25
- const TRANSCRIPT_TAIL_BYTES = 65536;
23
+ /** Bytes read from each end of a transcript that's too large to fully scan.
24
+ * The head holds the first prompt (a title fallback); the tail holds the
25
+ * latest ai-title/summary and the most recent git branch. */
26
+ const TRANSCRIPT_WINDOW_BYTES = 65536;
27
+ /**
28
+ * Transcripts at or below this size are read in full, which yields an exact
29
+ * turn count and a title drawn from the whole session. Larger transcripts
30
+ * (Claude's JSONL can reach 100MB+) are read only at head+tail — scanning them
31
+ * on every history-dropdown open would be prohibitively slow — so their turn
32
+ * count is reported as unknown rather than a wrong partial count.
33
+ */
34
+ const DEFAULT_FULL_SCAN_MAX_BYTES = 5242880; // 5 MiB
26
35
  function extractTextFromContent(content) {
27
36
  if (typeof content === "string")
28
37
  return content;
@@ -36,38 +45,17 @@ function extractTextFromContent(content) {
36
45
  }
37
46
  return undefined;
38
47
  }
39
- /** Read only the tail of a (possibly huge) JSONL transcript file. */
40
- async function readTranscriptTail(filePath, maxBytes = TRANSCRIPT_TAIL_BYTES) {
41
- let content;
42
- let startedMidFile = false;
43
- try {
44
- const { size } = await stat(filePath);
45
- if (size <= maxBytes) {
46
- content = await readFile(filePath, "utf8");
47
- }
48
- else {
49
- const offset = size - maxBytes;
50
- const handle = await open(filePath, "r");
51
- try {
52
- const buffer = Buffer.allocUnsafe(maxBytes);
53
- await handle.read(buffer, 0, maxBytes, offset);
54
- content = buffer.toString("utf8");
55
- startedMidFile = true;
56
- }
57
- finally {
58
- await handle.close();
59
- }
60
- }
61
- }
62
- catch {
63
- return [];
64
- }
65
- // A tail read may start mid-line; drop the (possibly truncated) first line.
66
- const firstNewline = content.indexOf("\n");
67
- const safeContent = startedMidFile && firstNewline >= 0 ? content.slice(firstNewline + 1) : content;
48
+ /** Parse the JSONL lines of a transcript slice into entries, skipping blank or
49
+ * malformed lines. `dropFirst`/`dropLast` discard a possibly-truncated edge
50
+ * line when the slice was cut mid-file (tail starts mid-line; head ends
51
+ * mid-line). */
52
+ function parseTranscriptLines(text, { dropFirst = false, dropLast = false } = {}) {
53
+ const lines = text.split("\n");
54
+ const start = dropFirst ? 1 : 0;
55
+ const end = dropLast ? lines.length - 1 : lines.length;
68
56
  const entries = [];
69
- for (const line of safeContent.split("\n")) {
70
- const trimmed = line.trim();
57
+ for (let i = start; i < end; i++) {
58
+ const trimmed = lines[i]?.trim();
71
59
  if (!trimmed)
72
60
  continue;
73
61
  try {
@@ -77,27 +65,119 @@ async function readTranscriptTail(filePath, maxBytes = TRANSCRIPT_TAIL_BYTES) {
77
65
  }
78
66
  }
79
67
  catch {
80
- // Skip malformed/truncated lines (expected at the start of a tail read).
68
+ // Skip malformed/truncated lines (expected at a sliced file boundary).
81
69
  }
82
70
  }
83
71
  return entries;
84
72
  }
85
- function extractTitle(entries, fallback) {
73
+ /**
74
+ * Read a transcript for summarization. Small files are read in full (exact
75
+ * turn count, title from the whole session); large files are read only at
76
+ * head+tail windows so the history dropdown never has to parse a 100MB file.
77
+ */
78
+ async function scanTranscript(filePath, size, fullScanMaxBytes) {
79
+ if (size <= fullScanMaxBytes) {
80
+ let content;
81
+ try {
82
+ content = await readFile(filePath, "utf8");
83
+ }
84
+ catch {
85
+ return { head: [], tail: [] };
86
+ }
87
+ const all = parseTranscriptLines(content);
88
+ return { head: all, tail: all, messageCount: countUserTurns(all) };
89
+ }
90
+ const window = TRANSCRIPT_WINDOW_BYTES;
91
+ let head = [];
92
+ let tail = [];
93
+ try {
94
+ const handle = await open(filePath, "r");
95
+ try {
96
+ const headBuf = Buffer.allocUnsafe(window);
97
+ await handle.read(headBuf, 0, window, 0);
98
+ // The head window likely ends mid-line — drop that partial last line.
99
+ head = parseTranscriptLines(headBuf.toString("utf8"), { dropLast: true });
100
+ const tailBuf = Buffer.allocUnsafe(window);
101
+ await handle.read(tailBuf, 0, window, size - window);
102
+ // The tail window likely starts mid-line — drop that partial first line.
103
+ tail = parseTranscriptLines(tailBuf.toString("utf8"), { dropFirst: true });
104
+ }
105
+ finally {
106
+ await handle.close();
107
+ }
108
+ }
109
+ catch {
110
+ return { head: [], tail: [] };
111
+ }
112
+ return { head, tail };
113
+ }
114
+ /** A user entry that represents a real human prompt — not an internal
115
+ * sub-agent turn and not a tool-result echoed back with role "user". */
116
+ function isHumanTurn(entry) {
117
+ if (entry?.type !== "user" || entry.isSidechain === true)
118
+ return false;
119
+ // Newer transcripts tag typed prompts with origin.kind === "human"; older
120
+ // ones omit origin entirely, so accept a missing origin too.
121
+ if (entry.origin?.kind && entry.origin.kind !== "human")
122
+ return false;
123
+ // Tool results carry no plain text (their content is tool_result blocks);
124
+ // requiring extractable text excludes them.
125
+ return Boolean(extractTextFromContent(entry.message?.content)?.trim());
126
+ }
127
+ function countUserTurns(entries) {
128
+ return entries.reduce((n, entry) => (isHumanTurn(entry) ? n + 1 : n), 0);
129
+ }
130
+ /** Latest non-empty value of `field` on entries of type `type`, scanning
131
+ * newest-first. Used for ai-title / summary (title candidates). */
132
+ function latestValue(entries, type, field) {
86
133
  for (let i = entries.length - 1; i >= 0; i--) {
87
134
  const entry = entries[i];
88
- if (entry?.type === "summary" && typeof entry.summary === "string" && entry.summary.trim()) {
89
- return entry.summary.trim();
135
+ if (entry?.type === type && typeof entry[field] === "string" && entry[field].trim()) {
136
+ return entry[field].trim();
90
137
  }
91
138
  }
92
- for (const entry of entries) {
93
- if (entry?.type !== "user")
139
+ return undefined;
140
+ }
141
+ function truncateTitle(text) {
142
+ return text.length > 120 ? `${text.slice(0, 120)}...` : text;
143
+ }
144
+ /**
145
+ * A human-readable title for a resumable session — never a bare UUID. In
146
+ * preference order: Claude's own generated title (`ai-title`), the older
147
+ * compaction `summary`, then the first human prompt. The latest ai-title /
148
+ * summary is preferred, and it lands in the tail window on long sessions
149
+ * (that's why we scan the tail); the first prompt is a head-window fallback
150
+ * for transcripts that have neither. Only when a session has no title, no
151
+ * summary, and no human prompt at all do we use `fallback`.
152
+ */
153
+ function extractTitle(head, tail, fallback) {
154
+ const aiTitle = latestValue(tail, "ai-title", "aiTitle") ?? latestValue(head, "ai-title", "aiTitle");
155
+ if (aiTitle)
156
+ return truncateTitle(aiTitle);
157
+ const summary = latestValue(tail, "summary", "summary") ?? latestValue(head, "summary", "summary");
158
+ if (summary)
159
+ return truncateTitle(summary);
160
+ for (const entry of head) {
161
+ if (!isHumanTurn(entry))
94
162
  continue;
95
163
  const text = extractTextFromContent(entry.message?.content)?.trim();
96
164
  if (text)
97
- return text.length > 120 ? `${text.slice(0, 120)}...` : text;
165
+ return truncateTitle(text);
98
166
  }
99
167
  return fallback;
100
168
  }
169
+ /** Most recent git branch recorded on a message entry, newest-first (tail then
170
+ * head), or undefined when the transcript records none. */
171
+ function extractGitBranch(head, tail) {
172
+ for (const entries of [tail, head]) {
173
+ for (let i = entries.length - 1; i >= 0; i--) {
174
+ const branch = entries[i]?.gitBranch;
175
+ if (typeof branch === "string" && branch.trim())
176
+ return branch.trim();
177
+ }
178
+ }
179
+ return undefined;
180
+ }
101
181
  function buildConfigArgs(opts) {
102
182
  const args = [];
103
183
  if (opts.settingsFile)
@@ -114,6 +194,7 @@ export class ClaudeCodeAdapter {
114
194
  this.eventSource = "hooks";
115
195
  this.binary = options.binary ?? "claude";
116
196
  this.homeDir = options.homeDir ?? homedir();
197
+ this.fullScanMaxBytes = options.fullScanMaxBytes ?? DEFAULT_FULL_SCAN_MAX_BYTES;
117
198
  }
118
199
  async doctor() {
119
200
  try {
@@ -206,18 +287,23 @@ export class ClaudeCodeAdapter {
206
287
  continue;
207
288
  const filePath = join(projectDir, file);
208
289
  const agentSessionId = basename(file, ".jsonl");
209
- const transcript = await readTranscriptTail(filePath);
210
- if (transcript.length === 0)
211
- continue;
212
290
  const fileStat = await stat(filePath).catch(() => undefined);
213
- const lastActiveAt = fileStat ? fileStat.mtime.toISOString() : new Date(0).toISOString();
291
+ if (!fileStat)
292
+ continue;
293
+ const { head, tail, messageCount } = await scanTranscript(filePath, fileStat.size, this.fullScanMaxBytes);
294
+ if (head.length === 0 && tail.length === 0)
295
+ continue;
214
296
  summaries.push({
215
297
  agentSessionId,
216
298
  harness: "claude-code",
217
299
  cwd,
218
- title: extractTitle(transcript, agentSessionId),
219
- lastActiveAt,
300
+ // Never a bare UUID: falls back to the directory basename, not the
301
+ // session id, when a session has no title/summary/prompt at all.
302
+ title: extractTitle(head, tail, basename(cwd) || agentSessionId),
303
+ lastActiveAt: fileStat.mtime.toISOString(),
220
304
  source: "transcript",
305
+ gitBranch: extractGitBranch(head, tail),
306
+ messageCount,
221
307
  });
222
308
  }
223
309
  return summaries.sort((a, b) => (a.lastActiveAt < b.lastActiveAt ? 1 : -1));
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/core/adapters/claude-code.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/core/adapters/claude-code.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"codex-info.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/codex-info.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAuB/D,eAAO,MAAM,gBAAgB,EAAE,0BAU9B,CAAC"}
1
+ {"version":3,"file":"codex-info.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/codex-info.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAuB/D,eAAO,MAAM,gBAAgB,EAAE,0BAY9B,CAAC"}
@@ -22,6 +22,8 @@ export const codexAdapterInfo = {
22
22
  id: "codex",
23
23
  label: "Codex CLI",
24
24
  mode: "embedded",
25
+ // Codex reads images referenced by path in a prompt.
26
+ imageInput: true,
25
27
  installMcpPrompt() {
26
28
  return INSTALL_MCP_PROMPT;
27
29
  },
@@ -1 +1 @@
1
- {"version":3,"file":"codex-info.js","sourceRoot":"","sources":["../../../src/core/adapters/codex-info.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,kBAAkB,GAAG;IACzB,iDAAiD;IACjD,EAAE;IACF,0EAA0E;IAC1E,aAAa;IACb,EAAE;IACF,mDAAmD;IACnD,EAAE;IACF,yDAAyD;IACzD,EAAE;IACF,6BAA6B;IAC7B,oBAAoB;IACpB,iCAAiC;IACjC,EAAE;IACF,yEAAyE;IACzE,kCAAkC;IAClC,yEAAyE;IACzE,gBAAgB;CACjB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,gBAAgB,GAA+B;IAC1D,EAAE,EAAE,OAAO;IACX,KAAK,EAAE,WAAW;IAClB,IAAI,EAAE,UAAU;IAChB,gBAAgB;QACd,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,eAAe;QACb,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"codex-info.js","sourceRoot":"","sources":["../../../src/core/adapters/codex-info.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,kBAAkB,GAAG;IACzB,iDAAiD;IACjD,EAAE;IACF,0EAA0E;IAC1E,aAAa;IACb,EAAE;IACF,mDAAmD;IACnD,EAAE;IACF,yDAAyD;IACzD,EAAE;IACF,6BAA6B;IAC7B,oBAAoB;IACpB,iCAAiC;IACjC,EAAE;IACF,yEAAyE;IACzE,kCAAkC;IAClC,yEAAyE;IACzE,gBAAgB;CACjB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,gBAAgB,GAA+B;IAC1D,EAAE,EAAE,OAAO;IACX,KAAK,EAAE,WAAW;IAClB,IAAI,EAAE,UAAU;IAChB,qDAAqD;IACrD,UAAU,EAAE,IAAI;IAChB,gBAAgB;QACd,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,eAAe;QACb,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"conductor.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/conductor.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAoB/D;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,OAAO,GAAE,MAAqB,GAC7B,MAAM,EAAE,CAMV;AAED,eAAO,MAAM,oBAAoB,EAAE,0BAgBlC,CAAC"}
1
+ {"version":3,"file":"conductor.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/conductor.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAoB/D;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,OAAO,GAAE,MAAqB,GAC7B,MAAM,EAAE,CAMV;AAED,eAAO,MAAM,oBAAoB,EAAE,0BAkBlC,CAAC"}
@@ -40,6 +40,8 @@ export const conductorAdapterInfo = {
40
40
  id: "conductor",
41
41
  label: "Conductor",
42
42
  mode: "external",
43
+ // External companion app — no pty to relay an image into.
44
+ imageInput: false,
43
45
  installMcpPrompt() {
44
46
  return INSTALL_MCP_PROMPT;
45
47
  },
@@ -1 +1 @@
1
- {"version":3,"file":"conductor.js","sourceRoot":"","sources":["../../../src/core/adapters/conductor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,MAAM,kBAAkB,GAAG;IACzB,6CAA6C;IAC7C,EAAE;IACF,0EAA0E;IAC1E,yEAAyE;IACzE,KAAK;IACL,EAAE;IACF,mCAAmC;IACnC,EAAE;IACF,oEAAoE;IACpE,EAAE;IACF,oEAAoE;IACpE,0EAA0E;IAC1E,+DAA+D;IAC/D,gEAAgE;IAChE,iEAAiE;CAClE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,WAA4B,OAAO,CAAC,QAAQ,EAC5C,UAAkB,EAAE,CAAC,OAAO,EAAE;IAE9B,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO;QACL,6BAA6B;QAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,CAAC;KACpD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAA+B;IAC9D,EAAE,EAAE,WAAW;IACf,KAAK,EAAE,WAAW;IAClB,IAAI,EAAE,UAAU;IAChB,gBAAgB;QACd,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,KAAK,CAAC,eAAe;QACnB,OAAO,sBAAsB,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;YACjD,IAAI,CAAC;gBACH,OAAO,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAClC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"conductor.js","sourceRoot":"","sources":["../../../src/core/adapters/conductor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,MAAM,kBAAkB,GAAG;IACzB,6CAA6C;IAC7C,EAAE;IACF,0EAA0E;IAC1E,yEAAyE;IACzE,KAAK;IACL,EAAE;IACF,mCAAmC;IACnC,EAAE;IACF,oEAAoE;IACpE,EAAE;IACF,oEAAoE;IACpE,0EAA0E;IAC1E,+DAA+D;IAC/D,gEAAgE;IAChE,iEAAiE;CAClE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,WAA4B,OAAO,CAAC,QAAQ,EAC5C,UAAkB,EAAE,CAAC,OAAO,EAAE;IAE9B,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO;QACL,6BAA6B;QAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,CAAC;KACpD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAA+B;IAC9D,EAAE,EAAE,WAAW;IACf,KAAK,EAAE,WAAW;IAClB,IAAI,EAAE,UAAU;IAChB,0DAA0D;IAC1D,UAAU,EAAE,KAAK;IACjB,gBAAgB;QACd,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,KAAK,CAAC,eAAe;QACnB,OAAO,sBAAsB,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;YACjD,IAAI,CAAC;gBACH,OAAO,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAClC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/opencode.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAyB/D,eAAO,MAAM,mBAAmB,EAAE,0BAWjC,CAAC"}
1
+ {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/opencode.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAyB/D,eAAO,MAAM,mBAAmB,EAAE,0BAajC,CAAC"}
@@ -25,6 +25,8 @@ export const opencodeAdapterInfo = {
25
25
  label: "opencode",
26
26
  mode: "embedded",
27
27
  experimental: true,
28
+ // Scaffold adapter — image relay not yet exercised, so not offered.
29
+ imageInput: false,
28
30
  installMcpPrompt() {
29
31
  return INSTALL_MCP_PROMPT;
30
32
  },
@@ -1 +1 @@
1
- {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/core/adapters/opencode.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,kBAAkB,GAAG;IACzB,4CAA4C;IAC5C,EAAE;IACF,wEAAwE;IACxE,+CAA+C;IAC/C,EAAE;IACF,MAAM;IACN,eAAe;IACf,wBAAwB;IACxB,2BAA2B;IAC3B,mDAAmD;IACnD,0BAA0B;IAC1B,UAAU;IACV,QAAQ;IACR,MAAM;IACN,EAAE;IACF,yEAAyE;IACzE,kCAAkC;IAClC,sEAAsE;IACtE,sBAAsB;CACvB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,mBAAmB,GAA+B;IAC7D,EAAE,EAAE,UAAU;IACd,KAAK,EAAE,UAAU;IACjB,IAAI,EAAE,UAAU;IAChB,YAAY,EAAE,IAAI;IAClB,gBAAgB;QACd,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,eAAe;QACb,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/core/adapters/opencode.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,kBAAkB,GAAG;IACzB,4CAA4C;IAC5C,EAAE;IACF,wEAAwE;IACxE,+CAA+C;IAC/C,EAAE;IACF,MAAM;IACN,eAAe;IACf,wBAAwB;IACxB,2BAA2B;IAC3B,mDAAmD;IACnD,0BAA0B;IAC1B,UAAU;IACV,QAAQ;IACR,MAAM;IACN,EAAE;IACF,yEAAyE;IACzE,kCAAkC;IAClC,sEAAsE;IACtE,sBAAsB;CACvB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,mBAAmB,GAA+B;IAC7D,EAAE,EAAE,UAAU;IACd,KAAK,EAAE,UAAU;IACjB,IAAI,EAAE,UAAU;IAChB,YAAY,EAAE,IAAI;IAClB,oEAAoE;IACpE,UAAU,EAAE,KAAK;IACjB,gBAAgB;QACd,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,eAAe;QACb,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"pi.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/pi.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAc/D,eAAO,MAAM,aAAa,EAAE,0BAW3B,CAAC"}
1
+ {"version":3,"file":"pi.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/pi.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAc/D,eAAO,MAAM,aAAa,EAAE,0BAa3B,CAAC"}
@@ -14,6 +14,8 @@ export const piAdapterInfo = {
14
14
  label: "pi",
15
15
  mode: "embedded",
16
16
  experimental: true,
17
+ // Scaffold adapter — image relay not yet exercised, so not offered.
18
+ imageInput: false,
17
19
  installMcpPrompt() {
18
20
  return INSTALL_MCP_PROMPT;
19
21
  },
@@ -1 +1 @@
1
- {"version":3,"file":"pi.js","sourceRoot":"","sources":["../../../src/core/adapters/pi.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,kBAAkB,GAAG;IACzB,sCAAsC;IACtC,EAAE;IACF,yEAAyE;IACzE,2EAA2E;IAC3E,oEAAoE;IACpE,qEAAqE;IACrE,oEAAoE;IACpE,yDAAyD;CAC1D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,aAAa,GAA+B;IACvD,EAAE,EAAE,IAAI;IACR,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,UAAU;IAChB,YAAY,EAAE,IAAI;IAClB,gBAAgB;QACd,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,eAAe;QACb,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"pi.js","sourceRoot":"","sources":["../../../src/core/adapters/pi.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,kBAAkB,GAAG;IACzB,sCAAsC;IACtC,EAAE;IACF,yEAAyE;IACzE,2EAA2E;IAC3E,oEAAoE;IACpE,qEAAqE;IACrE,oEAAoE;IACpE,yDAAyD;CAC1D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,aAAa,GAA+B;IACvD,EAAE,EAAE,IAAI;IACR,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,UAAU;IAChB,YAAY,EAAE,IAAI;IAClB,oEAAoE;IACpE,UAAU,EAAE,KAAK;IACjB,gBAAgB;QACd,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,eAAe;QACb,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;CACF,CAAC"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Canvas run-state: live step lighting for the sandboxed iframe, plus the
3
+ * reverse click channel (iframe → parent).
4
+ *
5
+ * HOW IT WORKS — the stringify-into-iframe pattern
6
+ * ─────────────────────────────────────────────────
7
+ * The canvas iframe is served with `sandbox="allow-scripts"` which makes it
8
+ * an opaque origin. The parent page cannot reach its DOM via any API — the
9
+ * ONLY communication channel is `window.postMessage`.
10
+ *
11
+ * To apply live run state to the SVG nodes, we need code that runs INSIDE the
12
+ * iframe's document. We cannot bundle a separate script for it (no fetch
13
+ * inside a sandboxed iframe, no src="" script). Instead, `canvas-template.ts`
14
+ * stringifies the functions below with `.toString()` and injects them
15
+ * directly into the `<script>` block that `renderCanvasDocument` emits.
16
+ *
17
+ * REVERSE CHANNEL (iframe → parent)
18
+ * ───────────────────────────────────
19
+ * `bootCanvasNodeClicks` adds a single delegated click listener on
20
+ * `document`. When a click lands inside a `.canvas-node[data-step-name]`
21
+ * element, it posts `{ type: "sapiom:node-click", stepName }` to the parent
22
+ * via `window.parent.postMessage`. The parent listens for this and opens the
23
+ * step-detail panel.
24
+ *
25
+ * CONSTRAINTS on these functions
26
+ * ────────────────────────────────
27
+ * • No TypeScript-only syntax inside the function bodies (they are stringified
28
+ * as-is and executed in a plain-JS browser context with no transpiler).
29
+ * • No imports or module-level references (same reason).
30
+ * • All functions must be top-level `function` declarations (not arrow
31
+ * functions, not const lambdas) so they are referenceable by name after
32
+ * stringification.
33
+ * • `runStateNodeClass` is the one pure piece (no DOM); it is also exported and
34
+ * unit-tested in `canvas-run-state.test.ts`. The other functions are DOM-only
35
+ * and not unit-testable in a Node/Vitest environment.
36
+ */
37
+ export type RunStepStatus = "pending" | "running" | "passed" | "failed";
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 declare function runStateNodeClass(status: string): string;
44
+ /**
45
+ * DOM: apply a run-state message to a canvas document.
46
+ *
47
+ * For each step, finds the matching `[data-step-name]` node (falling back to
48
+ * `[data-step-id]`), strips the four is-* state classes, and applies the one
49
+ * matching the step's current status. Also updates the first `.canvas-badge`
50
+ * inside `.canvas-title-row`: while the run is active it shows "running" or
51
+ * "testing" (with the `canvas-badge--active` styling class); on completion it
52
+ * restores the original text from `data-idle-label`.
53
+ *
54
+ * Browser-only — not unit-tested (no jsdom in the harness test env).
55
+ * Stringified into the iframe template by `canvas-template.ts`.
56
+ */
57
+ export declare function applyRunStateToCanvas(doc: Document, msg: {
58
+ steps: Array<{
59
+ name: string;
60
+ id?: string;
61
+ status: string;
62
+ latencyMs?: number;
63
+ }>;
64
+ status: string;
65
+ target: string;
66
+ }): void;
67
+ /**
68
+ * Wires the postMessage listener.
69
+ *
70
+ * Called once at the bottom of the injected `<script>` block. Listens for
71
+ * `{ type: "sapiom:run-state", steps, status, target }` messages from the
72
+ * parent page. The type guard is the only security boundary needed: because
73
+ * the iframe is opaque-origin, no other page can impersonate the parent, and
74
+ * the parent posts to `"*"` (required — we cannot know the opaque origin).
75
+ *
76
+ * Stringified into the iframe template by `canvas-template.ts`.
77
+ */
78
+ export declare function bootCanvasRunState(): void;
79
+ /**
80
+ * Wires the reverse click channel: iframe → parent.
81
+ *
82
+ * Adds ONE delegated click listener on `document`. When the click target is
83
+ * inside a `.canvas-node[data-step-name]` element, reads the `data-step-name`
84
+ * attribute and posts `{ type: "sapiom:node-click", stepName }` to the parent
85
+ * window. The parent validates the message type and maps the step name to the
86
+ * current RunView to open the step-detail panel.
87
+ *
88
+ * Uses a delegated listener (one listener on document) rather than per-node
89
+ * listeners so it works even when the SVG is replaced (e.g. after a
90
+ * canvas.reload), without needing to re-wire.
91
+ *
92
+ * Stringified into the iframe template by `canvas-template.ts`.
93
+ */
94
+ export declare function bootCanvasNodeClicks(): void;
95
+ //# sourceMappingURL=canvas-run-state.d.ts.map
@@ -0,0 +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,CA+CN;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAMzC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAc3C"}