opencode-mux 1.2.0 → 1.3.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.
package/dist/watch.js CHANGED
@@ -1,6 +1,30 @@
1
+ import { realpathSync } from "node:fs";
2
+ import { resolve, sep } from "node:path";
1
3
  import { childTitle, classifyEvent } from "./session.js";
2
4
  import { childSessions, events } from "./server.js";
3
5
  import { currentPane } from "./tmux.js";
6
+ /** Resolves symlinks when possible so cwd and daemon-reported paths compare. */
7
+ function normalizeDirectory(path) {
8
+ let out;
9
+ try {
10
+ out = realpathSync(path);
11
+ }
12
+ catch {
13
+ out = resolve(path);
14
+ }
15
+ return out.length > 1 && out.endsWith(sep) ? out.slice(0, -1) : out;
16
+ }
17
+ /**
18
+ * True when both paths name the same project: equal, or one contains the other.
19
+ * Containment covers opencode reporting the project root while the wrapper runs
20
+ * in a subdirectory (and vice versa); component-aware so "/a/proj" and
21
+ * "/a/proj-2" stay distinct.
22
+ */
23
+ export function isSameProject(left, right) {
24
+ const a = normalizeDirectory(left);
25
+ const b = normalizeDirectory(right);
26
+ return a === b || a.startsWith(`${b}${sep}`) || b.startsWith(`${a}${sep}`);
27
+ }
4
28
  /**
5
29
  * Upstream workaround for opencode issue #50135: `opencode mini` keeps a
6
30
  * long-lived `session.wait` request open, but its client uses Bun's default
@@ -24,6 +48,29 @@ export function defaultPaneArgv(sessionID, paneCommand = "mini") {
24
48
  const head = paneCommand === "mini" ? ["env", MINI_IDLE_TIMEOUT_ENV, "opencode", "mini"] : ["opencode"];
25
49
  return [...head, "-s", sessionID];
26
50
  }
51
+ /**
52
+ * Delay before the watcher subscribes again after the event stream ended or
53
+ * failed. Fixed on purpose: a stream that fails instantly means the daemon is
54
+ * gone, so a hot loop is what must be avoided — not a slow retry. The daemon
55
+ * is reachable again within a second of a restart, so exponential backoff
56
+ * would only delay the recovery that matters.
57
+ */
58
+ const RECONNECT_DELAY_MS = 1000;
59
+ /** Resolves after `ms`, or right away when `signal` aborts (listener removed). */
60
+ function sleep(ms, signal) {
61
+ if (signal.aborted)
62
+ return Promise.resolve();
63
+ return new Promise((resolve) => {
64
+ const finish = () => {
65
+ clearTimeout(timer);
66
+ signal.removeEventListener("abort", finish);
67
+ resolve();
68
+ };
69
+ const timer = setTimeout(finish, ms);
70
+ timer.unref();
71
+ signal.addEventListener("abort", finish, { once: true });
72
+ });
73
+ }
27
74
  /** Wires server events → tracker state machine → tmux actions. */
