claude-mux 0.26.2 → 0.26.4
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/server/ws-handlers.d.ts.map +1 -1
- package/dist/server/ws-handlers.js +37 -6
- package/dist/server/ws-handlers.js.map +1 -1
- package/dist/tmux/pane.d.ts +13 -3
- package/dist/tmux/pane.d.ts.map +1 -1
- package/dist/tmux/pane.js +113 -36
- package/dist/tmux/pane.js.map +1 -1
- package/dist/transcript/context-peek.d.ts +18 -0
- package/dist/transcript/context-peek.d.ts.map +1 -1
- package/dist/transcript/context-peek.js +59 -12
- package/dist/transcript/context-peek.js.map +1 -1
- package/dist/types/ws-messages.d.ts +6 -0
- package/dist/types/ws-messages.d.ts.map +1 -1
- package/dist/types/ws-messages.js +2 -0
- package/dist/types/ws-messages.js.map +1 -1
- package/dist/utils/version.d.ts +1 -1
- package/dist/utils/version.js +1 -1
- package/dist/web/client/_app/immutable/assets/0.CiLJk_Xe.css +1 -0
- package/{web/.svelte-kit/adapter-bun/_app/immutable/assets/_page.XJ3XhAQU.css → dist/web/client/_app/immutable/assets/3.DIECCPxi.css} +1 -1
- package/dist/web/client/_app/immutable/chunks/Bjgls5C2.js +2 -0
- package/{web/.svelte-kit/output/client/_app/immutable/chunks/Cotx9uI_.js → dist/web/client/_app/immutable/chunks/C8V5fK-3.js} +1 -1
- package/dist/web/client/_app/immutable/chunks/DnC9WjQh.js +57 -0
- package/dist/web/client/_app/immutable/chunks/MhGpinwS.js +1 -0
- package/dist/web/client/_app/immutable/chunks/cJslalWy.js +1 -0
- package/dist/web/client/_app/immutable/entry/{app.DXHW0aPL.js → app.tijMyuHe.js} +2 -2
- package/dist/web/client/_app/immutable/entry/start.BjUUmuae.js +1 -0
- package/dist/web/client/_app/immutable/nodes/{0.DAnv2asW.js → 0.Dh-WcEW1.js} +1 -1
- package/dist/web/client/_app/immutable/nodes/{1.CU8f4oNB.js → 1.haoM4e9N.js} +1 -1
- package/dist/web/client/_app/immutable/nodes/{2.BYpvCgtu.js → 2.DtC9KdX8.js} +1 -1
- package/dist/web/client/_app/immutable/nodes/3.FZTTKJCk.js +168 -0
- package/dist/web/client/_app/version.json +1 -1
- package/dist/web/server/chunks/{0-C-AAPmon.js → 0-Cw5iP0WY.js} +9 -9
- package/dist/web/server/chunks/{0-C-AAPmon.js.map → 0-Cw5iP0WY.js.map} +1 -1
- package/dist/web/server/chunks/{1-T_dogl8W.js → 1-CR_g4jt5.js} +3 -3
- package/dist/web/server/chunks/{1-T_dogl8W.js.map → 1-CR_g4jt5.js.map} +1 -1
- package/dist/web/server/chunks/{2-FlchE_4u.js → 2-Cy0TJi3N.js} +7 -7
- package/dist/web/server/chunks/{2-FlchE_4u.js.map → 2-Cy0TJi3N.js.map} +1 -1
- package/dist/web/server/chunks/{3-U2bTntXU.js → 3-D9Ui86YT.js} +7 -7
- package/dist/web/server/chunks/{3-U2bTntXU.js.map → 3-D9Ui86YT.js.map} +1 -1
- package/dist/web/server/chunks/{_layout.svelte-Ddn9Wu-V.js → _layout.svelte-DZ2sqwz3.js} +4 -4
- package/dist/web/server/chunks/{_layout.svelte-Ddn9Wu-V.js.map → _layout.svelte-DZ2sqwz3.js.map} +1 -1
- package/dist/web/server/chunks/{_page.svelte-_F3qltju.js → _page.svelte--yq9E8Jb.js} +2 -2
- package/dist/web/server/chunks/{_page.svelte-_F3qltju.js.map → _page.svelte--yq9E8Jb.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-CNU4yPZZ.js → _server.ts-BCCIAioG.js} +4 -2
- package/dist/web/server/chunks/_server.ts-BCCIAioG.js.map +1 -0
- package/dist/web/server/chunks/{_server.ts-CtsPyICr.js → _server.ts-BMZtxwLP.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-CtsPyICr.js.map → _server.ts-BMZtxwLP.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-BBrtrcEt.js → _server.ts-CONr9rjv.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-BBrtrcEt.js.map → _server.ts-CONr9rjv.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-fnuGtMqr.js → _server.ts-CSKVHlMn.js} +3 -3
- package/dist/web/server/chunks/{_server.ts-fnuGtMqr.js.map → _server.ts-CSKVHlMn.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-Df32fD_Q.js → _server.ts-D1PwUVXn.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-Df32fD_Q.js.map → _server.ts-D1PwUVXn.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-C00ejke7.js → _server.ts-D4xa8gs1.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-C00ejke7.js.map → _server.ts-D4xa8gs1.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-C6MJsvPN.js → _server.ts-DxjUBscT.js} +3 -3
- package/dist/web/server/chunks/{_server.ts-C6MJsvPN.js.map → _server.ts-DxjUBscT.js.map} +1 -1
- package/dist/web/server/chunks/{button-C1GVS_oY.js → button-BxVvCjdl.js} +24 -4
- package/dist/web/server/chunks/{button-C1GVS_oY.js.map → button-BxVvCjdl.js.map} +1 -1
- package/dist/web/server/chunks/{hooks.server-DG_lyHkY.js → hooks.server-B8dJh24b.js} +3 -3
- package/dist/web/server/chunks/{hooks.server-DG_lyHkY.js.map → hooks.server-B8dJh24b.js.map} +1 -1
- package/dist/web/server/chunks/{ws-handlers-BQ2RtlNl.js → ws-handlers-fSFiSfwn.js} +150 -43
- package/dist/web/server/chunks/ws-handlers-fSFiSfwn.js.map +1 -0
- package/dist/web/server/chunks/{ws-managers-DLQiiQnX.js → ws-managers-Cv1gfcBO.js} +2 -2
- package/dist/web/server/chunks/{ws-managers-DLQiiQnX.js.map → ws-managers-Cv1gfcBO.js.map} +1 -1
- package/dist/web/server/index.js +2 -2
- package/dist/web/server/index.js.map +1 -1
- package/dist/web/server/manifest.js +17 -17
- package/dist/web/server/manifest.js.map +1 -1
- package/package.json +1 -1
- package/src/server/ws-handlers.ts +35 -6
- package/src/tmux/pane.ts +124 -33
- package/src/transcript/context-peek.ts +71 -13
- package/src/types/ws-messages.ts +2 -0
- package/src/utils/version.ts +1 -1
- package/tests/tmux/activity-line.test.ts +47 -0
- package/tests/tmux/prompt-options.test.ts +49 -4
- package/tests/transcript/title-peek.test.ts +54 -0
- package/web/.svelte-kit/adapter-bun/.vite/manifest.json +4 -8
- package/web/.svelte-kit/adapter-bun/_app/immutable/assets/_layout.6tlxP3iE.css +1 -0
- package/{dist/web/client/_app/immutable/assets/3.XJ3XhAQU.css → web/.svelte-kit/adapter-bun/_app/immutable/assets/_page.DIECCPxi.css} +1 -1
- package/web/.svelte-kit/adapter-bun/chunks/button.js +24 -1
- package/web/.svelte-kit/adapter-bun/chunks/internal2.js +1 -1
- package/web/.svelte-kit/adapter-bun/chunks/ws-handlers.js +137 -40
- package/web/.svelte-kit/adapter-bun/chunks/ws-managers.js +1 -1
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/projects/new-session/_server.ts.js +3 -1
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_server.ts.js +1 -1
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/settings/_server.ts.js +1 -1
- package/web/.svelte-kit/adapter-bun/entries/pages/_layout.svelte.js +2 -2
- package/web/.svelte-kit/adapter-bun/entries/pages/session/_target_/_page.svelte.js +2 -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 +2 -2
- 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 +2 -2
- package/web/.svelte-kit/generated/server/internal.js +1 -1
- package/web/.svelte-kit/output/client/.vite/manifest.json +59 -59
- package/web/.svelte-kit/output/client/_app/immutable/assets/0.CiLJk_Xe.css +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/assets/{3.XJ3XhAQU.css → 3.DIECCPxi.css} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/Bjgls5C2.js +2 -0
- package/{dist/web/client/_app/immutable/chunks/Cotx9uI_.js → web/.svelte-kit/output/client/_app/immutable/chunks/C8V5fK-3.js} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/DnC9WjQh.js +57 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/MhGpinwS.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/cJslalWy.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/entry/{app.DXHW0aPL.js → app.tijMyuHe.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/entry/start.BjUUmuae.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{0.DAnv2asW.js → 0.Dh-WcEW1.js} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{1.CU8f4oNB.js → 1.haoM4e9N.js} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{2.BYpvCgtu.js → 2.DtC9KdX8.js} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/3.FZTTKJCk.js +168 -0
- package/web/.svelte-kit/output/client/_app/version.json +1 -1
- package/web/.svelte-kit/output/server/.vite/manifest.json +4 -8
- package/web/.svelte-kit/output/server/_app/immutable/assets/_layout.6tlxP3iE.css +1 -0
- package/web/.svelte-kit/output/server/_app/immutable/assets/{_page.XJ3XhAQU.css → _page.DIECCPxi.css} +1 -1
- package/web/.svelte-kit/output/server/chunks/button.js +24 -1
- package/web/.svelte-kit/output/server/chunks/internal2.js +1 -1
- package/web/.svelte-kit/output/server/chunks/ws-handlers.js +137 -40
- package/web/.svelte-kit/output/server/chunks/ws-managers.js +1 -1
- package/web/.svelte-kit/output/server/entries/endpoints/api/projects/new-session/_server.ts.js +3 -1
- package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_server.ts.js +1 -1
- package/web/.svelte-kit/output/server/entries/endpoints/api/settings/_server.ts.js +1 -1
- package/web/.svelte-kit/output/server/entries/pages/_layout.svelte.js +2 -2
- package/web/.svelte-kit/output/server/entries/pages/session/_target_/_page.svelte.js +2 -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 +2 -2
- 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 +2 -2
- package/web/src/lib/actions/longPress.ts +52 -6
- package/web/src/lib/components/AllSessionsPanel.svelte +12 -3
- package/web/src/lib/stores/websocket-base.svelte.ts +24 -1
- package/web/src/routes/api/projects/new-session/+server.ts +3 -0
- package/web/src/routes/session/[target]/+page.svelte +60 -12
- package/dist/web/client/_app/immutable/assets/0.DwaaTdPO.css +0 -1
- package/dist/web/client/_app/immutable/chunks/1pIWnoD_.js +0 -1
- package/dist/web/client/_app/immutable/chunks/DfoR1zCV.js +0 -1
- package/dist/web/client/_app/immutable/chunks/DmEI2TOa.js +0 -57
- package/dist/web/client/_app/immutable/chunks/DtVU-s3j.js +0 -2
- package/dist/web/client/_app/immutable/entry/start.CchjowOg.js +0 -1
- package/dist/web/client/_app/immutable/nodes/3.DuMzeRg3.js +0 -168
- package/dist/web/server/chunks/_server.ts-CNU4yPZZ.js.map +0 -1
- package/dist/web/server/chunks/geometry-CUMMOI9q.js +0 -46
- package/dist/web/server/chunks/geometry-CUMMOI9q.js.map +0 -1
- package/dist/web/server/chunks/ws-handlers-BQ2RtlNl.js.map +0 -1
- package/web/.svelte-kit/adapter-bun/_app/immutable/assets/_layout.Bpy37C6o.css +0 -1
- package/web/.svelte-kit/adapter-bun/chunks/geometry.js +0 -32
- package/web/.svelte-kit/output/client/_app/immutable/assets/0.DwaaTdPO.css +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/1pIWnoD_.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/DfoR1zCV.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/DmEI2TOa.js +0 -57
- package/web/.svelte-kit/output/client/_app/immutable/chunks/DtVU-s3j.js +0 -2
- package/web/.svelte-kit/output/client/_app/immutable/entry/start.CchjowOg.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/3.DuMzeRg3.js +0 -168
- package/web/.svelte-kit/output/server/_app/immutable/assets/_layout.Bpy37C6o.css +0 -1
- package/web/.svelte-kit/output/server/chunks/geometry.js +0 -32
|
@@ -104,7 +104,27 @@ class ReliableWebSocket {
|
|
|
104
104
|
this.config.pingInterval
|
|
105
105
|
);
|
|
106
106
|
}
|
|
107
|
+
/** How long a ping sent on returning to the page may go unanswered. */
|
|
108
|
+
static WAKE_PONG_TIMEOUT = 3e3;
|
|
109
|
+
wakeTimer = null;
|
|
110
|
+
expectPong() {
|
|
111
|
+
if (this.wakeTimer) clearTimeout(this.wakeTimer);
|
|
112
|
+
const asked = Date.now();
|
|
113
|
+
this.wakeTimer = setTimeout(
|
|
114
|
+
() => {
|
|
115
|
+
this.wakeTimer = null;
|
|
116
|
+
if (this.ws && this.lastPong < asked) {
|
|
117
|
+
this.forceReconnect();
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
ReliableWebSocket.WAKE_PONG_TIMEOUT
|
|
121
|
+
);
|
|
122
|
+
}
|
|
107
123
|
stopPingTimer() {
|
|
124
|
+
if (this.wakeTimer) {
|
|
125
|
+
clearTimeout(this.wakeTimer);
|
|
126
|
+
this.wakeTimer = null;
|
|
127
|
+
}
|
|
108
128
|
if (this.pingTimer) {
|
|
109
129
|
clearInterval(this.pingTimer);
|
|
110
130
|
this.pingTimer = null;
|
|
@@ -130,6 +150,7 @@ class ReliableWebSocket {
|
|
|
130
150
|
this.forceReconnect();
|
|
131
151
|
} else {
|
|
132
152
|
this.ws.send("ping");
|
|
153
|
+
this.expectPong();
|
|
133
154
|
}
|
|
134
155
|
}
|
|
135
156
|
};
|
|
@@ -172,7 +193,9 @@ const PaneChoiceSchema = z.object({
|
|
|
172
193
|
hint: z.string().optional(),
|
|
173
194
|
/** Whether a multi-select row's own checkbox is ticked. */
|
|
174
195
|
checked: z.boolean().optional(),
|
|
175
|
-
selected: z.boolean()
|
|
196
|
+
selected: z.boolean(),
|
|
197
|
+
/** The question's free-text row: opened by highlighting it, declined by an empty Enter. */
|
|
198
|
+
text: z.literal(true).optional()
|
|
176
199
|
})
|
|
177
200
|
),
|
|
178
201
|
/** The rows are checkboxes: picking one ticks it, and leaves the dialog open. */
|
|
@@ -98,7 +98,7 @@ const options = {
|
|
|
98
98
|
app: ({ head, body, assets, nonce, env }) => '<!doctype html>\n<html lang="en" class="dark">\n <head>\n <meta charset="utf-8" />\n <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />\n <meta name="theme-color" content="#111111" />\n <!-- PWA / iOS home-screen: open fullscreen (standalone) instead of inside the browser chrome -->\n <link rel="manifest" href="/manifest.webmanifest" />\n <meta name="mobile-web-app-capable" content="yes" />\n <meta name="apple-mobile-web-app-capable" content="yes" />\n <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />\n <meta name="apple-mobile-web-app-title" content="claude-mux" />\n <link rel="apple-touch-icon" href="/apple-touch-icon.png" />\n <link rel="icon" type="image/svg+xml" href="/favicon.svg" />\n ' + head + '\n </head>\n <body data-sveltekit-preload-data="hover">\n <div style="display: contents">' + body + "</div>\n </body>\n</html>\n",
|
|
99
99
|
error
|
|
100
100
|
},
|
|
101
|
-
version_hash: "
|
|
101
|
+
version_hash: "1ebgf33"
|
|
102
102
|
};
|
|
103
103
|
async function get_hooks() {
|
|
104
104
|
let handle;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { existsSync, readFileSync, mkdirSync, writeFileSync, renameSync, openSync, fstatSync, readSync, closeSync, readdirSync, statSync } from "fs";
|
|
2
|
-
import { e as getSessionsDir, f as cleanupStaleSessions, g as getSession, h as readLinks, c as updateSession, b as getAllSessions } from "./sessions-json.js";
|
|
2
|
+
import { e as getSessionsDir, f as cleanupStaleSessions, g as getSession, h as readLinks, c as updateSession, b as getAllSessions, s as sanitizeDisplayName } from "./sessions-json.js";
|
|
3
3
|
import { dirname, join, basename } from "path";
|
|
4
4
|
import { homedir } from "os";
|
|
5
5
|
import { r as readContextUsage, c as contextPercent } from "./context.js";
|
|
@@ -7,7 +7,6 @@ import { a as asRecord, r as readString } from "./json.js";
|
|
|
7
7
|
import { i as isDictated } from "./dictation-marks.js";
|
|
8
8
|
import { execFile, execFileSync } from "child_process";
|
|
9
9
|
import { promisify } from "util";
|
|
10
|
-
import { w as wantsWidening, a as widenDetachedWindow } from "./geometry.js";
|
|
11
10
|
import { S as SESSIONS_DIR } from "./paths.js";
|
|
12
11
|
import { b as getQueueSummary, e as enqueue } from "./message-queue.js";
|
|
13
12
|
function resolveProjectsPath() {
|
|
@@ -722,7 +721,7 @@ class JsonlTailer {
|
|
|
722
721
|
}
|
|
723
722
|
}
|
|
724
723
|
}
|
|
725
|
-
const execFileAsync = promisify(execFile);
|
|
724
|
+
const execFileAsync$1 = promisify(execFile);
|
|
726
725
|
function hardTimeout(p, ms, fallback) {
|
|
727
726
|
return new Promise((resolve) => {
|
|
728
727
|
const timer = setTimeout(() => resolve(fallback), ms);
|
|
@@ -741,7 +740,7 @@ function hardTimeout(p, ms, fallback) {
|
|
|
741
740
|
async function getAllPaneTitles() {
|
|
742
741
|
const result = /* @__PURE__ */ new Map();
|
|
743
742
|
const stdout = await hardTimeout(
|
|
744
|
-
execFileAsync("tmux", [
|
|
743
|
+
execFileAsync$1("tmux", [
|
|
745
744
|
"list-panes",
|
|
746
745
|
"-a",
|
|
747
746
|
"-F",
|
|
@@ -765,7 +764,7 @@ async function getAllPaneTitles() {
|
|
|
765
764
|
}
|
|
766
765
|
async function sendKeyAsync(target, key) {
|
|
767
766
|
try {
|
|
768
|
-
await execFileAsync("tmux", ["send-keys", "-t", target, key], { timeout: 1e3 });
|
|
767
|
+
await execFileAsync$1("tmux", ["send-keys", "-t", target, key], { timeout: 1e3 });
|
|
769
768
|
return true;
|
|
770
769
|
} catch {
|
|
771
770
|
return false;
|
|
@@ -774,7 +773,7 @@ async function sendKeyAsync(target, key) {
|
|
|
774
773
|
async function capturePaneContentAsync(target, withColor = false) {
|
|
775
774
|
const args = withColor ? ["capture-pane", "-p", "-e", "-t", target] : ["capture-pane", "-p", "-t", target];
|
|
776
775
|
return hardTimeout(
|
|
777
|
-
execFileAsync("tmux", args, {
|
|
776
|
+
execFileAsync$1("tmux", args, {
|
|
778
777
|
encoding: "utf-8",
|
|
779
778
|
timeout: 1e3
|
|
780
779
|
}).then((r) => r.stdout),
|
|
@@ -782,16 +781,20 @@ async function capturePaneContentAsync(target, withColor = false) {
|
|
|
782
781
|
null
|
|
783
782
|
);
|
|
784
783
|
}
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
784
|
+
const ACTIVITY_LINE = /^\s*[⠀-⣿✻✢✳✶✽·]\s+(\S[^…]*…)/;
|
|
785
|
+
function readActivityLine(content) {
|
|
786
|
+
if (!content) return null;
|
|
787
|
+
for (const line of content.split("\n").slice(-12)) {
|
|
788
|
+
const m = ACTIVITY_LINE.exec(line);
|
|
789
|
+
if (m) return m[1].trim();
|
|
790
|
+
}
|
|
791
|
+
return null;
|
|
789
792
|
}
|
|
790
793
|
function isPaneShowingIdlePrompt(content) {
|
|
791
794
|
if (!content) return false;
|
|
792
795
|
const bottom = content.split("\n").slice(-12);
|
|
793
796
|
const joined = bottom.join("\n");
|
|
794
|
-
if (
|
|
797
|
+
if (readActivityLine(content) !== null) return false;
|
|
795
798
|
if (/esc to interrupt|esc to cancel|ctrl\+c to interrupt/i.test(joined)) return false;
|
|
796
799
|
if (bottom.some((line) => /^\s*[^\w\s❯│>]\s+\S+…/.test(line))) return false;
|
|
797
800
|
if (/Do you want|❯\s+\d+\./.test(joined)) return false;
|
|
@@ -942,8 +945,9 @@ function detectRemoteControlUrl(content) {
|
|
|
942
945
|
return match ? match[0].replace(/[.,;:]+$/, "") : null;
|
|
943
946
|
}
|
|
944
947
|
const MAX_PROMPT_OPTIONS = 10;
|
|
945
|
-
const MAX_OPTION_CHARS =
|
|
948
|
+
const MAX_OPTION_CHARS = 4e3;
|
|
946
949
|
const OPTION_RUN_WINDOW = 24;
|
|
950
|
+
const QUESTION_LINES = 12;
|
|
947
951
|
const OPTION_RUN_TAIL = 3;
|
|
948
952
|
const OPTION_ROW = /^(❯|>)?\s*(\d+)[.)]\s+(\S.*)$/;
|
|
949
953
|
const OPTION_RULE = /^[─━╌┄┈—–-]+$/;
|
|
@@ -956,6 +960,7 @@ const INLINE_HINT = /^(.*?\S)\s{2,}(\S.*)$/;
|
|
|
956
960
|
const PREVIEW_COLUMN = /\s{2,}[┌┐└┘├┤─━│╭╮╰╯].*$/;
|
|
957
961
|
const BOX_ROW = /^[┌┐└┘├┤─━│╭╮╰╯]/;
|
|
958
962
|
const CHECKBOX = /^\[([ xX✔✓])\]\s*/;
|
|
963
|
+
const TEXT_ROW = /^Type something\.?$/i;
|
|
959
964
|
const HINT_INDENT_SPAN = 8;
|
|
960
965
|
function bodyOf(line) {
|
|
961
966
|
const body = (line ?? "").replace(/[\s│┃|╎┆┊]+$/, "").replace(/^\s*[│┃|╎┆┊]+/, "");
|
|
@@ -965,6 +970,18 @@ function bodyOf(line) {
|
|
|
965
970
|
function clampOption(text) {
|
|
966
971
|
return text.length > MAX_OPTION_CHARS ? text.slice(0, MAX_OPTION_CHARS) + "…" : text;
|
|
967
972
|
}
|
|
973
|
+
const WRAPPED_LINE_SHARE = 0.6;
|
|
974
|
+
const MIN_WRAPPED_COLS = 60;
|
|
975
|
+
function joinParagraph(lines) {
|
|
976
|
+
const widest = Math.max(...lines.map((line) => line.length));
|
|
977
|
+
let out = lines[0] ?? "";
|
|
978
|
+
for (let i = 1; i < lines.length; i++) {
|
|
979
|
+
const prev = lines[i - 1].length;
|
|
980
|
+
const wrapped = prev >= MIN_WRAPPED_COLS && prev >= widest * WRAPPED_LINE_SHARE;
|
|
981
|
+
out += (wrapped ? " " : "\n") + lines[i];
|
|
982
|
+
}
|
|
983
|
+
return out;
|
|
984
|
+
}
|
|
968
985
|
function readPromptOptions(content, mode = {}) {
|
|
969
986
|
if (!content) return null;
|
|
970
987
|
const raw = content.split("\n");
|
|
@@ -1033,20 +1050,28 @@ function readPromptOptions(content, mode = {}) {
|
|
|
1033
1050
|
const last = k + 1 === rows.length;
|
|
1034
1051
|
const stop = last ? declared ? lastContent : lastContent + 1 : rows[k + 1].i;
|
|
1035
1052
|
const noting = last && declared;
|
|
1036
|
-
|
|
1053
|
+
const hintLines = [];
|
|
1054
|
+
let hintIndent = -1;
|
|
1055
|
+
let hintOpen = false;
|
|
1037
1056
|
let ruled = false;
|
|
1038
1057
|
for (let i = row.i + 1; i < stop; i++) {
|
|
1039
1058
|
const { indent, text } = at(i);
|
|
1040
1059
|
if (OPTION_RULE.test(text)) {
|
|
1060
|
+
hintOpen = false;
|
|
1041
1061
|
if (!noting) break;
|
|
1042
1062
|
ruled = true;
|
|
1043
1063
|
continue;
|
|
1044
1064
|
}
|
|
1045
|
-
if (!text || BOX_ROW.test(text))
|
|
1065
|
+
if (!text || BOX_ROW.test(text)) {
|
|
1066
|
+
if (!text) hintOpen = false;
|
|
1067
|
+
continue;
|
|
1068
|
+
}
|
|
1046
1069
|
const bare = text.replace(PREVIEW_COLUMN, "").trimEnd();
|
|
1047
1070
|
if (!bare) continue;
|
|
1048
1071
|
const under = !ruled && indent >= row.indent && indent <= row.indent + HINT_INDENT_SPAN;
|
|
1049
|
-
|
|
1072
|
+
const continues = hintOpen && indent === hintIndent;
|
|
1073
|
+
if (!under || hintLines.length > 0 && !continues) {
|
|
1074
|
+
hintOpen = false;
|
|
1050
1075
|
if (noting && !ruled) notes.push(clampOption(bare));
|
|
1051
1076
|
continue;
|
|
1052
1077
|
}
|
|
@@ -1054,8 +1079,11 @@ function readPromptOptions(content, mode = {}) {
|
|
|
1054
1079
|
label = `${label} ${bare}`;
|
|
1055
1080
|
continue;
|
|
1056
1081
|
}
|
|
1057
|
-
|
|
1082
|
+
hintLines.push(bare);
|
|
1083
|
+
hintIndent = indent;
|
|
1084
|
+
hintOpen = true;
|
|
1058
1085
|
}
|
|
1086
|
+
let hint = hintLines.length > 0 ? clampOption(joinParagraph(hintLines)) : void 0;
|
|
1059
1087
|
if (hint === void 0 && !preview) {
|
|
1060
1088
|
const inline = label.match(INLINE_HINT);
|
|
1061
1089
|
if (inline) {
|
|
@@ -1063,30 +1091,32 @@ function readPromptOptions(content, mode = {}) {
|
|
|
1063
1091
|
hint = clampOption(inline[2]);
|
|
1064
1092
|
}
|
|
1065
1093
|
}
|
|
1066
|
-
|
|
1094
|
+
const option = {
|
|
1067
1095
|
n: row.n,
|
|
1068
1096
|
label: clampOption(label),
|
|
1069
1097
|
hint,
|
|
1070
1098
|
checked: box ? box[1] !== " " : void 0,
|
|
1071
1099
|
selected: row.selected
|
|
1072
1100
|
};
|
|
1101
|
+
if (TEXT_ROW.test(option.label)) option.text = true;
|
|
1102
|
+
return option;
|
|
1073
1103
|
});
|
|
1074
|
-
|
|
1075
|
-
let
|
|
1076
|
-
for (let i = rows[0].i - 1; i >= 0 && i >= rows[0].i - 4; i--) {
|
|
1104
|
+
const paragraph = [];
|
|
1105
|
+
for (let i = rows[0].i - 1; i >= 0 && i >= rows[0].i - QUESTION_LINES; i--) {
|
|
1077
1106
|
const { text } = at(i);
|
|
1078
1107
|
if (/^[─━╌┄┈╭╮╰╯]+$/.test(text) || TAB_STRIP.test(text)) break;
|
|
1079
1108
|
if (!text) {
|
|
1080
|
-
if (
|
|
1109
|
+
if (paragraph.length > 0) break;
|
|
1081
1110
|
continue;
|
|
1082
1111
|
}
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1112
|
+
paragraph.unshift(text);
|
|
1113
|
+
}
|
|
1114
|
+
let question = null;
|
|
1115
|
+
if (paragraph.length > 0) {
|
|
1116
|
+
const joined = joinParagraph(paragraph);
|
|
1117
|
+
const asking = joined.split("\n").pop();
|
|
1118
|
+
question = clampOption(asking.endsWith("?") ? asking : joined);
|
|
1088
1119
|
}
|
|
1089
|
-
if (question === null && top !== null) question = clampOption(top);
|
|
1090
1120
|
const choice = { question, options };
|
|
1091
1121
|
if (multi) choice.multi = true;
|
|
1092
1122
|
if (declared) {
|
|
@@ -1101,6 +1131,31 @@ function readPromptOptions(content, mode = {}) {
|
|
|
1101
1131
|
}
|
|
1102
1132
|
return choice;
|
|
1103
1133
|
}
|
|
1134
|
+
const execFileAsync = promisify(execFile);
|
|
1135
|
+
const STANDARD_PANE_WIDTH = 200;
|
|
1136
|
+
const STANDARD_PANE_HEIGHT = 50;
|
|
1137
|
+
const MIN_USEFUL_PANE_WIDTH = 160;
|
|
1138
|
+
function sizeArgsForNewSession() {
|
|
1139
|
+
return ["-x", String(STANDARD_PANE_WIDTH), "-y", String(STANDARD_PANE_HEIGHT)];
|
|
1140
|
+
}
|
|
1141
|
+
function wantsWidening(pane) {
|
|
1142
|
+
return pane.attached === 0 && pane.width < MIN_USEFUL_PANE_WIDTH;
|
|
1143
|
+
}
|
|
1144
|
+
async function widenDetachedWindow(target) {
|
|
1145
|
+
try {
|
|
1146
|
+
await execFileAsync(
|
|
1147
|
+
"tmux",
|
|
1148
|
+
["resize-window", "-t", target, "-x", String(STANDARD_PANE_WIDTH), "-y", String(STANDARD_PANE_HEIGHT)],
|
|
1149
|
+
{ timeout: 1e3 }
|
|
1150
|
+
);
|
|
1151
|
+
await execFileAsync("tmux", ["set-option", "-w", "-t", target, "window-size", "latest"], {
|
|
1152
|
+
timeout: 1e3
|
|
1153
|
+
});
|
|
1154
|
+
return true;
|
|
1155
|
+
} catch {
|
|
1156
|
+
return false;
|
|
1157
|
+
}
|
|
1158
|
+
}
|
|
1104
1159
|
const TAIL_BYTES = 64 * 1024;
|
|
1105
1160
|
const RESOLVE_RETRY_POLLS = 20;
|
|
1106
1161
|
const paths = /* @__PURE__ */ new Map();
|
|
@@ -1115,9 +1170,9 @@ function transcriptPathFor(session) {
|
|
|
1115
1170
|
paths.set(session.id, { path, age: 0 });
|
|
1116
1171
|
return path;
|
|
1117
1172
|
}
|
|
1118
|
-
function
|
|
1173
|
+
function readTailLines(path, size) {
|
|
1119
1174
|
const length = Math.min(size, TAIL_BYTES);
|
|
1120
|
-
if (length === 0) return
|
|
1175
|
+
if (length === 0) return [];
|
|
1121
1176
|
const buffer = Buffer.alloc(length);
|
|
1122
1177
|
const fd = openSync(path, "r");
|
|
1123
1178
|
try {
|
|
@@ -1125,7 +1180,9 @@ function readLastUsage(path, size) {
|
|
|
1125
1180
|
} finally {
|
|
1126
1181
|
closeSync(fd);
|
|
1127
1182
|
}
|
|
1128
|
-
|
|
1183
|
+
return buffer.toString("utf-8").split("\n");
|
|
1184
|
+
}
|
|
1185
|
+
function lastUsage(lines) {
|
|
1129
1186
|
for (let i = lines.length - 1; i >= 0; i--) {
|
|
1130
1187
|
const line = lines[i];
|
|
1131
1188
|
if (!line.includes('"assistant"')) continue;
|
|
@@ -1140,7 +1197,21 @@ function readLastUsage(path, size) {
|
|
|
1140
1197
|
}
|
|
1141
1198
|
return null;
|
|
1142
1199
|
}
|
|
1143
|
-
function
|
|
1200
|
+
function lastCustomTitle(lines) {
|
|
1201
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
1202
|
+
const line = lines[i];
|
|
1203
|
+
if (!line.includes('"custom-title"')) continue;
|
|
1204
|
+
try {
|
|
1205
|
+
const record = asRecord(JSON.parse(line));
|
|
1206
|
+
if (record?.type !== "custom-title") continue;
|
|
1207
|
+
const title = record.customTitle;
|
|
1208
|
+
return typeof title === "string" ? title : "";
|
|
1209
|
+
} catch {
|
|
1210
|
+
}
|
|
1211
|
+
}
|
|
1212
|
+
return void 0;
|
|
1213
|
+
}
|
|
1214
|
+
function fileMemoFor(session) {
|
|
1144
1215
|
const path = transcriptPathFor(session);
|
|
1145
1216
|
if (!path) return null;
|
|
1146
1217
|
let stat;
|
|
@@ -1152,10 +1223,22 @@ function peekContextUsage(session) {
|
|
|
1152
1223
|
return null;
|
|
1153
1224
|
}
|
|
1154
1225
|
const memo = files.get(path);
|
|
1155
|
-
if (memo && memo.mtimeMs === stat.mtimeMs && memo.size === stat.size) return memo
|
|
1156
|
-
const
|
|
1157
|
-
|
|
1158
|
-
|
|
1226
|
+
if (memo && memo.mtimeMs === stat.mtimeMs && memo.size === stat.size) return memo;
|
|
1227
|
+
const lines = readTailLines(path, stat.size);
|
|
1228
|
+
const next = {
|
|
1229
|
+
mtimeMs: stat.mtimeMs,
|
|
1230
|
+
size: stat.size,
|
|
1231
|
+
usage: lastUsage(lines) ?? memo?.usage ?? null,
|
|
1232
|
+
title: lastCustomTitle(lines) ?? memo?.title
|
|
1233
|
+
};
|
|
1234
|
+
files.set(path, next);
|
|
1235
|
+
return next;
|
|
1236
|
+
}
|
|
1237
|
+
function peekTranscriptTitle(session) {
|
|
1238
|
+
return fileMemoFor(session)?.title;
|
|
1239
|
+
}
|
|
1240
|
+
function peekContextUsage(session) {
|
|
1241
|
+
return fileMemoFor(session)?.usage ?? null;
|
|
1159
1242
|
}
|
|
1160
1243
|
function peekContextPercent(session) {
|
|
1161
1244
|
const usage = peekContextUsage(session);
|
|
@@ -1455,8 +1538,9 @@ async function captureAndSyncSessions() {
|
|
|
1455
1538
|
} else {
|
|
1456
1539
|
idleLookTicks.delete(session.id);
|
|
1457
1540
|
}
|
|
1458
|
-
if (session.state === "idle"
|
|
1459
|
-
|
|
1541
|
+
if (session.state === "idle") {
|
|
1542
|
+
const activity = readActivityLine(content);
|
|
1543
|
+
if (activity) apply(session, { state: "busy", current_action: activity });
|
|
1460
1544
|
}
|
|
1461
1545
|
})
|
|
1462
1546
|
);
|
|
@@ -1471,6 +1555,17 @@ async function captureAndSyncSessions() {
|
|
|
1471
1555
|
const wideningNow = /* @__PURE__ */ new Set();
|
|
1472
1556
|
const rcSeen = /* @__PURE__ */ new Set();
|
|
1473
1557
|
let rcPrimed = false;
|
|
1558
|
+
const transcriptTitleSeen = /* @__PURE__ */ new Map();
|
|
1559
|
+
function syncTranscriptTitle(s) {
|
|
1560
|
+
if ((s.agent ?? "claude") !== "claude") return;
|
|
1561
|
+
const title = peekTranscriptTitle(s);
|
|
1562
|
+
if (title === void 0 || transcriptTitleSeen.get(s.id) === title) return;
|
|
1563
|
+
transcriptTitleSeen.set(s.id, title);
|
|
1564
|
+
const name = sanitizeDisplayName(title);
|
|
1565
|
+
if (name === (s.display_name ?? null)) return;
|
|
1566
|
+
updateSession(s.id, { display_name: name });
|
|
1567
|
+
s.display_name = name;
|
|
1568
|
+
}
|
|
1474
1569
|
async function getEnrichedSessionsAsync() {
|
|
1475
1570
|
const [{ captures, rawCaptures, sessions }, paneTitles] = await Promise.all([
|
|
1476
1571
|
captureAndSyncSessions(),
|
|
@@ -1495,6 +1590,7 @@ async function getEnrichedSessionsAsync() {
|
|
|
1495
1590
|
enqueue(s.tmux_target, "/rc", "control");
|
|
1496
1591
|
}
|
|
1497
1592
|
rcPrimed = true;
|
|
1593
|
+
for (const s of sessions) syncTranscriptTitle(s);
|
|
1498
1594
|
for (const s of sessions) {
|
|
1499
1595
|
if (!s.tmux_target) continue;
|
|
1500
1596
|
const content = captures.get(s.tmux_target);
|
|
@@ -2436,9 +2532,10 @@ export {
|
|
|
2436
2532
|
SessionsWsManager as S,
|
|
2437
2533
|
TerminalWsManager as T,
|
|
2438
2534
|
removeProject as a,
|
|
2439
|
-
|
|
2440
|
-
|
|
2441
|
-
|
|
2535
|
+
sizeArgsForNewSession as b,
|
|
2536
|
+
getEnrichedSessionsAsync as c,
|
|
2537
|
+
getSettings as d,
|
|
2538
|
+
TranscriptWsManager as e,
|
|
2442
2539
|
getSavedProjects as g,
|
|
2443
2540
|
handleWsMessage as h,
|
|
2444
2541
|
parseWsPath as p,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { S as SessionsWsManager, T as TerminalWsManager,
|
|
1
|
+
import { S as SessionsWsManager, T as TerminalWsManager, e as TranscriptWsManager } from "./ws-handlers.js";
|
|
2
2
|
const g = globalThis;
|
|
3
3
|
const sessionsWsManager = g.__claudeMuxSessionsWsManager ?? (g.__claudeMuxSessionsWsManager = new SessionsWsManager({ debug: true }));
|
|
4
4
|
const terminalWsManager = g.__claudeMuxTerminalWsManager ?? (g.__claudeMuxTerminalWsManager = new TerminalWsManager({ debug: true }));
|
package/web/.svelte-kit/adapter-bun/entries/endpoints/api/projects/new-session/_server.ts.js
CHANGED
|
@@ -5,7 +5,8 @@ import { u as upsertSession } from "../../../../../chunks/sessions-json.js";
|
|
|
5
5
|
import { basename, join } from "path";
|
|
6
6
|
import { homedir } from "os";
|
|
7
7
|
import { p as parseAgent, A as AGENTS } from "../../../../../chunks/agents.js";
|
|
8
|
-
import {
|
|
8
|
+
import { b as sizeArgsForNewSession } from "../../../../../chunks/ws-handlers.js";
|
|
9
|
+
import { b as broadcastSessions } from "../../../../../chunks/ws-managers.js";
|
|
9
10
|
function projectSlug(cwd, fallback) {
|
|
10
11
|
return basename(cwd).replace(/[^A-Za-z0-9_-]/g, "_") || fallback;
|
|
11
12
|
}
|
|
@@ -76,6 +77,7 @@ const POST = async ({ request }) => {
|
|
|
76
77
|
state: "idle",
|
|
77
78
|
agent: selectedAgent
|
|
78
79
|
});
|
|
80
|
+
broadcastSessions();
|
|
79
81
|
return json({ ok: true, session: sessionName, tmuxTarget, agent: selectedAgent, record });
|
|
80
82
|
} catch (err) {
|
|
81
83
|
const detail = err instanceof Error ? err.message : String(err);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { json } from "@sveltejs/kit";
|
|
2
|
-
import {
|
|
2
|
+
import { c as getEnrichedSessionsAsync } from "../../../../chunks/ws-handlers.js";
|
|
3
3
|
const GET = async () => {
|
|
4
4
|
try {
|
|
5
5
|
const sessions = await getEnrichedSessionsAsync();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { json } from "@sveltejs/kit";
|
|
2
|
-
import {
|
|
2
|
+
import { d as getSettings, u as updateSettings } from "../../../../chunks/ws-handlers.js";
|
|
3
3
|
import { b as broadcastSessions } from "../../../../chunks/ws-managers.js";
|
|
4
4
|
const GET = async () => {
|
|
5
5
|
return json({ settings: getSettings() });
|
|
@@ -2915,7 +2915,7 @@ function AllSessionsPanel($$renderer, $$props) {
|
|
|
2915
2915
|
"orch": row.orchestrator,
|
|
2916
2916
|
"inA": tag === "A",
|
|
2917
2917
|
"inB": tag === "B"
|
|
2918
|
-
})}${attr("draggable",
|
|
2918
|
+
})}${attr("draggable", "false")}${attr("title", machine.local ? "Double-click or long-press to rename" : `On ${machine.server.hostname}`)}><span class="st svelte-183q6rw">`);
|
|
2919
2919
|
SessionStateIndicator($$renderer3, { state: s.state, size: "sm", title: s.current_action });
|
|
2920
2920
|
$$renderer3.push(`<!----></span> <span class="name svelte-183q6rw">`);
|
|
2921
2921
|
if (row.orchestrator) {
|
|
@@ -2963,7 +2963,7 @@ function AllSessionsPanel($$renderer, $$props) {
|
|
|
2963
2963
|
const isActive = pane.target === currentTarget();
|
|
2964
2964
|
const detected = detectPaneAgent(pane.command || "");
|
|
2965
2965
|
const meta = detected ? AGENTS[detected] : null;
|
|
2966
|
-
$$renderer3.push(`<a${attr("href", `/session/${stringify(encodeURIComponent(pane.target))}`)}${attr_class("row tmux svelte-183q6rw", void 0, { "cur": isActive })}
|
|
2966
|
+
$$renderer3.push(`<a${attr("href", `/session/${stringify(encodeURIComponent(pane.target))}`)}${attr_class("row tmux svelte-183q6rw", void 0, { "cur": isActive })}${attr("draggable", "false")}><span class="st svelte-183q6rw"><iconify-icon${attr("icon", meta?.icon ?? "mdi:console-line")}${attr_style(meta ? `color:${meta.color}` : "")} class="svelte-183q6rw"></iconify-icon></span> <span class="name mono svelte-183q6rw">${escape_html(pane.target)}</span> <span class="meta svelte-183q6rw"><span class="when svelte-183q6rw">${escape_html(meta?.label ?? pane.command)}</span></span> <span class="ctx none svelte-183q6rw"></span></a>`);
|
|
2967
2967
|
}
|
|
2968
2968
|
function projectCard($$renderer3, machine, card) {
|
|
2969
2969
|
$$renderer3.push(`<section${attr_class("card proj svelte-183q6rw", void 0, { "wants": card.wants })}><div class="proj-h svelte-183q6rw"><span class="chip svelte-183q6rw"${attr_style(`background:${stringify(card.color)}`)}>${escape_html(card.name.slice(0, 1).toLowerCase())}</span> <span class="pname svelte-183q6rw"${attr("title", card.cwd)}>${escape_html(card.name)}</span> <span class="pcount svelte-183q6rw">${escape_html(card.rows.filter((r) => !r.orchestrator).length)}</span> <button type="button" class="pbtn svelte-183q6rw" title="New session here (right-click or hold for another agent)"><iconify-icon icon="mdi:plus" class="svelte-183q6rw"></iconify-icon></button> <button type="button" class="pbtn pclose svelte-183q6rw" title="Close project"><iconify-icon icon="mdi:close" class="svelte-183q6rw"></iconify-icon></button></div> <!--[-->`);
|
|
@@ -3189,7 +3189,8 @@ function _page($$renderer, $$props) {
|
|
|
3189
3189
|
const isBusy = derived(() => (currentSession()?.state ?? "idle") === "busy");
|
|
3190
3190
|
const MOD_LABEL = typeof navigator !== "undefined" && /Mac|iPhone|iPad/.test(navigator.platform) ? "⌘" : "Ctrl";
|
|
3191
3191
|
const paneChoice = derived(() => currentSession()?.pane_choice ?? null);
|
|
3192
|
-
|
|
3192
|
+
let pendingAnswer = false;
|
|
3193
|
+
const answering = derived(() => paneChoice()?.typing === true || pendingAnswer);
|
|
3193
3194
|
const choice = derived(() => !hasDraft() && !answering() ? paneChoice() : null);
|
|
3194
3195
|
const KEY_SEGMENT = /^(\S+) to (.+)$/;
|
|
3195
3196
|
const DRIVEN_KEYS = /* @__PURE__ */ new Set(["Enter", "Esc", "↑/↓", "←/→", "ctrl+g"]);
|
|
@@ -10,7 +10,7 @@ return {
|
|
|
10
10
|
assets: new Set(["apple-touch-icon.png","favicon.svg","icon-192.png","icon-512.png","manifest.webmanifest","robots.txt"]),
|
|
11
11
|
mimeTypes: {".png":"image/png",".svg":"image/svg+xml",".webmanifest":"application/manifest+json",".txt":"text/plain"},
|
|
12
12
|
_: {
|
|
13
|
-
client: {start:"_app/immutable/entry/start.
|
|
13
|
+
client: {start:"_app/immutable/entry/start.BjUUmuae.js",app:"_app/immutable/entry/app.tijMyuHe.js",imports:["_app/immutable/entry/start.BjUUmuae.js","_app/immutable/chunks/Bjgls5C2.js","_app/immutable/chunks/RhyL4cOo.js","_app/immutable/chunks/cJslalWy.js","_app/immutable/entry/app.tijMyuHe.js","_app/immutable/chunks/RhyL4cOo.js","_app/immutable/chunks/BuvGONG-.js","_app/immutable/chunks/ukOf9Kzz.js","_app/immutable/chunks/CjMoR7Dp.js"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},
|
|
14
14
|
nodes: [
|
|
15
15
|
__memo(() => import('./nodes/0.js')),
|
|
16
16
|
__memo(() => import('./nodes/1.js')),
|
|
@@ -10,7 +10,7 @@ return {
|
|
|
10
10
|
assets: new Set(["apple-touch-icon.png","favicon.svg","icon-192.png","icon-512.png","manifest.webmanifest","robots.txt"]),
|
|
11
11
|
mimeTypes: {".png":"image/png",".svg":"image/svg+xml",".webmanifest":"application/manifest+json",".txt":"text/plain"},
|
|
12
12
|
_: {
|
|
13
|
-
client: {start:"_app/immutable/entry/start.
|
|
13
|
+
client: {start:"_app/immutable/entry/start.BjUUmuae.js",app:"_app/immutable/entry/app.tijMyuHe.js",imports:["_app/immutable/entry/start.BjUUmuae.js","_app/immutable/chunks/Bjgls5C2.js","_app/immutable/chunks/RhyL4cOo.js","_app/immutable/chunks/cJslalWy.js","_app/immutable/entry/app.tijMyuHe.js","_app/immutable/chunks/RhyL4cOo.js","_app/immutable/chunks/BuvGONG-.js","_app/immutable/chunks/ukOf9Kzz.js","_app/immutable/chunks/CjMoR7Dp.js"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},
|
|
14
14
|
nodes: [
|
|
15
15
|
__memo(() => import('./nodes/0.js')),
|
|
16
16
|
__memo(() => import('./nodes/1.js')),
|
|
@@ -5,6 +5,6 @@ let component_cache;
|
|
|
5
5
|
export const component = async () => component_cache ??= (await import('../entries/pages/_layout.svelte.js')).default;
|
|
6
6
|
export { server };
|
|
7
7
|
export const server_id = "src/routes/+layout.server.ts";
|
|
8
|
-
export const imports = ["_app/immutable/nodes/0.
|
|
9
|
-
export const stylesheets = ["_app/immutable/assets/sidebarActions.Ch26YL9l.css","_app/immutable/assets/AllSessionsPanel.BCLr3G4T.css","_app/immutable/assets/0.
|
|
8
|
+
export const imports = ["_app/immutable/nodes/0.Dh-WcEW1.js","_app/immutable/chunks/BuvGONG-.js","_app/immutable/chunks/RhyL4cOo.js","_app/immutable/chunks/ukOf9Kzz.js","_app/immutable/chunks/DnC9WjQh.js","_app/immutable/chunks/Bjgls5C2.js","_app/immutable/chunks/cJslalWy.js","_app/immutable/chunks/BpsTpPGB.js","_app/immutable/chunks/CjMoR7Dp.js","_app/immutable/chunks/C8V5fK-3.js","_app/immutable/chunks/DRBq3mUM.js","_app/immutable/chunks/MhGpinwS.js"];
|
|
9
|
+
export const stylesheets = ["_app/immutable/assets/sidebarActions.Ch26YL9l.css","_app/immutable/assets/AllSessionsPanel.BCLr3G4T.css","_app/immutable/assets/0.CiLJk_Xe.css"];
|
|
10
10
|
export const fonts = [];
|
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
export const index = 1;
|
|
4
4
|
let component_cache;
|
|
5
5
|
export const component = async () => component_cache ??= (await import('../entries/fallbacks/error.svelte.js')).default;
|
|
6
|
-
export const imports = ["_app/immutable/nodes/1.
|
|
6
|
+
export const imports = ["_app/immutable/nodes/1.haoM4e9N.js","_app/immutable/chunks/BuvGONG-.js","_app/immutable/chunks/RhyL4cOo.js","_app/immutable/chunks/cJslalWy.js"];
|
|
7
7
|
export const stylesheets = [];
|
|
8
8
|
export const fonts = [];
|
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
export const index = 2;
|
|
4
4
|
let component_cache;
|
|
5
5
|
export const component = async () => component_cache ??= (await import('../entries/pages/_page.svelte.js')).default;
|
|
6
|
-
export const imports = ["_app/immutable/nodes/2.
|
|
6
|
+
export const imports = ["_app/immutable/nodes/2.DtC9KdX8.js","_app/immutable/chunks/BuvGONG-.js","_app/immutable/chunks/RhyL4cOo.js","_app/immutable/chunks/ukOf9Kzz.js","_app/immutable/chunks/BpsTpPGB.js","_app/immutable/chunks/MhGpinwS.js","_app/immutable/chunks/CjMoR7Dp.js","_app/immutable/chunks/DnC9WjQh.js","_app/immutable/chunks/Bjgls5C2.js","_app/immutable/chunks/cJslalWy.js"];
|
|
7
7
|
export const stylesheets = ["_app/immutable/assets/sidebarActions.Ch26YL9l.css","_app/immutable/assets/AllSessionsPanel.BCLr3G4T.css","_app/immutable/assets/2.BPFnFMPa.css"];
|
|
8
8
|
export const fonts = [];
|
|
@@ -6,6 +6,6 @@ export const universal = {
|
|
|
6
6
|
"ssr": false
|
|
7
7
|
};
|
|
8
8
|
export const universal_id = "src/routes/session/[target]/+page.ts";
|
|
9
|
-
export const imports = ["_app/immutable/nodes/3.
|
|
10
|
-
export const stylesheets = ["_app/immutable/assets/sidebarActions.Ch26YL9l.css","_app/immutable/assets/3.
|
|
9
|
+
export const imports = ["_app/immutable/nodes/3.FZTTKJCk.js","_app/immutable/chunks/BuvGONG-.js","_app/immutable/chunks/RhyL4cOo.js","_app/immutable/chunks/ukOf9Kzz.js","_app/immutable/chunks/BpsTpPGB.js","_app/immutable/chunks/CjMoR7Dp.js","_app/immutable/chunks/DnC9WjQh.js","_app/immutable/chunks/Bjgls5C2.js","_app/immutable/chunks/cJslalWy.js","_app/immutable/chunks/C8V5fK-3.js","_app/immutable/chunks/DRBq3mUM.js"];
|
|
10
|
+
export const stylesheets = ["_app/immutable/assets/sidebarActions.Ch26YL9l.css","_app/immutable/assets/3.DIECCPxi.css"];
|
|
11
11
|
export const fonts = [];
|
|
@@ -26,7 +26,7 @@ export const options = {
|
|
|
26
26
|
app: ({ head, body, assets, nonce, env }) => "<!doctype html>\n<html lang=\"en\" class=\"dark\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, viewport-fit=cover\" />\n\t\t<meta name=\"theme-color\" content=\"#111111\" />\n\t\t<!-- PWA / iOS home-screen: open fullscreen (standalone) instead of inside the browser chrome -->\n\t\t<link rel=\"manifest\" href=\"/manifest.webmanifest\" />\n\t\t<meta name=\"mobile-web-app-capable\" content=\"yes\" />\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n\t\t<meta name=\"apple-mobile-web-app-title\" content=\"claude-mux\" />\n\t\t<link rel=\"apple-touch-icon\" href=\"/apple-touch-icon.png\" />\n\t\t<link rel=\"icon\" type=\"image/svg+xml\" href=\"/favicon.svg\" />\n\t\t" + head + "\n\t</head>\n\t<body data-sveltekit-preload-data=\"hover\">\n\t\t<div style=\"display: contents\">" + body + "</div>\n\t</body>\n</html>\n",
|
|
27
27
|
error
|
|
28
28
|
},
|
|
29
|
-
version_hash: "
|
|
29
|
+
version_hash: "1y342ik"
|
|
30
30
|
};
|
|
31
31
|
|
|
32
32
|
export async function get_hooks() {
|