poly-weaver 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/dist/ansi.d.ts +7 -0
  2. package/dist/ansi.d.ts.map +1 -1
  3. package/dist/ansi.js +30 -0
  4. package/dist/ansi.js.map +1 -1
  5. package/dist/app-header.d.ts +16 -0
  6. package/dist/app-header.d.ts.map +1 -0
  7. package/dist/app-header.js +74 -0
  8. package/dist/app-header.js.map +1 -0
  9. package/dist/cli.js +81 -59
  10. package/dist/cli.js.map +1 -1
  11. package/dist/config.d.ts +1 -0
  12. package/dist/config.d.ts.map +1 -1
  13. package/dist/config.js +6 -0
  14. package/dist/config.js.map +1 -1
  15. package/dist/dump/collector.d.ts +2 -1
  16. package/dist/dump/collector.d.ts.map +1 -1
  17. package/dist/dump/collector.js +1 -0
  18. package/dist/dump/collector.js.map +1 -1
  19. package/dist/dump/hotkey.d.ts +9 -30
  20. package/dist/dump/hotkey.d.ts.map +1 -1
  21. package/dist/dump/hotkey.js +15 -158
  22. package/dist/dump/hotkey.js.map +1 -1
  23. package/dist/dump/service.d.ts +3 -2
  24. package/dist/dump/service.d.ts.map +1 -1
  25. package/dist/dump/service.js +4 -1
  26. package/dist/dump/service.js.map +1 -1
  27. package/dist/dump/types.d.ts +5 -0
  28. package/dist/dump/types.d.ts.map +1 -1
  29. package/dist/flow/built-in/default-factory.d.ts +21 -0
  30. package/dist/flow/built-in/default-factory.d.ts.map +1 -0
  31. package/dist/flow/built-in/default-factory.js +155 -0
  32. package/dist/flow/built-in/default-factory.js.map +1 -0
  33. package/dist/flow/built-in/default.d.ts +4 -4
  34. package/dist/flow/built-in/default.d.ts.map +1 -1
  35. package/dist/flow/built-in/default.js +3 -141
  36. package/dist/flow/built-in/default.js.map +1 -1
  37. package/dist/flow/built-in/default.ts +5 -169
  38. package/dist/flow/built-in/why-so-serious-factory.d.ts +16 -0
  39. package/dist/flow/built-in/why-so-serious-factory.d.ts.map +1 -0
  40. package/dist/flow/built-in/why-so-serious-factory.js +187 -0
  41. package/dist/flow/built-in/why-so-serious-factory.js.map +1 -0
  42. package/dist/flow/built-in/why-so-serious.d.ts +3 -2
  43. package/dist/flow/built-in/why-so-serious.d.ts.map +1 -1
  44. package/dist/flow/built-in/why-so-serious.js +3 -164
  45. package/dist/flow/built-in/why-so-serious.js.map +1 -1
  46. package/dist/flow/custom/AUTHORING.md +13 -0
  47. package/dist/flow/custom/load.d.ts +16 -1
  48. package/dist/flow/custom/load.d.ts.map +1 -1
  49. package/dist/flow/custom/load.js +69 -18
  50. package/dist/flow/custom/load.js.map +1 -1
  51. package/dist/flow/dsl.js +1 -1
  52. package/dist/flow/dsl.js.map +1 -1
  53. package/dist/flow/executor.d.ts.map +1 -1
  54. package/dist/flow/executor.js +44 -8
  55. package/dist/flow/executor.js.map +1 -1
  56. package/dist/flow/types.d.ts +20 -2
  57. package/dist/flow/types.d.ts.map +1 -1
  58. package/dist/flow/types.js.map +1 -1
  59. package/dist/flow-editor/tui.d.ts.map +1 -1
  60. package/dist/flow-editor/tui.js +9 -18
  61. package/dist/flow-editor/tui.js.map +1 -1
  62. package/dist/markdown.d.ts.map +1 -1
  63. package/dist/markdown.js +60 -0
  64. package/dist/markdown.js.map +1 -1
  65. package/dist/orchestrator.d.ts +43 -0
  66. package/dist/orchestrator.d.ts.map +1 -1
  67. package/dist/orchestrator.js +230 -92
  68. package/dist/orchestrator.js.map +1 -1
  69. package/dist/providers/claude/completion-plan-mode.d.ts.map +1 -1
  70. package/dist/providers/claude/completion-plan-mode.js +7 -1
  71. package/dist/providers/claude/completion-plan-mode.js.map +1 -1
  72. package/dist/providers/claude/tool-tracking.d.ts +1 -0
  73. package/dist/providers/claude/tool-tracking.d.ts.map +1 -1
  74. package/dist/providers/claude/tool-tracking.js +3 -0
  75. package/dist/providers/claude/tool-tracking.js.map +1 -1
  76. package/dist/providers/copilot/session.d.ts +35 -1
  77. package/dist/providers/copilot/session.d.ts.map +1 -1
  78. package/dist/providers/copilot/session.js +121 -1
  79. package/dist/providers/copilot/session.js.map +1 -1
  80. package/dist/providers/types.d.ts +3 -1
  81. package/dist/providers/types.d.ts.map +1 -1
  82. package/dist/pty/spawn.d.ts.map +1 -1
  83. package/dist/pty/spawn.js +6 -1
  84. package/dist/pty/spawn.js.map +1 -1
  85. package/dist/pty/types.d.ts +7 -2
  86. package/dist/pty/types.d.ts.map +1 -1
  87. package/dist/resume-tui.d.ts +52 -0
  88. package/dist/resume-tui.d.ts.map +1 -0
  89. package/dist/resume-tui.js +344 -0
  90. package/dist/resume-tui.js.map +1 -0
  91. package/dist/session/flow-snapshot.d.ts +14 -0
  92. package/dist/session/flow-snapshot.d.ts.map +1 -0
  93. package/dist/session/flow-snapshot.js +28 -0
  94. package/dist/session/flow-snapshot.js.map +1 -0
  95. package/dist/session/list.d.ts +16 -0
  96. package/dist/session/list.d.ts.map +1 -0
  97. package/dist/session/list.js +89 -0
  98. package/dist/session/list.js.map +1 -0
  99. package/dist/session/lock.d.ts +26 -0
  100. package/dist/session/lock.d.ts.map +1 -0
  101. package/dist/session/lock.js +95 -0
  102. package/dist/session/lock.js.map +1 -0
  103. package/dist/session/manifest.d.ts +80 -0
  104. package/dist/session/manifest.d.ts.map +1 -0
  105. package/dist/session/manifest.js +2 -0
  106. package/dist/session/manifest.js.map +1 -0
  107. package/dist/session/persistence.d.ts +19 -0
  108. package/dist/session/persistence.d.ts.map +1 -0
  109. package/dist/session/persistence.js +68 -0
  110. package/dist/session/persistence.js.map +1 -0
  111. package/dist/session/process-start-time.d.ts +17 -0
  112. package/dist/session/process-start-time.d.ts.map +1 -0
  113. package/dist/session/process-start-time.js +99 -0
  114. package/dist/session/process-start-time.js.map +1 -0
  115. package/dist/session/restore.d.ts +31 -0
  116. package/dist/session/restore.d.ts.map +1 -0
  117. package/dist/session/restore.js +111 -0
  118. package/dist/session/restore.js.map +1 -0
  119. package/dist/session/resume.d.ts +5 -0
  120. package/dist/session/resume.d.ts.map +1 -0
  121. package/dist/session/resume.js +109 -0
  122. package/dist/session/resume.js.map +1 -0
  123. package/dist/session/session-store.d.ts +43 -0
  124. package/dist/session/session-store.d.ts.map +1 -0
  125. package/dist/session/session-store.js +134 -0
  126. package/dist/session/session-store.js.map +1 -0
  127. package/dist/startup-tui.d.ts +10 -11
  128. package/dist/startup-tui.d.ts.map +1 -1
  129. package/dist/startup-tui.js +25 -108
  130. package/dist/startup-tui.js.map +1 -1
  131. package/dist/status-bar.js +1 -26
  132. package/dist/status-bar.js.map +1 -1
  133. package/dist/terminal/host.d.ts +22 -9
  134. package/dist/terminal/host.d.ts.map +1 -1
  135. package/dist/terminal/host.js +67 -78
  136. package/dist/terminal/host.js.map +1 -1
  137. package/dist/terminal/input-router.d.ts +24 -103
  138. package/dist/terminal/input-router.d.ts.map +1 -1
  139. package/dist/terminal/input-router.js +63 -364
  140. package/dist/terminal/input-router.js.map +1 -1
  141. package/dist/terminal/key-event-source.d.ts +52 -0
  142. package/dist/terminal/key-event-source.d.ts.map +1 -0
  143. package/dist/terminal/key-event-source.js +31 -0
  144. package/dist/terminal/key-event-source.js.map +1 -0
  145. package/dist/terminal/key-to-bytes.d.ts +11 -0
  146. package/dist/terminal/key-to-bytes.d.ts.map +1 -0
  147. package/dist/terminal/key-to-bytes.js +81 -0
  148. package/dist/terminal/key-to-bytes.js.map +1 -0
  149. package/dist/terminal/koffi-loader.d.ts +14 -0
  150. package/dist/terminal/koffi-loader.d.ts.map +1 -1
  151. package/dist/terminal/koffi-loader.js.map +1 -1
  152. package/dist/terminal/render.d.ts +1 -2
  153. package/dist/terminal/render.d.ts.map +1 -1
  154. package/dist/terminal/render.js +1 -30
  155. package/dist/terminal/render.js.map +1 -1
  156. package/dist/terminal/stdin-byte-source.d.ts +27 -0
  157. package/dist/terminal/stdin-byte-source.d.ts.map +1 -0
  158. package/dist/terminal/stdin-byte-source.js +92 -0
  159. package/dist/terminal/stdin-byte-source.js.map +1 -0
  160. package/dist/terminal/win32-console-mode.d.ts.map +1 -1
  161. package/dist/terminal/win32-console-mode.js.map +1 -1
  162. package/dist/terminal/win32-console-source.d.ts +26 -0
  163. package/dist/terminal/win32-console-source.d.ts.map +1 -0
  164. package/dist/terminal/win32-console-source.js +275 -0
  165. package/dist/terminal/win32-console-source.js.map +1 -0
  166. package/dist/terminal/win32-key-translator.d.ts +26 -0
  167. package/dist/terminal/win32-key-translator.d.ts.map +1 -0
  168. package/dist/terminal/win32-key-translator.js +87 -0
  169. package/dist/terminal/win32-key-translator.js.map +1 -0
  170. package/dist/terminal-input.d.ts +10 -0
  171. package/dist/terminal-input.d.ts.map +1 -1
  172. package/dist/terminal-input.js +132 -113
  173. package/dist/terminal-input.js.map +1 -1
  174. package/dist/user/host-curate-prompt.d.ts +2 -1
  175. package/dist/user/host-curate-prompt.d.ts.map +1 -1
  176. package/dist/user/host-curate-prompt.js +13 -11
  177. package/dist/user/host-curate-prompt.js.map +1 -1
  178. package/dist/user/host-prompt.d.ts +4 -1
  179. package/dist/user/host-prompt.d.ts.map +1 -1
  180. package/dist/user/host-prompt.js +24 -6
  181. package/dist/user/host-prompt.js.map +1 -1
  182. package/dist/user/prompt.d.ts +7 -9
  183. package/dist/user/prompt.d.ts.map +1 -1
  184. package/dist/user/prompt.js +14 -23
  185. package/dist/user/prompt.js.map +1 -1
  186. package/package.json +1 -1
