@xiaoqiong0v0/opencode-ssh-tool 0.6.12 → 0.6.15

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 (45) hide show
  1. package/README.md +4 -1
  2. package/dist/agent.d.ts +2 -2
  3. package/dist/agent.d.ts.map +1 -1
  4. package/dist/agent.js +80 -21
  5. package/dist/agent.js.map +1 -1
  6. package/dist/base-session.d.ts +138 -25
  7. package/dist/base-session.d.ts.map +1 -1
  8. package/dist/base-session.js +485 -181
  9. package/dist/base-session.js.map +1 -1
  10. package/dist/constants.d.ts +41 -1
  11. package/dist/constants.d.ts.map +1 -1
  12. package/dist/constants.js +42 -1
  13. package/dist/constants.js.map +1 -1
  14. package/dist/i18n.d.ts +16 -0
  15. package/dist/i18n.d.ts.map +1 -1
  16. package/dist/i18n.js +13 -0
  17. package/dist/i18n.js.map +1 -1
  18. package/dist/local-session.d.ts.map +1 -1
  19. package/dist/local-session.js +2 -0
  20. package/dist/local-session.js.map +1 -1
  21. package/dist/server-entry.js +25 -15
  22. package/dist/server-entry.js.map +1 -1
  23. package/dist/server.d.ts +6 -0
  24. package/dist/server.d.ts.map +1 -1
  25. package/dist/server.js +235 -21
  26. package/dist/server.js.map +1 -1
  27. package/dist/session-store.d.ts +35 -0
  28. package/dist/session-store.d.ts.map +1 -1
  29. package/dist/session-store.js +98 -3
  30. package/dist/session-store.js.map +1 -1
  31. package/dist/session.d.ts.map +1 -1
  32. package/dist/session.js +2 -0
  33. package/dist/session.js.map +1 -1
  34. package/dist/shell-adapter.d.ts +13 -4
  35. package/dist/shell-adapter.d.ts.map +1 -1
  36. package/dist/shell-adapter.js +23 -17
  37. package/dist/shell-adapter.js.map +1 -1
  38. package/dist/utils.d.ts +55 -1
  39. package/dist/utils.d.ts.map +1 -1
  40. package/dist/utils.js +248 -27
  41. package/dist/utils.js.map +1 -1
  42. package/dist/web/app.css +4 -0
  43. package/dist/web/app.js +10 -10
  44. package/dist/web/index.html +1 -0
  45. package/package.json +1 -1
package/dist/utils.js CHANGED
@@ -14,53 +14,178 @@ const escRe = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
14
14
  const ECHO_WIDE = `(?:${ANSI_SEQ_PATTERN}|[ \\t\\r\\n])*`;
15
15
  /** 行尾 ANSI 容忍串(命令回显行尾可能残留光标定位/模式序列),与 ECHO_WIDE 共用同一模式源 */
16
16
  const TAIL_ANSI = `(?:${ANSI_SEQ_PATTERN})*`;
