poly-weaver 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/crosscheck/coordinator.d.ts.map +1 -1
  2. package/dist/crosscheck/coordinator.js +1 -0
  3. package/dist/crosscheck/coordinator.js.map +1 -1
  4. package/dist/crosscheck/live-agent-session.d.ts +3 -0
  5. package/dist/crosscheck/live-agent-session.d.ts.map +1 -1
  6. package/dist/crosscheck/live-agent-session.js +12 -2
  7. package/dist/crosscheck/live-agent-session.js.map +1 -1
  8. package/dist/offscreen/controller.d.ts +1 -1
  9. package/dist/offscreen/controller.d.ts.map +1 -1
  10. package/dist/offscreen/controller.js.map +1 -1
  11. package/dist/offscreen/fork.d.ts +2 -1
  12. package/dist/offscreen/fork.d.ts.map +1 -1
  13. package/dist/offscreen/fork.js +11 -2
  14. package/dist/offscreen/fork.js.map +1 -1
  15. package/dist/providers/copilot/trust.js +1 -1
  16. package/dist/providers/copilot/trust.js.map +1 -1
  17. package/dist/terminal/color-negotiation.d.ts +37 -0
  18. package/dist/terminal/color-negotiation.d.ts.map +1 -0
  19. package/dist/terminal/color-negotiation.js +154 -0
  20. package/dist/terminal/color-negotiation.js.map +1 -0
  21. package/dist/terminal/color-protocol.d.ts +36 -0
  22. package/dist/terminal/color-protocol.d.ts.map +1 -0
  23. package/dist/terminal/color-protocol.js +88 -0
  24. package/dist/terminal/color-protocol.js.map +1 -0
  25. package/dist/terminal/host-input-mode.d.ts.map +1 -1
  26. package/dist/terminal/host-input-mode.js +6 -2
  27. package/dist/terminal/host-input-mode.js.map +1 -1
  28. package/dist/terminal/host.d.ts +13 -4
  29. package/dist/terminal/host.d.ts.map +1 -1
  30. package/dist/terminal/host.js +139 -44
  31. package/dist/terminal/host.js.map +1 -1
  32. package/dist/terminal/input-session.d.ts +23 -0
  33. package/dist/terminal/input-session.d.ts.map +1 -0
  34. package/dist/terminal/input-session.js +97 -0
  35. package/dist/terminal/input-session.js.map +1 -0
  36. package/dist/terminal/key-event-source.d.ts +5 -1
  37. package/dist/terminal/key-event-source.d.ts.map +1 -1
  38. package/dist/terminal/key-event-source.js +1 -0
  39. package/dist/terminal/key-event-source.js.map +1 -1
  40. package/dist/terminal/stdin-byte-source.d.ts +13 -8
  41. package/dist/terminal/stdin-byte-source.d.ts.map +1 -1
  42. package/dist/terminal/stdin-byte-source.js +84 -40
  43. package/dist/terminal/stdin-byte-source.js.map +1 -1
  44. package/dist/terminal/virtual-terminal.d.ts +2 -0
  45. package/dist/terminal/virtual-terminal.d.ts.map +1 -1
  46. package/dist/terminal/virtual-terminal.js +17 -0
  47. package/dist/terminal/virtual-terminal.js.map +1 -1
  48. package/dist/terminal-input.d.ts +19 -2
  49. package/dist/terminal-input.d.ts.map +1 -1
  50. package/dist/terminal-input.js +162 -6
  51. package/dist/terminal-input.js.map +1 -1
  52. package/package.json +2 -2
