opencode-mux 1.1.1 → 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/README.md +56 -10
- package/dist/args.d.ts +2 -0
- package/dist/args.js +11 -1
- package/dist/args.js.map +1 -1
- package/dist/bin.js +0 -0
- package/dist/cli.d.ts +52 -1
- package/dist/cli.js +227 -25
- package/dist/cli.js.map +1 -1
- package/dist/session.d.ts +9 -0
- package/dist/session.js +7 -0
- package/dist/session.js.map +1 -1
- package/dist/tmux.d.ts +34 -1
- package/dist/tmux.js +89 -14
- package/dist/tmux.js.map +1 -1
- package/dist/tracker.d.ts +13 -1
- package/dist/tracker.js +20 -5
- package/dist/tracker.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/watch.d.ts +25 -1
- package/dist/watch.js +271 -15
- package/dist/watch.js.map +1 -1
- package/package.json +11 -6
package/dist/watch.js
CHANGED
|
@@ -1,9 +1,75 @@
|
|
|
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";
|
|
4
|
-
/**
|
|
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
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Upstream workaround for opencode issue #50135: `opencode mini` keeps a
|
|
30
|
+
* long-lived `session.wait` request open, but its client uses Bun's default
|
|
31
|
+
* fetch idle timeout (300s), which aborts the request during long-running tool
|
|
32
|
+
* calls — the pane then freezes/dies. Disabling the idle timeout is exactly
|
|
33
|
+
* what the pending upstream fix (PR #50248) does, so this is harmless once it
|
|
34
|
+
* ships. See https://github.com/anomalyco/opencode/issues/50135
|
|
35
|
+
*/
|
|
36
|
+
const MINI_IDLE_TIMEOUT_ENV = "BUN_CONFIG_HTTP_IDLE_TIMEOUT=0";
|
|
37
|
+
/**
|
|
38
|
+
* Pane command: attach the child session in the new pane.
|
|
39
|
+
*
|
|
40
|
+
* `mini` is a real subcommand (`opencode mini -s <id>`, no tab bar / agent
|
|
41
|
+
* switcher), launched through `env` to carry the idle-timeout workaround above.
|
|
42
|
+
* The full TUI has **no** `tui` subcommand — `opencode tui -s <id>` makes
|
|
43
|
+
* opencode parse `tui` as the optional directory argument and exit with
|
|
44
|
+
* `ENOENT: chdir … -> 'tui'`, closing the pane instantly. The full TUI is
|
|
45
|
+
* launched bare instead: `opencode -s <id>`.
|
|
46
|
+
*/
|
|
5
47
|
export function defaultPaneArgv(sessionID, paneCommand = "mini") {
|
|
6
|
-
|
|
48
|
+
const head = paneCommand === "mini" ? ["env", MINI_IDLE_TIMEOUT_ENV, "opencode", "mini"] : ["opencode"];
|
|
49
|
+
return [...head, "-s", sessionID];
|
|
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
|
+
});
|
|
7
73
|
}
|
|
8
74
|
/** Wires server events → tracker state machine → tmux actions. */
|
|
9
75
|
export function createWatcher(deps) {
|
|
@@ -14,6 +80,55 @@ export function createWatcher(deps) {
|
|
|
14
80
|
const paneArgv = deps.paneArgv ?? defaultPaneArgv;
|
|
15
81
|
const now = deps.now ?? Date.now;
|
|
16
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
|
+
};
|
|
17
132
|
const openPane = async (sessionID, title) => {
|
|
18
133
|
const argv = paneArgv(sessionID);
|
|
19
134
|
const result = await deps.tmux.splitPane({ targetPane, layout: deps.layout, mainPaneSize: deps.mainPaneSize, argv });
|
|
@@ -21,6 +136,16 @@ export function createWatcher(deps) {
|
|
|
21
136
|
log(`action failed: split-window ${argv.join(" ")} — ${result.error ?? "unknown error"}`);
|
|
22
137
|
return null;
|
|
23
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);
|
|
24
149
|
log(`opened pane ${result.paneId} for session ${sessionID} (${title})`);
|
|
25
150
|
return result.paneId;
|
|
26
151
|
};
|
|
@@ -34,13 +159,64 @@ export function createWatcher(deps) {
|
|
|
34
159
|
return;
|
|
35
160
|
}
|
|
36
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();
|
|
37
166
|
};
|
|
38
167
|
const applyAction = async (action) => {
|
|
39
168
|
if (action.kind !== "close")
|
|
40
169
|
return;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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);
|
|
44
220
|
}
|
|
45
221
|
};
|
|
46
222
|
const applyTick = async (nowMs) => {
|
|
@@ -61,6 +237,8 @@ export function createWatcher(deps) {
|
|
|
61
237
|
return;
|
|
62
238
|
if (deps.parentID !== null && info.parentID !== deps.parentID)
|
|
63
239
|
return;
|
|
240
|
+
if (info.parentID === undefined || !(await ownsParent(info.parentID)))
|
|
241
|
+
return;
|
|
64
242
|
await openTracked(info.id, childTitle(info.title, info.id));
|
|
65
243
|
}
|
|
66
244
|
catch {
|
|
@@ -69,6 +247,44 @@ export function createWatcher(deps) {
|
|
|
69
247
|
};
|
|
70
248
|
/** JSON of the styles last applied to the window (null when none/cleared). */
|
|
71
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
|
+
};
|
|
72
288
|
/**
|
|
73
289
|
* Applies the resolved theme's border styles, or clears them when the theme
|
|
74
290
|
* became null. No tmux calls when the provider is absent or unchanged;
|
|
@@ -95,6 +311,10 @@ export function createWatcher(deps) {
|
|
|
95
311
|
const result = await deps.tmux.clearBorderStyles(targetPane);
|
|
96
312
|
if (!result.ok)
|
|
97
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;
|
|
98
318
|
return;
|
|
99
319
|
}
|
|
100
320
|
const result = await deps.tmux.applyBorderStyles(targetPane, styles);
|
|
@@ -113,6 +333,8 @@ export function createWatcher(deps) {
|
|
|
113
333
|
// when they completed).
|
|
114
334
|
if (!(info.id in active))
|
|
115
335
|
continue;
|
|
336
|
+
if (info.parentID === undefined || !(await ownsParent(info.parentID)))
|
|
337
|
+
continue;
|
|
116
338
|
await openTracked(info.id, childTitle(info.title, info.id));
|
|
117
339
|
}
|
|
118
340
|
await applyTick(now());
|
|
@@ -123,11 +345,27 @@ export function createWatcher(deps) {
|
|
|
123
345
|
},
|
|
124
346
|
async dispatch(event) {
|
|
125
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
|
+
}
|
|
126
359
|
if (cls.kind === "created") {
|
|
127
360
|
if (cls.parentID === undefined)
|
|
128
361
|
return;
|
|
129
|
-
if (deps.parentID !== null
|
|
362
|
+
if (deps.parentID !== null) {
|
|
363
|
+
if (cls.parentID !== deps.parentID)
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
else if (!(await ownsParent(cls.parentID))) {
|
|
130
367
|
return;
|
|
368
|
+
}
|
|
131
369
|
await openTracked(cls.sessionID, childTitle(cls.title, cls.slug));
|
|
132
370
|
return;
|
|
133
371
|
}
|
|
@@ -165,21 +403,39 @@ export function createWatcher(deps) {
|
|
|
165
403
|
appliedThemeSig = "error";
|
|
166
404
|
}
|
|
167
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.
|
|
168
408
|
const timer = setInterval(() => void watcher.tick(now()), deps.tickEveryMs);
|
|
169
409
|
timer.unref();
|
|
170
|
-
signal.addEventListener("abort", () => clearInterval(timer), { once: true });
|
|
171
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).
|
|
172
414
|
await watcher.adopt();
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
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);
|
|
177
437
|
}
|
|
178
438
|
}
|
|
179
|
-
catch (error) {
|
|
180
|
-
if (!signal.aborted)
|
|
181
|
-
log(`watcher error: ${String(error)}`);
|
|
182
|
-
}
|
|
183
439
|
finally {
|
|
184
440
|
clearInterval(timer);
|
|
185
441
|
}
|
package/dist/watch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGpD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AA4BxC,sHAAsH;AACtH,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,cAA2B,MAAM;IAClF,OAAO,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AACpD,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,aAAa,CAAC,IAAe;IAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/D,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,eAAe,CAAC;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IAErB,MAAM,QAAQ,GAAG,KAAK,EAAE,SAAiB,EAAE,KAAa,EAA0B,EAAE;QAClF,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QACrH,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YACzC,GAAG,CAAC,+BAA+B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;YAC1F,OAAO,IAAI,CAAC;QACd,CAAC;QACD,GAAG,CAAC,eAAe,MAAM,CAAC,MAAM,gBAAgB,SAAS,KAAK,KAAK,GAAG,CAAC,CAAC;QACxE,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC,CAAC;IAEF,gFAAgF;IAChF,MAAM,WAAW,GAAG,KAAK,EAAE,SAAiB,EAAE,KAAa,EAAiB,EAAE;QAC5E,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;YAAE,OAAO;QAC7C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAChD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,EAAE,MAAqB,EAAiB,EAAE;QACjE,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO;QACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,GAAG,CAAC,4BAA4B,MAAM,CAAC,MAAM,MAAM,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;QACxF,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,EAAE,KAAa,EAAiB,EAAE;QACvD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC;IAEF;;;;OAIG;IACH,MAAM,cAAc,GAAG,KAAK,EAAE,SAAiB,EAAiB,EAAE;QAChE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjE,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;YACtD,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO;YAC/B,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACtE,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC;QAAC,MAAM,CAAC;YACP,kDAAkD;QACpD,CAAC;IACH,CAAC,CAAC;IAEF,8EAA8E;IAC9E,IAAI,eAAe,GAAkB,IAAI,CAAC;IAE1C;;;;OAIG;IACH,MAAM,SAAS,GAAG,KAAK,IAAmB,EAAE;QAC1C,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;YAAE,OAAO;QAC3C,IAAI,MAA2B,CAAC;QAChC,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACpC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,mBAAmB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxC,eAAe,GAAG,OAAO,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,IAAI,GAAG,KAAK,eAAe;YAAE,OAAO;QACpC,eAAe,GAAG,GAAG,CAAC;QACtB,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;YAC7D,IAAI,CAAC,MAAM,CAAC,EAAE;gBAAE,GAAG,CAAC,2BAA2B,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;YAClF,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACrE,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,GAAG,CAAC,mBAAmB,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;IAC5E,CAAC,CAAC;IAEF,MAAM,OAAO,GAAY;QACvB,KAAK,CAAC,KAAK;YACT,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBAClD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACjE,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;oBAC5B,mEAAmE;oBACnE,qEAAqE;oBACrE,qEAAqE;oBACrE,wBAAwB;oBACxB,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC;wBAAE,SAAS;oBACnC,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9D,CAAC;gBACD,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;YACzB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,GAAG,CAAC,iBAAiB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,KAAK;YAClB,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC3B,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS;oBAAE,OAAO;gBACvC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ;oBAAE,OAAO;gBACrE,MAAM,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClE,OAAO;YACT,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC5B,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;gBAChD,OAAO;YACT,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACxB,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC/C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACvC,CAAC;qBAAM,CAAC;oBACN,MAAM,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,KAAK;YACd,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;YACvB,MAAM,SAAS,EAAE,CAAC;QACpB,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,MAAM;YAChB,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBACnC,gEAAgE;gBAChE,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;oBAC3C,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;oBAC1C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;wBACrB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;wBACtE,IAAI,CAAC,MAAM,CAAC,EAAE;4BAAE,GAAG,CAAC,mBAAmB,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;oBAC5E,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,GAAG,CAAC,mBAAmB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACxC,eAAe,GAAG,OAAO,CAAC;gBAC5B,CAAC;YACH,CAAC;YACD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC5E,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7E,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;gBACtB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACjD,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBACjC,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAC9B,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,OAAO;oBAAE,GAAG,CAAC,kBAAkB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC9D,CAAC;oBAAS,CAAC;gBACT,aAAa,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;KACF,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
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.
|
|
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.
|
|
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.
|
|
28
|
-
"tsx": "^4.
|
|
29
|
-
"typescript": "^5.
|
|
30
|
-
"vitest": "^4.1.
|
|
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": {
|