@xiaoqiong0v0/opencode-ssh-tool 0.6.9 → 0.6.12

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 (51) hide show
  1. package/dist/agent.d.ts.map +1 -1
  2. package/dist/agent.js +82 -8
  3. package/dist/agent.js.map +1 -1
  4. package/dist/base-session.d.ts +32 -5
  5. package/dist/base-session.d.ts.map +1 -1
  6. package/dist/base-session.js +79 -53
  7. package/dist/base-session.js.map +1 -1
  8. package/dist/constants.d.ts +29 -1
  9. package/dist/constants.d.ts.map +1 -1
  10. package/dist/constants.js +30 -1
  11. package/dist/constants.js.map +1 -1
  12. package/dist/escapes.d.ts +9 -0
  13. package/dist/escapes.d.ts.map +1 -0
  14. package/dist/escapes.js +65 -0
  15. package/dist/escapes.js.map +1 -0
  16. package/dist/history.d.ts +10 -3
  17. package/dist/history.d.ts.map +1 -1
  18. package/dist/history.js +18 -3
  19. package/dist/history.js.map +1 -1
  20. package/dist/i18n.d.ts +21 -5
  21. package/dist/i18n.d.ts.map +1 -1
  22. package/dist/i18n.js +7 -3
  23. package/dist/i18n.js.map +1 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +34 -16
  26. package/dist/index.js.map +1 -1
  27. package/dist/local-session.js +5 -5
  28. package/dist/local-session.js.map +1 -1
  29. package/dist/log.d.ts +72 -0
  30. package/dist/log.d.ts.map +1 -1
  31. package/dist/log.js +262 -1
  32. package/dist/log.js.map +1 -1
  33. package/dist/server-entry.js +1 -1
  34. package/dist/server-entry.js.map +1 -1
  35. package/dist/server-manager.d.ts.map +1 -1
  36. package/dist/server-manager.js +18 -2
  37. package/dist/server-manager.js.map +1 -1
  38. package/dist/server.d.ts.map +1 -1
  39. package/dist/server.js +185 -21
  40. package/dist/server.js.map +1 -1
  41. package/dist/session-store.d.ts +10 -2
  42. package/dist/session-store.d.ts.map +1 -1
  43. package/dist/session-store.js +30 -5
  44. package/dist/session-store.js.map +1 -1
  45. package/dist/session.d.ts.map +1 -1
  46. package/dist/session.js +26 -12
  47. package/dist/session.js.map +1 -1
  48. package/dist/web/app.css +6 -4
  49. package/dist/web/app.js +9 -9
  50. package/dist/web/index.html +4 -1
  51. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAMA,+CAA+C;AAC/C,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACvC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACnD,KAAK,IAAI,IAAI,CAAA;IACb,gBAAgB,IAAI,OAAO,CAAA;IAC3B,gBAAgB,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAA;IACnD,iBAAiB,IAAI,MAAM,CAAA;IAC3B,yCAAyC;IACzC,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;IAChC,wCAAwC;IACxC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;IAC/K,gBAAgB;IAChB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;IAC1E,8CAA8C;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAED,WAAW;AACX,MAAM,WAAW,WAAW;IAC1B,KAAK,IAAI,IAAI,CAAA;IACb,0BAA0B;IAC1B,UAAU,IAAI,IAAI,CAAA;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,EAC7E,YAAY,EAAE,MAAM,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAC7D,WAAW,CAmNb"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAMA,+CAA+C;AAC/C,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACvC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACnD,KAAK,IAAI,IAAI,CAAA;IACb,gBAAgB,IAAI,OAAO,CAAA;IAC3B,gBAAgB,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAA;IACnD,iBAAiB,IAAI,MAAM,CAAA;IAC3B,yCAAyC;IACzC,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;IAChC,wCAAwC;IACxC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;IAC/K,gBAAgB;IAChB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;IAC1E,8CAA8C;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAED,WAAW;AACX,MAAM,WAAW,WAAW;IAC1B,KAAK,IAAI,IAAI,CAAA;IACb,0BAA0B;IAC1B,UAAU,IAAI,IAAI,CAAA;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,EAC7E,YAAY,EAAE,MAAM,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAC7D,WAAW,CA6Qb"}
package/dist/agent.js CHANGED
@@ -1,7 +1,7 @@
1
1
  // 代理客户端:插件进程连上独立服务(WS),注册本进程持有的会话,
2
2
  // 处理服务转发来的交互命令(run-exec / run-send / run-delete),并把实时流推给服务。
3
- import log from "./log.js";
4
- import { INTERACTIVE_BUSY_MS } from "./constants.js";
3
+ import log, { debug, describeSend, infoDedup, infoDedupShared } from "./log.js";
4
+ import { INTERACTIVE_BUSY_MS, HEARTBEAT_INTERVAL_MS, HEARTBEAT_CLIENT_TIMEOUT_MS } from "./constants.js";
5
5
  /**
6
6
  * 启动代理客户端:连接独立服务并注册会话,处理转发命令
7
7
  * @param url 服务 WS 地址(如 ws://127.0.0.1:PORT/ws)
@@ -13,6 +13,12 @@ export function startAgent(url, resolveSession, listSessions) {
13
13
  let ws = null;
14
14
  let closed = false;
15
15
  let timer = null;
16
+ /** 心跳检测定时器(与 pushStreams 的 timer 分开,断开时一并清理) */
17
+ let hbTimer = null;
18
+ /** 最近一次收到 server 应用层 ping 的时刻(毫秒);静默超过 HEARTBEAT_CLIENT_TIMEOUT_MS 即判定服务端半开 */
19
+ let lastPingAt = 0;
20
+ /** 连接成功次数(1=首次连接,>1=重连),用于在日志里区分首连与重连 */
21
+ let connSeq = 0;
16
22
  const wsUrl = url.startsWith("ws://") ? url : `ws://${url}`;