@@ -0,0 +1,88 @@
1
+ export const COLOR_PREFIX_TIMEOUT_MS = 50;
2
+ export const COLOR_FRAME_TIMEOUT_MS = 1_000;
3
+ export const MAX_COLOR_FRAME_BYTES = 64 * 1024;
4
+ export const MAX_PALETTE_INDEX = 65_535;
5
+ export const COLOR_REPORT_HEADERS = ["\x1b]10;", "\x1b]11;", "\x1b]4;", "\x1b[?997;"];
6
+ export const inputClock = {
7
+ now: () => performance.now(),
8
+ setTimeout: (callback, ms) => setTimeout(callback, ms),
9
+ clearTimeout: (timer) => clearTimeout(timer),
10
+ };
11
+ function paletteIndex(value) {
12
+ if (!/^\d{1,5}$/.test(value))
13
+ return undefined;
14
+ const index = Number(value);
15
+ return index <= MAX_PALETTE_INDEX ? index : undefined;
16
+ }
17
+ function isColor(value) {
18
+ return /^rgb:[\da-f]{1,4}\/[\da-f]{1,4}\/[\da-f]{1,4}$/i.test(value)
19
+ || /^#(?:[\da-f]{3}|[\da-f]{6}|[\da-f]{9}|[\da-f]{12})$/i.test(value)
20
+ || (/^rgbi:(?:\d*\.?\d+)\/(?:\d*\.?\d+)\/(?:\d*\.?\d+)$/i.test(value)
21
+ && value.slice(5).split("/").every((part) => Number(part) <= 1));
22
+ }
23
+ /** Extract only read components; never forward an agent's original OSC payload. */
24
+ export function parseColorQueries(command, data) {
25
+ if (data.length > MAX_COLOR_FRAME_BYTES)
26
+ return [];
27
+ const parts = data.split(";");
28
+ const queries = [];
29
+ if (command === 4) {
30
+ for (let i = 0; i + 1 < parts.length; i += 2) {
31
+ const index = paletteIndex(parts[i]);
32
+ if (index !== undefined && parts[i + 1] === "?")
33
+ queries.push({ kind: "palette", index });
34
+ }
35
+ }
36
+ else if (command === 10 || command === 11) {
37
+ for (let i = 0; i < parts.length && command + i <= 11; i++) {
38
+ if (parts[i] === "?")
39
+ queries.push({ kind: command + i === 10 ? "foreground" : "background" });
40
+ }
41
+ }
42
+ return queries;
43
+ }
44
+ export function colorIdentity(query) {
45
+ return query.kind === "palette" ? `palette:${query.index}` : query.kind;
46
+ }
47
+ export function encodeColorQuery(query) {
48
+ switch (query.kind) {
49
+ case "appearance": return "\x1b[?996n";
50
+ case "foreground": return "\x1b]10;?\x07";
51
+ case "background": return "\x1b]11;?\x07";
52
+ case "palette": return `\x1b]4;${query.index};?\x07`;
53
+ }
54
+ }
55
+ export function encodeColorReport(report) {
56
+ switch (report.kind) {
57
+ case "appearance": return `\x1b[?997;${report.value}n`;
58
+ case "foreground": return `\x1b]10;${report.value}\x07`;
59
+ case "background": return `\x1b]11;${report.value}\x07`;
60
+ case "palette": return `\x1b]4;${report.index};${report.value}\x07`;
61
+ }
62
+ }
63
+ /** The framer has already removed the terminator and enforced byte/time bounds. */
64
+ export function parseColorReports(header, body) {
65
+ if (header === "\x1b[?997;") {
66
+ return body === "1" || body === "2" ? [{ kind: "appearance", value: body }] : [];
67
+ }
68
+ const parts = body.split(";");
69
+ const reports = [];
70
+ if (header === "\x1b]4;") {
71
+ for (let i = 0; i + 1 < parts.length; i += 2) {
72
+ const index = paletteIndex(parts[i]);
73
+ if (index !== undefined && isColor(parts[i + 1])) {
74
+ reports.push({ kind: "palette", index, value: parts[i + 1] });
75
+ }
76
+ }
77
+ }
78
+ else {
79
+ const command = header === "\x1b]10;" ? 10 : 11;
80
+ for (let i = 0; i < parts.length && command + i <= 11; i++) {
81
+ if (isColor(parts[i])) {
82
+ reports.push({ kind: command + i === 10 ? "foreground" : "background", value: parts[i] });
83
+ }
84
+ }
85
+ }
86
+ return reports;
87
+ }
88
+ //# sourceMappingURL=color-protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-protocol.js","sourceRoot":"","sources":["../../src/terminal/color-protocol.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"host-input-mode.d.ts","sourceRoot":"","sources":["../../src/terminal/host-input-mode.ts"],"names":[],"mappings":"AAyBA,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,CAIrE;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,CAItE;AAED,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,GAAG,MAAM,IAAI,CAQrF;AAED,wBAAgB,4BAA4B,IAAI,IAAI,CAMnD"}
1
+ {"version":3,"file":"host-input-mode.d.ts","sourceRoot":"","sources":["../../src/terminal/host-input-mode.ts"],"names":[],"mappings":"AAyBA,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,CAIrE;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,CAOtE;AAED,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,GAAG,MAAM,IAAI,CAQrF;AAED,wBAAgB,4BAA4B,IAAI,IAAI,CAMnD"}
@@ -20,8 +20,12 @@ export function enableHostInputModes(out) {
20
20
  export function disableHostInputModes(out) {
21
21
  if (kittyDepth === 0)
22
22
  return;
23
- out.write(BRACKETED_PASTE_OFF + KITTY_POP);
24
- kittyDepth--;
23
+ try {
24
+ out.write(BRACKETED_PASTE_OFF + KITTY_POP);
25
+ }
26
+ finally {
27
+ kittyDepth--;
28
+ }
25
29
  }
26
30
  export function enableRightClickPasteMouseMode(out) {
27
31
  out.write(MOUSE_BUTTON_EVENT_ON + MOUSE_SGR_ON);
@@ -1 +1 @@
1
- {"version":3,"file":"host-input-mode.js","sourceRoot":"","sources":["../../src/terminal/host-input-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,SAAS,EACT,UAAU,EACV,sBAAsB,EACtB,qBAAqB,EACrB,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,IAAI,WAAqC,CAAC;AAE1C,SAAS,iBAAiB;IACxB,IAAI,WAAW;QAAE,OAAO;IACxB,WAAW,GAAG,GAAG,EAAE;QACjB,IAAI,UAAU,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,GAAG,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YACzE,UAAU,GAAG,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAA0B;IAC7D,iBAAiB,EAAE,CAAC;IACpB,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,kBAAkB,CAAC,CAAC;IAC3C,UAAU,EAAE,CAAC;AACf,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAA0B;IAC9D,IAAI,UAAU,KAAK,CAAC;QAAE,OAAO;IAC7B,GAAG,CAAC,KAAK,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAAC;IAC3C,UAAU,EAAE,CAAC;AACf,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,GAA0B;IACvE,GAAG,CAAC,KAAK,CAAC,qBAAqB,GAAG,YAAY,CAAC,CAAC;IAChD,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,OAAO,GAAG,EAAE;QACV,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,GAAG,KAAK,CAAC;QACf,GAAG,CAAC,KAAK,CAAC,sBAAsB,GAAG,aAAa,CAAC,CAAC;IACpD,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC1C,UAAU,GAAG,CAAC,CAAC;IACf,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC5C,WAAW,GAAG,SAAS,CAAC;IAC1B,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"host-input-mode.js","sourceRoot":"","sources":["../../src/terminal/host-input-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,SAAS,EACT,UAAU,EACV,sBAAsB,EACtB,qBAAqB,EACrB,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,IAAI,WAAqC,CAAC;AAE1C,SAAS,iBAAiB;IACxB,IAAI,WAAW;QAAE,OAAO;IACxB,WAAW,GAAG,GAAG,EAAE;QACjB,IAAI,UAAU,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,GAAG,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YACzE,UAAU,GAAG,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAA0B;IAC7D,iBAAiB,EAAE,CAAC;IACpB,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,kBAAkB,CAAC,CAAC;IAC3C,UAAU,EAAE,CAAC;AACf,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAA0B;IAC9D,IAAI,UAAU,KAAK,CAAC;QAAE,OAAO;IAC7B,IAAI,CAAC;QACH,GAAG,CAAC,KAAK,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAAC;IAC7C,CAAC;YAAS,CAAC;QACT,UAAU,EAAE,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,GAA0B;IACvE,GAAG,CAAC,KAAK,CAAC,qBAAqB,GAAG,YAAY,CAAC,CAAC;IAChD,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,OAAO,GAAG,EAAE;QACV,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,GAAG,KAAK,CAAC;QACf,GAAG,CAAC,KAAK,CAAC,sBAAsB,GAAG,aAAa,CAAC,CAAC;IACpD,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC1C,UAAU,GAAG,CAAC,CAAC;IACf,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC5C,WAAW,GAAG,SAAS,CAAC;IAC1B,CAAC;AACH,CAAC"}
@@ -3,6 +3,7 @@ import { VirtualTerminal } from "./virtual-terminal.js";
3
3
  import { BufferOrchestrationOutput, type OrchestrationOutput } from "./output.js";
4
4
  import { type ParentUiMode } from "./input-router.js";
5
5
  import { type KeyEventSource } from "./key-event-source.js";
6
+ import { type RegisterTerminalColors } from "./color-negotiation.js";
6
7
  import { type MouseMode } from "./mouse-mode-tracker.js";
7
8
  import { copyToClipboard } from "./clipboard-write.js";
8
9
  import { type DocSurfaceSelectionPane, type SelectionRegion } from "./selection.js";
@@ -42,10 +43,10 @@ export interface TerminalHostOptions {
42
43
  /**
43
44
  * I/O surface handed to a callback running inside `runIsolatedAltScreen`.
44
45
  * The callback owns the alternate screen for its duration; the host has
45
- * left its own alt screen and removed its stdin listener.
46
+ * left its own alt screen. The supplied source borrows the host's framing owner.
46
47
  */
47
48
  export interface IsolatedAltScreenIo {
48
- stdin: NodeJS.ReadStream;
49
+ source: KeyEventSource;
49
50
  stdout: NodeJS.WriteStream;
50
51
  /** Current terminal columns. */
51
52
  columns: number;
@@ -174,6 +175,12 @@ export declare class TerminalHost implements FeedbackSink {
174
175
  private suspended;
175
176
  private resizeListener;
176
177
  private source;
178
+ private isolatedSource;
179
+ private inputSession;
180
+ private colorBroker;
181
+ private childColors;
182
+ private reportUnsubscribe;
183
+ private readonly colorStreamError;
177
184
  private readonly injectedSource;
178
185
  private sourceUnsubscribe;
179
186
  private sourceResizeUnsubscribe;
@@ -270,6 +277,7 @@ export declare class TerminalHost implements FeedbackSink {
270
277
  * The returned function detaches the child idempotently.
271
278
  */
272
279
  attachChild(handle: PtyHandle): () => void;
280
+ private attachRegisteredChild;
273
281
  detachChild(handle?: PtyHandle): void;
274
282
  /**
275
283
  * Discard the current child surface (VT screen + scrollback) and
@@ -284,6 +292,7 @@ export declare class TerminalHost implements FeedbackSink {
284
292
  clearMouseModeSource(source: string): void;
285
293
  /** Dispose the current `VirtualTerminal` and create a fresh one sized to the current layout. */
286
294
  private resetVirtualTerminal;
295
+ registerTerminalColors: RegisterTerminalColors;
287
296
  /**
288
297
  * Reset the per-child negotiation trackers (kitty keyboard + mouse modes)
289
298
  * and re-derive the host's mouse capture from the now-empty child mode set.
@@ -307,7 +316,7 @@ export declare class TerminalHost implements FeedbackSink {
307
316
  * - leaves its own alternate screen,
308
317
  * - disables reflected child mouse reporting so the foreign UI is not
309
318
  * flooded with mouse sequences,
310
- * - removes its stdin data listener,
319
+ * - releases its keyboard lease while retaining the framing reader,
311
320
  * - restores the prior raw-mode state,
312
321
  * - blocks `scheduleRender()`/`renderNow()` until resume,
313
322
  * - keeps the virtual terminal, output buffer, router, and status bar
@@ -315,7 +324,7 @@ export declare class TerminalHost implements FeedbackSink {
315
324
  * repaint after resume.
316
325
  *
317
326
  * On resume the host re-enters its alt screen, re-applies still-active
318
- * child-requested mouse modes, re-installs its raw-mode stdin listener,
327
+ * child-requested mouse modes, reacquires a borrowed raw-mode input lease,
319
328
  * recomputes layout, resizes the attached child if any, and schedules a
320
329
  * repaint.
321
330
  *
@@ -1 +1 @@
1
- {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/terminal/host.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/terminal/host.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,9 @@ import { composeAbsoluteRow, renderChildViewportRows, renderViewportLines, rende
5
5
  import { BufferOrchestrationOutput, formatOrchestrationMessageRows, } from "./output.js";
6
6
  import { InputRouter, parseSgrMouseFrame, } from "./input-router.js";
7
7
  import { createKeyEventSource } from "./key-event-source.js";
8
+ import { TerminalInputSession } from "./input-session.js";
9
+ import { resolveWindowsTerminalShiftEnterBytes } from "./windows-terminal-shift-enter.js";
10
+ import { ColorNegotiation } from "./color-negotiation.js";
8
11
  import { ChildKittyNegotiator } from "./kitty-negotiator.js";
9
12
  import { MouseModeReconciler, MouseModeTracker, } from "./mouse-mode-tracker.js";
10
13
  import { buildOsc52Forward } from "./osc52.js";
@@ -60,6 +63,12 @@ export class TerminalHost {
60
63
  suspended = false;
61
64
  resizeListener;
62
65
  source;
66
+ isolatedSource;
67
+ inputSession;
68
+ colorBroker;
69
+ childColors;
70
+ reportUnsubscribe;
71
+ colorStreamError = () => { this.colorBroker?.fail(); };
63
72
  injectedSource;
64
73
  sourceUnsubscribe;
65
74
  sourceResizeUnsubscribe;
@@ -279,54 +288,99 @@ export class TerminalHost {
279
288
  return;
280
289
  this.started = true;
281
290
  this.stopped = false;
282
- this.layout = this.computeLayout();
283
- this.resetVirtualTerminal();
284
- this.stdout.write(ALT_SCREEN_ON + CLEAR_SCREEN + CURSOR_HOME + HIDE_CURSOR);
285
- this.reconcileHostMouseCapture();
286
- if (this.stdin.isTTY) {
287
- this.startSource();
288
- this.stdout.write(QUERY_SYNC_UPDATE);
291
+ try {
292
+ if (this.stdin.isTTY && !this.injectedSource) {
293
+ this.inputSession = new TerminalInputSession(this.stdin, resolveWindowsTerminalShiftEnterBytes());
294
+ this.colorBroker = new ColorNegotiation({
295
+ enabled: this.stdout.isTTY === true,
296
+ writeQuery: (data, onError) => { this.stdout.write(data, onError); },
297
+ warn: (message) => this.output.warn(message),
298
+ });
299
+ const broker = this.colorBroker;
300
+ this.reportUnsubscribe = this.inputSession.onReport((report) => broker.receive(report));
301
+ this.stdin.on("error", this.colorStreamError);
302
+ this.stdout.on("error", this.colorStreamError);
303
+ }
304
+ this.layout = this.computeLayout();
305
+ this.resetVirtualTerminal();
306
+ this.stdout.write(ALT_SCREEN_ON + CLEAR_SCREEN + CURSOR_HOME + HIDE_CURSOR);
307
+ this.reconcileHostMouseCapture();
308
+ if (this.stdin.isTTY) {
309
+ this.startSource();
310
+ this.stdout.write(QUERY_SYNC_UPDATE);
311
+ }
312
+ this.resizeListener = () => this.handleResize();
313
+ this.stdout.on("resize", this.resizeListener);
314
+ this.scheduleRender();
315
+ }
316
+ catch (error) {
317
+ try {
318
+ this.stop();
319
+ }
320
+ catch (cleanupError) {
321
+ throw new AggregateError([error, cleanupError], "Terminal host start and cleanup failed");
322
+ }
323
+ throw error;
289
324
  }
290
- this.resizeListener = () => this.handleResize();
291
- this.stdout.on("resize", this.resizeListener);
292
- this.scheduleRender();
293
325
  }
294
326
  startSource() {
295
327
  this.source = this.injectedSource
296
- ?? createKeyEventSource({ stdin: this.stdin, stdout: this.stdout });
297
- this.source.start();
328
+ ?? createKeyEventSource({ stdin: this.stdin, stdout: this.stdout, inputSession: this.inputSession });
298
329
  this.sourceUnsubscribe = this.source.onEvents((events) => {
299
330
  this.router.handleEvents(events);
300
331
  });
301
332
  this.sourceResizeUnsubscribe = this.source.onResize((size) => this.handleResize(size));
333
+ this.source.start();
302
334
  }
303
335
  stopSource() {
304
336
  this.sourceUnsubscribe?.();
305
337
  this.sourceUnsubscribe = undefined;
306
338
  this.sourceResizeUnsubscribe?.();
307
339
  this.sourceResizeUnsubscribe = undefined;
308
- this.source?.stop();
340
+ const source = this.source;
309
341
  this.source = undefined;
342
+ source?.stop();
310
343
  }
311
344
  stop() {
312
345
  if (!this.started || this.stopped)
313
346
  return;
314
347
  this.stopped = true;
315
348
  this.resetDragScrollState();
316
- this.stopSource();
349
+ const errors = [];
350
+ const cleanup = (action) => {
351
+ try {
352
+ action();
353
+ }
354
+ catch (error) {
355
+ errors.push(error);
356
+ }
357
+ };
358
+ cleanup(() => this.stopSource());
359
+ cleanup(() => this.isolatedSource?.stop());
360
+ this.isolatedSource = undefined;
361
+ this.colorBroker?.dispose();
362
+ this.colorBroker = undefined;
363
+ this.reportUnsubscribe?.();
364
+ this.reportUnsubscribe = undefined;
365
+ cleanup(() => this.inputSession?.dispose());
366
+ this.inputSession = undefined;
367
+ this.stdin.removeListener("error", this.colorStreamError);
368
+ this.stdout.removeListener("error", this.colorStreamError);
317
369
  if (this.resizeListener) {
318
370
  this.stdout.removeListener("resize", this.resizeListener);
319
371
  this.resizeListener = undefined;
320
372
  }
321
- this.detachChild();
373
+ cleanup(() => this.detachChild());
322
374
  this.router.destroy();
323
375
  this.vt?.dispose();
324
376
  this.vt = undefined;
325
377
  this.mouseModes.clearAll();
326
- this.stdout.write(MOUSE_OFF + RESET_SCROLL_REGION + CLEAR_SCREEN + CURSOR_HOME + ALT_SCREEN_OFF + SHOW_CURSOR);
378
+ cleanup(() => this.stdout.write(MOUSE_OFF + RESET_SCROLL_REGION + CLEAR_SCREEN + CURSOR_HOME + ALT_SCREEN_OFF + SHOW_CURSOR));
327
379
  // Drop any lingering subscribers — once the host has stopped, late
328
380
  // interrupt callbacks would see torn-down state.
329
381
  this.interruptListeners.clear();
382
+ if (errors.length > 0)
383
+ throw new AggregateError(errors, "Terminal host cleanup failed");
330
384
  }
331
385
  /**
332
386
  * Attach a PTY handle to the host. The host begins routing PTY data
@@ -342,6 +396,25 @@ export class TerminalHost {
342
396
  */
343
397
  attachChild(handle) {
344
398
  this.detachChild();
399
+ const colors = this.registerTerminalColors((data) => handle.write(data));
400
+ this.childColors = colors;
401
+ try {
402
+ return this.attachRegisteredChild(handle);
403
+ }
404
+ catch (error) {
405
+ colors.dispose();
406
+ this.childColors = undefined;
407
+ try {
408
+ this.detachChild(handle);
409
+ }
410
+ catch (cleanupError) {
411
+ throw new AggregateError([error, cleanupError], "Terminal child attachment and cleanup failed");
412
+ }
413
+ throw error;
414
+ }
415
+ }
416
+ attachRegisteredChild(handle) {
417
+ const colors = this.childColors;
345
418
  // Each agent run starts with a fresh VT and empty scrollback so prior
346
419
  // child output cannot remain visible or be reached via PageUp.
347
420
  this.resetVirtualTerminal();
@@ -351,6 +424,7 @@ export class TerminalHost {
351
424
  this.router.attachChild(handle);
352
425
  this.agentSplit?.collaborator?.onChildAttached?.();
353
426
  const boundHandle = handle;
427
+ handle.onExit(() => colors?.dispose());
354
428
  let lastChildAlternate = this.vt?.isAlternate === true;
355
429
  handle.onData((data) => {
356
430
  // Skip render writes if a different child has been attached or the
@@ -426,6 +500,8 @@ export class TerminalHost {
426
500
  return;
427
501
  if (!this.childHandle)
428
502
  return;
503
+ this.childColors?.dispose();
504
+ this.childColors = undefined;
429
505
  this.clearSelection({ schedule: false });
430
506
  const collaborator = this.agentSplit?.collaborator;
431
507
  if (this.agentSplit?.open === true) {
@@ -474,13 +550,18 @@ export class TerminalHost {
474
550
  this.clearSelection({ schedule: false });
475
551
  this.vt?.dispose();
476
552
  const rect = this.childViewportRect();
553
+ const colors = this.childColors;
477
554
  this.vt = new VirtualTerminal(rect.cols, rect.rows, {
478
555
  onOscClipboard: (data) => this.forwardOscClipboard(data),
556
+ onColorQuery: (query) => colors?.query(query),
479
557
  });
480
558
  this.lastAppliedChildRect = rect;
481
559
  // A fresh VT means the cached frame no longer reflects the screen.
482
560
  this.invalidateFrameCache();
483
561
  }
562
+ registerTerminalColors = (writeReply, signal) => {
563
+ return this.colorBroker?.register(writeReply, signal) ?? { query() { }, dispose() { } };
564
+ };
484
565
  /**
485
566
  * Reset the per-child negotiation trackers (kitty keyboard + mouse modes)
486
567
  * and re-derive the host's mouse capture from the now-empty child mode set.
@@ -541,7 +622,7 @@ export class TerminalHost {
541
622
  * - leaves its own alternate screen,
542
623
  * - disables reflected child mouse reporting so the foreign UI is not
543
624
  * flooded with mouse sequences,
544
- * - removes its stdin data listener,
625
+ * - releases its keyboard lease while retaining the framing reader,
545
626
  * - restores the prior raw-mode state,
546
627
  * - blocks `scheduleRender()`/`renderNow()` until resume,
547
628
  * - keeps the virtual terminal, output buffer, router, and status bar
@@ -549,7 +630,7 @@ export class TerminalHost {
549
630
  * repaint after resume.
550
631
  *
551
632
  * On resume the host re-enters its alt screen, re-applies still-active
552
- * child-requested mouse modes, re-installs its raw-mode stdin listener,
633
+ * child-requested mouse modes, reacquires a borrowed raw-mode input lease,
553
634
  * recomputes layout, resizes the attached child if any, and schedules a
554
635
  * repaint.
555
636
  *
@@ -564,37 +645,51 @@ export class TerminalHost {
564
645
  throw new Error("TerminalHost.runIsolatedAltScreen: already suspended");
565
646
  }
566
647
  this.suspended = true;
567
- this.stopSource();
568
- this.reconcileHostMouseCapture();
569
- this.mouseModes.setReflectionEnabled(false);
570
- this.stdout.write(MOUSE_OFF + RESET_SCROLL_REGION + CLEAR_SCREEN + CURSOR_HOME + ALT_SCREEN_OFF + SHOW_CURSOR);
571
- const layoutSnapshot = this.layout ?? this.computeLayout();
572
- const io = {
573
- stdin: this.stdin,
574
- stdout: this.stdout,
575
- columns: layoutSnapshot.columns,
576
- rows: layoutSnapshot.rows,
577
- triggerDump: () => this.onDump?.(),
578
- };
648
+ this.colorBroker?.setSuspended(true);
649
+ let isolatedSource;
579
650
  try {
651
+ this.stopSource();
652
+ this.reconcileHostMouseCapture();
653
+ this.mouseModes.setReflectionEnabled(false);
654
+ this.stdout.write(MOUSE_OFF + RESET_SCROLL_REGION + CLEAR_SCREEN + CURSOR_HOME + ALT_SCREEN_OFF + SHOW_CURSOR);
655
+ const layoutSnapshot = this.layout ?? this.computeLayout();
656
+ isolatedSource = this.injectedSource
657
+ ?? createKeyEventSource({ stdin: this.stdin, stdout: this.stdout, inputSession: this.inputSession });
658
+ this.isolatedSource = isolatedSource;
659
+ const io = {
660
+ source: isolatedSource,
661
+ stdout: this.stdout,
662
+ columns: layoutSnapshot.columns,
663
+ rows: layoutSnapshot.rows,
664
+ triggerDump: () => { if (this.isActive)
665
+ this.onDump?.(); },
666
+ };
580
667
  return await run(io);
581
668
  }
582
669
  finally {
583
- this.reconcileHostMouseCapture();
584
- this.stdout.write(ALT_SCREEN_ON
585
- + CLEAR_SCREEN
586
- + CURSOR_HOME
587
- + HIDE_CURSOR
588
- + this.mouseModes.setReflectionEnabled(true));
589
- if (this.stdin.isTTY) {
590
- this.startSource();
670
+ try {
671
+ isolatedSource?.stop();
672
+ }
673
+ finally {
674
+ this.isolatedSource = undefined;
675
+ if (!this.stopped) {
676
+ this.reconcileHostMouseCapture();
677
+ this.stdout.write(ALT_SCREEN_ON
678
+ + CLEAR_SCREEN
679
+ + CURSOR_HOME
680
+ + HIDE_CURSOR
681
+ + this.mouseModes.setReflectionEnabled(true));
682
+ if (this.stdin.isTTY)
683
+ this.startSource();
684
+ this.suspended = false;
685
+ this.colorBroker?.setSuspended(false);
686
+ this.layout = this.computeLayout();
687
+ this.applyChildViewportSize();
688
+ this.invalidateFrameCache();
689
+ this.notifyParentUiResize();
690
+ this.scheduleRender();
691
+ }
591
692
  }
592
- this.suspended = false;
593
- this.layout = this.computeLayout();
594
- this.applyChildViewportSize();
595
- this.invalidateFrameCache();
596
- this.notifyParentUiResize();
597
- this.scheduleRender();
598
693
  }
599
694
  }
600
695
  invalidateFrameCache() {