@xiaoqiong0v0/opencode-ssh-tool 0.5.1 → 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 +24 -14
  19. package/dist/i18n.d.ts.map +1 -1
  20. package/dist/i18n.js +37 -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 +417 -275
  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 +29 -10
  56. package/dist/utils.js.map +1 -1
  57. package/dist/web/app.css +12 -7
  58. package/dist/web/app.js +11 -2
  59. package/dist/web/index.html +6 -3
  60. package/dist/web/xterm.css +218 -0
  61. package/package.json +3 -2
@@ -1,6 +1,7 @@
1
1
  // LocalSession:基于 Bun.Terminal 的本地/容器 PTY 会话(本地 shell、docker exec -it 等)
2
2
  // 连接建立与传输层实现;命令执行/后台监听/标记检测继承自 BaseSession
3
3
  import { INJECT_TIMEOUT_MS, PTY_COLS, PTY_ROWS } from "./constants.js";
4
+ import { tr } from "./i18n.js";
4
5
  import { BaseSession } from "./base-session.js";
5
6
  import log from "./log.js";
6
7
  /** 命令行字符串拆分为参数数组(Bun.spawn 要求数组形式;支持双/单引号分组) */
@@ -16,7 +17,6 @@ export class LocalSession extends BaseSession {
16
17
  _term = null;
17
18
  _proc = null;
18
19
  _program = "";
19
- _statusCmd = "local_status";
20
20
  get _extraResult() { return {}; }
21
21
  _ready() {
22
22
  return this._connected && this._term !== null && this._adapter !== null;
@@ -47,9 +47,18 @@ export class LocalSession extends BaseSession {
47
47
  rows: PTY_ROWS,
48
48
  name: "xterm-256color",
49
49
  data: (_t, d) => this._appendBuffer(new TextDecoder().decode(d)),
50
- exit: () => { this._connected = false; this._remoteBusy = false; },
50
+ exit: (_t, exitCode, signal) => {
51
+ this._connected = false;
52
+ this._remoteBusy = false;
53
+ log.warn(`本地终端 PTY 退出 ${opts.command} (session ${this.sessionID}, term ${this.name}, exit=${exitCode}, signal=${signal})`);
54
+ },
51
55
  });
52
56
  const proc = Bun.spawn(splitCommand(opts.command), { terminal: term, cwd: opts.cwd });
57
+ // 监听子进程退出:docker exec/wsl 前端进程退出时此回调触发,用于定位"无 close() 日志却掉线"的场景
58
+ const bootAt = Date.now();
59
+ proc.exited.then((code) => {
60
+ log.error(`本地终端子进程退出 ${opts.command} (session ${this.sessionID}, term ${this.name}, code=${code}, boot2exit=${Date.now() - bootAt}ms)`);
61
+ }).catch(() => { });
53
62
  this._term = term;
54
63
  this._proc = proc;
55
64
  this._program = opts.command;
@@ -68,15 +77,10 @@ export class LocalSession extends BaseSession {
68
77
  if (!adapter) {
69
78
  log.error("Shell 探测超时,连接终止");
70
79
  this.close();
71
- return { ok: false, error: "Shell 探测超时(30s 内 shell 未就绪),连接终止" };
80
+ return { ok: false, error: tr("shell_probe_timeout", this._lang) };
72
81
  }
73
82
  this._adapter = adapter;
74
83
  log.info(`Shell 探测结果: ${this._adapter.name}`);
75
- const injected = await this._injectAndSettle(deadline);
76
- if (!injected) {
77
- this.close();
78
- return { ok: false, error: "完成标记注入超时(shell 未就绪或启动过慢),连接终止" };
79
- }
80
84
  this._buffer = "";
81
85
  this._cursor = 0;
82
86
  return { ok: true };
@@ -1 +1 @@
1
- {"version":3,"file":"local-session.js","sourceRoot":"","sources":["../src/local-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-session.js","sourceRoot":"","sources":["../src/local-session.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,2CAA2C;AAE3C,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACtE,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAA;AAE9B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,GAAG,MAAM,UAAU,CAAA;AAY1B,gDAAgD;AAChD,SAAS,YAAY,CAAC,GAAW;IAC/B,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,MAAM,EAAE,GAAG,4BAA4B,CAAA;IACvC,IAAI,CAAyB,CAAA;IAC7B,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1D,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,OAAO,YAAa,SAAQ,WAAW;IACnC,KAAK,GAAwB,IAAI,CAAA;IACjC,KAAK,GAA0B,IAAI,CAAA;IACnC,QAAQ,GAAG,EAAE,CAAA;IAErB,IAAc,YAAY,KAA0B,OAAO,EAAE,CAAA,CAAC,CAAC;IAErD,MAAM;QACd,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAA;IACzE,CAAC;IAES,MAAM,CAAC,IAAY;QAC3B,IAAI,CAAC,KAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAES,eAAe;QACvB,IAAI,CAAC;YAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAA;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC;YAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAA;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QACjD,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;IACzD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,IAAuC;QACnD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC;gBAC5B,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAChE,IAAI,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE;oBAC7B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAA;oBACvB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;oBACxB,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,OAAO,aAAa,IAAI,CAAC,SAAS,UAAU,IAAI,CAAC,IAAI,UAAU,QAAQ,YAAY,MAAM,GAAG,CAAC,CAAA;gBAC5H,CAAC;aACF,CAAC,CAAA;YACF,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;YACrF,gEAAgE;YAChE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;gBACxB,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,OAAO,aAAa,IAAI,CAAC,SAAS,UAAU,IAAI,CAAC,IAAI,UAAU,IAAI,eAAe,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,KAAK,CAAC,CAAA;YACzI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAgB,CAAC,CAAC,CAAA;YAChC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;YACjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;YACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAA;YAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;YACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAC9B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAC7B,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;YAC5C,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;YACjB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAA;YAChB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAA;YAC5B,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,aAAa,IAAI,CAAC,SAAS,UAAU,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;YAEjF,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;gBAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;YAEzD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,iBAAiB,CAAA;YAC/C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;YAChD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;gBAC5B,IAAI,CAAC,KAAK,EAAE,CAAA;gBACZ,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,qBAAqB,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAA;YACpE,CAAC;YACD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;YACvB,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;YAE7C,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;YACjB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAA;YAChB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;QACrB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YACtD,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAA;YAC1C,IAAI,CAAC,KAAK,EAAE,CAAA;YACZ,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAA;QAClC,CAAC;IACH,CAAC;IAED,SAAS;QACP,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,IAAI,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW;YACzC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;YAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,WAAW,EAAE,IAAI,CAAC,YAAY;SAC/B,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=server-entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-entry.d.ts","sourceRoot":"","sources":["../src/server-entry.ts"],"names":[],"mappings":""}
@@ -0,0 +1,61 @@
1
+ // 独立 HTTP 服务子进程入口:脱离任何 opencode 插件进程存活,
2
+ // 从状态文件+历史文件读取会话数据,并接受插件进程作为"代理"注册以转发交互命令。
3
+ import { startServer } from "./server.js";
4
+ import { listAllSessions } from "./session-store.js";
5
+ import { loadConfig } from "./config.js";
6
+ import { getWebLang } from "./i18n.js";
7
+ import { SERVER_PROTO_VERSION } from "./constants.js";
8
+ import { writeFileSync } from "node:fs";
9
+ import { join } from "node:path";
10
+ import log from "./log.js";
11
+ const INFO_FILE = "server.json";
12
+ /** 解析 --key value 形式参数 */
13
+ function arg(name) {
14
+ const i = process.argv.indexOf(`--${name}`);
15
+ return i >= 0 ? process.argv[i + 1] : undefined;
16
+ }
17
+ async function main() {
18
+ const cfg = loadConfig();
19
+ const portArg = arg("port");
20
+ const port = portArg ? parseInt(portArg, 10) : cfg.server.port;
21
+ const dir = arg("dir") ?? "";
22
+ // Web 界面语言:--lang(插件传入的 webLang)优先,否则 SSH_WEB_LANG / 配置 webLang
23
+ const lang = arg("lang") === "zh" ? "zh" : arg("lang") === "en" ? "en" : getWebLang(cfg.webLang);
24
+ const streamTickMs = cfg.server.streamTickMs ?? 100;
25
+ const idleShutdownMs = cfg.server.idleShutdownMs ?? 0;
26
+ const getSessions = () => [];
27
+ const handle = await startServer(port, getSessions, dir, lang, streamTickMs);
28
+ // 写服务信息文件(供其他进程探测复用;proto 标识代码/协议版本,版本不符会触发重启)
29
+ writeFileSync(join(dir, INFO_FILE), JSON.stringify({ port: handle.port, host: "127.0.0.1", pid: process.pid, startedAt: Date.now(), proto: SERVER_PROTO_VERSION }), "utf8");
30
+ log.info(`独立服务启动 ${handle.url} (pid ${process.pid})`);
31
+ // 空闲自动关闭:无任何 connected 会话持续 idleShutdownMs 后退出(0=不关闭)
32
+ if (idleShutdownMs > 0) {
33
+ let idleSince = Date.now();
34
+ setInterval(() => {
35
+ const anyConnected = listAllSessions(dir).some((s) => s.connected);
36
+ if (anyConnected) {
37
+ idleSince = Date.now();
38
+ return;
39
+ }
40
+ if (Date.now() - idleSince >= idleShutdownMs) {
41
+ log.info(`空闲超过 ${idleShutdownMs}ms,独立服务自动关闭`);
42
+ handle.close();
43
+ process.exit(0);
44
+ }
45
+ }, Math.min(30000, Math.max(5000, idleShutdownMs)));
46
+ }
47
+ const shutdown = () => {
48
+ try {
49
+ handle.close();
50
+ }
51
+ catch { /* ignore */ }
52
+ process.exit(0);
53
+ };
54
+ process.on("SIGTERM", shutdown);
55
+ process.on("SIGINT", shutdown);
56
+ }
57
+ main().catch((e) => {
58
+ log.error("独立服务启动失败", e instanceof Error ? e.message : String(e));
59
+ process.exit(1);
60
+ });
61
+ //# sourceMappingURL=server-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-entry.js","sourceRoot":"","sources":["../src/server-entry.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,7 @@
1
- import { type ServerHandle, type SessionEntry } from "./server.js";
2
1
  import type { Lang } from "./i18n.js";
3
- /** 服务句柄(含是否复用既有服务) */
2
+ /** 服务句柄(独立进程托管,本进程无 ServerHandle) */
4
3
  export interface ServerResult {
5
- server: ServerHandle | null;
4
+ server: null;
6
5
  /** 实际地址 */
7
6
  url: string;
8
7
  /** 实际端口 */
@@ -11,15 +10,16 @@ export interface ServerResult {
11
10
  reused: boolean;
12
11
  }
13
12
  /**
14
- * 确保 HTTP 服务单例运行:
15
- * 1. 有 server.json 且端口可探测 → 复用(reused=true)
16
- * 2. 否则拿文件锁(mkdir 原子)→ 启动 → 写 server.json → 释放锁
17
- * 3. 锁竞争失败 → 等待后重新探测复用
13
+ * 确保 HTTP 服务单例运行(独立子进程,不随插件进程退出):
14
+ * 1. 有 server.json 且端口可探测、proto 为当前版本 → 复用(reused=true)
15
+ * proto 不符或探测失败 → 杀旧进程后走 spawn 新服务
16
+ * 2. 否则拿文件锁(mkdir 原子)→ spawn 子进程 → 等端口就绪 → 释放锁
17
+ * 3. 锁竞争失败 → 等待后重新探测复用(同样校验版本,新旧并存时杀旧)
18
18
  * @param port 期望端口(0=随机,但随机端口无法跨进程复用,故随机时总是新启)
19
- * @param getSessions 会话列表函数
19
+ * @param _getSessions 会话列表函数(独立进程内由服务自身从状态文件读取,此处无需)
20
20
  * @param dir 缓存目录(锁与信息文件存放处)
21
21
  * @param lang Web 界面语言(默认 en)
22
22
  * @returns 服务结果
23
23
  */
24
- export declare function ensureServer(port: number, getSessions: () => SessionEntry[], dir: string, lang?: Lang): Promise<ServerResult>;
24
+ export declare function ensureServer(port: number, _getSessions: () => unknown[], dir: string, lang?: Lang): Promise<ServerResult>;
25
25
  //# sourceMappingURL=server-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server-manager.d.ts","sourceRoot":"","sources":["../src/server-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAe,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAErC,sBAAsB;AACtB,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;IAC3B,WAAW;IACX,GAAG,EAAE,MAAM,CAAA;IACX,WAAW;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,0BAA0B;IAC1B,MAAM,EAAE,OAAO,CAAA;CAChB;AAqCD;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,YAAY,EAAE,EACjC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,IAAW,GAChB,OAAO,CAAC,YAAY,CAAC,CA8CvB"}
1
+ {"version":3,"file":"server-manager.d.ts","sourceRoot":"","sources":["../src/server-manager.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAIrC,qCAAqC;AACrC,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,IAAI,CAAA;IACZ,WAAW;IACX,GAAG,EAAE,MAAM,CAAA;IACX,WAAW;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,0BAA0B;IAC1B,MAAM,EAAE,OAAO,CAAA;CAChB;AAuED;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,OAAO,EAAE,EAC7B,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,IAAW,GAChB,OAAO,CAAC,YAAY,CAAC,CAwDvB"}
@@ -1,11 +1,20 @@
1
- // HTTP 服务跨进程单例管理:文件锁 + 端口探测,避免多会话/多进程重复启动服务
2
- import { mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
3
- import { join } from "node:path";
4
- import { startServer } from "./server.js";
1
+ // HTTP 服务独立子进程管理:文件锁 + 端口探测 + detached 子进程,
2
+ // 服务不随任何 opencode 插件进程退出而关闭,多进程共享同一服务。
3
+ // 服务版本由 server.json 的 proto 字段标识,版本不符时杀掉旧进程重启,防止持久进程跑旧代码。
4
+ import { mkdirSync, readFileSync, rmSync } from "node:fs";
5
+ import { basename, dirname, join } from "node:path";
6
+ import { fileURLToPath } from "node:url";
7
+ import { spawn } from "node:child_process";
8
+ import { SERVER_PROTO_VERSION } from "./constants.js";
9
+ import log from "./log.js";
5
10
  const LOCK_DIR = "server.lock";
6
11
  const INFO_FILE = "server.json";
7
12
  const PROBE_TIMEOUT = 800;
8
13
  const LOCK_WAIT_MAX = 5000;
14
+ /** 子进程启动后等待端口就绪的上限 */
15
+ const SPAWN_WAIT_MAX = 15000;
16
+ /** 杀旧进程后等待端口释放的上限 */
17
+ const KILL_WAIT_MAX = 4000;
9
18
  /** 探测某端口 /health 是否可达(判断服务是否已运行) */
10
19
  async function probe(port) {
11
20
  try {
@@ -28,25 +37,59 @@ function readInfo(dir) {
28
37
  return null;
29
38
  }
30
39
  }
40
+ /** 该服务实例代码/协议是否与当前版本一致(无 proto 字段视为旧实例) */
41
+ function isCurrentVersion(info) {
42
+ return info != null && info.proto === SERVER_PROTO_VERSION;
43
+ }
44
+ /**
45
+ * 杀掉可能仍在运行的旧服务进程并等待端口释放:
46
+ * detached 子进程不随插件进程退出,升级后旧进程可能仍占住端口,
47
+ * 必须显式 kill 后再 spawn,否则新进程 bind 失败。
48
+ * @param info 服务信息(含 pid/port)
49
+ * @returns 端口是否已释放
50
+ */
51
+ async function killStale(info) {
52
+ if (!info)
53
+ return true;
54
+ try {
55
+ process.kill(info.pid, "SIGTERM");
56
+ }
57
+ catch {
58
+ // 进程可能已退出或无权 kill,交由端口探测判断
59
+ }
60
+ const deadline = Date.now() + KILL_WAIT_MAX;
61
+ while (Date.now() < deadline) {
62
+ const alive = await probe(info.port);
63
+ if (!alive)
64
+ return true;
65
+ await new Promise((r) => setTimeout(r, 200));
66
+ }
67
+ return false;
68
+ }
31
69
  /**
32
- * 确保 HTTP 服务单例运行:
33
- * 1. 有 server.json 且端口可探测 → 复用(reused=true)
34
- * 2. 否则拿文件锁(mkdir 原子)→ 启动 → 写 server.json → 释放锁
35
- * 3. 锁竞争失败 → 等待后重新探测复用
70
+ * 确保 HTTP 服务单例运行(独立子进程,不随插件进程退出):
71
+ * 1. 有 server.json 且端口可探测、proto 为当前版本 → 复用(reused=true)
72
+ * proto 不符或探测失败 → 杀旧进程后走 spawn 新服务
73
+ * 2. 否则拿文件锁(mkdir 原子)→ spawn 子进程 → 等端口就绪 → 释放锁
74
+ * 3. 锁竞争失败 → 等待后重新探测复用(同样校验版本,新旧并存时杀旧)
36
75
  * @param port 期望端口(0=随机,但随机端口无法跨进程复用,故随机时总是新启)
37
- * @param getSessions 会话列表函数
76
+ * @param _getSessions 会话列表函数(独立进程内由服务自身从状态文件读取,此处无需)
38
77
  * @param dir 缓存目录(锁与信息文件存放处)
39
78
  * @param lang Web 界面语言(默认 en)
40
79
  * @returns 服务结果
41
80
  */
42
- export async function ensureServer(port, getSessions, dir, lang = "en") {
81
+ export async function ensureServer(port, _getSessions, dir, lang = "en") {
43
82
  mkdirSync(dir, { recursive: true });
44
- // 1. 探测既有服务(固定端口场景可复用)
83
+ // 1. 探测既有服务(固定端口场景可复用;旧版本实例不复用,杀旧后新启)
45
84
  if (port > 0) {
46
85
  const info = readInfo(dir);
47
- if (info && info.port === port && (await probe(port))) {
86
+ if (isCurrentVersion(info) && info.port === port && (await probe(port))) {
48
87
  return { server: null, url: `http://127.0.0.1:${port}`, port, reused: true };
49
88
  }
89
+ if (info && info.port === port && (await probe(port)) && !isCurrentVersion(info)) {
90
+ log.info(`检测到旧版服务 pid=${info.pid}(proto ${info.proto ?? "?"}),重启独立服务`);
91
+ await killStale(info);
92
+ }
50
93
  }
51
94
  // 2. 尝试拿锁(mkdir 原子操作:谁先创建成功谁启动)
52
95
  const lockPath = join(dir, LOCK_DIR);
@@ -54,26 +97,37 @@ export async function ensureServer(port, getSessions, dir, lang = "en") {
54
97
  mkdirSync(lockPath);
55
98
  }
56
99
  catch {
57
- // 锁被占用:等待后探测
100
+ // 锁被占用:等待后探测;若发现旧版本实例先杀掉,等待持有者 spawn 新版
58
101
  const deadline = Date.now() + LOCK_WAIT_MAX;
59
102
  while (Date.now() < deadline) {
60
103
  await new Promise((r) => setTimeout(r, 200));
61
104
  const info = readInfo(dir);
62
- if (info && (await probe(info.port))) {
105
+ if (info && isCurrentVersion(info) && (await probe(info.port))) {
63
106
  return { server: null, url: `http://127.0.0.1:${info.port}`, port: info.port, reused: true };
64
107
  }
108
+ if (info && !isCurrentVersion(info) && (await probe(info.port))) {
109
+ await killStale(info);
110
+ }
65
111
  }
66
112
  return { server: null, url: "", port: 0, reused: false };
67
113
  }
68
114
  try {
69
- // 3. 拿锁成功:启动服务
70
- const handle = await startServer(port, getSessions, dir, lang);
71
- // 写服务信息(供其他进程探测复用)
72
- writeFileSync(join(dir, INFO_FILE), JSON.stringify({ port: handle.port, host: "127.0.0.1", pid: process.pid, startedAt: Date.now() }), "utf8");
73
- return { server: handle, url: handle.url, port: handle.port, reused: false };
115
+ // 3. 拿锁成功:先清残留旧进程(可能 pid 已退出或锁内刚杀掉),再启动新版
116
+ const leftover = readInfo(dir);
117
+ if (leftover && !isCurrentVersion(leftover))
118
+ await killStale(leftover);
119
+ spawnServerProc(port, dir, lang);
120
+ const deadline = Date.now() + SPAWN_WAIT_MAX;
121
+ while (Date.now() < deadline) {
122
+ const info = readInfo(dir);
123
+ if (info && isCurrentVersion(info) && (await probe(info.port))) {
124
+ return { server: null, url: `http://127.0.0.1:${info.port}`, port: info.port, reused: false };
125
+ }
126
+ await new Promise((r) => setTimeout(r, 200));
127
+ }
128
+ return { server: null, url: "", port: 0, reused: false };
74
129
  }
75
130
  finally {
76
- // 释放锁
77
131
  try {
78
132
  rmSync(lockPath, { recursive: true, force: true });
79
133
  }
@@ -82,4 +136,39 @@ export async function ensureServer(port, getSessions, dir, lang = "en") {
82
136
  }
83
137
  }
84
138
  }
139
+ /**
140
+ * 解析子进程解释器:
141
+ * 1. 环境变量 SSH_TOOL_SERVER_BIN 显式指定
142
+ * 2. process.execPath 是 node/bun 本体 → 直接复用(无需 PATH)
143
+ * 3. 兜底用 PATH 上的 node(npm 安装 opencode 必然有 node 环境)
144
+ */
145
+ function resolveInterpreter() {
146
+ const fromEnv = process.env.SSH_TOOL_SERVER_BIN;
147
+ if (fromEnv)
148
+ return fromEnv;
149
+ const base = basename(process.execPath).toLowerCase();
150
+ if (base.includes("node") || base === "bun" || base === "bun.exe")
151
+ return process.execPath;
152
+ return "node";
153
+ }
154
+ /** 子进程句柄缓存(进程退出后置空,供 ensureServer 复用判断) */
155
+ let serverProc = null;
156
+ /**
157
+ * 启动独立服务子进程(detached:父进程退出不带走)
158
+ * @param port 期望端口(0=随机;随机时端口由子进程决定并写入 server.json)
159
+ * @param dir 缓存目录
160
+ * @param lang Web 界面语言
161
+ */
162
+ function spawnServerProc(port, dir, lang) {
163
+ // 子进程入口:本模块编译产物 dist/server-manager.js 同目录的 dist/server-entry.js
164
+ const selfPath = fileURLToPath(import.meta.url);
165
+ const entry = join(dirname(selfPath), "server-entry.js").replace(/\\/g, "/");
166
+ const bin = resolveInterpreter();
167
+ serverProc = spawn(bin, [entry, "--port", String(port), "--dir", dir, "--lang", lang], {
168
+ detached: true,
169
+ stdio: "ignore",
170
+ });
171
+ serverProc.unref();
172
+ serverProc.on("exit", () => { serverProc = null; });
173
+ }
85
174
  //# sourceMappingURL=server-manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server-manager.js","sourceRoot":"","sources":["../src/server-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server-manager.js","sourceRoot":"","sources":["../src/server-manager.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -1,32 +1,17 @@
1
1
  import { type Server } from "node:http";
2
2
  import { type Lang } from "./i18n.js";
3
- import type { SessionHistory } from "./history.js";
4
- /** 会话实时读写能力(SshSession / LocalSession 均满足,结构接口) */
5
3
  export interface LiveSession {
6
- getHistory(): SessionHistory;
7
- getRunningOutput(): string;
8
- getRunningCommand(): string;
9
- hasRunningStream(): boolean;
10
- getRunningStream(): {
11
- data: string;
12
- done: boolean;
4
+ getHistory(): {
5
+ getPairs(): unknown[];
13
6
  };
14
7
  close(): void;
15
- /** 读取原始字节流增量(从上次 pos 到当前);reset=true 表示 pos 已被裁,重新发送全量 */
16
- readRawStream(pos: number): {
17
- data: string;
18
- pos: number;
19
- reset?: boolean;
20
- };
21
8
  }
22
- /** 服务实例信息 */
23
9
  export interface ServerHandle {
24
10
  server: Server;
25
11
  port: number;
26
12
  url: string;
27
13
  close(): void;
28
14
  }
29
- /** 扁平会话条目(多终端:sessionID × name 一个条目;kind 区分 ssh/local) */
30
15
  export interface SessionEntry {
31
16
  sessionID: string;
32
17
  name: string;
@@ -35,21 +20,11 @@ export interface SessionEntry {
35
20
  title?: string;
36
21
  directory?: string;
37
22
  }
38
- /** transcript 消息项:cmd 命令 / out 输出 / run 运行中 / sep 分割线 */
39
23
  export interface TranscriptPair {
40
24
  type: "cmd" | "out" | "run" | "sep";
41
25
  ts?: number;
42
- /** 命令完成时刻(cmd 项);用于展示耗时 */
43
26
  endTs?: number;
44
27
  text: string;
45
28
  }
46
- /**
47
- * 启动 HTTP + WebSocket 服务(监听 127.0.0.1)
48
- * @param port 端口,0 或未指定 → 系统随机分配(避免冲突)
49
- * @param getSessions 获取扁平会话条目列表的函数(供本进程页面展示与实时流)
50
- * @param dir 插件缓存根目录(跨进程状态文件/历史文件所在处)
51
- * @param lang Web 界面语言(默认 en)
52
- * @returns 服务句柄(含实际端口与 URL)
53
- */
54
- export declare function startServer(port: number, getSessions: () => SessionEntry[], dir: string, lang?: Lang): Promise<ServerHandle>;
29
+ export declare function startServer(port: number, _getSessions: () => SessionEntry[], dir: string, lang?: Lang, _streamTickMs?: number): Promise<ServerHandle>;
55
30
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,MAAM,EAAwB,MAAM,WAAW,CAAA;AAO3E,OAAO,EAAoB,KAAK,IAAI,EAAE,MAAM,WAAW,CAAA;AAEvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAGlD,mDAAmD;AACnD,MAAM,WAAW,WAAW;IAC1B,UAAU,IAAI,cAAc,CAAA;IAC5B,gBAAgB,IAAI,MAAM,CAAA;IAC1B,iBAAiB,IAAI,MAAM,CAAA;IAC3B,gBAAgB,IAAI,OAAO,CAAA;IAC3B,gBAAgB,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAA;IACnD,KAAK,IAAI,IAAI,CAAA;IACb,0DAA0D;IAC1D,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAC3E;AAED,aAAa;AACb,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,IAAI,IAAI,CAAA;CACd;AAED,0DAA0D;AAC1D,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,WAAW,CAAA;IACpB,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAcD,yDAAyD;AACzD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAA;IACnC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACb;AAoCD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,YAAY,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,IAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAgUlI"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,KAAK,MAAM,EAAwB,MAAM,WAAW,CAAA;AAO3E,OAAO,EAAoB,KAAK,IAAI,EAAE,MAAM,WAAW,CAAA;AAIvD,MAAM,WAAW,WAAW;IAC1B,UAAU,IAAI;QAAE,QAAQ,IAAI,OAAO,EAAE,CAAA;KAAE,CAAA;IACvC,KAAK,IAAI,IAAI,CAAA;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,IAAI,IAAI,CAAA;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,WAAW,CAAA;IACpB,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAaD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAA;IACnC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACb;AAuCD,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,YAAY,EAAE,EAClC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,IAAW,EACjB,aAAa,SAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CA2bvB"}