aicodeman 1.42.0 → 1.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/README.md +10 -10
  2. package/dist/claude-session-title.d.ts +6 -4
  3. package/dist/claude-session-title.d.ts.map +1 -1
  4. package/dist/claude-session-title.js +6 -4
  5. package/dist/claude-session-title.js.map +1 -1
  6. package/dist/config/cli-registry/patterns.d.ts +1 -1
  7. package/dist/config/cli-registry/patterns.d.ts.map +1 -1
  8. package/dist/config/cli-registry/patterns.js +3 -0
  9. package/dist/config/cli-registry/patterns.js.map +1 -1
  10. package/dist/config/cli-registry/schema.d.ts +1 -0
  11. package/dist/config/cli-registry/schema.d.ts.map +1 -1
  12. package/dist/config/cli-registry/schema.js +5 -3
  13. package/dist/config/cli-registry/schema.js.map +1 -1
  14. package/dist/config/cli-registry/stock.d.ts.map +1 -1
  15. package/dist/config/cli-registry/stock.js +255 -1
  16. package/dist/config/cli-registry/stock.js.map +1 -1
  17. package/dist/config/cli-registry/types.d.ts +11 -3
  18. package/dist/config/cli-registry/types.d.ts.map +1 -1
  19. package/dist/hooks-config.d.ts +9 -0
  20. package/dist/hooks-config.d.ts.map +1 -1
  21. package/dist/hooks-config.js +12 -0
  22. package/dist/hooks-config.js.map +1 -1
  23. package/dist/mcp-sync-targets.d.ts +6 -3
  24. package/dist/mcp-sync-targets.d.ts.map +1 -1
  25. package/dist/mcp-sync-targets.js +6 -3
  26. package/dist/mcp-sync-targets.js.map +1 -1
  27. package/dist/mux-interface.d.ts +7 -3
  28. package/dist/mux-interface.d.ts.map +1 -1
  29. package/dist/session-cli-registry-bridge.d.ts +2 -1
  30. package/dist/session-cli-registry-bridge.d.ts.map +1 -1
  31. package/dist/session-cli-registry-bridge.js.map +1 -1
  32. package/dist/session.d.ts +23 -8
  33. package/dist/session.d.ts.map +1 -1
  34. package/dist/session.js +38 -9
  35. package/dist/session.js.map +1 -1
  36. package/dist/tmux-manager.d.ts +3 -2
  37. package/dist/tmux-manager.d.ts.map +1 -1
  38. package/dist/tmux-manager.js +4 -2
  39. package/dist/tmux-manager.js.map +1 -1
  40. package/dist/types/session.d.ts +32 -4
  41. package/dist/types/session.d.ts.map +1 -1
  42. package/dist/types/session.js +2 -1
  43. package/dist/types/session.js.map +1 -1
  44. package/dist/utils/cli-installed-probes.d.ts +1 -1
  45. package/dist/utils/cli-installed-probes.d.ts.map +1 -1
  46. package/dist/utils/cli-installed-probes.js +4 -2
  47. package/dist/utils/cli-installed-probes.js.map +1 -1
  48. package/dist/utils/copilot-cli-resolver.d.ts +48 -0
  49. package/dist/utils/copilot-cli-resolver.d.ts.map +1 -0
  50. package/dist/utils/copilot-cli-resolver.js +112 -0
  51. package/dist/utils/copilot-cli-resolver.js.map +1 -0
  52. package/dist/utils/index.d.ts +1 -0
  53. package/dist/utils/index.d.ts.map +1 -1
  54. package/dist/utils/index.js +1 -0
  55. package/dist/utils/index.js.map +1 -1
  56. package/dist/web/case-path.d.ts +4 -2
  57. package/dist/web/case-path.d.ts.map +1 -1
  58. package/dist/web/case-path.js +13 -4
  59. package/dist/web/case-path.js.map +1 -1
  60. package/dist/web/public/admin-ui.js.gz +0 -0
  61. package/dist/web/public/api-client.c9b1cddc.js.gz +0 -0
  62. package/dist/web/public/{app.f04bb2a5.js → app.ae50029a.js} +7 -7
  63. package/dist/web/public/app.ae50029a.js.br +0 -0
  64. package/dist/web/public/app.ae50029a.js.gz +0 -0
  65. package/dist/web/public/approvals-ui.js.gz +0 -0
  66. package/dist/web/public/{constants.12b0c247.js → constants.e5e588db.js} +156 -2
  67. package/dist/web/public/constants.e5e588db.js.br +0 -0
  68. package/dist/web/public/constants.e5e588db.js.gz +0 -0
  69. package/dist/web/public/cron-ui.js.gz +0 -0
  70. package/dist/web/public/entrance-animations.js.gz +0 -0
  71. package/dist/web/public/git-status-ui.js.gz +0 -0
  72. package/dist/web/public/home-sessions.js.gz +0 -0
  73. package/dist/web/public/host-wake-ui.js.gz +0 -0
  74. package/dist/web/public/i18n.8f291f06.js +2 -0
  75. package/dist/web/public/i18n.8f291f06.js.br +0 -0
  76. package/dist/web/public/i18n.8f291f06.js.gz +0 -0
  77. package/dist/web/public/{image-input.fcdcb46c.js → image-input.941386e7.js} +24 -14
  78. package/dist/web/public/image-input.941386e7.js.br +0 -0
  79. package/dist/web/public/image-input.941386e7.js.gz +0 -0
  80. package/dist/web/public/index.html +23 -14
  81. package/dist/web/public/index.html.br +0 -0
  82. package/dist/web/public/index.html.gz +0 -0
  83. package/dist/web/public/input-cjk.8bc46081.js.gz +0 -0
  84. package/dist/web/public/{keyboard-accessory.b42f539b.js → keyboard-accessory.c283e827.js} +28 -17
  85. package/dist/web/public/keyboard-accessory.c283e827.js.br +0 -0
  86. package/dist/web/public/keyboard-accessory.c283e827.js.gz +0 -0
  87. package/dist/web/public/mobile-handlers.0ef9c311.js.gz +0 -0
  88. package/dist/web/public/mobile-ime-preview.2dbaf262.js.gz +0 -0
  89. package/dist/web/public/mobile-overview.js +1 -0
  90. package/dist/web/public/mobile-overview.js.br +0 -0
  91. package/dist/web/public/mobile-overview.js.gz +0 -0
  92. package/dist/web/public/mobile.13514863.css +1 -0
  93. package/dist/web/public/mobile.13514863.css.br +0 -0
  94. package/dist/web/public/mobile.13514863.css.gz +0 -0
  95. package/dist/web/public/notification-manager.feb82c04.js.gz +0 -0
  96. package/dist/web/public/orchestrator-panel.js.gz +0 -0
  97. package/dist/web/public/{panels-ui.73ec0137.js → panels-ui.b7bfb9da.js} +6 -6
  98. package/dist/web/public/panels-ui.b7bfb9da.js.br +0 -0
  99. package/dist/web/public/panels-ui.b7bfb9da.js.gz +0 -0
  100. package/dist/web/public/ralph-panel.b350e2ef.js.gz +0 -0
  101. package/dist/web/public/ralph-wizard.b6c0dd19.js.gz +0 -0
  102. package/dist/web/public/readmymind-ui.js.gz +0 -0
  103. package/dist/web/public/reboot-restore-ui.js.gz +0 -0
  104. package/dist/web/public/respawn-ui.d7adcf6a.js.gz +0 -0
  105. package/dist/web/public/sanitize-html.e7147e76.js.gz +0 -0
  106. package/dist/web/public/security-notices.json +21 -0
  107. package/dist/web/public/session-lineage.js.gz +0 -0
  108. package/dist/web/public/{session-ui.d52ff6aa.js → session-ui.be076c88.js} +2 -2
  109. package/dist/web/public/session-ui.be076c88.js.br +0 -0
  110. package/dist/web/public/session-ui.be076c88.js.gz +0 -0
  111. package/dist/web/public/{settings-ui.3a22bd2a.js → settings-ui.fc4cc50a.js} +2 -2
  112. package/dist/web/public/settings-ui.fc4cc50a.js.br +0 -0
  113. package/dist/web/public/settings-ui.fc4cc50a.js.gz +0 -0
  114. package/dist/web/public/spreadsheet-preview-worker.js.gz +0 -0
  115. package/dist/web/public/spreadsheet-preview.75c751de.js.gz +0 -0
  116. package/dist/web/public/spreadsheet-xlsx-core.js.gz +0 -0
  117. package/dist/web/public/styles.dcfa907f.css +1 -0
  118. package/dist/web/public/styles.dcfa907f.css.br +0 -0
  119. package/dist/web/public/styles.dcfa907f.css.gz +0 -0
  120. package/dist/web/public/subagent-windows.07277a58.js.gz +0 -0
  121. package/dist/web/public/sw.js +2 -2
  122. package/dist/web/public/sw.js.br +0 -0
  123. package/dist/web/public/sw.js.gz +0 -0
  124. package/dist/web/public/tab-layout-browser.2d6189f7.js.gz +0 -0
  125. package/dist/web/public/tab-rail-resize.7157e0bd.js.gz +0 -0
  126. package/dist/web/public/terminal-keycode229-recovery.af09f99a.js.gz +0 -0
  127. package/dist/web/public/terminal-split.js.gz +0 -0
  128. package/dist/web/public/terminal-tile.js.gz +0 -0
  129. package/dist/web/public/{terminal-ui.0a7ccc29.js → terminal-ui.ae01a7d1.js} +2 -2
  130. package/dist/web/public/terminal-ui.ae01a7d1.js.br +0 -0
  131. package/dist/web/public/terminal-ui.ae01a7d1.js.gz +0 -0
  132. package/dist/web/public/tile-grid.js +3 -6
  133. package/dist/web/public/tile-grid.js.br +0 -0
  134. package/dist/web/public/tile-grid.js.gz +0 -0
  135. package/dist/web/public/ultracode-panel.js.gz +0 -0
  136. package/dist/web/public/ultracode-windows.js.gz +0 -0
  137. package/dist/web/public/vendor/dompurify.min.js.gz +0 -0
  138. package/dist/web/public/vendor/exceljs.min.js.gz +0 -0
  139. package/dist/web/public/vendor/fflate.min.js.gz +0 -0
  140. package/dist/web/public/vendor/marked.min.js.gz +0 -0
  141. package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
  142. package/dist/web/public/vendor/xterm-addon-serialize.min.js.gz +0 -0
  143. package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
  144. package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
  145. package/dist/web/public/vendor/xterm-predictive-echo.ae5e3d5d.js.gz +0 -0
  146. package/dist/web/public/vendor/xterm-zerolag-input.0b69623c.js.gz +0 -0
  147. package/dist/web/public/vendor/xterm.css.gz +0 -0
  148. package/dist/web/public/vendor/xterm.min.js.gz +0 -0
  149. package/dist/web/public/voice-input.2342c37b.js.gz +0 -0
  150. package/dist/web/public/voice-pcm-worklet.js.gz +0 -0
  151. package/dist/web/public/webview-tabs.js.gz +0 -0
  152. package/dist/web/public/whats-new.json +9 -9
  153. package/dist/web/response-viewer-transcript.d.ts +6 -0
  154. package/dist/web/response-viewer-transcript.d.ts.map +1 -1
  155. package/dist/web/response-viewer-transcript.js +134 -1
  156. package/dist/web/response-viewer-transcript.js.map +1 -1
  157. package/dist/web/routes/mcp-sync-routes.d.ts +4 -4
  158. package/dist/web/routes/mcp-sync-routes.js +4 -4
  159. package/dist/web/routes/session-routes.d.ts +12 -2
  160. package/dist/web/routes/session-routes.d.ts.map +1 -1
  161. package/dist/web/routes/session-routes.js +45 -15
  162. package/dist/web/routes/session-routes.js.map +1 -1
  163. package/dist/web/routes/system-routes.d.ts.map +1 -1
  164. package/dist/web/routes/system-routes.js +11 -0
  165. package/dist/web/routes/system-routes.js.map +1 -1
  166. package/dist/web/schemas.d.ts +13 -0
  167. package/dist/web/schemas.d.ts.map +1 -1
  168. package/dist/web/schemas.js +33 -2
  169. package/dist/web/schemas.js.map +1 -1
  170. package/dist/web/server.d.ts.map +1 -1
  171. package/dist/web/server.js +11 -1
  172. package/dist/web/server.js.map +1 -1
  173. package/package.json +1 -1
  174. package/skills/codeman/SKILL.md +3 -2
  175. package/skills/codeman/reference/endpoints.md +8 -8
  176. package/skills/codeman/reference/messaging.md +5 -5
  177. package/skills/codeman/reference/recipes.md +1 -1
  178. package/skills/codeman/reference/verbs.md +4 -4
  179. package/dist/web/public/app.f04bb2a5.js.br +0 -0
  180. package/dist/web/public/app.f04bb2a5.js.gz +0 -0
  181. package/dist/web/public/constants.12b0c247.js.br +0 -0
  182. package/dist/web/public/constants.12b0c247.js.gz +0 -0
  183. package/dist/web/public/i18n.06659676.js +0 -2
  184. package/dist/web/public/i18n.06659676.js.br +0 -0
  185. package/dist/web/public/i18n.06659676.js.gz +0 -0
  186. package/dist/web/public/image-input.fcdcb46c.js.br +0 -0
  187. package/dist/web/public/image-input.fcdcb46c.js.gz +0 -0
  188. package/dist/web/public/keyboard-accessory.b42f539b.js.br +0 -0
  189. package/dist/web/public/keyboard-accessory.b42f539b.js.gz +0 -0
  190. package/dist/web/public/mobile.2dff1580.css +0 -1
  191. package/dist/web/public/mobile.2dff1580.css.br +0 -0
  192. package/dist/web/public/mobile.2dff1580.css.gz +0 -0
  193. package/dist/web/public/panels-ui.73ec0137.js.br +0 -0
  194. package/dist/web/public/panels-ui.73ec0137.js.gz +0 -0
  195. package/dist/web/public/session-ui.d52ff6aa.js.br +0 -0
  196. package/dist/web/public/session-ui.d52ff6aa.js.gz +0 -0
  197. package/dist/web/public/settings-ui.3a22bd2a.js.br +0 -0
  198. package/dist/web/public/settings-ui.3a22bd2a.js.gz +0 -0
  199. package/dist/web/public/styles.ba6a9b84.css +0 -1
  200. package/dist/web/public/styles.ba6a9b84.css.br +0 -0
  201. package/dist/web/public/styles.ba6a9b84.css.gz +0 -0
  202. package/dist/web/public/terminal-ui.0a7ccc29.js.br +0 -0
  203. package/dist/web/public/terminal-ui.0a7ccc29.js.gz +0 -0
