claude-mux 0.26.2 → 0.26.3

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 (134) hide show
  1. package/dist/server/ws-handlers.d.ts.map +1 -1
  2. package/dist/server/ws-handlers.js +7 -4
  3. package/dist/server/ws-handlers.js.map +1 -1
  4. package/dist/tmux/pane.d.ts +7 -3
  5. package/dist/tmux/pane.d.ts.map +1 -1
  6. package/dist/tmux/pane.js +35 -13
  7. package/dist/tmux/pane.js.map +1 -1
  8. package/dist/utils/version.d.ts +1 -1
  9. package/dist/utils/version.js +1 -1
  10. package/dist/web/client/_app/immutable/assets/0.CiLJk_Xe.css +1 -0
  11. package/dist/web/client/_app/immutable/chunks/{DmEI2TOa.js → BPG41LQc.js} +13 -13
  12. package/dist/web/client/_app/immutable/chunks/BxK27rIF.js +1 -0
  13. package/dist/web/client/_app/immutable/chunks/DvtCSRbx.js +1 -0
  14. package/dist/web/client/_app/immutable/chunks/Iym5fv6V.js +2 -0
  15. package/{web/.svelte-kit/output/client/_app/immutable/chunks/Cotx9uI_.js → dist/web/client/_app/immutable/chunks/ZzVAGtsj.js} +1 -1
  16. package/dist/web/client/_app/immutable/entry/{app.DXHW0aPL.js → app.BrdmX1nT.js} +2 -2
  17. package/dist/web/client/_app/immutable/entry/start.z3GFCeFl.js +1 -0
  18. package/dist/web/client/_app/immutable/nodes/{0.DAnv2asW.js → 0.DX7LpCH-.js} +1 -1
  19. package/dist/web/client/_app/immutable/nodes/{1.CU8f4oNB.js → 1.LA4NLAbZ.js} +1 -1
  20. package/dist/web/client/_app/immutable/nodes/{2.BYpvCgtu.js → 2.CC3GVyR0.js} +1 -1
  21. package/dist/web/client/_app/immutable/nodes/{3.DuMzeRg3.js → 3.s97PqS3X.js} +1 -1
  22. package/dist/web/client/_app/version.json +1 -1
  23. package/dist/web/server/chunks/{0-C-AAPmon.js → 0-D-tZOQ7R.js} +9 -9
  24. package/dist/web/server/chunks/{0-C-AAPmon.js.map → 0-D-tZOQ7R.js.map} +1 -1
  25. package/dist/web/server/chunks/{1-T_dogl8W.js → 1-CG5NsrbP.js} +3 -3
  26. package/dist/web/server/chunks/{1-T_dogl8W.js.map → 1-CG5NsrbP.js.map} +1 -1
  27. package/dist/web/server/chunks/{2-FlchE_4u.js → 2-yV51EcS-.js} +7 -7
  28. package/dist/web/server/chunks/{2-FlchE_4u.js.map → 2-yV51EcS-.js.map} +1 -1
  29. package/dist/web/server/chunks/{3-U2bTntXU.js → 3-D75yomeT.js} +6 -6
  30. package/dist/web/server/chunks/{3-U2bTntXU.js.map → 3-D75yomeT.js.map} +1 -1
  31. package/dist/web/server/chunks/{_layout.svelte-Ddn9Wu-V.js → _layout.svelte-B22DMQF4.js} +4 -4
  32. package/dist/web/server/chunks/{_layout.svelte-Ddn9Wu-V.js.map → _layout.svelte-B22DMQF4.js.map} +1 -1
  33. package/dist/web/server/chunks/{_page.svelte-_F3qltju.js → _page.svelte-DkZsH6VV.js} +2 -2
  34. package/dist/web/server/chunks/{_page.svelte-_F3qltju.js.map → _page.svelte-DkZsH6VV.js.map} +1 -1
  35. package/dist/web/server/chunks/{_server.ts-C6MJsvPN.js → _server.ts-BLpwF6cO.js} +3 -3
  36. package/dist/web/server/chunks/{_server.ts-C6MJsvPN.js.map → _server.ts-BLpwF6cO.js.map} +1 -1
  37. package/dist/web/server/chunks/{_server.ts-fnuGtMqr.js → _server.ts-BceRCUNN.js} +3 -3
  38. package/dist/web/server/chunks/{_server.ts-fnuGtMqr.js.map → _server.ts-BceRCUNN.js.map} +1 -1
  39. package/dist/web/server/chunks/{_server.ts-Df32fD_Q.js → _server.ts-DLwZHSdd.js} +2 -2
  40. package/dist/web/server/chunks/{_server.ts-Df32fD_Q.js.map → _server.ts-DLwZHSdd.js.map} +1 -1
  41. package/dist/web/server/chunks/{_server.ts-CNU4yPZZ.js → _server.ts-IZp35sUH.js} +4 -2
  42. package/dist/web/server/chunks/_server.ts-IZp35sUH.js.map +1 -0
  43. package/dist/web/server/chunks/{_server.ts-CtsPyICr.js → _server.ts-ilTVJ4A9.js} +2 -2
  44. package/dist/web/server/chunks/{_server.ts-CtsPyICr.js.map → _server.ts-ilTVJ4A9.js.map} +1 -1
  45. package/dist/web/server/chunks/{_server.ts-C00ejke7.js → _server.ts-pihD3w10.js} +2 -2
  46. package/dist/web/server/chunks/{_server.ts-C00ejke7.js.map → _server.ts-pihD3w10.js.map} +1 -1
  47. package/dist/web/server/chunks/{_server.ts-BBrtrcEt.js → _server.ts-xXEIfBqh.js} +2 -2
  48. package/dist/web/server/chunks/{_server.ts-BBrtrcEt.js.map → _server.ts-xXEIfBqh.js.map} +1 -1
  49. package/dist/web/server/chunks/{button-C1GVS_oY.js → button-svhFQKMs.js} +21 -3
  50. package/dist/web/server/chunks/{button-C1GVS_oY.js.map → button-svhFQKMs.js.map} +1 -1
  51. package/dist/web/server/chunks/{hooks.server-DG_lyHkY.js → hooks.server-BschOmH0.js} +3 -3
  52. package/dist/web/server/chunks/{hooks.server-DG_lyHkY.js.map → hooks.server-BschOmH0.js.map} +1 -1
  53. package/dist/web/server/chunks/{ws-handlers-BQ2RtlNl.js → ws-handlers-DmdbIqkc.js} +61 -16
  54. package/dist/web/server/chunks/ws-handlers-DmdbIqkc.js.map +1 -0
  55. package/dist/web/server/chunks/{ws-managers-DLQiiQnX.js → ws-managers-Cw_QNOpo.js} +2 -2
  56. package/dist/web/server/chunks/{ws-managers-DLQiiQnX.js.map → ws-managers-Cw_QNOpo.js.map} +1 -1
  57. package/dist/web/server/index.js +2 -2
  58. package/dist/web/server/index.js.map +1 -1
  59. package/dist/web/server/manifest.js +17 -17
  60. package/dist/web/server/manifest.js.map +1 -1
  61. package/package.json +1 -1
  62. package/src/server/ws-handlers.ts +6 -4
  63. package/src/tmux/pane.ts +35 -11
  64. package/src/utils/version.ts +1 -1
  65. package/tests/tmux/activity-line.test.ts +47 -0
  66. package/web/.svelte-kit/adapter-bun/.vite/manifest.json +3 -7
  67. package/web/.svelte-kit/adapter-bun/_app/immutable/assets/_layout.6tlxP3iE.css +1 -0
  68. package/web/.svelte-kit/adapter-bun/chunks/button.js +21 -0
  69. package/web/.svelte-kit/adapter-bun/chunks/internal2.js +1 -1
  70. package/web/.svelte-kit/adapter-bun/chunks/ws-handlers.js +45 -15
  71. package/web/.svelte-kit/adapter-bun/chunks/ws-managers.js +1 -1
  72. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/projects/new-session/_server.ts.js +3 -1
  73. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_server.ts.js +1 -1
  74. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/settings/_server.ts.js +1 -1
  75. package/web/.svelte-kit/adapter-bun/entries/pages/_layout.svelte.js +2 -2
  76. package/web/.svelte-kit/adapter-bun/manifest-full.js +1 -1
  77. package/web/.svelte-kit/adapter-bun/manifest.js +1 -1
  78. package/web/.svelte-kit/adapter-bun/nodes/0.js +2 -2
  79. package/web/.svelte-kit/adapter-bun/nodes/1.js +1 -1
  80. package/web/.svelte-kit/adapter-bun/nodes/2.js +1 -1
  81. package/web/.svelte-kit/adapter-bun/nodes/3.js +1 -1
  82. package/web/.svelte-kit/generated/server/internal.js +1 -1
  83. package/web/.svelte-kit/output/client/.vite/manifest.json +60 -60
  84. package/web/.svelte-kit/output/client/_app/immutable/assets/0.CiLJk_Xe.css +1 -0
  85. package/web/.svelte-kit/output/client/_app/immutable/chunks/{DmEI2TOa.js → BPG41LQc.js} +13 -13
  86. package/web/.svelte-kit/output/client/_app/immutable/chunks/BxK27rIF.js +1 -0
  87. package/web/.svelte-kit/output/client/_app/immutable/chunks/DvtCSRbx.js +1 -0
  88. package/web/.svelte-kit/output/client/_app/immutable/chunks/Iym5fv6V.js +2 -0
  89. package/{dist/web/client/_app/immutable/chunks/Cotx9uI_.js → web/.svelte-kit/output/client/_app/immutable/chunks/ZzVAGtsj.js} +1 -1
  90. package/web/.svelte-kit/output/client/_app/immutable/entry/{app.DXHW0aPL.js → app.BrdmX1nT.js} +2 -2
  91. package/web/.svelte-kit/output/client/_app/immutable/entry/start.z3GFCeFl.js +1 -0
  92. package/web/.svelte-kit/output/client/_app/immutable/nodes/{0.DAnv2asW.js → 0.DX7LpCH-.js} +1 -1
  93. package/web/.svelte-kit/output/client/_app/immutable/nodes/{1.CU8f4oNB.js → 1.LA4NLAbZ.js} +1 -1
  94. package/web/.svelte-kit/output/client/_app/immutable/nodes/{2.BYpvCgtu.js → 2.CC3GVyR0.js} +1 -1
  95. package/web/.svelte-kit/output/client/_app/immutable/nodes/{3.DuMzeRg3.js → 3.s97PqS3X.js} +1 -1
  96. package/web/.svelte-kit/output/client/_app/version.json +1 -1
  97. package/web/.svelte-kit/output/server/.vite/manifest.json +3 -7
  98. package/web/.svelte-kit/output/server/_app/immutable/assets/_layout.6tlxP3iE.css +1 -0
  99. package/web/.svelte-kit/output/server/chunks/button.js +21 -0
  100. package/web/.svelte-kit/output/server/chunks/internal2.js +1 -1
  101. package/web/.svelte-kit/output/server/chunks/ws-handlers.js +45 -15
  102. package/web/.svelte-kit/output/server/chunks/ws-managers.js +1 -1
  103. package/web/.svelte-kit/output/server/entries/endpoints/api/projects/new-session/_server.ts.js +3 -1
  104. package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_server.ts.js +1 -1
  105. package/web/.svelte-kit/output/server/entries/endpoints/api/settings/_server.ts.js +1 -1
  106. package/web/.svelte-kit/output/server/entries/pages/_layout.svelte.js +2 -2
  107. package/web/.svelte-kit/output/server/manifest-full.js +1 -1
  108. package/web/.svelte-kit/output/server/manifest.js +1 -1
  109. package/web/.svelte-kit/output/server/nodes/0.js +2 -2
  110. package/web/.svelte-kit/output/server/nodes/1.js +1 -1
  111. package/web/.svelte-kit/output/server/nodes/2.js +1 -1
  112. package/web/.svelte-kit/output/server/nodes/3.js +1 -1
  113. package/web/src/lib/actions/longPress.ts +52 -6
  114. package/web/src/lib/components/AllSessionsPanel.svelte +12 -3
  115. package/web/src/lib/stores/websocket-base.svelte.ts +24 -1
  116. package/web/src/routes/api/projects/new-session/+server.ts +3 -0
  117. package/dist/web/client/_app/immutable/assets/0.DwaaTdPO.css +0 -1
  118. package/dist/web/client/_app/immutable/chunks/1pIWnoD_.js +0 -1
  119. package/dist/web/client/_app/immutable/chunks/DfoR1zCV.js +0 -1
  120. package/dist/web/client/_app/immutable/chunks/DtVU-s3j.js +0 -2
  121. package/dist/web/client/_app/immutable/entry/start.CchjowOg.js +0 -1
  122. package/dist/web/server/chunks/_server.ts-CNU4yPZZ.js.map +0 -1
  123. package/dist/web/server/chunks/geometry-CUMMOI9q.js +0 -46
  124. package/dist/web/server/chunks/geometry-CUMMOI9q.js.map +0 -1
  125. package/dist/web/server/chunks/ws-handlers-BQ2RtlNl.js.map +0 -1
  126. package/web/.svelte-kit/adapter-bun/_app/immutable/assets/_layout.Bpy37C6o.css +0 -1
  127. package/web/.svelte-kit/adapter-bun/chunks/geometry.js +0 -32
  128. package/web/.svelte-kit/output/client/_app/immutable/assets/0.DwaaTdPO.css +0 -1
  129. package/web/.svelte-kit/output/client/_app/immutable/chunks/1pIWnoD_.js +0 -1
  130. package/web/.svelte-kit/output/client/_app/immutable/chunks/DfoR1zCV.js +0 -1
  131. package/web/.svelte-kit/output/client/_app/immutable/chunks/DtVU-s3j.js +0 -2
  132. package/web/.svelte-kit/output/client/_app/immutable/entry/start.CchjowOg.js +0 -1
  133. package/web/.svelte-kit/output/server/_app/immutable/assets/_layout.Bpy37C6o.css +0 -1
  134. package/web/.svelte-kit/output/server/chunks/geometry.js +0 -32
