claude-mux 0.7.0 → 0.7.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.
- package/README.md +4 -2
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +1 -1
- package/dist/utils/version.d.ts +1 -1
- package/dist/utils/version.js +1 -1
- package/dist/web/client/_app/immutable/chunks/{DU91Ml7U.js → BGcEgn7w.js} +1 -1
- package/{web/.svelte-kit/output/client/_app/immutable/chunks/DmdO6ygw.js → dist/web/client/_app/immutable/chunks/By6CYjmE.js} +1 -1
- package/dist/web/client/_app/immutable/chunks/{HKNo9LID.js → CR5jMWGV.js} +1 -1
- package/{web/.svelte-kit/output/client/_app/immutable/entry/app.CGIBnoln.js → dist/web/client/_app/immutable/entry/app.DmtnygN7.js} +2 -2
- package/dist/web/client/_app/immutable/entry/start.fYmelGlC.js +1 -0
- package/dist/web/client/_app/immutable/nodes/{0.CqlJ9a31.js → 0.DGDAdwT5.js} +1 -1
- package/dist/web/client/_app/immutable/nodes/{1.BQUZh2-w.js → 1.Cg8dWgUN.js} +1 -1
- package/dist/web/client/_app/immutable/nodes/{2.CCV1YdgF.js → 2.DItUEo3e.js} +1 -1
- package/dist/web/client/_app/immutable/nodes/{3.D9tDCdq8.js → 3.dHui0twF.js} +1 -1
- package/dist/web/client/_app/immutable/nodes/{4.BqPyNkFA.js → 4.CiEHP0cr.js} +1 -1
- package/dist/web/client/_app/version.json +1 -1
- package/dist/web/server/chunks/{0-BHWsmCJv.js → 0-BmRg-l2z.js} +5 -5
- package/dist/web/server/chunks/{0-BHWsmCJv.js.map → 0-BmRg-l2z.js.map} +1 -1
- package/dist/web/server/chunks/{1-YRx6A8Tm.js → 1-CPgO8U7d.js} +3 -3
- package/dist/web/server/chunks/{1-YRx6A8Tm.js.map → 1-CPgO8U7d.js.map} +1 -1
- package/dist/web/server/chunks/{2-eC6JuGAo.js → 2--ZO5fZp_.js} +5 -5
- package/dist/web/server/chunks/{2-eC6JuGAo.js.map → 2--ZO5fZp_.js.map} +1 -1
- package/dist/web/server/chunks/{3-Bk-wV20p.js → 3-7HqSep9c.js} +3 -3
- package/dist/web/server/chunks/{3-Bk-wV20p.js.map → 3-7HqSep9c.js.map} +1 -1
- package/dist/web/server/chunks/{4-nteBgDrW.js → 4-C1PCdmY0.js} +4 -4
- package/dist/web/server/chunks/{4-nteBgDrW.js.map → 4-C1PCdmY0.js.map} +1 -1
- package/dist/web/server/index.js +1 -1
- package/dist/web/server/index.js.map +1 -1
- package/dist/web/server/manifest.js +10 -10
- package/dist/web/server/manifest.js.map +1 -1
- package/docs/release-checklist.md +8 -34
- package/docs/removing-hooks.md +14 -14
- package/package.json +1 -1
- package/src/cli.ts +1 -1
- package/src/utils/version.ts +1 -1
- package/web/.svelte-kit/adapter-bun/chunks/internal.js +1 -1
- package/web/.svelte-kit/adapter-bun/manifest-full.js +1 -1
- package/web/.svelte-kit/adapter-bun/manifest.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/0.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/1.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/2.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/3.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/4.js +1 -1
- package/web/.svelte-kit/adapter-node/.vite/manifest.json +200 -15
- package/web/.svelte-kit/adapter-node/_app/immutable/assets/AllSessionsPanel.BKhqOrbV.css +1 -0
- package/web/.svelte-kit/adapter-node/_app/immutable/assets/_layout.WptSHSUl.css +1 -0
- package/web/.svelte-kit/adapter-node/_app/immutable/assets/_page.DldLgTc-.css +1 -0
- package/web/.svelte-kit/adapter-node/_app/immutable/assets/_page.DoNWy7tW.css +1 -0
- package/web/.svelte-kit/adapter-node/chunks/AllSessionsPanel.svelte_svelte_type_style_lang.js +49 -0
- package/web/.svelte-kit/adapter-node/chunks/alert-dialog-description.js +2670 -0
- package/web/.svelte-kit/adapter-node/chunks/auth.js +59 -0
- package/web/.svelte-kit/adapter-node/chunks/button.js +82 -0
- package/web/.svelte-kit/adapter-node/chunks/client.js +29 -0
- package/web/.svelte-kit/adapter-node/chunks/context.js +28 -16
- package/web/.svelte-kit/adapter-node/chunks/events.js +121 -0
- package/web/.svelte-kit/adapter-node/chunks/index.js +1 -1
- package/web/.svelte-kit/adapter-node/chunks/index2.js +186 -68
- package/web/.svelte-kit/adapter-node/chunks/internal.js +5 -90
- package/web/.svelte-kit/adapter-node/chunks/pane.js +82 -0
- package/web/.svelte-kit/adapter-node/chunks/sessions-json.js +16 -1
- package/web/.svelte-kit/adapter-node/chunks/sessions.svelte.js +174 -12
- package/web/.svelte-kit/adapter-node/chunks/ws-handlers.js +782 -0
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/auth/login/_server.ts.js +22 -0
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/auth/logout/_server.ts.js +9 -0
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/beads/_server.ts.js +22 -0
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/chrome/_server.ts.js +30 -0
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/files/image/_server.ts.js +53 -0
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/sessions/_id_/kill/_server.ts.js +12 -6
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/sessions/_id_/restart/_server.ts.js +40 -0
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/sessions/_id_/screenshots/_server.ts.js +28 -0
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/sessions/_id_/send/_server.ts.js +11 -4
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/sessions/_server.ts.js +1 -78
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/sessions/_target_/output/_server.ts.js +2 -2
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/tmux/panes/_server.ts.js +21 -0
- package/web/.svelte-kit/adapter-node/entries/fallbacks/error.svelte.js +1 -18
- package/web/.svelte-kit/adapter-node/entries/hooks.server.js +105 -0
- package/web/.svelte-kit/adapter-node/entries/pages/_layout.svelte.js +493 -6
- package/web/.svelte-kit/adapter-node/entries/pages/_page.svelte.js +3024 -54
- package/web/.svelte-kit/adapter-node/entries/pages/login/_page.server.ts.js +15 -0
- package/web/.svelte-kit/adapter-node/entries/pages/login/_page.svelte.js +37 -0
- package/web/.svelte-kit/adapter-node/entries/pages/session/_target_/_page.svelte.js +623 -46
- package/web/.svelte-kit/adapter-node/manifest-full.js +67 -3
- package/web/.svelte-kit/adapter-node/manifest.js +67 -3
- package/web/.svelte-kit/adapter-node/nodes/0.js +2 -2
- package/web/.svelte-kit/adapter-node/nodes/1.js +1 -1
- package/web/.svelte-kit/adapter-node/nodes/2.js +2 -2
- package/web/.svelte-kit/adapter-node/nodes/3.js +6 -4
- package/web/.svelte-kit/adapter-node/nodes/4.js +8 -0
- package/web/.svelte-kit/ambient.d.ts +28 -2
- package/web/.svelte-kit/generated/server/internal.js +1 -1
- package/web/.svelte-kit/output/client/.vite/manifest.json +44 -44
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{DU91Ml7U.js → BGcEgn7w.js} +1 -1
- package/{dist/web/client/_app/immutable/chunks/DmdO6ygw.js → web/.svelte-kit/output/client/_app/immutable/chunks/By6CYjmE.js} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{HKNo9LID.js → CR5jMWGV.js} +1 -1
- package/{dist/web/client/_app/immutable/entry/app.CGIBnoln.js → web/.svelte-kit/output/client/_app/immutable/entry/app.DmtnygN7.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/entry/start.fYmelGlC.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{0.CqlJ9a31.js → 0.DGDAdwT5.js} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{1.BQUZh2-w.js → 1.Cg8dWgUN.js} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{2.CCV1YdgF.js → 2.DItUEo3e.js} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{3.D9tDCdq8.js → 3.dHui0twF.js} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{4.BqPyNkFA.js → 4.CiEHP0cr.js} +1 -1
- package/web/.svelte-kit/output/client/_app/version.json +1 -1
- package/web/.svelte-kit/output/server/chunks/internal.js +1 -1
- package/web/.svelte-kit/output/server/manifest-full.js +1 -1
- package/web/.svelte-kit/output/server/manifest.js +1 -1
- package/web/.svelte-kit/output/server/nodes/0.js +1 -1
- package/web/.svelte-kit/output/server/nodes/1.js +1 -1
- package/web/.svelte-kit/output/server/nodes/2.js +1 -1
- package/web/.svelte-kit/output/server/nodes/3.js +1 -1
- package/web/.svelte-kit/output/server/nodes/4.js +1 -1
- package/dist/web/client/_app/immutable/entry/start.CJk8zB1j.js +0 -1
- package/web/.svelte-kit/adapter-node/_app/immutable/assets/_layout.4NiX29PU.css +0 -1
- package/web/.svelte-kit/adapter-node/_app/immutable/assets/_page.BEMzYUGV.css +0 -1
- package/web/.svelte-kit/adapter-node/_app/immutable/assets/_page.DOJn7TG7.css +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/entry/start.CJk8zB1j.js +0 -1
|
@@ -1,27 +1,184 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { f as ssr_context, g as getContext } from "./context.js";
|
|
2
|
+
import { ae as lifecycle_function_unavailable } from "./index2.js";
|
|
2
3
|
import "clsx";
|
|
4
|
+
import "@sveltejs/kit/internal";
|
|
5
|
+
import "./exports.js";
|
|
6
|
+
import "./utils.js";
|
|
7
|
+
import "@sveltejs/kit/internal/server";
|
|
8
|
+
import "./state.svelte.js";
|
|
3
9
|
function onDestroy(fn) {
|
|
4
10
|
/** @type {SSRContext} */
|
|
5
11
|
ssr_context.r.on_destroy(fn);
|
|
6
12
|
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
13
|
+
function mount() {
|
|
14
|
+
lifecycle_function_unavailable("mount");
|
|
15
|
+
}
|
|
16
|
+
function unmount() {
|
|
17
|
+
lifecycle_function_unavailable("unmount");
|
|
18
|
+
}
|
|
19
|
+
async function tick() {
|
|
20
|
+
}
|
|
21
|
+
const getStores = () => {
|
|
22
|
+
const stores$1 = getContext("__svelte__");
|
|
23
|
+
return {
|
|
24
|
+
/** @type {typeof page} */
|
|
25
|
+
page: {
|
|
26
|
+
subscribe: stores$1.page.subscribe
|
|
27
|
+
},
|
|
28
|
+
/** @type {typeof navigating} */
|
|
29
|
+
navigating: {
|
|
30
|
+
subscribe: stores$1.navigating.subscribe
|
|
31
|
+
},
|
|
32
|
+
/** @type {typeof updated} */
|
|
33
|
+
updated: stores$1.updated
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
const page = {
|
|
37
|
+
subscribe(fn) {
|
|
38
|
+
const store = getStores().page;
|
|
39
|
+
return store.subscribe(fn);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
const DEFAULT_CONFIG = {
|
|
43
|
+
pingInterval: 3e4,
|
|
44
|
+
pongTimeout: 1e4,
|
|
45
|
+
baseReconnectDelay: 1e3,
|
|
46
|
+
maxReconnectDelay: 3e4
|
|
47
|
+
};
|
|
48
|
+
class ReliableWebSocket {
|
|
10
49
|
connected = false;
|
|
11
50
|
ws = null;
|
|
51
|
+
pingTimer = null;
|
|
12
52
|
reconnectTimer = null;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
53
|
+
lastPong = 0;
|
|
54
|
+
reconnectAttempts = 0;
|
|
55
|
+
visibilityHandler = null;
|
|
56
|
+
config;
|
|
57
|
+
constructor(config) {
|
|
58
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
59
|
+
}
|
|
60
|
+
/** Subclass can override to control reconnection (e.g., only reconnect if target is set) */
|
|
61
|
+
shouldReconnect() {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
/** Subclass can override to run code on successful connection */
|
|
65
|
+
onConnected() {
|
|
66
|
+
}
|
|
67
|
+
/** Subclass can override to run code on disconnection */
|
|
68
|
+
onDisconnected() {
|
|
69
|
+
}
|
|
70
|
+
doConnect() {
|
|
16
71
|
return;
|
|
17
72
|
}
|
|
18
|
-
|
|
19
|
-
this.ws?.close();
|
|
20
|
-
this.ws = null;
|
|
73
|
+
doDisconnect() {
|
|
21
74
|
if (this.reconnectTimer) {
|
|
22
75
|
clearTimeout(this.reconnectTimer);
|
|
23
76
|
this.reconnectTimer = null;
|
|
24
77
|
}
|
|
78
|
+
this.stopPingTimer();
|
|
79
|
+
this.removeVisibilityHandler();
|
|
80
|
+
this.connected = false;
|
|
81
|
+
this.reconnectAttempts = 0;
|
|
82
|
+
if (this.ws) {
|
|
83
|
+
this.ws.onopen = null;
|
|
84
|
+
this.ws.onclose = null;
|
|
85
|
+
this.ws.onerror = null;
|
|
86
|
+
this.ws.onmessage = null;
|
|
87
|
+
if (this.ws.readyState !== WebSocket.CLOSED) {
|
|
88
|
+
this.ws.close();
|
|
89
|
+
}
|
|
90
|
+
this.ws = null;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/** Force reconnection (resets backoff) */
|
|
94
|
+
forceReconnect() {
|
|
95
|
+
this.reconnectAttempts = 0;
|
|
96
|
+
if (this.ws) {
|
|
97
|
+
this.ws.onclose = null;
|
|
98
|
+
this.ws.close();
|
|
99
|
+
this.ws = null;
|
|
100
|
+
}
|
|
101
|
+
this.stopPingTimer();
|
|
102
|
+
this.connected = false;
|
|
103
|
+
this.doConnect();
|
|
104
|
+
}
|
|
105
|
+
startPingTimer() {
|
|
106
|
+
this.stopPingTimer();
|
|
107
|
+
this.pingTimer = setInterval(
|
|
108
|
+
() => {
|
|
109
|
+
if (this.ws?.readyState === WebSocket.OPEN) {
|
|
110
|
+
if (Date.now() - this.lastPong > this.config.pingInterval + this.config.pongTimeout) {
|
|
111
|
+
this.ws?.close();
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
this.ws.send("ping");
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
this.config.pingInterval
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
stopPingTimer() {
|
|
121
|
+
if (this.pingTimer) {
|
|
122
|
+
clearInterval(this.pingTimer);
|
|
123
|
+
this.pingTimer = null;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
scheduleReconnect() {
|
|
127
|
+
if (this.reconnectTimer) return;
|
|
128
|
+
const delay = Math.min(this.config.baseReconnectDelay * Math.pow(2, this.reconnectAttempts) + Math.random() * 1e3, this.config.maxReconnectDelay);
|
|
129
|
+
this.reconnectAttempts++;
|
|
130
|
+
this.reconnectTimer = setTimeout(
|
|
131
|
+
() => {
|
|
132
|
+
this.reconnectTimer = null;
|
|
133
|
+
this.doConnect();
|
|
134
|
+
},
|
|
135
|
+
delay
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
setupVisibilityHandler() {
|
|
139
|
+
if (this.visibilityHandler) return;
|
|
140
|
+
this.visibilityHandler = () => {
|
|
141
|
+
if (document.visibilityState === "visible" && this.shouldReconnect()) {
|
|
142
|
+
if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
|
|
143
|
+
this.forceReconnect();
|
|
144
|
+
} else {
|
|
145
|
+
this.ws.send("ping");
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
document.addEventListener("visibilitychange", this.visibilityHandler);
|
|
150
|
+
}
|
|
151
|
+
removeVisibilityHandler() {
|
|
152
|
+
if (this.visibilityHandler) {
|
|
153
|
+
document.removeEventListener("visibilitychange", this.visibilityHandler);
|
|
154
|
+
this.visibilityHandler = null;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
class SessionStore extends ReliableWebSocket {
|
|
159
|
+
sessions = [];
|
|
160
|
+
paused = false;
|
|
161
|
+
// Saved projects from localStorage
|
|
162
|
+
savedProjects = [];
|
|
163
|
+
getWsUrl() {
|
|
164
|
+
const protocol = window.location.protocol === "https:" ? "wss:" : "ws:";
|
|
165
|
+
return `${protocol}//${window.location.host}/api/sessions/stream`;
|
|
166
|
+
}
|
|
167
|
+
getLogPrefix() {
|
|
168
|
+
return "[sessions]";
|
|
169
|
+
}
|
|
170
|
+
handleMessage(event) {
|
|
171
|
+
if (this.paused) return;
|
|
172
|
+
const data = JSON.parse(event.data);
|
|
173
|
+
if (data.sessions) {
|
|
174
|
+
this.sessions = data.sessions;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
connect() {
|
|
178
|
+
this.doConnect();
|
|
179
|
+
}
|
|
180
|
+
disconnect() {
|
|
181
|
+
this.doDisconnect();
|
|
25
182
|
}
|
|
26
183
|
togglePause() {
|
|
27
184
|
this.paused = !this.paused;
|
|
@@ -34,7 +191,7 @@ class SessionStore {
|
|
|
34
191
|
}
|
|
35
192
|
removeProject(cwd) {
|
|
36
193
|
this.savedProjects = this.savedProjects.filter((p) => p !== cwd);
|
|
37
|
-
localStorage.setItem("claude-
|
|
194
|
+
localStorage.setItem("claude-mux-projects", JSON.stringify(this.savedProjects));
|
|
38
195
|
}
|
|
39
196
|
}
|
|
40
197
|
const sessionStore = new SessionStore();
|
|
@@ -60,8 +217,13 @@ function getProjectColor(cwd) {
|
|
|
60
217
|
return `hsl(${hue}, 60%, 40%)`;
|
|
61
218
|
}
|
|
62
219
|
export {
|
|
220
|
+
ReliableWebSocket as R,
|
|
63
221
|
stateColor as a,
|
|
64
222
|
getProjectColor as g,
|
|
223
|
+
mount as m,
|
|
65
224
|
onDestroy as o,
|
|
66
|
-
|
|
225
|
+
page as p,
|
|
226
|
+
sessionStore as s,
|
|
227
|
+
tick as t,
|
|
228
|
+
unmount as u
|
|
67
229
|
};
|