botmux 2.87.0 → 2.88.1

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 (160) hide show
  1. package/README.en.md +1 -0
  2. package/README.md +1 -0
  3. package/dist/adapters/backend/liveness-gate.d.ts +38 -0
  4. package/dist/adapters/backend/liveness-gate.d.ts.map +1 -0
  5. package/dist/adapters/backend/liveness-gate.js +53 -0
  6. package/dist/adapters/backend/liveness-gate.js.map +1 -0
  7. package/dist/adapters/backend/tmux-backend.d.ts +21 -0
  8. package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
  9. package/dist/adapters/backend/tmux-backend.js +102 -27
  10. package/dist/adapters/backend/tmux-backend.js.map +1 -1
  11. package/dist/adapters/backend/tmux-pipe-backend.d.ts +20 -0
  12. package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -1
  13. package/dist/adapters/backend/tmux-pipe-backend.js +85 -19
  14. package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
  15. package/dist/adapters/backend/zellij-observe-backend.d.ts +13 -0
  16. package/dist/adapters/backend/zellij-observe-backend.d.ts.map +1 -1
  17. package/dist/adapters/backend/zellij-observe-backend.js +51 -12
  18. package/dist/adapters/backend/zellij-observe-backend.js.map +1 -1
  19. package/dist/adapters/cli/traex.d.ts.map +1 -1
  20. package/dist/adapters/cli/traex.js +4 -0
  21. package/dist/adapters/cli/traex.js.map +1 -1
  22. package/dist/adapters/cli/types.d.ts +6 -0
  23. package/dist/adapters/cli/types.d.ts.map +1 -1
  24. package/dist/bot-registry.d.ts +13 -0
  25. package/dist/bot-registry.d.ts.map +1 -1
  26. package/dist/bot-registry.js +3 -0
  27. package/dist/bot-registry.js.map +1 -1
  28. package/dist/cli.js +6 -0
  29. package/dist/cli.js.map +1 -1
  30. package/dist/core/command-handler.js +1 -1
  31. package/dist/core/command-handler.js.map +1 -1
  32. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  33. package/dist/core/dashboard-ipc-server.js +165 -5
  34. package/dist/core/dashboard-ipc-server.js.map +1 -1
  35. package/dist/core/dashboard-rows.d.ts +3 -0
  36. package/dist/core/dashboard-rows.d.ts.map +1 -1
  37. package/dist/core/dashboard-rows.js +4 -1
  38. package/dist/core/dashboard-rows.js.map +1 -1
  39. package/dist/core/session-activity.d.ts +1 -0
  40. package/dist/core/session-activity.d.ts.map +1 -1
  41. package/dist/core/session-activity.js +7 -4
  42. package/dist/core/session-activity.js.map +1 -1
  43. package/dist/core/session-create.d.ts +61 -0
  44. package/dist/core/session-create.d.ts.map +1 -0
  45. package/dist/core/session-create.js +128 -0
  46. package/dist/core/session-create.js.map +1 -0
  47. package/dist/core/session-manager.d.ts +40 -0
  48. package/dist/core/session-manager.d.ts.map +1 -1
  49. package/dist/core/session-manager.js +237 -2
  50. package/dist/core/session-manager.js.map +1 -1
  51. package/dist/core/worker-pool.d.ts.map +1 -1
  52. package/dist/core/worker-pool.js +78 -4
  53. package/dist/core/worker-pool.js.map +1 -1
  54. package/dist/daemon.d.ts.map +1 -1
  55. package/dist/daemon.js +11 -5
  56. package/dist/daemon.js.map +1 -1
  57. package/dist/dashboard/bot-payload.d.ts +1 -0
  58. package/dist/dashboard/bot-payload.d.ts.map +1 -1
  59. package/dist/dashboard/bot-payload.js +1 -0
  60. package/dist/dashboard/bot-payload.js.map +1 -1
  61. package/dist/dashboard/session-cleanup.d.ts +30 -0
  62. package/dist/dashboard/session-cleanup.d.ts.map +1 -0
  63. package/dist/dashboard/session-cleanup.js +47 -0
  64. package/dist/dashboard/session-cleanup.js.map +1 -0
  65. package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
  66. package/dist/dashboard/web/bot-defaults.js +20 -5
  67. package/dist/dashboard/web/bot-defaults.js.map +1 -1
  68. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  69. package/dist/dashboard/web/i18n.js +184 -2
  70. package/dist/dashboard/web/i18n.js.map +1 -1
  71. package/dist/dashboard/web/insights.d.ts.map +1 -1
  72. package/dist/dashboard/web/insights.js +355 -30
  73. package/dist/dashboard/web/insights.js.map +1 -1
  74. package/dist/dashboard/web/sessions.d.ts +2 -0
  75. package/dist/dashboard/web/sessions.d.ts.map +1 -1
  76. package/dist/dashboard/web/sessions.js +457 -30
  77. package/dist/dashboard/web/sessions.js.map +1 -1
  78. package/dist/dashboard-web/app.js +767 -640
  79. package/dist/dashboard-web/style.css +257 -7
  80. package/dist/dashboard.js +211 -2
  81. package/dist/dashboard.js.map +1 -1
  82. package/dist/i18n/en.d.ts.map +1 -1
  83. package/dist/i18n/en.js +21 -1
  84. package/dist/i18n/en.js.map +1 -1
  85. package/dist/i18n/zh.d.ts.map +1 -1
  86. package/dist/i18n/zh.js +21 -1
  87. package/dist/i18n/zh.js.map +1 -1
  88. package/dist/im/lark/card-builder.d.ts +4 -5
  89. package/dist/im/lark/card-builder.d.ts.map +1 -1
  90. package/dist/im/lark/card-builder.js +113 -11
  91. package/dist/im/lark/card-builder.js.map +1 -1
  92. package/dist/im/lark/card-handler.d.ts +3 -2
  93. package/dist/im/lark/card-handler.d.ts.map +1 -1
  94. package/dist/im/lark/card-handler.js +167 -11
  95. package/dist/im/lark/card-handler.js.map +1 -1
  96. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  97. package/dist/im/lark/event-dispatcher.js +19 -5
  98. package/dist/im/lark/event-dispatcher.js.map +1 -1
  99. package/dist/im/lark/grant-pending.d.ts.map +1 -1
  100. package/dist/im/lark/grant-pending.js +9 -2
  101. package/dist/im/lark/grant-pending.js.map +1 -1
  102. package/dist/index-daemon.js +5 -0
  103. package/dist/index-daemon.js.map +1 -1
  104. package/dist/platform/bind.d.ts +2 -0
  105. package/dist/platform/bind.d.ts.map +1 -0
  106. package/dist/platform/bind.js +91 -0
  107. package/dist/platform/bind.js.map +1 -0
  108. package/dist/platform/binding.d.ts +22 -0
  109. package/dist/platform/binding.d.ts.map +1 -0
  110. package/dist/platform/binding.js +33 -0
  111. package/dist/platform/binding.js.map +1 -0
  112. package/dist/platform/tunnel-client.d.ts +15 -0
  113. package/dist/platform/tunnel-client.d.ts.map +1 -0
  114. package/dist/platform/tunnel-client.js +193 -0
  115. package/dist/platform/tunnel-client.js.map +1 -0
  116. package/dist/services/bot-config-store.d.ts.map +1 -1
  117. package/dist/services/bot-config-store.js +1 -0
  118. package/dist/services/bot-config-store.js.map +1 -1
  119. package/dist/services/git-worktree.d.ts +10 -0
  120. package/dist/services/git-worktree.d.ts.map +1 -1
  121. package/dist/services/git-worktree.js +71 -26
  122. package/dist/services/git-worktree.js.map +1 -1
  123. package/dist/services/grant-prefs-store.d.ts +3 -0
  124. package/dist/services/grant-prefs-store.d.ts.map +1 -1
  125. package/dist/services/grant-prefs-store.js +17 -2
  126. package/dist/services/grant-prefs-store.js.map +1 -1
  127. package/dist/services/insight/claude-span-reader.d.ts.map +1 -1
  128. package/dist/services/insight/claude-span-reader.js +18 -2
  129. package/dist/services/insight/claude-span-reader.js.map +1 -1
  130. package/dist/services/insight/codex-span-reader.d.ts.map +1 -1
  131. package/dist/services/insight/codex-span-reader.js +17 -1
  132. package/dist/services/insight/codex-span-reader.js.map +1 -1
  133. package/dist/services/insight/report.d.ts.map +1 -1
  134. package/dist/services/insight/report.js +48 -6
  135. package/dist/services/insight/report.js.map +1 -1
  136. package/dist/services/insight/types.d.ts +9 -0
  137. package/dist/services/insight/types.d.ts.map +1 -1
  138. package/dist/services/insight/types.js.map +1 -1
  139. package/dist/services/worktree-slug-ai.d.ts.map +1 -1
  140. package/dist/services/worktree-slug-ai.js +3 -1
  141. package/dist/services/worktree-slug-ai.js.map +1 -1
  142. package/dist/types.d.ts +12 -0
  143. package/dist/types.d.ts.map +1 -1
  144. package/dist/utils/crash-log.d.ts +22 -0
  145. package/dist/utils/crash-log.d.ts.map +1 -0
  146. package/dist/utils/crash-log.js +37 -0
  147. package/dist/utils/crash-log.js.map +1 -0
  148. package/dist/utils/input-gate.d.ts +10 -0
  149. package/dist/utils/input-gate.d.ts.map +1 -1
  150. package/dist/utils/input-gate.js +7 -0
  151. package/dist/utils/input-gate.js.map +1 -1
  152. package/dist/utils/stdio-epipe-guard.d.ts +39 -0
  153. package/dist/utils/stdio-epipe-guard.d.ts.map +1 -0
  154. package/dist/utils/stdio-epipe-guard.js +67 -0
  155. package/dist/utils/stdio-epipe-guard.js.map +1 -0
  156. package/dist/worker.js +210 -26
  157. package/dist/worker.js.map +1 -1
  158. package/dist/workflows/daemon-spawn.d.ts +2 -0
  159. package/dist/workflows/daemon-spawn.d.ts.map +1 -1
  160. package/package.json +1 -1
