poly-weaver 0.10.6 → 0.11.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 (131) hide show
  1. package/README.md +16 -24
  2. package/dist/agents/runner.d.ts.map +1 -1
  3. package/dist/agents/runner.js +6 -1
  4. package/dist/agents/runner.js.map +1 -1
  5. package/dist/ansi.d.ts +23 -4
  6. package/dist/ansi.d.ts.map +1 -1
  7. package/dist/ansi.js +28 -5
  8. package/dist/ansi.js.map +1 -1
  9. package/dist/auto-update/gate.d.ts +1 -0
  10. package/dist/auto-update/gate.d.ts.map +1 -1
  11. package/dist/auto-update/gate.js +7 -8
  12. package/dist/auto-update/gate.js.map +1 -1
  13. package/dist/auto-update/install-agents.d.ts +1 -0
  14. package/dist/auto-update/install-agents.d.ts.map +1 -1
  15. package/dist/auto-update/install-agents.js +19 -8
  16. package/dist/auto-update/install-agents.js.map +1 -1
  17. package/dist/auto-update/update-request.d.ts +23 -0
  18. package/dist/auto-update/update-request.d.ts.map +1 -0
  19. package/dist/auto-update/update-request.js +83 -0
  20. package/dist/auto-update/update-request.js.map +1 -0
  21. package/dist/cli.js +0 -0
  22. package/dist/dump/hotkey.d.ts +0 -3
  23. package/dist/dump/hotkey.d.ts.map +1 -1
  24. package/dist/dump/hotkey.js +0 -3
  25. package/dist/dump/hotkey.js.map +1 -1
  26. package/dist/launcher.d.ts +23 -0
  27. package/dist/launcher.d.ts.map +1 -0
  28. package/dist/launcher.js +90 -0
  29. package/dist/launcher.js.map +1 -0
  30. package/dist/offscreen/controller.d.ts +4 -1
  31. package/dist/offscreen/controller.d.ts.map +1 -1
  32. package/dist/offscreen/controller.js +48 -3
  33. package/dist/offscreen/controller.js.map +1 -1
  34. package/dist/offscreen/fork-launch.d.ts +1 -0
  35. package/dist/offscreen/fork-launch.d.ts.map +1 -1
  36. package/dist/offscreen/fork-launch.js +4 -0
  37. package/dist/offscreen/fork-launch.js.map +1 -1
  38. package/dist/offscreen/fork.d.ts +6 -1
  39. package/dist/offscreen/fork.d.ts.map +1 -1
  40. package/dist/offscreen/fork.js +26 -3
  41. package/dist/offscreen/fork.js.map +1 -1
  42. package/dist/offscreen/surface.d.ts.map +1 -1
  43. package/dist/offscreen/surface.js +6 -2
  44. package/dist/offscreen/surface.js.map +1 -1
  45. package/dist/providers/claude/strategy.d.ts +6 -0
  46. package/dist/providers/claude/strategy.d.ts.map +1 -1
  47. package/dist/providers/claude/strategy.js +2 -0
  48. package/dist/providers/claude/strategy.js.map +1 -1
  49. package/dist/providers/codex/strategy.d.ts +1 -0
  50. package/dist/providers/codex/strategy.d.ts.map +1 -1
  51. package/dist/providers/codex/strategy.js +7 -1
  52. package/dist/providers/codex/strategy.js.map +1 -1
  53. package/dist/providers/types.d.ts +2 -0
  54. package/dist/providers/types.d.ts.map +1 -1
  55. package/dist/session/process-start-time.d.ts.map +1 -1
  56. package/dist/session/process-start-time.js.map +1 -1
  57. package/dist/status-bar.d.ts +7 -0
  58. package/dist/status-bar.d.ts.map +1 -1
  59. package/dist/status-bar.js +34 -6
  60. package/dist/status-bar.js.map +1 -1
  61. package/dist/terminal/host-input-mode.d.ts +4 -0
  62. package/dist/terminal/host-input-mode.d.ts.map +1 -0
  63. package/dist/terminal/host-input-mode.js +33 -0
  64. package/dist/terminal/host-input-mode.js.map +1 -0
  65. package/dist/terminal/host.d.ts +41 -16
  66. package/dist/terminal/host.d.ts.map +1 -1
  67. package/dist/terminal/host.js +197 -64
  68. package/dist/terminal/host.js.map +1 -1
  69. package/dist/terminal/input-router.d.ts +18 -3
  70. package/dist/terminal/input-router.d.ts.map +1 -1
  71. package/dist/terminal/input-router.js +35 -6
  72. package/dist/terminal/input-router.js.map +1 -1
  73. package/dist/terminal/key-event-source.d.ts +6 -15
  74. package/dist/terminal/key-event-source.d.ts.map +1 -1
  75. package/dist/terminal/key-event-source.js +3 -22
  76. package/dist/terminal/key-event-source.js.map +1 -1
  77. package/dist/terminal/key-to-bytes.d.ts +2 -0
  78. package/dist/terminal/key-to-bytes.d.ts.map +1 -1
  79. package/dist/terminal/key-to-bytes.js +89 -13
  80. package/dist/terminal/key-to-bytes.js.map +1 -1
  81. package/dist/terminal/kitty-negotiator.d.ts +9 -0
  82. package/dist/terminal/kitty-negotiator.d.ts.map +1 -0
  83. package/dist/terminal/kitty-negotiator.js +76 -0
  84. package/dist/terminal/kitty-negotiator.js.map +1 -0
  85. package/dist/terminal/koffi-loader.d.ts +1 -5
  86. package/dist/terminal/koffi-loader.d.ts.map +1 -1
  87. package/dist/terminal/koffi-loader.js.map +1 -1
  88. package/dist/terminal/mouse-mode-tracker.d.ts +36 -0
  89. package/dist/terminal/mouse-mode-tracker.d.ts.map +1 -0
  90. package/dist/terminal/mouse-mode-tracker.js +245 -0
  91. package/dist/terminal/mouse-mode-tracker.js.map +1 -0
  92. package/dist/terminal/osc52.d.ts +16 -0
  93. package/dist/terminal/osc52.d.ts.map +1 -0
  94. package/dist/terminal/osc52.js +18 -0
  95. package/dist/terminal/osc52.js.map +1 -0
  96. package/dist/terminal/render.d.ts +14 -14
  97. package/dist/terminal/render.d.ts.map +1 -1
  98. package/dist/terminal/render.js +20 -28
  99. package/dist/terminal/render.js.map +1 -1
  100. package/dist/terminal/stdin-byte-source.d.ts +4 -5
  101. package/dist/terminal/stdin-byte-source.d.ts.map +1 -1
  102. package/dist/terminal/stdin-byte-source.js +11 -13
  103. package/dist/terminal/stdin-byte-source.js.map +1 -1
  104. package/dist/terminal/virtual-terminal.d.ts +9 -1
  105. package/dist/terminal/virtual-terminal.d.ts.map +1 -1
  106. package/dist/terminal/virtual-terminal.js +33 -1
  107. package/dist/terminal/virtual-terminal.js.map +1 -1
  108. package/dist/terminal-input.d.ts +13 -12
  109. package/dist/terminal-input.d.ts.map +1 -1
  110. package/dist/terminal-input.js +82 -108
  111. package/dist/terminal-input.js.map +1 -1
  112. package/dist/text-editing/emacs-input.d.ts +1 -6
  113. package/dist/text-editing/emacs-input.d.ts.map +1 -1
  114. package/dist/text-editing/emacs-input.js +15 -6
  115. package/dist/text-editing/emacs-input.js.map +1 -1
  116. package/dist/text-editing/readline-ops.d.ts.map +1 -1
  117. package/dist/text-editing/readline-ops.js +11 -2
  118. package/dist/text-editing/readline-ops.js.map +1 -1
  119. package/package.json +5 -2
  120. package/dist/terminal/win32-console-mode.d.ts +0 -23
  121. package/dist/terminal/win32-console-mode.d.ts.map +0 -1
  122. package/dist/terminal/win32-console-mode.js +0 -67
  123. package/dist/terminal/win32-console-mode.js.map +0 -1
  124. package/dist/terminal/win32-console-source.d.ts +0 -26
  125. package/dist/terminal/win32-console-source.d.ts.map +0 -1
  126. package/dist/terminal/win32-console-source.js +0 -277
  127. package/dist/terminal/win32-console-source.js.map +0 -1
  128. package/dist/terminal/win32-key-translator.d.ts +0 -26
  129. package/dist/terminal/win32-key-translator.d.ts.map +0 -1
  130. package/dist/terminal/win32-key-translator.js +0 -109
  131. package/dist/terminal/win32-key-translator.js.map +0 -1
