claude-mux 0.9.5 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +1 -1
- package/dist/app.d.ts +2 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/claude/commands.d.ts +15 -0
- package/dist/claude/commands.d.ts.map +1 -0
- package/dist/claude/commands.js +245 -0
- package/dist/claude/commands.js.map +1 -0
- package/dist/components/Header.d.ts +2 -1
- package/dist/components/Header.d.ts.map +1 -1
- package/dist/components/HelpDialog.d.ts +2 -1
- package/dist/components/HelpDialog.d.ts.map +1 -1
- package/dist/components/SessionEntry.d.ts +2 -1
- package/dist/components/SessionEntry.d.ts.map +1 -1
- package/dist/components/SessionList.d.ts +2 -1
- package/dist/components/SessionList.d.ts.map +1 -1
- package/dist/components/StatusBar.d.ts +2 -1
- package/dist/components/StatusBar.d.ts.map +1 -1
- package/dist/db/sessions-json.d.ts +1 -1
- package/dist/db/sessions-json.js +1 -1
- package/dist/server/message-queue.d.ts +7 -0
- package/dist/server/message-queue.d.ts.map +1 -1
- package/dist/server/message-queue.js +57 -4
- package/dist/server/message-queue.js.map +1 -1
- package/dist/server/ws-handlers.d.ts +34 -7
- package/dist/server/ws-handlers.d.ts.map +1 -1
- package/dist/server/ws-handlers.js +137 -51
- package/dist/server/ws-handlers.js.map +1 -1
- package/dist/tmux/snapshot.d.ts +26 -0
- package/dist/tmux/snapshot.d.ts.map +1 -0
- package/dist/tmux/snapshot.js +121 -0
- package/dist/tmux/snapshot.js.map +1 -0
- package/dist/utils/version.d.ts +1 -1
- package/dist/utils/version.d.ts.map +1 -1
- package/dist/utils/version.js +1 -1
- package/dist/utils/version.js.map +1 -1
- package/dist/web/client/_app/immutable/assets/0.BHMH03xN.css +1 -0
- package/dist/web/client/_app/immutable/assets/2.BPFnFMPa.css +1 -0
- package/{web/.svelte-kit/adapter-bun/_app/immutable/assets/_page.B_k6eI2k.css → dist/web/client/_app/immutable/assets/3.C-mmGOc7.css} +1 -1
- package/dist/web/client/_app/immutable/chunks/B-uNUC1g.js +2 -0
- package/dist/web/client/_app/immutable/chunks/BC4YnY_W.js +1 -0
- package/dist/web/client/_app/immutable/chunks/BMXiuv0v.js +1 -0
- package/dist/web/client/_app/immutable/chunks/BcLVN_yA.js +1 -0
- package/dist/web/client/_app/immutable/chunks/C75YkvRA.js +1 -0
- package/dist/web/client/_app/immutable/chunks/CrbnT13E.js +1 -0
- package/dist/web/client/_app/immutable/chunks/DuapVKBU.js +2 -0
- package/dist/web/client/_app/immutable/chunks/jsJxHQ3D.js +69 -0
- package/dist/web/client/_app/immutable/chunks/wbPk3Yxo.js +81 -0
- package/dist/web/client/_app/immutable/entry/app.BPxQgXOL.js +2 -0
- package/dist/web/client/_app/immutable/entry/start.CFsMAOx8.js +1 -0
- package/dist/web/client/_app/immutable/nodes/0.CWdPHOZW.js +1 -0
- package/dist/web/client/_app/immutable/nodes/1.CBrHLWCB.js +1 -0
- package/dist/web/client/_app/immutable/nodes/2.Concd-Od.js +1 -0
- package/dist/web/client/_app/immutable/nodes/3.Bxw2z5gl.js +101 -0
- package/dist/web/client/_app/version.json +1 -1
- package/dist/web/client/apple-touch-icon.png +0 -0
- package/dist/web/client/icon-192.png +0 -0
- package/dist/web/client/icon-512.png +0 -0
- package/dist/web/client/manifest.webmanifest +16 -0
- package/dist/web/server/chunks/{0-D9F7XwhO.js → 0-DdxdcbPU.js} +13 -12
- package/dist/web/server/chunks/0-DdxdcbPU.js.map +1 -0
- package/dist/web/server/chunks/{1-CaA6_Msb.js → 1-CvSoa3QJ.js} +6 -6
- package/dist/web/server/chunks/1-CvSoa3QJ.js.map +1 -0
- package/dist/web/server/chunks/2-BrM2VX61.js +20 -0
- package/dist/web/server/chunks/2-BrM2VX61.js.map +1 -0
- package/dist/web/server/chunks/3-DPGMF1DL.js +23 -0
- package/dist/web/server/chunks/3-DPGMF1DL.js.map +1 -0
- package/dist/web/server/chunks/{popover-trigger-BQJRZ2Xv.js → _layout.svelte-DQzPx1fa.js} +3622 -288
- package/dist/web/server/chunks/_layout.svelte-DQzPx1fa.js.map +1 -0
- package/dist/web/server/chunks/{_page.svelte-CREhk3v0.js → _page.svelte-BlOLzyrl.js} +4 -4
- package/dist/web/server/chunks/_page.svelte-BlOLzyrl.js.map +1 -0
- package/dist/web/server/chunks/{_server.ts-CTIiLzg9.js → _server.ts-12NE7UeG.js} +5 -5
- package/dist/web/server/chunks/{_server.ts-CTIiLzg9.js.map → _server.ts-12NE7UeG.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-Dj_iwP-Z.js → _server.ts-BDmSWnC6.js} +8 -6
- package/dist/web/server/chunks/{_server.ts-Dj_iwP-Z.js.map → _server.ts-BDmSWnC6.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-B-6emYlG.js → _server.ts-BFLtnMcp.js} +7 -5
- package/dist/web/server/chunks/{_server.ts-B-6emYlG.js.map → _server.ts-BFLtnMcp.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-DyeW0P3w.js → _server.ts-BOo-YmUp.js} +5 -4
- package/dist/web/server/chunks/{_server.ts-DyeW0P3w.js.map → _server.ts-BOo-YmUp.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-BUOOqQRk.js → _server.ts-BXt5Kowc.js} +3 -3
- package/dist/web/server/chunks/{_server.ts-BUOOqQRk.js.map → _server.ts-BXt5Kowc.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-ChuAmmhw.js → _server.ts-BYBeCdq2.js} +4 -4
- package/dist/web/server/chunks/{_server.ts-ChuAmmhw.js.map → _server.ts-BYBeCdq2.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-ZObkLZOS.js → _server.ts-Bm14TVxq.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-ZObkLZOS.js.map → _server.ts-Bm14TVxq.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-DIhiJl4f.js → _server.ts-C0ur_l7h.js} +5 -4
- package/dist/web/server/chunks/{_server.ts-DIhiJl4f.js.map → _server.ts-C0ur_l7h.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-D0ylgRRV.js → _server.ts-CJ0nhTTh.js} +3 -3
- package/dist/web/server/chunks/{_server.ts-D0ylgRRV.js.map → _server.ts-CJ0nhTTh.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-DLI_Pwvd.js → _server.ts-CgG8pj06.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-DLI_Pwvd.js.map → _server.ts-CgG8pj06.js.map} +1 -1
- package/dist/web/server/chunks/_server.ts-CrRQ-1IB.js +208 -0
- package/dist/web/server/chunks/_server.ts-CrRQ-1IB.js.map +1 -0
- package/dist/web/server/chunks/{_server.ts-CkC3JTyo.js → _server.ts-CzgDUjKe.js} +12 -11
- package/dist/web/server/chunks/{_server.ts-CkC3JTyo.js.map → _server.ts-CzgDUjKe.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-DK7C_rXn.js → _server.ts-D8hEf52k.js} +13 -12
- package/dist/web/server/chunks/{_server.ts-DK7C_rXn.js.map → _server.ts-D8hEf52k.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-B4o51l3m.js → _server.ts-DJhqVvwC.js} +3 -3
- package/dist/web/server/chunks/{_server.ts-B4o51l3m.js.map → _server.ts-DJhqVvwC.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-Bkk6XA1G.js → _server.ts-DQhRNIQX.js} +15 -9
- package/dist/web/server/chunks/{_server.ts-Bkk6XA1G.js.map → _server.ts-DQhRNIQX.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-B2vhCPsh.js → _server.ts-DtVo0TCf.js} +4 -4
- package/dist/web/server/chunks/{_server.ts-B2vhCPsh.js.map → _server.ts-DtVo0TCf.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-Bp8qgUhz.js → _server.ts-S3P3Wga8.js} +3 -3
- package/dist/web/server/chunks/{_server.ts-Bp8qgUhz.js.map → _server.ts-S3P3Wga8.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-Cy0wvEJk.js → _server.ts-UE7vj5nG.js} +7 -6
- package/dist/web/server/chunks/{_server.ts-Cy0wvEJk.js.map → _server.ts-UE7vj5nG.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-BEQA_put.js → _server.ts-mGAUzFSv.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-BEQA_put.js.map → _server.ts-mGAUzFSv.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-eFJEOOS1.js → _server.ts-qEqBc4dH.js} +5 -5
- package/dist/web/server/chunks/{_server.ts-eFJEOOS1.js.map → _server.ts-qEqBc4dH.js.map} +1 -1
- package/dist/web/server/chunks/{agents-rTKwF5qh.js → agents-21cPpmjY.js} +1 -1
- package/dist/web/server/chunks/{agents-rTKwF5qh.js.map → agents-21cPpmjY.js.map} +1 -1
- package/dist/web/server/chunks/{attachments-B8VMrOm4.js → attachments-KlCvKhak.js} +2 -2
- package/dist/web/server/chunks/{attachments-B8VMrOm4.js.map → attachments-KlCvKhak.js.map} +1 -1
- package/dist/web/server/chunks/{button-BKSlzQeg.js → button-DG6I4Dia.js} +4733 -885
- package/dist/web/server/chunks/button-DG6I4Dia.js.map +1 -0
- package/dist/web/server/chunks/{constants-CZFdiL46.js → constants-DxYZCFLw.js} +1 -1
- package/dist/web/server/chunks/{constants-CZFdiL46.js.map → constants-DxYZCFLw.js.map} +1 -1
- package/dist/web/server/chunks/{error.svelte-VCYDSS3H.js → error.svelte-r19Dfgak.js} +3 -5
- package/dist/web/server/chunks/error.svelte-r19Dfgak.js.map +1 -0
- package/dist/web/server/chunks/{exports-DLCVjVJM.js → exports-BqJxdkkd.js} +67 -5
- package/dist/web/server/chunks/exports-BqJxdkkd.js.map +1 -0
- package/dist/web/server/chunks/{root-L_UzGTpb.js → exports-zB_G8R4F.js} +1604 -1549
- package/dist/web/server/chunks/exports-zB_G8R4F.js.map +1 -0
- package/dist/web/server/chunks/{hooks.server-CzdMWOsb.js → hooks.server-IAZrpw3O.js} +7 -6
- package/dist/web/server/chunks/hooks.server-IAZrpw3O.js.map +1 -0
- package/dist/web/server/chunks/{message-queue-BhryIx7W.js → message-queue-DletiFqf.js} +41 -6
- package/dist/web/server/chunks/message-queue-DletiFqf.js.map +1 -0
- package/dist/web/server/chunks/{sessions-json-w9KPwiDl.js → sessions-json-CaSa-c37.js} +1 -1
- package/dist/web/server/chunks/{sessions-json-w9KPwiDl.js.map → sessions-json-CaSa-c37.js.map} +1 -1
- package/dist/web/server/chunks/{shared-server-CB2NTyFt.js → shared-server-Cs1g-wuJ.js} +1 -1
- package/dist/web/server/chunks/{shared-server-CB2NTyFt.js.map → shared-server-Cs1g-wuJ.js.map} +1 -1
- package/dist/web/server/chunks/{state.svelte-DM05ho1v.js → state.svelte-Bb67lT4B.js} +2 -2
- package/dist/web/server/chunks/{state.svelte-DM05ho1v.js.map → state.svelte-Bb67lT4B.js.map} +1 -1
- package/dist/web/server/chunks/{ws-handlers-B_p_71BD.js → ws-handlers-KQ7tQLV2.js} +296 -70
- package/dist/web/server/chunks/ws-handlers-KQ7tQLV2.js.map +1 -0
- package/dist/web/server/chunks/{ws-managers-B0N9UU0g.js → ws-managers-Bk8Kzixf.js} +2 -2
- package/dist/web/server/chunks/{ws-managers-B0N9UU0g.js.map → ws-managers-Bk8Kzixf.js.map} +1 -1
- package/dist/web/server/index.js +1362 -1175
- package/dist/web/server/index.js.map +1 -1
- package/dist/web/server/manifest.js +50 -33
- package/dist/web/server/manifest.js.map +1 -1
- package/package.json +13 -13
- package/src/claude/commands.ts +262 -0
- package/src/db/sessions-json.ts +1 -1
- package/src/server/message-queue.ts +59 -4
- package/src/server/ws-handlers.ts +179 -56
- package/src/tmux/snapshot.ts +132 -0
- package/src/utils/version.ts +1 -1
- package/tests/components/Header.test.tsx +1 -1
- package/tests/db/sessions.test.ts +10 -8
- package/tests/setup/hooks.test.ts +4 -4
- package/web/.svelte-kit/adapter-bun/.vite/manifest.json +59 -66
- package/web/.svelte-kit/adapter-bun/_app/immutable/assets/_layout.C_Esdb-g.css +1 -0
- package/web/.svelte-kit/adapter-bun/_app/immutable/assets/_page.BPFnFMPa.css +1 -0
- package/web/.svelte-kit/{output/server/_app/immutable/assets/_page.B_k6eI2k.css → adapter-bun/_app/immutable/assets/_page.C-mmGOc7.css} +1 -1
- package/web/.svelte-kit/adapter-bun/chunks/attachments.js +1 -1
- package/web/.svelte-kit/adapter-bun/chunks/button.js +9 -9
- package/web/.svelte-kit/adapter-bun/chunks/exports.js +5 -5
- package/web/.svelte-kit/adapter-bun/chunks/internal.js +29 -122
- package/web/.svelte-kit/adapter-bun/chunks/internal2.js +128 -0
- package/web/.svelte-kit/adapter-bun/chunks/message-queue.js +41 -7
- package/web/.svelte-kit/adapter-bun/chunks/popover-trigger.js +777 -288
- package/web/.svelte-kit/adapter-bun/chunks/root.js +1510 -1432
- package/web/.svelte-kit/adapter-bun/chunks/sessions-json.js +8 -8
- package/web/.svelte-kit/adapter-bun/chunks/shared-server.js +3 -3
- package/web/.svelte-kit/adapter-bun/chunks/state.svelte.js +1 -1
- package/web/.svelte-kit/{output/server/chunks/render-context.js → adapter-bun/chunks/uneval.js} +46 -109
- package/web/.svelte-kit/adapter-bun/chunks/utils.js +1728 -32
- package/web/.svelte-kit/adapter-bun/chunks/utils2.js +41 -0
- package/web/.svelte-kit/adapter-bun/chunks/ws-handlers.js +231 -57
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/commands/_server.ts.js +212 -0
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/projects/new-session/_server.ts.js +1 -1
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/_server.ts.js +1 -1
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/attach/_server.ts.js +1 -1
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/queue/_server.ts.js +2 -2
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/rename/_server.ts.js +1 -1
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/screenshots/_server.ts.js +1 -1
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/send/_server.ts.js +1 -1
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/voice/_server.ts.js +1 -1
- package/web/.svelte-kit/adapter-bun/entries/fallbacks/error.svelte.js +5 -5
- package/web/.svelte-kit/adapter-bun/entries/hooks.server.js +1 -1
- package/web/.svelte-kit/adapter-bun/entries/pages/_layout.server.ts.js +1 -1
- package/web/.svelte-kit/adapter-bun/entries/pages/_layout.svelte.js +6 -527
- package/web/.svelte-kit/adapter-bun/entries/pages/_page.svelte.js +2 -2
- package/web/.svelte-kit/adapter-bun/entries/pages/session/_target_/_page.svelte.js +422 -195
- package/web/.svelte-kit/adapter-bun/env.js +13 -0
- package/web/.svelte-kit/adapter-bun/index.js +788 -903
- package/web/.svelte-kit/adapter-bun/internal.js +6 -6
- package/web/.svelte-kit/adapter-bun/manifest-full.js +10 -3
- package/web/.svelte-kit/adapter-bun/manifest.js +10 -3
- 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 +2 -2
- package/web/.svelte-kit/adapter-bun/nodes/3.js +2 -4
- package/web/.svelte-kit/adapter-bun/remote-entry.js +365 -140
- package/web/.svelte-kit/ambient.d.ts +210 -198
- package/web/.svelte-kit/env.d.ts +1 -0
- package/web/.svelte-kit/generated/client/app.js +11 -1
- package/web/.svelte-kit/generated/client/nodes/1.js +1 -1
- package/web/.svelte-kit/generated/client-optimized/app.js +11 -1
- package/web/.svelte-kit/generated/client-optimized/nodes/1.js +1 -1
- package/web/.svelte-kit/generated/root.svelte +1 -1
- package/web/.svelte-kit/generated/server/internal.js +6 -5
- package/web/.svelte-kit/generated/shared/error-template.js +1 -0
- package/web/.svelte-kit/non-ambient.d.ts +9 -8
- package/web/.svelte-kit/output/client/.vite/manifest.json +86 -70
- package/web/.svelte-kit/output/client/_app/immutable/assets/0.BHMH03xN.css +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/assets/2.BPFnFMPa.css +1 -0
- package/{dist/web/client/_app/immutable/assets/3.B_k6eI2k.css → web/.svelte-kit/output/client/_app/immutable/assets/3.C-mmGOc7.css} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/B-uNUC1g.js +2 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/BC4YnY_W.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/BMXiuv0v.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/BcLVN_yA.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/C75YkvRA.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/CrbnT13E.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/DuapVKBU.js +2 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/jsJxHQ3D.js +69 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/wbPk3Yxo.js +81 -0
- package/web/.svelte-kit/output/client/_app/immutable/entry/app.BPxQgXOL.js +2 -0
- package/web/.svelte-kit/output/client/_app/immutable/entry/start.CFsMAOx8.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/0.CWdPHOZW.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/1.CBrHLWCB.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/2.Concd-Od.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/3.Bxw2z5gl.js +101 -0
- package/web/.svelte-kit/output/client/_app/version.json +1 -1
- package/web/.svelte-kit/output/client/apple-touch-icon.png +0 -0
- package/web/.svelte-kit/output/client/icon-192.png +0 -0
- package/web/.svelte-kit/output/client/icon-512.png +0 -0
- package/web/.svelte-kit/output/client/manifest.webmanifest +16 -0
- package/web/.svelte-kit/output/server/.vite/manifest.json +59 -66
- package/web/.svelte-kit/output/server/_app/immutable/assets/_layout.C_Esdb-g.css +1 -0
- package/web/.svelte-kit/output/server/_app/immutable/assets/_page.BPFnFMPa.css +1 -0
- package/web/.svelte-kit/output/{client/_app/immutable/assets/3.B_k6eI2k.css → server/_app/immutable/assets/_page.C-mmGOc7.css} +1 -1
- package/web/.svelte-kit/output/server/chunks/attachments.js +1 -1
- package/web/.svelte-kit/output/server/chunks/button.js +9 -9
- package/web/.svelte-kit/output/server/chunks/exports.js +5 -5
- package/web/.svelte-kit/output/server/chunks/internal.js +29 -122
- package/web/.svelte-kit/output/server/chunks/internal2.js +128 -0
- package/web/.svelte-kit/output/server/chunks/message-queue.js +41 -7
- package/web/.svelte-kit/output/server/chunks/popover-trigger.js +777 -288
- package/web/.svelte-kit/output/server/chunks/root.js +1510 -1432
- package/web/.svelte-kit/output/server/chunks/sessions-json.js +8 -8
- package/web/.svelte-kit/output/server/chunks/shared-server.js +3 -3
- package/web/.svelte-kit/output/server/chunks/state.svelte.js +1 -1
- package/web/.svelte-kit/{adapter-bun/chunks/render-context.js → output/server/chunks/uneval.js} +46 -109
- package/web/.svelte-kit/output/server/chunks/utils.js +1728 -32
- package/web/.svelte-kit/output/server/chunks/utils2.js +41 -0
- package/web/.svelte-kit/output/server/chunks/ws-handlers.js +231 -57
- package/web/.svelte-kit/output/server/entries/endpoints/api/commands/_server.ts.js +212 -0
- package/web/.svelte-kit/output/server/entries/endpoints/api/projects/new-session/_server.ts.js +1 -1
- package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/_server.ts.js +1 -1
- package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/attach/_server.ts.js +1 -1
- package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/queue/_server.ts.js +2 -2
- package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/rename/_server.ts.js +1 -1
- package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/screenshots/_server.ts.js +1 -1
- package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/send/_server.ts.js +1 -1
- package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/voice/_server.ts.js +1 -1
- package/web/.svelte-kit/output/server/entries/fallbacks/error.svelte.js +5 -5
- package/web/.svelte-kit/output/server/entries/hooks.server.js +1 -1
- package/web/.svelte-kit/output/server/entries/pages/_layout.server.ts.js +1 -1
- package/web/.svelte-kit/output/server/entries/pages/_layout.svelte.js +6 -527
- package/web/.svelte-kit/output/server/entries/pages/_page.svelte.js +2 -2
- package/web/.svelte-kit/output/server/entries/pages/session/_target_/_page.svelte.js +422 -195
- package/web/.svelte-kit/output/server/env.js +13 -0
- package/web/.svelte-kit/output/server/index.js +788 -903
- package/web/.svelte-kit/output/server/internal.js +6 -6
- package/web/.svelte-kit/output/server/manifest-full.js +10 -3
- package/web/.svelte-kit/output/server/manifest.js +10 -3
- 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 +2 -2
- package/web/.svelte-kit/output/server/nodes/3.js +2 -4
- package/web/.svelte-kit/output/server/remote-entry.js +365 -140
- package/web/.svelte-kit/tsconfig.json +2 -4
- package/web/.svelte-kit/types/route_meta_data.json +3 -0
- package/web/.svelte-kit/types/src/routes/$types.d.ts +1 -1
- package/web/.svelte-kit/types/src/routes/api/commands/$types.d.ts +9 -0
- package/web/package.json +11 -11
- package/web/src/app.html +9 -1
- package/web/src/hooks.server.ts +2 -1
- package/web/src/lib/components/CommandPalette.svelte +244 -0
- package/web/src/lib/components/TerminalView.svelte +113 -0
- package/web/src/lib/stores/terminal.svelte.ts +183 -31
- package/web/src/lib/terminal/ansi.ts +48 -0
- package/web/src/routes/+layout.svelte +14 -4
- package/web/src/routes/+page.svelte +1 -1
- package/web/src/routes/api/commands/+server.ts +9 -0
- package/web/src/routes/session/[target]/+page.svelte +130 -67
- package/web/static/apple-touch-icon.png +0 -0
- package/web/static/icon-192.png +0 -0
- package/web/static/icon-512.png +0 -0
- package/web/static/manifest.webmanifest +16 -0
- package/web/vite.config.ts +2 -1
- package/dist/web/client/_app/immutable/assets/0.0ZM-mOx6.css +0 -1
- package/dist/web/client/_app/immutable/assets/2.s6Kx4oz1.css +0 -1
- package/dist/web/client/_app/immutable/chunks/BIuG5Qqu.js +0 -1
- package/dist/web/client/_app/immutable/chunks/Bc6u7h4b.js +0 -1
- package/dist/web/client/_app/immutable/chunks/CGb10hB5.js +0 -1
- package/dist/web/client/_app/immutable/chunks/Cd9FsMi7.js +0 -1
- package/dist/web/client/_app/immutable/chunks/CzMlg5s0.js +0 -69
- package/dist/web/client/_app/immutable/chunks/D7LHlC1M.js +0 -2
- package/dist/web/client/_app/immutable/chunks/DnokqAh5.js +0 -3
- package/dist/web/client/_app/immutable/entry/app.CSyNZ-P9.js +0 -2
- package/dist/web/client/_app/immutable/entry/start.DDGAiG8M.js +0 -1
- package/dist/web/client/_app/immutable/nodes/0.6OjSQ9Bf.js +0 -1
- package/dist/web/client/_app/immutable/nodes/1.BxemSYR-.js +0 -1
- package/dist/web/client/_app/immutable/nodes/2.9MvIu4lM.js +0 -1
- package/dist/web/client/_app/immutable/nodes/3.CFLgLVR9.js +0 -98
- package/dist/web/server/chunks/0-D9F7XwhO.js.map +0 -1
- package/dist/web/server/chunks/1-CaA6_Msb.js.map +0 -1
- package/dist/web/server/chunks/2-C0lh_1Lh.js +0 -19
- package/dist/web/server/chunks/2-C0lh_1Lh.js.map +0 -1
- package/dist/web/server/chunks/3-D6h2KIjg.js +0 -24
- package/dist/web/server/chunks/3-D6h2KIjg.js.map +0 -1
- package/dist/web/server/chunks/_layout.svelte-yoaT7ri1.js +0 -3358
- package/dist/web/server/chunks/_layout.svelte-yoaT7ri1.js.map +0 -1
- package/dist/web/server/chunks/_page.svelte-CREhk3v0.js.map +0 -1
- package/dist/web/server/chunks/_page.svelte-NyGzfl6p.js +0 -1392
- package/dist/web/server/chunks/_page.svelte-NyGzfl6p.js.map +0 -1
- package/dist/web/server/chunks/button-BKSlzQeg.js.map +0 -1
- package/dist/web/server/chunks/chunks-DLJ18IUO.js +0 -57
- package/dist/web/server/chunks/chunks-DLJ18IUO.js.map +0 -1
- package/dist/web/server/chunks/client-Dnt8rmsr.js +0 -19
- package/dist/web/server/chunks/client-Dnt8rmsr.js.map +0 -1
- package/dist/web/server/chunks/error.svelte-VCYDSS3H.js.map +0 -1
- package/dist/web/server/chunks/exports-DLCVjVJM.js.map +0 -1
- package/dist/web/server/chunks/hooks.server-CzdMWOsb.js.map +0 -1
- package/dist/web/server/chunks/internal-CwN2I5C2.js +0 -66
- package/dist/web/server/chunks/internal-CwN2I5C2.js.map +0 -1
- package/dist/web/server/chunks/message-queue-BhryIx7W.js.map +0 -1
- package/dist/web/server/chunks/popover-trigger-BQJRZ2Xv.js.map +0 -1
- package/dist/web/server/chunks/root-L_UzGTpb.js.map +0 -1
- package/dist/web/server/chunks/ws-handlers-B_p_71BD.js.map +0 -1
- package/tests/server/integration.test.ts +0 -319
- package/tests/server/sessions.test.ts +0 -114
- package/web/.svelte-kit/adapter-bun/_app/immutable/assets/_layout.C6z7oh1Q.css +0 -1
- package/web/.svelte-kit/adapter-bun/_app/immutable/assets/_page.s6Kx4oz1.css +0 -1
- package/web/.svelte-kit/adapter-bun/chunks/client.js +0 -30
- package/web/.svelte-kit/adapter-bun/chunks/environment.js +0 -34
- package/web/.svelte-kit/adapter-bun/chunks/index.js +0 -58
- package/web/.svelte-kit/adapter-bun/chunks/shared.js +0 -1482
- package/web/.svelte-kit/output/client/_app/immutable/assets/0.0ZM-mOx6.css +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/assets/2.s6Kx4oz1.css +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/BIuG5Qqu.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/Bc6u7h4b.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/CGb10hB5.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/Cd9FsMi7.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/CzMlg5s0.js +0 -69
- package/web/.svelte-kit/output/client/_app/immutable/chunks/D7LHlC1M.js +0 -2
- package/web/.svelte-kit/output/client/_app/immutable/chunks/DnokqAh5.js +0 -3
- package/web/.svelte-kit/output/client/_app/immutable/entry/app.CSyNZ-P9.js +0 -2
- package/web/.svelte-kit/output/client/_app/immutable/entry/start.DDGAiG8M.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/0.6OjSQ9Bf.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/1.BxemSYR-.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/2.9MvIu4lM.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/3.CFLgLVR9.js +0 -98
- package/web/.svelte-kit/output/server/_app/immutable/assets/_layout.C6z7oh1Q.css +0 -1
- package/web/.svelte-kit/output/server/_app/immutable/assets/_page.s6Kx4oz1.css +0 -1
- package/web/.svelte-kit/output/server/chunks/client.js +0 -30
- package/web/.svelte-kit/output/server/chunks/environment.js +0 -34
- package/web/.svelte-kit/output/server/chunks/index.js +0 -58
- package/web/.svelte-kit/output/server/chunks/shared.js +0 -1482
- package/web/src/lib/components/TerminalRenderer.svelte +0 -101
package/CLAUDE.md
CHANGED
|
@@ -14,7 +14,7 @@ bun run dev:serve --host 0.0.0.0 # LAN access
|
|
|
14
14
|
|
|
15
15
|
**HMR handles most changes automatically** - no restart needed for Svelte components, stores, routes, or API endpoints. Only `vite.config.ts` changes require a restart.
|
|
16
16
|
|
|
17
|
-
After each change, check tmux pane `
|
|
17
|
+
After each change, check tmux pane `dev:1.1` to verify HMR worked. If the server died, restart it. Do not start a new server if one is already running. If the pane reference is wrong, find the correct one and update this file.
|
|
18
18
|
|
|
19
19
|
## Build & Development Commands
|
|
20
20
|
|
package/dist/app.d.ts
CHANGED
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAkBhE,wBAAgB,GAAG,sBAyKlB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type CommandKind = "builtin" | "command" | "skill" | "agent";
|
|
2
|
+
export interface DiscoveredCommand {
|
|
3
|
+
/** Display name, e.g. "/linus", "/ak:p1", "@code-reviewer" */
|
|
4
|
+
name: string;
|
|
5
|
+
/** Text inserted into the prompt when selected */
|
|
6
|
+
insert: string;
|
|
7
|
+
kind: CommandKind;
|
|
8
|
+
/** "builtin" | "user" | "project" | "plugin:<id>" */
|
|
9
|
+
source: string;
|
|
10
|
+
description: string;
|
|
11
|
+
/** Absolute path of the defining file (absent for builtins) */
|
|
12
|
+
path?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function discoverCommands(cwd?: string): DiscoveredCommand[];
|
|
15
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/claude/commands.ts"],"names":[],"mappings":"AAgBA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAEpE,MAAM,WAAW,iBAAiB;IAChC,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA0MD,wBAAgB,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,iBAAiB,EAAE,CA8BlE"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Discover slash commands, skills, and subagents available to Claude Code.
|
|
3
|
+
*
|
|
4
|
+
* Sources scanned (mirrors Claude Code's own lookup):
|
|
5
|
+
* - built-in slash commands (static list)
|
|
6
|
+
* - ~/.claude/commands/**\/*.md (user commands)
|
|
7
|
+
* - ~/.claude/skills/<name>/SKILL.md (user skills)
|
|
8
|
+
* - ~/.claude/agents/*.md (user subagents)
|
|
9
|
+
* - <cwd>/.claude/{commands,skills,agents} (project-scoped)
|
|
10
|
+
* - enabled plugins from ~/.claude/plugins/installed_plugins.json
|
|
11
|
+
* → <installPath>/{commands,skills,agents}, namespaced as `plugin:name`
|
|
12
|
+
*/
|
|
13
|
+
import { existsSync, readdirSync, readFileSync, statSync } from "fs";
|
|
14
|
+
import { homedir } from "os";
|
|
15
|
+
import { basename, dirname, join, relative } from "path";
|
|
16
|
+
const BUILTINS = [
|
|
17
|
+
["/clear", "Clear conversation history"],
|
|
18
|
+
["/compact", "Compact conversation (optional focus instructions)"],
|
|
19
|
+
["/config", "Open settings"],
|
|
20
|
+
["/cost", "Show token usage and cost"],
|
|
21
|
+
["/context", "Show context window usage"],
|
|
22
|
+
["/doctor", "Check Claude Code installation health"],
|
|
23
|
+
["/exit", "Exit Claude Code"],
|
|
24
|
+
["/fast", "Toggle fast mode"],
|
|
25
|
+
["/help", "Show help and available commands"],
|
|
26
|
+
["/init", "Initialize CLAUDE.md for this project"],
|
|
27
|
+
["/login", "Sign in"],
|
|
28
|
+
["/logout", "Sign out"],
|
|
29
|
+
["/mcp", "Manage MCP servers"],
|
|
30
|
+
["/memory", "Edit memory files"],
|
|
31
|
+
["/model", "Switch model"],
|
|
32
|
+
["/permissions", "View and manage permissions"],
|
|
33
|
+
["/plan", "Enter plan mode"],
|
|
34
|
+
["/rc", "Remote Control — pair this session with claude.ai"],
|
|
35
|
+
["/resume", "Resume a previous session"],
|
|
36
|
+
["/review", "Request a code review"],
|
|
37
|
+
["/status", "Show session status"],
|
|
38
|
+
["/terminal-setup", "Configure terminal key bindings"],
|
|
39
|
+
["/vim", "Toggle vim mode"],
|
|
40
|
+
["/agents", "Manage subagents"],
|
|
41
|
+
["/plugin", "Manage plugins"],
|
|
42
|
+
["/hooks", "Manage hooks"],
|
|
43
|
+
["/add-dir", "Add a working directory"],
|
|
44
|
+
["/bug", "Report a bug"],
|
|
45
|
+
["/release-notes", "Show release notes"],
|
|
46
|
+
["/rewind", "Rewind conversation / files to a checkpoint"],
|
|
47
|
+
["/skills", "List available skills"],
|
|
48
|
+
["/tasks", "Show background tasks"],
|
|
49
|
+
["/statusline", "Configure status line"],
|
|
50
|
+
["/workflows", "Show running workflows"],
|
|
51
|
+
];
|
|
52
|
+
/** Parse a minimal YAML frontmatter block: returns name/description if present. */
|
|
53
|
+
function parseFrontmatter(content) {
|
|
54
|
+
if (!content.startsWith("---"))
|
|
55
|
+
return {};
|
|
56
|
+
const end = content.indexOf("\n---", 3);
|
|
57
|
+
if (end === -1)
|
|
58
|
+
return {};
|
|
59
|
+
const block = content.slice(3, end);
|
|
60
|
+
const out = {};
|
|
61
|
+
const lines = block.split("\n");
|
|
62
|
+
for (let i = 0; i < lines.length; i++) {
|
|
63
|
+
const m = lines[i].match(/^(name|description):\s*(.*)$/);
|
|
64
|
+
if (!m)
|
|
65
|
+
continue;
|
|
66
|
+
const key = m[1];
|
|
67
|
+
let val = m[2].trim();
|
|
68
|
+
if (val === "|" || val === ">" || val === "|-" || val === ">-") {
|
|
69
|
+
// Block scalar — gather indented continuation lines
|
|
70
|
+
const parts = [];
|
|
71
|
+
while (i + 1 < lines.length && /^\s+\S/.test(lines[i + 1])) {
|
|
72
|
+
parts.push(lines[++i].trim());
|
|
73
|
+
}
|
|
74
|
+
val = parts.join(" ");
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
val = val.replace(/^(['"])(.*)\1$/, "$2");
|
|
78
|
+
}
|
|
79
|
+
out[key] = val;
|
|
80
|
+
}
|
|
81
|
+
return out;
|
|
82
|
+
}
|
|
83
|
+
function firstMeaningfulLine(content) {
|
|
84
|
+
const body = content.startsWith("---")
|
|
85
|
+
? content.slice(content.indexOf("\n---", 3) + 4)
|
|
86
|
+
: content;
|
|
87
|
+
for (const raw of body.split("\n")) {
|
|
88
|
+
const line = raw.replace(/^#+\s*/, "").trim();
|
|
89
|
+
if (line)
|
|
90
|
+
return line.slice(0, 200);
|
|
91
|
+
}
|
|
92
|
+
return "";
|
|
93
|
+
}
|
|
94
|
+
function readMd(path) {
|
|
95
|
+
try {
|
|
96
|
+
const content = readFileSync(path, "utf-8");
|
|
97
|
+
const fm = parseFrontmatter(content);
|
|
98
|
+
return { name: fm.name, description: fm.description || firstMeaningfulLine(content) };
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return { description: "" };
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function walkMd(dir, out = []) {
|
|
105
|
+
if (!existsSync(dir))
|
|
106
|
+
return out;
|
|
107
|
+
let entries;
|
|
108
|
+
try {
|
|
109
|
+
entries = readdirSync(dir);
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return out;
|
|
113
|
+
}
|
|
114
|
+
for (const e of entries) {
|
|
115
|
+
const p = join(dir, e);
|
|
116
|
+
let st;
|
|
117
|
+
try {
|
|
118
|
+
st = statSync(p);
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
if (st.isDirectory())
|
|
124
|
+
walkMd(p, out);
|
|
125
|
+
else if (e.endsWith(".md"))
|
|
126
|
+
out.push(p);
|
|
127
|
+
}
|
|
128
|
+
return out;
|
|
129
|
+
}
|
|
130
|
+
/** Commands dir: every .md file → command; subdirs namespace as `dir:name`. */
|
|
131
|
+
function scanCommands(dir, source, prefix = "") {
|
|
132
|
+
return walkMd(dir).map((file) => {
|
|
133
|
+
const rel = relative(dir, file).replace(/\.md$/, "");
|
|
134
|
+
const parts = rel.split(/[\\/]/);
|
|
135
|
+
const bare = parts.length > 1 ? `${parts.slice(0, -1).join(":")}:${parts.at(-1)}` : parts[0];
|
|
136
|
+
const name = prefix ? `${prefix}:${bare}` : bare;
|
|
137
|
+
const md = readMd(file);
|
|
138
|
+
return {
|
|
139
|
+
name: `/${name}`,
|
|
140
|
+
insert: `/${name}`,
|
|
141
|
+
kind: "command",
|
|
142
|
+
source,
|
|
143
|
+
description: md.description,
|
|
144
|
+
path: file,
|
|
145
|
+
};
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
/** Skills dir: every SKILL.md under it (any depth) → skill named by frontmatter or folder. */
|
|
149
|
+
function scanSkills(dir, source, prefix = "") {
|
|
150
|
+
return walkMd(dir)
|
|
151
|
+
.filter((f) => basename(f) === "SKILL.md")
|
|
152
|
+
.map((file) => {
|
|
153
|
+
const md = readMd(file);
|
|
154
|
+
const bare = md.name || basename(dirname(file));
|
|
155
|
+
const name = prefix ? `${prefix}:${bare}` : bare;
|
|
156
|
+
return {
|
|
157
|
+
name: `/${name}`,
|
|
158
|
+
insert: `/${name}`,
|
|
159
|
+
kind: "skill",
|
|
160
|
+
source,
|
|
161
|
+
description: md.description,
|
|
162
|
+
path: file,
|
|
163
|
+
};
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
/** Agents dir: every .md → subagent (invoked by name / @mention). */
|
|
167
|
+
function scanAgents(dir, source) {
|
|
168
|
+
return walkMd(dir).map((file) => {
|
|
169
|
+
const md = readMd(file);
|
|
170
|
+
const name = md.name || basename(file, ".md");
|
|
171
|
+
return {
|
|
172
|
+
name: `@${name}`,
|
|
173
|
+
insert: `@${name}`,
|
|
174
|
+
kind: "agent",
|
|
175
|
+
source,
|
|
176
|
+
description: md.description,
|
|
177
|
+
path: file,
|
|
178
|
+
};
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
function scanRoot(root, source, prefix = "") {
|
|
182
|
+
return [
|
|
183
|
+
...scanCommands(join(root, "commands"), source, prefix),
|
|
184
|
+
...scanSkills(join(root, "skills"), source, prefix),
|
|
185
|
+
...scanAgents(join(root, "agents"), source),
|
|
186
|
+
];
|
|
187
|
+
}
|
|
188
|
+
function enabledPlugins(claudeDir) {
|
|
189
|
+
const installedPath = join(claudeDir, "plugins", "installed_plugins.json");
|
|
190
|
+
if (!existsSync(installedPath))
|
|
191
|
+
return [];
|
|
192
|
+
let installed;
|
|
193
|
+
try {
|
|
194
|
+
installed = JSON.parse(readFileSync(installedPath, "utf-8"));
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
return [];
|
|
198
|
+
}
|
|
199
|
+
let enabled = {};
|
|
200
|
+
try {
|
|
201
|
+
const settings = JSON.parse(readFileSync(join(claudeDir, "settings.json"), "utf-8"));
|
|
202
|
+
enabled = settings.enabledPlugins || {};
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
// no settings → treat all installed as enabled
|
|
206
|
+
}
|
|
207
|
+
const out = [];
|
|
208
|
+
for (const [id, entries] of Object.entries(installed.plugins || {})) {
|
|
209
|
+
if (id in enabled && enabled[id] === false)
|
|
210
|
+
continue;
|
|
211
|
+
const entry = entries?.[0];
|
|
212
|
+
if (!entry?.installPath || !existsSync(entry.installPath))
|
|
213
|
+
continue;
|
|
214
|
+
out.push({ id, name: id.split("@")[0], installPath: entry.installPath });
|
|
215
|
+
}
|
|
216
|
+
return out;
|
|
217
|
+
}
|
|
218
|
+
export function discoverCommands(cwd) {
|
|
219
|
+
const claudeDir = join(homedir(), ".claude");
|
|
220
|
+
const result = BUILTINS.map(([name, description]) => ({
|
|
221
|
+
name,
|
|
222
|
+
insert: name,
|
|
223
|
+
kind: "builtin",
|
|
224
|
+
source: "builtin",
|
|
225
|
+
description,
|
|
226
|
+
}));
|
|
227
|
+
result.push(...scanRoot(claudeDir, "user"));
|
|
228
|
+
if (cwd && existsSync(join(cwd, ".claude"))) {
|
|
229
|
+
result.push(...scanRoot(join(cwd, ".claude"), "project"));
|
|
230
|
+
}
|
|
231
|
+
for (const plugin of enabledPlugins(claudeDir)) {
|
|
232
|
+
result.push(...scanRoot(plugin.installPath, `plugin:${plugin.name}`, plugin.name));
|
|
233
|
+
}
|
|
234
|
+
// Dedup by name, first wins (project > user? Claude Code prefers project; we scanned user first
|
|
235
|
+
// so flip precedence here by keeping the last project entry)
|
|
236
|
+
const byName = new Map();
|
|
237
|
+
for (const c of result) {
|
|
238
|
+
const existing = byName.get(c.name);
|
|
239
|
+
if (!existing || (existing.source === "user" && c.source === "project")) {
|
|
240
|
+
byName.set(c.name, c);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return [...byName.values()];
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/claude/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import React from "react";
|
|
1
2
|
interface HeaderProps {
|
|
2
3
|
claudeCount: number;
|
|
3
4
|
tmuxCount: number;
|
|
4
5
|
}
|
|
5
|
-
export declare function Header({ claudeCount, tmuxCount }: HeaderProps):
|
|
6
|
+
export declare function Header({ claudeCount, tmuxCount }: HeaderProps): React.JSX.Element;
|
|
6
7
|
export {};
|
|
7
8
|
//# sourceMappingURL=Header.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../src/components/Header.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../src/components/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,WAAW;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,MAAM,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,WAAW,qBAuB7D"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import React from "react";
|
|
1
2
|
interface HelpDialogProps {
|
|
2
3
|
width?: number;
|
|
3
4
|
}
|
|
4
|
-
export declare function HelpDialog({ width }: HelpDialogProps):
|
|
5
|
+
export declare function HelpDialog({ width }: HelpDialogProps): React.JSX.Element;
|
|
5
6
|
export {};
|
|
6
7
|
//# sourceMappingURL=HelpDialog.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HelpDialog.d.ts","sourceRoot":"","sources":["../../src/components/HelpDialog.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"HelpDialog.d.ts","sourceRoot":"","sources":["../../src/components/HelpDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAUD,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,eAAe,qBA6BpD"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from "react";
|
|
1
2
|
import type { Session } from "../db/index.js";
|
|
2
3
|
import type { TmuxSession } from "../tmux/detect.js";
|
|
3
4
|
export type DisplayItem = {
|
|
@@ -12,6 +13,6 @@ interface SessionEntryProps {
|
|
|
12
13
|
isSelected: boolean;
|
|
13
14
|
width?: number;
|
|
14
15
|
}
|
|
15
|
-
export declare function SessionEntry({ item, isSelected, width }: SessionEntryProps):
|
|
16
|
+
export declare function SessionEntry({ item, isSelected, width }: SessionEntryProps): React.JSX.Element;
|
|
16
17
|
export {};
|
|
17
18
|
//# sourceMappingURL=SessionEntry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionEntry.d.ts","sourceRoot":"","sources":["../../src/components/SessionEntry.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SessionEntry.d.ts","sourceRoot":"","sources":["../../src/components/SessionEntry.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,KAAK,EAAE,OAAO,EAAgB,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAuBrD,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,WAAW,CAAA;CAAE,CAAC;AAE/C,UAAU,iBAAiB;IACzB,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAkDD,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,iBAAiB,qBAM1E"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from "react";
|
|
1
2
|
import type { Session } from "../db/index.js";
|
|
2
3
|
import type { TmuxSession } from "../tmux/detect.js";
|
|
3
4
|
import { type DisplayItem } from "./SessionEntry.js";
|
|
@@ -7,7 +8,7 @@ interface SessionListProps {
|
|
|
7
8
|
selectedIndex: number;
|
|
8
9
|
width?: number;
|
|
9
10
|
}
|
|
10
|
-
export declare function SessionList({ sessions, tmuxSessions, selectedIndex, width }: SessionListProps):
|
|
11
|
+
export declare function SessionList({ sessions, tmuxSessions, selectedIndex, width }: SessionListProps): React.JSX.Element;
|
|
11
12
|
export declare function getTotalItemCount(sessions: Session[], tmuxSessions: TmuxSession[]): number;
|
|
12
13
|
export declare function getItemAtIndex(sessions: Session[], tmuxSessions: TmuxSession[], index: number): DisplayItem | null;
|
|
13
14
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionList.d.ts","sourceRoot":"","sources":["../../src/components/SessionList.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SessionList.d.ts","sourceRoot":"","sources":["../../src/components/SessionList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEnE,UAAU,gBAAgB;IACxB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,gBAAgB,qBA0C7F;AAGD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,MAAM,CAY1F;AAGD,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,OAAO,EAAE,EACnB,YAAY,EAAE,WAAW,EAAE,EAC3B,KAAK,EAAE,MAAM,GACZ,WAAW,GAAG,IAAI,CAoBpB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import React from "react";
|
|
1
2
|
interface StatusBarProps {
|
|
2
3
|
inTmux: boolean;
|
|
3
4
|
}
|
|
4
|
-
export declare function StatusBar({ inTmux }: StatusBarProps):
|
|
5
|
+
export declare function StatusBar({ inTmux }: StatusBarProps): React.JSX.Element;
|
|
5
6
|
export {};
|
|
6
7
|
//# sourceMappingURL=StatusBar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBar.d.ts","sourceRoot":"","sources":["../../src/components/StatusBar.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StatusBar.d.ts","sourceRoot":"","sources":["../../src/components/StatusBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,UAAU,cAAc;IACtB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,cAAc,qBAiBnD"}
|
|
@@ -73,7 +73,7 @@ export declare function clearChromeActive(id: string): boolean;
|
|
|
73
73
|
*/
|
|
74
74
|
export declare function removeScreenshot(id: string, screenshotPath: string): boolean;
|
|
75
75
|
/**
|
|
76
|
-
* Get all sessions, sorted by
|
|
76
|
+
* Get all sessions, sorted by ID for stable ordering.
|
|
77
77
|
*/
|
|
78
78
|
export declare function getAllSessions(): Session[];
|
|
79
79
|
/**
|
package/dist/db/sessions-json.js
CHANGED
|
@@ -173,7 +173,7 @@ export function removeScreenshot(id, screenshotPath) {
|
|
|
173
173
|
return true;
|
|
174
174
|
}
|
|
175
175
|
/**
|
|
176
|
-
* Get all sessions, sorted by
|
|
176
|
+
* Get all sessions, sorted by ID for stable ordering.
|
|
177
177
|
*/
|
|
178
178
|
export function getAllSessions() {
|
|
179
179
|
ensureSessionsDir();
|
|
@@ -35,5 +35,12 @@ export declare function getQueueCounts(): Map<string, number>;
|
|
|
35
35
|
* covers the case where a message is enqueued while already idle.
|
|
36
36
|
*/
|
|
37
37
|
export declare function drainQueues(sessions: SessionLike[]): void;
|
|
38
|
+
/**
|
|
39
|
+
* Server-owned drain loop. Runs while any queue is non-empty, independent of
|
|
40
|
+
* whether a dashboard client is connected (the WS refresh loop only runs with
|
|
41
|
+
* clients, which previously left queues stuck once the phone closed the app).
|
|
42
|
+
* State comes straight from the session JSON files written by hooks.
|
|
43
|
+
*/
|
|
44
|
+
export declare function ensureDrainLoop(): void;
|
|
38
45
|
export {};
|
|
39
46
|
//# sourceMappingURL=message-queue.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-queue.d.ts","sourceRoot":"","sources":["../../src/server/message-queue.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"message-queue.d.ts","sourceRoot":"","sources":["../../src/server/message-queue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,WAAW;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACd;AAMD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,IAAI,CAavG;AAyCD,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAQrE;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAIjE;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,CAExD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,CAM9E;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAQhG;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,qEAAqE;AACrE,wBAAgB,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAQpD;AAMD;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,CAiDzD;AAMD;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAgBtC"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Messages are queued per tmux target and auto-sent when the session goes idle.
|
|
4
4
|
*/
|
|
5
5
|
import { execFileSync, execSync } from 'child_process';
|
|
6
|
+
import { getAllSessions } from '../db/index.js';
|
|
6
7
|
// ============================================================================
|
|
7
8
|
// Shared tmux text injection helper
|
|
8
9
|
// ============================================================================
|
|
@@ -30,12 +31,19 @@ function getGlobalState() {
|
|
|
30
31
|
if (!g[GLOBAL_KEY]) {
|
|
31
32
|
g[GLOBAL_KEY] = {
|
|
32
33
|
queues: new Map(),
|
|
33
|
-
pendingDrain: new Map()
|
|
34
|
+
pendingDrain: new Map(),
|
|
35
|
+
recentlySent: new Map(),
|
|
36
|
+
drainTimer: null
|
|
34
37
|
};
|
|
35
38
|
}
|
|
36
|
-
|
|
39
|
+
const state = g[GLOBAL_KEY];
|
|
40
|
+
// Backfill fields added after an older module instance created the state (dev HMR)
|
|
41
|
+
state.recentlySent ??= new Map();
|
|
42
|
+
state.drainTimer ??= null;
|
|
43
|
+
return state;
|
|
37
44
|
}
|
|
38
|
-
const
|
|
45
|
+
const globalState = getGlobalState();
|
|
46
|
+
const { queues, pendingDrain, recentlySent } = globalState;
|
|
39
47
|
// ============================================================================
|
|
40
48
|
// Queue operations
|
|
41
49
|
// ============================================================================
|
|
@@ -45,6 +53,7 @@ export function enqueue(target, text) {
|
|
|
45
53
|
}
|
|
46
54
|
const queue = queues.get(target);
|
|
47
55
|
queue.push({ text, queuedAt: Date.now() });
|
|
56
|
+
ensureDrainLoop();
|
|
48
57
|
return queue;
|
|
49
58
|
}
|
|
50
59
|
export function dequeue(target) {
|
|
@@ -114,15 +123,26 @@ export function drainQueues(sessions) {
|
|
|
114
123
|
continue;
|
|
115
124
|
}
|
|
116
125
|
if (session.state !== 'idle') {
|
|
126
|
+
// Session picked up work (hook flipped state) — clear send guard
|
|
117
127
|
pendingDrain.delete(target);
|
|
128
|
+
recentlySent.delete(target);
|
|
118
129
|
continue;
|
|
119
130
|
}
|
|
131
|
+
// After an auto-send, wait for the session to leave idle (UserPromptSubmit
|
|
132
|
+
// hook) before sending the next message, so two queued messages don't get
|
|
133
|
+
// pasted into the same prompt. Falls back after 10s in case the hook never fires.
|
|
134
|
+
const sentAt = recentlySent.get(target);
|
|
135
|
+
if (sentAt !== undefined) {
|
|
136
|
+
if (now - sentAt < RESEND_FALLBACK_MS)
|
|
137
|
+
continue;
|
|
138
|
+
recentlySent.delete(target);
|
|
139
|
+
}
|
|
120
140
|
const pendingTime = pendingDrain.get(target);
|
|
121
141
|
if (pendingTime === undefined) {
|
|
122
142
|
pendingDrain.set(target, now);
|
|
123
143
|
continue;
|
|
124
144
|
}
|
|
125
|
-
if (now - pendingTime <
|
|
145
|
+
if (now - pendingTime < IDLE_GRACE_MS)
|
|
126
146
|
continue;
|
|
127
147
|
pendingDrain.delete(target);
|
|
128
148
|
const message = dequeue(target);
|
|
@@ -130,6 +150,7 @@ export function drainQueues(sessions) {
|
|
|
130
150
|
continue;
|
|
131
151
|
try {
|
|
132
152
|
sendTextToPane(target, message.text);
|
|
153
|
+
recentlySent.set(target, now);
|
|
133
154
|
console.log(`[queue] Auto-sent queued message to ${target}`);
|
|
134
155
|
}
|
|
135
156
|
catch (err) {
|
|
@@ -140,4 +161,36 @@ export function drainQueues(sessions) {
|
|
|
140
161
|
}
|
|
141
162
|
}
|
|
142
163
|
}
|
|
164
|
+
const IDLE_GRACE_MS = 1000;
|
|
165
|
+
const RESEND_FALLBACK_MS = 10_000;
|
|
166
|
+
const DRAIN_INTERVAL_MS = 500;
|
|
167
|
+
/**
|
|
168
|
+
* Server-owned drain loop. Runs while any queue is non-empty, independent of
|
|
169
|
+
* whether a dashboard client is connected (the WS refresh loop only runs with
|
|
170
|
+
* clients, which previously left queues stuck once the phone closed the app).
|
|
171
|
+
* State comes straight from the session JSON files written by hooks.
|
|
172
|
+
*/
|
|
173
|
+
export function ensureDrainLoop() {
|
|
174
|
+
if (globalState.drainTimer)
|
|
175
|
+
return;
|
|
176
|
+
globalState.drainTimer = setInterval(() => {
|
|
177
|
+
if (getQueueCounts().size === 0) {
|
|
178
|
+
if (globalState.drainTimer)
|
|
179
|
+
clearInterval(globalState.drainTimer);
|
|
180
|
+
globalState.drainTimer = null;
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
try {
|
|
184
|
+
drainQueues(getAllSessions());
|
|
185
|
+
}
|
|
186
|
+
catch (err) {
|
|
187
|
+
console.error('[queue] drain loop error:', err);
|
|
188
|
+
}
|
|
189
|
+
}, DRAIN_INTERVAL_MS);
|
|
190
|
+
// Don't keep the process alive just for this timer
|
|
191
|
+
globalState.drainTimer.unref?.();
|
|
192
|
+
}
|
|
193
|
+
// Resume draining if queues survived a module reload (dev HMR keeps globalThis)
|
|
194
|
+
if (getQueueCounts().size > 0)
|
|
195
|
+
ensureDrainLoop();
|
|
143
196
|
//# sourceMappingURL=message-queue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-queue.js","sourceRoot":"","sources":["../../src/server/message-queue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"message-queue.js","sourceRoot":"","sources":["../../src/server/message-queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,11 +28,34 @@ export interface WsClient {
|
|
|
28
28
|
getBufferedAmount?: () => number;
|
|
29
29
|
}
|
|
30
30
|
export type { SessionsWsMessage, SystemStatsMessage } from '../types/ws-messages.js';
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
/** Visible pane changed (or initial). `historySize` is the absolute index right after the last history line. */
|
|
32
|
+
export interface ScreenMessage {
|
|
33
|
+
type: 'screen';
|
|
34
|
+
lines: string[];
|
|
35
|
+
historySize: number;
|
|
36
|
+
alt: boolean;
|
|
37
|
+
cols: number;
|
|
38
|
+
rows: number;
|
|
39
|
+
timestamp: number;
|
|
40
|
+
}
|
|
41
|
+
/** A contiguous block of history lines [start, start+lines.length). */
|
|
42
|
+
export interface HistoryMessage {
|
|
43
|
+
type: 'history';
|
|
44
|
+
start: number;
|
|
45
|
+
lines: string[];
|
|
46
|
+
historySize: number;
|
|
47
|
+
timestamp: number;
|
|
48
|
+
}
|
|
49
|
+
/** History became invalid (pane reflowed on resize, cleared, alt-screen toggled). Client drops history and re-requests. */
|
|
50
|
+
export interface ResetMessage {
|
|
51
|
+
type: 'reset';
|
|
52
|
+
historySize: number;
|
|
53
|
+
alt: boolean;
|
|
54
|
+
cols: number;
|
|
55
|
+
rows: number;
|
|
34
56
|
timestamp: number;
|
|
35
57
|
}
|
|
58
|
+
export type TerminalMessage = ScreenMessage | HistoryMessage | ResetMessage;
|
|
36
59
|
export interface ResizeMessage {
|
|
37
60
|
type: 'resize';
|
|
38
61
|
cols: number;
|
|
@@ -88,8 +111,7 @@ export declare class SessionsWsManager {
|
|
|
88
111
|
export declare class TerminalWsManager {
|
|
89
112
|
private clients;
|
|
90
113
|
private pollTimers;
|
|
91
|
-
private
|
|
92
|
-
private historyDepths;
|
|
114
|
+
private states;
|
|
93
115
|
private config;
|
|
94
116
|
private totalClients;
|
|
95
117
|
private droppedClients;
|
|
@@ -104,7 +126,12 @@ export declare class TerminalWsManager {
|
|
|
104
126
|
* Add a client for a target. Returns false if max clients reached.
|
|
105
127
|
*/
|
|
106
128
|
addClient(client: WsClient, target: string): boolean;
|
|
107
|
-
|
|
129
|
+
/**
|
|
130
|
+
* Serve a client's request for `count` history lines before absolute index `before`.
|
|
131
|
+
* Replies only to the requesting client (each viewer scrolls independently).
|
|
132
|
+
*/
|
|
133
|
+
requestHistory(client: WsClient, target: string, before: number, count: number): void;
|
|
134
|
+
private sendHistoryTail;
|
|
108
135
|
removeClient(client: WsClient, target?: string): void;
|
|
109
136
|
private startPolling;
|
|
110
137
|
private stopPolling;
|
|
@@ -113,7 +140,7 @@ export declare class TerminalWsManager {
|
|
|
113
140
|
}
|
|
114
141
|
export interface WsMessageHandlers {
|
|
115
142
|
resize?: (cols: number, rows: number) => void;
|
|
116
|
-
|
|
143
|
+
historyRequest?: (before: number, count: number) => void;
|
|
117
144
|
}
|
|
118
145
|
export declare function handleWsMessage(msgStr: string, handlers?: WsMessageHandlers): 'pong' | null;
|
|
119
146
|
export type WsPathResult = {
|