@@ -0,0 +1,275 @@
1
+ import { loadKoffi } from "./koffi-loader.js";
2
+ import { createWin32KeyTranslator, } from "./win32-key-translator.js";
3
+ /**
4
+ * Windows-only `KeyEventSource` that reads `INPUT_RECORD`s directly from
5
+ * `CONIN$` via koffi/FFI. Bypasses ConPTY's lossy VT translation, so
6
+ * Shift+Tab (and other modifier+functional-key combos that `conhost`
7
+ * cannot express as VT bytes) reach the parent process intact.
8
+ *
9
+ * `Win32ConsoleSource.tryCreate()` performs all fallible native init
10
+ * eagerly and returns `null` on any failure — the factory caller falls
11
+ * back to `StdinByteSource`. Once constructed, `start()` / `stop()` /
12
+ * `onEvents()` are non-throwing.
13
+ */
14
+ const GENERIC_READ = 0x80000000;
15
+ const GENERIC_WRITE = 0x40000000;
16
+ const FILE_SHARE_READ = 0x00000001;
17
+ const FILE_SHARE_WRITE = 0x00000002;
18
+ const OPEN_EXISTING = 3;
19
+ const ENABLE_PROCESSED_INPUT = 0x0001;
20
+ const ENABLE_LINE_INPUT = 0x0002;
21
+ const ENABLE_ECHO_INPUT = 0x0004;
22
+ const ENABLE_WINDOW_INPUT = 0x0008;
23
+ const ENABLE_MOUSE_INPUT = 0x0010;
24
+ const KEY_EVENT = 0x0001;
25
+ const MOUSE_EVENT = 0x0002;
26
+ const WINDOW_BUFFER_SIZE_EVENT = 0x0004;
27
+ const MOUSE_WHEELED = 0x0004;
28
+ const POLL_INTERVAL_MS = 16;
29
+ const BATCH_SIZE = 64;
30
+ /** Size of a single `INPUT_RECORD` in bytes (Windows packing). */
31
+ const INPUT_RECORD_SIZE = 20;
32
+ export class Win32ConsoleSource {
33
+ koffi;
34
+ handle;
35
+ prevMode;
36
+ fns;
37
+ subscribers = new Set();
38
+ resizeSubscribers = new Set();
39
+ translator = createWin32KeyTranslator();
40
+ inputBuf = Buffer.alloc(INPUT_RECORD_SIZE * BATCH_SIZE);
41
+ countOut = [0];
42
+ readOut = [0];
43
+ pollTimer;
44
+ stopped = false;
45
+ constructor(koffi, handle, prevMode, fns) {
46
+ this.koffi = koffi;
47
+ this.handle = handle;
48
+ this.prevMode = prevMode;
49
+ this.fns = fns;
50
+ }
51
+ static tryCreate() {
52
+ if (process.platform !== "win32")
53
+ return null;
54
+ const koffi = loadKoffi();
55
+ if (!koffi)
56
+ return null;
57
+ try {
58
+ const kernel32 = koffi.load("kernel32.dll");
59
+ const createFile = kernel32.func("CreateFileW", "void *", [
60
+ "str16", "uint32", "uint32", "void *", "uint32", "uint32", "void *",
61
+ ]);
62
+ const getConsoleMode = kernel32.func("GetConsoleMode", "int", [
63
+ "void *", koffi.out("uint32 *"),
64
+ ]);
65
+ const setConsoleMode = kernel32.func("SetConsoleMode", "int", [
66
+ "void *", "uint32",
67
+ ]);
68
+ const readConsoleInput = kernel32.func("ReadConsoleInputW", "int", [
69
+ "void *", "void *", "uint32", koffi.out("uint32 *"),
70
+ ]);
71
+ const getNumEvents = kernel32.func("GetNumberOfConsoleInputEvents", "int", [
72
+ "void *", koffi.out("uint32 *"),
73
+ ]);
74
+ const closeHandle = kernel32.func("CloseHandle", "int", ["void *"]);
75
+ const handle = createFile("CONIN$", (GENERIC_READ | GENERIC_WRITE) >>> 0, (FILE_SHARE_READ | FILE_SHARE_WRITE) >>> 0, null, OPEN_EXISTING, 0, null);
76
+ if (!handle)
77
+ return null;
78
+ const modeOut = [0];
79
+ const ok = getConsoleMode(handle, modeOut);
80
+ if (!ok) {
81
+ try {
82
+ closeHandle(handle);
83
+ }
84
+ catch { /* ignore */ }
85
+ return null;
86
+ }
87
+ const prevMode = (modeOut[0] ?? 0) >>> 0;
88
+ const newMode = ((prevMode
89
+ & ~ENABLE_PROCESSED_INPUT
90
+ & ~ENABLE_LINE_INPUT
91
+ & ~ENABLE_ECHO_INPUT)
92
+ | ENABLE_WINDOW_INPUT
93
+ | ENABLE_MOUSE_INPUT) >>> 0;
94
+ const setOk = setConsoleMode(handle, newMode);
95
+ if (!setOk) {
96
+ try {
97
+ setConsoleMode(handle, prevMode);
98
+ }
99
+ catch { /* ignore */ }
100
+ try {
101
+ closeHandle(handle);
102
+ }
103
+ catch { /* ignore */ }
104
+ return null;
105
+ }
106
+ return new Win32ConsoleSource(koffi, handle, prevMode, {
107
+ readConsoleInput,
108
+ getNumEvents,
109
+ setConsoleMode,
110
+ closeHandle,
111
+ });
112
+ }
113
+ catch {
114
+ return null;
115
+ }
116
+ }
117
+ start() {
118
+ if (this.stopped || this.pollTimer !== undefined)
119
+ return;
120
+ this.pollTimer = setInterval(() => this.poll(), POLL_INTERVAL_MS);
121
+ }
122
+ stop() {
123
+ if (this.stopped)
124
+ return;
125
+ this.stopped = true;
126
+ if (this.pollTimer !== undefined) {
127
+ clearInterval(this.pollTimer);
128
+ this.pollTimer = undefined;
129
+ }
130
+ try {
131
+ this.fns.setConsoleMode(this.handle, this.prevMode);
132
+ }
133
+ catch { /* ignore */ }
134
+ try {
135
+ this.fns.closeHandle(this.handle);
136
+ }
137
+ catch { /* ignore */ }
138
+ }
139
+ onEvents(cb) {
140
+ this.subscribers.add(cb);
141
+ return () => { this.subscribers.delete(cb); };
142
+ }
143
+ onResize(cb) {
144
+ this.resizeSubscribers.add(cb);
145
+ return () => { this.resizeSubscribers.delete(cb); };
146
+ }
147
+ poll() {
148
+ if (this.stopped)
149
+ return;
150
+ try {
151
+ this.countOut[0] = 0;
152
+ const ok = this.fns.getNumEvents(this.handle, this.countOut);
153
+ if (!ok || this.countOut[0] === 0)
154
+ return;
155
+ this.readOut[0] = 0;
156
+ const readOk = this.fns.readConsoleInput(this.handle, this.inputBuf, BATCH_SIZE, this.readOut);
157
+ if (!readOk)
158
+ return;
159
+ const n = this.readOut[0] ?? 0;
160
+ const events = [];
161
+ const resizes = [];
162
+ for (let i = 0; i < n; i++) {
163
+ const base = i * INPUT_RECORD_SIZE;
164
+ const eventType = this.inputBuf.readUInt16LE(base);
165
+ switch (eventType) {
166
+ case KEY_EVENT: {
167
+ const record = decodeKeyEvent(this.inputBuf, base + 4);
168
+ for (const k of this.translator.translate(record)) {
169
+ events.push(k);
170
+ }
171
+ break;
172
+ }
173
+ case WINDOW_BUFFER_SIZE_EVENT: {
174
+ // COORD dwSize at offset 4 inside the union slot (two signed
175
+ // 16-bit values: X = columns, Y = rows).
176
+ const columns = this.inputBuf.readInt16LE(base + 4);
177
+ const rows = this.inputBuf.readInt16LE(base + 6);
178
+ if (columns > 0 && rows > 0) {
179
+ resizes.push({ columns, rows });
180
+ }
181
+ break;
182
+ }
183
+ case MOUSE_EVENT: {
184
+ // MOUSE_EVENT_RECORD layout inside the union slot:
185
+ // COORD dwMousePosition (base + 4, 4 bytes)
186
+ // DWORD dwButtonState (base + 8)
187
+ // DWORD dwControlKeyState(base + 12)
188
+ // DWORD dwEventFlags (base + 16)
189
+ const dwButtonState = this.inputBuf.readUInt32LE(base + 8);
190
+ const dwEventFlags = this.inputBuf.readUInt32LE(base + 16);
191
+ if ((dwEventFlags & MOUSE_WHEELED) !== 0) {
192
+ // High WORD of dwButtonState is the signed wheel delta.
193
+ const high = (dwButtonState >>> 16) & 0xffff;
194
+ const signed = high & 0x8000 ? high - 0x10000 : high;
195
+ const direction = signed > 0 ? "up" : "down";
196
+ events.push({ kind: "wheel", direction });
197
+ }
198
+ break;
199
+ }
200
+ default:
201
+ break;
202
+ }
203
+ }
204
+ if (events.length > 0)
205
+ this.fanOut(events);
206
+ if (resizes.length > 0) {
207
+ // Coalesce: multiple buffer-size records in one tick collapse to
208
+ // the final size.
209
+ this.fanOutResize(resizes[resizes.length - 1]);
210
+ }
211
+ }
212
+ catch {
213
+ // Best-effort polling — if the FFI call throws, drop this tick.
214
+ }
215
+ }
216
+ fanOut(events) {
217
+ // Snapshot only when multiple subscribers exist — the typical single
218
+ // host subscriber doesn't need an array copy per event burst, and a
219
+ // size-1 Set iteration is unaffected by a callback that unsubscribes
220
+ // itself.
221
+ if (this.subscribers.size > 1) {
222
+ for (const cb of Array.from(this.subscribers)) {
223
+ try {
224
+ cb(events);
225
+ }
226
+ catch { /* ignore */ }
227
+ }
228
+ return;
229
+ }
230
+ for (const cb of this.subscribers) {
231
+ try {
232
+ cb(events);
233
+ }
234
+ catch { /* ignore */ }
235
+ }
236
+ }
237
+ fanOutResize(size) {
238
+ if (this.resizeSubscribers.size > 1) {
239
+ for (const cb of Array.from(this.resizeSubscribers)) {
240
+ try {
241
+ cb(size);
242
+ }
243
+ catch { /* ignore */ }
244
+ }
245
+ return;
246
+ }
247
+ for (const cb of this.resizeSubscribers) {
248
+ try {
249
+ cb(size);
250
+ }
251
+ catch { /* ignore */ }
252
+ }
253
+ }
254
+ }
255
+ /**
256
+ * Decode a `KEY_EVENT_RECORD` from a 16-byte slice of an `INPUT_RECORD`
257
+ * buffer (skipping the 4-byte `EventType` + padding header):
258
+ * DWORD bKeyDown
259
+ * WORD wRepeatCount
260
+ * WORD wVirtualKeyCode
261
+ * WORD wVirtualScanCode
262
+ * WCHAR uChar.UnicodeChar
263
+ * DWORD dwControlKeyState
264
+ */
265
+ function decodeKeyEvent(buf, offset) {
266
+ return {
267
+ bKeyDown: buf.readUInt32LE(offset) !== 0,
268
+ wRepeatCount: buf.readUInt16LE(offset + 4),
269
+ wVirtualKeyCode: buf.readUInt16LE(offset + 6),
270
+ wVirtualScanCode: buf.readUInt16LE(offset + 8),
271
+ unicodeChar: buf.readUInt16LE(offset + 10),
272
+ dwControlKeyState: buf.readUInt32LE(offset + 12),
273
+ };
274
+ }
275
+ //# sourceMappingURL=win32-console-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"win32-console-source.js","sourceRoot":"","sources":["../../src/terminal/win32-console-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { TerminalKey } from "../terminal-input.js";
2
+ /**
3
+ * Parsed Windows `KEY_EVENT_RECORD` payload — produced by either an FFI
4
+ * read of `ReadConsoleInputW` or a test fixture.
5
+ */
6
+ export interface KeyEventRecord {
7
+ bKeyDown: boolean;
8
+ wRepeatCount: number;
9
+ wVirtualKeyCode: number;
10
+ wVirtualScanCode: number;
11
+ unicodeChar: number;
12
+ dwControlKeyState: number;
13
+ }
14
+ interface Win32KeyTranslator {
15
+ translate(record: KeyEventRecord): TerminalKey[];
16
+ }
17
+ /**
18
+ * Translate a stream of `KEY_EVENT_RECORD`s to `TerminalKey[]`.
19
+ *
20
+ * Output shapes mirror `TerminalKeyParser.handleWin32Input` so the FFI
21
+ * path emits bit-identical events to the byte-stream Win32-input-mode
22
+ * path.
23
+ */
24
+ export declare function createWin32KeyTranslator(): Win32KeyTranslator;
25
+ export {};
26
+ //# sourceMappingURL=win32-key-translator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"win32-key-translator.d.ts","sourceRoot":"","sources":["../../src/terminal/win32-key-translator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,UAAU,kBAAkB;IAC1B,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,WAAW,EAAE,CAAC;CAClD;AAMD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,IAAI,kBAAkB,CA2E7D"}
@@ -0,0 +1,87 @@
1
+ const LEFT_CTRL_PRESSED = 0x0008;
2
+ const RIGHT_CTRL_PRESSED = 0x0004;
3
+ const SHIFT_PRESSED = 0x0010;
4
+ /**
5
+ * Translate a stream of `KEY_EVENT_RECORD`s to `TerminalKey[]`.
6
+ *
7
+ * Output shapes mirror `TerminalKeyParser.handleWin32Input` so the FFI
8
+ * path emits bit-identical events to the byte-stream Win32-input-mode
9
+ * path.
10
+ */
11
+ export function createWin32KeyTranslator() {
12
+ let pendingHighSurrogate;
13
+ function emit(record) {
14
+ if (!record.bKeyDown)
15
+ return [];
16
+ const vk = record.wVirtualKeyCode;
17
+ // Modifier-only keys (Shift=16, Ctrl=17, Alt=18) — drop.
18
+ if (vk === 16 || vk === 17 || vk === 18)
19
+ return [];
20
+ if (vk === 33)
21
+ return [{ kind: "page", direction: "up" }];
22
+ if (vk === 34)
23
+ return [{ kind: "page", direction: "down" }];
24
+ if (vk === 35)
25
+ return [{ kind: "end" }];
26
+ if (vk === 36)
27
+ return [{ kind: "home" }];
28
+ if (vk >= 37 && vk <= 40) {
29
+ const dir = ["left", "up", "right", "down"][vk - 37];
30
+ return [{ kind: "arrow", direction: dir }];
31
+ }
32
+ const cs = record.dwControlKeyState;
33
+ const ctrl = (cs & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED)) !== 0;
34
+ const uc = record.unicodeChar;
35
+ if (uc === 13 || uc === 10) {
36
+ if (ctrl)
37
+ return [{ kind: "kitty-key", keyCode: 13, modifiers: 5 }];
38
+ return [{ kind: "enter", byte: uc }];
39
+ }
40
+ if (vk === 8)
41
+ return [{ kind: "backspace" }];
42
+ if (vk === 27)
43
+ return [{ kind: "escape" }];
44
+ if (vk === 9) {
45
+ const shift = (cs & SHIFT_PRESSED) !== 0;
46
+ return [{ kind: "kitty-key", keyCode: 9, modifiers: shift ? 2 : 1 }];
47
+ }
48
+ if (ctrl && uc >= 1 && uc < 32) {
49
+ return [{ kind: "control", byte: uc }];
50
+ }
51
+ if (uc >= 0xd800 && uc <= 0xdbff) {
52
+ pendingHighSurrogate = uc;
53
+ return [];
54
+ }
55
+ if (uc >= 0xdc00 && uc <= 0xdfff) {
56
+ if (pendingHighSurrogate === undefined)
57
+ return [];
58
+ const hi = pendingHighSurrogate;
59
+ pendingHighSurrogate = undefined;
60
+ const char = String.fromCharCode(hi, uc);
61
+ return [{ kind: "printable", char, source: "plain" }];
62
+ }
63
+ if (uc >= 32) {
64
+ pendingHighSurrogate = undefined;
65
+ return [{
66
+ kind: "printable",
67
+ char: String.fromCharCode(uc),
68
+ source: "plain",
69
+ }];
70
+ }
71
+ return [];
72
+ }
73
+ return {
74
+ translate(record) {
75
+ const single = emit(record);
76
+ const count = Math.max(1, record.wRepeatCount | 0);
77
+ if (count === 1 || single.length === 0)
78
+ return single;
79
+ const out = [];
80
+ for (let i = 0; i < count; i++) {
81
+ out.push(...single);
82
+ }
83
+ return out;
84
+ },
85
+ };
86
+ }
87
+ //# sourceMappingURL=win32-key-translator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"win32-key-translator.js","sourceRoot":"","sources":["../../src/terminal/win32-key-translator.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@ export type TerminalKey = {
18
18
  byte: number;
