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.
Files changed (157) hide show
  1. package/dist/server/ws-handlers.d.ts.map +1 -1
  2. package/dist/server/ws-handlers.js +37 -6
  3. package/dist/server/ws-handlers.js.map +1 -1
  4. package/dist/tmux/pane.d.ts +13 -3
  5. package/dist/tmux/pane.d.ts.map +1 -1
  6. package/dist/tmux/pane.js +113 -36
  7. package/dist/tmux/pane.js.map +1 -1
  8. package/dist/transcript/context-peek.d.ts +18 -0
  9. package/dist/transcript/context-peek.d.ts.map +1 -1
  10. package/dist/transcript/context-peek.js +59 -12
  11. package/dist/transcript/context-peek.js.map +1 -1
  12. package/dist/types/ws-messages.d.ts +6 -0
  13. package/dist/types/ws-messages.d.ts.map +1 -1
  14. package/dist/types/ws-messages.js +2 -0
  15. package/dist/types/ws-messages.js.map +1 -1
  16. package/dist/utils/version.d.ts +1 -1
  17. package/dist/utils/version.js +1 -1
  18. package/dist/web/client/_app/immutable/assets/0.CiLJk_Xe.css +1 -0
  19. package/{web/.svelte-kit/adapter-bun/_app/immutable/assets/_page.XJ3XhAQU.css → dist/web/client/_app/immutable/assets/3.DIECCPxi.css} +1 -1
  20. package/dist/web/client/_app/immutable/chunks/Bjgls5C2.js +2 -0
  21. package/{web/.svelte-kit/output/client/_app/immutable/chunks/Cotx9uI_.js → dist/web/client/_app/immutable/chunks/C8V5fK-3.js} +1 -1
  22. package/dist/web/client/_app/immutable/chunks/DnC9WjQh.js +57 -0
  23. package/dist/web/client/_app/immutable/chunks/MhGpinwS.js +1 -0
  24. package/dist/web/client/_app/immutable/chunks/cJslalWy.js +1 -0
  25. package/dist/web/client/_app/immutable/entry/{app.DXHW0aPL.js → app.tijMyuHe.js} +2 -2
  26. package/dist/web/client/_app/immutable/entry/start.BjUUmuae.js +1 -0
  27. package/dist/web/client/_app/immutable/nodes/{0.DAnv2asW.js → 0.Dh-WcEW1.js} +1 -1
  28. package/dist/web/client/_app/immutable/nodes/{1.CU8f4oNB.js → 1.haoM4e9N.js} +1 -1
  29. package/dist/web/client/_app/immutable/nodes/{2.BYpvCgtu.js → 2.DtC9KdX8.js} +1 -1
  30. package/dist/web/client/_app/immutable/nodes/3.FZTTKJCk.js +168 -0
  31. package/dist/web/client/_app/version.json +1 -1
  32. package/dist/web/server/chunks/{0-C-AAPmon.js → 0-Cw5iP0WY.js} +9 -9
  33. package/dist/web/server/chunks/{0-C-AAPmon.js.map → 0-Cw5iP0WY.js.map} +1 -1
  34. package/dist/web/server/chunks/{1-T_dogl8W.js → 1-CR_g4jt5.js} +3 -3
  35. package/dist/web/server/chunks/{1-T_dogl8W.js.map → 1-CR_g4jt5.js.map} +1 -1
  36. package/dist/web/server/chunks/{2-FlchE_4u.js → 2-Cy0TJi3N.js} +7 -7
  37. package/dist/web/server/chunks/{2-FlchE_4u.js.map → 2-Cy0TJi3N.js.map} +1 -1
  38. package/dist/web/server/chunks/{3-U2bTntXU.js → 3-D9Ui86YT.js} +7 -7
  39. package/dist/web/server/chunks/{3-U2bTntXU.js.map → 3-D9Ui86YT.js.map} +1 -1
  40. package/dist/web/server/chunks/{_layout.svelte-Ddn9Wu-V.js → _layout.svelte-DZ2sqwz3.js} +4 -4
  41. package/dist/web/server/chunks/{_layout.svelte-Ddn9Wu-V.js.map → _layout.svelte-DZ2sqwz3.js.map} +1 -1
  42. package/dist/web/server/chunks/{_page.svelte-_F3qltju.js → _page.svelte--yq9E8Jb.js} +2 -2
  43. package/dist/web/server/chunks/{_page.svelte-_F3qltju.js.map → _page.svelte--yq9E8Jb.js.map} +1 -1
  44. package/dist/web/server/chunks/{_server.ts-CNU4yPZZ.js → _server.ts-BCCIAioG.js} +4 -2
  45. package/dist/web/server/chunks/_server.ts-BCCIAioG.js.map +1 -0
  46. package/dist/web/server/chunks/{_server.ts-CtsPyICr.js → _server.ts-BMZtxwLP.js} +2 -2
  47. package/dist/web/server/chunks/{_server.ts-CtsPyICr.js.map → _server.ts-BMZtxwLP.js.map} +1 -1
  48. package/dist/web/server/chunks/{_server.ts-BBrtrcEt.js → _server.ts-CONr9rjv.js} +2 -2
  49. package/dist/web/server/chunks/{_server.ts-BBrtrcEt.js.map → _server.ts-CONr9rjv.js.map} +1 -1
  50. package/dist/web/server/chunks/{_server.ts-fnuGtMqr.js → _server.ts-CSKVHlMn.js} +3 -3
  51. package/dist/web/server/chunks/{_server.ts-fnuGtMqr.js.map → _server.ts-CSKVHlMn.js.map} +1 -1
  52. package/dist/web/server/chunks/{_server.ts-Df32fD_Q.js → _server.ts-D1PwUVXn.js} +2 -2
  53. package/dist/web/server/chunks/{_server.ts-Df32fD_Q.js.map → _server.ts-D1PwUVXn.js.map} +1 -1
  54. package/dist/web/server/chunks/{_server.ts-C00ejke7.js → _server.ts-D4xa8gs1.js} +2 -2
  55. package/dist/web/server/chunks/{_server.ts-C00ejke7.js.map → _server.ts-D4xa8gs1.js.map} +1 -1
  56. package/dist/web/server/chunks/{_server.ts-C6MJsvPN.js → _server.ts-DxjUBscT.js} +3 -3
  57. package/dist/web/server/chunks/{_server.ts-C6MJsvPN.js.map → _server.ts-DxjUBscT.js.map} +1 -1
  58. package/dist/web/server/chunks/{button-C1GVS_oY.js → button-BxVvCjdl.js} +24 -4
  59. package/dist/web/server/chunks/{button-C1GVS_oY.js.map → button-BxVvCjdl.js.map} +1 -1
  60. package/dist/web/server/chunks/{hooks.server-DG_lyHkY.js → hooks.server-B8dJh24b.js} +3 -3
  61. package/dist/web/server/chunks/{hooks.server-DG_lyHkY.js.map → hooks.server-B8dJh24b.js.map} +1 -1
  62. package/dist/web/server/chunks/{ws-handlers-BQ2RtlNl.js → ws-handlers-fSFiSfwn.js} +150 -43
  63. package/dist/web/server/chunks/ws-handlers-fSFiSfwn.js.map +1 -0
  64. package/dist/web/server/chunks/{ws-managers-DLQiiQnX.js → ws-managers-Cv1gfcBO.js} +2 -2
  65. package/dist/web/server/chunks/{ws-managers-DLQiiQnX.js.map → ws-managers-Cv1gfcBO.js.map} +1 -1
  66. package/dist/web/server/index.js +2 -2
  67. package/dist/web/server/index.js.map +1 -1
  68. package/dist/web/server/manifest.js +17 -17
  69. package/dist/web/server/manifest.js.map +1 -1
  70. package/package.json +1 -1
  71. package/src/server/ws-handlers.ts +35 -6
  72. package/src/tmux/pane.ts +124 -33
  73. package/src/transcript/context-peek.ts +71 -13
  74. package/src/types/ws-messages.ts +2 -0
  75. package/src/utils/version.ts +1 -1
  76. package/tests/tmux/activity-line.test.ts +47 -0
  77. package/tests/tmux/prompt-options.test.ts +49 -4
  78. package/tests/transcript/title-peek.test.ts +54 -0
  79. package/web/.svelte-kit/adapter-bun/.vite/manifest.json +4 -8
  80. package/web/.svelte-kit/adapter-bun/_app/immutable/assets/_layout.6tlxP3iE.css +1 -0
  81. package/{dist/web/client/_app/immutable/assets/3.XJ3XhAQU.css → web/.svelte-kit/adapter-bun/_app/immutable/assets/_page.DIECCPxi.css} +1 -1
  82. package/web/.svelte-kit/adapter-bun/chunks/button.js +24 -1
  83. package/web/.svelte-kit/adapter-bun/chunks/internal2.js +1 -1
  84. package/web/.svelte-kit/adapter-bun/chunks/ws-handlers.js +137 -40
  85. package/web/.svelte-kit/adapter-bun/chunks/ws-managers.js +1 -1
  86. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/projects/new-session/_server.ts.js +3 -1
  87. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_server.ts.js +1 -1
  88. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/settings/_server.ts.js +1 -1
  89. package/web/.svelte-kit/adapter-bun/entries/pages/_layout.svelte.js +2 -2
  90. package/web/.svelte-kit/adapter-bun/entries/pages/session/_target_/_page.svelte.js +2 -1
  91. package/web/.svelte-kit/adapter-bun/manifest-full.js +1 -1
  92. package/web/.svelte-kit/adapter-bun/manifest.js +1 -1
  93. package/web/.svelte-kit/adapter-bun/nodes/0.js +2 -2
  94. package/web/.svelte-kit/adapter-bun/nodes/1.js +1 -1
  95. package/web/.svelte-kit/adapter-bun/nodes/2.js +1 -1
  96. package/web/.svelte-kit/adapter-bun/nodes/3.js +2 -2
  97. package/web/.svelte-kit/generated/server/internal.js +1 -1
  98. package/web/.svelte-kit/output/client/.vite/manifest.json +59 -59
  99. package/web/.svelte-kit/output/client/_app/immutable/assets/0.CiLJk_Xe.css +1 -0
  100. package/web/.svelte-kit/output/client/_app/immutable/assets/{3.XJ3XhAQU.css → 3.DIECCPxi.css} +1 -1
  101. package/web/.svelte-kit/output/client/_app/immutable/chunks/Bjgls5C2.js +2 -0
  102. package/{dist/web/client/_app/immutable/chunks/Cotx9uI_.js → web/.svelte-kit/output/client/_app/immutable/chunks/C8V5fK-3.js} +1 -1
  103. package/web/.svelte-kit/output/client/_app/immutable/chunks/DnC9WjQh.js +57 -0
  104. package/web/.svelte-kit/output/client/_app/immutable/chunks/MhGpinwS.js +1 -0
  105. package/web/.svelte-kit/output/client/_app/immutable/chunks/cJslalWy.js +1 -0
  106. package/web/.svelte-kit/output/client/_app/immutable/entry/{app.DXHW0aPL.js → app.tijMyuHe.js} +2 -2
  107. package/web/.svelte-kit/output/client/_app/immutable/entry/start.BjUUmuae.js +1 -0
  108. package/web/.svelte-kit/output/client/_app/immutable/nodes/{0.DAnv2asW.js → 0.Dh-WcEW1.js} +1 -1
  109. package/web/.svelte-kit/output/client/_app/immutable/nodes/{1.CU8f4oNB.js → 1.haoM4e9N.js} +1 -1
  110. package/web/.svelte-kit/output/client/_app/immutable/nodes/{2.BYpvCgtu.js → 2.DtC9KdX8.js} +1 -1
  111. package/web/.svelte-kit/output/client/_app/immutable/nodes/3.FZTTKJCk.js +168 -0
  112. package/web/.svelte-kit/output/client/_app/version.json +1 -1
  113. package/web/.svelte-kit/output/server/.vite/manifest.json +4 -8
  114. package/web/.svelte-kit/output/server/_app/immutable/assets/_layout.6tlxP3iE.css +1 -0
  115. package/web/.svelte-kit/output/server/_app/immutable/assets/{_page.XJ3XhAQU.css → _page.DIECCPxi.css} +1 -1
  116. package/web/.svelte-kit/output/server/chunks/button.js +24 -1
  117. package/web/.svelte-kit/output/server/chunks/internal2.js +1 -1
  118. package/web/.svelte-kit/output/server/chunks/ws-handlers.js +137 -40
  119. package/web/.svelte-kit/output/server/chunks/ws-managers.js +1 -1
  120. package/web/.svelte-kit/output/server/entries/endpoints/api/projects/new-session/_server.ts.js +3 -1
  121. package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_server.ts.js +1 -1
  122. package/web/.svelte-kit/output/server/entries/endpoints/api/settings/_server.ts.js +1 -1
  123. package/web/.svelte-kit/output/server/entries/pages/_layout.svelte.js +2 -2
  124. package/web/.svelte-kit/output/server/entries/pages/session/_target_/_page.svelte.js +2 -1
  125. package/web/.svelte-kit/output/server/manifest-full.js +1 -1
  126. package/web/.svelte-kit/output/server/manifest.js +1 -1
  127. package/web/.svelte-kit/output/server/nodes/0.js +2 -2
  128. package/web/.svelte-kit/output/server/nodes/1.js +1 -1
  129. package/web/.svelte-kit/output/server/nodes/2.js +1 -1
  130. package/web/.svelte-kit/output/server/nodes/3.js +2 -2
  131. package/web/src/lib/actions/longPress.ts +52 -6
  132. package/web/src/lib/components/AllSessionsPanel.svelte +12 -3
  133. package/web/src/lib/stores/websocket-base.svelte.ts +24 -1
  134. package/web/src/routes/api/projects/new-session/+server.ts +3 -0
  135. package/web/src/routes/session/[target]/+page.svelte +60 -12
  136. package/dist/web/client/_app/immutable/assets/0.DwaaTdPO.css +0 -1
  137. package/dist/web/client/_app/immutable/chunks/1pIWnoD_.js +0 -1
  138. package/dist/web/client/_app/immutable/chunks/DfoR1zCV.js +0 -1
  139. package/dist/web/client/_app/immutable/chunks/DmEI2TOa.js +0 -57
  140. package/dist/web/client/_app/immutable/chunks/DtVU-s3j.js +0 -2
  141. package/dist/web/client/_app/immutable/entry/start.CchjowOg.js +0 -1
  142. package/dist/web/client/_app/immutable/nodes/3.DuMzeRg3.js +0 -168
  143. package/dist/web/server/chunks/_server.ts-CNU4yPZZ.js.map +0 -1
  144. package/dist/web/server/chunks/geometry-CUMMOI9q.js +0 -46
  145. package/dist/web/server/chunks/geometry-CUMMOI9q.js.map +0 -1
  146. package/dist/web/server/chunks/ws-handlers-BQ2RtlNl.js.map +0 -1
  147. package/web/.svelte-kit/adapter-bun/_app/immutable/assets/_layout.Bpy37C6o.css +0 -1
  148. package/web/.svelte-kit/adapter-bun/chunks/geometry.js +0 -32
  149. package/web/.svelte-kit/output/client/_app/immutable/assets/0.DwaaTdPO.css +0 -1
  150. package/web/.svelte-kit/output/client/_app/immutable/chunks/1pIWnoD_.js +0 -1
  151. package/web/.svelte-kit/output/client/_app/immutable/chunks/DfoR1zCV.js +0 -1
  152. package/web/.svelte-kit/output/client/_app/immutable/chunks/DmEI2TOa.js +0 -57
  153. package/web/.svelte-kit/output/client/_app/immutable/chunks/DtVU-s3j.js +0 -2
  154. package/web/.svelte-kit/output/client/_app/immutable/entry/start.CchjowOg.js +0 -1
  155. package/web/.svelte-kit/output/client/_app/immutable/nodes/3.DuMzeRg3.js +0 -168
  156. package/web/.svelte-kit/output/server/_app/immutable/assets/_layout.Bpy37C6o.css +0 -1
  157. 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: "7677w9"
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
- function isPaneShowingSpinner(content) {
786
- if (!content) return false;
787
- const bottomLines = content.split("\n").slice(-5).join("");
788
- return /[\u2800-\u28FF]/.test(bottomLines);
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 (/[⠀-⣿]/.test(joined)) return false;
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 = 120;
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
- let hint;
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)) continue;
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
- if (!under || hint !== void 0) {
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
- hint = clampOption(bare);
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
- return {
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
- let question = null;
1075
- let top = null;
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 (top !== null) break;
1109
+ if (paragraph.length > 0) break;
1081
1110
  continue;
1082
1111
  }
1083
- top = text;
1084
- if (text.endsWith("?")) {
1085
- question = clampOption(text);
1086
- break;
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 readLastUsage(path, size) {
1173
+ function readTailLines(path, size) {
1119
1174
  const length = Math.min(size, TAIL_BYTES);
1120
- if (length === 0) return null;
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
- const lines = buffer.toString("utf-8").split("\n");
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 peekContextUsage(session) {
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.usage;
1156
- const usage = readLastUsage(path, stat.size) ?? memo?.usage ?? null;
1157
- files.set(path, { mtimeMs: stat.mtimeMs, size: stat.size, usage });
1158
- return usage;
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" && isPaneShowingSpinner(content)) {
1459
- apply(session, { state: "busy", current_action: "Compacting..." });
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
- getEnrichedSessionsAsync as b,
2440
- getSettings as c,
2441
- TranscriptWsManager as d,
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, d as TranscriptWsManager } from "./ws-handlers.js";
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 }));
@@ -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 { s as sizeArgsForNewSession } from "../../../../../chunks/geometry.js";
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 { b as getEnrichedSessionsAsync } from "../../../../chunks/ws-handlers.js";
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 { c as getSettings, u as updateSettings } from "../../../../chunks/ws-handlers.js";
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", s.tmux_target ? "true" : "false")}${attr("title", (machine.local ? "Double-click or long-press to rename" : `On ${machine.server.hostname}`) + " · ⌥-click or drag to open side by side")}><span class="st svelte-183q6rw">`);
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 })} draggable="true"><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>`);
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
- const answering = derived(() => paneChoice()?.typing === true);
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.CchjowOg.js",app:"_app/immutable/entry/app.DXHW0aPL.js",imports:["_app/immutable/entry/start.CchjowOg.js","_app/immutable/chunks/DtVU-s3j.js","_app/immutable/chunks/RhyL4cOo.js","_app/immutable/chunks/DfoR1zCV.js","_app/immutable/entry/app.DXHW0aPL.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},
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.CchjowOg.js",app:"_app/immutable/entry/app.DXHW0aPL.js",imports:["_app/immutable/entry/start.CchjowOg.js","_app/immutable/chunks/DtVU-s3j.js","_app/immutable/chunks/RhyL4cOo.js","_app/immutable/chunks/DfoR1zCV.js","_app/immutable/entry/app.DXHW0aPL.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},
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.DAnv2asW.js","_app/immutable/chunks/BuvGONG-.js","_app/immutable/chunks/RhyL4cOo.js","_app/immutable/chunks/ukOf9Kzz.js","_app/immutable/chunks/DmEI2TOa.js","_app/immutable/chunks/DtVU-s3j.js","_app/immutable/chunks/DfoR1zCV.js","_app/immutable/chunks/BpsTpPGB.js","_app/immutable/chunks/CjMoR7Dp.js","_app/immutable/chunks/Cotx9uI_.js","_app/immutable/chunks/DRBq3mUM.js","_app/immutable/chunks/1pIWnoD_.js"];
9
- export const stylesheets = ["_app/immutable/assets/sidebarActions.Ch26YL9l.css","_app/immutable/assets/AllSessionsPanel.BCLr3G4T.css","_app/immutable/assets/0.DwaaTdPO.css"];
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.CU8f4oNB.js","_app/immutable/chunks/BuvGONG-.js","_app/immutable/chunks/RhyL4cOo.js","_app/immutable/chunks/DfoR1zCV.js"];
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.BYpvCgtu.js","_app/immutable/chunks/BuvGONG-.js","_app/immutable/chunks/RhyL4cOo.js","_app/immutable/chunks/ukOf9Kzz.js","_app/immutable/chunks/BpsTpPGB.js","_app/immutable/chunks/1pIWnoD_.js","_app/immutable/chunks/CjMoR7Dp.js","_app/immutable/chunks/DmEI2TOa.js","_app/immutable/chunks/DtVU-s3j.js","_app/immutable/chunks/DfoR1zCV.js"];
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.DuMzeRg3.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/DmEI2TOa.js","_app/immutable/chunks/DtVU-s3j.js","_app/immutable/chunks/DfoR1zCV.js","_app/immutable/chunks/Cotx9uI_.js","_app/immutable/chunks/DRBq3mUM.js"];
10
- export const stylesheets = ["_app/immutable/assets/sidebarActions.Ch26YL9l.css","_app/immutable/assets/3.XJ3XhAQU.css"];
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: "11m4ygo"
29
+ version_hash: "1y342ik"
30
30
  };
31
31
 
32
32
  export async function get_hooks() {