@xiaoqiong0v0/opencode-ssh-tool 0.5.0 → 0.6.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 (61) hide show
  1. package/README.md +27 -21
  2. package/dist/agent.d.ts +52 -0
  3. package/dist/agent.d.ts.map +1 -0
  4. package/dist/agent.js +250 -0
  5. package/dist/agent.js.map +1 -0
  6. package/dist/base-session.d.ts +79 -13
  7. package/dist/base-session.d.ts.map +1 -1
  8. package/dist/base-session.js +246 -100
  9. package/dist/base-session.js.map +1 -1
  10. package/dist/config.d.ts +6 -2
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +16 -7
  13. package/dist/config.js.map +1 -1
  14. package/dist/constants.d.ts +14 -15
  15. package/dist/constants.d.ts.map +1 -1
  16. package/dist/constants.js +14 -15
  17. package/dist/constants.js.map +1 -1
  18. package/dist/i18n.d.ts +32 -14
  19. package/dist/i18n.d.ts.map +1 -1
  20. package/dist/i18n.js +39 -12
  21. package/dist/i18n.js.map +1 -1
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +90 -73
  24. package/dist/index.js.map +1 -1
  25. package/dist/last-match.d.ts +11 -0
  26. package/dist/last-match.d.ts.map +1 -1
  27. package/dist/last-match.js +24 -0
  28. package/dist/last-match.js.map +1 -1
  29. package/dist/local-session.d.ts +0 -1
  30. package/dist/local-session.d.ts.map +1 -1
  31. package/dist/local-session.js +12 -8
  32. package/dist/local-session.js.map +1 -1
  33. package/dist/server-entry.d.ts +2 -0
  34. package/dist/server-entry.d.ts.map +1 -0
  35. package/dist/server-entry.js +61 -0
  36. package/dist/server-entry.js.map +1 -0
  37. package/dist/server-manager.d.ts +9 -9
  38. package/dist/server-manager.d.ts.map +1 -1
  39. package/dist/server-manager.js +109 -20
  40. package/dist/server-manager.js.map +1 -1
  41. package/dist/server.d.ts +3 -28
  42. package/dist/server.d.ts.map +1 -1
  43. package/dist/server.js +424 -224
  44. package/dist/server.js.map +1 -1
  45. package/dist/session.d.ts +0 -1
  46. package/dist/session.d.ts.map +1 -1
  47. package/dist/session.js +2 -9
  48. package/dist/session.js.map +1 -1
  49. package/dist/shell-adapter.d.ts +40 -2
  50. package/dist/shell-adapter.d.ts.map +1 -1
  51. package/dist/shell-adapter.js +252 -24
  52. package/dist/shell-adapter.js.map +1 -1
  53. package/dist/utils.d.ts +3 -1
  54. package/dist/utils.d.ts.map +1 -1
  55. package/dist/utils.js +30 -9
  56. package/dist/utils.js.map +1 -1
  57. package/dist/web/app.css +20 -7
  58. package/dist/web/app.js +11 -2
  59. package/dist/web/index.html +9 -2
  60. package/dist/web/xterm.css +218 -0
  61. package/package.json +3 -2
@@ -1,24 +1,75 @@
1
1
  // BaseSession:SSH(SshSession) 与本地(LocalSession) 终端的公共基类
2
2
  // 统一完成标记法:注入 PROMPT_COMMAND 脚本,命令完成时输出 <SSH_DONE:退出码>
3
3
  // 子类仅需实现:连接建立(connect)、数据写入(_write)、传输层清理(_closeTransport)、状态字段(getStatus)
4
- import { ANIMATION_WINDOW_MS, MAX_OUTPUT_LEN, RAW_LOG_MAX, SETTLE_TIMEOUT_MS, } from "./constants.js";
4
+ import { ANIMATION_WINDOW_MS, MAX_OUTPUT_LEN, RAW_LOG_MAX, DONE_TAG, } from "./constants.js";
5
5
  import log from "./log.js";
6
6
  import { SessionHistory } from "./history.js";
7
- import { toModelText, extractOutputStart, extractOutput } from "./utils.js";
8
- import { findLastEndOf } from "./last-match.js";
9
- import { detectLastDoneMarker, stripMarkers, resolveByProbe } from "./shell-adapter.js";
7
+ import { toModelText, extractOutputStart } from "./utils.js";
8
+ import { detectLastDoneMarker, stripMarkers, detectInterrupt, adapters, hasHeredoc } from "./shell-adapter.js";
9
+ import { tr } from "./i18n.js";
10
10
  /** 交互触发词(sudo 密码 / 分页器 / 确认提示),含中英文 */