@@ -5,6 +5,11 @@ import { encodeKeysToBytes } from "./key-to-bytes.js";
5
5
  * to feel precise while still moving meaningfully on every notch.
6
6
  */
7
7
  export const WHEEL_LINES_PER_EVENT = 3;
8
+ const RAW_SGR_MOUSE_RE = /^\x1b\[<\d+;\d+;\d+[Mm]$/;
9
+ const SYNC_OUTPUT_REPORT_RE = /^\x1b\[\?2026;(\d+)\$y$/;
10
+ export function isRawSgrMouseFrame(key) {
11
+ return key.kind === "raw" && RAW_SGR_MOUSE_RE.test(key.bytes.toString("ascii"));
12
+ }
8
13
  /**
9
14
  * Event-based input router. Operates on `TerminalKey[]` produced by a
10
15
  * `KeyEventSource`; the byte-level state machine is internal to
@@ -16,9 +21,12 @@ export const WHEEL_LINES_PER_EVENT = 3;
16
21
  * 2. Active parent UI mode (if attached) — fully consumes by default.
17
22
  * 3. If the child is in the alternate buffer, Ctrl+C still interrupts
18
23
  * but page/home/end/wheel are forwarded to the child.
19
- * 4. Wheel events → scrollback callbacks (consumed; never reach child).
20
- * 5. Host shortcuts: Ctrl+C → onInterrupt; page/home/end → scrollback.
21
- * 6. Remaining events child PTY when `gateOpen` is true, encoded via
24
+ * 4. Wheel events → child when child mouse reporting is active, otherwise
25
+ * scrollback callbacks.
26
+ * 5. Raw SGR mouse frames are dropped in host-owned normal-buffer mode
27
+ * unless child mouse reporting is active.
28
+ * 6. Host shortcuts: Ctrl+C → onInterrupt; page/home/end → scrollback.
29
+ * 7. Remaining events → child PTY when `gateOpen` is true, encoded via
22
30
  * `encodeKeysToBytes`. Otherwise dropped.
23
31
  */
24
32
  export class InputRouter {
@@ -48,9 +56,18 @@ export class InputRouter {
48
56
  handleEvents(events) {
49
57
  if (events.length === 0)
50
58
  return;
51
- // Pre-filter: dump hotkey runs ahead of everything and is stripped.
59
+ // Pre-filter: host-owned control reports and dump hotkey are stripped
60
+ // before parent UI or child routing.
52
61
  const filtered = [];
53
62
  for (const ev of events) {
63
+ if (ev.kind === "raw") {
64
+ const report = ev.bytes.toString("ascii").match(SYNC_OUTPUT_REPORT_RE);
65
+ if (report) {
66
+ const value = Number(report[1]);
67
+ this.options.onSyncOutputReport?.(value !== 0 && value !== 4);
68
+ continue;
69
+ }
70
+ }
54
71
  if (isDumpHotkey(ev)) {
55
72
  this.options.onDump?.();
56
73
  continue;
@@ -66,6 +83,7 @@ export class InputRouter {
66
83
  return;
67
84
  }
68
85
  const childAlternate = this.options.isChildAlternate?.() === true;
86
+ const childMouseActive = this.options.isChildMouseActive?.() === true;
69
87
  if (childAlternate) {
70
88
  const forward = [];
71
89
  for (const ev of filtered) {
@@ -86,6 +104,10 @@ export class InputRouter {
86
104
  const forward = [];
87
105
  for (const ev of filtered) {
88
106
  if (ev.kind === "wheel") {
107
+ if (childMouseActive) {
108
+ forward.push(ev);
109
+ continue;
110
+ }
89
111
  if (ev.direction === "up") {
90
112
  this.options.onScrollBackLines?.(WHEEL_LINES_PER_EVENT);
91
113
  }
@@ -94,6 +116,9 @@ export class InputRouter {
94
116
  }
95
117
  continue;
96
118
  }
119
+ if (!childMouseActive && isRawSgrMouseFrame(ev)) {
120
+ continue;
121
+ }
97
122
  if (ev.kind === "control" && ev.byte === 0x03) {
98
123
  if (this.options.onInterrupt) {
99
124
  this.options.onInterrupt();
@@ -118,13 +143,17 @@ export class InputRouter {
118
143
  }
119
144
  if (forward.length === 0)
120
145
  return;
121
- this.forwardToChild(forward);
146
+ this.forwardToChild(forward, childMouseActive ? { wheelMode: "sgr" } : undefined);
122
147
  }
123
148
  forwardToChild(events, encodeOptions) {
124
149
  const child = this.childHandle;
125
150
  if (!child || !child.gateOpen)
126
151
  return;
127
- const buf = encodeKeysToBytes(events, encodeOptions);
152
+ const buf = encodeKeysToBytes(events, {
153
+ ...encodeOptions,
154
+ childKittyFlags: this.options.getChildKittyFlags?.() ?? 0,
155
+ childBracketedPaste: this.options.getChildBracketedPaste?.() ?? false,
156
+ });
128
157
  if (buf.length === 0)
129
158
  return;
130
159
  // Forward the encoded Buffer verbatim — the PtyHandle adapter is
@@ -1 +1 @@
1
- {"version":3,"file":"input-router.js","sourceRoot":"","sources":["../../src/terminal/input-router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input-router.js","sourceRoot":"","sources":["../../src/terminal/input-router.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,8 @@ import type { TerminalKey } from "../terminal-input.js";
2
2
  export interface KeyEventSourceOptions {
3
3
  /** Override stdin. Default: `process.stdin`. */
4
4
  stdin?: NodeJS.ReadStream;
5
+ /** Override terminal output for host input-mode negotiation. Default: `process.stdout`. */
6
+ stdout?: NodeJS.WritableStream;
5
7
  }
6
8
  /** Post-resize terminal size carried by a `KeyEventSource.onResize` callback. */
7
9
  export interface ResizeSize {
@@ -16,7 +18,7 @@ export interface ResizeSize {
16
18
  * - Multiple subscribers may attach via `onEvents`; each event burst
17
19
  * fans out to all of them.
18
20
  * - `start()` / `stop()` are idempotent; the source owns raw-mode and
19
- * VT-input setup on its injected stdin.
21
+ * host input-mode setup on its injected stdout.
20
22
  * - Deferred bare-Esc events surface through the same subscriber
21
23
  * callback as regular events.
22
24
  */
@@ -27,26 +29,15 @@ export interface KeyEventSource {
27
29
  onEvents(cb: (events: TerminalKey[]) => void): () => void;
28
30
  /**
29
31
  * Fires on a terminal/buffer resize, carrying the post-resize size when
30
- * the source can determine it. On the Win32 FFI path this is the
31
- * authoritative dimensions decoded from `WINDOW_BUFFER_SIZE_RECORD` —
32
- * `stdout.columns`/`rows` are stale at that point because libuv never
33
- * saw the record. Returns an idempotent unsubscribe.
32
+ * the source can determine it. Returns an idempotent unsubscribe.
34
33
  */
35
34
  onResize(cb: (size: ResizeSize) => void): () => void;
36
35
  }
37
36
  /**
38
37
  * Build a `KeyEventSource` for the given (or default) stdin.
39
38
  *
40
- * On Windows, when koffi loads AND the caller did not inject a custom
41
- * stdin, returns a `Win32ConsoleSource` that reads `CONIN$` directly via
42
- * FFI — bypassing ConPTY's lossy byte translation. Otherwise (including
43
- * koffi-load failure on Windows), returns a `StdinByteSource` that wraps
44
- * `TerminalKeyParser` over the injected stdin for byte-identical
45
- * behavior.
46
- *
47
- * The `stdin === process.stdin` gate guarantees that test mocks and
48
- * embedded hosts with a custom stream always fall through to
49
- * `StdinByteSource`.
39
+ * The source always reads VT bytes from stdin and requests optional host
40
+ * input modes (kitty keyboard protocol + bracketed paste) on stdout.
50
41
  */
51
42
  export declare function createKeyEventSource(opts?: KeyEventSourceOptions): KeyEventSource;
52
43
  //# sourceMappingURL=key-event-source.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"key-event-source.d.ts","sourceRoot":"","sources":["../../src/terminal/key-event-source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAIxD,MAAM,WAAW,qBAAqB;IACpC,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAC3B;AAED,iFAAiF;AACjF,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,IAAI,CAAC;IACb,kDAAkD;IAClD,QAAQ,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC1D;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CACtD;AAID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,GAAE,qBAA0B,GAC/B,cAAc,CAahB"}
1
+ {"version":3,"file":"key-event-source.d.ts","sourceRoot":"","sources":["../../src/terminal/key-event-source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGxD,MAAM,WAAW,qBAAqB;IACpC,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAC1B,2FAA2F;IAC3F,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;CAChC;AAED,iFAAiF;AACjF,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,IAAI,CAAC;IACb,kDAAkD;IAClD,QAAQ,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC1D;;;OAGG;IACH,QAAQ,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CACtD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,GAAE,qBAA0B,GAC/B,cAAc,CAGhB"}
@@ -1,31 +1,12 @@
1
1
  import { StdinByteSource } from "./stdin-byte-source.js";
2
- import { Win32ConsoleSource } from "./win32-console-source.js";
3
- let warnedOnFallback = false;
4
2
  /**
5
3
  * Build a `KeyEventSource` for the given (or default) stdin.
6
4
  *
7
- * On Windows, when koffi loads AND the caller did not inject a custom
8
- * stdin, returns a `Win32ConsoleSource` that reads `CONIN$` directly via
9
- * FFI — bypassing ConPTY's lossy byte translation. Otherwise (including
10
- * koffi-load failure on Windows), returns a `StdinByteSource` that wraps
11
- * `TerminalKeyParser` over the injected stdin for byte-identical
12
- * behavior.
13
- *
14
- * The `stdin === process.stdin` gate guarantees that test mocks and
15
- * embedded hosts with a custom stream always fall through to
16
- * `StdinByteSource`.
5
+ * The source always reads VT bytes from stdin and requests optional host
6
+ * input modes (kitty keyboard protocol + bracketed paste) on stdout.
17
7
  */
18
8
  export function createKeyEventSource(opts = {}) {
19
9
  const stdin = opts.stdin ?? process.stdin;
20
- if (process.platform === "win32" && stdin === process.stdin) {
21
- const native = Win32ConsoleSource.tryCreate();
22
- if (native)
23
- return native;
24
- if (!warnedOnFallback) {
25
- warnedOnFallback = true;
26
- process.stderr.write("[poly-weaver] koffi unavailable; using stdin input path\n");
27
- }
28
- }
29
- return new StdinByteSource(stdin);
10
+ return new StdinByteSource(stdin, opts.stdout ?? process.stdout);
30
11
  }
31
12
  //# sourceMappingURL=key-event-source.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"key-event-source.js","sourceRoot":"","sources":["../../src/terminal/key-event-source.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAwC/D,IAAI,gBAAgB,GAAG,KAAK,CAAC;AAE7B;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAA8B,EAAE;IAEhC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;IAC1C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,EAAE,CAAC;QAC9C,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAC1B,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,gBAAgB,GAAG,IAAI,CAAC;YACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,2DAA2D,CAC5D,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"key-event-source.js","sourceRoot":"","sources":["../../src/terminal/key-event-source.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAuCzD;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAA8B,EAAE;IAEhC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;IAC1C,OAAO,IAAI,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;AACnE,CAAC"}
@@ -1,6 +1,8 @@
1
1
  import type { TerminalKey } from "../terminal-input.js";
2
2
  export interface EncodeKeysOptions {
3
3
  wheelMode?: "sgr";
4
+ childKittyFlags?: number;
5
+ childBracketedPaste?: boolean;
4
6
  }
5
7
  /**
6
8
  * Encode `TerminalKey[]` back to VT bytes for child PTY forwarding.
@@ -1 +1 @@
1
- {"version":3,"file":"key-to-bytes.d.ts","sourceRoot":"","sources":["../../src/terminal/key-to-bytes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAiBxD,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,KAAK,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,OAAO,GAAE,iBAAsB,GAAG,MAAM,CAShG"}
1
+ {"version":3,"file":"key-to-bytes.d.ts","sourceRoot":"","sources":["../../src/terminal/key-to-bytes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAoBxD,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,OAAO,GAAE,iBAAsB,GAAG,MAAM,CAShG"}
@@ -1,3 +1,4 @@
1
+ import { PASTE_END, PASTE_START } from "../ansi.js";
1
2
  const EMPTY = Buffer.alloc(0);
2
3
  const BACKSPACE = Buffer.from([0x7f]);
3
4
  const ESCAPE = Buffer.from([0x1b]);
@@ -12,6 +13,8 @@ const END = Buffer.from([0x1b, 0x5b, 0x46]);
12
13
  const SHIFT_TAB = Buffer.from([0x1b, 0x5b, 0x5a]);
13
14
  const TAB = Buffer.from([0x09]);
14
15
  const CR = Buffer.from([0x0d]);
16
+ const KITTY_DISAMBIGUATE = 0b1;
17
+ const KITTY_ALL_KEYS = 0b1000;
15
18
  /**
16
19
  * Encode `TerminalKey[]` back to VT bytes for child PTY forwarding.
17
20
  *
@@ -34,21 +37,43 @@ export function encodeKeysToBytes(events, options = {}) {
34
37
  return Buffer.concat(parts);
35
38
  }
36
39
  function encodeKey(key, options) {
40
+ const flags = options.childKittyFlags ?? 0;
41
+ const kittyOn = (flags & (KITTY_DISAMBIGUATE | KITTY_ALL_KEYS)) !== 0;
42
+ const reportAll = (flags & KITTY_ALL_KEYS) !== 0;
37
43
  switch (key.kind) {
38
44
  case "raw":
39
45
  return key.bytes;
40
46
  case "printable":
47
+ if (reportAll)
48
+ return encodeKittyPrintable(key.char);
41
49
  return Buffer.from(key.char, "utf-8");
42
- case "control":
50
+ case "control": {
51
+ if (key.byte === 0x09)
52
+ return reportAll ? encodeCsiU(9) : TAB;
53
+ if (kittyOn && key.byte >= 0x01 && key.byte <= 0x1a) {
54
+ return encodeCsiU(key.byte + 96, 5);
55
+ }
56
+ return Buffer.from([key.byte]);
57
+ }
43
58
  case "enter":
59
+ if (reportAll)
60
+ return encodeCsiU(13);
44
61
  return Buffer.from([key.byte]);
45
62
  case "backspace":
63
+ if (reportAll)
64
+ return encodeCsiU(127);
46
65
  return BACKSPACE;
47
66
  case "delete":
48
67
  return Buffer.from(key.ctrl ? "\x1b[3;5~" : "\x1b[3~", "ascii");
49
68
  case "escape":
69
+ if (reportAll)
70
+ return encodeCsiU(27);
50
71
  return ESCAPE;
51
72
  case "arrow":
73
+ if (key.modifiers !== undefined && key.modifiers > 1) {
74
+ const final = arrowFinalByte(key.direction);
75
+ return Buffer.from(`\x1b[1;${key.modifiers}${final}`, "ascii");
76
+ }
52
77
  return key.direction === "up" ? ARROW_UP
53
78
  : key.direction === "down" ? ARROW_DOWN
54
79
  : key.direction === "right" ? ARROW_RIGHT
@@ -63,22 +88,73 @@ function encodeKey(key, options) {
63
88
  if (options.wheelMode !== "sgr")
64
89
  return EMPTY;
65
90
  return Buffer.from(`\x1b[<${key.direction === "up" ? 64 : 65};${key.column};${key.row}M`, "ascii");
91
+ case "paste":
92
+ return Buffer.from(options.childBracketedPaste
93
+ ? PASTE_START + key.content + PASTE_END
94
+ : key.content, "utf8");
66
95
  case "kitty-key": {
67
- if (key.modifiers === 1) {
68
- switch (key.keyCode) {
69
- case 9: return TAB;
70
- case 13: return CR;
71
- case 27: return ESCAPE;
72
- case 127: return BACKSPACE;
73
- default:
74
- return Buffer.from(String.fromCodePoint(key.keyCode), "utf-8");
75
- }
96
+ if (!kittyOn)
97
+ return encodeLegacyModifiedKey(key.keyCode, key.modifiers);
98
+ if (key.modifiers !== 1 || reportAll) {
99
+ return encodeCsiU(key.keyCode, key.modifiers);
76
100
  }
77
- if (key.keyCode === 9 && key.modifiers === 2) {
78
- return SHIFT_TAB;
101
+ switch (key.keyCode) {
102
+ case 9: return TAB;
103
+ case 13: return CR;
104
+ case 27: return ESCAPE;
105
+ case 127: return BACKSPACE;
106
+ default:
107
+ return Buffer.from(String.fromCodePoint(key.keyCode), "utf-8");
79
108
  }
80
- return Buffer.from(`\x1b[${key.keyCode};${key.modifiers}u`, "ascii");
81
109
  }
82
110
  }
83
111
  }
112
+ function encodeCsiU(keyCode, modifiers = 1) {
113
+ if (modifiers === 1)
114
+ return Buffer.from(`\x1b[${keyCode}u`, "ascii");
115
+ return Buffer.from(`\x1b[${keyCode};${modifiers}u`, "ascii");
116
+ }
117
+ function encodeKittyPrintable(char) {
118
+ const cp = char.codePointAt(0);
119
+ if (cp === undefined)
120
+ return EMPTY;
121
+ if (cp >= 65 && cp <= 90)
122
+ return encodeCsiU(cp + 32, 2);
123
+ return encodeCsiU(cp);
124
+ }
125
+ function encodeLegacyModifiedKey(keyCode, modifiers) {
126
+ const ctrl = ((modifiers - 1) & 0x04) !== 0;
127
+ const alt = ((modifiers - 1) & 0x02) !== 0;
128
+ if (keyCode === 9 && modifiers === 2)
129
+ return SHIFT_TAB;
130
+ if (keyCode === 9)
131
+ return TAB;
132
+ if (keyCode === 13 || keyCode === 10)
133
+ return CR;
134
+ if (keyCode === 27)
135
+ return ESCAPE;
136
+ if (keyCode === 127 || keyCode === 8)
137
+ return BACKSPACE;
138
+ if (keyCode === 3)
139
+ return Buffer.from([0x03]);
140
+ if (keyCode >= 97 && keyCode <= 122 && ctrl) {
141
+ const controlByte = Buffer.from([keyCode & 0x1f]);
142
+ if (alt)
143
+ return Buffer.concat([ESCAPE, controlByte]);
144
+ return controlByte;
145
+ }
146
+ if (keyCode >= 32) {
147
+ const printable = Buffer.from(String.fromCodePoint(keyCode), "utf8");
148
+ if (alt)
149
+ return Buffer.concat([ESCAPE, printable]);
150
+ return printable;
151
+ }
152
+ return EMPTY;
153
+ }
154
+ function arrowFinalByte(direction) {
155
+ return direction === "up" ? "A"
156
+ : direction === "down" ? "B"
157
+ : direction === "right" ? "C"
158
+ : "D";
159
+ }
84
160
  //# sourceMappingURL=key-to-bytes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"key-to-bytes.js","sourceRoot":"","sources":["../../src/terminal/key-to-bytes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"key-to-bytes.js","sourceRoot":"","sources":["../../src/terminal/key-to-bytes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare class ChildKittyNegotiator {
2
+ private flagStack;
3
+ private remainder;
4
+ get activeFlags(): number;
5
+ reset(): void;
6
+ processChunk(chunk: string): string;
7
+ private setCurrentFlags;
8
+ }
9
+ //# sourceMappingURL=kitty-negotiator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kitty-negotiator.d.ts","sourceRoot":"","sources":["../../src/terminal/kitty-negotiator.ts"],"names":[],"mappings":"AAMA,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,SAAS,CAAM;IAEvB,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,KAAK,IAAI,IAAI;IAKb,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IA2CnC,OAAO,CAAC,eAAe;CAcxB"}
@@ -0,0 +1,76 @@
1
+ const VALID_FLAGS = 0b11111;
2
+ const MAX_DEPTH = 16;
3
+ const KITTY_CSI_RE = /\x1b\[([?<>=])([0-9;]*)u/g;
4
+ const INCOMPLETE_KITTY_CSI_RE = /\x1b\[(?:[?<>=][0-9;]*)?$/;
5
+ const MAX_REMAINDER = 32;
6
+ export class ChildKittyNegotiator {
7
+ flagStack = [0];
8
+ remainder = "";
9
+ get activeFlags() {
10
+ return this.flagStack[this.flagStack.length - 1] ?? 0;
11
+ }
12
+ reset() {
13
+ this.flagStack = [0];
14
+ this.remainder = "";
15
+ }
16
+ processChunk(chunk) {
17
+ // Fast path: with no buffered partial sequence, a chunk that contains no
18
+ // ESC cannot hold a kitty CSI, so there is nothing to parse or carry over.
19
+ if (this.remainder.length === 0 && chunk.indexOf("\x1b") < 0)
20
+ return "";
21
+ const text = this.remainder + chunk;
22
+ this.remainder = "";
23
+ const incomplete = text.match(INCOMPLETE_KITTY_CSI_RE)?.[0] ?? "";
24
+ const body = incomplete.length > 0
25
+ ? text.slice(0, text.length - incomplete.length)
26
+ : text;
27
+ if (incomplete.length > 0 && incomplete.length <= MAX_REMAINDER) {
28
+ this.remainder = incomplete;
29
+ }
30
+ KITTY_CSI_RE.lastIndex = 0;
31
+ let reply = "";
32
+ for (let match = KITTY_CSI_RE.exec(body); match; match = KITTY_CSI_RE.exec(body)) {
33
+ const op = match[1];
34
+ const params = match[2] ?? "";
35
+ switch (op) {
36
+ case "?":
37
+ reply += `\x1b[?${this.activeFlags}u`;
38
+ break;
39
+ case ">":
40
+ this.flagStack.push((parseInt(params || "0", 10) || 0) & VALID_FLAGS);
41
+ if (this.flagStack.length > MAX_DEPTH)
42
+ this.flagStack.shift();
43
+ break;
44
+ case "<": {
45
+ let count = parseInt(params || "1", 10) || 1;
46
+ while (count-- > 0)
47
+ this.flagStack.pop();
48
+ if (this.flagStack.length === 0)
49
+ this.flagStack.push(0);
50
+ break;
51
+ }
52
+ case "=":
53
+ this.setCurrentFlags(params);
54
+ break;
55
+ }
56
+ }
57
+ return reply;
58
+ }
59
+ setCurrentFlags(params) {
60
+ const [rawFlags, rawMode] = params.split(";");
61
+ const bits = (parseInt(rawFlags || "0", 10) || 0) & VALID_FLAGS;
62
+ const mode = parseInt(rawMode || "1", 10) || 1;
63
+ const current = this.activeFlags;
64
+ const index = this.flagStack.length - 1;
65
+ if (mode === 2) {
66
+ this.flagStack[index] = current | bits;
67
+ }
68
+ else if (mode === 3) {
69
+ this.flagStack[index] = current & ~bits;
70
+ }
71
+ else {
72
+ this.flagStack[index] = bits;
73
+ }
74
+ }
75
+ }
76
+ //# sourceMappingURL=kitty-negotiator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kitty-negotiator.js","sourceRoot":"","sources":["../../src/terminal/kitty-negotiator.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,4 @@
1
- /**
2
- * Subset of the koffi API used by win32 console consumers. Declared once
3
- * here so call sites stay type-checked without a runtime dependency on
4
- * `@types/koffi`.
5
- */
1
+ /** Subset of the koffi API used by Windows FFI helpers. */
6
2
  export interface KoffiLibLike {
7
3
  func(name: string, retType: string, args: unknown[]): (...args: unknown[]) => unknown;
8
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"koffi-loader.d.ts","sourceRoot":"","sources":["../../src/terminal/koffi-loader.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;CACvF;AACD,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAAC;IACpC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5C,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC7D;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,IAAI,OAAO,GAAG,IAAI,CAQ1C"}
1
+ {"version":3,"file":"koffi-loader.d.ts","sourceRoot":"","sources":["../../src/terminal/koffi-loader.ts"],"names":[],"mappings":"AAIA,2DAA2D;AAC3D,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;CACvF;AACD,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAAC;IACpC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5C,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC7D;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,IAAI,OAAO,GAAG,IAAI,CAQ1C"}
@@ -1 +1 @@
1
- {"version":3,"file":"koffi-loader.js","sourceRoot":"","sources":["../../src/terminal/koffi-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAiBvD,IAAI,MAAkC,CAAC;AAEvC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,SAAS;IACvB,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"koffi-loader.js","sourceRoot":"","sources":["../../src/terminal/koffi-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAavD,IAAI,MAAkC,CAAC;AAEvC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,SAAS;IACvB,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,36 @@
1
+ export type MouseMode = 1000 | 1002 | 1003 | 1006;
2
+ /**
3
+ * Tracks DEC private mouse-related modes requested by a child PTY.
4
+ *
5
+ * The tracker only observes the child's output stream. It does not write to
6
+ * the real terminal; callers use the returned snapshot with
7
+ * `MouseModeReconciler` so multiple sources cannot fight over the same outer
8
+ * terminal mode.
9
+ */
10
+ export declare class MouseModeTracker {
11
+ private trackingMode;
12
+ private sgrEnabled;
13
+ private pending;
14
+ processChunk(data: string): boolean;
15
+ reset(): void;
16
+ snapshot(): MouseMode[];
17
+ hasActiveReportingMode(): boolean;
18
+ private applyDecPrivateMode;
19
+ }
20
+ /**
21
+ * Computes the outer terminal mouse-mode delta from named logical sources.
22
+ * Sources are desired state; `reflected` is what this process believes it has
23
+ * emitted to the real terminal while reflection is enabled.
24
+ */
25
+ export declare class MouseModeReconciler {
26
+ private readonly sources;
27
+ private reflected;
28
+ private reflectionEnabled;
29
+ setSource(source: string, modes: Iterable<MouseMode>): string;
30
+ clearSource(source: string): string;
31
+ clearAll(): string;
32
+ setReflectionEnabled(enabled: boolean): string;
33
+ private reconcile;
34
+ private desired;
35
+ }
36
+ //# sourceMappingURL=mouse-mode-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mouse-mode-tracker.d.ts","sourceRoot":"","sources":["../../src/terminal/mouse-mode-tracker.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AA+BlD;;;;;;;GAOG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAM;IAErB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAqCnC,KAAK,IAAI,IAAI;IAMb,QAAQ,IAAI,SAAS,EAAE;IAOvB,sBAAsB,IAAI,OAAO;IAIjC,OAAO,CAAC,mBAAmB;CA2B5B;AAED;;;;GAIG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0C;IAClE,OAAO,CAAC,SAAS,CAAmD;IACpE,OAAO,CAAC,iBAAiB,CAAQ;IAEjC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,MAAM;IAU7D,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAKnC,QAAQ,IAAI,MAAM;IAMlB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;IAW9C,OAAO,CAAC,SAAS;IA0BjB,OAAO,CAAC,OAAO;CAahB"}