package/README.en.md CHANGED
@@ -306,6 +306,7 @@ Gemini / OpenCode / Antigravity / GitHub Copilot), with no MCP protocol support
306
306
  - One-click locate back to the Feishu thread / open Web Terminal / multi-select batch close
307
307
  - Create a new group with auto owner-transfer + @-mention notification
308
308
  - Disband or leave a chat (associated sessions auto-closed)
309
+ - **Session Insights** (owner-only, read-only): parse each session's transcript to view action spans / work timeline / context curve / failure aggregates + diagnostic suggestions; send `/insight` in chat for the current session's summary card
309
310
  - **Workflows console**:
310
311
  - Run List (5 s poll) + Run Detail with summary, dangling-work red panel, node/activity table, event timeline, and a **parallel-execution timeline** (attempt-level), auto-stopping polling once the run reaches a terminal state
311
312
  - **Cancel a run directly from the dashboard**; approve / reject `humanGate` with reviewer comments
package/README.md CHANGED
@@ -191,6 +191,7 @@ CLI 进入 botmux 会话时自动获得 `~/.botmux/bin` 在 PATH 中,以及一
191
191
  - 一键定位回飞书话题 / 跳 Web 终端 / 多选批量关闭会话
192
192
  - 拉新群、自动转让群主、@ 提醒