11
- const INTERACTIVE_RE = /(\[sudo\] password for|password for \S+:|Password:|密码:|--More--|\(END\)|\[y\/N\]|\[Y\/n\]|yes\/no|是\/否)/i;
11
+ const INTERACTIVE_RE = /(\[sudo\] password for|password for \S+:|\*\*\*\s*$|Password:|密码:|--More--|\(END\)|\[y\/N\]|\[Y\/n\]|yes\/no|是\/否)/i;
12
12
  /** buffer 最大长度(未消费输出超限时截断头部,防内存膨胀) */
13
13
  const MAX_BUFFER_LEN = 2 * 1024 * 1024;
14
14
  /** 后台监听最长存活时间(防泄漏) */
15
15
  const MAX_WATCH_LEN = 10 * 60_000;
16
16
  /** Shell 探测等待超时 */
17
17
  const PROBE_TIMEOUT_MS = 5_000;
18
+ /**
19
+ * 剥离命令尾部注释:仅当 `#` 在行首或前有空白、且不在单双引号内(支持反斜杠转义)时视为注释,
20
+ * 避免 `echo "a#b"` / `echo 'a#b'` 引号内的 # 被误剥,也避免 marker 被真注释吞掉。
21
+ * @param s 命令文本
22
+ * @returns 剥离尾注释(若有)后的文本
23
+ */
24
+ function stripTrailingComment(s) {
25
+ let inSingle = false;
26
+ let inDouble = false;
27
+ let escaped = false;
28
+ for (let i = 0; i < s.length; i++) {
29
+ const c = s[i];
30
+ if (escaped) {
31
+ escaped = false;
32
+ continue;
33
+ }
34
+ if (c === "\\") {
35
+ escaped = true;
36
+ continue;
37
+ }
38
+ if (c === "'" && !inDouble) {
39
+ inSingle = !inSingle;
40
+ continue;
41
+ }
42
+ if (c === '"' && !inSingle) {
43
+ inDouble = !inDouble;
44
+ continue;
45
+ }
46
+ if (c === "#" && !inSingle && !inDouble && (i === 0 || /\s/.test(s[i - 1]))) {
47
+ return s.slice(0, i).trimEnd();
48
+ }
49
+ }
50
+ return s.trimEnd();
51
+ }
52
+ /**
53
+ * 剥离命令尾部注释与尾部运算符,避免拼装 `;marker` 时:
54
+ * - 尾注释 `# xxx` 把 marker 整行吞掉 → 检测不到完成
55
+ * - 尾运算符 `&`、`;`、`&&`、`||` 与拼接的 `;` 形成 `&;`/`;;` 等语法错误
56
+ * @param command 原始命令
57
+ * @returns 可安全拼装 marker 的命令体
58
+ */
59
+ function stripCommandTail(command) {
60
+ // 仅处理最后一行:多行命令(如 heredoc 正文)中间的 `#` 是内容,若在此截断会把命令切断
61
+ const nl = command.lastIndexOf("\n");
62
+ const head = nl >= 0 ? command.slice(0, nl + 1) : "";
63
+ const last = nl >= 0 ? command.slice(nl + 1) : command;
64
+ let s = stripTrailingComment(last);
65
+ s = s.replace(/(?:&&|\|\||[;&|])[\s]*$/, "");
66
+ return (head + s).trimEnd();
67
+ }
18
68
  /** 会话命令执行与读取的公共实现 */
