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.
- package/README.md +78 -0
- package/dist/packages/berry-agent-sdk/src/client.d.ts +6 -0
- package/dist/packages/berry-agent-sdk/src/client.js +59 -0
- package/dist/packages/berry-agent-sdk/src/client.js.map +1 -0
- package/dist/packages/berry-agent-sdk/src/http.d.ts +24 -0
- package/dist/packages/berry-agent-sdk/src/http.js +232 -0
- package/dist/packages/berry-agent-sdk/src/http.js.map +1 -0
- package/dist/packages/berry-agent-sdk/src/index.d.ts +25 -0
- package/dist/packages/berry-agent-sdk/src/index.js +22 -0
- package/dist/packages/berry-agent-sdk/src/index.js.map +1 -0
- package/dist/packages/berry-agent-sdk/src/stdio.d.ts +23 -0
- package/dist/packages/berry-agent-sdk/src/stdio.js +238 -0
- package/dist/packages/berry-agent-sdk/src/stdio.js.map +1 -0
- package/dist/packages/berry-agent-sdk/src/types.d.ts +117 -0
- package/dist/packages/berry-agent-sdk/src/types.js +19 -0
- package/dist/packages/berry-agent-sdk/src/types.js.map +1 -0
- package/dist/src/agent/events.d.ts +11 -0
- package/dist/src/agent/events.js +2 -0
- package/dist/src/agent/events.js.map +1 -0
- package/dist/src/agent/index.d.ts +13 -0
- package/dist/src/agent/index.js +3 -0
- package/dist/src/agent/index.js.map +1 -0
- package/dist/src/agent/loop.d.ts +19 -0
- package/dist/src/agent/loop.js +140 -0
- package/dist/src/agent/loop.js.map +1 -0
- package/dist/src/agent/queue.d.ts +105 -0
- package/dist/src/agent/queue.js +120 -0
- package/dist/src/agent/queue.js.map +1 -0
- package/dist/src/agent/stream.d.ts +21 -0
- package/dist/src/agent/stream.js +80 -0
- package/dist/src/agent/stream.js.map +1 -0
- package/dist/src/agent/tools-batch.d.ts +49 -0
- package/dist/src/agent/tools-batch.js +222 -0
- package/dist/src/agent/tools-batch.js.map +1 -0
- package/dist/src/agent/types.d.ts +104 -0
- package/dist/src/agent/types.js +9 -0
- package/dist/src/agent/types.js.map +1 -0
- package/dist/src/channels/ask-queue.d.ts +44 -0
- package/dist/src/channels/ask-queue.js +83 -0
- package/dist/src/channels/ask-queue.js.map +1 -0
- package/dist/src/channels/commands.d.ts +56 -0
- package/dist/src/channels/commands.js +130 -0
- package/dist/src/channels/commands.js.map +1 -0
- package/dist/src/channels/engine/cell.d.ts +55 -0
- package/dist/src/channels/engine/cell.js +144 -0
- package/dist/src/channels/engine/cell.js.map +1 -0
- package/dist/src/channels/engine/diff.d.ts +3 -0
- package/dist/src/channels/engine/diff.js +144 -0
- package/dist/src/channels/engine/diff.js.map +1 -0
- package/dist/src/channels/engine/engine.d.ts +151 -0
- package/dist/src/channels/engine/engine.js +417 -0
- package/dist/src/channels/engine/engine.js.map +1 -0
- package/dist/src/channels/engine/index.d.ts +22 -0
- package/dist/src/channels/engine/index.js +9 -0
- package/dist/src/channels/engine/index.js.map +1 -0
- package/dist/src/channels/engine/input-keys.d.ts +39 -0
- package/dist/src/channels/engine/input-keys.js +87 -0
- package/dist/src/channels/engine/input-keys.js.map +1 -0
- package/dist/src/channels/engine/input.d.ts +174 -0
- package/dist/src/channels/engine/input.js +597 -0
- package/dist/src/channels/engine/input.js.map +1 -0
- package/dist/src/channels/engine/memory-io.d.ts +46 -0
- package/dist/src/channels/engine/memory-io.js +72 -0
- package/dist/src/channels/engine/memory-io.js.map +1 -0
- package/dist/src/channels/engine/process-io.d.ts +23 -0
- package/dist/src/channels/engine/process-io.js +39 -0
- package/dist/src/channels/engine/process-io.js.map +1 -0
- package/dist/src/channels/engine/types.d.ts +202 -0
- package/dist/src/channels/engine/types.js +18 -0
- package/dist/src/channels/engine/types.js.map +1 -0
- package/dist/src/channels/engine/width.d.ts +23 -0
- package/dist/src/channels/engine/width.js +123 -0
- package/dist/src/channels/engine/width.js.map +1 -0
- package/dist/src/channels/index.d.ts +25 -0
- package/dist/src/channels/index.js +16 -0
- package/dist/src/channels/index.js.map +1 -0
- package/dist/src/channels/registry.d.ts +33 -0
- package/dist/src/channels/registry.js +57 -0
- package/dist/src/channels/registry.js.map +1 -0
- package/dist/src/channels/sdk/admit.d.ts +32 -0
- package/dist/src/channels/sdk/admit.js +30 -0
- package/dist/src/channels/sdk/admit.js.map +1 -0
- package/dist/src/channels/sdk/backend.d.ts +19 -0
- package/dist/src/channels/sdk/backend.js +103 -0
- package/dist/src/channels/sdk/backend.js.map +1 -0
- package/dist/src/channels/sdk/cursor.d.ts +51 -0
- package/dist/src/channels/sdk/cursor.js +57 -0
- package/dist/src/channels/sdk/cursor.js.map +1 -0
- package/dist/src/channels/sdk/index.d.ts +20 -0
- package/dist/src/channels/sdk/index.js +21 -0
- package/dist/src/channels/sdk/index.js.map +1 -0
- package/dist/src/channels/sdk/jsonl.d.ts +47 -0
- package/dist/src/channels/sdk/jsonl.js +201 -0
- package/dist/src/channels/sdk/jsonl.js.map +1 -0
- package/dist/src/channels/sdk/protocol.d.ts +297 -0
- package/dist/src/channels/sdk/protocol.js +25 -0
- package/dist/src/channels/sdk/protocol.js.map +1 -0
- package/dist/src/channels/sdk/schema.d.ts +12 -0
- package/dist/src/channels/sdk/schema.js +92 -0
- package/dist/src/channels/sdk/schema.js.map +1 -0
- package/dist/src/channels/sdk/wire-core.d.ts +199 -0
- package/dist/src/channels/sdk/wire-core.js +447 -0
- package/dist/src/channels/sdk/wire-core.js.map +1 -0
- package/dist/src/channels/service.d.ts +66 -0
- package/dist/src/channels/service.js +170 -0
- package/dist/src/channels/service.js.map +1 -0
- package/dist/src/channels/tui/autocomplete/autocomplete.d.ts +32 -0
- package/dist/src/channels/tui/autocomplete/autocomplete.js +43 -0
- package/dist/src/channels/tui/autocomplete/autocomplete.js.map +1 -0
- package/dist/src/channels/tui/autocomplete/file-mentions.d.ts +18 -0
- package/dist/src/channels/tui/autocomplete/file-mentions.js +107 -0
- package/dist/src/channels/tui/autocomplete/file-mentions.js.map +1 -0
- package/dist/src/channels/tui/autocomplete/popup.d.ts +47 -0
- package/dist/src/channels/tui/autocomplete/popup.js +149 -0
- package/dist/src/channels/tui/autocomplete/popup.js.map +1 -0
- package/dist/src/channels/tui/autocomplete/provider.d.ts +38 -0
- package/dist/src/channels/tui/autocomplete/provider.js +8 -0
- package/dist/src/channels/tui/autocomplete/provider.js.map +1 -0
- package/dist/src/channels/tui/autocomplete/token.d.ts +22 -0
- package/dist/src/channels/tui/autocomplete/token.js +69 -0
- package/dist/src/channels/tui/autocomplete/token.js.map +1 -0
- package/dist/src/channels/tui/backend/ansi-rows.d.ts +86 -0
- package/dist/src/channels/tui/backend/ansi-rows.js +209 -0
- package/dist/src/channels/tui/backend/ansi-rows.js.map +1 -0
- package/dist/src/channels/tui/backend/main-screen.d.ts +90 -0
- package/dist/src/channels/tui/backend/main-screen.js +208 -0
- package/dist/src/channels/tui/backend/main-screen.js.map +1 -0
- package/dist/src/channels/tui/backend/osc.d.ts +79 -0
- package/dist/src/channels/tui/backend/osc.js +92 -0
- package/dist/src/channels/tui/backend/osc.js.map +1 -0
- package/dist/src/channels/tui/backend/transcript.d.ts +98 -0
- package/dist/src/channels/tui/backend/transcript.js +231 -0
- package/dist/src/channels/tui/backend/transcript.js.map +1 -0
- package/dist/src/channels/tui/backend/tui-backend.d.ts +324 -0
- package/dist/src/channels/tui/backend/tui-backend.js +916 -0
- package/dist/src/channels/tui/backend/tui-backend.js.map +1 -0
- package/dist/src/channels/tui/editor/editor-model.d.ts +141 -0
- package/dist/src/channels/tui/editor/editor-model.js +544 -0
- package/dist/src/channels/tui/editor/editor-model.js.map +1 -0
- package/dist/src/channels/tui/editor/editor-view.d.ts +36 -0
- package/dist/src/channels/tui/editor/editor-view.js +141 -0
- package/dist/src/channels/tui/editor/editor-view.js.map +1 -0
- package/dist/src/channels/tui/editor/editor.d.ts +50 -0
- package/dist/src/channels/tui/editor/editor.js +276 -0
- package/dist/src/channels/tui/editor/editor.js.map +1 -0
- package/dist/src/channels/tui/editor/undo-stack.d.ts +22 -0
- package/dist/src/channels/tui/editor/undo-stack.js +36 -0
- package/dist/src/channels/tui/editor/undo-stack.js.map +1 -0
- package/dist/src/channels/tui/editor/visual-lines.d.ts +39 -0
- package/dist/src/channels/tui/editor/visual-lines.js +127 -0
- package/dist/src/channels/tui/editor/visual-lines.js.map +1 -0
- package/dist/src/channels/tui/editor/word-nav.d.ts +10 -0
- package/dist/src/channels/tui/editor/word-nav.js +107 -0
- package/dist/src/channels/tui/editor/word-nav.js.map +1 -0
- package/dist/src/channels/tui/history/history-viewer.d.ts +133 -0
- package/dist/src/channels/tui/history/history-viewer.js +404 -0
- package/dist/src/channels/tui/history/history-viewer.js.map +1 -0
- package/dist/src/channels/tui/index.d.ts +16 -0
- package/dist/src/channels/tui/index.js +4 -0
- package/dist/src/channels/tui/index.js.map +1 -0
- package/dist/src/channels/tui/markdown/blocks.d.ts +42 -0
- package/dist/src/channels/tui/markdown/blocks.js +112 -0
- package/dist/src/channels/tui/markdown/blocks.js.map +1 -0
- package/dist/src/channels/tui/markdown/inline.d.ts +24 -0
- package/dist/src/channels/tui/markdown/inline.js +76 -0
- package/dist/src/channels/tui/markdown/inline.js.map +1 -0
- package/dist/src/channels/tui/markdown/markdown.d.ts +34 -0
- package/dist/src/channels/tui/markdown/markdown.js +183 -0
- package/dist/src/channels/tui/markdown/markdown.js.map +1 -0
- package/dist/src/channels/tui/memory/memory-viewer.d.ts +235 -0
- package/dist/src/channels/tui/memory/memory-viewer.js +541 -0
- package/dist/src/channels/tui/memory/memory-viewer.js.map +1 -0
- package/dist/src/channels/tui/overlay/alt-screen.d.ts +79 -0
- package/dist/src/channels/tui/overlay/alt-screen.js +106 -0
- package/dist/src/channels/tui/overlay/alt-screen.js.map +1 -0
- package/dist/src/channels/tui/overlay/overlay.d.ts +53 -0
- package/dist/src/channels/tui/overlay/overlay.js +58 -0
- package/dist/src/channels/tui/overlay/overlay.js.map +1 -0
- package/dist/src/channels/tui/overlay/select-confirm.d.ts +73 -0
- package/dist/src/channels/tui/overlay/select-confirm.js +157 -0
- package/dist/src/channels/tui/overlay/select-confirm.js.map +1 -0
- package/dist/src/channels/tui/panels/todo-panel.d.ts +24 -0
- package/dist/src/channels/tui/panels/todo-panel.js +55 -0
- package/dist/src/channels/tui/panels/todo-panel.js.map +1 -0
- package/dist/src/channels/tui/panels/tool-progress-panel.d.ts +37 -0
- package/dist/src/channels/tui/panels/tool-progress-panel.js +94 -0
- package/dist/src/channels/tui/panels/tool-progress-panel.js.map +1 -0
- package/dist/src/channels/tui/scroll/scroll-view.d.ts +96 -0
- package/dist/src/channels/tui/scroll/scroll-view.js +255 -0
- package/dist/src/channels/tui/scroll/scroll-view.js.map +1 -0
- package/dist/src/channels/tui/status/status-line.d.ts +46 -0
- package/dist/src/channels/tui/status/status-line.js +77 -0
- package/dist/src/channels/tui/status/status-line.js.map +1 -0
- package/dist/src/channels/tui/theme.d.ts +27 -0
- package/dist/src/channels/tui/theme.js +42 -0
- package/dist/src/channels/tui/theme.js.map +1 -0
- package/dist/src/channels/types.d.ts +84 -0
- package/dist/src/channels/types.js +12 -0
- package/dist/src/channels/types.js.map +1 -0
- package/dist/src/channels/ui-core.d.ts +80 -0
- package/dist/src/channels/ui-core.js +210 -0
- package/dist/src/channels/ui-core.js.map +1 -0
- package/dist/src/context/codes.d.ts +1 -0
- package/dist/src/context/codes.js +41 -0
- package/dist/src/context/codes.js.map +1 -0
- package/dist/src/context/events.d.ts +62 -0
- package/dist/src/context/events.js +161 -0
- package/dist/src/context/events.js.map +1 -0
- package/dist/src/context/index.d.ts +16 -0
- package/dist/src/context/index.js +14 -0
- package/dist/src/context/index.js.map +1 -0
- package/dist/src/context/logger.d.ts +67 -0
- package/dist/src/context/logger.js +137 -0
- package/dist/src/context/logger.js.map +1 -0
- package/dist/src/context/scope.d.ts +78 -0
- package/dist/src/context/scope.js +183 -0
- package/dist/src/context/scope.js.map +1 -0
- package/dist/src/context/workspace.d.ts +8 -0
- package/dist/src/context/workspace.js +105 -0
- package/dist/src/context/workspace.js.map +1 -0
- package/dist/src/contracts/agent-events.d.ts +73 -0
- package/dist/src/contracts/agent-events.js +17 -0
- package/dist/src/contracts/agent-events.js.map +1 -0
- package/dist/src/contracts/api.d.ts +249 -0
- package/dist/src/contracts/api.js +334 -0
- package/dist/src/contracts/api.js.map +1 -0
- package/dist/src/contracts/approval.d.ts +37 -0
- package/dist/src/contracts/approval.js +10 -0
- package/dist/src/contracts/approval.js.map +1 -0
- package/dist/src/contracts/env-ref.d.ts +41 -0
- package/dist/src/contracts/env-ref.js +33 -0
- package/dist/src/contracts/env-ref.js.map +1 -0
- package/dist/src/contracts/errors.d.ts +56 -0
- package/dist/src/contracts/errors.js +267 -0
- package/dist/src/contracts/errors.js.map +1 -0
- package/dist/src/contracts/events.d.ts +70 -0
- package/dist/src/contracts/events.js +330 -0
- package/dist/src/contracts/events.js.map +1 -0
- package/dist/src/contracts/index.d.ts +32 -0
- package/dist/src/contracts/index.js +27 -0
- package/dist/src/contracts/index.js.map +1 -0
- package/dist/src/contracts/llm.d.ts +278 -0
- package/dist/src/contracts/llm.js +13 -0
- package/dist/src/contracts/llm.js.map +1 -0
- package/dist/src/contracts/messages.d.ts +63 -0
- package/dist/src/contracts/messages.js +66 -0
- package/dist/src/contracts/messages.js.map +1 -0
- package/dist/src/contracts/redact.d.ts +46 -0
- package/dist/src/contracts/redact.js +224 -0
- package/dist/src/contracts/redact.js.map +1 -0
- package/dist/src/contracts/tools.d.ts +198 -0
- package/dist/src/contracts/tools.js +35 -0
- package/dist/src/contracts/tools.js.map +1 -0
- package/dist/src/contracts/types.d.ts +304 -0
- package/dist/src/contracts/types.js +51 -0
- package/dist/src/contracts/types.js.map +1 -0
- package/dist/src/contracts/ui.d.ts +122 -0
- package/dist/src/contracts/ui.js +16 -0
- package/dist/src/contracts/ui.js.map +1 -0
- package/dist/src/sdk/types.d.ts +144 -0
- package/dist/src/sdk/types.js +33 -0
- package/dist/src/sdk/types.js.map +1 -0
- 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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"}
|