28
75
  export function createWatcher(deps) {
29
76
  const targetPane = deps.targetPane ?? currentPane(process.env);
@@ -33,6 +80,55 @@ export function createWatcher(deps) {
33
80
  const paneArgv = deps.paneArgv ?? defaultPaneArgv;
34
81
  const now = deps.now ?? Date.now;
35
82
  const log = deps.log;
83
+ /**
84
+ * parent session id → does it belong to this instance's project? Cached per
85
+ * parent (a session's directory rarely changes; `session.moved` invalidates
86
+ * the entry). Lookups that fail are not cached, so a transient error does not
87
+ * permanently hide a parent. Capped so a long-lived watcher cannot grow it
88
+ * without bound.
89
+ */
90
+ const ownedParents = new Map();
91
+ const MAX_OWNED_PARENTS = 256;
92
+ /**
93
+ * Whether a subagent's parent session belongs to this instance. Always true
94
+ * with an explicit parent (the id match already pins it) or without a scope.
95
+ */
96
+ const ownsParent = async (parentID) => {
97
+ if (deps.parentID !== null || deps.projectDirectories === undefined)
98
+ return true;
99
+ const cached = ownedParents.get(parentID);
100
+ if (cached !== undefined)
101
+ return cached;
102
+ try {
103
+ const info = await deps.client.session.get({ sessionID: parentID });
104
+ const owned = deps.projectDirectories.some((dir) => isSameProject(info.location.directory, dir));
105
+ // Evict the oldest entry (Map insertion order) before inserting.
106
+ while (ownedParents.size >= MAX_OWNED_PARENTS) {
107
+ const oldest = ownedParents.keys().next();
108
+ if (oldest.done === true)
109
+ break;
110
+ ownedParents.delete(oldest.value);
111
+ }
112
+ ownedParents.set(parentID, owned);
113
+ return owned;
114
+ }
115
+ catch (error) {
116
+ log(`scope lookup failed: ${parentID} — ${String(error)}`);
117
+ return false;
118
+ }
119
+ };
120
+ /**
121
+ * Shared-window skips already logged, so a split storm in a window that
122
+ * another instance owns does not spam the log. A skip is not a failure: the
123
+ * pane exists, only the window geometry was left to the first instance.
124
+ */
125
+ const loggedSkips = new Set();
126
+ const logLayoutSkip = (reason) => {
127
+ if (loggedSkips.has(reason))
128
+ return;
129
+ loggedSkips.add(reason);
130
+ log(`layout skipped: ${reason}`);
131
+ };
36
132
  const openPane = async (sessionID, title) => {
37
133
  const argv = paneArgv(sessionID);
38
134
  const result = await deps.tmux.splitPane({ targetPane, layout: deps.layout, mainPaneSize: deps.mainPaneSize, argv });
@@ -40,6 +136,16 @@ export function createWatcher(deps) {
40
136
  log(`action failed: split-window ${argv.join(" ")} — ${result.error ?? "unknown error"}`);
41
137
  return null;
42
138
  }
139
+ if (result.layoutError !== undefined) {
140
+ // The pane exists, only the window could not be shaped: appearance
141
+ // failures are non-fatal, so log and keep the pane.
142
+ log(`action failed: layout ${deps.layout} — ${result.layoutError}`);
143
+ }
144
+ const skipped = result.layoutSkipped;
145
+ // A shared window (another opencode-mux instance owns panes here) skips the
146
+ // window-wide layout deliberately — worth a line, not a failure.
147
+ if (skipped !== undefined)
148
+ logLayoutSkip(skipped);
43
149
  log(`opened pane ${result.paneId} for session ${sessionID} (${title})`);
44
150
  return result.paneId;
45
151
  };
@@ -53,13 +159,64 @@ export function createWatcher(deps) {
53
159
  return;
54
160
  }
55
161
  deps.tracker.open(sessionID, paneId, now());
162
+ // Opening a pane is a lifecycle moment: a border clear that tmux skipped
163
+ // earlier (shared window) gets another chance instead of waiting for the
164
+ // next theme change.
165
+ await retryPendingClear();
56
166
  };
57
167
  const applyAction = async (action) => {
58
168
  if (action.kind !== "close")
59
169
  return;
60
- const result = await deps.tmux.killPane(action.paneId);
61
- if (!result.ok) {
62
- log(`action failed: kill-pane ${action.paneId} — ${result.error ?? "unknown error"}`);
170
+ // A delayed or duplicated terminal event (e.g. the previous turn's
171
+ // session.execution.succeeded landing after the next execution.started)
172
+ // can arm a close while the session is mid-turn again. Never kill a pane
173
+ // whose session is actually running: cancel the close and keep the pane.
174
+ let active = false;
175
+ try {
176
+ const running = await deps.client.session.active();
177
+ active = action.sessionID in running;
178
+ }
179
+ catch (error) {
180
+ // Fail open: an unreachable lookup must never leak a pane forever.
181
+ log(`close check failed: ${String(error)}`);
182
+ }
183
+ if (active) {
184
+ deps.tracker.markBusy(action.sessionID);
185
+ return;
186
+ }
187
+ // The lookup above is asynchronous and the tick interval is not serialized
188
+ // with the dispatch loop, so a real busy event can land while it is in
189
+ // flight: markBusy then turned the state back to open and this close is
190
+ // stale. Kill only a state that is still closing, with this exact pane.
191
+ const state = deps.tracker.snapshot().get(action.sessionID);
192
+ if (state === undefined || state.phase !== "closing" || !state.emitted || state.paneId !== action.paneId)
193
+ return;
194
+ try {
195
+ const result = await deps.tmux.killPane(action.paneId);
196
+ if (!result.ok) {
197
+ log(`action failed: kill-pane ${action.paneId} — ${result.error ?? "unknown error"}`);
198
+ }
199
+ // tmux hands the freed cells to a single neighbouring pane, so the remaining
200
+ // subagent panes end up with uneven sizes (one grows, the others keep their
201
+ // old size). Re-applying the configured layout re-tiles them equally, and
202
+ // restores the configured main pane size for main-* layouts. Runs even when
203
+ // the kill failed: the pane may have exited on its own, and the uneven
204
+ // window still needs re-tiling. Appearance failures are non-fatal.
205
+ const relayout = await deps.tmux.relayout({ targetPane, layout: deps.layout, mainPaneSize: deps.mainPaneSize });
206
+ if (!relayout.ok) {
207
+ log(`action failed: relayout ${deps.layout} — ${relayout.error ?? "unknown error"}`);
208
+ }
209
+ // A shared window skips the relayout deliberately: log it once, not as a failure.
210
+ if (relayout.skipped !== undefined)
211
+ logLayoutSkip(relayout.skipped);
212
+ await retryPendingClear();
213
+ }
214
+ finally {
215
+ // The close is done either way: drop the emitted state so the session can
216
+ // be re-opened (and reopened panes get a fresh close cycle). In a finally
217
+ // so an adapter that throws on kill-pane/relayout cannot leave a stale
218
+ // entry behind that blocks the session's next close cycle.
219
+ deps.tracker.forget(action.sessionID);
63
220
  }
64
221
  };
65
222
  const applyTick = async (nowMs) => {
@@ -80,6 +237,8 @@ export function createWatcher(deps) {
80
237
  return;
81
238
  if (deps.parentID !== null && info.parentID !== deps.parentID)
82
239
  return;
240
+ if (info.parentID === undefined || !(await ownsParent(info.parentID)))
241
+ return;
83
242
  await openTracked(info.id, childTitle(info.title, info.id));
84
243
  }
85
244
  catch {
@@ -88,6 +247,44 @@ export function createWatcher(deps) {
88
247
  };
89
248
  /** JSON of the styles last applied to the window (null when none/cleared). */
90
249
  let appliedThemeSig = null;
250
+ /**
251
+ * A border clear that tmux skipped because another opencode-mux instance
252
+ * shares the window. Recorded instead of retried per tick (the "zero tmux
253
+ * calls when nothing changed" invariant), retried from the pane lifecycle
254
+ * paths — otherwise the old colours would persist forever.
255
+ */
256
+ let pendingClear = false;
257
+ /**
258
+ * Retries a skipped border clear. Called from the pane lifecycle paths only
259
+ * (after a split, after a close): a shared window can end at any moment, but
260
+ * polling it every tick would mean tmux calls on every tick even when nothing
261
+ * changed. Re-resolves the theme, so a retry never clears borders the current
262
+ * theme wants.
263
+ */
264
+ const retryPendingClear = async () => {
265
+ if (!pendingClear || deps.themeStyles === undefined)
266
+ return;
267
+ let styles;
268
+ try {
269
+ styles = deps.themeStyles.current();
270
+ }
271
+ catch (error) {
272
+ log(`styling failed: ${String(error)}`);
273
+ return; // keep pending: try again on the next lifecycle event
274
+ }
275
+ if (styles !== null) {
276
+ // The theme came back: drop the pending clear and let syncTheme apply it
277
+ // on the next tick instead of stripping the colours the user just chose.
278
+ pendingClear = false;
279
+ return;
280
+ }
281
+ const result = await deps.tmux.clearBorderStyles(targetPane);
282
+ if (!result.ok) {
283
+ log(`styling failed: clear — ${result.error ?? "unknown error"}`);
284
+ return;
285
+ }
286
+ pendingClear = result.skipped !== undefined;
287
+ };
91
288
  /**
92
289
  * Applies the resolved theme's border styles, or clears them when the theme
93
290
  * became null. No tmux calls when the provider is absent or unchanged;
@@ -114,6 +311,10 @@ export function createWatcher(deps) {
114
311
  const result = await deps.tmux.clearBorderStyles(targetPane);
115
312
  if (!result.ok)
116
313
  log(`styling failed: clear — ${result.error ?? "unknown error"}`);
314
+ // A skipped clear did not happen (shared window): remember it for the
315
+ // lifecycle paths instead of memoizing it as applied.
316
+ else
317
+ pendingClear = result.skipped !== undefined;
117
318
  return;
118
319
  }
119
320
  const result = await deps.tmux.applyBorderStyles(targetPane, styles);
@@ -132,6 +333,8 @@ export function createWatcher(deps) {
132
333
  // when they completed).
133
334
  if (!(info.id in active))
134
335
  continue;
336
+ if (info.parentID === undefined || !(await ownsParent(info.parentID)))
337
+ continue;
135
338
  await openTracked(info.id, childTitle(info.title, info.id));
136
339
  }
137
340
  await applyTick(now());
@@ -142,11 +345,27 @@ export function createWatcher(deps) {
142
345
  },
143
346
  async dispatch(event) {
144
347
  const cls = classifyEvent(event);
348
+ if (cls.kind === "connected") {
349
+ // The event stream can reconnect (daemon restart); sessions created
350
+ // during the disconnect are invisible unless we adopt again.
351
+ log("server connected: re-adopting");
352
+ await watcher.adopt();
353
+ return;
354
+ }
355
+ if (cls.kind === "moved") {
356
+ ownedParents.delete(cls.sessionID);
357
+ return;
358
+ }
145
359
  if (cls.kind === "created") {
146
360
  if (cls.parentID === undefined)
147
361
  return;
148
- if (deps.parentID !== null && cls.parentID !== deps.parentID)
362
+ if (deps.parentID !== null) {
363
+ if (cls.parentID !== deps.parentID)
364
+ return;
365
+ }
366
+ else if (!(await ownsParent(cls.parentID))) {
149
367
  return;
368
+ }
150
369
  await openTracked(cls.sessionID, childTitle(cls.title, cls.slug));
151
370
  return;
152
371
  }
@@ -184,21 +403,39 @@ export function createWatcher(deps) {
184
403
  appliedThemeSig = "error";
185
404
  }
186
405
  }
406
+ // One tick interval for the whole watcher lifetime: it must stay alive
407
+ // across reconnects and is cleared only when the loop below is done.
187
408
  const timer = setInterval(() => void watcher.tick(now()), deps.tickEveryMs);
188
409
  timer.unref();
189
- signal.addEventListener("abort", () => clearInterval(timer), { once: true });
190
410
  try {
411
+ // Startup adopt guarantees panes for already-running children even if
412
+ // the first subscribe fails, and is idempotent (the tracker reserve
413
+ // guard blocks duplicates when the connect event adopts again).
191
414
  await watcher.adopt();
192
- const stream = await events(deps.client, signal);
193
- for await (const event of stream) {
194
- await watcher.dispatch(event);
195
- await watcher.tick(now());
415
+ // Both SDK generations wrap subscribe in SharedEvents.make, which
416
+ // finishes its subscribers when the stream ends or errors — it does not
417
+ // reconnect. Without this loop the watcher would exit on the first
418
+ // daemon restart and stay blind for the rest of the TUI's life.
419
+ while (!signal.aborted) {
420
+ let failure = "event stream ended";
421
+ try {
422
+ const stream = await events(deps.client, signal);
423
+ for await (const event of stream) {
424
+ await watcher.dispatch(event);
425
+ await watcher.tick(now());
426
+ }
427
+ }
428
+ catch (error) {
429
+ failure = String(error);
430
+ }
431
+ if (signal.aborted)
432
+ break;
433
+ log(`watcher error: ${failure}`);
434
+ // Exactly one subscription is active at a time: the previous one has
435
+ // finished before the delay, and the next one starts after it.
436
+ await sleep(RECONNECT_DELAY_MS, signal);
196
437
  }
197
438
  }
198
- catch (error) {
199
- if (!signal.aborted)
200
- log(`watcher error: ${String(error)}`);
201
- }
202
439
  finally {
203
440
  clearInterval(timer);
204
441
  }
package/dist/watch.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"watch.js","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-mux",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Drop-in opencode wrapper that opens tmux panes for subagent sessions automatically",
5
5
  "type": "module",
6
6
  "bin": {
@@ -20,14 +20,19 @@
20
20
  "prepublishOnly": "npm run check && npm test && npm run build"
21
21
  },
22
22
  "dependencies": {
23
- "@opencode/client": "^2.0.6",
23
+ "@opencode/client": "^2.1.3",
24
24
  "@opencode/client-legacy": "npm:@opencode/client@2.0.5"
25
25
  },
26
26
  "devDependencies": {
27
- "@types/node": "^22.10.0",
28
- "tsx": "^4.19.0",
29
- "typescript": "^5.6.0",
30
- "vitest": "^4.1.11"
27
+ "@types/node": "^22.20.5",
28
+ "tsx": "^4.23.15",
29
+ "typescript": "^5.9.3",
30
+ "vitest": "^4.1.12"
31
+ },
32
+ "overrides": {
33
+ "@opencode/client-legacy": {
34
+ "effect": "4.0.1"
35
+ }
31
36
  },
32
37
  "license": "MIT",
33
38
  "repository": {