17
+ /** 回显行尾模式:容忍 \r 后跟 ANSI(如 bracketed paste off \x1b[?2004l)再换行,或直接 \n/字符串末尾 */
18
+ const LINE_END = "(?:(?:\\r?" + TAIL_ANSI + ")\\r?\\n|\\r?$)";
19
+ /** 段间匹配:容忍任意行(prompt、输出行等)直到下一段命令,再用 ECHO_WIDE 收紧命令字符间隙 */
20
+ const ECHO_BETWEEN = "[\\s\\S]*?";
21
+ /**
22
+ * 生成"单行命令回显"的逐字符宽松模式:
23
+ * 字符间容忍 ANSI/空白间隙,并在折行处容忍 readline 重复前一个字符
24
+ * (超宽命令回显会多出边界字符,如 `...libayatan\r\n\x1b[39;120Hna-...`,精确匹配会失败)。
25
+ * @param line 单行命令回显文本
26
+ * @returns 该行的宽松匹配模式片段
27
+ */
28
+ function echoLinePattern(line) {
29
+ const frags = [...line].map((c) => (c === "\x1b" ? "(?:\\x1b|\\\\033)" : escRe(c)));
30
+ const gap = (prev) => ECHO_WIDE + "(?:\\r?\\n" + TAIL_ANSI + prev + ECHO_WIDE + ")?";
31
+ let out = frags[0] ?? "";
32
+ for (let i = 1; i < frags.length; i++)
33
+ out += gap(frags[i - 1]) + frags[i];
34
+ return out + TAIL_ANSI + "[^\\r\\n]*";
35
+ }
36
+ /**
37
+ * 回显正则的命令长度阈值(字符):逐字符插 gap 会让模式源长约 265×命令长度——
38
+ * 4434 字符命令会生成约 1.1MB 模式,在 JavaScriptCore(opencode 运行时)下 `new RegExp` 直接抛
39
+ * "Invalid regular expression: regular expression too large"(V8 尚可容忍)。超过此阈值即降级。
40
+ * 取 512:全量模式源约 136KB,远低于已知 JSC 可接受的量级(814 字符命令→215KB 实测可用)。
41
+ */
42
+ export const ECHO_REGEX_MAX_CMD_CHARS = 512;
43
+ /** 降级时首/尾各取的锚点字符数(够区分且模式源约 265×2×64≈34KB) */
44
+ const ECHO_ANCHOR_CHARS = 64;
45
+ /**
46
+ * 逐字符宽松正则的**输入扫描上界**(字符):该正则的字符间间隙量词可嵌套
47
+ * (`(?:ANSI|空白)*` 叠加折行容忍),在长且不匹配的输入上会发生灾难性回溯
48
+ * (实测脏窗口 14KB 上 >15s;8KB 上 57ms 返回)。
49
+ * 由于回显总在窗口起点附近、且下方压缩线性匹配已先行处理常规场景,正则路径只需扫描有界前缀。
50
+ */
51
+ const ECHO_SCAN_BOUND = 8192;
52
+ /**
53
+ * 构建"去 ANSI + 压空白"的线性回显定位所需结构:
54
+ * 逐字符保留可见字符,跳过 ANSI 转义序列与所有空白,并记录每个保留字符在原文中的偏移。
55
+ * 用途:长命令回显常被 ConPTY 折行(插入 `\r\n`)与语法高亮(字符间插 ANSI)切碎,
56
+ * 压缩后两端恢复成**连续可见文本**,可用 indexOf 线性定位(免疫逐字符间隙正则的病态回溯)。
57
+ * @param s 原文(可含 ANSI 与换行)
58
+ * @returns text=压缩后的连续文本;idx[k]=text[k] 在原文中的偏移
59
+ */
60
+ function compressForEcho(s) {
61
+ const re = new RegExp(ANSI_SEQ_PATTERN, "y");
62
+ const chars = [];
63
+ const idx = [];
64
+ let i = 0;
65
+ while (i < s.length) {
66
+ re.lastIndex = i;
67
+ const m = re.exec(s);
68
+ if (m && m.index === i && m[0].length > 0) {
69
+ i = re.lastIndex;
70
+ continue;
71
+ }
72
+ const c = s[i];
73
+ if (!/\s/.test(c)) {
74
+ chars.push(c);
75
+ idx.push(i);
76
+ }
77
+ i++;
78
+ }
79
+ return { text: chars.join(""), idx };
80
+ }
81
+ /**
82
+ * 压缩线性定位:在"压空白+去 ANSI"后的文本里找命令回显,命中则返回其在**原文**中结束后的偏移。
83
+ * 作为 `extractOutputStart` 的首选快速路径(线性、无回溯),覆盖折行/高亮切碎的常规回显;
84
+ * 被重绘**重复字符**插入(readline 边界重画)破坏连续性的场景会未命中,交由后续有界正则/标记边界兜底。
85
+ * @param raw 原始终端流(含 ANSI)
86
+ * @param command 本次执行的命令文本(与 echo 定位同源)
87
+ * @param endBound 搜索上界(不含;末次匹配不得越过)
88
+ * @param first true 取首次匹配(语法错误路径),false 取 endBound 前最后一次
89
+ * @returns 命中:回显末尾在原文中的偏移(>0);未命中:-1
90
+ */
91
+ function compressedEchoEnd(raw, command, endBound, first) {
92
+ const cmd = command.trim();
93
+ if (!cmd)
94
+ return -1;
95
+ const echo = compressForEcho(cmd.replace(/\\033/gi, "\x1b")).text;
96
+ if (!echo)
97
+ return -1;
98
+ const { text: body, idx } = compressForEcho(raw);
99
+ // 允许的匹配结束位置上界(压缩坐标,不含):endBound 之前最后一个保留字符的下一个位置
100
+ const hiIdx = idx.findIndex((p) => p >= endBound);
101
+ const limit = hiIdx < 0 ? idx.length : hiIdx;
102
+ if (first) {
103
+ const start = body.indexOf(echo);
104
+ return start >= 0 && start + echo.length <= limit ? idx[start + echo.length - 1] + 1 : -1;
105
+ }
106
+ let start = body.lastIndexOf(echo);
107
+ while (start >= 0 && start + echo.length > limit)
108
+ start = body.lastIndexOf(echo, start - 1);
109
+ return start >= 0 ? idx[start + echo.length - 1] + 1 : -1;
110
+ }
111
+ /**
112
+ * 构造命令回显匹配的正则模式源。命令较短时用逐字符宽松模式(容忍折行/ANSI);
113
+ * 超过 ECHO_REGEX_MAX_CMD_CHARS 时降级为"首/尾各 ECHO_ANCHOR_CHARS 个字符"的锚点,
114
+ * 中间用 ECHO_BETWEEN 连通,避免模式源随命令长度线性膨胀(正则源有界,防运行时正则上限)。
115
+ * @param norm 规范化后的命令回显文本(`\033` 已还原为真实 ESC)
116
+ * @param forceFull true 强制走全量模式(仅供 echoRegexSourceLength 计算诊断长度)
117
+ * @returns 正则模式源字符串
118
+ */
119
+ function buildEchoPattern(norm, forceFull = false) {
120
+ // 单条宽松正则一次性匹配命令回显(支持多行命令):
121
+ // 1) 命令字符间容忍 ANSI 间隙(ECHO_WIDE)
122
+ // 2) 命令字面 \033 回显可能变真实 ESC(二选一)
123
+ // 3) 每段命令文本后允许任意行内字符直到行尾([^\r\n]*),兼容追加的完成标记命令
124
+ // 4) 多行命令:bash 逐行回显,行间可能夹 prompt 文本与 ANSI,用宽松段间匹配连接
125
+ if (forceFull || norm.length <= ECHO_REGEX_MAX_CMD_CHARS) {
126
+ return norm.split("\n").map(echoLinePattern).join(ECHO_BETWEEN + ECHO_WIDE) + "(?:" + LINE_END + ")";
127
+ }
128
+ // 超长降级:只逐字符宽松匹配首/尾定长锚点,中间用 [\s\S]*? 兜住(省掉中段的 ~265×N 模式膨胀)
129
+ const head = echoLinePattern(norm.slice(0, ECHO_ANCHOR_CHARS));
130
+ const tail = echoLinePattern(norm.slice(-ECHO_ANCHOR_CHARS));
131
+ return head + ECHO_BETWEEN + ECHO_WIDE + tail + "(?:" + LINE_END + ")";
132
+ }
133
+ /**
134
+ * 计算"未降级时的逐字符回显正则"模式源长度,供诊断日志展示(超长命令可直观看到 265×长度 的膨胀)。
135
+ * @param command 命令回显文本(extractOutputStart 的第二入参)
136
+ * @returns 正则模式源长度(字符);空命令返回 0
137
+ */
138
+ export function echoRegexSourceLength(command) {
139
+ const norm = command.trim().replace(/\\033/gi, "\x1b");
140
+ return norm ? buildEchoPattern(norm, true).length : 0;
141
+ }
17
142
  /**
18
143
  * 定位命令回显行在原始流中的结束位置(供流式增量定位使用):
19
144
  * 丢弃窗口开头到"命令回显行结束"之前的一切内容(提示符、PS1 填充、光标定位噪音均在内)。
20
145
  * 命令回显行 = 命令文本首次出现所在行(命令本身可能含 \033 等转义)。
21
146
  * 命令文本后允许任意行内字符直到行尾:命令可能被追加完成标记(如 `cmd ;printf '<SSH_DONE…>'`),
22
147
  * 此时回显是整行拼接,不能要求命令后紧跟换行。
148
+ * 超长命令自动降级为模式源有界的锚点匹配(见 buildEchoPattern / ECHO_REGEX_MAX_CMD_CHARS);
149
+ * `new RegExp` 若仍失败(运行时正则上限)返回 -1,由调用方按"未定位"退回整窗,绝不向上抛。
23
150
  * @param raw 原始终端流(含 ANSI)
24
151
  * @param command 本次执行的命令文本
25
152
  * @param endBound 搜索上界(不含),默认窗口末尾;末次匹配模式下用于避免后续裸命令回显把定位带偏
26
153
  * @param first true 取窗口内**首次**匹配(语法错误路径:错误块会重印含标记的整行命令,
27
154
  * 末次匹配会落到错误块内的命令拷贝上,导致错误块前半被裁掉)
28
- * @returns 命令回显结束后的字节偏移(命中必 > 0);未命中命令文本返回 -1(调用方按 `<= 0` 判定"未定位")
155
+ * @returns 命令回显结束后的字节偏移(命中必 > 0);未命中/正则失败返回 -1(调用方按 `<= 0` 判定"未定位")
29
156
  */
