poly-weaver 1.0.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/agents/implementors/adapter.d.ts +2 -0
- package/dist/agents/implementors/adapter.d.ts.map +1 -1
- package/dist/agents/implementors/adapter.js +8 -4
- package/dist/agents/implementors/adapter.js.map +1 -1
- package/dist/agents/implementors/handler.d.ts.map +1 -1
- package/dist/agents/implementors/handler.js +33 -6
- package/dist/agents/implementors/handler.js.map +1 -1
- package/dist/agents/implementors/prompts.d.ts +5 -4
- package/dist/agents/implementors/prompts.d.ts.map +1 -1
- package/dist/agents/implementors/prompts.js +14 -13
- package/dist/agents/implementors/prompts.js.map +1 -1
- package/dist/agents/implementors/types.d.ts +6 -4
- package/dist/agents/implementors/types.d.ts.map +1 -1
- package/dist/agents/interviewers/adapter.d.ts.map +1 -1
- package/dist/agents/interviewers/adapter.js +2 -1
- package/dist/agents/interviewers/adapter.js.map +1 -1
- package/dist/agents/interviewers/completion-warning.d.ts +5 -0
- package/dist/agents/interviewers/completion-warning.d.ts.map +1 -0
- package/dist/agents/interviewers/completion-warning.js +20 -0
- package/dist/agents/interviewers/completion-warning.js.map +1 -0
- package/dist/agents/interviewers/handler.d.ts.map +1 -1
- package/dist/agents/interviewers/handler.js +5 -0
- package/dist/agents/interviewers/handler.js.map +1 -1
- package/dist/agents/interviewers/types.d.ts +2 -0
- package/dist/agents/interviewers/types.d.ts.map +1 -1
- package/dist/agents/plan-steering.d.ts +16 -0
- package/dist/agents/plan-steering.d.ts.map +1 -0
- package/dist/agents/plan-steering.js +102 -0
- package/dist/agents/plan-steering.js.map +1 -0
- package/dist/agents/planners/adapter.d.ts +3 -1
- package/dist/agents/planners/adapter.d.ts.map +1 -1
- package/dist/agents/planners/adapter.js +13 -20
- package/dist/agents/planners/adapter.js.map +1 -1
- package/dist/agents/planners/handler.d.ts.map +1 -1
- package/dist/agents/planners/handler.js +44 -55
- package/dist/agents/planners/handler.js.map +1 -1
- package/dist/agents/planners/prompts.d.ts +6 -5
- package/dist/agents/planners/prompts.d.ts.map +1 -1
- package/dist/agents/planners/prompts.js +32 -18
- package/dist/agents/planners/prompts.js.map +1 -1
- package/dist/agents/planners/types.d.ts +8 -12
- package/dist/agents/planners/types.d.ts.map +1 -1
- package/dist/agents/prompt-utils.d.ts +2 -0
- package/dist/agents/prompt-utils.d.ts.map +1 -1
- package/dist/agents/prompt-utils.js +5 -0
- package/dist/agents/prompt-utils.js.map +1 -1
- package/dist/agents/reviewers/adapter.d.ts.map +1 -1
- package/dist/agents/reviewers/adapter.js +6 -2
- package/dist/agents/reviewers/adapter.js.map +1 -1
- package/dist/agents/reviewers/handler.d.ts.map +1 -1
- package/dist/agents/reviewers/handler.js +22 -7
- package/dist/agents/reviewers/handler.js.map +1 -1
- package/dist/agents/reviewers/prompts.d.ts +4 -4
- package/dist/agents/reviewers/prompts.d.ts.map +1 -1
- package/dist/agents/reviewers/prompts.js +43 -23
- package/dist/agents/reviewers/prompts.js.map +1 -1
- package/dist/agents/reviewers/types.d.ts +7 -4
- package/dist/agents/reviewers/types.d.ts.map +1 -1
- package/dist/agents/reviewers/types.js.map +1 -1
- package/dist/agents/runner.d.ts +4 -4
- package/dist/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +13 -3
- package/dist/agents/runner.js.map +1 -1
- 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/flow/artifacts.d.ts +8 -1
- package/dist/flow/artifacts.d.ts.map +1 -1
- package/dist/flow/artifacts.js +82 -0
- package/dist/flow/artifacts.js.map +1 -1
- package/dist/flow/built-in/default-factory.d.ts.map +1 -1
- package/dist/flow/built-in/default-factory.js +0 -2
- package/dist/flow/built-in/default-factory.js.map +1 -1
- package/dist/flow/executor.d.ts +1 -2
- package/dist/flow/executor.d.ts.map +1 -1
- package/dist/flow/executor.js +25 -29
- package/dist/flow/executor.js.map +1 -1
- package/dist/flow/non-default-feedback.d.ts +14 -0
- package/dist/flow/non-default-feedback.d.ts.map +1 -0
- package/dist/flow/non-default-feedback.js +45 -0
- package/dist/flow/non-default-feedback.js.map +1 -0
- package/dist/flow/types.d.ts +11 -5
- package/dist/flow/types.d.ts.map +1 -1
- package/dist/flow/types.js +1 -2
- package/dist/flow/types.js.map +1 -1
- package/dist/managed-spec.d.ts +2 -0
- package/dist/managed-spec.d.ts.map +1 -1
- package/dist/managed-spec.js +22 -0
- package/dist/managed-spec.js.map +1 -1
- package/dist/offscreen/agent-viewer.d.ts +4 -1
- package/dist/offscreen/agent-viewer.d.ts.map +1 -1
- package/dist/offscreen/agent-viewer.js +58 -2
- package/dist/offscreen/agent-viewer.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/orchestrator.d.ts +1 -2
- package/dist/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator.js +5 -10
- package/dist/orchestrator.js.map +1 -1
- package/dist/prompts.d.ts +0 -16
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +0 -35
- package/dist/prompts.js.map +1 -1
- package/dist/providers/base-completion.d.ts +12 -2
- package/dist/providers/base-completion.d.ts.map +1 -1
- package/dist/providers/base-completion.js +111 -2
- package/dist/providers/base-completion.js.map +1 -1
- package/dist/providers/claude/completion.d.ts +3 -1
- package/dist/providers/claude/completion.d.ts.map +1 -1
- package/dist/providers/claude/completion.js +40 -4
- package/dist/providers/claude/completion.js.map +1 -1
- package/dist/providers/claude/session.d.ts +1 -32
- package/dist/providers/claude/session.d.ts.map +1 -1
- package/dist/providers/claude/session.js +1 -138
- package/dist/providers/claude/session.js.map +1 -1
- package/dist/providers/claude/strategy.d.ts.map +1 -1
- package/dist/providers/claude/strategy.js +3 -1
- package/dist/providers/claude/strategy.js.map +1 -1
- package/dist/providers/codex/completion.d.ts +3 -1
- package/dist/providers/codex/completion.d.ts.map +1 -1
- package/dist/providers/codex/completion.js +36 -5
- package/dist/providers/codex/completion.js.map +1 -1
- package/dist/providers/codex/session.d.ts +1 -1
- package/dist/providers/codex/session.d.ts.map +1 -1
- package/dist/providers/codex/session.js +1 -1
- package/dist/providers/codex/session.js.map +1 -1
- package/dist/providers/codex/strategy.d.ts.map +1 -1
- package/dist/providers/codex/strategy.js +3 -1
- package/dist/providers/codex/strategy.js.map +1 -1
- package/dist/providers/completion-gate.d.ts +14 -0
- package/dist/providers/completion-gate.d.ts.map +1 -0
- package/dist/providers/completion-gate.js +36 -0
- package/dist/providers/completion-gate.js.map +1 -0
- package/dist/providers/copilot/observation.d.ts +2 -3
- package/dist/providers/copilot/observation.d.ts.map +1 -1
- package/dist/providers/copilot/observation.js +28 -25
- package/dist/providers/copilot/observation.js.map +1 -1
- package/dist/providers/copilot/session.d.ts +0 -33
- package/dist/providers/copilot/session.d.ts.map +1 -1
- package/dist/providers/copilot/session.js +0 -149
- package/dist/providers/copilot/session.js.map +1 -1
- package/dist/providers/copilot/trust.js +1 -1
- package/dist/providers/copilot/trust.js.map +1 -1
- package/dist/providers/types.d.ts +9 -14
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js.map +1 -1
- package/dist/session/restore.d.ts +2 -1
- package/dist/session/restore.d.ts.map +1 -1
- package/dist/session/restore.js +26 -3
- package/dist/session/restore.js.map +1 -1
- package/dist/session/session-store.d.ts.map +1 -1
- package/dist/session/session-store.js +9 -2
- package/dist/session/session-store.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 +15 -4
- package/dist/terminal/host.d.ts.map +1 -1
- package/dist/terminal/host.js +158 -59
- 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/layout.d.ts +7 -4
- package/dist/terminal/layout.d.ts.map +1 -1
- package/dist/terminal/layout.js +5 -3
- package/dist/terminal/layout.js.map +1 -1
- package/dist/terminal/output.d.ts +9 -2
- package/dist/terminal/output.d.ts.map +1 -1
- package/dist/terminal/output.js +13 -3
- package/dist/terminal/output.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/dist/user/curate-handler.d.ts +1 -5
- package/dist/user/curate-handler.d.ts.map +1 -1
- package/dist/user/curate-handler.js +32 -69
- package/dist/user/curate-handler.js.map +1 -1
- package/dist/user/handler.d.ts.map +1 -1
- package/dist/user/handler.js +18 -1
- package/dist/user/handler.js.map +1 -1
- package/dist/user/host-prompt.d.ts.map +1 -1
- package/dist/user/host-prompt.js +5 -4
- package/dist/user/host-prompt.js.map +1 -1
- package/dist/user/prompt.d.ts +3 -0
- package/dist/user/prompt.d.ts.map +1 -1
- package/dist/user/prompt.js.map +1 -1
- package/dist/user/review-feedback.d.ts +43 -0
- package/dist/user/review-feedback.d.ts.map +1 -0
- package/dist/user/review-feedback.js +184 -0
- package/dist/user/review-feedback.js.map +1 -0
- package/dist/user/review-plan-pane.d.ts +5 -0
- package/dist/user/review-plan-pane.d.ts.map +1 -0
- package/dist/user/review-plan-pane.js +26 -0
- package/dist/user/review-plan-pane.js.map +1 -0
- 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":"AASA,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAC1C,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC;AAC5C,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,GAAG,IAAI,CAAC;AAC/C,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACxC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,CAAU,CAAC;AAQ/F,MAAM,CAAC,MAAM,UAAU,GAAe;IACpC,GAAG,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;IAC5B,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC;IACtD,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC;CAC7C,CAAC;AAEF,SAAS,YAAY,CAAC,KAAa;IACjC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,KAAK,IAAI,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACxD,CAAC;AAED,SAAS,OAAO,CAAC,KAAa;IAC5B,OAAO,iDAAiD,CAAC,IAAI,CAAC,KAAK,CAAC;WAC/D,sDAAsD,CAAC,IAAI,CAAC,KAAK,CAAC;WAClE,CAAC,qDAAqD,CAAC,IAAI,CAAC,KAAK,CAAC;eAChE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,IAAY;IAC7D,IAAI,IAAI,CAAC,MAAM,GAAG,qBAAqB;QAAE,OAAO,EAAE,CAAC;IACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,OAAO,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3D,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAiB;IAC7C,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAiB;IAChD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,YAAY,CAAC,CAAC,OAAO,YAAY,CAAC;QACvC,KAAK,YAAY,CAAC,CAAC,OAAO,eAAe,CAAC;QAC1C,KAAK,YAAY,CAAC,CAAC,OAAO,eAAe,CAAC;QAC1C,KAAK,SAAS,CAAC,CAAC,OAAO,UAAU,KAAK,CAAC,KAAK,QAAQ,CAAC;IACvD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACnD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,YAAY,CAAC,CAAC,OAAO,aAAa,MAAM,CAAC,KAAK,GAAG,CAAC;QACvD,KAAK,YAAY,CAAC,CAAC,OAAO,WAAW,MAAM,CAAC,KAAK,MAAM,CAAC;QACxD,KAAK,YAAY,CAAC,CAAC,OAAO,WAAW,MAAM,CAAC,KAAK,MAAM,CAAC;QACxD,KAAK,SAAS,CAAC,CAAC,OAAO,UAAU,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,MAAM,CAAC;IACtE,CAAC;AACH,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,IAAY;IAC5D,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QAC5B,OAAO,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnF,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,OAAO,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3D,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -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;
|
|
@@ -240,6 +247,7 @@ export declare class TerminalHost implements FeedbackSink {
|
|
|
240
247
|
isAgentSplitOpen(): boolean;
|
|
241
248
|
setAgentSplitCollaborator(collaborator: AgentSplitCollaborator | undefined): void;
|
|
242
249
|
openAgentSplit(pane: ArtifactPaneController): void;
|
|
250
|
+
invalidateAgentSplit(pane: ArtifactPaneController): void;
|
|
243
251
|
closeAgentSplit(): void;
|
|
244
252
|
/** Replace the status model after construction. */
|
|
245
253
|
attachStatusBar(bar: StatusBar): void;
|
|
@@ -269,6 +277,7 @@ export declare class TerminalHost implements FeedbackSink {
|
|
|
269
277
|
* The returned function detaches the child idempotently.
|
|
270
278
|
*/
|
|
271
279
|
attachChild(handle: PtyHandle): () => void;
|
|
280
|
+
private attachRegisteredChild;
|
|
272
281
|
detachChild(handle?: PtyHandle): void;
|
|
273
282
|
/**
|
|
274
283
|
* Discard the current child surface (VT screen + scrollback) and
|
|
@@ -283,6 +292,7 @@ export declare class TerminalHost implements FeedbackSink {
|
|
|
283
292
|
clearMouseModeSource(source: string): void;
|
|
284
293
|
/** Dispose the current `VirtualTerminal` and create a fresh one sized to the current layout. */
|
|
285
294
|
private resetVirtualTerminal;
|
|
295
|
+
registerTerminalColors: RegisterTerminalColors;
|
|
286
296
|
/**
|
|
287
297
|
* Reset the per-child negotiation trackers (kitty keyboard + mouse modes)
|
|
288
298
|
* and re-derive the host's mouse capture from the now-empty child mode set.
|
|
@@ -306,7 +316,7 @@ export declare class TerminalHost implements FeedbackSink {
|
|
|
306
316
|
* - leaves its own alternate screen,
|
|
307
317
|
* - disables reflected child mouse reporting so the foreign UI is not
|
|
308
318
|
* flooded with mouse sequences,
|
|
309
|
-
* -
|
|
319
|
+
* - releases its keyboard lease while retaining the framing reader,
|
|
310
320
|
* - restores the prior raw-mode state,
|
|
311
321
|
* - blocks `scheduleRender()`/`renderNow()` until resume,
|
|
312
322
|
* - keeps the virtual terminal, output buffer, router, and status bar
|
|
@@ -314,7 +324,7 @@ export declare class TerminalHost implements FeedbackSink {
|
|
|
314
324
|
* repaint after resume.
|
|
315
325
|
*
|
|
316
326
|
* On resume the host re-enters its alt screen, re-applies still-active
|
|
317
|
-
* child-requested mouse modes,
|
|
327
|
+
* child-requested mouse modes, reacquires a borrowed raw-mode input lease,
|
|
318
328
|
* recomputes layout, resizes the attached child if any, and schedules a
|
|
319
329
|
* repaint.
|
|
320
330
|
*
|
|
@@ -393,6 +403,7 @@ export declare class TerminalHost implements FeedbackSink {
|
|
|
393
403
|
private handleChildAlternateChange;
|
|
394
404
|
private renderUiSurfaceRows;
|
|
395
405
|
private renderMessageRows;
|
|
406
|
+
private messageRows;
|
|
396
407
|
private handleResize;
|
|
397
408
|
private notifyParentUiResize;
|
|
398
409
|
private computeLayout;
|
|
@@ -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
|
@@ -2,9 +2,12 @@ import { ALT_SCREEN_OFF, ALT_SCREEN_ON, BEGIN_SYNC_UPDATE, CLEAR_SCREEN, CURSOR_
|
|
|
2
2
|
import { computeTerminalLayout } from "./layout.js";
|
|
3
3
|
import { VirtualTerminal } from "./virtual-terminal.js";
|
|
4
4
|
import { composeAbsoluteRow, renderChildViewportRows, renderViewportLines, renderStatusRowBody, shouldShowVtCursor, } from "./render.js";
|
|
5
|
-
import { BufferOrchestrationOutput,
|
|
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;
|
|
@@ -233,6 +242,12 @@ export class TerminalHost {
|
|
|
233
242
|
this.invalidateFrameCache();
|
|
234
243
|
this.scheduleRender();
|
|
235
244
|
}
|
|
245
|
+
invalidateAgentSplit(pane) {
|
|
246
|
+
if (!this.agentSplit?.open || this.agentSplit.pane !== pane)
|
|
247
|
+
return;
|
|
248
|
+
this.invalidateFrameCache();
|
|
249
|
+
this.scheduleRender();
|
|
250
|
+
}
|
|
236
251
|
closeAgentSplit() {
|
|
237
252
|
if (this.agentSplit?.open !== true)
|
|
238
253
|
return;
|
|
@@ -273,54 +288,99 @@ export class TerminalHost {
|
|
|
273
288
|
return;
|
|
274
289
|
this.started = true;
|
|
275
290
|
this.stopped = false;
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
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;
|
|
283
324
|
}
|
|
284
|
-
this.resizeListener = () => this.handleResize();
|
|
285
|
-
this.stdout.on("resize", this.resizeListener);
|
|
286
|
-
this.scheduleRender();
|
|
287
325
|
}
|
|
288
326
|
startSource() {
|
|
289
327
|
this.source = this.injectedSource
|
|
290
|
-
?? createKeyEventSource({ stdin: this.stdin, stdout: this.stdout });
|
|
291
|
-
this.source.start();
|
|
328
|
+
?? createKeyEventSource({ stdin: this.stdin, stdout: this.stdout, inputSession: this.inputSession });
|
|
292
329
|
this.sourceUnsubscribe = this.source.onEvents((events) => {
|
|
293
330
|
this.router.handleEvents(events);
|
|
294
331
|
});
|
|
295
332
|
this.sourceResizeUnsubscribe = this.source.onResize((size) => this.handleResize(size));
|
|
333
|
+
this.source.start();
|
|
296
334
|
}
|
|
297
335
|
stopSource() {
|
|
298
336
|
this.sourceUnsubscribe?.();
|
|
299
337
|
this.sourceUnsubscribe = undefined;
|
|
300
338
|
this.sourceResizeUnsubscribe?.();
|
|
301
339
|
this.sourceResizeUnsubscribe = undefined;
|
|
302
|
-
this.source
|
|
340
|
+
const source = this.source;
|
|
303
341
|
this.source = undefined;
|
|
342
|
+
source?.stop();
|
|
304
343
|
}
|
|
305
344
|
stop() {
|
|
306
345
|
if (!this.started || this.stopped)
|
|
307
346
|
return;
|
|
308
347
|
this.stopped = true;
|
|
309
348
|
this.resetDragScrollState();
|
|
310
|
-
|
|
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);
|
|
311
369
|
if (this.resizeListener) {
|
|
312
370
|
this.stdout.removeListener("resize", this.resizeListener);
|
|
313
371
|
this.resizeListener = undefined;
|
|
314
372
|
}
|
|
315
|
-
this.detachChild();
|
|
373
|
+
cleanup(() => this.detachChild());
|
|
316
374
|
this.router.destroy();
|
|
317
375
|
this.vt?.dispose();
|
|
318
376
|
this.vt = undefined;
|
|
319
377
|
this.mouseModes.clearAll();
|
|
320
|
-
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));
|
|
321
379
|
// Drop any lingering subscribers — once the host has stopped, late
|
|
322
380
|
// interrupt callbacks would see torn-down state.
|
|
323
381
|
this.interruptListeners.clear();
|
|
382
|
+
if (errors.length > 0)
|
|
383
|
+
throw new AggregateError(errors, "Terminal host cleanup failed");
|
|
324
384
|
}
|
|
325
385
|
/**
|
|
326
386
|
* Attach a PTY handle to the host. The host begins routing PTY data
|
|
@@ -336,6 +396,25 @@ export class TerminalHost {
|
|
|
336
396
|
*/
|
|
337
397
|
attachChild(handle) {
|
|
338
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;
|
|
339
418
|
// Each agent run starts with a fresh VT and empty scrollback so prior
|
|
340
419
|
// child output cannot remain visible or be reached via PageUp.
|
|
341
420
|
this.resetVirtualTerminal();
|
|
@@ -345,6 +424,7 @@ export class TerminalHost {
|
|
|
345
424
|
this.router.attachChild(handle);
|
|
346
425
|
this.agentSplit?.collaborator?.onChildAttached?.();
|
|
347
426
|
const boundHandle = handle;
|
|
427
|
+
handle.onExit(() => colors?.dispose());
|
|
348
428
|
let lastChildAlternate = this.vt?.isAlternate === true;
|
|
349
429
|
handle.onData((data) => {
|
|
350
430
|
// Skip render writes if a different child has been attached or the
|
|
@@ -420,6 +500,8 @@ export class TerminalHost {
|
|
|
420
500
|
return;
|
|
421
501
|
if (!this.childHandle)
|
|
422
502
|
return;
|
|
503
|
+
this.childColors?.dispose();
|
|
504
|
+
this.childColors = undefined;
|
|
423
505
|
this.clearSelection({ schedule: false });
|
|
424
506
|
const collaborator = this.agentSplit?.collaborator;
|
|
425
507
|
if (this.agentSplit?.open === true) {
|
|
@@ -468,13 +550,18 @@ export class TerminalHost {
|
|
|
468
550
|
this.clearSelection({ schedule: false });
|
|
469
551
|
this.vt?.dispose();
|
|
470
552
|
const rect = this.childViewportRect();
|
|
553
|
+
const colors = this.childColors;
|
|
471
554
|
this.vt = new VirtualTerminal(rect.cols, rect.rows, {
|
|
472
555
|
onOscClipboard: (data) => this.forwardOscClipboard(data),
|
|
556
|
+
onColorQuery: (query) => colors?.query(query),
|
|
473
557
|
});
|
|
474
558
|
this.lastAppliedChildRect = rect;
|
|
475
559
|
// A fresh VT means the cached frame no longer reflects the screen.
|
|
476
560
|
this.invalidateFrameCache();
|
|
477
561
|
}
|
|
562
|
+
registerTerminalColors = (writeReply, signal) => {
|
|
563
|
+
return this.colorBroker?.register(writeReply, signal) ?? { query() { }, dispose() { } };
|
|
564
|
+
};
|
|
478
565
|
/**
|
|
479
566
|
* Reset the per-child negotiation trackers (kitty keyboard + mouse modes)
|
|
480
567
|
* and re-derive the host's mouse capture from the now-empty child mode set.
|
|
@@ -535,7 +622,7 @@ export class TerminalHost {
|
|
|
535
622
|
* - leaves its own alternate screen,
|
|
536
623
|
* - disables reflected child mouse reporting so the foreign UI is not
|
|
537
624
|
* flooded with mouse sequences,
|
|
538
|
-
* -
|
|
625
|
+
* - releases its keyboard lease while retaining the framing reader,
|
|
539
626
|
* - restores the prior raw-mode state,
|
|
540
627
|
* - blocks `scheduleRender()`/`renderNow()` until resume,
|
|
541
628
|
* - keeps the virtual terminal, output buffer, router, and status bar
|
|
@@ -543,7 +630,7 @@ export class TerminalHost {
|
|
|
543
630
|
* repaint after resume.
|
|
544
631
|
*
|
|
545
632
|
* On resume the host re-enters its alt screen, re-applies still-active
|
|
546
|
-
* child-requested mouse modes,
|
|
633
|
+
* child-requested mouse modes, reacquires a borrowed raw-mode input lease,
|
|
547
634
|
* recomputes layout, resizes the attached child if any, and schedules a
|
|
548
635
|
* repaint.
|
|
549
636
|
*
|
|
@@ -558,37 +645,51 @@ export class TerminalHost {
|
|
|
558
645
|
throw new Error("TerminalHost.runIsolatedAltScreen: already suspended");
|
|
559
646
|
}
|
|
560
647
|
this.suspended = true;
|
|
561
|
-
this.
|
|
562
|
-
|
|
563
|
-
this.mouseModes.setReflectionEnabled(false);
|
|
564
|
-
this.stdout.write(MOUSE_OFF + RESET_SCROLL_REGION + CLEAR_SCREEN + CURSOR_HOME + ALT_SCREEN_OFF + SHOW_CURSOR);
|
|
565
|
-
const layoutSnapshot = this.layout ?? this.computeLayout();
|
|
566
|
-
const io = {
|
|
567
|
-
stdin: this.stdin,
|
|
568
|
-
stdout: this.stdout,
|
|
569
|
-
columns: layoutSnapshot.columns,
|
|
570
|
-
rows: layoutSnapshot.rows,
|
|
571
|
-
triggerDump: () => this.onDump?.(),
|
|
572
|
-
};
|
|
648
|
+
this.colorBroker?.setSuspended(true);
|
|
649
|
+
let isolatedSource;
|
|
573
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
|
+
};
|
|
574
667
|
return await run(io);
|
|
575
668
|
}
|
|
576
669
|
finally {
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
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
|
+
}
|
|
585
692
|
}
|
|
586
|
-
this.suspended = false;
|
|
587
|
-
this.layout = this.computeLayout();
|
|
588
|
-
this.applyChildViewportSize();
|
|
589
|
-
this.invalidateFrameCache();
|
|
590
|
-
this.notifyParentUiResize();
|
|
591
|
-
this.scheduleRender();
|
|
592
693
|
}
|
|
593
694
|
}
|
|
594
695
|
invalidateFrameCache() {
|
|
@@ -1677,19 +1778,16 @@ export class TerminalHost {
|
|
|
1677
1778
|
renderMessageRows(rows, layout) {
|
|
1678
1779
|
if (layout.warningRows === 0 || layout.warningStartRow === undefined)
|
|
1679
1780
|
return;
|
|
1680
|
-
const
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
// Show the newest messages when the buffer has more than the strip
|
|
1684
|
-
// can hold. The strip is sized to `layout.warningRows`, capped at 3
|
|
1685
|
-
// by `computeTerminalLayout`.
|
|
1686
|
-
const slice = messages.slice(-layout.warningRows);
|
|
1687
|
-
for (let i = 0; i < slice.length; i++) {
|
|
1688
|
-
const text = formatOrchestrationMessage(slice[i]);
|
|
1689
|
-
const padded = padOrClip(text, layout.columns);
|
|
1781
|
+
const lines = this.messageRows(layout.columns).slice(-layout.warningRows);
|
|
1782
|
+
for (let i = 0; i < lines.length; i++) {
|
|
1783
|
+
const padded = padOrClip(lines[i], layout.columns);
|
|
1690
1784
|
rows[layout.warningStartRow - 1 + i] = `\x1b[2K\x1b[0m${padded}`;
|
|
1691
1785
|
}
|
|
1692
1786
|
}
|
|
1787
|
+
messageRows(columns) {
|
|
1788
|
+
return this.bufferOutput.snapshot().slice(-3)
|
|
1789
|
+
.flatMap((message) => formatOrchestrationMessageRows(message, columns));
|
|
1790
|
+
}
|
|
1693
1791
|
handleResize(size) {
|
|
1694
1792
|
if (!this.isActive)
|
|
1695
1793
|
return;
|
|
@@ -1735,13 +1833,14 @@ export class TerminalHost {
|
|
|
1735
1833
|
// Layout policy lives here, not in StatusBar.reservedRows. The status
|
|
1736
1834
|
// row is reserved whenever a status bar is attached and we have a TTY
|
|
1737
1835
|
// — `computeTerminalLayout` enforces the rows >= 2 rule. The warning
|
|
1738
|
-
// strip
|
|
1739
|
-
// layout function).
|
|
1836
|
+
// strip keeps the newest three messages, expanding opt-in wrapped text.
|
|
1740
1837
|
const statusEnabled = this.statusBar !== undefined
|
|
1741
1838
|
&& this.stdout.isTTY === true
|
|
1742
1839
|
&& !this.parentUiSuppressesStatusBar();
|
|
1743
|
-
const warningRows = this.
|
|
1744
|
-
return computeTerminalLayout({
|
|
1840
|
+
const warningRows = this.messageRows(columns).length;
|
|
1841
|
+
return computeTerminalLayout({
|
|
1842
|
+
columns, rows, statusEnabled, warningRows, maxWarningRows: warningRows,
|
|
1843
|
+
});
|
|
1745
1844
|
}
|
|
1746
1845
|
parentUiSuppressesStatusBar() {
|
|
1747
1846
|
return this.parentUi !== undefined
|