berry-agent-sdk 0.1.0-alpha.2

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 (263) hide show
  1. package/README.md +78 -0
  2. package/dist/packages/berry-agent-sdk/src/client.d.ts +6 -0
  3. package/dist/packages/berry-agent-sdk/src/client.js +59 -0
  4. package/dist/packages/berry-agent-sdk/src/client.js.map +1 -0
  5. package/dist/packages/berry-agent-sdk/src/http.d.ts +24 -0
  6. package/dist/packages/berry-agent-sdk/src/http.js +232 -0
  7. package/dist/packages/berry-agent-sdk/src/http.js.map +1 -0
  8. package/dist/packages/berry-agent-sdk/src/index.d.ts +25 -0
  9. package/dist/packages/berry-agent-sdk/src/index.js +22 -0
  10. package/dist/packages/berry-agent-sdk/src/index.js.map +1 -0
  11. package/dist/packages/berry-agent-sdk/src/stdio.d.ts +23 -0
  12. package/dist/packages/berry-agent-sdk/src/stdio.js +238 -0
  13. package/dist/packages/berry-agent-sdk/src/stdio.js.map +1 -0
  14. package/dist/packages/berry-agent-sdk/src/types.d.ts +117 -0
  15. package/dist/packages/berry-agent-sdk/src/types.js +19 -0
  16. package/dist/packages/berry-agent-sdk/src/types.js.map +1 -0
  17. package/dist/src/agent/events.d.ts +11 -0
  18. package/dist/src/agent/events.js +2 -0
  19. package/dist/src/agent/events.js.map +1 -0
  20. package/dist/src/agent/index.d.ts +13 -0
  21. package/dist/src/agent/index.js +3 -0
  22. package/dist/src/agent/index.js.map +1 -0
  23. package/dist/src/agent/loop.d.ts +19 -0
  24. package/dist/src/agent/loop.js +140 -0
  25. package/dist/src/agent/loop.js.map +1 -0
  26. package/dist/src/agent/queue.d.ts +105 -0
  27. package/dist/src/agent/queue.js +120 -0
  28. package/dist/src/agent/queue.js.map +1 -0
  29. package/dist/src/agent/stream.d.ts +21 -0
  30. package/dist/src/agent/stream.js +80 -0
  31. package/dist/src/agent/stream.js.map +1 -0
  32. package/dist/src/agent/tools-batch.d.ts +49 -0
  33. package/dist/src/agent/tools-batch.js +222 -0
  34. package/dist/src/agent/tools-batch.js.map +1 -0
  35. package/dist/src/agent/types.d.ts +104 -0
  36. package/dist/src/agent/types.js +9 -0
  37. package/dist/src/agent/types.js.map +1 -0
  38. package/dist/src/channels/ask-queue.d.ts +44 -0
  39. package/dist/src/channels/ask-queue.js +83 -0
  40. package/dist/src/channels/ask-queue.js.map +1 -0
  41. package/dist/src/channels/commands.d.ts +56 -0
  42. package/dist/src/channels/commands.js +130 -0
  43. package/dist/src/channels/commands.js.map +1 -0
  44. package/dist/src/channels/engine/cell.d.ts +55 -0
  45. package/dist/src/channels/engine/cell.js +144 -0
  46. package/dist/src/channels/engine/cell.js.map +1 -0
  47. package/dist/src/channels/engine/diff.d.ts +3 -0
  48. package/dist/src/channels/engine/diff.js +144 -0
  49. package/dist/src/channels/engine/diff.js.map +1 -0
  50. package/dist/src/channels/engine/engine.d.ts +151 -0
  51. package/dist/src/channels/engine/engine.js +417 -0
  52. package/dist/src/channels/engine/engine.js.map +1 -0
  53. package/dist/src/channels/engine/index.d.ts +22 -0
  54. package/dist/src/channels/engine/index.js +9 -0
  55. package/dist/src/channels/engine/index.js.map +1 -0
  56. package/dist/src/channels/engine/input-keys.d.ts +39 -0
  57. package/dist/src/channels/engine/input-keys.js +87 -0
  58. package/dist/src/channels/engine/input-keys.js.map +1 -0
  59. package/dist/src/channels/engine/input.d.ts +174 -0
  60. package/dist/src/channels/engine/input.js +597 -0
  61. package/dist/src/channels/engine/input.js.map +1 -0
  62. package/dist/src/channels/engine/memory-io.d.ts +46 -0
  63. package/dist/src/channels/engine/memory-io.js +72 -0
  64. package/dist/src/channels/engine/memory-io.js.map +1 -0
  65. package/dist/src/channels/engine/process-io.d.ts +23 -0
  66. package/dist/src/channels/engine/process-io.js +39 -0
  67. package/dist/src/channels/engine/process-io.js.map +1 -0
  68. package/dist/src/channels/engine/types.d.ts +202 -0
  69. package/dist/src/channels/engine/types.js +18 -0
  70. package/dist/src/channels/engine/types.js.map +1 -0
  71. package/dist/src/channels/engine/width.d.ts +23 -0
  72. package/dist/src/channels/engine/width.js +123 -0
  73. package/dist/src/channels/engine/width.js.map +1 -0
  74. package/dist/src/channels/index.d.ts +25 -0
  75. package/dist/src/channels/index.js +16 -0
  76. package/dist/src/channels/index.js.map +1 -0
  77. package/dist/src/channels/registry.d.ts +33 -0
  78. package/dist/src/channels/registry.js +57 -0
  79. package/dist/src/channels/registry.js.map +1 -0
  80. package/dist/src/channels/sdk/admit.d.ts +32 -0
  81. package/dist/src/channels/sdk/admit.js +30 -0
  82. package/dist/src/channels/sdk/admit.js.map +1 -0
  83. package/dist/src/channels/sdk/backend.d.ts +19 -0
  84. package/dist/src/channels/sdk/backend.js +103 -0
  85. package/dist/src/channels/sdk/backend.js.map +1 -0
  86. package/dist/src/channels/sdk/cursor.d.ts +51 -0
  87. package/dist/src/channels/sdk/cursor.js +57 -0
  88. package/dist/src/channels/sdk/cursor.js.map +1 -0
  89. package/dist/src/channels/sdk/index.d.ts +20 -0
  90. package/dist/src/channels/sdk/index.js +21 -0
  91. package/dist/src/channels/sdk/index.js.map +1 -0
  92. package/dist/src/channels/sdk/jsonl.d.ts +47 -0
  93. package/dist/src/channels/sdk/jsonl.js +201 -0
  94. package/dist/src/channels/sdk/jsonl.js.map +1 -0
  95. package/dist/src/channels/sdk/protocol.d.ts +297 -0
  96. package/dist/src/channels/sdk/protocol.js +25 -0
  97. package/dist/src/channels/sdk/protocol.js.map +1 -0
  98. package/dist/src/channels/sdk/schema.d.ts +12 -0
  99. package/dist/src/channels/sdk/schema.js +92 -0
  100. package/dist/src/channels/sdk/schema.js.map +1 -0
  101. package/dist/src/channels/sdk/wire-core.d.ts +199 -0
  102. package/dist/src/channels/sdk/wire-core.js +447 -0
  103. package/dist/src/channels/sdk/wire-core.js.map +1 -0
  104. package/dist/src/channels/service.d.ts +66 -0
  105. package/dist/src/channels/service.js +170 -0
  106. package/dist/src/channels/service.js.map +1 -0
  107. package/dist/src/channels/tui/autocomplete/autocomplete.d.ts +32 -0
  108. package/dist/src/channels/tui/autocomplete/autocomplete.js +43 -0
  109. package/dist/src/channels/tui/autocomplete/autocomplete.js.map +1 -0
  110. package/dist/src/channels/tui/autocomplete/file-mentions.d.ts +18 -0
  111. package/dist/src/channels/tui/autocomplete/file-mentions.js +107 -0
  112. package/dist/src/channels/tui/autocomplete/file-mentions.js.map +1 -0
  113. package/dist/src/channels/tui/autocomplete/popup.d.ts +47 -0
  114. package/dist/src/channels/tui/autocomplete/popup.js +149 -0
  115. package/dist/src/channels/tui/autocomplete/popup.js.map +1 -0
  116. package/dist/src/channels/tui/autocomplete/provider.d.ts +38 -0
  117. package/dist/src/channels/tui/autocomplete/provider.js +8 -0
  118. package/dist/src/channels/tui/autocomplete/provider.js.map +1 -0
  119. package/dist/src/channels/tui/autocomplete/token.d.ts +22 -0
  120. package/dist/src/channels/tui/autocomplete/token.js +69 -0
  121. package/dist/src/channels/tui/autocomplete/token.js.map +1 -0
  122. package/dist/src/channels/tui/backend/ansi-rows.d.ts +86 -0
  123. package/dist/src/channels/tui/backend/ansi-rows.js +209 -0
  124. package/dist/src/channels/tui/backend/ansi-rows.js.map +1 -0
  125. package/dist/src/channels/tui/backend/main-screen.d.ts +90 -0
  126. package/dist/src/channels/tui/backend/main-screen.js +208 -0
  127. package/dist/src/channels/tui/backend/main-screen.js.map +1 -0
  128. package/dist/src/channels/tui/backend/osc.d.ts +79 -0
  129. package/dist/src/channels/tui/backend/osc.js +92 -0
  130. package/dist/src/channels/tui/backend/osc.js.map +1 -0
  131. package/dist/src/channels/tui/backend/transcript.d.ts +98 -0
  132. package/dist/src/channels/tui/backend/transcript.js +231 -0
  133. package/dist/src/channels/tui/backend/transcript.js.map +1 -0
  134. package/dist/src/channels/tui/backend/tui-backend.d.ts +324 -0
  135. package/dist/src/channels/tui/backend/tui-backend.js +916 -0
  136. package/dist/src/channels/tui/backend/tui-backend.js.map +1 -0
  137. package/dist/src/channels/tui/editor/editor-model.d.ts +141 -0
  138. package/dist/src/channels/tui/editor/editor-model.js +544 -0
  139. package/dist/src/channels/tui/editor/editor-model.js.map +1 -0
  140. package/dist/src/channels/tui/editor/editor-view.d.ts +36 -0
  141. package/dist/src/channels/tui/editor/editor-view.js +141 -0
  142. package/dist/src/channels/tui/editor/editor-view.js.map +1 -0
  143. package/dist/src/channels/tui/editor/editor.d.ts +50 -0
  144. package/dist/src/channels/tui/editor/editor.js +276 -0
  145. package/dist/src/channels/tui/editor/editor.js.map +1 -0
  146. package/dist/src/channels/tui/editor/undo-stack.d.ts +22 -0
  147. package/dist/src/channels/tui/editor/undo-stack.js +36 -0
  148. package/dist/src/channels/tui/editor/undo-stack.js.map +1 -0
  149. package/dist/src/channels/tui/editor/visual-lines.d.ts +39 -0
  150. package/dist/src/channels/tui/editor/visual-lines.js +127 -0
  151. package/dist/src/channels/tui/editor/visual-lines.js.map +1 -0
  152. package/dist/src/channels/tui/editor/word-nav.d.ts +10 -0
  153. package/dist/src/channels/tui/editor/word-nav.js +107 -0
  154. package/dist/src/channels/tui/editor/word-nav.js.map +1 -0
  155. package/dist/src/channels/tui/history/history-viewer.d.ts +133 -0
  156. package/dist/src/channels/tui/history/history-viewer.js +404 -0
  157. package/dist/src/channels/tui/history/history-viewer.js.map +1 -0
  158. package/dist/src/channels/tui/index.d.ts +16 -0
  159. package/dist/src/channels/tui/index.js +4 -0
  160. package/dist/src/channels/tui/index.js.map +1 -0
  161. package/dist/src/channels/tui/markdown/blocks.d.ts +42 -0
  162. package/dist/src/channels/tui/markdown/blocks.js +112 -0
  163. package/dist/src/channels/tui/markdown/blocks.js.map +1 -0
  164. package/dist/src/channels/tui/markdown/inline.d.ts +24 -0
  165. package/dist/src/channels/tui/markdown/inline.js +76 -0
  166. package/dist/src/channels/tui/markdown/inline.js.map +1 -0
  167. package/dist/src/channels/tui/markdown/markdown.d.ts +34 -0
  168. package/dist/src/channels/tui/markdown/markdown.js +183 -0
  169. package/dist/src/channels/tui/markdown/markdown.js.map +1 -0
  170. package/dist/src/channels/tui/memory/memory-viewer.d.ts +235 -0
  171. package/dist/src/channels/tui/memory/memory-viewer.js +541 -0
  172. package/dist/src/channels/tui/memory/memory-viewer.js.map +1 -0
  173. package/dist/src/channels/tui/overlay/alt-screen.d.ts +79 -0
  174. package/dist/src/channels/tui/overlay/alt-screen.js +106 -0
  175. package/dist/src/channels/tui/overlay/alt-screen.js.map +1 -0
  176. package/dist/src/channels/tui/overlay/overlay.d.ts +53 -0
  177. package/dist/src/channels/tui/overlay/overlay.js +58 -0
  178. package/dist/src/channels/tui/overlay/overlay.js.map +1 -0
  179. package/dist/src/channels/tui/overlay/select-confirm.d.ts +73 -0
  180. package/dist/src/channels/tui/overlay/select-confirm.js +157 -0
  181. package/dist/src/channels/tui/overlay/select-confirm.js.map +1 -0
  182. package/dist/src/channels/tui/panels/todo-panel.d.ts +24 -0
  183. package/dist/src/channels/tui/panels/todo-panel.js +55 -0
  184. package/dist/src/channels/tui/panels/todo-panel.js.map +1 -0
  185. package/dist/src/channels/tui/panels/tool-progress-panel.d.ts +37 -0
  186. package/dist/src/channels/tui/panels/tool-progress-panel.js +94 -0
  187. package/dist/src/channels/tui/panels/tool-progress-panel.js.map +1 -0
  188. package/dist/src/channels/tui/scroll/scroll-view.d.ts +96 -0
  189. package/dist/src/channels/tui/scroll/scroll-view.js +255 -0
  190. package/dist/src/channels/tui/scroll/scroll-view.js.map +1 -0
  191. package/dist/src/channels/tui/status/status-line.d.ts +46 -0
  192. package/dist/src/channels/tui/status/status-line.js +77 -0
  193. package/dist/src/channels/tui/status/status-line.js.map +1 -0
  194. package/dist/src/channels/tui/theme.d.ts +27 -0
  195. package/dist/src/channels/tui/theme.js +42 -0
  196. package/dist/src/channels/tui/theme.js.map +1 -0
  197. package/dist/src/channels/types.d.ts +84 -0
  198. package/dist/src/channels/types.js +12 -0
  199. package/dist/src/channels/types.js.map +1 -0
  200. package/dist/src/channels/ui-core.d.ts +80 -0
  201. package/dist/src/channels/ui-core.js +210 -0
  202. package/dist/src/channels/ui-core.js.map +1 -0
  203. package/dist/src/context/codes.d.ts +1 -0
  204. package/dist/src/context/codes.js +41 -0
  205. package/dist/src/context/codes.js.map +1 -0
  206. package/dist/src/context/events.d.ts +62 -0
  207. package/dist/src/context/events.js +161 -0
  208. package/dist/src/context/events.js.map +1 -0
  209. package/dist/src/context/index.d.ts +16 -0
  210. package/dist/src/context/index.js +14 -0
  211. package/dist/src/context/index.js.map +1 -0
  212. package/dist/src/context/logger.d.ts +67 -0
  213. package/dist/src/context/logger.js +137 -0
  214. package/dist/src/context/logger.js.map +1 -0
  215. package/dist/src/context/scope.d.ts +78 -0
  216. package/dist/src/context/scope.js +183 -0
  217. package/dist/src/context/scope.js.map +1 -0
  218. package/dist/src/context/workspace.d.ts +8 -0
  219. package/dist/src/context/workspace.js +105 -0
  220. package/dist/src/context/workspace.js.map +1 -0
  221. package/dist/src/contracts/agent-events.d.ts +73 -0
  222. package/dist/src/contracts/agent-events.js +17 -0
  223. package/dist/src/contracts/agent-events.js.map +1 -0
  224. package/dist/src/contracts/api.d.ts +249 -0
  225. package/dist/src/contracts/api.js +334 -0
  226. package/dist/src/contracts/api.js.map +1 -0
  227. package/dist/src/contracts/approval.d.ts +37 -0
  228. package/dist/src/contracts/approval.js +10 -0
  229. package/dist/src/contracts/approval.js.map +1 -0
  230. package/dist/src/contracts/env-ref.d.ts +41 -0
  231. package/dist/src/contracts/env-ref.js +33 -0
  232. package/dist/src/contracts/env-ref.js.map +1 -0
  233. package/dist/src/contracts/errors.d.ts +56 -0
  234. package/dist/src/contracts/errors.js +267 -0
  235. package/dist/src/contracts/errors.js.map +1 -0
  236. package/dist/src/contracts/events.d.ts +70 -0
  237. package/dist/src/contracts/events.js +330 -0
  238. package/dist/src/contracts/events.js.map +1 -0
  239. package/dist/src/contracts/index.d.ts +32 -0
  240. package/dist/src/contracts/index.js +27 -0
  241. package/dist/src/contracts/index.js.map +1 -0
  242. package/dist/src/contracts/llm.d.ts +278 -0
  243. package/dist/src/contracts/llm.js +13 -0
  244. package/dist/src/contracts/llm.js.map +1 -0
  245. package/dist/src/contracts/messages.d.ts +63 -0
  246. package/dist/src/contracts/messages.js +66 -0
  247. package/dist/src/contracts/messages.js.map +1 -0
  248. package/dist/src/contracts/redact.d.ts +46 -0
  249. package/dist/src/contracts/redact.js +224 -0
  250. package/dist/src/contracts/redact.js.map +1 -0
  251. package/dist/src/contracts/tools.d.ts +198 -0
  252. package/dist/src/contracts/tools.js +35 -0
  253. package/dist/src/contracts/tools.js.map +1 -0
  254. package/dist/src/contracts/types.d.ts +304 -0
  255. package/dist/src/contracts/types.js +51 -0
  256. package/dist/src/contracts/types.js.map +1 -0
  257. package/dist/src/contracts/ui.d.ts +122 -0
  258. package/dist/src/contracts/ui.js +16 -0
  259. package/dist/src/contracts/ui.js.map +1 -0
  260. package/dist/src/sdk/types.d.ts +144 -0
  261. package/dist/src/sdk/types.js +33 -0
  262. package/dist/src/sdk/types.js.map +1 -0
  263. package/package.json +29 -0