30
157
  export function extractOutputStart(raw, command, endBound = raw.length, first = false) {
31
158
  const cmd = command.trim();
32
159
  if (!cmd)
33
160
  return -1;
34
- // 单条宽松正则一次性匹配命令回显(支持多行命令):
35
- // 1) 命令字符间容忍 ANSI 间隙(ECHO_WIDE)
36
- // 2) 命令字面 \033 回显可能变真实 ESC(二选一)
37
- // 3) 每段命令文本后允许任意行内字符直到行尾([^\r\n]*),兼容追加的完成标记命令
38
- // 4) 多行命令:bash 逐行回显,行间可能夹 prompt 文本与 ANSI,用宽松段间匹配连接
161
+ // 首选:压缩线性定位(去 ANSI + 压空白后 indexOf)——线性、无回溯,覆盖折行/高亮切碎的常规回显
162
+ const linear = compressedEchoEnd(raw, command, endBound, first);
163
+ if (linear > 0)
164
+ return linear;
165
+ // 兜底:逐字符宽松正则(容忍 readline 边界重绘的重复字符),但**只扫描有界前缀**,
166
+ // 避免长且不匹配的输入触发灾难性回溯(见 ECHO_SCAN_BOUND)。压缩失败通常意味着窗口仍含重绘杂物,
167
+ // 此时真正可靠的是调用方的"按标记边界裁剪"兜底,此处仅再试一次即止。
168
+ const scanEnd = Math.min(endBound, raw.length, ECHO_SCAN_BOUND);
169
+ if (scanEnd <= 0)
170
+ return -1;
171
+ const scanned = raw.length > scanEnd ? raw.slice(0, scanEnd) : raw;
39
172
  const norm = cmd.replace(/\\033/gi, "\x1b");
40
- // 行尾:容忍 \r 后跟 ANSI(如 bracketed paste off \x1b[?2004l)再换行,或直接 \n/字符串末尾
41
- const LINE_END = "(?:(?:\\r?" + TAIL_ANSI + ")\\r?\\n|\\r?$)";
42
- const lineOf = (line) => {
43
- const frags = [...line].map((c) => (c === "\x1b" ? "(?:\\x1b|\\\\033)" : escRe(c)));
44
- // 字符间隙:容忍 ANSI/空白;并容忍 readline 折行重绘在折行处**重复前一个字符**
45
- // (超宽命令回显会多出边界字符,如 `...libayatan\r\n\x1b[39;120Hna-...`,精确匹配会失败)
46
- const gap = (prev) => ECHO_WIDE + "(?:\\r?\\n" + TAIL_ANSI + prev + ECHO_WIDE + ")?";
47
- let out = frags[0] ?? "";
48
- for (let i = 1; i < frags.length; i++)
49
- out += gap(frags[i - 1]) + frags[i];
50
- return out + TAIL_ANSI + "[^\\r\\n]*";
51
- };
52
- const lines = norm.split("\n");
53
- // 段间匹配:容忍任意行(prompt、输出行等)直到下一段命令,再用 ECHO_WIDE 收紧命令字符间隙
54
- const BETWEEN = "[\\s\\S]*?";
55
- const re = new RegExp(lines.map(lineOf).join(BETWEEN + ECHO_WIDE) + "(?:" + LINE_END + ")", "g");
173
+ let re;
174
+ try {
175
+ re = new RegExp(buildEchoPattern(norm), "g");
176
+ }
177
+ catch {
178
+ // 正则过大/非法(如 JSC 对超大模式抛 "regular expression too large"):视作"未定位",不向上抛
179
+ return -1;
180
+ }
56
181
  if (first) {
57
- const m = re.exec(raw);
58
- return m && m.index < endBound ? m.index + m[0].length : -1;
182
+ const m = re.exec(scanned);
183
+ return m && m.index < scanEnd ? m.index + m[0].length : -1;
59
184
  }
60
- // 取 [0, endBound) 范围内最后一次匹配:备屏退出(如 cmatrix)会重放主屏历史,
185
+ // 取 [0, scanEnd) 范围内最后一次匹配:备屏退出(如 cmatrix)会重放主屏历史,
61
186
  // 其中含旧命令回显,只有最后一次出现的回显之后才是本次命令的真实输出;
62
- // endBound 限到完成标记之前,避免连续输入时后续裸命令回显把定位带偏
63
- return findLastEndOfBefore(re, raw, 0, endBound);
187
+ // scanEnd 限到完成标记之前,避免连续输入时后续裸命令回显把定位带偏
188
+ return findLastEndOfBefore(re, scanned, 0, scanEnd);
64
189
  }