@@ -1,7 +1,7 @@
1
1
  import "./root-CpxFdOD_.js";
2
2
  import { z as head } from "./chunks-DjkFKU0Z.js";
3
3
  import "./state.svelte-DaxvD0LT.js";
4
- import "./button-C1GVS_oY.js";
4
+ import "./button-svhFQKMs.js";
5
5
  //#region .svelte-kit/adapter-bun/entries/pages/_page.svelte.js
6
6
  function _page($$renderer, $$props) {
7
7
  $$renderer.component(($$renderer2) => {
@@ -17,4 +17,4 @@ function _page($$renderer, $$props) {
17
17
  //#endregion
18
18
  export { _page as default };
19
19
 
20
- //# sourceMappingURL=_page.svelte-_F3qltju.js.map
20
+ //# sourceMappingURL=_page.svelte-DkZsH6VV.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_page.svelte-_F3qltju.js","names":[],"sources":["../../../../web/.svelte-kit/adapter-bun/entries/pages/_page.svelte.js"],"sourcesContent":["import { t as head } from \"../../chunks/index.js\";\nimport \"@sveltejs/kit/internal\";\nimport \"../../chunks/exports.js\";\nimport \"../../chunks/utils2.js\";\nimport \"@sveltejs/kit/internal/server\";\nimport \"../../chunks/root.js\";\nimport \"../../chunks/state.svelte.js\";\nimport \"../../chunks/button.js\";\nimport \"clsx\";\n/* empty css */\nfunction _page($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n head(\"1uha8ag\", $$renderer2, ($$renderer3) => {\n $$renderer3.title(($$renderer4) => {\n $$renderer4.push(`<title>claude-mux</title>`);\n });\n });\n {\n $$renderer2.push(\"<!--[-1-->\");\n }\n $$renderer2.push(`<!--]-->`);\n });\n}\nexport {\n _page as default\n};\n"],"mappings":";;;;;AAUA,SAAS,MAAM,YAAY,SAAS;CAClC,WAAW,WAAW,gBAAgB;EACpC,KAAK,WAAW,cAAc,gBAAgB;GAC5C,YAAY,OAAO,gBAAgB;IACjC,YAAY,KAAK,2BAA2B;GAC9C,CAAC;EACH,CAAC;EAEC,YAAY,KAAK,YAAY;EAE/B,YAAY,KAAK,UAAU;CAC7B,CAAC;AACH"}
1
+ {"version":3,"file":"_page.svelte-DkZsH6VV.js","names":[],"sources":["../../../../web/.svelte-kit/adapter-bun/entries/pages/_page.svelte.js"],"sourcesContent":["import { t as head } from \"../../chunks/index.js\";\nimport \"@sveltejs/kit/internal\";\nimport \"../../chunks/exports.js\";\nimport \"../../chunks/utils2.js\";\nimport \"@sveltejs/kit/internal/server\";\nimport \"../../chunks/root.js\";\nimport \"../../chunks/state.svelte.js\";\nimport \"../../chunks/button.js\";\nimport \"clsx\";\n/* empty css */\nfunction _page($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n head(\"1uha8ag\", $$renderer2, ($$renderer3) => {\n $$renderer3.title(($$renderer4) => {\n $$renderer4.push(`<title>claude-mux</title>`);\n });\n });\n {\n $$renderer2.push(\"<!--[-1-->\");\n }\n $$renderer2.push(`<!--]-->`);\n });\n}\nexport {\n _page as default\n};\n"],"mappings":";;;;;AAUA,SAAS,MAAM,YAAY,SAAS;CAClC,WAAW,WAAW,gBAAgB;EACpC,KAAK,WAAW,cAAc,gBAAgB;GAC5C,YAAY,OAAO,gBAAgB;IACjC,YAAY,KAAK,2BAA2B;GAC9C,CAAC;EACH,CAAC;EAEC,YAAY,KAAK,YAAY;EAE/B,YAAY,KAAK,UAAU;CAC7B,CAAC;AACH"}
@@ -1,6 +1,6 @@
1
1
  import { r as json } from "./exports-piA4c_uA.js";
2
- import { f as updateSettings, o as getSettings } from "./ws-handlers-BQ2RtlNl.js";
3
- import { t as broadcastSessions } from "./ws-managers-DLQiiQnX.js";
2
+ import { o as getSettings, p as updateSettings } from "./ws-handlers-DmdbIqkc.js";
3
+ import { t as broadcastSessions } from "./ws-managers-Cw_QNOpo.js";
4
4
  //#region .svelte-kit/adapter-bun/entries/endpoints/api/settings/_server.ts.js
5
5
  const GET = async () => {
6
6
  return json({ settings: getSettings() });
@@ -24,4 +24,4 @@ const POST = async ({ request }) => {
24
24
  //#endregion
25
25
  export { GET, POST };
26
26
 
27
- //# sourceMappingURL=_server.ts-C6MJsvPN.js.map
27
+ //# sourceMappingURL=_server.ts-BLpwF6cO.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_server.ts-C6MJsvPN.js","names":[],"sources":["../../../../web/.svelte-kit/adapter-bun/entries/endpoints/api/settings/_server.ts.js"],"sourcesContent":["import { json } from \"@sveltejs/kit\";\nimport { c as getSettings, u as updateSettings } from \"../../../../chunks/ws-handlers.js\";\nimport { b as broadcastSessions } from \"../../../../chunks/ws-managers.js\";\nconst GET = async () => {\n return json({ settings: getSettings() });\n};\nconst POST = async ({ request }) => {\n let body;\n try {\n body = await request.json();\n } catch {\n return json({ error: \"Invalid JSON\" }, { status: 400 });\n }\n const patch = {};\n if (typeof body.autoRemoteControl === \"boolean\") patch.autoRemoteControl = body.autoRemoteControl;\n const settings = updateSettings(patch);\n broadcastSessions();\n return json({ ok: true, settings });\n};\nexport {\n GET,\n POST\n};\n"],"mappings":";;;;AAGA,MAAM,MAAM,YAAY;CACtB,OAAO,KAAK,EAAE,UAAU,YAAY,EAAE,CAAC;AACzC;AACA,MAAM,OAAO,OAAO,EAAE,cAAc;CAClC,IAAI;CACJ,IAAI;EACF,OAAO,MAAM,QAAQ,KAAK;CAC5B,QAAQ;EACN,OAAO,KAAK,EAAE,OAAO,eAAe,GAAG,EAAE,QAAQ,IAAI,CAAC;CACxD;CACA,MAAM,QAAQ,CAAC;CACf,IAAI,OAAO,KAAK,sBAAsB,WAAW,MAAM,oBAAoB,KAAK;CAChF,MAAM,WAAW,eAAe,KAAK;CACrC,kBAAkB;CAClB,OAAO,KAAK;EAAE,IAAI;EAAM;CAAS,CAAC;AACpC"}
1
+ {"version":3,"file":"_server.ts-BLpwF6cO.js","names":[],"sources":["../../../../web/.svelte-kit/adapter-bun/entries/endpoints/api/settings/_server.ts.js"],"sourcesContent":["import { json } from \"@sveltejs/kit\";\nimport { d as getSettings, u as updateSettings } from \"../../../../chunks/ws-handlers.js\";\nimport { b as broadcastSessions } from \"../../../../chunks/ws-managers.js\";\nconst GET = async () => {\n return json({ settings: getSettings() });\n};\nconst POST = async ({ request }) => {\n let body;\n try {\n body = await request.json();\n } catch {\n return json({ error: \"Invalid JSON\" }, { status: 400 });\n }\n const patch = {};\n if (typeof body.autoRemoteControl === \"boolean\") patch.autoRemoteControl = body.autoRemoteControl;\n const settings = updateSettings(patch);\n broadcastSessions();\n return json({ ok: true, settings });\n};\nexport {\n GET,\n POST\n};\n"],"mappings":";;;;AAGA,MAAM,MAAM,YAAY;CACtB,OAAO,KAAK,EAAE,UAAU,YAAY,EAAE,CAAC;AACzC;AACA,MAAM,OAAO,OAAO,EAAE,cAAc;CAClC,IAAI;CACJ,IAAI;EACF,OAAO,MAAM,QAAQ,KAAK;CAC5B,QAAQ;EACN,OAAO,KAAK,EAAE,OAAO,eAAe,GAAG,EAAE,QAAQ,IAAI,CAAC;CACxD;CACA,MAAM,QAAQ,CAAC;CACf,IAAI,OAAO,KAAK,sBAAsB,WAAW,MAAM,oBAAoB,KAAK;CAChF,MAAM,WAAW,eAAe,KAAK;CACrC,kBAAkB;CAClB,OAAO,KAAK;EAAE,IAAI;EAAM;CAAS,CAAC;AACpC"}
@@ -1,6 +1,6 @@
1
1
  import { r as json } from "./exports-piA4c_uA.js";
2
- import { a as getSavedProjects, d as saveProject, l as removeProject } from "./ws-handlers-BQ2RtlNl.js";
3
- import { t as broadcastSessions } from "./ws-managers-DLQiiQnX.js";
2
+ import { a as getSavedProjects, d as saveProject, l as removeProject } from "./ws-handlers-DmdbIqkc.js";
3
+ import { t as broadcastSessions } from "./ws-managers-Cw_QNOpo.js";
4
4
  //#region .svelte-kit/adapter-bun/entries/endpoints/api/projects/_server.ts.js
5
5
  const GET = async () => {
6
6
  return json({ projects: getSavedProjects() });
@@ -34,4 +34,4 @@ const DELETE = async ({ request }) => {
34
34
  //#endregion
35
35
  export { DELETE, GET, POST };
36
36
 
37
- //# sourceMappingURL=_server.ts-fnuGtMqr.js.map
37
+ //# sourceMappingURL=_server.ts-BceRCUNN.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_server.ts-fnuGtMqr.js","names":[],"sources":["../../../../web/.svelte-kit/adapter-bun/entries/endpoints/api/projects/_server.ts.js"],"sourcesContent":["import { json } from \"@sveltejs/kit\";\nimport { a as removeProject, g as getSavedProjects, s as saveProject } from \"../../../../chunks/ws-handlers.js\";\nimport { b as broadcastSessions } from \"../../../../chunks/ws-managers.js\";\nconst GET = async () => {\n return json({ projects: getSavedProjects() });\n};\nasync function readCwd(request) {\n try {\n const body = await request.json();\n return typeof body.cwd === \"string\" && body.cwd.startsWith(\"/\") ? body.cwd : null;\n } catch {\n return null;\n }\n}\nconst POST = async ({ request }) => {\n const cwd = await readCwd(request);\n if (!cwd) return json({ error: \"cwd must be an absolute path\" }, { status: 400 });\n if (saveProject(cwd)) broadcastSessions();\n return json({ ok: true, projects: getSavedProjects() });\n};\nconst DELETE = async ({ request }) => {\n const cwd = await readCwd(request);\n if (!cwd) return json({ error: \"cwd must be an absolute path\" }, { status: 400 });\n if (removeProject(cwd)) broadcastSessions();\n return json({ ok: true, projects: getSavedProjects() });\n};\nexport {\n DELETE,\n GET,\n POST\n};\n"],"mappings":";;;;AAGA,MAAM,MAAM,YAAY;CACtB,OAAO,KAAK,EAAE,UAAU,iBAAiB,EAAE,CAAC;AAC9C;AACA,eAAe,QAAQ,SAAS;CAC9B,IAAI;EACF,MAAM,OAAO,MAAM,QAAQ,KAAK;EAChC,OAAO,OAAO,KAAK,QAAQ,YAAY,KAAK,IAAI,WAAW,GAAG,IAAI,KAAK,MAAM;CAC/E,QAAQ;EACN,OAAO;CACT;AACF;AACA,MAAM,OAAO,OAAO,EAAE,cAAc;CAClC,MAAM,MAAM,MAAM,QAAQ,OAAO;CACjC,IAAI,CAAC,KAAK,OAAO,KAAK,EAAE,OAAO,+BAA+B,GAAG,EAAE,QAAQ,IAAI,CAAC;CAChF,IAAI,YAAY,GAAG,GAAG,kBAAkB;CACxC,OAAO,KAAK;EAAE,IAAI;EAAM,UAAU,iBAAiB;CAAE,CAAC;AACxD;AACA,MAAM,SAAS,OAAO,EAAE,cAAc;CACpC,MAAM,MAAM,MAAM,QAAQ,OAAO;CACjC,IAAI,CAAC,KAAK,OAAO,KAAK,EAAE,OAAO,+BAA+B,GAAG,EAAE,QAAQ,IAAI,CAAC;CAChF,IAAI,cAAc,GAAG,GAAG,kBAAkB;CAC1C,OAAO,KAAK;EAAE,IAAI;EAAM,UAAU,iBAAiB;CAAE,CAAC;AACxD"}
1
+ {"version":3,"file":"_server.ts-BceRCUNN.js","names":[],"sources":["../../../../web/.svelte-kit/adapter-bun/entries/endpoints/api/projects/_server.ts.js"],"sourcesContent":["import { json } from \"@sveltejs/kit\";\nimport { a as removeProject, g as getSavedProjects, s as saveProject } from \"../../../../chunks/ws-handlers.js\";\nimport { b as broadcastSessions } from \"../../../../chunks/ws-managers.js\";\nconst GET = async () => {\n return json({ projects: getSavedProjects() });\n};\nasync function readCwd(request) {\n try {\n const body = await request.json();\n return typeof body.cwd === \"string\" && body.cwd.startsWith(\"/\") ? body.cwd : null;\n } catch {\n return null;\n }\n}\nconst POST = async ({ request }) => {\n const cwd = await readCwd(request);\n if (!cwd) return json({ error: \"cwd must be an absolute path\" }, { status: 400 });\n if (saveProject(cwd)) broadcastSessions();\n return json({ ok: true, projects: getSavedProjects() });\n};\nconst DELETE = async ({ request }) => {\n const cwd = await readCwd(request);\n if (!cwd) return json({ error: \"cwd must be an absolute path\" }, { status: 400 });\n if (removeProject(cwd)) broadcastSessions();\n return json({ ok: true, projects: getSavedProjects() });\n};\nexport {\n DELETE,\n GET,\n POST\n};\n"],"mappings":";;;;AAGA,MAAM,MAAM,YAAY;CACtB,OAAO,KAAK,EAAE,UAAU,iBAAiB,EAAE,CAAC;AAC9C;AACA,eAAe,QAAQ,SAAS;CAC9B,IAAI;EACF,MAAM,OAAO,MAAM,QAAQ,KAAK;EAChC,OAAO,OAAO,KAAK,QAAQ,YAAY,KAAK,IAAI,WAAW,GAAG,IAAI,KAAK,MAAM;CAC/E,QAAQ;EACN,OAAO;CACT;AACF;AACA,MAAM,OAAO,OAAO,EAAE,cAAc;CAClC,MAAM,MAAM,MAAM,QAAQ,OAAO;CACjC,IAAI,CAAC,KAAK,OAAO,KAAK,EAAE,OAAO,+BAA+B,GAAG,EAAE,QAAQ,IAAI,CAAC;CAChF,IAAI,YAAY,GAAG,GAAG,kBAAkB;CACxC,OAAO,KAAK;EAAE,IAAI;EAAM,UAAU,iBAAiB;CAAE,CAAC;AACxD;AACA,MAAM,SAAS,OAAO,EAAE,cAAc;CACpC,MAAM,MAAM,MAAM,QAAQ,OAAO;CACjC,IAAI,CAAC,KAAK,OAAO,KAAK,EAAE,OAAO,+BAA+B,GAAG,EAAE,QAAQ,IAAI,CAAC;CAChF,IAAI,cAAc,GAAG,GAAG,kBAAkB;CAC1C,OAAO,KAAK;EAAE,IAAI;EAAM,UAAU,iBAAiB;CAAE,CAAC;AACxD"}
@@ -1,5 +1,5 @@
1
1
  import { r as json } from "./exports-piA4c_uA.js";
2
- import { i as getEnrichedSessionsAsync } from "./ws-handlers-BQ2RtlNl.js";
2
+ import { i as getEnrichedSessionsAsync } from "./ws-handlers-DmdbIqkc.js";
3
3
  //#region .svelte-kit/adapter-bun/entries/endpoints/api/sessions/_server.ts.js
4
4
  const GET = async () => {
5
5
  try {
@@ -16,4 +16,4 @@ const GET = async () => {
16
16
  //#endregion
17
17
  export { GET };
18
18
 
19
- //# sourceMappingURL=_server.ts-Df32fD_Q.js.map
19
+ //# sourceMappingURL=_server.ts-DLwZHSdd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_server.ts-Df32fD_Q.js","names":[],"sources":["../../../../web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_server.ts.js"],"sourcesContent":["import { json } from \"@sveltejs/kit\";\nimport { b as getEnrichedSessionsAsync } from \"../../../../chunks/ws-handlers.js\";\nconst GET = async () => {\n try {\n const sessions = await getEnrichedSessionsAsync();\n return json({\n sessions,\n count: sessions.length,\n timestamp: Date.now()\n });\n } catch {\n return json({ error: \"Error reading sessions\" }, { status: 500 });\n }\n};\nexport {\n GET\n};\n"],"mappings":";;;AAEA,MAAM,MAAM,YAAY;CACtB,IAAI;EACF,MAAM,WAAW,MAAM,yBAAyB;EAChD,OAAO,KAAK;GACV;GACA,OAAO,SAAS;GAChB,WAAW,KAAK,IAAI;EACtB,CAAC;CACH,QAAQ;EACN,OAAO,KAAK,EAAE,OAAO,yBAAyB,GAAG,EAAE,QAAQ,IAAI,CAAC;CAClE;AACF"}
1
+ {"version":3,"file":"_server.ts-DLwZHSdd.js","names":[],"sources":["../../../../web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_server.ts.js"],"sourcesContent":["import { json } from \"@sveltejs/kit\";\nimport { c as getEnrichedSessionsAsync } from \"../../../../chunks/ws-handlers.js\";\nconst GET = async () => {\n try {\n const sessions = await getEnrichedSessionsAsync();\n return json({\n sessions,\n count: sessions.length,\n timestamp: Date.now()\n });\n } catch {\n return json({ error: \"Error reading sessions\" }, { status: 500 });\n }\n};\nexport {\n GET\n};\n"],"mappings":";;;AAEA,MAAM,MAAM,YAAY;CACtB,IAAI;EACF,MAAM,WAAW,MAAM,yBAAyB;EAChD,OAAO,KAAK;GACV;GACA,OAAO,SAAS;GAChB,WAAW,KAAK,IAAI;EACtB,CAAC;CACH,QAAQ;EACN,OAAO,KAAK,EAAE,OAAO,yBAAyB,GAAG,EAAE,QAAQ,IAAI,CAAC;CAClE;AACF"}
@@ -1,6 +1,7 @@
1
1
  import { r as json } from "./exports-piA4c_uA.js";
2
2
  import { f as upsertSession } from "./sessions-json-BVFqIpMt.js";
3
- import { t as sizeArgsForNewSession } from "./geometry-CUMMOI9q.js";
3
+ import { f as sizeArgsForNewSession } from "./ws-handlers-DmdbIqkc.js";
4
+ import { t as broadcastSessions } from "./ws-managers-Cw_QNOpo.js";
4
5
  import { r as parseAgent, t as AGENTS } from "./agents-21cPpmjY.js";
5
6
  import { homedir } from "os";
6
7
  import { existsSync, readFileSync, statSync, writeFileSync } from "fs";
@@ -74,6 +75,7 @@ const POST = async ({ request }) => {
74
75
  state: "idle",
75
76
  agent: selectedAgent
76
77
  });
78
+ broadcastSessions();
77
79
  return json({
78
80
  ok: true,
79
81
  session: sessionName,
@@ -93,4 +95,4 @@ const POST = async ({ request }) => {
93
95
  //#endregion
94
96
  export { POST };
95
97
 
96
- //# sourceMappingURL=_server.ts-CNU4yPZZ.js.map
98
+ //# sourceMappingURL=_server.ts-IZp35sUH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_server.ts-IZp35sUH.js","names":[],"sources":["../../../../web/.svelte-kit/adapter-bun/entries/endpoints/api/projects/new-session/_server.ts.js"],"sourcesContent":["import { json } from \"@sveltejs/kit\";\nimport { existsSync, statSync, readFileSync, writeFileSync } from \"fs\";\nimport { execFileSync } from \"child_process\";\nimport { u as upsertSession } from \"../../../../../chunks/sessions-json.js\";\nimport { basename, join } from \"path\";\nimport { homedir } from \"os\";\nimport { p as parseAgent, A as AGENTS } from \"../../../../../chunks/agents.js\";\nimport { b as sizeArgsForNewSession } from \"../../../../../chunks/ws-handlers.js\";\nimport { b as broadcastSessions } from \"../../../../../chunks/ws-managers.js\";\nfunction projectSlug(cwd, fallback) {\n return basename(cwd).replace(/[^A-Za-z0-9_-]/g, \"_\") || fallback;\n}\nfunction ensureWorkspaceTrusted(cwd) {\n const claudeJsonPath = join(homedir(), \".claude.json\");\n try {\n const data = existsSync(claudeJsonPath) ? JSON.parse(readFileSync(claudeJsonPath, \"utf-8\")) : {};\n if (!data.projects) data.projects = {};\n if (!data.projects[cwd]) data.projects[cwd] = {};\n if (!data.projects[cwd].hasTrustDialogAccepted) {\n data.projects[cwd].hasTrustDialogAccepted = true;\n writeFileSync(claudeJsonPath, JSON.stringify(data, null, 2));\n }\n } catch (err) {\n console.error(\"[new-session] Failed to pre-trust workspace:\", err);\n }\n}\nconst POST = async ({ request }) => {\n const { cwd, agent } = await request.json();\n if (!cwd) {\n return json({ error: \"cwd required\" }, { status: 400 });\n }\n const selectedAgent = parseAgent(agent);\n if (!existsSync(cwd)) {\n return json({ error: \"Folder does not exist\" }, { status: 400 });\n }\n const stat = statSync(cwd);\n if (!stat.isDirectory()) {\n return json({ error: \"Path is not a directory\" }, { status: 400 });\n }\n try {\n ensureWorkspaceTrusted(cwd);\n const sessionName = `${projectSlug(cwd, selectedAgent)}-${selectedAgent}-${Date.now()}`;\n const { TMUX: _tmux, TMUX_PANE: _pane, ...tmuxEnv } = process.env;\n execFileSync(\"tmux\", [\n \"new-session\",\n \"-d\",\n \"-s\",\n sessionName,\n \"-c\",\n cwd,\n // Detached, the window would be 80x24; the dashboard reads dialogs\n // off the screen and wants them unwrapped (see tmux/geometry).\n ...sizeArgsForNewSession(),\n \"--\",\n \"env\",\n \"-u\",\n \"CLAUDECODE\",\n ...AGENTS[selectedAgent].argv\n ], {\n stdio: \"ignore\",\n env: tmuxEnv\n });\n const baseIndex = execFileSync(\"tmux\", [\"show-option\", \"-gv\", \"base-index\"], {\n encoding: \"utf-8\",\n env: tmuxEnv\n }).trim() || \"0\";\n const paneBaseIndex = execFileSync(\"tmux\", [\"show-option\", \"-gv\", \"pane-base-index\"], {\n encoding: \"utf-8\",\n env: tmuxEnv\n }).trim() || \"0\";\n const tmuxTarget = `${sessionName}:${baseIndex}.${paneBaseIndex}`;\n const record = upsertSession({\n id: crypto.randomUUID(),\n pid: 0,\n cwd,\n tmux_target: tmuxTarget,\n state: \"idle\",\n agent: selectedAgent\n });\n broadcastSessions();\n return json({ ok: true, session: sessionName, tmuxTarget, agent: selectedAgent, record });\n } catch (err) {\n const detail = err instanceof Error ? err.message : String(err);\n console.error(\"[new-session] Failed to create session:\", detail);\n return json({ error: \"Failed to create session\", detail }, { status: 500 });\n }\n};\nexport {\n POST\n};\n"],"mappings":";;;;;;;;;;AASA,SAAS,YAAY,KAAK,UAAU;CAClC,OAAO,SAAS,GAAG,CAAC,CAAC,QAAQ,mBAAmB,GAAG,KAAK;AAC1D;AACA,SAAS,uBAAuB,KAAK;CACnC,MAAM,iBAAiB,KAAK,QAAQ,GAAG,cAAc;CACrD,IAAI;EACF,MAAM,OAAO,WAAW,cAAc,IAAI,KAAK,MAAM,aAAa,gBAAgB,OAAO,CAAC,IAAI,CAAC;EAC/F,IAAI,CAAC,KAAK,UAAU,KAAK,WAAW,CAAC;EACrC,IAAI,CAAC,KAAK,SAAS,MAAM,KAAK,SAAS,OAAO,CAAC;EAC/C,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,wBAAwB;GAC9C,KAAK,SAAS,IAAI,CAAC,yBAAyB;GAC5C,cAAc,gBAAgB,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;EAC7D;CACF,SAAS,KAAK;EACZ,QAAQ,MAAM,gDAAgD,GAAG;CACnE;AACF;AACA,MAAM,OAAO,OAAO,EAAE,cAAc;CAClC,MAAM,EAAE,KAAK,UAAU,MAAM,QAAQ,KAAK;CAC1C,IAAI,CAAC,KACH,OAAO,KAAK,EAAE,OAAO,eAAe,GAAG,EAAE,QAAQ,IAAI,CAAC;CAExD,MAAM,gBAAgB,WAAW,KAAK;CACtC,IAAI,CAAC,WAAW,GAAG,GACjB,OAAO,KAAK,EAAE,OAAO,wBAAwB,GAAG,EAAE,QAAQ,IAAI,CAAC;CAGjE,IAAI,CADS,SAAS,GACd,CAAC,CAAC,YAAY,GACpB,OAAO,KAAK,EAAE,OAAO,0BAA0B,GAAG,EAAE,QAAQ,IAAI,CAAC;CAEnE,IAAI;EACF,uBAAuB,GAAG;EAC1B,MAAM,cAAc,GAAG,YAAY,KAAK,aAAa,EAAE,GAAG,cAAc,GAAG,KAAK,IAAI;EACpF,MAAM,EAAE,MAAM,OAAO,WAAW,OAAO,GAAG,YAAY,QAAQ;EAC9D,aAAa,QAAQ;GACnB;GACA;GACA;GACA;GACA;GACA;GAGA,GAAG,sBAAsB;GACzB;GACA;GACA;GACA;GACA,GAAG,OAAO,cAAc,CAAC;EAC3B,GAAG;GACD,OAAO;GACP,KAAK;EACP,CAAC;EASD,MAAM,aAAa,GAAG,YAAY,GARhB,aAAa,QAAQ;GAAC;GAAe;GAAO;EAAY,GAAG;GAC3E,UAAU;GACV,KAAK;EACP,CAAC,CAAC,CAAC,KAAK,KAAK,IAKkC,GAJzB,aAAa,QAAQ;GAAC;GAAe;GAAO;EAAiB,GAAG;GACpF,UAAU;GACV,KAAK;EACP,CAAC,CAAC,CAAC,KAAK,KAAK;EAEb,MAAM,SAAS,cAAc;GAC3B,IAAI,OAAO,WAAW;GACtB,KAAK;GACL;GACA,aAAa;GACb,OAAO;GACP,OAAO;EACT,CAAC;EACD,kBAAkB;EAClB,OAAO,KAAK;GAAE,IAAI;GAAM,SAAS;GAAa;GAAY,OAAO;GAAe;EAAO,CAAC;CAC1F,SAAS,KAAK;EACZ,MAAM,SAAS,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;EAC9D,QAAQ,MAAM,2CAA2C,MAAM;EAC/D,OAAO,KAAK;GAAE,OAAO;GAA4B;EAAO,GAAG,EAAE,QAAQ,IAAI,CAAC;CAC5E;AACF"}
@@ -1,6 +1,6 @@
1
1
  import { r as json } from "./exports-piA4c_uA.js";
2
2
  import { n as deleteSession } from "./sessions-json-BVFqIpMt.js";
3
- import { t as broadcastSessions } from "./ws-managers-DLQiiQnX.js";
3
+ import { t as broadcastSessions } from "./ws-managers-Cw_QNOpo.js";
4
4
  import { execFileSync } from "child_process";
5
5
  //#region .svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/restart/_server.ts.js
6
6
  const POST = async ({ params, request }) => {
@@ -39,4 +39,4 @@ const POST = async ({ params, request }) => {
39
39
  //#endregion
40
40
  export { POST };
41
41
 
42
- //# sourceMappingURL=_server.ts-CtsPyICr.js.map
42
+ //# sourceMappingURL=_server.ts-ilTVJ4A9.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_server.ts-CtsPyICr.js","names":[],"sources":["../../../../web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/restart/_server.ts.js"],"sourcesContent":["import { json } from \"@sveltejs/kit\";\nimport { execFileSync } from \"child_process\";\nimport { d as deleteSession } from \"../../../../../../chunks/sessions-json.js\";\nimport { b as broadcastSessions } from \"../../../../../../chunks/ws-managers.js\";\nconst POST = async ({ params, request }) => {\n const id = decodeURIComponent(params.id);\n const body = await request.json().catch(() => ({}));\n const { pid, tmux_target, cwd } = body;\n if (!tmux_target || typeof tmux_target !== \"string\") {\n return json({ error: \"tmux_target required\" }, { status: 400 });\n }\n if (!cwd || typeof cwd !== \"string\") {\n return json({ error: \"cwd required\" }, { status: 400 });\n }\n try {\n if (typeof pid === \"number\" && pid > 0 && Number.isInteger(pid)) {\n try {\n execFileSync(\"kill\", [\"-9\", String(pid)], { stdio: \"ignore\" });\n } catch {\n }\n }\n try {\n deleteSession(id);\n } catch {\n }\n broadcastSessions();\n await new Promise((resolve) => setTimeout(resolve, 300));\n execFileSync(\"tmux\", [\"send-keys\", \"-t\", tmux_target, \"C-c\"], {\n stdio: \"ignore\"\n });\n await new Promise((resolve) => setTimeout(resolve, 100));\n execFileSync(\"tmux\", [\"send-keys\", \"-t\", tmux_target, `cd \"${cwd}\" && claude --dangerously-skip-permissions`, \"Enter\"], {\n stdio: \"ignore\"\n });\n return json({ ok: true });\n } catch (err) {\n return json({ error: \"Failed to restart session\" }, { status: 500 });\n }\n};\nexport {\n POST\n};\n"],"mappings":";;;;;AAIA,MAAM,OAAO,OAAO,EAAE,QAAQ,cAAc;CAC1C,MAAM,KAAK,mBAAmB,OAAO,EAAE;CAEvC,MAAM,EAAE,KAAK,aAAa,QAAQ,MADf,QAAQ,KAAK,CAAC,CAAC,aAAa,CAAC,EAAE;CAElD,IAAI,CAAC,eAAe,OAAO,gBAAgB,UACzC,OAAO,KAAK,EAAE,OAAO,uBAAuB,GAAG,EAAE,QAAQ,IAAI,CAAC;CAEhE,IAAI,CAAC,OAAO,OAAO,QAAQ,UACzB,OAAO,KAAK,EAAE,OAAO,eAAe,GAAG,EAAE,QAAQ,IAAI,CAAC;CAExD,IAAI;EACF,IAAI,OAAO,QAAQ,YAAY,MAAM,KAAK,OAAO,UAAU,GAAG,GAC5D,IAAI;GACF,aAAa,QAAQ,CAAC,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,OAAO,SAAS,CAAC;EAC/D,QAAQ,CACR;EAEF,IAAI;GACF,cAAc,EAAE;EAClB,QAAQ,CACR;EACA,kBAAkB;EAClB,MAAM,IAAI,SAAS,YAAY,WAAW,SAAS,GAAG,CAAC;EACvD,aAAa,QAAQ;GAAC;GAAa;GAAM;GAAa;EAAK,GAAG,EAC5D,OAAO,SACT,CAAC;EACD,MAAM,IAAI,SAAS,YAAY,WAAW,SAAS,GAAG,CAAC;EACvD,aAAa,QAAQ;GAAC;GAAa;GAAM;GAAa,OAAO,IAAI;GAA6C;EAAO,GAAG,EACtH,OAAO,SACT,CAAC;EACD,OAAO,KAAK,EAAE,IAAI,KAAK,CAAC;CAC1B,SAAS,KAAK;EACZ,OAAO,KAAK,EAAE,OAAO,4BAA4B,GAAG,EAAE,QAAQ,IAAI,CAAC;CACrE;AACF"}
1
+ {"version":3,"file":"_server.ts-ilTVJ4A9.js","names":[],"sources":["../../../../web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/restart/_server.ts.js"],"sourcesContent":["import { json } from \"@sveltejs/kit\";\nimport { execFileSync } from \"child_process\";\nimport { d as deleteSession } from \"../../../../../../chunks/sessions-json.js\";\nimport { b as broadcastSessions } from \"../../../../../../chunks/ws-managers.js\";\nconst POST = async ({ params, request }) => {\n const id = decodeURIComponent(params.id);\n const body = await request.json().catch(() => ({}));\n const { pid, tmux_target, cwd } = body;\n if (!tmux_target || typeof tmux_target !== \"string\") {\n return json({ error: \"tmux_target required\" }, { status: 400 });\n }\n if (!cwd || typeof cwd !== \"string\") {\n return json({ error: \"cwd required\" }, { status: 400 });\n }\n try {\n if (typeof pid === \"number\" && pid > 0 && Number.isInteger(pid)) {\n try {\n execFileSync(\"kill\", [\"-9\", String(pid)], { stdio: \"ignore\" });\n } catch {\n }\n }\n try {\n deleteSession(id);\n } catch {\n }\n broadcastSessions();\n await new Promise((resolve) => setTimeout(resolve, 300));\n execFileSync(\"tmux\", [\"send-keys\", \"-t\", tmux_target, \"C-c\"], {\n stdio: \"ignore\"\n });\n await new Promise((resolve) => setTimeout(resolve, 100));\n execFileSync(\"tmux\", [\"send-keys\", \"-t\", tmux_target, `cd \"${cwd}\" && claude --dangerously-skip-permissions`, \"Enter\"], {\n stdio: \"ignore\"\n });\n return json({ ok: true });\n } catch (err) {\n return json({ error: \"Failed to restart session\" }, { status: 500 });\n }\n};\nexport {\n POST\n};\n"],"mappings":";;;;;AAIA,MAAM,OAAO,OAAO,EAAE,QAAQ,cAAc;CAC1C,MAAM,KAAK,mBAAmB,OAAO,EAAE;CAEvC,MAAM,EAAE,KAAK,aAAa,QAAQ,MADf,QAAQ,KAAK,CAAC,CAAC,aAAa,CAAC,EAAE;CAElD,IAAI,CAAC,eAAe,OAAO,gBAAgB,UACzC,OAAO,KAAK,EAAE,OAAO,uBAAuB,GAAG,EAAE,QAAQ,IAAI,CAAC;CAEhE,IAAI,CAAC,OAAO,OAAO,QAAQ,UACzB,OAAO,KAAK,EAAE,OAAO,eAAe,GAAG,EAAE,QAAQ,IAAI,CAAC;CAExD,IAAI;EACF,IAAI,OAAO,QAAQ,YAAY,MAAM,KAAK,OAAO,UAAU,GAAG,GAC5D,IAAI;GACF,aAAa,QAAQ,CAAC,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,OAAO,SAAS,CAAC;EAC/D,QAAQ,CACR;EAEF,IAAI;GACF,cAAc,EAAE;EAClB,QAAQ,CACR;EACA,kBAAkB;EAClB,MAAM,IAAI,SAAS,YAAY,WAAW,SAAS,GAAG,CAAC;EACvD,aAAa,QAAQ;GAAC;GAAa;GAAM;GAAa;EAAK,GAAG,EAC5D,OAAO,SACT,CAAC;EACD,MAAM,IAAI,SAAS,YAAY,WAAW,SAAS,GAAG,CAAC;EACvD,aAAa,QAAQ;GAAC;GAAa;GAAM;GAAa,OAAO,IAAI;GAA6C;EAAO,GAAG,EACtH,OAAO,SACT,CAAC;EACD,OAAO,KAAK,EAAE,IAAI,KAAK,CAAC;CAC1B,SAAS,KAAK;EACZ,OAAO,KAAK,EAAE,OAAO,4BAA4B,GAAG,EAAE,QAAQ,IAAI,CAAC;CACrE;AACF"}
@@ -1,7 +1,7 @@
1
1
  import { r as json } from "./exports-piA4c_uA.js";
2
2
  import { d as updateSession, i as getSession, u as sanitizeDisplayName } from "./sessions-json-BVFqIpMt.js";
3
3
  import { n as enqueue } from "./message-queue-D4vYsMyd.js";
4
- import { t as broadcastSessions } from "./ws-managers-DLQiiQnX.js";
4
+ import { t as broadcastSessions } from "./ws-managers-Cw_QNOpo.js";
5
5
  //#region .svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/rename/_server.ts.js
6
6
  const POST = async ({ params, request }) => {
7
7
  const id = params.id;
@@ -25,4 +25,4 @@ const POST = async ({ params, request }) => {
25
25
  //#endregion
26
26
  export { POST };
27
27
 
28
- //# sourceMappingURL=_server.ts-C00ejke7.js.map
28
+ //# sourceMappingURL=_server.ts-pihD3w10.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_server.ts-C00ejke7.js","names":[],"sources":["../../../../web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/rename/_server.ts.js"],"sourcesContent":["import { json } from \"@sveltejs/kit\";\nimport { g as getSession, s as sanitizeDisplayName, c as updateSession } from \"../../../../../../chunks/sessions-json.js\";\nimport { e as enqueue } from \"../../../../../../chunks/message-queue.js\";\nimport { b as broadcastSessions } from \"../../../../../../chunks/ws-managers.js\";\nconst POST = async ({ params, request }) => {\n const id = params.id;\n const session = getSession(id);\n if (!session) return json({ error: \"Session not found\", id }, { status: 404 });\n let body;\n try {\n body = await request.json();\n } catch {\n return json({ error: \"Invalid JSON\" }, { status: 400 });\n }\n const name = sanitizeDisplayName(body.name);\n updateSession(id, { display_name: name });\n broadcastSessions();\n if (session.tmux_target && name) {\n enqueue(session.tmux_target, `/rename ${name}`, \"control\");\n }\n return json({ ok: true });\n};\nexport {\n POST\n};\n"],"mappings":";;;;;AAIA,MAAM,OAAO,OAAO,EAAE,QAAQ,cAAc;CAC1C,MAAM,KAAK,OAAO;CAClB,MAAM,UAAU,WAAW,EAAE;CAC7B,IAAI,CAAC,SAAS,OAAO,KAAK;EAAE,OAAO;EAAqB;CAAG,GAAG,EAAE,QAAQ,IAAI,CAAC;CAC7E,IAAI;CACJ,IAAI;EACF,OAAO,MAAM,QAAQ,KAAK;CAC5B,QAAQ;EACN,OAAO,KAAK,EAAE,OAAO,eAAe,GAAG,EAAE,QAAQ,IAAI,CAAC;CACxD;CACA,MAAM,OAAO,oBAAoB,KAAK,IAAI;CAC1C,cAAc,IAAI,EAAE,cAAc,KAAK,CAAC;CACxC,kBAAkB;CAClB,IAAI,QAAQ,eAAe,MACzB,QAAQ,QAAQ,aAAa,WAAW,QAAQ,SAAS;CAE3D,OAAO,KAAK,EAAE,IAAI,KAAK,CAAC;AAC1B"}
1
+ {"version":3,"file":"_server.ts-pihD3w10.js","names":[],"sources":["../../../../web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/rename/_server.ts.js"],"sourcesContent":["import { json } from \"@sveltejs/kit\";\nimport { g as getSession, s as sanitizeDisplayName, c as updateSession } from \"../../../../../../chunks/sessions-json.js\";\nimport { e as enqueue } from \"../../../../../../chunks/message-queue.js\";\nimport { b as broadcastSessions } from \"../../../../../../chunks/ws-managers.js\";\nconst POST = async ({ params, request }) => {\n const id = params.id;\n const session = getSession(id);\n if (!session) return json({ error: \"Session not found\", id }, { status: 404 });\n let body;\n try {\n body = await request.json();\n } catch {\n return json({ error: \"Invalid JSON\" }, { status: 400 });\n }\n const name = sanitizeDisplayName(body.name);\n updateSession(id, { display_name: name });\n broadcastSessions();\n if (session.tmux_target && name) {\n enqueue(session.tmux_target, `/rename ${name}`, \"control\");\n }\n return json({ ok: true });\n};\nexport {\n POST\n};\n"],"mappings":";;;;;AAIA,MAAM,OAAO,OAAO,EAAE,QAAQ,cAAc;CAC1C,MAAM,KAAK,OAAO;CAClB,MAAM,UAAU,WAAW,EAAE;CAC7B,IAAI,CAAC,SAAS,OAAO,KAAK;EAAE,OAAO;EAAqB;CAAG,GAAG,EAAE,QAAQ,IAAI,CAAC;CAC7E,IAAI;CACJ,IAAI;EACF,OAAO,MAAM,QAAQ,KAAK;CAC5B,QAAQ;EACN,OAAO,KAAK,EAAE,OAAO,eAAe,GAAG,EAAE,QAAQ,IAAI,CAAC;CACxD;CACA,MAAM,OAAO,oBAAoB,KAAK,IAAI;CAC1C,cAAc,IAAI,EAAE,cAAc,KAAK,CAAC;CACxC,kBAAkB;CAClB,IAAI,QAAQ,eAAe,MACzB,QAAQ,QAAQ,aAAa,WAAW,QAAQ,SAAS;CAE3D,OAAO,KAAK,EAAE,IAAI,KAAK,CAAC;AAC1B"}
@@ -1,6 +1,6 @@
1
1
  import { r as json } from "./exports-piA4c_uA.js";
2
2
  import { n as deleteSession } from "./sessions-json-BVFqIpMt.js";
3
- import { t as broadcastSessions } from "./ws-managers-DLQiiQnX.js";
3
+ import { t as broadcastSessions } from "./ws-managers-Cw_QNOpo.js";
4
4
  import { execFileSync } from "child_process";
5
5
  //#region .svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/kill/_server.ts.js
6
6
  const POST = async ({ params, request }) => {
@@ -33,4 +33,4 @@ const POST = async ({ params, request }) => {
33
33
  //#endregion
34
34
  export { POST };
35
35
 
36
- //# sourceMappingURL=_server.ts-BBrtrcEt.js.map
36
+ //# sourceMappingURL=_server.ts-xXEIfBqh.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_server.ts-BBrtrcEt.js","names":[],"sources":["../../../../web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/kill/_server.ts.js"],"sourcesContent":["import { json } from \"@sveltejs/kit\";\nimport { execFileSync } from \"child_process\";\nimport { d as deleteSession } from \"../../../../../../chunks/sessions-json.js\";\nimport { b as broadcastSessions } from \"../../../../../../chunks/ws-managers.js\";\nconst POST = async ({ params, request }) => {\n const id = decodeURIComponent(params.id);\n const body = await request.json().catch(() => ({}));\n const { pid, tmux_target } = body;\n try {\n if (typeof pid === \"number\" && pid > 0 && Number.isInteger(pid)) {\n try {\n execFileSync(\"kill\", [\"-9\", String(pid)], { stdio: \"ignore\" });\n } catch {\n }\n }\n if (tmux_target && typeof tmux_target === \"string\") {\n try {\n execFileSync(\"tmux\", [\"kill-pane\", \"-t\", tmux_target], { stdio: \"ignore\" });\n } catch {\n }\n }\n try {\n deleteSession(id);\n } catch {\n }\n broadcastSessions();\n return json({ ok: true });\n } catch {\n try {\n deleteSession(id);\n } catch {\n }\n broadcastSessions();\n return json({ ok: true });\n }\n};\nexport {\n POST\n};\n"],"mappings":";;;;;AAIA,MAAM,OAAO,OAAO,EAAE,QAAQ,cAAc;CAC1C,MAAM,KAAK,mBAAmB,OAAO,EAAE;CAEvC,MAAM,EAAE,KAAK,gBAAgB,MADV,QAAQ,KAAK,CAAC,CAAC,aAAa,CAAC,EAAE;CAElD,IAAI;EACF,IAAI,OAAO,QAAQ,YAAY,MAAM,KAAK,OAAO,UAAU,GAAG,GAC5D,IAAI;GACF,aAAa,QAAQ,CAAC,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,OAAO,SAAS,CAAC;EAC/D,QAAQ,CACR;EAEF,IAAI,eAAe,OAAO,gBAAgB,UACxC,IAAI;GACF,aAAa,QAAQ;IAAC;IAAa;IAAM;GAAW,GAAG,EAAE,OAAO,SAAS,CAAC;EAC5E,QAAQ,CACR;EAEF,IAAI;GACF,cAAc,EAAE;EAClB,QAAQ,CACR;EACA,kBAAkB;EAClB,OAAO,KAAK,EAAE,IAAI,KAAK,CAAC;CAC1B,QAAQ;EACN,IAAI;GACF,cAAc,EAAE;EAClB,QAAQ,CACR;EACA,kBAAkB;EAClB,OAAO,KAAK,EAAE,IAAI,KAAK,CAAC;CAC1B;AACF"}
1
+ {"version":3,"file":"_server.ts-xXEIfBqh.js","names":[],"sources":["../../../../web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/kill/_server.ts.js"],"sourcesContent":["import { json } from \"@sveltejs/kit\";\nimport { execFileSync } from \"child_process\";\nimport { d as deleteSession } from \"../../../../../../chunks/sessions-json.js\";\nimport { b as broadcastSessions } from \"../../../../../../chunks/ws-managers.js\";\nconst POST = async ({ params, request }) => {\n const id = decodeURIComponent(params.id);\n const body = await request.json().catch(() => ({}));\n const { pid, tmux_target } = body;\n try {\n if (typeof pid === \"number\" && pid > 0 && Number.isInteger(pid)) {\n try {\n execFileSync(\"kill\", [\"-9\", String(pid)], { stdio: \"ignore\" });\n } catch {\n }\n }\n if (tmux_target && typeof tmux_target === \"string\") {\n try {\n execFileSync(\"tmux\", [\"kill-pane\", \"-t\", tmux_target], { stdio: \"ignore\" });\n } catch {\n }\n }\n try {\n deleteSession(id);\n } catch {\n }\n broadcastSessions();\n return json({ ok: true });\n } catch {\n try {\n deleteSession(id);\n } catch {\n }\n broadcastSessions();\n return json({ ok: true });\n }\n};\nexport {\n POST\n};\n"],"mappings":";;;;;AAIA,MAAM,OAAO,OAAO,EAAE,QAAQ,cAAc;CAC1C,MAAM,KAAK,mBAAmB,OAAO,EAAE;CAEvC,MAAM,EAAE,KAAK,gBAAgB,MADV,QAAQ,KAAK,CAAC,CAAC,aAAa,CAAC,EAAE;CAElD,IAAI;EACF,IAAI,OAAO,QAAQ,YAAY,MAAM,KAAK,OAAO,UAAU,GAAG,GAC5D,IAAI;GACF,aAAa,QAAQ,CAAC,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,OAAO,SAAS,CAAC;EAC/D,QAAQ,CACR;EAEF,IAAI,eAAe,OAAO,gBAAgB,UACxC,IAAI;GACF,aAAa,QAAQ;IAAC;IAAa;IAAM;GAAW,GAAG,EAAE,OAAO,SAAS,CAAC;EAC5E,QAAQ,CACR;EAEF,IAAI;GACF,cAAc,EAAE;EAClB,QAAQ,CACR;EACA,kBAAkB;EAClB,OAAO,KAAK,EAAE,IAAI,KAAK,CAAC;CAC1B,QAAQ;EACN,IAAI;GACF,cAAc,EAAE;EAClB,QAAQ,CACR;EACA,kBAAkB;EAClB,OAAO,KAAK,EAAE,IAAI,KAAK,CAAC;CAC1B;AACF"}
@@ -12675,7 +12675,7 @@ const DEFAULT_CONFIG = {
12675
12675
  baseReconnectDelay: 1e3,
12676
12676
  maxReconnectDelay: 3e4
12677
12677
  };
12678
- var ReliableWebSocket = class {
12678
+ var ReliableWebSocket = class ReliableWebSocket {
12679
12679
  connected = false;
12680
12680
  /**
12681
12681
  * True once any data message has arrived on the current subscription — the
@@ -12763,7 +12763,22 @@ var ReliableWebSocket = class {
12763
12763
  }
12764
12764
  }, this.config.pingInterval);
12765
12765
  }
12766
+ /** How long a ping sent on returning to the page may go unanswered. */
12767
+ static WAKE_PONG_TIMEOUT = 3e3;
12768
+ wakeTimer = null;
12769
+ expectPong() {
12770
+ if (this.wakeTimer) clearTimeout(this.wakeTimer);
12771
+ const asked = Date.now();
12772
+ this.wakeTimer = setTimeout(() => {
12773
+ this.wakeTimer = null;
12774
+ if (this.ws && this.lastPong < asked) this.forceReconnect();
12775
+ }, ReliableWebSocket.WAKE_PONG_TIMEOUT);
12776
+ }
12766
12777
  stopPingTimer() {
12778
+ if (this.wakeTimer) {
12779
+ clearTimeout(this.wakeTimer);
12780
+ this.wakeTimer = null;
12781
+ }
12767
12782
  if (this.pingTimer) {
12768
12783
  clearInterval(this.pingTimer);
12769
12784
  this.pingTimer = null;
@@ -12783,7 +12798,10 @@ var ReliableWebSocket = class {
12783
12798
  this.visibilityHandler = () => {
12784
12799
  if (document.visibilityState === "visible" && this.shouldReconnect()) {
12785
12800
  if (!this.ws || this.ws.readyState !== WebSocket.OPEN) this.forceReconnect();
12786
- else this.ws.send("ping");
12801
+ else {
12802
+ this.ws.send("ping");
12803
+ this.expectPong();
12804
+ }
12787
12805
  }
12788
12806
  };
12789
12807
  document.addEventListener("visibilitychange", this.visibilityHandler);
@@ -13238,4 +13256,4 @@ function Button($$renderer, $$props) {
13238
13256
  //#endregion
13239
13257
  export { cn as a, getProjectColor as c, sessionStore as d, tv as f, buttonVariants as i, getSessionDisplayName as l, ReliableWebSocket as n, createPersisted as o, SessionsWsMessageSchema as r, findDeepestProject as s, Button as t, groupSessions as u };
13240
13258
 
13241
- //# sourceMappingURL=button-C1GVS_oY.js.map
13259
+ //# sourceMappingURL=button-svhFQKMs.js.map