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.
- package/dist/crosscheck/coordinator.d.ts.map +1 -1
- package/dist/crosscheck/coordinator.js +1 -0
- package/dist/crosscheck/coordinator.js.map +1 -1
- package/dist/crosscheck/live-agent-session.d.ts +3 -0
- package/dist/crosscheck/live-agent-session.d.ts.map +1 -1
- package/dist/crosscheck/live-agent-session.js +12 -2
- package/dist/crosscheck/live-agent-session.js.map +1 -1
- package/dist/offscreen/controller.d.ts +1 -1
- package/dist/offscreen/controller.d.ts.map +1 -1
- package/dist/offscreen/controller.js.map +1 -1
- package/dist/offscreen/fork.d.ts +2 -1
- package/dist/offscreen/fork.d.ts.map +1 -1
- package/dist/offscreen/fork.js +11 -2
- package/dist/offscreen/fork.js.map +1 -1
- package/dist/providers/copilot/trust.js +1 -1
- package/dist/providers/copilot/trust.js.map +1 -1
- package/dist/terminal/color-negotiation.d.ts +37 -0
- package/dist/terminal/color-negotiation.d.ts.map +1 -0
- package/dist/terminal/color-negotiation.js +154 -0
- package/dist/terminal/color-negotiation.js.map +1 -0
- package/dist/terminal/color-protocol.d.ts +36 -0
- package/dist/terminal/color-protocol.d.ts.map +1 -0
- package/dist/terminal/color-protocol.js +88 -0
- package/dist/terminal/color-protocol.js.map +1 -0
- package/dist/terminal/host-input-mode.d.ts.map +1 -1
- package/dist/terminal/host-input-mode.js +6 -2
- package/dist/terminal/host-input-mode.js.map +1 -1
- package/dist/terminal/host.d.ts +13 -4
- package/dist/terminal/host.d.ts.map +1 -1
- package/dist/terminal/host.js +139 -44
- package/dist/terminal/host.js.map +1 -1
- package/dist/terminal/input-session.d.ts +23 -0
- package/dist/terminal/input-session.d.ts.map +1 -0
- package/dist/terminal/input-session.js +97 -0
- package/dist/terminal/input-session.js.map +1 -0
- package/dist/terminal/key-event-source.d.ts +5 -1
- package/dist/terminal/key-event-source.d.ts.map +1 -1
- package/dist/terminal/key-event-source.js +1 -0
- package/dist/terminal/key-event-source.js.map +1 -1
- package/dist/terminal/stdin-byte-source.d.ts +13 -8
- package/dist/terminal/stdin-byte-source.d.ts.map +1 -1
- package/dist/terminal/stdin-byte-source.js +84 -40
- package/dist/terminal/stdin-byte-source.js.map +1 -1
- package/dist/terminal/virtual-terminal.d.ts +2 -0
- package/dist/terminal/virtual-terminal.d.ts.map +1 -1
- package/dist/terminal/virtual-terminal.js +17 -0
- package/dist/terminal/virtual-terminal.js.map +1 -1
- package/dist/terminal-input.d.ts +19 -2
- package/dist/terminal-input.d.ts.map +1 -1
- package/dist/terminal-input.js +162 -6
- package/dist/terminal-input.js.map +1 -1
- 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,
|
|
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
|
-
|
|
24
|
-
|
|
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;
|
|
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"}
|
package/dist/terminal/host.d.ts
CHANGED
|
@@ -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
|
|
46
|
+
* left its own alt screen. The supplied source borrows the host's framing owner.
|
|
46
47
|
*/
|
|
47
48
|
export interface IsolatedAltScreenIo {
|
|
48
|
-
|
|
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
|
-
* -
|
|
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,
|
|
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":"AAeA,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAQxD,OAAO,EACL,yBAAyB,EAEzB,KAAK,mBAAmB,EACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAIL,KAAK,YAAY,EAElB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/terminal/host.ts"],"names":[],"mappings":"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"}
|
package/dist/terminal/host.js
CHANGED
|
@@ -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
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
* -
|
|
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,
|
|
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.
|
|
568
|
-
|
|
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
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
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() {
|