65
190
  /**
66
191
  * 剥离"提示符 + 命令回显",只保留程序纯输出:
@@ -118,6 +243,102 @@ export function stripTrailingPromptLine(out, window, promptRef) {
118
243
  }
119
244
  return out;
120
245
  }
246
+ /**
247
+ * 探针回显"单个匹配区间的跨度上限"(字符,含字符间插入的 ANSI 与空白)。
248
+ * 探针命令本身约 50 可见字符、pwsh 语法高亮插入的 SGR 约 20 → 正常跨度约 70;取 200 留足余量。
249
+ * 超限视作宽松匹配的误命中(如稀疏空白把命令字符拉开),不删——宁可留脏,不可误删。
250
+ */
251
+ export const PROBE_ECHO_MAX_SPAN = 200;
252
+ /**
253
+ * ANSI 容忍定位 needle 在 text 中的**首次**出现:允许 needle 字符之间插入 ANSI 转义序列与任意空白
254
+ * (复用"去 ANSI + 压空白"的线性匹配,免疫 shell 语法高亮在 token 间插入的 SGR)。
255
+ * 绝不用提示符做锚点(提示符随 cwd/profile/主题变化,不可锚定)。
256
+ * @param text 待搜索文本(调用方按行传入)
257
+ * @param needle 待定位文本(探针命令,含会话 nonce,天然唯一)
258
+ * @returns 命中:{start,end}(相对 text 原文偏移,end 为末个可见字符后一位);未命中:null
259
+ */
260
+ export function findAnsiTolerantFirstRange(text, needle) {
261
+ const target = compressForEcho(needle.replace(/\\033/gi, "\x1b")).text;
262
+ if (!target)
263
+ return null;
264
+ const { text: body, idx } = compressForEcho(text);
265
+ const i = body.indexOf(target);
266
+ if (i < 0)
267
+ return null;
268
+ return { start: idx[i], end: idx[i + target.length - 1] + 1 };
269
+ }
270
+ /**
271
+ * 判定一行是否"仅剩提示符"(D1 判据):剥净 ANSI、去行尾 \r 与尾空白后,与提示符基准逐字相等。
272
+ * 只认"整行恰为提示符",不放宽;基准为空串时恒 false(宁可留脏,不可误删)。
273
+ * @param line 待判定行(原始,可含 ANSI)
274
+ * @param promptRef 提示符基准(命令发起前缓冲末行,与 stripTrailingPromptLine 同源判据)
275
+ * @returns true 表示该行可见内容恰为提示符
276
+ */
277
+ export function isPromptOnlyLine(line, promptRef) {
278
+ const ref = normLine(promptRef);
279
+ return ref !== "" && normLine(line) === ref;
280
+ }
281
+ /**
282
+ * 行尾锚定的 ANSI 序列匹配:用于把删除起点**向前回退到紧邻的 ANSI 之前**。
283
+ * 只回退 ANSI 字节(不越过任何可见字符/提示符/真输出),使探针首 token 前的语法高亮色码
284
+ * 随回显一起删除,避免行中打断场景残留孤立色码污染后续输出。
285
+ */
286
+ const ANSI_AT_END = new RegExp(`(?:${ANSI_SEQ_PATTERN})$`);
287
+ /**
288
+ * 把位置 pos 向前回退,跳过紧邻其前的连续 ANSI 序列(不含可见字符)。
289
+ * @param line 行文本
290
+ * @param pos 起始位置
291
+ * @returns 回退后的位置(≥0)
292
+ */
293
+ function backOverAnsi(line, pos) {
294
+ let cut = pos;
295
+ for (;;) {
296
+ const m = line.slice(0, cut).match(ANSI_AT_END);
297
+ if (!m || m[0].length === 0)
298
+ break;
299
+ cut -= m[0].length;
300
+ }
301
+ return cut;
302
+ }
303
+ /**
304
+ * 剔除探针命令回显行(含 shell 语法高亮插入的 ANSI 与提示符前缀):
305
+ * 逐行处理,对每行 ANSI 容忍地定位任一 needle 的首次出现;命中且跨度不超 PROBE_ECHO_MAX_SPAN 时,
306
+ * 删除「探针回显起点(含其前紧邻 ANSI 色码)→ 该行行尾」——**只向后删、绝不向前越过可见字符**:
307
+ * 保留行中探针之前的真输出(行中打断场景),提示符前缀留在行首,
308
+ * 再由 D1 判据(该行可见内容 == 提示符)决定是否整行删除。
309
+ * 无命中行逐字节不变;Raw 视图不经此函数,保留原始字节。
310
+ * @param text 可见输出文本
311
+ * @param needles 探针命令文本(各 seq;含会话 nonce,故不会命中别的会话/nonce 的探针)
312
+ * @param promptRef 提示符基准(D1 用)
313
+ * @returns 剔除后文本
314
+ */
315
+ export function removeProbeEchoLines(text, needles, promptRef) {
316
+ if (needles.length === 0 || text === "")
317
+ return text;
318
+ const kept = [];
319
+ for (const line of text.split("\n")) {
320
+ // 取本行内最早出现的探针回显起点(多个 needle 时取最小 start)
321
+ let cut = -1;
322
+ for (const needle of needles) {
323
+ const r = findAnsiTolerantFirstRange(line, needle);
324
+ if (!r)
325
+ continue;
326
+ if (r.end - r.start > PROBE_ECHO_MAX_SPAN)
327
+ continue; // 护栏②:跨度超限,疑误命中,不删
328
+ if (cut < 0 || r.start < cut)
329
+ cut = r.start;
330
+ }
331
+ if (cut < 0) {
332
+ kept.push(line); // 无命中:逐字节保留
333
+ continue;
334
+ }
335
+ const head = line.slice(0, backOverAnsi(line, cut)); // 护栏③:只删探针起点→行尾,保留该行前半真输出
336
+ if (isPromptOnlyLine(head, promptRef))
337
+ continue; // D1:删后仅剩提示符 → 整行丢弃
338
+ kept.push(head);
339
+ }
340
+ return kept.join("\n");
341
+ }
121
342
  /**
122
343
  * 把原始终端流转为给模型看的干净文本:用 xterm headless 引擎忠实模拟终端屏幕
123
344
  * (处理光标移动/清行/清屏/覆盖/退格/SGR/OSC,含 scrollback),再逐行去尾空白并剔除空行。
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/dist/web/app.css CHANGED
@@ -37,6 +37,10 @@ body:not(.show-time) .row .t { display: none; }
37
37
  .del-btn { background: none; border: 1px solid #30363d; color: #f85149; border-radius: 4px; cursor: pointer; padding: 2px 8px; font-size: 14px; line-height: 1; display: none; }
38
38
  .del-btn:hover { background: #f85149; color: #fff; }
39
39
  .del-btn.show { display: inline-block; }
40
+ .del-btn:disabled { opacity: 0.4; cursor: not-allowed; border-color: #30363d; color: #8b949e; }
41
+ .del-btn:disabled:hover { background: none; color: #8b949e; }
42
+ .notice { display: none; flex: 0 0 auto; padding: 6px 16px; background: #3d2f1f; color: #e3b341; border-top: 1px solid #30363d; font-size: 13px; }
43
+ .notice.show { display: block; }
40
44
  #cmdbar { flex: 0 0 auto; display: flex; gap: 6px; padding: 8px 16px; border-top: 1px solid #30363d; }
41
45
  #cmdInput { flex: 1; box-sizing: border-box; background: #0d1117; color: #c9d1d9; border: 1px solid #30363d; border-radius: 6px; padding: 8px 12px; font-family: "CaskaydiaCove Nerd Font Mono", "Cascadia Code", "Fira Code", "JetBrains Mono", "Noto Sans Mono", "Hack", Consolas, "Courier New", monospace; font-size: 13px; outline: none; resize: none; max-height: 120px; overflow-y: auto; }
42
46
  #cmdInput:focus { border-color: #58a6ff; }