19
69
  export class BaseSession {
20
70
  sessionID;
21
71
  name;
72
+ _lang;
22
73
  _connected = false;
23
74
  _remoteBusy = false;
24
75
  _buffer = "";
@@ -27,6 +78,10 @@ export class BaseSession {
27
78
  _runningStartPos = null;
28
79
  _runningCommand = "";
29
80
  _watchTimer = null;
81
+ /** 命令序号(完成标记 <SSH_DONE:seq:code> 标识本次命令,防残留误判) */
82
+ _cmdSeq = 0;
83
+ /** 当前命令序号(_beginCapture 递增,供检测/拼接用) */
84
+ _runningSeq = 0;
30
85
  /** 下次捕获窗口起点(相对当前 buffer):前一条命令结束后,标记/残留从此处开始 */
31
86
  _cursor = 0;
32
87
  /** WS 实时流已发送位置(相对 buffer 偏移);null = 尚未定位命令回显结束点 */
@@ -43,9 +98,19 @@ export class BaseSession {
43
98
  /** 累积原始字节总数(单调递增,前端增量游标) */
44
99
  _rawTotal = 0;
45
100
  _history;
46
- constructor(sessionID, history, name = "default") {
101
+ /** 生命周期监听器(命令开始/完成事件,agent 转报 server) */
102
+ _lifecycle = null;
103
+ /**
104
+ * 本次命令期间是否真实发送过中断(Ctrl-C)。
105
+ * 中断判定不依赖"命令回显定位":超宽命令被 readline 折行重绘时回显会多出字符,
106
+ * 精确匹配必然失败(echoEnd=0),若再以 echoEnd 为前置条件则 ^C 永远检测不到 → busy 卡死。
107
+ * 仅当确实发过 ^C 才去缓冲区找 ^C 回显,天然排除历史残留 ^C 的误判。
108
+ */
109
+ _interruptSent = false;
110
+ constructor(sessionID, history, name = "default", _lang = "en") {
47
111
  this.sessionID = sessionID;
48
112
  this.name = name;
113
+ this._lang = _lang;
49
114
  this._history = history;
50
115
  }
51
116
  /** 结果中的类型专属字段(SSH 附加 host,本地为空) */
@@ -57,11 +122,13 @@ export class BaseSession {
57
122
  */
58
123
  async submit(command) {
59
124
  if (!this._ready())
60
- return { ok: false, output: "", error: "Not connected" };
125
+ return { ok: false, output: "", error: tr("err_not_connected", this._lang) };
61
126
  if (this._remoteBusy)
62
- return { ok: false, output: "", error: `Previous command still running, poll with ${this._statusCmd} first` };
127
+ return { ok: false, output: "", error: tr("cmd_busy", this._lang) };
128
+ if (this._adapter?.hasOpenContinuation(command))
129
+ return { ok: false, output: "", error: tr("cmd_continuation", this._lang) };
63
130
  this._beginCapture(command);
64
- this._write(command + "\r");
131
+ this._write(this._composeCommand(command));
65
132
  this._startBackgroundWatch(0, command);
66
133
  return { ok: true, output: "", submitted: true, command, duration: 0, ...this._extraResult };
67
134
  }
@@ -73,29 +140,39 @@ export class BaseSession {
73
140
  async exec(command) {
74
141
  const startTs = Date.now();
75
142
  if (!this._ready())
76
- return { ok: false, output: "", error: "Not connected" };
77
- if (this._remoteBusy)
78
- return { ok: false, output: "", error: `Previous command still running, poll with ${this._statusCmd} first` };
143
+ return { ok: false, output: "", error: tr("err_not_connected", this._lang) };
144
+ if (this._remoteBusy) {
145
+ log.info(`exec quick-fail busy: ${command} (busy=${this._remoteBusy})`);
146
+ return { ok: false, output: "", error: tr("cmd_busy", this._lang) };
147
+ }
148
+ if (this._adapter?.hasOpenContinuation(command)) {
149
+ log.info(`exec quick-fail open continuation: ${command}`);
150
+ return { ok: false, output: "", error: tr("cmd_continuation", this._lang) };
151
+ }
79
152
  this._beginCapture(command);
80
153
  const captureStart = this._buffer.length;
81
- this._write(command + "\r");
154
+ this._write(this._composeCommand(command));
82
155
  const outcome = await this._waitCompletion(0, startTs);
156
+ log.info(`exec ${command} -> ${outcome.kind}${outcome.kind === "running" ? "" : " markerPos=" + outcome.markerPos} (busy=${this._remoteBusy})`);
83
157
  switch (outcome.kind) {
84
158
  case "done": {
85
159
  this._remoteBusy = false;
86
160
  const raw = this._buffer.slice(captureStart, outcome.markerPos ?? this._buffer.length);
87
161
  this._cursor = Math.max(0, outcome.markerPos ?? this._buffer.length);
88
- this._history.append(command, extractOutput(raw, command), this._runningStartTs, Date.now());
162
+ const out = this._extractOutput(raw, command);
163
+ this._history.append(command, out, this._runningStartTs, Date.now());
164
+ this._emitDone(outcome.exitCode ?? null, Date.now(), out);
89
165
  this._clearRunningContext();
90
- return { ok: true, output: this._truncate(toModelText(extractOutput(raw, command))), command, duration: Date.now() - startTs, ...this._extraResult };
166
+ return { ok: true, output: this._truncate(toModelText(out)), command, duration: Date.now() - startTs, ...this._extraResult };
91
167
  }
92
168
  case "interactive": {
93
- this._remoteBusy = false;
169
+ // 交互程序(sudo 密码 / 确认提示):命令仍在等待用户输入,
170
+ // 保留 running 上下文与 busy 状态,转后台 watch 持续监听完成标记;
171
+ // 用户 send 输入后命令完成时由 watch 完整收集输出并翻转 busy(防新命令被当 exec 塞进运行中 shell)
94
172
  const raw = this._buffer.slice(captureStart);
95
- this._cursor = this._buffer.length;
96
- this._history.append(command, raw, this._runningStartTs, Date.now());
97
- this._clearRunningContext();
98
- return { ok: true, output: this._truncate(toModelText(extractOutput(raw, command))), interactive: true, command, duration: Date.now() - startTs, ...this._extraResult };
173
+ const out = this._extractOutput(raw, command);
174
+ this._startBackgroundWatch(captureStart, command);
175
+ return { ok: true, output: this._truncate(toModelText(out)), interactive: true, command, duration: Date.now() - startTs, ...this._extraResult };
99
176
  }
100
177
  case "running": {
101
178
  this._runningStartPos = 0;
@@ -125,13 +202,10 @@ export class BaseSession {
125
202
  */
126
203
  async readBuffer() {
127
204
  if (!this._connected)
128
- return { ok: false, output: "", error: "Not connected" };
205
+ return { ok: false, output: "", error: tr("err_not_connected", this._lang) };
129
206
  let out;
130
207
  if (this._runningStartPos !== null && this._runningCommand) {
131
- const end = extractOutputStart(this._buffer.slice(this._runningStartPos), this._runningCommand);
132
- const marker = end > 0
133
- ? detectLastDoneMarker(this._buffer, this._runningStartPos + end)
134
- : { done: false, exitCode: 0, pos: 0 };
208
+ const marker = detectLastDoneMarker(this._buffer, this._runningStartPos, this._runningSeq);
135
209
  if (marker.done) {
136
210
  const raw = this._buffer.slice(this._runningStartPos, marker.pos);
137
211
  this._buffer = this._buffer.slice(marker.pos);
@@ -158,7 +232,7 @@ export class BaseSession {
158
232
  */
159
233
  send(text) {
160
234
  if (!this._connected)
161
- return { ok: false, error: "Not connected" };
235
+ return { ok: false, error: tr("err_not_connected", this._lang) };
162
236
  const payload = text
163
237
  .replace(/\\x1b/gi, "\x1b")
164
238
  .replace(/\\x03/gi, "\x03")
@@ -166,6 +240,10 @@ export class BaseSession {
166
240
  .replace(/\\x1a/gi, "\x1a")
167
241
  .replace(/\\r/g, "\r")
168
242
  .replace(/\\n/g, "\r");
243
+ log.info(`send -> ${JSON.stringify(payload)} (connected=${this._connected}, busy=${this._remoteBusy})`);
244
+ // 真实中断输入:标记本次命令已发过 Ctrl-C,供完成判定识别 ^C 回显(不依赖命令回显定位)
245
+ if (payload.includes("\x03"))
246
+ this._interruptSent = true;
169
247
  this._write(payload);
170
248
  this._lastActive = Date.now();
171
249
  return { ok: true };
@@ -179,6 +257,35 @@ export class BaseSession {
179
257
  getRunningCommand() {
180
258
  return this._runningStartPos !== null && this._connected ? this._runningCommand : "";
181
259
  }
260
+ /**
261
+ * 按当前 shell 的行续行规则拆分多行命令为独立命令(供 agent 端多行命令拆条执行)
262
+ * @param command 可能含换行的命令文本
263
+ * @returns 拆分后的独立命令列表;未识别 shell 时按普通换行拆分
264
+ */
265
+ splitCommand(command) {
266
+ return this._adapter ? this._adapter.splitCommand(command) : command.split("\n").map((l) => l.trim()).filter(Boolean);
267
+ }
268
+ /**
269
+ * 设置命令生命周期监听器(命令开始/完成时回调)
270
+ * @param listener 回调(start 携带命令,done 携带退出码与结束时刻;null 表示清除)
271
+ */
272
+ setLifecycle(listener) {
273
+ this._lifecycle = listener;
274
+ }
275
+ /** 触发命令开始事件 */
276
+ _emitStart(command, ts) {
277
+ try {
278
+ this._lifecycle?.({ type: "start", command, ts });
279
+ }
280
+ catch { /* 监听器异常不打断执行 */ }
281
+ }
282
+ /** 触发命令完成事件 */
283
+ _emitDone(exitCode, endTs, output) {
284
+ try {
285
+ this._lifecycle?.({ type: "done", exitCode, endTs, output });
286
+ }
287
+ catch { /* 同上 */ }
288
+ }
182
289
  hasRunningStream() {
183
290
  return this._runningStartPos !== null && this._connected && this._runningCommand !== "";
184
291
  }
@@ -192,18 +299,23 @@ export class BaseSession {
192
299
  this._streamPos = null;
193
300
  return { data: "", done: false };
194
301
  }
195
- const end = extractOutputStart(this._buffer.slice(this._runningStartPos), this._runningCommand);
302
+ // 完成标记先定位(marker 唯一 seq,从命令起点搜索,免疫 echoEnd 被后序回显带偏)
303
+ const marker = detectLastDoneMarker(this._buffer, this._runningStartPos, this._runningSeq);
304
+ const markerEnd = marker.done ? marker.pos : this._buffer.length;
305
+ const end = extractOutputStart(this._buffer.slice(this._runningStartPos), this._composeEchoText(this._runningCommand), markerEnd - this._runningStartPos);
196
306
  if (end <= 0)
197
307
  return { data: "", done: false };
198
308
  const echoEnd = this._runningStartPos + end;
199
- const marker = detectLastDoneMarker(this._buffer, echoEnd);
200
309
  const windowEnd = marker.done ? marker.pos : this._buffer.length;
201
310
  if (this._streamPos === null) {
202
311
  this._streamPos = echoEnd;
203
312
  }
204
313
  const raw = this._buffer.slice(this._streamPos, windowEnd);
205
314
  this._streamPos = windowEnd;
206
- return { data: stripMarkers(raw), done: marker.done };
315
+ let data = stripMarkers(raw);
316
+ if (this._adapter)
317
+ data = data.replace(this._markerCmd(this._runningSeq), "");
318
+ return { data, done: marker.done };
207
319
  }
208
320
  /** 关闭终端,清理会话态(幂等) */
209
321
  close() {
@@ -224,11 +336,72 @@ export class BaseSession {
224
336
  const from = pos - this._rawDiscarded;
225
337
  return { data: this._rawLog.slice(from), pos: this._rawTotal };
226
338
  }
339
+ /**
340
+ * 本会话当前命令的完成标记命令(adapter 负责各自的标记语法,无 adapter 时用 POSIX 默认)
341
+ * @param seq 命令序号
342
+ * @returns 标记命令文本
343
+ */
344
+ _markerCmd(seq) {
345
+ return this._adapter ? this._adapter.markerCmd(seq) : `printf '\\n${DONE_TAG}${seq}:%s>' $?`;
346
+ }
347
+ /**
348
+ * 组合写入命令(实际写入 PTY 的文本,尾部带 \r 回车)
349
+ * @param command 原始命令(history 存干净版本)
350
+ * @returns 实际写入 PTY 的文本
351
+ */
352
+ _composeCommand(command) {
353
+ return `${this._composeEchoText(command)}\r`;
354
+ }
355
+ /**
356
+ * 组合命令文本(无尾部 \r):命令 + 完成标记,同时供 extractOutputStart 定位回显结束。
357
+ * 普通命令用 `;` 同行拼接(免疫 prompt 框架覆盖):`python; printf ...` 中 printf 由 shell 在 python
358
+ * 退出后执行,不会被 REPL 当 stdin 消费(实测 top/read/python 均正常出 marker)。
359
+ * 含 heredoc 的命令改用换行分隔:标记若以 `;` 拼到分隔符行(`EOF ;printf ...`),
360
+ * heredoc 分隔符不再被识别 → 永不结束 → 卡死。
361
+ * 交互程序(top/vi/read/python 等)期间保留 running 上下文与 busy,marker 出现即判定完成。
362
+ * @param command 原始命令
363
+ * @returns 命令 + 标记文本(无 \r)
364
+ */
365
+ _composeEchoText(command) {
366
+ const marker = this._markerCmd(this._runningSeq);
367
+ const body = stripCommandTail(command);
368
+ const sep = hasHeredoc(body) ? "\n" : " ;";
369
+ return `${body}${sep}${marker}`;
370
+ }
371
+ /**
372
+ * 提取命令纯输出:从命令回显后切到完成标记(无标记则切到中断回显 ^C 处),
373
+ * 顺带去掉追加的标记命令回显行。
374
+ * 回显定位使用组合命令文本(command + 标记段)而非裸命令:裸命令可能出现在程序错误输出中
375
+ * (如 `pw` 的错误行 `bash: pw: command not found`),而组合命令整行回显是唯一的,
376
+ * 可避免 last-match 误命中错误行导致输出被裁空。
377
+ * @param raw 本次执行窗口原始字节流
378
+ * @param command 原始命令(历史用)
379
+ * @returns 纯程序输出原始流
380
+ */
381
+ _extractOutput(raw, command) {
382
+ // 完成标记先定位:marker 自带唯一 seq,从窗口起点搜索即可(echoEnd 可能被连续输入的后序回显带偏)
383
+ const marker = detectLastDoneMarker(raw, 0, this._runningSeq);
384
+ const echoText = this._composeEchoText(command);
385
+ const end = marker.done ? extractOutputStart(raw, echoText, marker.pos) : extractOutputStart(raw, echoText);
386
+ if (end <= 0)
387
+ return stripMarkers(raw);
388
+ let out;
389
+ if (marker.done) {
390
+ out = raw.slice(end, marker.pos);
391
+ }
392
+ else {
393
+ const intr = detectInterrupt(raw, end);
394
+ out = intr.interrupted ? raw.slice(end, intr.pos) : raw.slice(end);
395
+ }
396
+ if (this._adapter)
397
+ out = out.replace(this._markerCmd(this._runningSeq), "");
398
+ return stripMarkers(out.replace(/^[\r\n]+/, ""));
399
+ }
227
400
  /** 命令执行/提交前准备:裁剪已消费缓冲 + 丢弃上一条命令的迟到残留标记 */
228
401
  _beginCapture(command) {
229
- // 用上一条命令完成标记(最后一个合法 <SSH_DONE:N>)定位命令起点;
402
+ // 用上一条命令完成标记(<SSH_DONE:seq:N>,此刻 _runningSeq 仍是上一条的)定位命令起点;
230
403
  // 备屏重放等场景下 buffer 可能含旧标记,裁剪到最后一个标记之后即可
231
- const marker = detectLastDoneMarker(this._buffer, 0);
404
+ const marker = detectLastDoneMarker(this._buffer, 0, this._runningSeq);
232
405
  if (marker.done) {
233
406
  this._buffer = this._buffer.slice(marker.pos);
234
407
  this._cursor = 0;
@@ -239,8 +412,12 @@ export class BaseSession {
239
412
  this._runningStartPos = 0;
240
413
  this._runningCommand = command;
241
414
  this._runningStartTs = Date.now();
415
+ this._interruptSent = false; // 新命令:清除上一条/空闲期发出的 Ctrl-C 标记
416
+ this._cmdSeq += 1;
417
+ this._runningSeq = this._cmdSeq;
242
418
  this._remoteBusy = true;
243
419
  this._lastActive = Date.now();
420
+ this._emitStart(command, this._runningStartTs);
244
421
  }
245
422
  /** 追加输出字节:维护业务缓冲 + 连续原始流 ring */
246
423
  _appendBuffer(text) {
@@ -262,17 +439,17 @@ export class BaseSession {
262
439
  this._rawDiscarded += trimmed;
263
440
  }
264
441
  }
265
- /** 探测 shell 类型:deadline 内循环发送探测命令并解析输出(shell 慢启动时也能等到就绪) */
442
+ /** 探测 shell 类型:按各适配器 probeCommand 逐个探测(POSIX 系优先,pwsh/cmd 用各自独有命令),
443
+ * login shell 的 $0 带 - 前缀(-bash/-zsh)由对应 parseProbe 容忍 */
266
444
  async _probeShell(deadline) {
267
445
  while (Date.now() < deadline) {
268
- this._write("echo __SHELL_ID__$0\r");
269
- const output = await this._waitProbeOutput(Math.min(PROBE_TIMEOUT_MS, deadline - Date.now()));
270
- if (output !== null && /\b__SHELL_ID__\b/.test(output)) {
271
- const adapter = resolveByProbe(output);
446
+ for (const candidate of adapters) {
447
+ this._write(candidate.probeCommand + "\r");
448
+ const output = await this._waitProbeOutput(Math.min(PROBE_TIMEOUT_MS, deadline - Date.now()));
272
449
  this._buffer = "";
273
- return adapter;
450
+ if (output !== null && candidate.parseProbe(output))
451
+ return candidate;
274
452
  }
275
- this._buffer = "";
276
453
  }
277
454
  return null;
278
455
  }
@@ -292,45 +469,9 @@ export class BaseSession {
292
469
  }
293
470
  return this._buffer.length > 0 ? this._buffer : null;
294
471
  }
295
- /**
296
- * deadline 内循环注入+等待确认,成功返回 true,超时返回 false
297
- * 逐行发送避免因 shell 未就绪导致的整块丢失;每轮等待最大 3s
298
- * 注入命令原样回显(不抑制),确认以 echo 唯一标识为准,避免与后续命令时序混淆
299
- */
300
- async _injectAndSettle(deadline) {
301
- const TOKEN = "__SSH_INJECT_DONE__";
302
- const line = this._adapter.buildInjectScript().trim();
303
- if (!line)
304
- return true;
305
- while (Date.now() < deadline) {
306
- this._write(line + "\r");
307
- if (await this._waitForBufferToken(line, TOKEN, Math.min(SETTLE_TIMEOUT_MS, deadline - Date.now()))) {
308
- await new Promise((r) => setTimeout(r, 100));
309
- this._buffer = "";
310
- this._cursor = 0;
311
- return true;
312
- }
313
- log.info("注入标识未确认,重试");
314
- this._buffer = "";
315
- this._cursor = 0;
316
- }
317
- return false;
318
- }
319
- /** 等待缓冲中出现指定文本(最多 maxMs) */
320
- async _waitForBufferToken(line, token, maxMs) {
321
- const startTime = Date.now();
322
- while (Date.now() - startTime < maxMs) {
323
- const lineEnd = findLastEndOf(line, this._buffer);
324
- if (lineEnd >= 0 && this._buffer.includes(token, lineEnd + 1))
325
- return true;
326
- await new Promise((r) => setTimeout(r, 50));
327
- }
328
- return false;
329
- }
330
472
  _waitCompletion(startPos, startTs) {
331
473
  return new Promise((resolve) => {
332
474
  let lastLen = this._buffer.length;
333
- let echoEnd = 0;
334
475
  const timer = setInterval(() => {
335
476
  if (INTERACTIVE_RE.test(this._buffer.slice(startPos))) {
336
477
  clearInterval(timer);
@@ -341,23 +482,25 @@ export class BaseSession {
341
482
  const curLen = this._buffer.length;
342
483
  if (curLen !== lastLen)
343
484
  lastLen = curLen;
344
- if (echoEnd <= 0 && this._runningCommand) {
345
- const end = extractOutputStart(this._buffer.slice(startPos), this._runningCommand);
346
- if (end > 0)
347
- echoEnd = startPos + end;
485
+ // 完成判定(权威):命令后追加的 printf 输出 <SSH_DONE>,或 Ctrl-C 中断时 TTY 回显 ^C。
486
+ // marker 自带唯一 seq,从命令起点直接搜索即可(不依赖命令回显定位)
487
+ const marker = detectLastDoneMarker(this._buffer, startPos, this._runningSeq);
488
+ if (marker.done) {
489
+ clearInterval(timer);
490
+ resolve({ kind: "done", markerPos: marker.pos, exitCode: marker.exitCode });
491
+ return;
348
492
  }
349
- // 完成标记(精确权威):命令结束时 shell 重绘提示符前必输出 <SSH_DONE>,
350
- // 下载/编译等静默期不会误判完成,中断(Ctrl-C 回到提示符)同样会输出标记。
351
- // 必须等命令回显出现后才检测:回显前的标记只可能是上一条命令的迟到残留。
352
- if (echoEnd > 0) {
353
- const marker = detectLastDoneMarker(this._buffer, echoEnd);
354
- if (marker.done) {
493
+ // ^C 中断:仅当本次命令确实发送过 Ctrl-C 才检测(无需命令回显定位,
494
+ // 超宽命令折行重绘会让回显精确匹配失败;未发过 Ctrl-C 时缓冲区里的 ^C 只可能是残留)
495
+ if (this._interruptSent) {
496
+ const intr = detectInterrupt(this._buffer, startPos);
497
+ if (intr.interrupted) {
355
498
  clearInterval(timer);
356
- resolve({ kind: "done", markerPos: marker.pos });
499
+ resolve({ kind: "done", markerPos: intr.pos, exitCode: 130 });
357
500
  return;
358
501
  }
359
502
  }
360
- // 超过动画窗口仍未出现完成标记 → 交给后台 watch 继续监听(不设硬超时)
503
+ // 超过动画窗口仍未出现完成信号 → 交给后台 watch 继续监听(不设硬超时)
361
504
  if (now - startTs >= ANIMATION_WINDOW_MS) {
362
505
  clearInterval(timer);
363
506
  resolve({ kind: "running" });
@@ -366,32 +509,34 @@ export class BaseSession {
366
509
  }, 50);
367
510
  });
368
511
  }
369
- /** 后台监听:轮询 done 标记 → 收集输出进 history + busy=false */
512
+ /** 后台监听:轮询 done 标记 / ^C 中断 → 收集输出进 history + busy=false */
370
513
  _startBackgroundWatch(startPos, command) {
371
514
  if (this._watchTimer)
372
515
  clearInterval(this._watchTimer);
373
516
  const born = Date.now();
374
- let echoEnd = 0;
375
517
  this._watchTimer = setInterval(() => {
376
518
  if (!this._connected || Date.now() - born > MAX_WATCH_LEN) {
519
+ // 超时/断连:命令视为结束(可能从未完成),补发 done 防 server busy 卡死
520
+ if (this._runningCommand)
521
+ this._emitDone(null, Date.now());
377
522
  this._remoteBusy = false;
378
523
  this._clearRunningContext();
379
524
  if (this._watchTimer)
380
525
  clearInterval(this._watchTimer);
381
526
  return;
382
527
  }
383
- if (echoEnd <= 0 && command) {
384
- const end = extractOutputStart(this._buffer.slice(startPos), command);
385
- if (end > 0)
386
- echoEnd = startPos + end;
387
- }
388
- if (echoEnd <= 0)
389
- return;
390
- const marker = detectLastDoneMarker(this._buffer, echoEnd);
391
- if (marker.done) {
392
- const raw = this._buffer.slice(startPos, marker.pos);
393
- this._history.append(command, extractOutput(raw, command), this._runningStartTs);
394
- this._cursor = Math.max(startPos, marker.pos);
528
+ // marker 唯一 seq,从命令起点搜索(不依赖命令回显定位)
529
+ const marker = detectLastDoneMarker(this._buffer, startPos, this._runningSeq);
530
+ // ^C 中断:仅当本次命令确实发送过 Ctrl-C 才检测(超宽命令折行重绘会让回显精确匹配失败)
531
+ const intr = this._interruptSent ? detectInterrupt(this._buffer, startPos) : { interrupted: false, pos: 0 };
532
+ const end = marker.done ? marker.pos : intr.pos;
533
+ if (marker.done || intr.interrupted) {
534
+ const raw = this._buffer.slice(startPos, end);
535
+ const code = marker.done ? marker.exitCode : 130;
536
+ const out = this._extractOutput(raw, command);
537
+ this._history.append(command, out, this._runningStartTs);
538
+ this._emitDone(code, Date.now(), out);
539
+ this._cursor = Math.max(startPos, end);
395
540
  this._remoteBusy = false;
396
541
  this._clearRunningContext();
397
542
  if (this._watchTimer)
@@ -404,6 +549,7 @@ export class BaseSession {
404
549
  this._runningCommand = "";
405
550
  this._streamPos = null;
406
551
  this._runningStartTs = 0;
552
+ this._interruptSent = false;
407
553
  }
408
554
  _truncate(s) {
409
555
  if (s.length <= MAX_OUTPUT_LEN)
@@ -1 +1 @@
1
- {"version":3,"file":"base-session.js","sourceRoot":"","sources":["../src/base-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-session.js","sourceRoot":"","sources":["../src/base-session.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -3,6 +3,10 @@ import type { Lang } from "./i18n.js";
3
3
  export interface ServerConfig {
4
4
  enabled: boolean;
5
5
  port: number;
6
+ /** 流推送间隔(ms),默认 100。越小实时性越高但 WS 消息更频繁 */
7
+ streamTickMs?: number;
8
+ /** 无任何会话连接时自动关闭超时(ms),0=不自动关闭。默认 0 */
9
+ idleShutdownMs?: number;
6
10
  }
7
11
  /** 会话记录(命令+输出 消息对)配置 */
8
12
  export interface HistoryConfig {
@@ -19,9 +23,9 @@ export interface PermissionConfig {
19
23
  export interface ToolConfig {
20
24
  server: ServerConfig;
21
25
  history: HistoryConfig;
22
- /** 工具描述语言(默认 en,可用环境变量 SSH_TOOL_LANG 覆盖) */
26
+ /** 工具语言:工具描述 / CLI / agent·session 文案(默认 en,可用环境变量 SSH_TOOL_LANG 覆盖) */
23
27
  toolLang: Lang;
24
- /** Web 界面语言(默认 en,可用环境变量 SSH_TOOL_LANG 覆盖) */
28
+ /** Web 界面语言:仅页面 UI 文案(默认 en,可用环境变量 SSH_WEB_LANG 覆盖) */
25
29
  webLang: Lang;
26
30
  permission: PermissionConfig;
27
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAErC,gBAAgB;AAChB,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,wBAAwB;AACxB,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,wCAAwC;AACxC,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,qDAAqD;IACrD,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAED,aAAa;AACb,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,YAAY,CAAA;IACpB,OAAO,EAAE,aAAa,CAAA;IACtB,4CAA4C;IAC5C,QAAQ,EAAE,IAAI,CAAA;IACd,8CAA8C;IAC9C,OAAO,EAAE,IAAI,CAAA;IACb,UAAU,EAAE,gBAAgB,CAAA;CAC7B;AA0ED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,UAAU,CAiCvC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAErC,gBAAgB;AAChB,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,sCAAsC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,wBAAwB;AACxB,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,wCAAwC;AACxC,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,qDAAqD;IACrD,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAED,aAAa;AACb,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,YAAY,CAAA;IACpB,OAAO,EAAE,aAAa,CAAA;IACtB,wEAAwE;IACxE,QAAQ,EAAE,IAAI,CAAA;IACd,uDAAuD;IACvD,OAAO,EAAE,IAAI,CAAA;IACb,UAAU,EAAE,gBAAgB,CAAA;CAC7B;AA+ED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,UAAU,CAqCvC"}