193
193
  - 解散群聊、bot 退群(关联会话自动清理)
194
+ - **会话洞察**(owner-only,只读):解析各会话 transcript,看动作 span / 工作时序 / 上下文曲线 / 失败聚合 + 诊断建议;聊天里发 `/insight` 可取当前会话摘要卡
194
195
  - **Workflows 管控面**:
195
196
  - Run List 5s 轮询;Run Detail 看 summary / dangling 红区 / node-activity 表 / event timeline / **并发执行 timeline**(attempt 级时序),到 terminal 自动停轮询
196
197
  - **Dashboard 内可直接 cancel run**、批准/拒绝 humanGate(approve/reject + 评论)
@@ -0,0 +1,38 @@
1
+ /**
2
+ * LivenessGate — debounce transient liveness-probe failures for /adopt backends.
3
+ *
4
+ * The adopt observers (TmuxPipeBackend, ZellijObserveBackend) poll the external
5
+ * pane/CLI once per second to detect when the adopted target really exited. The
6
+ * original logic tore the session down on the FIRST failed probe, so any
7
+ * transient hiccup — a `tmux display-message` timeout, a busy zellij server, fd
8
+ * pressure (EMFILE) when many workers are live — produced a spurious
9
+ * "⏏ /adopt的 CLI 会话已断开" even though the CLI was still alive and still
10
+ * receiving messages.
11
+ *
12
+ * This gate counts CONSECUTIVE failures and only reports the target as gone once
13
+ * `threshold` failures pile up with no intervening success. Any single success
14
+ * resets the counter, so steady-state liveness never trips it. Callers should
15
+ * follow a tripped gate with one final authoritative re-probe (ideally with a
16
+ * more lenient timeout) before actually tearing down — see the backends.
17
+ */
18
+ export declare class LivenessGate {
19
+ private readonly threshold;
20
+ private failures;
21
+ constructor(threshold: number);
22
+ /**
23
+ * Feed one probe verdict.
24
+ * @returns true iff this verdict pushed the consecutive-failure count to the
25
+ * threshold — the caller should now confirm + tear down. A success
26
+ * resets the counter and always returns false.
27
+ */
28
+ record(alive: boolean): boolean;
29
+ /** Consecutive failures observed so far (0 once a success resets it). */
30
+ get consecutiveFailures(): number;
31
+ reset(): void;
32
+ }
33
+ /** Default consecutive-failure budget before an adopt backend declares its
34
+ * target gone. 3 one-second probes (~3s of sustained failure) plus a final
35
+ * lenient confirm — enough to ride out command timeouts / server hiccups while
36
+ * still detecting a genuine exit promptly. */
37
+ export declare const ADOPT_LIVENESS_MAX_FAILURES = 3;
38
+ //# sourceMappingURL=liveness-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liveness-gate.d.ts","sourceRoot":"","sources":["../../../src/adapters/backend/liveness-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,YAAY;IAGX,OAAO,CAAC,QAAQ,CAAC,SAAS;IAFtC,OAAO,CAAC,QAAQ,CAAK;gBAEQ,SAAS,EAAE,MAAM;IAI9C;;;;;OAKG;IACH,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAS/B,yEAAyE;IACzE,IAAI,mBAAmB,IAAI,MAAM,CAEhC;IAED,KAAK,IAAI,IAAI;CAGd;AAED;;;+CAG+C;AAC/C,eAAO,MAAM,2BAA2B,IAAI,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * LivenessGate — debounce transient liveness-probe failures for /adopt backends.
3
+ *
4
+ * The adopt observers (TmuxPipeBackend, ZellijObserveBackend) poll the external
5
+ * pane/CLI once per second to detect when the adopted target really exited. The
6
+ * original logic tore the session down on the FIRST failed probe, so any
7
+ * transient hiccup — a `tmux display-message` timeout, a busy zellij server, fd
8
+ * pressure (EMFILE) when many workers are live — produced a spurious
9
+ * "⏏ /adopt的 CLI 会话已断开" even though the CLI was still alive and still
10
+ * receiving messages.
11
+ *
12
+ * This gate counts CONSECUTIVE failures and only reports the target as gone once
13
+ * `threshold` failures pile up with no intervening success. Any single success
14
+ * resets the counter, so steady-state liveness never trips it. Callers should
15
+ * follow a tripped gate with one final authoritative re-probe (ideally with a
16
+ * more lenient timeout) before actually tearing down — see the backends.
17
+ */
18
+ export class LivenessGate {
19
+ threshold;
20
+ failures = 0;
21
+ constructor(threshold) {
22
+ this.threshold = threshold;
23
+ if (threshold < 1)
24
+ throw new Error(`LivenessGate threshold must be >= 1, got ${threshold}`);
25
+ }
26
+ /**
27
+ * Feed one probe verdict.
28
+ * @returns true iff this verdict pushed the consecutive-failure count to the
29
+ * threshold — the caller should now confirm + tear down. A success
30
+ * resets the counter and always returns false.
31
+ */
32
+ record(alive) {
33
+ if (alive) {
34
+ this.failures = 0;
35
+ return false;
36
+ }
37
+ this.failures += 1;
38
+ return this.failures >= this.threshold;
39
+ }
40
+ /** Consecutive failures observed so far (0 once a success resets it). */
41
+ get consecutiveFailures() {
42
+ return this.failures;
43
+ }
44
+ reset() {
45
+ this.failures = 0;
46
+ }
47
+ }
48
+ /** Default consecutive-failure budget before an adopt backend declares its
49
+ * target gone. 3 one-second probes (~3s of sustained failure) plus a final
50
+ * lenient confirm — enough to ride out command timeouts / server hiccups while
51
+ * still detecting a genuine exit promptly. */
52
+ export const ADOPT_LIVENESS_MAX_FAILURES = 3;
53
+ //# sourceMappingURL=liveness-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liveness-gate.js","sourceRoot":"","sources":["../../../src/adapters/backend/liveness-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,YAAY;IAGM;IAFrB,QAAQ,GAAG,CAAC,CAAC;IAErB,YAA6B,SAAiB;QAAjB,cAAS,GAAT,SAAS,CAAQ;QAC5C,IAAI,SAAS,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,SAAS,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,KAAc;QACnB,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YAClB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC;IACzC,CAAC;IAED,yEAAyE;IACzE,IAAI,mBAAmB;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IACpB,CAAC;CACF;AAED;;;+CAG+C;AAC/C,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC"}
@@ -36,6 +36,14 @@ export declare class TmuxBackend implements SessionBackend {
36
36
  static isAvailable(): boolean;
37
37
  /** Derive tmux session name from a session UUID. */
38
38
  static sessionName(sessionId: string): string;
39
+ /**
40
+ * Name of the parked crash-diagnostic shell session. DISTINCT from
41
+ * {@link sessionName} on purpose: the diagnostic shell must never collide with
42
+ * the live CLI's backing-session name, or restore/cold-resume/`botmux resume`
43
+ * would reattach the bare shell as if it were the CLI. Stays `bmx-`-prefixed
44
+ * so adopt-discovery still skips it.
45
+ */
46
+ static diagnosticSessionName(sessionId: string): string;
39
47
  /** Check if a named tmux session exists. */
40
48
  static hasSession(name: string): boolean;
41
49
  /**
@@ -82,6 +90,18 @@ export declare class TmuxBackend implements SessionBackend {
82
90
  static killSession(name: string): void;
83
91
  /** List all botmux tmux sessions (bmx-* prefix). */
84
92
  static listBotmuxSessions(): string[];
93
+ /**
94
+ * Create a parked diagnostic session after a CLI has exited. The worker uses
95
+ * this only after it has already captured the failed pane's output, so the
96
+ * browser can still attach to `bmx-*` and see the startup error while daemon
97
+ * auto-restart is paused.
98
+ */
99
+ static parkDiagnosticSession(name: string, opts: {
100
+ cwd: string;
101
+ cols: number;
102
+ rows: number;
103
+ contentPath: string;
104
+ }): boolean;
85
105
  spawn(bin: string, args: string[], opts: SpawnOpts): void;
86
106
  /** Whether the last spawn() re-attached to an existing tmux session. */
87
107
  get isReattach(): boolean;
@@ -164,6 +184,7 @@ export declare function buildBotmuxEnvAssignments(env: NodeJS.ProcessEnv | undef
164
184
  * bash/zsh/sh by resolveUserShell() so they hit the same SCRIPT path.
165
185
  */
166
186
  export declare const SHELL_WRAPPER_SCRIPT: string;
187
+ export declare const DIAGNOSTIC_SHELL_SCRIPT: string;
167
188
  /**
168
189
  * Debug variant of the wrapper script — same prelude, but the CLI runs as
169
190
  * a *child* (no `exec`) and the wrapper hands off to an interactive shell
@@ -1 +1 @@
1
- {"version":3,"file":"tmux-backend.d.ts","sourceRoot":"","sources":["../../../src/adapters/backend/tmux-backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tmux-backend.d.ts","sourceRoot":"","sources":["../../../src/adapters/backend/tmux-backend.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import * as pty from 'node-pty';
2
2
  import { execSync, execFileSync } from 'node:child_process';
3
3
  import { accessSync, constants as fsConstants } from 'node:fs';
4
4
  import { basename } from 'node:path';
5
+ import { randomBytes } from 'node:crypto';
5
6
  import { probeTmuxFunctional, tmuxEnv } from '../../setup/ensure-tmux.js';
6
7
  import { REDACTED_CHILD_ENV_KEYS } from '../../utils/child-env.js';
7
8
  import { sanitizePerBotEnv } from '../../core/per-bot-env.js';
@@ -61,6 +62,16 @@ export class TmuxBackend {
61
62
  static sessionName(sessionId) {
62
63
  return `bmx-${sessionId.slice(0, 8)}`;
63
64
  }
65
+ /**
66
+ * Name of the parked crash-diagnostic shell session. DISTINCT from
67
+ * {@link sessionName} on purpose: the diagnostic shell must never collide with
68
+ * the live CLI's backing-session name, or restore/cold-resume/`botmux resume`
69
+ * would reattach the bare shell as if it were the CLI. Stays `bmx-`-prefixed
70
+ * so adopt-discovery still skips it.
71
+ */
72
+ static diagnosticSessionName(sessionId) {
73
+ return `bmx-diag-${sessionId.slice(0, 8)}`;
74
+ }
64
75
  /** Check if a named tmux session exists. */
65
76
  static hasSession(name) {
66
77
  return TmuxBackend.probeSession(name) === 'exists';
@@ -145,6 +156,41 @@ export class TmuxBackend {
145
156
  return [];
146
157
  }
147
158
  }
159
+ /**
160
+ * Create a parked diagnostic session after a CLI has exited. The worker uses
161
+ * this only after it has already captured the failed pane's output, so the
162
+ * browser can still attach to `bmx-*` and see the startup error while daemon
163
+ * auto-restart is paused.
164
+ */
165
+ static parkDiagnosticSession(name, opts) {
166
+ try {
167
+ TmuxBackend.killSession(name);
168
+ const shellSpec = resolveUserShell();
169
+ execFileSync('tmux', [
170
+ 'new-session',
171
+ '-d',
172
+ '-s', name,
173
+ '-x', String(opts.cols),
174
+ '-y', String(opts.rows),
175
+ '--',
176
+ shellSpec.shell, ...shellSpec.flags, '-c', DIAGNOSTIC_SHELL_SCRIPT, '_',
177
+ opts.cwd,
178
+ opts.contentPath,
179
+ shellSpec.shell,
180
+ ], {
181
+ stdio: 'ignore',
182
+ cwd: opts.cwd,
183
+ env: tmuxEnv(),
184
+ timeout: 5000,
185
+ });
186
+ configureTmuxSessionOptions(name);
187
+ return true;
188
+ }
189
+ catch (err) {
190
+ logger.warn(`[tmux:${name}] failed to park diagnostic session: ${err instanceof Error ? err.message : err}`);
191
+ return false;
192
+ }
193
+ }
148
194
  // ─── SessionBackend implementation ────────────────────────────────────────
149
195
  spawn(bin, args, opts) {
150
196
  this.reattaching = TmuxBackend.hasSession(this.sessionName);
@@ -241,22 +287,7 @@ export class TmuxBackend {
241
287
  // backfill options added after the session was originally created.
242
288
  // Setting an already-applied option is idempotent.
243
289
  setTimeout(() => {
244
- try {
245
- const t = shellescape(this.sessionName);
246
- const env = tmuxEnv();
247
- execSync(`tmux set-option -t ${t} status off`, { stdio: 'ignore', env });
248
- execSync(`tmux set-option -t ${t} mouse on`, { stdio: 'ignore', env });
249
- // set-clipboard is a server option — enable OSC 52 passthrough for web copy
250
- execSync(`tmux set-option -s set-clipboard on`, { stdio: 'ignore', env });
251
- execSync(`tmux set-option -t ${t} history-limit 50000`, { stdio: 'ignore', env });
252
- // Prevent web terminal clients (smaller viewport) from shrinking the
253
- // tmux window. If a web client at 80×24 causes tmux to resize the
254
- // window down, reflowed content shifts buffer positions and the
255
- // terminal renderer's baseline tracking breaks — historical output
256
- // leaks into the streaming card.
257
- execSync(`tmux set-option -t ${t} window-size largest`, { stdio: 'ignore', env });
258
- }
259
- catch { /* session may not be ready yet — benign */ }
290
+ configureTmuxSessionOptions(this.sessionName);
260
291
  }, 500);
261
292
  }
262
293
  /** Whether the last spawn() re-attached to an existing tmux session. */
@@ -326,17 +357,35 @@ export class TmuxBackend {
326
357
  */
327
358
  pasteText(text) {
328
359
  this.exitCopyModeIfNeeded();
329
- execFileSync('tmux', ['load-buffer', '-'], {
330
- input: text,
331
- stdio: ['pipe', 'ignore', 'ignore'],
332
- timeout: 5000,
333
- env: tmuxEnv(),
334
- });
335
- execFileSync('tmux', ['paste-buffer', '-t', this.cmdTarget, '-d', '-p'], {
336
- stdio: 'ignore',
337
- timeout: 5000,
338
- env: tmuxEnv(),
339
- });
360
+ const bufferName = `botmux-${randomBytes(8).toString('hex')}`;
361
+ let loaded = false;
362
+ try {
363
+ execFileSync('tmux', ['load-buffer', '-b', bufferName, '-'], {
364
+ input: text,
365
+ stdio: ['pipe', 'ignore', 'ignore'],
366
+ timeout: 5000,
367
+ env: tmuxEnv(),
368
+ });
369
+ loaded = true;
370
+ execFileSync('tmux', ['paste-buffer', '-b', bufferName, '-t', this.cmdTarget, '-d', '-p'], {
371
+ stdio: 'ignore',
372
+ timeout: 5000,
373
+ env: tmuxEnv(),
374
+ });
375
+ loaded = false;
376
+ }
377
+ finally {
378
+ if (loaded) {
379
+ try {
380
+ execFileSync('tmux', ['delete-buffer', '-b', bufferName], {
381
+ stdio: 'ignore',
382
+ timeout: 1000,
383
+ env: tmuxEnv(),
384
+ });
385
+ }
386
+ catch { /* best-effort cleanup after a failed paste */ }
387
+ }
388
+ }
340
389
  }
341
390
  exitCopyModeIfNeeded() {
342
391
  try {
@@ -552,6 +601,15 @@ export function buildBotmuxEnvAssignments(env, injectEnv) {
552
601
  * bash/zsh/sh by resolveUserShell() so they hit the same SCRIPT path.
553
602
  */
554
603
  export const SHELL_WRAPPER_SCRIPT = `cd -- "$1" && shift && ${REDACTED_ENV_UNSET_CLAUSE} && exec /usr/bin/env "$@"`;
604
+ export const DIAGNOSTIC_SHELL_SCRIPT = [
605
+ 'cd -- "$1" 2>/dev/null || cd "$HOME" 2>/dev/null || cd /',
606
+ REDACTED_ENV_UNSET_CLAUSE,
607
+ 'clear',
608
+ `printf '\\033[1;31m[botmux] Agent CLI exited. Auto-restart is paused and the last terminal output is preserved below.\\033[0m\\n\\n'`,
609
+ 'cat -- "$2" 2>/dev/null || true',
610
+ `printf '\\n\\033[1;33m[botmux] Fix the startup error, then send a new message to retry. Type exit to close this diagnostic shell.\\033[0m\\n'`,
611
+ 'exec "$3" -i',
612
+ ].join('; ');
555
613
  /**
556
614
  * Debug variant of the wrapper script — same prelude, but the CLI runs as
557
615
  * a *child* (no `exec`) and the wrapper hands off to an interactive shell
@@ -594,6 +652,23 @@ function specForKind(shell, kind) {
594
652
  // 'sh' adds nothing — POSIX sh has no portable interactive rcfile.
595
653
  return { shell, flags };
596
654
  }
655
+ function configureTmuxSessionOptions(sessionName) {
656
+ try {
657
+ const t = shellescape(sessionName);
658
+ const env = tmuxEnv();
659
+ execSync(`tmux set-option -t ${t} status off`, { stdio: 'ignore', env });
660
+ execSync(`tmux set-option -t ${t} mouse on`, { stdio: 'ignore', env });
661
+ // set-clipboard is a server option — enable OSC 52 passthrough for web copy
662
+ execSync(`tmux set-option -s set-clipboard on`, { stdio: 'ignore', env });
663
+ execSync(`tmux set-option -t ${t} history-limit 50000`, { stdio: 'ignore', env });
664
+ // Prevent web terminal clients (smaller viewport) from shrinking the
665
+ // tmux window. If a web client at 80x24 causes tmux to resize the window
666
+ // down, reflowed content shifts buffer positions and historical output
667
+ // leaks into the streaming card.
668
+ execSync(`tmux set-option -t ${t} window-size largest`, { stdio: 'ignore', env });
669
+ }
670
+ catch { /* session may not be ready yet — benign */ }
671
+ }
597
672
  /** Classify a shell binary path by basename. Returns null for shells whose
598
673
  * syntax we don't support (fish, nu, csh, tcsh, ...). */
599
674
  function classifyShell(path) {
@@ -1 +1 @@
1
- {"version":3,"file":"tmux-backend.js","sourceRoot":"","sources":["../../../src/adapters/backend/tmux-backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tmux-backend.js","sourceRoot":"","sources":["../../../src/adapters/backend/tmux-backend.ts"],"names":[],"mappings":"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"}
@@ -62,6 +62,10 @@ export declare class TmuxPipeBackend implements SessionBackend {
62
62
  private static readonly RECENT_OUTPUT_MAX;
63
63
  private readonly exitCbs;
64
64
  private lifecycleTimer;
65
+ /** Debounce transient pane-probe failures so one flaky `tmux display-message`
66
+ * (timeout / server hiccup under fd pressure) doesn't tear down an adopted
67
+ * pane that's still alive. See recordPaneProbe. (pid-death stays decisive.) */
68
+ private readonly livenessGate;
65
69
  private cols;
66
70
  private rows;
67
71
  private exited;
@@ -150,6 +154,22 @@ export declare class TmuxPipeBackend implements SessionBackend {
150
154
  getChildPid(): number | null;
151
155
  getAttachInfo(): null;
152
156
  private startLifecycleWatcher;
157
+ /** Is the pane still addressable in tmux? This `display-message` IS the flaky,
158
+ * fd/server-dependent signal (command timeout / busy server under EMFILE) —
159
+ * which is why recordPaneProbe debounces it. `timeoutMs` lets the final
160
+ * confirm wait longer than the 1s poll so an overloaded server can still
161
+ * answer before we declare a live pane dead. */
162
+ private isPaneAddressable;
163
+ /**
164
+ * Debounce the (flaky) pane-addressability probe. Tearing down on the FIRST
165
+ * failed probe produced the spurious "⏏ /adopt的 CLI 会话已断开" — a tmux command
166
+ * timeout / busy server (e.g. under EMFILE fd pressure) momentarily fails the
167
+ * probe while the pane is still alive and the CLI still receiving messages.
168
+ * Only after ADOPT_LIVENESS_MAX_FAILURES consecutive failures, AND a final
169
+ * lenient-timeout re-probe that still fails, do we detach. Any success resets.
170
+ * (pid-death is handled decisively in the watcher — see startLifecycleWatcher.)
171
+ */
172
+ private recordPaneProbe;
153
173
  private stopLifecycleWatcher;
154
174
  private handlePaneExit;
155
175
  private createDetachedSession;
@@ -1 +1 @@
1
- {"version":3,"file":"tmux-pipe-backend.d.ts","sourceRoot":"","sources":["../../../src/adapters/backend/tmux-pipe-backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tmux-pipe-backend.d.ts","sourceRoot":"","sources":["../../../src/adapters/backend/tmux-pipe-backend.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,7 @@ import { randomBytes } from 'node:crypto';
31
31
  import { StringDecoder } from 'node:string_decoder';
32
32
  import { tmuxEnv } from '../../setup/ensure-tmux.js';
33
33
  import { buildBotmuxEnvAssignments, resolveUserShell, SHELL_WRAPPER_SCRIPT, TmuxBackend } from './tmux-backend.js';
34
+ import { LivenessGate, ADOPT_LIVENESS_MAX_FAILURES } from './liveness-gate.js';
34
35
  function shellescape(s) {
35
36
  // Single-quote-escape, replacing internal ' with '\''
36
37
  return `'${s.replace(/'/g, "'\\''")}'`;
@@ -102,6 +103,10 @@ export class TmuxPipeBackend {
102
103
  static RECENT_OUTPUT_MAX = 4096;
103
104
  exitCbs = [];
104
105
  lifecycleTimer = null;
106
+ /** Debounce transient pane-probe failures so one flaky `tmux display-message`
107
+ * (timeout / server hiccup under fd pressure) doesn't tear down an adopted
108
+ * pane that's still alive. See recordPaneProbe. (pid-death stays decisive.) */
109
+ livenessGate = new LivenessGate(ADOPT_LIVENESS_MAX_FAILURES);
105
110
  cols = 200;
106
111
  rows = 50;
107
112
  exited = false;
@@ -248,18 +253,36 @@ export class TmuxPipeBackend {
248
253
  if (this.exited)
249
254
  return;
250
255
  this.exitCopyModeIfNeeded();
256
+ const bufferName = `botmux-${randomBytes(8).toString('hex')}`;
251
257
  this.guardedSend('paste-buffer', () => {
252
- execFileSync('tmux', ['load-buffer', '-'], {
253
- input: text,
254
- stdio: ['pipe', 'ignore', 'ignore'],
255
- timeout: 5000,
256
- env: tmuxEnv(),
257
- });
258
- execFileSync('tmux', ['paste-buffer', '-t', this.paneTarget, '-d', '-p'], {
259
- stdio: 'ignore',
260
- timeout: 5000,
261
- env: tmuxEnv(),
262
- });
258
+ let loaded = false;
259
+ try {
260
+ execFileSync('tmux', ['load-buffer', '-b', bufferName, '-'], {
261
+ input: text,
262
+ stdio: ['pipe', 'ignore', 'ignore'],
263
+ timeout: 5000,
264
+ env: tmuxEnv(),
265
+ });
266
+ loaded = true;
267
+ execFileSync('tmux', ['paste-buffer', '-b', bufferName, '-t', this.paneTarget, '-d', '-p'], {
268
+ stdio: 'ignore',
269
+ timeout: 5000,
270
+ env: tmuxEnv(),
271
+ });
272
+ loaded = false;
273
+ }
274
+ finally {
275
+ if (loaded) {
276
+ try {
277
+ execFileSync('tmux', ['delete-buffer', '-b', bufferName], {
278
+ stdio: 'ignore',
279
+ timeout: 1000,
280
+ env: tmuxEnv(),
281
+ });
282
+ }
283
+ catch { /* best-effort cleanup after a failed paste */ }
284
+ }
285
+ }
263
286
  });
264
287
  }
265
288
  /**
@@ -427,24 +450,67 @@ export class TmuxPipeBackend {
427
450
  // ─── Pipe-specific helpers ────────────────────────────────────────────────
428
451
  startLifecycleWatcher() {
429
452
  this.stopLifecycleWatcher();
453
+ this.livenessGate.reset();
430
454
  this.lifecycleTimer = setInterval(() => {
431
455
  if (this.exited)
432
456
  return;
457
+ // The watched CLI pid (adopt mode) is a pure process.kill(pid,0) syscall —
458
+ // it can only report ESRCH (gone) or EPERM (alive), never a transient
459
+ // timeout / EMFILE failure. So pid-death is DECISIVE: tear down at once.
460
+ // This keeps the ≤1s guard against routing Lark input into the user's bare
461
+ // shell after the CLI exits to a still-alive pane. Only the flaky pane
462
+ // probe below gets debounced.
433
463
  if (!this.isCliPidAlive()) {
434
464
  process.stderr.write(`[tmux-pipe-backend] adopted CLI pid ${this.watchCliPid} exited; detaching observer\n`);
435
465
  this.handlePaneExit();
436
466
  return;
437
467
  }
438
- try {
439
- const paneId = execSync(`tmux display-message -p -t ${shellescape(this.paneTarget)} '#{pane_id}'`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'], timeout: 2000, env: tmuxEnv() }).trim();
440
- if (!paneId)
441
- this.handlePaneExit();
442
- }
443
- catch {
444
- this.handlePaneExit();
445
- }
468
+ this.recordPaneProbe(this.isPaneAddressable(2000));
446
469
  }, 1000);
447
470
  }
471
+ /** Is the pane still addressable in tmux? This `display-message` IS the flaky,
472
+ * fd/server-dependent signal (command timeout / busy server under EMFILE) —
473
+ * which is why recordPaneProbe debounces it. `timeoutMs` lets the final
474
+ * confirm wait longer than the 1s poll so an overloaded server can still
475
+ * answer before we declare a live pane dead. */
476
+ isPaneAddressable(timeoutMs) {
477
+ try {
478
+ const paneId = execSync(`tmux display-message -p -t ${shellescape(this.paneTarget)} '#{pane_id}'`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'], timeout: timeoutMs, env: tmuxEnv() }).trim();
479
+ return paneId.length > 0;
480
+ }
481
+ catch {
482
+ return false;
483
+ }
484
+ }
485
+ /**
486
+ * Debounce the (flaky) pane-addressability probe. Tearing down on the FIRST
487
+ * failed probe produced the spurious "⏏ /adopt的 CLI 会话已断开" — a tmux command
488
+ * timeout / busy server (e.g. under EMFILE fd pressure) momentarily fails the
489
+ * probe while the pane is still alive and the CLI still receiving messages.
490
+ * Only after ADOPT_LIVENESS_MAX_FAILURES consecutive failures, AND a final
491
+ * lenient-timeout re-probe that still fails, do we detach. Any success resets.
492
+ * (pid-death is handled decisively in the watcher — see startLifecycleWatcher.)
493
+ */
494
+ recordPaneProbe(alive) {
495
+ if (this.exited)
496
+ return;
497
+ if (!this.livenessGate.record(alive)) {
498
+ if (!alive) {
499
+ process.stderr.write(`[tmux-pipe-backend] adopt pane probe failed (${this.livenessGate.consecutiveFailures}/${ADOPT_LIVENESS_MAX_FAILURES}); retrying before teardown\n`);
500
+ }
501
+ return;
502
+ }
503
+ // Threshold reached — one final authoritative probe with a more lenient
504
+ // timeout so a transiently overloaded tmux server gets a fair chance to
505
+ // answer before we detach a pane that's actually still alive.
506
+ if (this.isPaneAddressable(3000)) {
507
+ this.livenessGate.reset();
508
+ process.stderr.write('[tmux-pipe-backend] adopt pane recovered on final check; staying attached\n');
509
+ return;
510
+ }
511
+ process.stderr.write(`[tmux-pipe-backend] adopted pane gone after ${ADOPT_LIVENESS_MAX_FAILURES} consecutive probe failures; detaching observer\n`);
512
+ this.handlePaneExit();
513
+ }
448
514
  stopLifecycleWatcher() {
449
515
  if (this.lifecycleTimer) {
450
516
  clearInterval(this.lifecycleTimer);