@@ -0,0 +1,597 @@
1
+ import { decodeMods, decodePhase, KITTY_PUA_KEYS, LETTER_KEYS, NO_MODS, TILDE_KEYS } from './input-keys.js';
2
+ /** 粘贴态防护帽:超帽强制冲刷(恶意/畸形流不锁死解码器——4 MiB) */
3
+ const PASTE_CAP = 4 * 1024 * 1024;
4
+ /** bracketed paste 终界(包裹尾——6 字节 \x1b[201~) */
5
+ const PASTE_END = '\x1b[201~';
6
+ /**
7
+ * rest 尾部可悬置量(0-5):终界 PASTE_END 的最长真前缀后缀长。pty 写缓冲
8
+ * 分块(典型 4-16KiB)可能把 6 字节终界劈成两半——上 chunk 尾部恰是终界前缀
9
+ * 时不能并入粘贴体(并入后下 chunk 永不匹配完整终界 → 解码器滞留 paste 态,
10
+ * 此后键盘输入全被吞进 pasteBuf 零事件),须悬置到实例字段待下 chunk 拼回再搜。
11
+ */
12
+ function pasteMarkerPrefixLen(rest) {
13
+ const max = Math.min(PASTE_END.length - 1, rest.length);
14
+ for (let k = max; k > 0; k--) {
15
+ if (rest.endsWith(PASTE_END.slice(0, k)))
16
+ return k;
17
+ }
18
+ return 0;
19
+ }
20
+ /** CSI 参数缓冲防护帽(超帽毒化吞到终点——畸形流防御) */
21
+ const CSI_CAP = 64;
22
+ /** IME 跟随窗(ms):两发 CSI 0 在窗内构成前缀链 = 流式预编辑(kitty 单发提交不受影响) */
23
+ const IME_FOLLOW_WINDOW_MS = 100;
24
+ /**
25
+ * 状态机输入解码器。feed 进 chunk、take 排空事件;settle 在判定窗到点时由
26
+ * 引擎调用(lone-ESC 裁决);discardPending 换防吞在途。
27
+ */
28
+ export class InputDecoder {
29
+ /** 事件积压队列(take 排空后换新数组——feed 不回调,避免重入) */
30
+ queue = [];
31
+ /**
32
+ * 解析态七分:ground 地面 / esc 转义挂起 / csi 参数积攒 / ss3 / paste
33
+ * 粘贴体 / paste-drain 粘贴吸收态(粘贴态被换防丢弃或超帽冲刷后残余粘贴体
34
+ * 不得按地面态解码成伪造命令行事件——空框 enter 开应用、`/exit`+CRLF 触
35
+ * 退出,吞到真终界 PASTE_END 再回地面)/ mouse-x10 X10 吞态(bare CSI M
36
+ * 后三字节整吞——坐标字节落可打印区间,地面态重解会伪造 text 事件)。
37
+ */
38
+ mode = 'ground';
39
+ /** CSI 参数积攒缓冲(含私用标记 ?/> 与参数字节) */
40
+ csiBuf = '';
41
+ /** CSI 超帽毒化旗标:序列已判畸形——吞到终点字节整序丢弃(残段不漏成文本) */
42
+ csiPoisoned = false;
43
+ /** 粘贴体积攒缓冲 */
44
+ pasteBuf = '';
45
+ /**
46
+ * 跨 chunk 终界悬置尾(≤5 字节):上 chunk 末尾可能是终界 \x1b[201~ 的真
47
+ * 前缀——悬置于此,下 chunk 先拼回再搜。生命周期:paste 态未命中路径置位;
48
+ * 终界命中 / 防护帽冲刷 / discardPending 清。
49
+ */
50
+ pendingPasteTail = '';
51
+ /** 地面态可打印文本游程积攒(连续可打印合并单事件——打字/提交不撕裂) */
52
+ textRun = '';
53
+ /** lone-ESC 挂起时刻(null = 无挂起) */
54
+ escPendingAt = null;
55
+ /** IME 挂起预编辑(组字中间态;null = 无组字) */
56
+ preedit = null;
57
+ /** 上一发 CSI 0 文本事件(跟随窗回溯判据——流式预编辑终端的组字态开session锚) */
58
+ lastCsi0 = null;
59
+ /** kitty 协议已应答旗标(DA1 到达时裁 legacy/kitty) */
60
+ kittyAnswered = false;
61
+ /** 协议落定已上报旗标(事件只发一次) */
62
+ protocolReported = false;
63
+ /** X10 吞态剩余字节数(bare CSI M 后整吞 3 字节;0 = 不在吞态) */
64
+ mouseX10Remain = 0;
65
+ /** X10 首达已上报旗标(onMouseLegacy 只发一次——per-entry 闩) */
66
+ mouseLegacyReported = false;
67
+ now;
68
+ escapeWindowMs;
69
+ onProtocol;
70
+ onMouseLegacy;
71
+ constructor(opts = {}) {
72
+ this.now = opts.now ?? Date.now;
73
+ this.escapeWindowMs = opts.escapeWindowMs ?? 30;
74
+ this.onProtocol = opts.onProtocol;
75
+ this.onMouseLegacy = opts.onMouseLegacy;
76
+ }
77
+ /** 组字中旗标(焦面查询面——true 时预编辑在途) */
78
+ get composing() {
79
+ return this.preedit !== null;
80
+ }
81
+ /** 挂起预编辑全文(无则 null——预编辑渲染面取用) */
82
+ get pendingPreedit() {
83
+ return this.preedit;
84
+ }
85
+ /** lone-ESC 挂起中(引擎据此装判定窗定时器) */
86
+ get hasPendingEscape() {
87
+ return this.escPendingAt !== null;
88
+ }
89
+ /** 喂入一个 stdin chunk(字符串已按 UTF-8 解码完成) */
90
+ feed(chunk) {
91
+ let i = 0;
92
+ while (i < chunk.length) {
93
+ const cp = chunk.codePointAt(i);
94
+ switch (this.mode) {
95
+ case 'ground': {
96
+ if (cp === 0x1b) {
97
+ this.flushTextRun();
98
+ this.mode = 'esc';
99
+ i++;
100
+ continue;
101
+ }
102
+ if (cp < 0x20 || cp === 0x7f) {
103
+ this.flushTextRun();
104
+ this.dispatchControl(cp);
105
+ i++;
106
+ continue;
107
+ }
108
+ // 可打印:游程积攒(代理对整对入游程)
109
+ this.textRun += String.fromCodePoint(cp);
110
+ i += cp > 0xffff ? 2 : 1;
111
+ continue;
112
+ }
113
+ case 'esc': {
114
+ if (cp === 0x5b) {
115
+ // '[' —— CSI 序列起
116
+ this.mode = 'csi';
117
+ this.csiBuf = '';
118
+ i++;
119
+ continue;
120
+ }
121
+ if (cp === 0x4f) {
122
+ // 'O' —— SS3 序列起
123
+ this.mode = 'ss3';
124
+ i++;
125
+ continue;
126
+ }
127
+ if (cp === 0x1b) {
128
+ // ESC ESC = alt+Escape(legacy alt 编码两字节形)
129
+ this.escPendingAt = null;
130
+ this.emitKey('escape', { ...NO_MODS, alt: true }, 'press');
131
+ this.mode = 'ground';
132
+ i++;
133
+ continue;
134
+ }
135
+ // ESC + 可打印 = legacy alt 编码(如 \x1bx → alt+x);控制码罕见——吞
136
+ this.escPendingAt = null;
137
+ if (cp >= 0x20 && cp !== 0x7f) {
138
+ this.emitKey(String.fromCodePoint(cp), { ...NO_MODS, alt: true }, 'press');
139
+ i += cp > 0xffff ? 2 : 1;
140
+ }
141
+ else {
142
+ i++;
143
+ }
144
+ this.mode = 'ground';
145
+ continue;
146
+ }
147
+ case 'csi': {
148
+ if (cp >= 0x40 && cp <= 0x7e) {
149
+ // 终点字节到——整序派发(毒化序列整序丢弃)
150
+ if (!this.csiPoisoned)
151
+ this.dispatchCsi(this.csiBuf, String.fromCodePoint(cp));
152
+ this.csiBuf = '';
153
+ this.csiPoisoned = false;
154
+ // dispatchTilde 200 可能已转粘贴态——不覆写(粘贴体接管后续字节)
155
+ if (this.mode === 'csi')
156
+ this.mode = 'ground';
157
+ this.escPendingAt = null;
158
+ i++;
159
+ continue;
160
+ }
161
+ this.csiBuf += String.fromCodePoint(cp);
162
+ i += cp > 0xffff ? 2 : 1;
163
+ if (this.csiBuf.length > CSI_CAP) {
164
+ // 畸形超帽:毒化标记(继续吞参数到终点字节——不锁死、不误发文本)
165
+ this.csiPoisoned = true;
166
+ this.csiBuf = '';
167
+ }
168
+ continue;
169
+ }
170
+ case 'ss3': {
171
+ // SS3 单字母终点(A/B/C/D/H/F/P/Q/R/S)
172
+ const key = LETTER_KEYS[String.fromCodePoint(cp)];
173
+ this.escPendingAt = null;
174
+ if (key)
175
+ this.emitKey(key, { ...NO_MODS }, 'press');
176
+ this.mode = 'ground';
177
+ i++;
178
+ continue;
179
+ }
180
+ case 'mouse-x10': {
181
+ // X10 形后三字节整吞(防御吞):坐标字节 0x20+ 落可打印区间——按
182
+ // 地面态重解会伪造 text/按键;降级(DECRST)后不再有后续 X10 报文,
183
+ // 吞态必终止
184
+ i++;
185
+ this.mouseX10Remain--;
186
+ if (this.mouseX10Remain <= 0)
187
+ this.mode = 'ground';
188
+ continue;
189
+ }
190
+ case 'paste': {
191
+ // 粘贴体:找包裹尾 PASTE_END——整段交付,体内容不逐键解析。
192
+ // 跨 chunk 终界拼接:上 chunk 尾部的终界真前缀悬置在
193
+ // pendingPasteTail——先拼回再搜;命中时推进量须还账悬置字节(那
194
+ // tail.length 个字节来自上 chunk,本 chunk 未消费)
195
+ const tail = this.pendingPasteTail;
196
+ this.pendingPasteTail = '';
197
+ const rest = tail + chunk.slice(i);
198
+ const end = rest.indexOf(PASTE_END);
199
+ if (end < 0) {
200
+ // 未命中:头部(确定不可能参与终界)并入体积攒;尾部真前缀悬置
201
+ const hold = pasteMarkerPrefixLen(rest);
202
+ this.pasteBuf += rest.slice(0, rest.length - hold);
203
+ this.pendingPasteTail = rest.slice(rest.length - hold);
204
+ i = chunk.length; // 本 chunk 全量消化(并入或悬置——无剩可解)
205
+ this.enforcePasteCap();
206
+ }
207
+ else {
208
+ this.pasteBuf += rest.slice(0, end);
209
+ const text = this.pasteBuf;
210
+ this.pasteBuf = '';
211
+ this.mode = 'ground';
212
+ this.escPendingAt = null;
213
+ // 终界长 6 > 悬置上限 5 ⇒ 推进量恒 ≥1(无死循环);且 end+6 ≤
214
+ // rest.length 保证不越过本 chunk 末尾
215
+ i += end + PASTE_END.length - tail.length;
216
+ if (text.length > 0)
217
+ this.queue.push({ kind: 'paste', text });
218
+ }
219
+ continue;
220
+ }
221
+ case 'paste-drain': {
222
+ // 粘贴吸收态:粘贴体已被换防丢弃/超帽冲刷——残余粘贴体字节全吞(含
223
+ // CRLF/命令形文本,防伪造命令行事件),直到真终界 PASTE_END 到达回
224
+ // 地面。终端协议保证 200~ 后必有 201~——吸收态必终止。跨 chunk 分裂
225
+ // 终界复用 paste 态同款悬置尾(真前缀悬置拼回,不吞真终界字节)
226
+ const tail = this.pendingPasteTail;
227
+ this.pendingPasteTail = '';
228
+ const rest = tail + chunk.slice(i);
229
+ const end = rest.indexOf(PASTE_END);
230
+ if (end < 0) {
231
+ // 未命中:全吞;尾部真前缀悬置(下 chunk 拼回再搜)
232
+ const hold = pasteMarkerPrefixLen(rest);
233
+ this.pendingPasteTail = rest.slice(rest.length - hold);
234
+ i = chunk.length;
235
+ }
236
+ else {
237
+ // 真终界命中:回地面,续解其后字节(推进量还账悬置字节——同 paste 态)
238
+ this.mode = 'ground';
239
+ this.escPendingAt = null;
240
+ i += end + PASTE_END.length - tail.length;
241
+ }
242
+ continue;
243
+ }
244
+ }
245
+ }
246
+ // chunk 尽:地面态文本游程冲刷(每 chunk 一个 text 事件——跨 chunk 不滞留;
247
+ // esc/csi/paste 态下 textRun 必为空,冲刷为无操作)
248
+ this.flushTextRun();
249
+ // esc 态挂起无续 → 记 lone-ESC 判定窗起点(首帧记时)
250
+ if (this.mode === 'esc' && this.escPendingAt === null) {
251
+ this.escPendingAt = this.now();
252
+ }
253
+ }
254
+ /** 判定窗裁决(引擎在窗到点调用):仍挂起 → 判 Esc 键 */
255
+ settle() {
256
+ if (this.mode === 'esc' && this.escPendingAt !== null) {
257
+ if (this.now() - this.escPendingAt >= this.escapeWindowMs) {
258
+ this.escPendingAt = null;
259
+ this.mode = 'ground';
260
+ this.emitKey('escape', { ...NO_MODS }, 'press');
261
+ }
262
+ }
263
+ }
264
+ /**
265
+ * 换防吞在途:丢弃解析中途的转义/粘贴/预编辑/文本游程——换防瞬间 stdin
266
+ * 在途序列一窗全丢,不漏进新栈。
267
+ *
268
+ * 粘贴态例外:粘贴体半截被弃后残余字节若按地面态重解会伪造命令行事件——
269
+ * 粘贴态/吸收态换防改入吸收态(paste-drain),吞残余到真终界 PASTE_END 再
270
+ * 回地面;CSI/ESC/X10 半序列无续作义务,仍回地面。
271
+ */
272
+ discardPending() {
273
+ this.mode = this.mode === 'paste' || this.mode === 'paste-drain' ? 'paste-drain' : 'ground';
274
+ this.csiBuf = '';
275
+ this.csiPoisoned = false;
276
+ this.pasteBuf = '';
277
+ this.pendingPasteTail = '';
278
+ this.textRun = '';
279
+ this.escPendingAt = null;
280
+ this.preedit = null;
281
+ this.mouseX10Remain = 0;
282
+ }
283
+ /** 排空事件队列(引擎 emit 的取货口) */
284
+ take() {
285
+ const out = this.queue;
286
+ this.queue = [];
287
+ return out;
288
+ }
289
+ /** 游程冲刷:地面态连续可打印合并成一个 text 事件(提交/打字不撕裂) */
290
+ flushTextRun() {
291
+ if (this.textRun.length > 0) {
292
+ this.queue.push({ kind: 'text', text: this.textRun });
293
+ this.textRun = '';
294
+ }
295
+ }
296
+ /** 按键派发(预编辑挂起时先冲刷为提交——流式组字安全网;phase 必填) */
297
+ emitKey(key, mods, phase) {
298
+ this.flushImeOnInterrupt();
299
+ const ev = { kind: 'key', key, ...mods, phase };
300
+ this.queue.push(ev);
301
+ }
302
+ /** 预编辑被非组字事件打断 → 冲刷为提交(终端漏发显式提交时的兜底) */
303
+ flushImeOnInterrupt() {
304
+ if (this.preedit !== null) {
305
+ const text = this.preedit;
306
+ this.preedit = null;
307
+ const ev = { kind: 'ime', text, committed: true };
308
+ this.queue.push(ev);
309
+ }
310
+ }
311
+ /** C0 控制码 → 键事件(legacy ctrl 映射表:a-z=0x01-0x1a 等) */
312
+ dispatchControl(cp) {
313
+ if (cp === 0x0d || cp === 0x0a) {
314
+ this.emitKey('enter', { ...NO_MODS }, 'press');
315
+ return;
316
+ }
317
+ if (cp === 0x09) {
318
+ this.emitKey('tab', { ...NO_MODS }, 'press');
319
+ return;
320
+ }
321
+ if (cp === 0x7f) {
322
+ this.emitKey('backspace', { ...NO_MODS }, 'press');
323
+ return;
324
+ }
325
+ if (cp === 0x00) {
326
+ this.emitKey('space', { ...NO_MODS, ctrl: true }, 'press');
327
+ return;
328
+ }
329
+ if (cp >= 0x01 && cp <= 0x1a) {
330
+ // ctrl+字母:0x01=a … 0x1a=z(0x08=h/0x09=i/0x0d=m 由上优先拦走)
331
+ this.emitKey(String.fromCharCode(cp + 96), { ...NO_MODS, ctrl: true }, 'press');
332
+ return;
333
+ }
334
+ if (cp >= 0x1c && cp <= 0x1f) {
335
+ // ctrl+标点(kitty 表:\ ] ^ _)
336
+ this.emitKey(String.fromCharCode(cp + 64), { ...NO_MODS, ctrl: true }, 'press');
337
+ return;
338
+ }
339
+ // 其余 C0(0x1b 已在状态机先行):吞
340
+ }
341
+ /** CSI 整序派发(params 含私用标记;final 为终点字节) */
342
+ dispatchCsi(params, final) {
343
+ // 私用标记 '?' 开头 = 终端应答(探测/DA1)——协议面处理,绝不误当按键
344
+ if (params.startsWith('?')) {
345
+ if (final === 'u') {
346
+ this.kittyAnswered = true;
347
+ if (!this.protocolReported) {
348
+ this.protocolReported = true;
349
+ this.onProtocol?.('kitty');
350
+ }
351
+ }
352
+ else if (final === 'c') {
353
+ // DA1 应答:kitty 应答从未到 → legacy 落定
354
+ if (!this.protocolReported) {
355
+ this.protocolReported = true;
356
+ this.onProtocol?.(this.kittyAnswered ? 'kitty' : 'legacy');
357
+ }
358
+ }
359
+ return; // 其余私用应答(CPR 等)吞
360
+ }
361
+ if (params.startsWith('<')) {
362
+ // SGR 1006 鼠标报文(私用标记 '<' 引导)——协议面处理,绝不误当按键
363
+ this.decodeSgrMouse(params.slice(1), final);
364
+ return;
365
+ }
366
+ if (params === '' && final === 'M') {
367
+ // bare CSI M = X10 形起手(LETTER_KEYS 无 M 键——此形不与功能键冲突):
368
+ // 开了 1006 的会话里 X10 形到达 ⟺ 终端无 SGR 能力——首达上报降级信号
369
+ // (一次性),后三字节转吞态整吞
370
+ if (!this.mouseLegacyReported) {
371
+ this.mouseLegacyReported = true;
372
+ this.onMouseLegacy?.();
373
+ }
374
+ this.mode = 'mouse-x10';
375
+ this.mouseX10Remain = 3;
376
+ return;
377
+ }
378
+ if (final === 'u') {
379
+ this.dispatchKittyKey(params);
380
+ return;
381
+ }
382
+ if (final === '~') {
383
+ this.dispatchTilde(params);
384
+ return;
385
+ }
386
+ if (final === 'Z') {
387
+ this.emitKey('tab', { ...NO_MODS, shift: true }, 'press');
388
+ return;
389
+ }
390
+ if (final === 'R') {
391
+ return; // 光标位置报告应答形状——吞(引擎从不请求,防串扰误键)
392
+ }
393
+ if (final === 'I' || final === 'O') {
394
+ return; // 焦点进出通知——吞(v1 不消费)
395
+ }
396
+ const letterKey = LETTER_KEYS[final];
397
+ if (letterKey) {
398
+ // CSI A/B/C/D/H/F/P-S(`CSI 1;mods C` 修饰形同表)
399
+ const parts = params.split(';');
400
+ this.emitKey(letterKey, decodeMods(parts[1]), 'press');
401
+ return;
402
+ }
403
+ // 未知序列:吞(fail-silent——协议噪音吸收,不出垃圾文本)
404
+ }
405
+ /** CSI number[;mods] ~ 功能键派发(200/201 粘贴包裹由 paste 态接管) */
406
+ dispatchTilde(params) {
407
+ const parts = params.split(';');
408
+ if (parts[0] === '200') {
409
+ // bracketed paste 开始:转粘贴体积攒态
410
+ this.mode = 'paste';
411
+ this.pasteBuf = '';
412
+ return;
413
+ }
414
+ if (parts[0] === '201') {
415
+ return; // 裸包裹尾(无开始)——吞
416
+ }
417
+ const key = TILDE_KEYS[Number(parts[0])];
418
+ if (key)
419
+ this.emitKey(key, decodeMods(parts[1]), 'press');
420
+ }
421
+ /**
422
+ * SGR 1006 鼠标报文派发:`CSI < Cb;Cx;Cy M/m`(M = 按压/按住拖动、m = 释放)。
423
+ *
424
+ * - Cb 位域:低两位 = 按钮号(0 左/1 中/2 右;3 无按钮);4=shift / 8=alt /
425
+ * 16=ctrl;32=按住 motion;64 帽位 = 轮系(+0 上/+1 下;+2/+3 = 66/67
426
+ * 水平滚轮左右);128 位 = 扩展按钮 8-11(线值 128-131)。
427
+ * - v1 语义面收窄五钮(left/middle/right/wheel-up/wheel-down):66/67 与
428
+ * 128-131 线值整序吞不产事件;线值 8-11 是 alt 系修饰组合(8=alt+左键
429
+ * 等),位域拆解后照常还原,绝不入吞清单。
430
+ * - 坐标 1 基 → 0 基(types 契约单源 0 基);wheel 无 release(终端不报,
431
+ * 滚轮以 press 一相到达);SGR 位域无 meta 位,meta 恒 false。
432
+ * - 非法参数(NaN/坐标越 0 基界)fail-closed 整序吞。
433
+ */
434
+ decodeSgrMouse(params, final) {
435
+ if (final !== 'M' && final !== 'm')
436
+ return; // SGR 鼠标只有 M/m 终点——余吞
437
+ const fields = params.split(';');
438
+ const cb = Number(fields[0]);
439
+ const cx = Number(fields[1]);
440
+ const cy = Number(fields[2]);
441
+ if (!Number.isInteger(cb) || !Number.isInteger(cx) || !Number.isInteger(cy))
442
+ return;
443
+ const col = cx - 1;
444
+ const row = cy - 1;
445
+ if (col < 0 || row < 0)
446
+ return;
447
+ const low = cb & 3;
448
+ let button;
449
+ if (cb & 64) {
450
+ if (low === 0)
451
+ button = 'wheel-up';
452
+ else if (low === 1)
453
+ button = 'wheel-down';
454
+ else
455
+ return; // 66/67 水平滚轮——v1 收窄面外,整序吞
456
+ }
457
+ else if (cb & 128) {
458
+ return; // 128-131 扩展按钮 8-11——v1 收窄面外,整序吞
459
+ }
460
+ else if (low === 0)
461
+ button = 'left';
462
+ else if (low === 1)
463
+ button = 'middle';
464
+ else if (low === 2)
465
+ button = 'right';
466
+ else
467
+ return; // 低两位 3 = 无按钮(X10 遗迹/1003 any-motion 形)——不可归因,吞
468
+ const phase = final === 'm' ? 'release' : cb & 32 ? 'motion' : 'press';
469
+ this.queue.push({
470
+ kind: 'mouse',
471
+ phase,
472
+ button,
473
+ col,
474
+ row,
475
+ ctrl: (cb & 16) !== 0,
476
+ alt: (cb & 8) !== 0,
477
+ shift: (cb & 4) !== 0,
478
+ meta: false, // SGR 位域无 meta 位——模型面恒 false(types 契约注记)
479
+ });
480
+ }
481
+ /**
482
+ * kitty CSI u 全形派发:
483
+ * `CSI key[:交替键] ; 修饰[:事件型] ; 文本码点 u`
484
+ */
485
+ dispatchKittyKey(params) {
486
+ const fields = params.split(';');
487
+ const keyParts = (fields[0] ?? '').split(':');
488
+ const keyCode = Number(keyParts[0]);
489
+ if (!Number.isFinite(keyCode))
490
+ return;
491
+ // 修饰子域:值 = 1+位域;冒号后缀 = 事件型(1 press 缺省/2 repeat/3 release)
492
+ const modParts = (fields[1] ?? '').split(':');
493
+ const mods = decodeMods(modParts[0]);
494
+ const phase = decodePhase(modParts.length > 1 ? Number(modParts[1]) : 1);
495
+ // 文本子域:冒号分隔码点列表。码点界检(fail-closed):String.fromCodePoint
496
+ // 对越界/负值/NaN 抛 RangeError——未捕获即杀整进程;Number(' ')===0 静默产
497
+ // NUL。kitty 文本子域结构上只该是 1..0x10FFFF 整数码点,非法子域丢弃
498
+ // (全弃后 keyCode 0 无文本 → 整事件吞——fail-closed,键名码点界检同尺)
499
+ const text = (fields[2] ?? '')
500
+ .split(':')
501
+ .filter((s) => s.length > 0)
502
+ .map((s) => Number(s))
503
+ .filter((n) => Number.isInteger(n) && n >= 1 && n <= 0x10ffff)
504
+ .map((n) => String.fromCodePoint(n))
505
+ .join('');
506
+ // IME/文本优先裁决:key 0 纯文本事件(终端拿不到键信息 = OS/IME 组装)
507
+ if (keyCode === 0 && text.length > 0) {
508
+ this.dispatchImeText(text);
509
+ return;
510
+ }
511
+ const keyName = this.kittyKeyName(keyCode);
512
+ if (keyName === undefined) {
513
+ // 未知键号:带文本则按提交交付,否则吞
514
+ if (text.length > 0)
515
+ this.dispatchImeText(text);
516
+ return;
517
+ }
518
+ if (text.length > 0) {
519
+ // 文本字段在场:与键符一致(大小写不敏感)= 普通打字 → text 事件;
520
+ // 不一致 = 死键/组合变换文本 → IME 提交路径
521
+ const plain = text.length === 1 && text.toLowerCase() === keyName.toLowerCase();
522
+ if (plain) {
523
+ this.flushImeOnInterrupt();
524
+ this.queue.push({ kind: 'text', text });
525
+ return;
526
+ }
527
+ this.dispatchImeText(text);
528
+ return;
529
+ }
530
+ this.emitKey(keyName, mods, phase);
531
+ }
532
+ /** kitty 键号 → 规范键名(功能键表 + 可打印码点直映) */
533
+ kittyKeyName(keyCode) {
534
+ if (keyCode === 27)
535
+ return 'escape';
536
+ if (keyCode === 13)
537
+ return 'enter';
538
+ if (keyCode === 9)
539
+ return 'tab';
540
+ if (keyCode === 127)
541
+ return 'backspace';
542
+ const pua = KITTY_PUA_KEYS[keyCode];
543
+ if (pua)
544
+ return pua;
545
+ if (keyCode >= 0x20 && keyCode <= 0x10ffff) {
546
+ const ch = String.fromCodePoint(keyCode);
547
+ if (ch >= ' ')
548
+ return ch; // 可打印(无 shift 修饰原形——kitty 恒小写规范)
549
+ }
550
+ return undefined;
551
+ }
552
+ /**
553
+ * IME 文本事件裁决(组字态机):
554
+ * - 组字 session 在途:新文本严格扩展挂起预编辑 → 组字中(不落正文,仅供
555
+ * 预编辑渲染);不扩展 → 冲刷为提交。
556
+ * - 无 session:主流终端 CSI 0 只送单发提交 → **立即交付零延迟**。跟随窗内
557
+ * 再来一发且与前发构成前缀链 → 判流式预编辑终端:回溯开 session(前发已
558
+ * 交付不可撤——流式首块漏判是本设计的已知边界,注释在案),本发转组字中。
559
+ */
560
+ dispatchImeText(text) {
561
+ if (this.preedit !== null && text.length > this.preedit.length && text.startsWith(this.preedit)) {
562
+ this.preedit = text;
563
+ this.queue.push({ kind: 'ime', text, committed: false });
564
+ return;
565
+ }
566
+ // 无 session:跟随窗内前缀链 → 流式预编辑终端,回溯开 session
567
+ const last = this.lastCsi0;
568
+ if (this.preedit === null &&
569
+ last !== null &&
570
+ this.now() - last.at <= IME_FOLLOW_WINDOW_MS &&
571
+ (text.startsWith(last.text) || last.text.startsWith(text)) &&
572
+ text !== last.text) {
573
+ this.preedit = text;
574
+ this.queue.push({ kind: 'ime', text, committed: false });
575
+ this.lastCsi0 = { text, at: this.now() };
576
+ return;
577
+ }
578
+ this.preedit = null;
579
+ this.lastCsi0 = { text, at: this.now() };
580
+ this.queue.push({ kind: 'ime', text, committed: true });
581
+ }
582
+ /**
583
+ * 粘贴体防护帽:超帽强制冲刷并转吸收态(畸形流不锁死键盘)。冲刷后入吸收
584
+ * 态吞残余到真终界 PASTE_END——残余粘贴体按地面态重解会伪造命令行事件。
585
+ */
586
+ enforcePasteCap() {
587
+ if (this.pasteBuf.length > PASTE_CAP) {
588
+ const text = this.pasteBuf;
589
+ this.pasteBuf = '';
590
+ this.pendingPasteTail = ''; // 悬置尾同弃(已离粘贴态——半截终界无意义)
591
+ this.mode = 'paste-drain';
592
+ if (text.length > 0)
593
+ this.queue.push({ kind: 'paste', text });
594
+ }
595
+ }
596
+ }
597
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../../../../../src/channels/engine/input.ts"],"names":[],"mappings":"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"}