17
23
  const send = (msg) => {
18
24
  if (ws && ws.readyState === WebSocket.OPEN)
@@ -127,6 +133,21 @@ export function startAgent(url, resolveSession, listSessions) {
127
133
  send({ type: "out", sessionID, name, data: st.data });
128
134
  }
129
135
  };
136
+ /**
137
+ * 心跳检测:超过 HEARTBEAT_CLIENT_TIMEOUT_MS 未收到 server 的 ping,判定服务端半开,主动断开并触发重连。
138
+ * 半开(socket 已死但本端不知)时 server 的 close 不会到达,只有本端超时才能发现并自愈。
139
+ */
140
+ const checkServerAlive = () => {
141
+ if (closed || !ws)
142
+ return;
143
+ if (Date.now() - lastPingAt <= HEARTBEAT_CLIENT_TIMEOUT_MS)
144
+ return;
145
+ log.info(`代理心跳超时 ${HEARTBEAT_CLIENT_TIMEOUT_MS}ms 未收到服务端 ping,主动断开重连 ${wsUrl}`);
146
+ try {
147
+ ws.close();
148
+ }
149
+ catch { /* onclose 兜底重连 */ }
150
+ };
130
151
  const connect = () => {
131
152
  if (closed)
132
153
  return;
@@ -139,11 +160,47 @@ export function startAgent(url, resolveSession, listSessions) {
139
160
  return;
140
161
  }
141
162
  ws.onopen = () => {
142
- log.info(`代理已连接 ${wsUrl}`);
163
+ connSeq += 1;
164
+ // 连接事件跨进程按"第 N 次 + 地址"合并(批量实例首连 connSeq 均为 1,合并为一行 + 计数)
165
+ infoDedupShared(`agent-open:${wsUrl}:${connSeq}`, `代理已连接 ${wsUrl}(第 ${connSeq} 次)`, 10000);
143
166
  register();
167
+ // WS 建立后(含重连)补齐 server 缺失的运行状态:发现某终端当前有正在运行的命令时,
168
+ // 补播一次 cmdStart(携带命令文本),让 server 重建该终端的 streamBuf / busy 状态。
169
+ // 原因:server 内存 streamBuf 可能随其重启丢失,或已按"无 agent"降级;不补播则 server
170
+ // 手里没有运行状态,web 会显示"无 busy"。命令真实结束仍由生命周期 cmdDone 上报(当前 seq 标记)。
171
+ const running = [];
172
+ const all = [];
173
+ for (const { sessionID, name } of listSessions()) {
174
+ const k = `${sessionID}/${name}`;
175
+ all.push(k);
176
+ const s = resolveSession(sessionID, name);
177
+ if (!s?.hasRunningStream())
178
+ continue;
179
+ const command = s.getRunningCommand();
180
+ if (!command)
181
+ continue;
182
+ running.push({ sessionID, name, command });
183
+ send({ type: "cmdStart", sessionID, name, command, ts: Date.now() });
184
+ }
185
+ const tag = connSeq > 1 ? "重连" : "首连";
186
+ if (running.length) {
187
+ log.info(`代理${tag}发现 ${running.length} 个运行中会话,已补播 cmdStart: ${running.map((r) => `${r.sessionID}/${r.name}`).join(", ")}`);
188
+ }
189
+ else {
190
+ // 空态属周期性噪声,降到 debug(置 SSH_TOOL_DEBUG=1 才落盘);仍带上本进程会话 key,便于按主会话 ID 关联
191
+ debug(`代理${tag}未发现运行中会话(${wsUrl})本进程会话: ${all.length ? all.join(", ") : "无"}`);
192
+ }
144
193
  // 重连后清空 raw 游标:server 可能已重启(rawBuf 丢失)或本进程原地重连,
145
194
  // 首帧统一以"新代次"重发全量并带 reset,server 端 replace 语义保证不重复累积
146
195
  rawPosMap.clear();
196
+ // 启动心跳检测:server 每 HEARTBEAT_INTERVAL_MS 下发 ping,本端回 pong 并据此刷新 lastPingAt;
197
+ // 长时间收不到 ping(服务端半开)时由 checkServerAlive 主动断开重连
198
+ if (hbTimer) {
199
+ clearInterval(hbTimer);
200
+ hbTimer = null;
201
+ }
202
+ lastPingAt = Date.now();
203
+ hbTimer = setInterval(checkServerAlive, HEARTBEAT_INTERVAL_MS);
147
204
  timer = setInterval(pushStreams, 100);
148
205
  };
149
206
  ws.onmessage = (ev) => {
@@ -157,6 +214,12 @@ export function startAgent(url, resolveSession, listSessions) {
157
214
  const t = msg.type;
158
215
  if (!t)
159
216
  return;
217
+ // 应用层心跳:刷新存活时刻并回 pong(闭环即可,不触发重连)
218
+ if (t === "ping") {
219
+ lastPingAt = Date.now();
220
+ send({ type: "pong" });
221
+ return;
222
+ }
160
223
  if (t === "run-exec") {
161
224
  const sid = typeof msg.sessionID === "string" ? msg.sessionID : "";
162
225
  const name = typeof msg.name === "string" ? msg.name : "";
@@ -180,7 +243,7 @@ export function startAgent(url, resolveSession, listSessions) {
180
243
  // 不能走 send(那是给交互程序的输入),也不能直接 exec(hold busy 会 quick-fail)
181
244
  if ((execQueue.get(key)?.length ?? 0) > 0) {
182
245
  execQueue.get(key).push(command);
183
- log.info(`agent run-exec 序列中排队 ${sid}/${name}: ${command} (队列 ${execQueue.get(key).length})`);
246
+ log.info(`agent run-exec 序列中排队 ${sid}/${name}: ${describeSend(command)} (队列 ${execQueue.get(key).length})`);
184
247
  return;
185
248
  }
186
249
  if (session.hasRunningStream()) {
@@ -190,14 +253,14 @@ export function startAgent(url, resolveSession, listSessions) {
190
253
  q.push(command);
191
254
  else
192
255
  execQueue.set(key, [command]);
193
- log.info(`agent run-exec 排队 ${sid}/${name}: ${command} (队列 ${(execQueue.get(key) ?? []).length})`);
256
+ log.info(`agent run-exec 排队 ${sid}/${name}: ${describeSend(command)} (队列 ${(execQueue.get(key) ?? []).length})`);
194
257
  return;
195
258
  }
196
- log.info(`agent run-exec busy 超阈值按交互输入 ${sid}/${name}: ${command}`);
259
+ log.info(`agent run-exec busy 超阈值按交互输入 ${sid}/${name}: ${describeSend(command)}`);
197
260
  session.send(command + "\r");
198
261
  return;
199
262
  }
200
- log.info(`agent run-exec 直接执行 ${sid}/${name}: ${command}`);
263
+ log.info(`agent run-exec 直接执行 ${sid}/${name}: ${describeSend(command)}`);
201
264
  void execQueued(sid, name, command);
202
265
  return;
203
266
  }
@@ -226,9 +289,16 @@ export function startAgent(url, resolveSession, listSessions) {
226
289
  clearInterval(timer);
227
290
  timer = null;
228
291
  }
292
+ if (hbTimer) {
293
+ clearInterval(hbTimer);
294
+ hbTimer = null;
295
+ }
229
296
  if (closed)
230
297
  return;
231
- log.info("代理连接断开,2s 后重连");
298
+ // 断开时记录受影响的终端列表;重连每 2s 重试一次,用 10s 窗口去重避免刷屏(重复次数附在汇总行)。
299
+ // 去重键含受影响终端列表:同一批终端反复断连才合并,终端集合变化时立即另记一行,不丢会话归属信息。
300
+ const keys = listSessions().map(({ sessionID, name }) => `${sessionID}/${name}`);
301
+ infoDedup(`agent-close:${wsUrl}:${keys.join(",")}`, `代理连接断开(受影响终端: ${keys.length ? keys.join(", ") : "无"}),2s 后重连`, 10000);
232
302
  setTimeout(connect, 2000);
233
303
  };
234
304
  ws.onerror = () => { };
@@ -241,6 +311,10 @@ export function startAgent(url, resolveSession, listSessions) {
241
311
  clearInterval(timer);
242
312
  timer = null;
243
313
  }
314
+ if (hbTimer) {
315
+ clearInterval(hbTimer);
316
+ hbTimer = null;
317
+ }
244
318
  try {
245
319
  ws?.close();
246
320
  }
package/dist/agent.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,6 @@ import { type Lang } from "./i18n.js";
5
5
  export interface ExecResult {
6
6
  ok: boolean;
7
7
  output: string;
8
- interactive?: boolean;
9
8
  running?: boolean;
10
9
  submitted?: boolean;
11
10
  error?: string;
@@ -78,6 +77,11 @@ export declare abstract class BaseSession {
78
77
  readonly generation: string;
79
78
  /** 生命周期监听器(命令开始/完成事件,agent 转报 server) */
80
79
  private _lifecycle;
80
+ /**
81
+ * busy 状态翻转监听器(插件挂接):命令运行期间收到 true、结束写回 false,
82
+ * 供插件把实时 busy 同步到跨进程状态文件,避免命令执行前落盘的旧值一直"过期"。
83
+ */
84
+ private _busyListener;
81
85
  /**
82
86
  * 本次命令期间是否真实发送过中断(Ctrl-C)。
83
87
  * 中断判定不依赖"命令回显定位":超宽命令被 readline 折行重绘时回显会多出字符,
@@ -129,8 +133,10 @@ export declare abstract class BaseSession {
129
133
  }>;
130
134
  /**
131
135
  * 发送文本/按键到终端(交互场景:sudo 密码、确认、中断等)
132
- * 转义序列:\r 或 \n = 回车,\x03 = Ctrl-C,\x04 = Ctrl-D,\x1a = Ctrl-Z,\x1b = ESC
133
- * @param text 要发送的文本或按键序列
136
+ * 转义写法统一由 decodeTerminalEscapes 解码(见 src/escapes.ts):
137
+ * \xHH 任意字节、\t TAB、\r/\n 回车、\\ 字面反斜杠;非法/不完整写法原样保留。
138
+ * 前端直接发送的真实控制字节(0x7f/0x09/ESC 序列等)不含反斜杠,逐字节原样通过,同一实现两条路径共用。
139
+ * @param text 要发送的文本或按键序列(转义文本或真实字节)
134
140
  * @returns 是否发送成功
135
141
  */
136
142
  send(text: string): {
@@ -145,12 +151,26 @@ export declare abstract class BaseSession {
145
151
  * @param listener 回调(start 携带命令,done 携带退出码与结束时刻;null 表示清除)
146
152
  */
147
153
  setLifecycle(listener: ((ev: LifecycleEvent) => void) | null): void;
154
+ /**
155
+ * 设置 busy 状态翻转监听器(命令开始/结束/断连等每次 busy 翻转时回调):
156
+ * 供插件把最新 busy 同步到跨进程状态文件(server 拿不到 agent 状态回退读状态文件时,
157
+ * 读到的是命令运行期间的实时值,而非命令执行前落盘的过期值)。
158
+ * @param listener 回调(busy 目标值 + 翻转原因;null 表示清除)
159
+ */
160
+ setBusyListener(listener: ((busy: boolean, reason: string) => void) | null): void;
148
161
  /**
149
162
  * 设置是否保持 busy(排队命令序列期间为 true):
150
163
  * true 时中间命令完成不清 busy;置 false 时立即清 busy。
151
164
  * @param hold 是否保持
152
165
  */
153
166
  setHoldBusy(hold: boolean): void;
167
+ /**
168
+ * 更新终端 busy 状态:仅在值翻转时记一行(会话/终端/当前 seq/翻转原因),
169
+ * 供事后对齐状态时间线(busy 每次翻转都能对应到具体原因,不再出现"忙了却查不出为何")。
170
+ * @param next 目标 busy 值
171
+ * @param reason 翻转原因(cmdStart / cmdRunning / cmdDone / holdRelease / 会话关闭 / 断连补 done 等)
172
+ */
173
+ protected _setBusy(next: boolean, reason: string): void;
154
174
  /** 触发命令开始事件 */
155
175
  private _emitStart;
156
176
  /** 触发命令完成事件 */
@@ -298,7 +318,7 @@ export declare abstract class BaseSession {
298
318
  /** 等待探测输出稳定:buffer 有内容且 500ms 不再变化则返回,超时返回 null */
299
319
  private _waitProbeOutput;
300
320
  /**
301
- * 同步等待命令完成:轮询语法错误 / 完成标记 / 交互提示 / ^C 中断,超动画窗口仍未完成则转后台 watch。
321
+ * 同步等待命令完成:轮询语法错误 / 完成标记 / ^C 中断,超动画窗口仍未完成则转后台 watch。
302
322
  * @param startPos 捕获窗口起点(相对当前 buffer)
303
323
  * @param startTs 命令发起时刻(判定动画窗口用)
304
324
  * @returns kind=done 时 exitCode 为退出码(语法错误无标记可读,为 null);markerPos 缺省表示窗口取到缓冲区末尾;
@@ -308,17 +328,24 @@ export declare abstract class BaseSession {
308
328
  /** 后台监听:轮询 done 标记 / 语法错误 / ^C 中断 → 收集输出进 history + busy=false */
309
329
  private _startBackgroundWatch;
310
330
  /**
311
- * 统一命令完成收尾(供后台 watch 与 readBuffer 复用,避免两处收尾逻辑漂移):
331
+ * 统一命令完成收尾(供 exec 同步完成、后台 watch 与 readBuffer 复用,避免多处收尾逻辑漂移):
312
332
  * 提取/追加 history、补发 done 事件、定位 cursor、翻转 busy、清 running 上下文、停后台 watch。
313
333
  * @param startPos 命令捕获窗口起点(相对 buffer;watch 的捕获起点与 _runningStartPos 可能不同,须显式传入)
314
334
  * @param endPos 完成位置(marker/中断回显在 buffer 中的偏移)
315
335
  * @param exitCode 退出码(语法错误收尾为 null,^C 为 130)
316
336
  * @param command 原始命令(history 记录用)
317
337
  * @param out 已提取的纯输出;缺省时由 [startPos, endPos) 窗口经 _extractOutput 提取
338
+ * @param reason 完成来源(direct / direct(syntax) / watch / watch(syntax) / readBuffer),仅用于日志
318
339
  * @returns 本次完成窗口的原始片段(readBuffer 返回给调用方用)
319
340
  */
320
341
  private _completeRunning;
321
342
  protected _clearRunningContext(): void;
322
343
  private _truncate;
344
+ /**
345
+ * 日志身份前缀 `<主会话ID>/<终端名>`(会话/终端上下文的日志行统一带上,便于 `grep ses_xxx` 过滤);
346
+ * 需要命令坐标的行再自行追加 ` seq=<this._runningSeq>`。
347
+ * @returns 形如 `ses_abc123/default` 的标签
348
+ */
349
+ protected get _logTag(): string;
323
350
  }
324
351
  //# sourceMappingURL=base-session.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-session.d.ts","sourceRoot":"","sources":["../src/base-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-session.d.ts","sourceRoot":"","sources":["../src/base-session.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C,OAAO,EAAoF,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACxI,OAAO,EAAM,KAAK,IAAI,EAAE,MAAM,WAAW,CAAA;AAEzC,aAAa;AACb,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,OAAO,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,6DAA6D;AAC7D,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AA4D7E,qBAAqB;AACrB,8BAAsB,WAAW;IA0E7B,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM;IAEpC,SAAS,CAAC,QAAQ,CAAC,IAAI;IACvB,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI;IAC9B,+DAA+D;IAC/D,SAAS,CAAC,QAAQ,CAAC,yBAAyB,EAAE,MAAM;IA9EtD,SAAS,CAAC,UAAU,UAAQ;IAC5B,SAAS,CAAC,WAAW,UAAQ;IAC7B;;;OAGG;IACH,OAAO,CAAC,SAAS,CAAQ;IACzB,SAAS,CAAC,OAAO,SAAK;IACtB,SAAS,CAAC,YAAY,SAAI;IAC1B,SAAS,CAAC,WAAW,SAAI;IACzB,SAAS,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAO;IAChD,SAAS,CAAC,eAAe,SAAK;IAC9B,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,GAAG,IAAI,CAAO;IACnE,kDAAkD;IAClD,OAAO,CAAC,OAAO,CAAI;IACnB,uCAAuC;IACvC,OAAO,CAAC,WAAW,CAAI;IACvB;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAK;IACvB,gDAAgD;IAChD,SAAS,CAAC,OAAO,SAAI;IACrB,mDAAmD;IACnD,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAO;IAC1C,uBAAuB;IACvB,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAO;IAC9C,yEAAyE;IACzE,SAAS,CAAC,QAAQ,SAAO;IACzB,SAAS,CAAC,OAAO,UAAQ;IACzB,uCAAuC;IACvC,OAAO,CAAC,eAAe,CAAI;IAC3B,qDAAqD;IACrD,OAAO,CAAC,OAAO,CAAK;IACpB,4BAA4B;IAC5B,OAAO,CAAC,aAAa,CAAI;IACzB,4BAA4B;IAC5B,OAAO,CAAC,SAAS,CAAI;IACrB,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAA;IAC3C;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAe;IAC1C,yCAAyC;IACzC,OAAO,CAAC,UAAU,CAA8C;IAChE;;;OAGG;IACH,OAAO,CAAC,aAAa,CAAyD;IAC9E;;;;;OAKG;IACH,OAAO,CAAC,cAAc,CAAQ;IAC9B;;;;;OAKG;IACH,OAAO,CAAC,UAAU,CAAoB;IACtC;;;OAGG;IACH,OAAO,CAAC,eAAe,CAA8C;IAErE,YACqB,SAAS,EAAE,MAAM,EACpC,OAAO,EAAE,cAAc,EACJ,IAAI,SAAY,EAChB,KAAK,GAAE,IAAW;IACrC,+DAA+D;IAC5C,yBAAyB,GAAE,MAAoD,EAGnG;IAED,qDAAqD;IACrD,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7C,wDAAwD;IACxD,SAAS,CAAC,QAAQ,CAAC,eAAe,IAAI,IAAI,CAAA;IAC1C,mCAAmC;IACnC,SAAS,KAAK,YAAY,IAAI,OAAO,CAAC,UAAU,CAAC,CAAc;IAE/D;;;;OAIG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAUjD;IAED;;;;OAIG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CA4C/C;IAED;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAqB3E;IAED;;;;;;;OAOG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAelD;IAED,UAAU,IAAI,cAAc,CAAyB;IAErD,gBAAgB,IAAI,MAAM,CAGzB;IAED,iBAAiB,IAAI,MAAM,CAE1B;IAED;;;OAGG;IACH,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,cAAc,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAElE;IAED;;;;;OAKG;IACH,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAEhF;IAED;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAG/B;IAED;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAMtD;IAED,eAAe;IACf,OAAO,CAAC,UAAU;IAIlB,eAAe;IACf,OAAO,CAAC,SAAS;IAIjB,gBAAgB,IAAI,OAAO,CAE1B;IAED;;;;OAIG;IACH,gBAAgB,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAqBlD;IAED,qBAAqB;IACrB,KAAK,IAAI,IAAI,CASZ;IAED,kCAAkC;IAClC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAIzE;IAED,6BAA6B;IAC7B,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAA;IAEpC;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAIlB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,eAAe;IAKvB;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAInB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,aAAa;IAIrB;;;;;;;;;OASG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,cAAc;IAsCtB,0CAA0C;IAC1C,OAAO,CAAC,aAAa;IA2BrB,iCAAiC;IACjC,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAgB1C;IAED;+DAC2D;IAC3D,UAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAU1E;IAED,mDAAmD;YACrC,gBAAgB;IAe9B;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAuDvB,kEAAkE;IAClE,OAAO,CAAC,qBAAqB;IAmD7B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,gBAAgB;IAgBxB,SAAS,CAAC,oBAAoB,IAAI,IAAI,CAOrC;IAED,OAAO,CAAC,SAAS;IAKjB;;;;OAIG;IACH,SAAS,KAAK,OAAO,IAAI,MAAM,CAE9B;CACF"}
@@ -3,13 +3,12 @@
3
3
  // 子类仅需实现:连接建立(connect)、数据写入(_write)、传输层清理(_closeTransport)、状态字段(getStatus)
4
4
  import { randomUUID } from "node:crypto";
5
5
  import { ANIMATION_WINDOW_MS, MAX_OUTPUT_LEN, RAW_LOG_MAX, DONE_TAG, SYNTAX_QUIET_MS, SYNTAX_MAX_WAIT_MS, INTERRUPT_PROBE_INTERVAL_DEFAULT_SEC, } from "./constants.js";
6
- import log from "./log.js";
6
+ import log, { debug, describeSend, tailLines, tailSummary } from "./log.js";
7
+ import { decodeTerminalEscapes } from "./escapes.js";
7
8
  import { SessionHistory } from "./history.js";
8
9
  import { toModelText, extractOutputStart, stripTrailingPromptLine } from "./utils.js";
9
10
  import { detectLastDoneMarker, stripMarkers, detectInterrupt, detectSyntaxError, adapters } from "./shell-adapter.js";
10
11
  import { tr } from "./i18n.js";
11
- /** 交互触发词(sudo 密码 / 分页器 / 确认提示),含中英文 */
12
- const INTERACTIVE_RE = /(\[sudo\] password for|password for \S+:|\*\*\*\s*$|Password:|密码:|--More--|\(END\)|\[y\/N\]|\[Y\/n\]|yes\/no|是\/否)/i;
13
12
  /** buffer 最大长度(未消费输出超限时截断头部,防内存膨胀) */
14
13
  const MAX_BUFFER_LEN = 2 * 1024 * 1024;
15
14
  /** Shell 探测等待超时 */
@@ -117,6 +116,11 @@ export class BaseSession {
117
116
  generation = randomUUID();
118
117
  /** 生命周期监听器(命令开始/完成事件,agent 转报 server) */
119
118
  _lifecycle = null;
119
+ /**
120
+ * busy 状态翻转监听器(插件挂接):命令运行期间收到 true、结束写回 false,
121
+ * 供插件把实时 busy 同步到跨进程状态文件,避免命令执行前落盘的旧值一直"过期"。
122
+ */
123
+ _busyListener = null;
120
124
  /**
121
125
  * 本次命令期间是否真实发送过中断(Ctrl-C)。
122
126
  * 中断判定不依赖"命令回显定位":超宽命令被 readline 折行重绘时回显会多出字符,
@@ -174,42 +178,30 @@ export class BaseSession {
174
178
  if (!this._ready())
175
179
  return { ok: false, output: "", error: tr("err_not_connected", this._lang) };
176
180
  if (this._remoteBusy) {
177
- log.info(`exec quick-fail busy: ${command} (busy=${this._remoteBusy})`);
181
+ log.info(`exec quick-fail busy ${this._logTag}: ${tailLines(command, 3)} (busy=${this._remoteBusy})`);
178
182
  return { ok: false, output: "", error: tr("cmd_busy", this._lang) };
179
183
  }
180
184
  if (this._adapter?.hasOpenContinuation(command)) {
181
- log.info(`exec quick-fail open continuation: ${command}`);
185
+ log.info(`exec quick-fail open continuation ${this._logTag}: ${tailLines(command, 3)}`);
182
186
  return { ok: false, output: "", error: tr("cmd_continuation", this._lang) };
183
187
  }
184
188
  this._beginCapture(command);
185
189
  const captureStart = this._buffer.length;
186
190
  this._write(this._composeCommand(command));
187
191
  const outcome = await this._waitCompletion(0, startTs);
188
- log.info(`exec ${command} -> ${outcome.kind}${outcome.kind === "running" ? "" : " markerPos=" + outcome.markerPos} (busy=${this._remoteBusy})`);
192
+ log.info(`exec ${this._logTag} seq=${this._runningSeq} ${tailLines(command, 3)} -> ${outcome.kind}${outcome.kind === "running" ? "" : " markerPos=" + outcome.markerPos + " exitCode=" + outcome.exitCode + " duration=" + (Date.now() - startTs) + "ms"} (busy=${this._remoteBusy})`);
189
193
  switch (outcome.kind) {
190
194
  case "done": {
191
- this._remoteBusy = this._holdBusy; // 排队序列中间命令:保持 busy 到序列结束
192
- const raw = this._buffer.slice(captureStart, outcome.markerPos ?? this._buffer.length);
193
- this._cursor = Math.max(0, outcome.markerPos ?? this._buffer.length);
194
- const out = this._extractOutput(raw, command, outcome.syntaxError === true);
195
- this._history.append(command, out, this._runningStartTs, Date.now(), outcome.exitCode ?? undefined);
196
- this._emitDone(outcome.exitCode ?? null, Date.now(), out);
197
- this._stopInterruptCycle("命令完成");
198
- this._clearRunningContext();
195
+ // 同步完成:复用 _completeRunning 统一收尾(history/done/busy/[run] 结束日志/清上下文/停 watch),
196
+ // 避免此处二次实现导致结束日志缺失与收尾逻辑漂移;syntaxError 收尾按 syntaxMode 先提取输出再传入
197
+ const endPos = outcome.markerPos ?? this._buffer.length;
198
+ const out = this._extractOutput(this._buffer.slice(captureStart, endPos), command, outcome.syntaxError === true);
199
+ this._completeRunning(captureStart, endPos, outcome.exitCode ?? null, command, out, outcome.syntaxError ? "direct(syntax)" : "direct");
199
200
  return { ok: true, output: this._truncate(await toModelText(out)), command, duration: Date.now() - startTs, ...this._extraResult };
200
201
  }
201
- case "interactive": {
202
- // 交互程序(sudo 密码 / 确认提示):命令仍在等待用户输入,
203
- // 保留 running 上下文与 busy 状态,转后台 watch 持续监听完成标记;
204
- // 用户 send 输入后命令完成时由 watch 完整收集输出并翻转 busy(防新命令被当 exec 塞进运行中 shell)
205
- const raw = this._buffer.slice(captureStart);
206
- const out = this._extractOutput(raw, command);
207
- this._startBackgroundWatch(captureStart, command);
208
- return { ok: true, output: this._truncate(await toModelText(out)), interactive: true, command, duration: Date.now() - startTs, ...this._extraResult };
209
- }
210
202
  case "running": {
211
203
  this._runningStartPos = 0;
212
- this._remoteBusy = true;
204
+ this._setBusy(true, "cmdRunning");
213
205
  this._cursor = this._buffer.length;
214
206
  this._startBackgroundWatch(captureStart, command);
215
207
  // 等待后台 watch 完成(不设硬超时,模型可通过 Ctrl-C 中断)
@@ -241,7 +233,7 @@ export class BaseSession {
241
233
  const marker = detectLastDoneMarker(this._buffer, this._runningStartPos, this._runningSeq);
242
234
  if (marker.done) {
243
235
  // 与后台 watch 完成路径复用同一收尾(history/done/busy/停 watch),避免 busy 卡死
244
- const raw = this._completeRunning(this._runningStartPos, marker.pos, marker.exitCode, this._runningCommand);
236
+ const raw = this._completeRunning(this._runningStartPos, marker.pos, marker.exitCode, this._runningCommand, undefined, "readBuffer");
245
237
  // readBuffer 语义:读取后消费标记及之前部分(缓冲区坐标重置,cursor 归零)
246
238
  this._buffer = this._buffer.slice(marker.pos);
247
239
  this._cursor = 0;
@@ -260,21 +252,18 @@ export class BaseSession {
260
252
  }
261
253
  /**
262
254
  * 发送文本/按键到终端(交互场景:sudo 密码、确认、中断等)
263
- * 转义序列:\r 或 \n = 回车,\x03 = Ctrl-C,\x04 = Ctrl-D,\x1a = Ctrl-Z,\x1b = ESC
264
- * @param text 要发送的文本或按键序列
255
+ * 转义写法统一由 decodeTerminalEscapes 解码(见 src/escapes.ts):
256
+ * \xHH 任意字节、\t TAB、\r/\n 回车、\\ 字面反斜杠;非法/不完整写法原样保留。
257
+ * 前端直接发送的真实控制字节(0x7f/0x09/ESC 序列等)不含反斜杠,逐字节原样通过,同一实现两条路径共用。
258
+ * @param text 要发送的文本或按键序列(转义文本或真实字节)
265
259
  * @returns 是否发送成功
266
260
  */
267
261
  send(text) {
268
262
  if (!this._connected)
269
263
  return { ok: false, error: tr("err_not_connected", this._lang) };
270
- const payload = text
271
- .replace(/\\x1b/gi, "\x1b")
272
- .replace(/\\x03/gi, "\x03")
273
- .replace(/\\x04/gi, "\x04")
274
- .replace(/\\x1a/gi, "\x1a")
275
- .replace(/\\r/g, "\r")
276
- .replace(/\\n/g, "\r");
277
- log.info(`send -> ${JSON.stringify(payload)} (connected=${this._connected}, busy=${this._remoteBusy})`);
264
+ const payload = decodeTerminalEscapes(text);
265
+ // 只记长度与类型,绝不打印载荷内容(用户会把密码/密钥粘进命令框或按键)
266
+ log.info(`send ${this._logTag} -> ${describeSend(payload)} (connected=${this._connected}, busy=${this._remoteBusy})`);
278
267
  // 真实中断输入:标记本次命令已发过 Ctrl-C;写完中断键后进入中断周期,
279
268
  // 周期内**立即**补发首条探针、之后按配置间隔(默认 5s)补发探针标记来收尾被中断的命令。
280
269
  // 防抖:周期内重复 Ctrl-C 被 _startInterruptCycle 抑制(不重启周期、不额外补探针),
@@ -304,6 +293,15 @@ export class BaseSession {
304
293
  setLifecycle(listener) {
305
294
  this._lifecycle = listener;
306
295
  }
296
+ /**
297
+ * 设置 busy 状态翻转监听器(命令开始/结束/断连等每次 busy 翻转时回调):
298
+ * 供插件把最新 busy 同步到跨进程状态文件(server 拿不到 agent 状态回退读状态文件时,
299
+ * 读到的是命令运行期间的实时值,而非命令执行前落盘的过期值)。
300
+ * @param listener 回调(busy 目标值 + 翻转原因;null 表示清除)
301
+ */
302
+ setBusyListener(listener) {
303
+ this._busyListener = listener;
304
+ }
307
305
  /**
308
306
  * 设置是否保持 busy(排队命令序列期间为 true):
309
307
  * true 时中间命令完成不清 busy;置 false 时立即清 busy。
@@ -312,7 +310,24 @@ export class BaseSession {
312
310
  setHoldBusy(hold) {
313
311
  this._holdBusy = hold;
314
312
  if (!hold)
315
- this._remoteBusy = false;
313
+ this._setBusy(false, "holdRelease");
314
+ }
315
+ /**
316
+ * 更新终端 busy 状态:仅在值翻转时记一行(会话/终端/当前 seq/翻转原因),
317
+ * 供事后对齐状态时间线(busy 每次翻转都能对应到具体原因,不再出现"忙了却查不出为何")。
318
+ * @param next 目标 busy 值
319
+ * @param reason 翻转原因(cmdStart / cmdRunning / cmdDone / holdRelease / 会话关闭 / 断连补 done 等)
320
+ */
321
+ _setBusy(next, reason) {
322
+ if (this._remoteBusy === next)
323
+ return;
324
+ this._remoteBusy = next;
325
+ log.info(`[busy] ${this._logTag} seq=${this._runningSeq} busy=${next} reason=${reason}`);
326
+ // 通知插件同步状态文件(busy 已更新,getStatus 读到新值);监听器异常不打断执行
327
+ try {
328
+ this._busyListener?.(next, reason);
329
+ }
330
+ catch { /* 监听器异常不打断执行 */ }
316
331
  }
317
332
  /** 触发命令开始事件 */
318
333
  _emitStart(command, ts) {
@@ -370,7 +385,7 @@ export class BaseSession {
370
385
  this._stopInterruptCycle("会话关闭");
371
386
  this._closeTransport();
372
387
  this._connected = false;
373
- this._remoteBusy = false;
388
+ this._setBusy(false, "会话关闭");
374
389
  this._history.dispose();
375
390
  }
376
391
  /** 增量读取连续原始字节流:返回自 pos 之后的新增字节 */
@@ -443,7 +458,7 @@ export class BaseSession {
443
458
  const seq = this._runningSeq;
444
459
  this._probeSeqs.add(seq);
445
460
  const probe = this._composeProbe(seq);
446
- log.info(`中断探针 -> seq=${seq} ${JSON.stringify(probe)} (busy=${this._remoteBusy})`);
461
+ debug(`中断探针 ${this._logTag} seq=${seq} ${JSON.stringify(probe)} (busy=${this._remoteBusy})`);
447
462
  this._write(probe);
448
463
  }
449
464
  /**
@@ -463,7 +478,7 @@ export class BaseSession {
463
478
  return;
464
479
  const seq = this._runningSeq;
465
480
  const intervalSec = this._interruptProbeIntervalMs / 1000;
466
- log.info(`中断周期开始 -> seq=${seq},已立即补发首条探针,之后每 ${intervalSec}s 一条`);
481
+ log.info(`中断周期开始 ${this._logTag} seq=${seq},已立即补发首条探针,之后每 ${intervalSec}s 一条`);
467
482
  // 写完 \x03 后立即补发首条探针(t0),后续 setInterval 自此刻起按间隔补发(t0+N、t0+2N…)
468
483
  this._sendInterruptProbe();
469
484
  this._interruptTimer = setInterval(() => { this._onInterruptTick(); }, this._interruptProbeIntervalMs);
@@ -491,7 +506,7 @@ export class BaseSession {
491
506
  return;
492
507
  clearInterval(this._interruptTimer);
493
508
  this._interruptTimer = null;
494
- log.info(`中断周期结束 -> ${reason}`);
509
+ log.info(`中断周期结束 ${this._logTag} seq=${this._runningSeq},原因=${reason}`);
495
510
  }
496
511
  /**
497
512
  * 从可见输出中剔除中断探针留下的痕迹(探针命令的回显)。
@@ -619,8 +634,9 @@ export class BaseSession {
619
634
  this._interruptSent = false; // 新命令:清除上一条/空闲期发出的 Ctrl-C 标记
620
635
  this._cmdSeq += 1;
621
636
  this._runningSeq = this._cmdSeq;
622
- this._remoteBusy = true;
637
+ this._setBusy(true, "cmdStart");
623
638
  this._lastActive = Date.now();
639
+ log.info(`[run] 开始 ${this._logTag} seq=${this._runningSeq} startPos=0 cmd=${JSON.stringify(command.slice(0, 120))}`);
624
640
  this._emitStart(command, this._runningStartTs);
625
641
  }
626
642
  /** 追加输出字节:维护业务缓冲 + 连续原始流 ring */
@@ -674,7 +690,7 @@ export class BaseSession {
674
690
  return this._buffer.length > 0 ? this._buffer : null;
675
691
  }
676
692
  /**
677
- * 同步等待命令完成:轮询语法错误 / 完成标记 / 交互提示 / ^C 中断,超动画窗口仍未完成则转后台 watch。
693
+ * 同步等待命令完成:轮询语法错误 / 完成标记 / ^C 中断,超动画窗口仍未完成则转后台 watch。
678
694
  * @param startPos 捕获窗口起点(相对当前 buffer)
679
695
  * @param startTs 命令发起时刻(判定动画窗口用)
680
696
  * @returns kind=done 时 exitCode 为退出码(语法错误无标记可读,为 null);markerPos 缺省表示窗口取到缓冲区末尾;
@@ -714,11 +730,6 @@ export class BaseSession {
714
730
  return;
715
731
  }
716
732
  }
717
- if (INTERACTIVE_RE.test(this._buffer.slice(startPos))) {
718
- clearInterval(timer);
719
- resolve({ kind: "interactive" });
720
- return;
721
- }
722
733
  // 完成判定(权威且唯一):命令后追加的 printf 输出 <SSH_DONE:seq:code>。
723
734
  // marker 自带唯一 seq,从命令起点直接搜索即可(不依赖命令回显定位)。
724
735
  // ^C 回显不作为完成依据:捕获/忽略 SIGINT 的程序(mysql/REPL)同样回显 ^C 但命令未结束,
@@ -749,9 +760,12 @@ export class BaseSession {
749
760
  this._watchTimer = setInterval(() => {
750
761
  if (!this._connected) {
751
762
  // 断连:命令视为结束(可能从未完成),补发 done 防 server busy 卡死
752
- if (this._runningCommand)
763
+ if (this._runningCommand) {
753
764
  this._emitDone(null, Date.now());
754
- this._remoteBusy = false;
765
+ // 断连收尾也是"结束":补记 [run] 结束;不附 tail(输出窗口从未定案,无可信尾部可摘)
766
+ log.info(`[run] 结束 ${this._logTag} seq=${this._runningSeq} endPos=${this._buffer.length} exitCode=null duration=${Date.now() - this._runningStartTs}ms reason=disconnect`);
767
+ }
768
+ this._setBusy(false, "断连补 done");
755
769
  this._clearRunningContext();
756
770
  if (this._watchTimer)
757
771
  clearInterval(this._watchTimer);
@@ -783,29 +797,33 @@ export class BaseSession {
783
797
  }
784
798
  if (now - syntaxQuietAt >= SYNTAX_QUIET_MS || now - syntaxSeenAt >= SYNTAX_MAX_WAIT_MS) {
785
799
  const out = this._extractOutput(this._buffer.slice(startPos), command, true);
786
- this._completeRunning(startPos, this._buffer.length, null, command, out);
800
+ this._completeRunning(startPos, this._buffer.length, null, command, out, "watch(syntax)");
787
801
  return;
788
802
  }
789
803
  }
790
804
  }, 200);
791
805
  }
792
806
  /**
793
- * 统一命令完成收尾(供后台 watch 与 readBuffer 复用,避免两处收尾逻辑漂移):
807
+ * 统一命令完成收尾(供 exec 同步完成、后台 watch 与 readBuffer 复用,避免多处收尾逻辑漂移):
794
808
  * 提取/追加 history、补发 done 事件、定位 cursor、翻转 busy、清 running 上下文、停后台 watch。
795
809
  * @param startPos 命令捕获窗口起点(相对 buffer;watch 的捕获起点与 _runningStartPos 可能不同,须显式传入)
796
810
  * @param endPos 完成位置(marker/中断回显在 buffer 中的偏移)
797
811
  * @param exitCode 退出码(语法错误收尾为 null,^C 为 130)
798
812
  * @param command 原始命令(history 记录用)
799
813
  * @param out 已提取的纯输出;缺省时由 [startPos, endPos) 窗口经 _extractOutput 提取
814
+ * @param reason 完成来源(direct / direct(syntax) / watch / watch(syntax) / readBuffer),仅用于日志
800
815
  * @returns 本次完成窗口的原始片段(readBuffer 返回给调用方用)
801
816
  */
802
- _completeRunning(startPos, endPos, exitCode, command, out) {
817
+ _completeRunning(startPos, endPos, exitCode, command, out, reason = "watch") {
803
818
  const raw = this._buffer.slice(startPos, endPos);
804
819
  const output = out ?? this._extractOutput(raw, command);
805
820
  this._history.append(command, output, this._runningStartTs, undefined, exitCode ?? undefined);
806
821
  this._emitDone(exitCode, Date.now(), output);
807
822
  this._cursor = Math.max(startPos, endPos);
808
- this._remoteBusy = this._holdBusy; // 排队序列中间命令:保持 busy 到序列结束
823
+ this._setBusy(this._holdBusy, this._holdBusy ? "cmdDone(holdBusy)" : "cmdDone"); // 排队序列中间命令:保持 busy 到序列结束
824
+ // 结束日志附"有界输出尾部":仅当输出 > 3 行时附加末 3 行(单行、换行转义),短输出不重复;关闭时不拼装
825
+ const outTail = tailSummary(output);
826
+ log.info(`[run] 结束 ${this._logTag} seq=${this._runningSeq} endPos=${endPos} exitCode=${exitCode} duration=${Date.now() - this._runningStartTs}ms reason=${reason}${outTail ? ` tail=${outTail}` : ""}`);
809
827
  this._stopInterruptCycle("命令完成");
810
828
  this._clearRunningContext();
811
829
  if (this._watchTimer)
@@ -825,5 +843,13 @@ export class BaseSession {
825
843
  return s;
826
844
  return `${s.slice(0, MAX_OUTPUT_LEN)}\n... [output truncated, ${s.length} chars total]`;
827
845
  }
846
+ /**
847
+ * 日志身份前缀 `<主会话ID>/<终端名>`(会话/终端上下文的日志行统一带上,便于 `grep ses_xxx` 过滤);
848
+ * 需要命令坐标的行再自行追加 ` seq=<this._runningSeq>`。
849
+ * @returns 形如 `ses_abc123/default` 的标签
850
+ */
851
+ get _logTag() {
852
+ return `${this.sessionID}/${this.name}`;
853
+ }
828
854
  }
829
855
  //# sourceMappingURL=base-session.js.map