19
19
  } | {
20
20
  kind: "enter";
21
+ byte: number;
21
22
  } | {
22
23
  kind: "backspace";
23
24
  } | {
@@ -39,6 +40,9 @@ export type TerminalKey = {
39
40
  kind: "kitty-key";
40
41
  keyCode: number;
41
42
  modifiers: number;
43
+ } | {
44
+ kind: "raw";
45
+ bytes: Buffer;
42
46
  };
43
47
  export declare class TerminalKeyParser {
44
48
  private readonly escapeTimeoutMs;
@@ -52,12 +56,18 @@ export declare class TerminalKeyParser {
52
56
  onDeferredKeys(cb: (keys: TerminalKey[]) => void): void;
53
57
  cancelPendingEscape(): void;
54
58
  parseChunk(chunk: Buffer): TerminalKey[];
59
+ private dispatch;
55
60
  private handleSs3;
56
61
  private handleCsi;
57
62
  /**
58
63
  * Win32-input-mode: CSI Vk;Sc;Uc;Kd;Cs;Rc _
59
64
  * Vk = virtual key code, Sc = scan code, Uc = unicode char,
60
65
  * Kd = key-down(1)/up(0), Cs = control-key-state bitmask, Rc = repeat count.
66
+ *
67
+ * This path never returns `unrecognized`. The byte-stream Win32-input-mode
68
+ * frames come from a structured source (Windows Terminal forwarding console
69
+ * input through ConPTY), so every recognized shape we don't act on is a
70
+ * protocol artifact that should be dropped, not forwarded as `raw`.
61
71
  */
62
72
  private handleWin32Input;
63
73
  private parseKittyEventType;
@@ -1 +1 @@
1
- {"version":3,"file":"terminal-input.d.ts","sourceRoot":"","sources":["../src/terminal-input.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,YAAY,CAAA;CAAE,GAC/E;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;CAAE,GAC9D;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,IAAI,GAAG,MAAM,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GACf;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,IAAI,GAAG,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9D,qBAAa,iBAAiB;IAS1B,OAAO,CAAC,QAAQ,CAAC,eAAe;IARlC,OAAO,CAAC,KAAK,CAAuD;IACpE,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,WAAW,CAA4C;IAC/D,OAAO,CAAC,gBAAgB,CAA8C;IACtE,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,YAAY,CAAK;gBAGN,eAAe,SAAK;IAGvC,cAAc,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,IAAI,GAAG,IAAI;IAIvD,mBAAmB,IAAI,IAAI;IAO3B,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE;IA6FxC,OAAO,CAAC,SAAS;IAmBjB,OAAO,CAAC,SAAS;IA2KjB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IA0DxB,OAAO,CAAC,mBAAmB;CAO5B"}
1
+ {"version":3,"file":"terminal-input.d.ts","sourceRoot":"","sources":["../src/terminal-input.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,YAAY,CAAA;CAAE,GAC/E;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;CAAE,GAC9D;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,IAAI,GAAG,MAAM,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GACf;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,IAAI,GAAG,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAcnC,qBAAa,iBAAiB;IAS1B,OAAO,CAAC,QAAQ,CAAC,eAAe;IARlC,OAAO,CAAC,KAAK,CAAuD;IACpE,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,WAAW,CAA4C;IAC/D,OAAO,CAAC,gBAAgB,CAA8C;IACtE,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,YAAY,CAAK;gBAGN,eAAe,SAAK;IAGvC,cAAc,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,IAAI,GAAG,IAAI;IAIvD,mBAAmB,IAAI,IAAI;IAO3B,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE;IAyGxC,OAAO,CAAC,QAAQ;IAiBhB,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,SAAS;IAiIjB;;;;;;;;;OASG;IACH,OAAO,CAAC,gBAAgB;IA0DxB,OAAO,CAAC,mBAAmB;CAM5B"}