Binary file
Binary file
@@ -1,13 +1,13 @@
1
1
  {
2
- "version": "1.42.0",
2
+ "version": "1.43.0",
3
3
  "highlights": [
4
- "Git worktrees for a case (#625)",
5
- "Codex sessions turn red when Codex asks you something (#624)",
6
- "Prompt uploads take documents (#621)",
7
- "Previous and Next Session are rebindable (#617)",
8
- "A note after each update (#618)",
9
- "Multi-user mode: only admins change server-wide settings",
10
- "Codex submits long prompts (#628)",
11
- "New Claude sessions in an untrusted folder (#634, #635)"
4
+ "Security notices for the CLIs you run",
5
+ "GitHub Copilot CLI is a run mode (#592)",
6
+ "Pin tab names on the CLI (#646, optional)",
7
+ "Antigravity tabs show when they are working (#648)",
8
+ "Custom-folder cases below the cases folder (#567)",
9
+ "A steady WS pill (#647)",
10
+ "Clickable diff and patch files (#644)",
11
+ "Mixed uploads say what they skipped (#651)"
12
12
  ]
13
13
  }
@@ -7,6 +7,12 @@ export interface ResponseViewerTranscriptBlock {
7
7
  text: string;
8
8
  }
9
9
  export declare function isExternalCliTranscriptMode(mode: string | null | undefined): boolean;
10
+ /**
11
+ * Whether this mode's pane is a repainting full-screen TUI whose output stream is absolute cursor
12
+ * moves rather than lines. The segmenter needs the SCREEN for those (tmux capture-pane), because
13
+ * stripping the escapes from the stream concatenates every row into one run of text.
14
+ */
15
+ export declare function transcriptNeedsScreenCapture(mode: string | null | undefined): boolean;
10
16
  export declare function parseExternalCliTranscript(buffer: string, mode: string | null | undefined): ResponseViewerTranscriptBlock[];
11
17
  export declare function getLastTranscriptResponse(blocks: ResponseViewerTranscriptBlock[]): string;
12
18
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"response-viewer-transcript.d.ts","sourceRoot":"","sources":["../../src/web/response-viewer-transcript.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,4BAA4B,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;AAErF,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,4BAA4B,CAAC;IACnC,KAAK,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;IACjD,kGAAkG;IAClG,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AA+PD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEpF;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,6BAA6B,EAAE,CAmFjC;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,6BAA6B,EAAE,GAAG,MAAM,CAKzF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CASpG"}
1
+ {"version":3,"file":"response-viewer-transcript.d.ts","sourceRoot":"","sources":["../../src/web/response-viewer-transcript.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,4BAA4B,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;AAErF,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,4BAA4B,CAAC;IACnC,KAAK,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;IACjD,kGAAkG;IAClG,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAyTD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEpF;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAErF;AAkGD,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,6BAA6B,EAAE,CAsFjC;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,6BAA6B,EAAE,GAAG,MAAM,CAKzF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CASpG"}
@@ -1,7 +1,33 @@
1
1
  // Keep in lockstep with isExternalCliMode() in src/session.ts. Importing it here
2
2
  // would drag node-pty and the whole session layer into this pure module, so the
3
3
  // list is duplicated and test/response-viewer-transcript.test.ts pins the parity.
4
- const EXTERNAL_CLI_MODES = new Set(['codex', 'gemini', 'opencode', 'antigravity', 'pi', 'grok', 'deepseek']);
4
+ const EXTERNAL_CLI_MODES = new Set(['codex', 'gemini', 'opencode', 'antigravity', 'pi', 'grok', 'deepseek', 'copilot']);
5
+ const PANE_DIALECTS = {
6
+ // GitHub Copilot CLI, measured on 1.0.95 inside tmux: ` ❯ <prompt> HH:MM`, then ` ● <answer>`
7
+ // with 3-space continuation lines, a cwd + `Session: N AIC used` row, the composer between two
8
+ // rules, and a `← open sidebar · … · / commands · ? help` footer. Tool-call rows are not
9
+ // modelled: they open with the same bullet and read as part of the answer.
10
+ copilot: {
11
+ // Copilot draws a submitted prompt at column 0 or 1; the continuation rows of an answer are
12
+ // indented three spaces, so a shell prompt inside a code block (` ❯ npm test`) is not a prompt.
13
+ prompt: /^ ?❯\s+(\S.*)$/,
14
+ promptTrailer: /\s{2,}\d{1,2}:\d{2}\s*$/,
15
+ responseBullet: /^\s*●\s+/,
16
+ status: [
17
+ /^\s*(?:!|●)\s+(?:Tip:|MCP Servers?\b|Model\b)/,
18
+ /^\s*!\s+/,
19
+ /\bSession: .*(?:AIC used|credits unavailable)/,
20
+ /^\s*←\s+open sidebar/,
21
+ /\/ commands · \? help/,
22
+ /^\s*[◉◎]\s+Working\b/,
23
+ ],
24
+ ignore: [/^ ?❯\s*$/],
25
+ composer: /^ ?❯/,
26
+ // The right-hand scrollbar gutter, `┃` on a row (or alone on a blank one).
27
+ lineTrailer: /\s*[┃▐]\s*$/,
28
+ startup: [/Copilot v\d+\.\d+\.\d+ uses AI/, /Confirm folder trust/, /Do you trust the files in this folder/],
29
+ },
30
+ };
5
31
  function isPromptLine(line) {
6
32
  return /^\s*›\s*/.test(line);
7
33
  }
@@ -258,6 +284,110 @@ function pushBlock(blocks, kind, lines) {
258
284
  export function isExternalCliTranscriptMode(mode) {
259
285
  return EXTERNAL_CLI_MODES.has(String(mode || ''));
260
286
  }
287
+ /**
288
+ * Whether this mode's pane is a repainting full-screen TUI whose output stream is absolute cursor
289
+ * moves rather than lines. The segmenter needs the SCREEN for those (tmux capture-pane), because
290
+ * stripping the escapes from the stream concatenates every row into one run of text.
291
+ */
292
+ export function transcriptNeedsScreenCapture(mode) {
293
+ return Object.prototype.hasOwnProperty.call(PANE_DIALECTS, String(mode || ''));
294
+ }
295
+ /**
296
+ * Segment a pane that has its own dialect. Everything before the first prompt is the banner (or a
297
+ * trust dialog) and is dropped, so a session that has not been asked anything answers "nothing
298
+ * yet" rather than serving its logo as a reply.
299
+ *
300
+ * The screen is all there is to read, so a long answer scrolls the prompt row off the top. When no
301
+ * prompt row is on screen AND no startup text is either, the session has already been asked
302
+ * something: the rows above the composer are the tail of the last answer, not "nothing yet".
303
+ */
304
+ function parseDialectTranscript(cleaned, dialect) {
305
+ const blocks = [];
306
+ let kind = null;
307
+ let current = [];
308
+ const rows = cleaned.split('\n').map((row) => (dialect.lineTrailer ? row.replace(dialect.lineTrailer, '') : row));
309
+ // The composer sits between two rules and holds whatever is typed but not sent. That is not a
310
+ // prompt row: otherwise typing under a tall answer would make the answer's tail read as banner.
311
+ let composerIndex = -1;
312
+ for (let i = rows.length - 2; i > 0; i -= 1) {
313
+ if (dialect.composer.test(rows[i] ?? '') &&
314
+ isDividerOnlyLine(rows[i - 1] ?? '') &&
315
+ isDividerOnlyLine(rows[i + 1] ?? '')) {
316
+ composerIndex = i;
317
+ break;
318
+ }
319
+ }
320
+ const isComposerRow = (i) => i === composerIndex;
321
+ const isComposerRule = (i) => composerIndex !== -1 && (i === composerIndex - 1 || i === composerIndex + 1);
322
+ const hasPrompt = rows.some((row, i) => dialect.prompt.test(row) && !isComposerRow(i));
323
+ const startupVisible = rows.some((row) => dialect.startup.some((re) => re.test(row)));
324
+ let sawPrompt = !hasPrompt && !startupVisible;
325
+ // A rule drawn INSIDE an answer (a markdown `---`, a quoted passage between two rules) is part
326
+ // of the answer, so it must not end the block, or `agent read` returns only the text after the
327
+ // last rule. It is held until more of the same answer follows, so a rule that only separates
328
+ // the answer from the footer never trails it. The composer's own two rules stay boundaries.
329
+ let pendingRule = false;
330
+ const flush = () => {
331
+ if (sawPrompt)
332
+ pushBlock(blocks, kind, current);
333
+ kind = null;
334
+ current = [];
335
+ pendingRule = false;
336
+ };
337
+ for (const [index, line] of rows.entries()) {
338
+ if (kind === 'response' && isDividerOnlyLine(line) && !isComposerRule(index)) {
339
+ pendingRule = true;
340
+ continue;
341
+ }
342
+ if (isDividerOnlyLine(line) || isComposerRow(index) || dialect.ignore.some((re) => re.test(line))) {
343
+ flush();
344
+ continue;
345
+ }
346
+ const prompt = dialect.prompt.exec(line);
347
+ if (prompt) {
348
+ flush();
349
+ sawPrompt = true;
350
+ kind = 'prompt';
351
+ current = [dialect.promptTrailer ? prompt[1].replace(dialect.promptTrailer, '').trim() : prompt[1].trim()];
352
+ continue;
353
+ }
354
+ if (!sawPrompt)
355
+ continue;
356
+ if (dialect.status.some((re) => re.test(line))) {
357
+ if (kind !== 'status')
358
+ flush();
359
+ kind = 'status';
360
+ current.push(line.trim());
361
+ continue;
362
+ }
363
+ // A wrapped warning or tip: indented under its status row.
364
+ if (kind === 'status' && /^\s{3,}\S/.test(line)) {
365
+ current.push(line.trim());
366
+ continue;
367
+ }
368
+ if (!line.trim()) {
369
+ if (kind)
370
+ current.push('');
371
+ continue;
372
+ }
373
+ const bullet = dialect.responseBullet.exec(line);
374
+ if (bullet) {
375
+ flush();
376
+ kind = 'response';
377
+ current = [line.slice(bullet[0].length)];
378
+ continue;
379
+ }
380
+ if (!kind)
381
+ kind = 'response';
382
+ if (pendingRule) {
383
+ current.push('', '---', '');
384
+ pendingRule = false;
385
+ }
386
+ current.push(line);
387
+ }
388
+ flush();
389
+ return blocks.filter((block) => block.text.trim().length > 0);
390
+ }
261
391
  export function parseExternalCliTranscript(buffer, mode) {
262
392
  const resolvedMode = String(mode || '');
263
393
  if (!isExternalCliTranscriptMode(resolvedMode))
@@ -265,6 +395,9 @@ export function parseExternalCliTranscript(buffer, mode) {
265
395
  const cleaned = cleanTerminalTranscript(buffer);
266
396
  if (!cleaned)
267
397
  return [];
398
+ const dialect = PANE_DIALECTS[resolvedMode];
399
+ if (dialect)
400
+ return parseDialectTranscript(cleaned, dialect);
268
401
  const lines = trimLeadingStartup(cleaned.split('\n'));
269
402
  const blocks = [];
270
403
  let currentKind = null;
@@ -1 +1 @@
1
- {"version":3,"file":"response-viewer-transcript.js","sourceRoot":"","sources":["../../src/web/response-viewer-transcript.ts"],"names":[],"mappings":"AAUA,iFAAiF;AACjF,gFAAgF;AAChF,kFAAkF;AAClF,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AAE7G,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAU;IACnC,OAAO,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,CAAC;AAClC,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAU;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,CAAC;AAED,2EAA2E;AAC3E,8EAA8E;AAC9E,+EAA+E;AAC/E,+EAA+E;AAC/E,+EAA+E;AAC/E,+EAA+E;AAC/E,2CAA2C;AAC3C,SAAS,0BAA0B,CAAC,IAAY;IAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACtB,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,sEAAsE;IACtE,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvB,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,OAAO,IAAI,GAAG,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAAE,IAAI,IAAI,CAAC,CAAC;IAChE,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE5B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;QAAE,KAAK,IAAI,CAAC,CAAC;IAC3E,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3B,8EAA8E;IAC9E,6EAA6E;IAC7E,8EAA8E;IAC9E,oDAAoD;IACpD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,OAAO,YAAY,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;QAAE,EAAE,IAAI,CAAC,CAAC;IAC3F,MAAM,IAAI,GAAG,YAAY,GAAG,EAAE,CAAC;IAE/B,qEAAqE;IACrE,oEAAoE;IACpE,yEAAyE;IACzE,uBAAuB;IACvB,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC;IAC5B,IAAI,MAAM,GAAG,SAAS,CAAC;IACvB,OAAO,MAAM,GAAG,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,CAAC,CAAC;IACzE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;IAEvC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;AAC3C,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,mFAAmF;AACnF,gFAAgF;AAChF,SAAS,oBAAoB,CAAC,IAAY;IACxC,OAAO,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,0EAA0E;AAC1E,+EAA+E;AAC/E,gFAAgF;AAChF,2BAA2B;AAC3B,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,uLAAuL,CAAC,IAAI,CACjM,IAAI,CAAC,IAAI,EAAE,CACZ,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,oFAAoF;AACpF,oFAAoF;AACpF,iFAAiF;AACjF,SAAS,wBAAwB,CAAC,KAAe,EAAE,SAAiB;IAClE,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAY,EAAE,WAAgD;IAC5F,IAAI,WAAW,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC/B,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,IAAY;IAC9C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,IAAI,0BAA0B,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACrD,IAAI,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACzD,IAAI,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,IAAI,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACjE,IAAI,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAClF,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,IAAI,8DAA8D,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9F,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAY;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAgB,EAAE,IAAY;IAC3D,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACjC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,IAAI,wBAAwB,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACjD,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAe;IAC3C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,SAAS,GAAG,EAAE,CAAC;IAEnB,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpB,SAAS,GAAG,EAAE,CAAC;IACjB,CAAC,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,cAAc,EAAE,CAAC;YACjB,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7C,SAAS;QACX,CAAC;QACD,IAAI,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,cAAc,EAAE,CAAC;YACjB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS,GAAG,OAAO,CAAC;YACpB,SAAS;QACX,CAAC;QACD,IAAI,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;YAC9C,SAAS,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,SAAS;QACX,CAAC;QACD,cAAc,EAAE,CAAC;QACjB,SAAS,GAAG,OAAO,CAAC;IACtB,CAAC;IAED,cAAc,EAAE,CAAC;IACjB,OAAO,GAAG;SACP,IAAI,CAAC,IAAI,CAAC;SACV,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;SAC1B,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAc;IAC7C,wEAAwE;IACxE,8DAA8D;IAC9D,qCAAqC;IACrC,OAAO,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;SACxB,OAAO,CAAC,4CAA4C,EAAE,EAAE,CAAC;SACzD,OAAO,CAAC,oCAAoC,EAAE,EAAE,CAAC;SACjD,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC;SACxC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC;SACnC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;SAChC,OAAO,CAAC,mCAAmC,EAAE,EAAE,CAAC;SAChD,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;SACtB,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;SACpB,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;SACxB,IAAI,EAAE,CAAC;IACV,oCAAoC;AACtC,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAe;IACzC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,IAAI,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,IAAI,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5C,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,MAAM;IACR,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,SAAS,CAChB,MAAuC,EACvC,IAAyC,EACzC,KAAe;IAEf,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACxC,MAAM,eAAe,GACnB,IAAI,KAAK,QAAQ;QACf,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACxG,CAAC,CAAC,KAAK,CAAC;IACZ,MAAM,IAAI,GACR,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,QAAQ;QAClC,CAAC,CAAC,eAAe;aACZ,IAAI,CAAC,IAAI,CAAC;aACV,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;aAC1B,IAAI,EAAE;QACX,CAAC,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAA2C,CAAC;IACvG,6EAA6E;IAC7E,yEAAyE;IACzE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,IAA+B;IACzE,OAAO,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,MAAc,EACd,IAA+B;IAE/B,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACxC,IAAI,CAAC,2BAA2B,CAAC,YAAY,CAAC;QAAE,OAAO,EAAE,CAAC;IAE1D,MAAM,OAAO,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAExB,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,MAAM,MAAM,GAAoC,EAAE,CAAC;IACnD,IAAI,WAAW,GAAwC,IAAI,CAAC;IAC5D,IAAI,YAAY,GAAa,EAAE,CAAC;IAEhC,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAC7C,WAAW,GAAG,IAAI,CAAC;QACnB,YAAY,GAAG,EAAE,CAAC;IACpB,CAAC,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5B,6EAA6E;QAC7E,+EAA+E;QAC/E,gFAAgF;QAChF,sEAAsE;QACtE,gFAAgF;QAChF,4DAA4D;QAC5D,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACjB,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACtB,SAAS;YACX,CAAC;YACD,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxB,SAAS;YACX,CAAC;QACH,CAAC;QAED,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,KAAK,EAAE,CAAC;YACR,SAAS;QACX,CAAC;QAED,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,KAAK,EAAE,CAAC;YACR,WAAW,GAAG,QAAQ,CAAC;YACvB,YAAY,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACrD,SAAS;QACX,CAAC;QAED,gFAAgF;QAChF,4EAA4E;QAC5E,0EAA0E;QAC1E,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,wBAAwB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjG,IAAI,WAAW,KAAK,MAAM;gBAAE,KAAK,EAAE,CAAC;YACpC,WAAW,GAAG,MAAM,CAAC;YACrB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAClC,SAAS;QACX,CAAC;QAED,IAAI,sBAAsB,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;YAC9C,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAClC,SAAS;QACX,CAAC;QAED,IAAI,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC;YACrC,IAAI,WAAW,KAAK,QAAQ;gBAAE,KAAK,EAAE,CAAC;YACtC,WAAW,GAAG,QAAQ,CAAC;YACvB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/B,SAAS;QACX,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;QAED,IAAI,WAAW,KAAK,UAAU;YAAE,KAAK,EAAE,CAAC;QACxC,WAAW,GAAG,UAAU,CAAC;QACzB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,EAAE,CAAC;IACR,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAAuC;IAC/E,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,UAAU;YAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,sBAAsB,CAA4C,QAAa;IAC7F,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;IAChB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC;YAC9F,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IACD,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1B,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;AAC/F,CAAC"}
1
+ {"version":3,"file":"response-viewer-transcript.js","sourceRoot":"","sources":["../../src/web/response-viewer-transcript.ts"],"names":[],"mappings":"AAUA,iFAAiF;AACjF,gFAAgF;AAChF,kFAAkF;AAClF,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;AAiCxH,MAAM,aAAa,GAAgC;IACjD,gGAAgG;IAChG,+FAA+F;IAC/F,yFAAyF;IACzF,2EAA2E;IAC3E,OAAO,EAAE;QACP,4FAA4F;QAC5F,kGAAkG;QAClG,MAAM,EAAE,gBAAgB;QACxB,aAAa,EAAE,yBAAyB;QACxC,cAAc,EAAE,UAAU;QAC1B,MAAM,EAAE;YACN,+CAA+C;YAC/C,UAAU;YACV,+CAA+C;YAC/C,sBAAsB;YACtB,uBAAuB;YACvB,sBAAsB;SACvB;QACD,MAAM,EAAE,CAAC,UAAU,CAAC;QACpB,QAAQ,EAAE,MAAM;QAChB,2EAA2E;QAC3E,WAAW,EAAE,aAAa;QAC1B,OAAO,EAAE,CAAC,gCAAgC,EAAE,sBAAsB,EAAE,uCAAuC,CAAC;KAC7G;CACF,CAAC;AAEF,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAU;IACnC,OAAO,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,CAAC;AAClC,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAU;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,CAAC;AAED,2EAA2E;AAC3E,8EAA8E;AAC9E,+EAA+E;AAC/E,+EAA+E;AAC/E,+EAA+E;AAC/E,+EAA+E;AAC/E,2CAA2C;AAC3C,SAAS,0BAA0B,CAAC,IAAY;IAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACtB,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,sEAAsE;IACtE,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvB,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,OAAO,IAAI,GAAG,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAAE,IAAI,IAAI,CAAC,CAAC;IAChE,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE5B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;QAAE,KAAK,IAAI,CAAC,CAAC;IAC3E,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3B,8EAA8E;IAC9E,6EAA6E;IAC7E,8EAA8E;IAC9E,oDAAoD;IACpD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,OAAO,YAAY,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;QAAE,EAAE,IAAI,CAAC,CAAC;IAC3F,MAAM,IAAI,GAAG,YAAY,GAAG,EAAE,CAAC;IAE/B,qEAAqE;IACrE,oEAAoE;IACpE,yEAAyE;IACzE,uBAAuB;IACvB,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC;IAC5B,IAAI,MAAM,GAAG,SAAS,CAAC;IACvB,OAAO,MAAM,GAAG,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,CAAC,CAAC;IACzE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;IAEvC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;AAC3C,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,mFAAmF;AACnF,gFAAgF;AAChF,SAAS,oBAAoB,CAAC,IAAY;IACxC,OAAO,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,0EAA0E;AAC1E,+EAA+E;AAC/E,gFAAgF;AAChF,2BAA2B;AAC3B,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,uLAAuL,CAAC,IAAI,CACjM,IAAI,CAAC,IAAI,EAAE,CACZ,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,oFAAoF;AACpF,oFAAoF;AACpF,iFAAiF;AACjF,SAAS,wBAAwB,CAAC,KAAe,EAAE,SAAiB;IAClE,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAY,EAAE,WAAgD;IAC5F,IAAI,WAAW,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC/B,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,IAAY;IAC9C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,IAAI,0BAA0B,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACrD,IAAI,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACzD,IAAI,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,IAAI,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACjE,IAAI,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAClF,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,IAAI,8DAA8D,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9F,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAY;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAgB,EAAE,IAAY;IAC3D,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACjC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,IAAI,wBAAwB,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACjD,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAe;IAC3C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,SAAS,GAAG,EAAE,CAAC;IAEnB,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpB,SAAS,GAAG,EAAE,CAAC;IACjB,CAAC,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,cAAc,EAAE,CAAC;YACjB,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7C,SAAS;QACX,CAAC;QACD,IAAI,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,cAAc,EAAE,CAAC;YACjB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS,GAAG,OAAO,CAAC;YACpB,SAAS;QACX,CAAC;QACD,IAAI,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;YAC9C,SAAS,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,SAAS;QACX,CAAC;QACD,cAAc,EAAE,CAAC;QACjB,SAAS,GAAG,OAAO,CAAC;IACtB,CAAC;IAED,cAAc,EAAE,CAAC;IACjB,OAAO,GAAG;SACP,IAAI,CAAC,IAAI,CAAC;SACV,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;SAC1B,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAc;IAC7C,wEAAwE;IACxE,8DAA8D;IAC9D,qCAAqC;IACrC,OAAO,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;SACxB,OAAO,CAAC,4CAA4C,EAAE,EAAE,CAAC;SACzD,OAAO,CAAC,oCAAoC,EAAE,EAAE,CAAC;SACjD,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC;SACxC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC;SACnC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;SAChC,OAAO,CAAC,mCAAmC,EAAE,EAAE,CAAC;SAChD,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;SACtB,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;SACpB,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;SACxB,IAAI,EAAE,CAAC;IACV,oCAAoC;AACtC,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAe;IACzC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,IAAI,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,IAAI,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5C,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,MAAM;IACR,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,SAAS,CAChB,MAAuC,EACvC,IAAyC,EACzC,KAAe;IAEf,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACxC,MAAM,eAAe,GACnB,IAAI,KAAK,QAAQ;QACf,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACxG,CAAC,CAAC,KAAK,CAAC;IACZ,MAAM,IAAI,GACR,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,QAAQ;QAClC,CAAC,CAAC,eAAe;aACZ,IAAI,CAAC,IAAI,CAAC;aACV,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;aAC1B,IAAI,EAAE;QACX,CAAC,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAA2C,CAAC;IACvG,6EAA6E;IAC7E,yEAAyE;IACzE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,IAA+B;IACzE,OAAO,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAAC,IAA+B;IAC1E,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;AACjF,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,sBAAsB,CAAC,OAAe,EAAE,OAAoB;IACnE,MAAM,MAAM,GAAoC,EAAE,CAAC;IACnD,IAAI,IAAI,GAAwC,IAAI,CAAC;IACrD,IAAI,OAAO,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClH,8FAA8F;IAC9F,gGAAgG;IAChG,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,IACE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACpC,iBAAiB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACpC,iBAAiB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EACpC,CAAC;YACD,aAAa,GAAG,CAAC,CAAC;YAClB,MAAM;QACR,CAAC;IACH,CAAC;IACD,MAAM,aAAa,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,KAAK,aAAa,CAAC;IACzD,MAAM,cAAc,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,aAAa,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,aAAa,GAAG,CAAC,IAAI,CAAC,KAAK,aAAa,GAAG,CAAC,CAAC,CAAC;IACnH,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACtF,IAAI,SAAS,GAAG,CAAC,SAAS,IAAI,CAAC,cAAc,CAAC;IAC9C,+FAA+F;IAC/F,+FAA+F;IAC/F,6FAA6F;IAC7F,4FAA4F;IAC5F,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,IAAI,SAAS;YAAE,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAChD,IAAI,GAAG,IAAI,CAAC;QACZ,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,GAAG,KAAK,CAAC;IACtB,CAAC,CAAC;IAEF,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QAC3C,IAAI,IAAI,KAAK,UAAU,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7E,WAAW,GAAG,IAAI,CAAC;YACnB,SAAS;QACX,CAAC;QACD,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAClG,KAAK,EAAE,CAAC;YACR,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,EAAE,CAAC;YACR,SAAS,GAAG,IAAI,CAAC;YACjB,IAAI,GAAG,QAAQ,CAAC;YAChB,OAAO,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3G,SAAS;QACX,CAAC;QACD,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC/C,IAAI,IAAI,KAAK,QAAQ;gBAAE,KAAK,EAAE,CAAC;YAC/B,IAAI,GAAG,QAAQ,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1B,SAAS;QACX,CAAC;QACD,2DAA2D;QAC3D,IAAI,IAAI,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1B,SAAS;QACX,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,IAAI,IAAI;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3B,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,EAAE,CAAC;YACR,IAAI,GAAG,UAAU,CAAC;YAClB,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YACzC,SAAS;QACX,CAAC;QACD,IAAI,CAAC,IAAI;YAAE,IAAI,GAAG,UAAU,CAAC;QAC7B,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC5B,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IACD,KAAK,EAAE,CAAC;IACR,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,MAAc,EACd,IAA+B;IAE/B,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACxC,IAAI,CAAC,2BAA2B,CAAC,YAAY,CAAC;QAAE,OAAO,EAAE,CAAC;IAE1D,MAAM,OAAO,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAExB,MAAM,OAAO,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;IAC5C,IAAI,OAAO;QAAE,OAAO,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAE7D,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,MAAM,MAAM,GAAoC,EAAE,CAAC;IACnD,IAAI,WAAW,GAAwC,IAAI,CAAC;IAC5D,IAAI,YAAY,GAAa,EAAE,CAAC;IAEhC,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAC7C,WAAW,GAAG,IAAI,CAAC;QACnB,YAAY,GAAG,EAAE,CAAC;IACpB,CAAC,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5B,6EAA6E;QAC7E,+EAA+E;QAC/E,gFAAgF;QAChF,sEAAsE;QACtE,gFAAgF;QAChF,4DAA4D;QAC5D,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACjB,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACtB,SAAS;YACX,CAAC;YACD,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxB,SAAS;YACX,CAAC;QACH,CAAC;QAED,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,KAAK,EAAE,CAAC;YACR,SAAS;QACX,CAAC;QAED,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,KAAK,EAAE,CAAC;YACR,WAAW,GAAG,QAAQ,CAAC;YACvB,YAAY,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACrD,SAAS;QACX,CAAC;QAED,gFAAgF;QAChF,4EAA4E;QAC5E,0EAA0E;QAC1E,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,wBAAwB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjG,IAAI,WAAW,KAAK,MAAM;gBAAE,KAAK,EAAE,CAAC;YACpC,WAAW,GAAG,MAAM,CAAC;YACrB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAClC,SAAS;QACX,CAAC;QAED,IAAI,sBAAsB,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;YAC9C,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAClC,SAAS;QACX,CAAC;QAED,IAAI,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC;YACrC,IAAI,WAAW,KAAK,QAAQ;gBAAE,KAAK,EAAE,CAAC;YACtC,WAAW,GAAG,QAAQ,CAAC;YACvB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/B,SAAS;QACX,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;QAED,IAAI,WAAW,KAAK,UAAU;YAAE,KAAK,EAAE,CAAC;QACxC,WAAW,GAAG,UAAU,CAAC;QACzB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,EAAE,CAAC;IACR,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAAuC;IAC/E,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,UAAU;YAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,sBAAsB,CAA4C,QAAa;IAC7F,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;IAChB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC;YAC9F,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IACD,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1B,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;AAC/F,CAAC"}
@@ -10,8 +10,8 @@
10
10
  * only, never env values, headers or file content (a parse failure is reported by position).
11
11
  *
12
12
  * A CLI takes part when it is ENABLED in the registry, declares an `mcpConfig`, and is installed
13
- * or already has its config file (Copilot CLI, which is not a registry CLI, takes part when installed
14
- * or when its config file exists); one that is enabled but absent from the machine is reported
13
+ * or already has its config file (Copilot CLI declares its own `mcpConfig`; with its run mode disabled it still
14
+ * takes part as a sync-only tool when installed or when its config file exists); one that is enabled but absent from the machine is reported
15
15
  * `absent` and never created. Its file is located with this process's env (the env the CLIs
16
16
  * Codeman spawns inherit), so a relocation var such as `CODEX_HOME` is followed.
17
17
  */
@@ -21,8 +21,8 @@ import { type McpSyncTarget } from '../../mcp-sync.js';
21
21
  export declare function readMcpSyncEnabled(): Promise<boolean>;
22
22
  /**
23
23
  * Enabled CLIs that declare an MCP config file, in registry order (first definition wins), then the
24
- * sync-only tools (src/mcp-sync-targets.ts: Copilot CLI), which come last so a registry CLI's
25
- * definition wins a same-name difference.
24
+ * sync-only tools (src/mcp-sync-targets.ts: Copilot CLI while its run mode is disabled), which come
25
+ * last so a registry CLI's definition wins a same-name difference.
26
26
  */
27
27
  export declare function mcpSyncTargets(availability: Record<string, boolean>): McpSyncTarget[];
28
28
  /**
@@ -10,8 +10,8 @@
10
10
  * only, never env values, headers or file content (a parse failure is reported by position).
11
11
  *
12
12
  * A CLI takes part when it is ENABLED in the registry, declares an `mcpConfig`, and is installed
13
- * or already has its config file (Copilot CLI, which is not a registry CLI, takes part when installed
14
- * or when its config file exists); one that is enabled but absent from the machine is reported
13
+ * or already has its config file (Copilot CLI declares its own `mcpConfig`; with its run mode disabled it still
14
+ * takes part as a sync-only tool when installed or when its config file exists); one that is enabled but absent from the machine is reported
15
15
  * `absent` and never created. Its file is located with this process's env (the env the CLIs
16
16
  * Codeman spawns inherit), so a relocation var such as `CODEX_HOME` is followed.
17
17
  */
@@ -29,8 +29,8 @@ export async function readMcpSyncEnabled() {
29
29
  }
30
30
  /**
31
31
  * Enabled CLIs that declare an MCP config file, in registry order (first definition wins), then the
32
- * sync-only tools (src/mcp-sync-targets.ts: Copilot CLI), which come last so a registry CLI's
33
- * definition wins a same-name difference.
32
+ * sync-only tools (src/mcp-sync-targets.ts: Copilot CLI while its run mode is disabled), which come
33
+ * last so a registry CLI's definition wins a same-name difference.
34
34
  */
35
35
  export function mcpSyncTargets(availability) {
36
36
  const registry = enabledClis()
@@ -4,7 +4,7 @@
4
4
  * auto-clear, auto-compact, image watcher, flicker filter, and logout.
5
5
  */
6
6
  import { FastifyInstance } from 'fastify';
7
- import { type SessionMode, type CodexConfig, type GeminiConfig, type AntigravityConfig, type PiConfig, type GrokConfig, type DeepSeekConfig, type OmpConfig } from '../../types.js';
7
+ import { type SessionMode, type CodexConfig, type GeminiConfig, type AntigravityConfig, type PiConfig, type GrokConfig, type CopilotConfig, type DeepSeekConfig, type OmpConfig } from '../../types.js';
8
8
  import { RemoteWakeRegistry } from '../../remote-wake.js';
9
9
  import { clampEnvOverridesForOwner } from '../../session-env-clamp.js';
10
10
  import type { SessionPort, EventPort, ConfigPort, InfraPort, AuthPort, TabLayoutPort } from '../ports/index.js';
@@ -41,6 +41,15 @@ export declare function stripReplayBuffer(buffer: string, mode: SessionMode, use
41
41
  * conversation after Claude's first render — losing 100KB+ of legitimate scrollback.
42
42
  */
43
43
  export declare function stripInkRedrawBloat(buffer: string): string;
44
+ /**
45
+ * Documents a user hands an agent to read: the office formats plus the text
46
+ * family. Curated on purpose, never SUPPORTED_ATTACHMENT_EXTENSIONS or
47
+ * EDITABLE_EXTENSIONS, which carry sh/py/js/html; a prompt upload is a thing
48
+ * to read, not a thing to run or serve. Each is judged on its bytes by
49
+ * imageMagicMatchesExt (signature, or UTF-8 without NUL for text). The browser
50
+ * keeps its own copies (test/upload-document-list-parity.test.ts pins them).
51
+ */
52
+ export declare const ALLOWED_DOCUMENT_EXTS: ReadonlySet<string>;
44
53
  /**
45
54
  * Validate upload bytes against a declared extension. Sniffs the first ~12 bytes
46
55
  * for a known magic-number signature (a text file is instead required to be
@@ -64,13 +73,14 @@ export declare function _resetPasteRateBuckets(): void;
64
73
  * named individually, so `privilegedParams` on anything outside that list was declared but
65
74
  * unreachable.
66
75
  */
67
- export declare function _clampExternalCliBypassForOwner(owner: string | undefined, codexConfig?: CodexConfig, geminiConfig?: GeminiConfig, antigravityConfig?: AntigravityConfig, piConfig?: PiConfig, grokConfig?: GrokConfig, deepSeekConfig?: DeepSeekConfig): Promise<{
76
+ export declare function _clampExternalCliBypassForOwner(owner: string | undefined, codexConfig?: CodexConfig, geminiConfig?: GeminiConfig, antigravityConfig?: AntigravityConfig, piConfig?: PiConfig, grokConfig?: GrokConfig, deepSeekConfig?: DeepSeekConfig, copilotConfig?: CopilotConfig): Promise<{
68
77
  codexConfig: CodexConfig | undefined;
69
78
  geminiConfig: GeminiConfig | undefined;
70
79
  antigravityConfig: AntigravityConfig | undefined;
71
80
  piConfig: PiConfig | undefined;
72
81
  grokConfig: GrokConfig | undefined;
73
82
  deepSeekConfig: DeepSeekConfig | undefined;
83
+ copilotConfig: CopilotConfig | undefined;
74
84
  }>;
75
85
  /** Test hook: the env-var half of the same multi-user safety gate. */
76
86
  export declare const _clampEnvOverridesForOwner: typeof clampEnvOverridesForOwner;
@@ -1 +1 @@
1
- {"version":3,"file":"session-routes.d.ts","sourceRoot":"","sources":["../../../src/web/routes/session-routes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAqB,MAAM,SAAS,CAAC;AAW7D,OAAO,EAOL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,SAAS,EAEf,MAAM,gBAAgB,CAAC;AAsDxB,OAAO,EACL,kBAAkB,EAKnB,MAAM,sBAAsB,CAAC;AAwB9B,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAuCvE,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAiFhH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAY7F;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA0C1D;AAQD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CA0DvE;AAmHD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,OAAO,CAEhF;AAID,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,OAAO,CAEhF;AAGD,wBAAgB,sBAAsB,IAAI,IAAI,CAG7C;AAoED;;;;;;;GAOG;AACH,wBAAsB,+BAA+B,CACnD,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,WAAW,CAAC,EAAE,WAAW,EACzB,YAAY,CAAC,EAAE,YAAY,EAC3B,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,QAAQ,CAAC,EAAE,QAAQ,EACnB,UAAU,CAAC,EAAE,UAAU,EACvB,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC;IACT,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;IACrC,YAAY,EAAE,YAAY,GAAG,SAAS,CAAC;IACvC,iBAAiB,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACjD,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC;IACnC,cAAc,EAAE,cAAc,GAAG,SAAS,CAAC;CAC5C,CAAC,CAiBD;AAED,sEAAsE;AACtE,eAAO,MAAM,0BAA0B,kCAA4B,CAAC;AAmNpE,2FAA2F;AAC3F,wBAAgB,uBAAuB,IAAI,IAAI,CAI9C;AAED,+EAA+E;AAC/E,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AA2ED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,WAAW,EACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,SAAS,GAAG,SAAS,GAC/B,SAAS,GAAG,SAAS,CAYvB;AAoCD,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa;AAChF,oFAAoF;AACpF,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,kBAAkB,CAAA;CAAO,GAChD,kBAAkB,CAyqJpB"}
1
+ {"version":3,"file":"session-routes.d.ts","sourceRoot":"","sources":["../../../src/web/routes/session-routes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAqB,MAAM,SAAS,CAAC;AAW7D,OAAO,EAOL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,SAAS,EAEf,MAAM,gBAAgB,CAAC;AAsDxB,OAAO,EACL,kBAAkB,EAKnB,MAAM,sBAAsB,CAAC;AAwB9B,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAuCvE,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAkFhH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAY7F;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA0C1D;AAQD;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAOpD,CAAC;AAEH;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CA0DvE;AAmHD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,OAAO,CAEhF;AAID,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,OAAO,CAEhF;AAGD,wBAAgB,sBAAsB,IAAI,IAAI,CAG7C;AAoED;;;;;;;GAOG;AACH,wBAAsB,+BAA+B,CACnD,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,WAAW,CAAC,EAAE,WAAW,EACzB,YAAY,CAAC,EAAE,YAAY,EAC3B,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,QAAQ,CAAC,EAAE,QAAQ,EACnB,UAAU,CAAC,EAAE,UAAU,EACvB,cAAc,CAAC,EAAE,cAAc,EAC/B,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC;IACT,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;IACrC,YAAY,EAAE,YAAY,GAAG,SAAS,CAAC;IACvC,iBAAiB,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACjD,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC;IACnC,cAAc,EAAE,cAAc,GAAG,SAAS,CAAC;IAC3C,aAAa,EAAE,aAAa,GAAG,SAAS,CAAC;CAC1C,CAAC,CAmBD;AAED,sEAAsE;AACtE,eAAO,MAAM,0BAA0B,kCAA4B,CAAC;AAmNpE,2FAA2F;AAC3F,wBAAgB,uBAAuB,IAAI,IAAI,CAI9C;AAED,+EAA+E;AAC/E,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AA2ED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,WAAW,EACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,SAAS,GAAG,SAAS,GAC/B,SAAS,GAAG,SAAS,CAYvB;AAoCD,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa;AAChF,oFAAoF;AACpF,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,kBAAkB,CAAA;CAAO,GAChD,kBAAkB,CA+rJpB"}
@@ -58,7 +58,7 @@ import { describeUnknownPath, probePathKind } from '../../utils/index.js';
58
58
  import { findLatestOmpSessionId } from '../../utils/omp-session-resolver.js';
59
59
  import { scanOmpSessionsHistory } from '../../omp-transcript.js';
60
60
  import { scanCodexSessionsHistory, codexThreadBySessionId } from '../../codex-transcript.js';
61
- import { getLastTranscriptResponse, isExternalCliTranscriptMode, parseExternalCliTranscript, selectLastAnsweredTurn, } from '../response-viewer-transcript.js';
61
+ import { transcriptNeedsScreenCapture, getLastTranscriptResponse, isExternalCliTranscriptMode, parseExternalCliTranscript, selectLastAnsweredTurn, } from '../response-viewer-transcript.js';
62
62
  import { readDeepSeekLastResponse } from '../../deepseek-transcript.js';
63
63
  import { appendClaudeCustomTitle } from '../../claude-session-title.js';
64
64
  import { UPLOADS_DIR } from '../paste-image-gc.js';
@@ -189,6 +189,22 @@ export function stripInkRedrawBloat(buffer) {
189
189
  * (valid UTF-8, no NUL byte) rather than on a signature, since plain text has none.
190
190
  */
191
191
  const TEXT_UPLOAD_EXTS = new Set(['.txt', '.md', '.csv', '.tsv', '.json', '.log', '.yaml', '.yml', '.xml']);
192
+ /**
193
+ * Documents a user hands an agent to read: the office formats plus the text
194
+ * family. Curated on purpose, never SUPPORTED_ATTACHMENT_EXTENSIONS or
195
+ * EDITABLE_EXTENSIONS, which carry sh/py/js/html; a prompt upload is a thing
196
+ * to read, not a thing to run or serve. Each is judged on its bytes by
197
+ * imageMagicMatchesExt (signature, or UTF-8 without NUL for text). The browser
198
+ * keeps its own copies (test/upload-document-list-parity.test.ts pins them).
199
+ */
200
+ export const ALLOWED_DOCUMENT_EXTS = new Set([
201
+ '.pdf',
202
+ '.docx',
203
+ '.pptx',
204
+ '.xlsx',
205
+ '.zip',
206
+ ...TEXT_UPLOAD_EXTS,
207
+ ]);
192
208
  /**
193
209
  * Validate upload bytes against a declared extension. Sniffs the first ~12 bytes
194
210
  * for a known magic-number signature (a text file is instead required to be
@@ -456,7 +472,7 @@ async function clampExternalCliBypassForOwner(owner, configs) {
456
472
  * named individually, so `privilegedParams` on anything outside that list was declared but
457
473
  * unreachable.
458
474
  */
459
- export async function _clampExternalCliBypassForOwner(owner, codexConfig, geminiConfig, antigravityConfig, piConfig, grokConfig, deepSeekConfig) {
475
+ export async function _clampExternalCliBypassForOwner(owner, codexConfig, geminiConfig, antigravityConfig, piConfig, grokConfig, deepSeekConfig, copilotConfig) {
460
476
  const out = await clampExternalCliBypassForOwner(owner, {
461
477
  codexConfig,
462
478
  geminiConfig,
@@ -464,6 +480,7 @@ export async function _clampExternalCliBypassForOwner(owner, codexConfig, gemini
464
480
  piConfig,
465
481
  grokConfig,
466
482
  deepSeekConfig,
483
+ copilotConfig,
467
484
  });
468
485
  return out;
469
486
  }
@@ -1102,7 +1119,7 @@ options = {}) {
1102
1119
  // Section 6.3: force non-granted users to a classifier-guarded mode.
1103
1120
  const effectiveClaudeMode = await resolveClaudeModeForUsername(claudeModeConfig.claudeMode, owner);
1104
1121
  // Section 6.3: clamp Codex/Gemini/Antigravity bypass switches for a non-granted owner (no-op single-user/granted).
1105
- const { codexConfig: gatedCodexConfig, geminiConfig: gatedGeminiConfig, antigravityConfig: gatedAntigravityConfig, piConfig: gatedPiConfig, grokConfig: gatedGrokConfig, deepSeekConfig: gatedDeepSeekConfig, } = await _clampExternalCliBypassForOwner(owner, launchBody.codexConfig, launchBody.geminiConfig, launchBody.antigravityConfig, launchBody.piConfig, launchBody.grokConfig, launchBody.deepSeekConfig);
1122
+ const { codexConfig: gatedCodexConfig, geminiConfig: gatedGeminiConfig, antigravityConfig: gatedAntigravityConfig, piConfig: gatedPiConfig, grokConfig: gatedGrokConfig, deepSeekConfig: gatedDeepSeekConfig, copilotConfig: gatedCopilotConfig, } = await _clampExternalCliBypassForOwner(owner, launchBody.codexConfig, launchBody.geminiConfig, launchBody.antigravityConfig, launchBody.piConfig, launchBody.grokConfig, launchBody.deepSeekConfig, launchBody.copilotConfig);
1106
1123
  const terminalHistoryConfig = await ctx.getTerminalHistoryConfig();
1107
1124
  const session = new Session({
1108
1125
  workingDir,
@@ -1120,6 +1137,7 @@ options = {}) {
1120
1137
  antigravityConfig: mode === 'antigravity' ? gatedAntigravityConfig : undefined,
1121
1138
  piConfig: mode === 'pi' ? gatedPiConfig : undefined,
1122
1139
  grokConfig: mode === 'grok' ? gatedGrokConfig : undefined,
1140
+ copilotConfig: mode === 'copilot' ? gatedCopilotConfig : undefined,
1123
1141
  deepSeekConfig: mode === 'deepseek' ? gatedDeepSeekConfig : undefined,
1124
1142
  ompConfig: resolveOmpConfigForCreate(mode, workingDir, launchBody.ompConfig),
1125
1143
  resumeSessionId: validatedResumeId,
@@ -2417,7 +2435,13 @@ options = {}) {
2417
2435
  // where a real rollout file is the better source.
2418
2436
  if (isExternalCliTranscriptMode(session.mode)) {
2419
2437
  const externalQuery = req.query;
2420
- const blocks = parseExternalCliTranscript(session.terminalBuffer, session.mode);
2438
+ // A repainting full-screen TUI (copilot) streams absolute cursor moves, not lines, so the
2439
+ // buffer cannot be segmented; read the pane's visible screen instead, and fall back to the
2440
+ // buffer when there is no tmux pane to ask (direct PTY, tests).
2441
+ const screen = transcriptNeedsScreenCapture(session.mode) && session.muxName
2442
+ ? (ctx.mux.capturePaneText?.(session.muxName) ?? null)
2443
+ : null;
2444
+ const blocks = parseExternalCliTranscript(screen ?? session.terminalBuffer, session.mode);
2421
2445
  return {
2422
2446
  text: getLastTranscriptResponse(blocks),
2423
2447
  timestamp: '',
@@ -3227,7 +3251,7 @@ options = {}) {
3227
3251
  const capMsg = sessionCapacityMessage(ctx.sessions, owner);
3228
3252
  if (capMsg)
3229
3253
  return createErrorResponse(ApiErrorCode.SESSION_BUSY, capMsg);
3230
- const { caseName = 'testcase', sessionName, mode = 'claude', modelOverride, openCodeConfig, codexConfig, geminiConfig, antigravityConfig, piConfig, grokConfig, deepSeekConfig, ompConfig, envOverrides, effort, advisorModel, parentSessionId, agentOrigin, customModel, tabGroupId, worktree, } = parseBody(QuickStartSchema, req.body);
3254
+ const { caseName = 'testcase', sessionName, mode = 'claude', modelOverride, openCodeConfig, codexConfig, geminiConfig, antigravityConfig, piConfig, grokConfig, copilotConfig, deepSeekConfig, ompConfig, envOverrides, effort, advisorModel, parentSessionId, agentOrigin, customModel, tabGroupId, worktree, } = parseBody(QuickStartSchema, req.body);
3231
3255
  // Resolved ONCE here: the same value labels a case directory this request creates
3232
3256
  // (agent-case-marker.ts) and draws the tab lineage line on the session below.
3233
3257
  const qsParentSessionId = resolveParentSessionId(ctx, req, parentSessionId, owner);
@@ -3277,6 +3301,7 @@ options = {}) {
3277
3301
  antigravityConfig ||
3278
3302
  piConfig ||
3279
3303
  grokConfig ||
3304
+ copilotConfig ||
3280
3305
  deepSeekConfig ||
3281
3306
  ompConfig ||
3282
3307
  openCodeConfig ||
@@ -3335,6 +3360,7 @@ options = {}) {
3335
3360
  antigravityConfig ||
3336
3361
  piConfig ||
3337
3362
  grokConfig ||
3363
+ copilotConfig ||
3338
3364
  deepSeekConfig ||
3339
3365
  ompConfig ||
3340
3366
  openCodeConfig ||
@@ -3419,6 +3445,7 @@ options = {}) {
3419
3445
  antigravityConfig,
3420
3446
  piConfig,
3421
3447
  grokConfig,
3448
+ copilotConfig,
3422
3449
  deepSeekConfig,
3423
3450
  }));
3424
3451
  if (qsLaunchError) {
@@ -3605,6 +3632,7 @@ options = {}) {
3605
3632
  antigravityConfig,
3606
3633
  piConfig,
3607
3634
  grokConfig,
3635
+ copilotConfig,
3608
3636
  deepSeekConfig,
3609
3637
  ompConfig,
3610
3638
  };
@@ -3623,7 +3651,7 @@ options = {}) {
3623
3651
  const qsClaudeModeConfig = await ctx.getClaudeModeConfig();
3624
3652
  const qsEffectiveClaudeMode = await resolveClaudeModeForUsername(qsClaudeModeConfig.claudeMode, owner);
3625
3653
  // Section 6.3: clamp Codex/Gemini/Antigravity bypass switches for a non-granted owner (no-op single-user/granted).
3626
- const { codexConfig: qsGatedCodexConfig, geminiConfig: qsGatedGeminiConfig, antigravityConfig: qsGatedAntigravityConfig, piConfig: qsGatedPiConfig, grokConfig: qsGatedGrokConfig, deepSeekConfig: qsGatedDeepSeekConfig, } = await _clampExternalCliBypassForOwner(owner, qsLaunchConfigs.codexConfig, qsLaunchConfigs.geminiConfig, qsLaunchConfigs.antigravityConfig, qsLaunchConfigs.piConfig, qsLaunchConfigs.grokConfig, qsLaunchConfigs.deepSeekConfig);
3654
+ const { codexConfig: qsGatedCodexConfig, geminiConfig: qsGatedGeminiConfig, antigravityConfig: qsGatedAntigravityConfig, piConfig: qsGatedPiConfig, grokConfig: qsGatedGrokConfig, deepSeekConfig: qsGatedDeepSeekConfig, copilotConfig: qsGatedCopilotConfig, } = await _clampExternalCliBypassForOwner(owner, qsLaunchConfigs.codexConfig, qsLaunchConfigs.geminiConfig, qsLaunchConfigs.antigravityConfig, qsLaunchConfigs.piConfig, qsLaunchConfigs.grokConfig, qsLaunchConfigs.deepSeekConfig, qsLaunchConfigs.copilotConfig);
3627
3655
  const qsTerminalHistoryConfig = await ctx.getTerminalHistoryConfig();
3628
3656
  const qsGatedEnvOverrides = await clampEnvOverridesForOwner(owner, envOverrides);
3629
3657
  const qsResolvedOmpConfig = resolveOmpConfigForCreate(mode, workspacePath, qsLaunchOmpConfig);
@@ -3758,6 +3786,7 @@ options = {}) {
3758
3786
  antigravityConfig: mode === 'antigravity' ? qsGatedAntigravityConfig : undefined,
3759
3787
  piConfig: mode === 'pi' ? qsGatedPiConfig : undefined,
3760
3788
  grokConfig: mode === 'grok' ? qsGatedGrokConfig : undefined,
3789
+ copilotConfig: mode === 'copilot' ? qsGatedCopilotConfig : undefined,
3761
3790
  deepSeekConfig: mode === 'deepseek' ? qsGatedDeepSeekConfig : undefined,
3762
3791
  ompConfig: qsResolvedOmpConfig,
3763
3792
  envOverrides: qsCustomModelEnvOverrides,
@@ -4782,12 +4811,6 @@ options = {}) {
4782
4811
  // so an uploaded video is a type that previews. 3gp/mkv are deliberately out: they
4783
4812
  // would upload but not preview, and a phone's camera roll produces neither.
4784
4813
  const ALLOWED_VIDEO_EXTS = new Set([...VIDEO_ATTACHMENT_EXTENSIONS].map((e) => `.${e}`));
4785
- // Documents a user hands an agent to read: the office formats plus the text
4786
- // family. Curated on purpose, never SUPPORTED_ATTACHMENT_EXTENSIONS or
4787
- // EDITABLE_EXTENSIONS, which carry sh/py/js/html; a prompt upload is a thing
4788
- // to read, not a thing to run or serve. Each is judged on its bytes by
4789
- // imageMagicMatchesExt (signature, or UTF-8 without NUL for text).
4790
- const ALLOWED_DOCUMENT_EXTS = new Set(['.pdf', '.docx', '.pptx', '.xlsx', '.zip', ...TEXT_UPLOAD_EXTS]);
4791
4814
  const VIDEO_MIME_EXT = {
4792
4815
  mp4: '.mp4',
4793
4816
  quicktime: '.mov',
@@ -5006,12 +5029,19 @@ options = {}) {
5006
5029
  if (!imageMagicMatchesExt(imageBytes, origExt)) {
5007
5030
  // The first bytes of a text file are user content, so for text the log
5008
5031
  // names the failure and never the bytes; a signature is safe to print.
5009
- const detail = TEXT_UPLOAD_EXTS.has(origExt)
5010
- ? `reason=${imageBytes.includes(0) ? 'nul-byte' : 'not-utf8'}`
5032
+ // A text refusal names the encoding, since an Excel or Notepad export
5033
+ // (UTF-16 with a BOM, or Windows-1252) is not a corrupt file.
5034
+ const isText = TEXT_UPLOAD_EXTS.has(origExt);
5035
+ const bom = imageBytes.length >= 2 ? imageBytes.readUInt16BE(0) : 0;
5036
+ const utf16 = bom === 0xfffe || bom === 0xfeff;
5037
+ const detail = isText
5038
+ ? `reason=${utf16 ? 'utf16-bom' : imageBytes.includes(0) ? 'nul-byte' : 'not-utf8'}`
5011
5039
  : `magic=${imageBytes.subarray(0, 12).toString('hex')}`;
5012
5040
  console.warn(`[paste-image] document mismatch: filename=${JSON.stringify(part.filename)} mime=${JSON.stringify(part.mimetype)} declaredExt=${origExt} size=${imageBytes.length} ${detail}`);
5013
5041
  reply.code(415);
5014
- return createErrorResponse(ApiErrorCode.INVALID_INPUT, `File bytes do not match declared type ${origExt}`);
5042
+ return createErrorResponse(ApiErrorCode.INVALID_INPUT, isText
5043
+ ? `This ${origExt} file is ${utf16 ? 'UTF-16 text, not UTF-8' : 'not UTF-8 text'}; save it as UTF-8 and attach it again`
5044
+ : `File bytes do not match declared type ${origExt}`);
5015
5045
  }
5016
5046
  const saved = await writeBufferedUpload(session.workingDir, origExt, imageBytes, sanitizeUploadStem(part.filename));
5017
5047
  if (!saved) {