claude-mux 0.30.12 → 0.30.13
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 +4 -1
- package/dist/utils/version.d.ts +1 -1
- package/dist/utils/version.js +1 -1
- package/dist/web/client/_app/immutable/chunks/{BvumWaKv.js → BQQ3-rqs.js} +2 -2
- package/dist/web/client/_app/immutable/chunks/{BvumWaKv.js.map → BQQ3-rqs.js.map} +1 -1
- package/dist/web/client/_app/immutable/chunks/{CuqNMNCh.js → BQzv8cqz.js} +2 -2
- package/{web/.svelte-kit/output/client/_app/immutable/chunks/CuqNMNCh.js.map → dist/web/client/_app/immutable/chunks/BQzv8cqz.js.map} +1 -1
- package/dist/web/client/_app/immutable/chunks/{Djib3OX9.js → BvX4FYxp.js} +2 -2
- package/{web/.svelte-kit/output/client/_app/immutable/chunks/Djib3OX9.js.map → dist/web/client/_app/immutable/chunks/BvX4FYxp.js.map} +1 -1
- package/dist/web/client/_app/immutable/chunks/CM0CI9GL.js +3 -0
- package/{web/.svelte-kit/output/client/_app/immutable/chunks/CFx1X5dv.js.map → dist/web/client/_app/immutable/chunks/CM0CI9GL.js.map} +1 -1
- package/dist/web/client/_app/immutable/chunks/{CgY8CVMX.js → CiU8KBun.js} +2 -2
- package/dist/web/client/_app/immutable/chunks/{CgY8CVMX.js.map → CiU8KBun.js.map} +1 -1
- package/{web/.svelte-kit/output/client/_app/immutable/chunks/CFKTes94.js → dist/web/client/_app/immutable/chunks/CtjkAirr.js} +2 -2
- package/dist/web/client/_app/immutable/chunks/{CFKTes94.js.map → CtjkAirr.js.map} +1 -1
- package/{web/.svelte-kit/output/client/_app/immutable/chunks/CZ0xQL03.js → dist/web/client/_app/immutable/chunks/CtlIfY1C.js} +2 -2
- package/dist/web/client/_app/immutable/chunks/{CZ0xQL03.js.map → CtlIfY1C.js.map} +1 -1
- package/{web/.svelte-kit/output/client/_app/immutable/chunks/BMdeNATU.js → dist/web/client/_app/immutable/chunks/Dck--FBb.js} +2 -2
- package/{web/.svelte-kit/output/client/_app/immutable/chunks/BMdeNATU.js.map → dist/web/client/_app/immutable/chunks/Dck--FBb.js.map} +1 -1
- package/dist/web/client/_app/immutable/chunks/{CBFZAP-M.js → DlENCZqZ.js} +2 -2
- package/{web/.svelte-kit/output/client/_app/immutable/chunks/CBFZAP-M.js.map → dist/web/client/_app/immutable/chunks/DlENCZqZ.js.map} +1 -1
- package/{web/.svelte-kit/output/client/_app/immutable/chunks/C_d6SvJ2.js → dist/web/client/_app/immutable/chunks/Q5yhzux8.js} +2 -2
- package/{web/.svelte-kit/output/client/_app/immutable/chunks/C_d6SvJ2.js.map → dist/web/client/_app/immutable/chunks/Q5yhzux8.js.map} +1 -1
- package/{web/.svelte-kit/output/client/_app/immutable/chunks/DMKEzxnc.js → dist/web/client/_app/immutable/chunks/VceCNUd7.js} +2 -2
- package/dist/web/client/_app/immutable/chunks/{DMKEzxnc.js.map → VceCNUd7.js.map} +1 -1
- package/dist/web/client/_app/immutable/chunks/{DATxby6u.js → W5_HMZ5E.js} +2 -2
- package/dist/web/client/_app/immutable/chunks/{DATxby6u.js.map → W5_HMZ5E.js.map} +1 -1
- package/dist/web/client/_app/immutable/chunks/{BY5WGGQP.js → XgSsj0QY.js} +2 -2
- package/dist/web/client/_app/immutable/chunks/{BY5WGGQP.js.map → XgSsj0QY.js.map} +1 -1
- package/dist/web/client/_app/immutable/chunks/{BwPDlhmz.js → cvsGFvDx.js} +2 -2
- package/dist/web/client/_app/immutable/chunks/{BwPDlhmz.js.map → cvsGFvDx.js.map} +1 -1
- package/dist/web/client/_app/immutable/chunks/{B3wFHwBp.js → sULMfRFG.js} +10 -10
- package/dist/web/client/_app/immutable/chunks/{B3wFHwBp.js.map → sULMfRFG.js.map} +1 -1
- package/dist/web/client/_app/immutable/entry/{app.D6ZoWARI.js → app.BwTbN8wB.js} +3 -3
- package/{web/.svelte-kit/output/client/_app/immutable/entry/app.D6ZoWARI.js.map → dist/web/client/_app/immutable/entry/app.BwTbN8wB.js.map} +1 -1
- package/dist/web/client/_app/immutable/entry/start.B2ZPizAt.js +2 -0
- package/dist/web/client/_app/immutable/entry/start.B2ZPizAt.js.map +1 -0
- package/{web/.svelte-kit/output/client/_app/immutable/nodes/0.DQpEqRwc.js → dist/web/client/_app/immutable/nodes/0.BnHV-ElR.js} +2 -2
- package/{web/.svelte-kit/output/client/_app/immutable/nodes/0.DQpEqRwc.js.map → dist/web/client/_app/immutable/nodes/0.BnHV-ElR.js.map} +1 -1
- package/dist/web/client/_app/immutable/nodes/{1.DZtqO_vJ.js → 1.Dc3ryOCf.js} +2 -2
- package/dist/web/client/_app/immutable/nodes/{1.DZtqO_vJ.js.map → 1.Dc3ryOCf.js.map} +1 -1
- package/dist/web/client/_app/immutable/nodes/{2.C5Qs1_oy.js → 2.DUrpAceY.js} +2 -2
- package/dist/web/client/_app/immutable/nodes/{2.C5Qs1_oy.js.map → 2.DUrpAceY.js.map} +1 -1
- package/dist/web/client/_app/immutable/nodes/{3.BU0CxqHT.js → 3.BaCofjAn.js} +2 -2
- package/dist/web/client/_app/immutable/nodes/{3.BU0CxqHT.js.map → 3.BaCofjAn.js.map} +1 -1
- package/dist/web/client/_app/immutable/nodes/{4.DUZfcDfX.js → 4.v1wYkrvS.js} +2 -2
- package/dist/web/client/_app/immutable/nodes/{4.DUZfcDfX.js.map → 4.v1wYkrvS.js.map} +1 -1
- package/dist/web/client/_app/immutable/nodes/{5.BUR8dPHU.js → 5.Bn4A77jK.js} +2 -2
- package/dist/web/client/_app/immutable/nodes/{5.BUR8dPHU.js.map → 5.Bn4A77jK.js.map} +1 -1
- package/dist/web/client/_app/immutable/nodes/{6.C0sXY_AI.js → 6.C2hEoITj.js} +2 -2
- package/dist/web/client/_app/immutable/nodes/{6.C0sXY_AI.js.map → 6.C2hEoITj.js.map} +1 -1
- package/dist/web/client/_app/immutable/nodes/{7.BwxdLqVN.js → 7.BcHOjWdp.js} +2 -2
- package/dist/web/client/_app/immutable/nodes/{7.BwxdLqVN.js.map → 7.BcHOjWdp.js.map} +1 -1
- package/dist/web/client/_app/immutable/nodes/{8.D7XNfIoQ.js → 8.D7NtqIYy.js} +2 -2
- package/dist/web/client/_app/immutable/nodes/{8.D7XNfIoQ.js.map → 8.D7NtqIYy.js.map} +1 -1
- package/dist/web/client/_app/immutable/nodes/{9.DK1PnFTi.js → 9.D-211z9-.js} +2 -2
- package/dist/web/client/_app/immutable/nodes/{9.DK1PnFTi.js.map → 9.D-211z9-.js.map} +1 -1
- package/dist/web/client/_app/version.json +1 -1
- package/dist/web/server/chunks/{0-C3qbHxYN.js → 0-CvglVGCY.js} +14 -14
- package/dist/web/server/chunks/{0-C3qbHxYN.js.map → 0-CvglVGCY.js.map} +1 -1
- package/dist/web/server/chunks/{1-D8Dnq6A4.js → 1-D-gJDFrG.js} +4 -4
- package/dist/web/server/chunks/{1-D8Dnq6A4.js.map → 1-D-gJDFrG.js.map} +1 -1
- package/dist/web/server/chunks/{2-D-erc0ov.js → 2-BCmEU5Qq.js} +13 -13
- package/dist/web/server/chunks/{2-D-erc0ov.js.map → 2-BCmEU5Qq.js.map} +1 -1
- package/dist/web/server/chunks/{3-DiIyiFTh.js → 3-CHn5Kw-T.js} +10 -10
- package/dist/web/server/chunks/{3-DiIyiFTh.js.map → 3-CHn5Kw-T.js.map} +1 -1
- package/dist/web/server/chunks/{4-C9dfruxJ.js → 4-Cxg7VcZ7.js} +12 -12
- package/dist/web/server/chunks/{4-C9dfruxJ.js.map → 4-Cxg7VcZ7.js.map} +1 -1
- package/dist/web/server/chunks/{5-CNxH6-gY.js → 5-DSgvnHF_.js} +9 -9
- package/dist/web/server/chunks/{5-CNxH6-gY.js.map → 5-DSgvnHF_.js.map} +1 -1
- package/dist/web/server/chunks/{6-DZFHsFC1.js → 6-B0rymWRR.js} +5 -5
- package/dist/web/server/chunks/{6-DZFHsFC1.js.map → 6-B0rymWRR.js.map} +1 -1
- package/dist/web/server/chunks/{7-BrAqYzww.js → 7-CNomBJux.js} +10 -10
- package/dist/web/server/chunks/{7-BrAqYzww.js.map → 7-CNomBJux.js.map} +1 -1
- package/dist/web/server/chunks/{8-hNuZYHp2.js → 8-TYbX-1bO.js} +12 -12
- package/dist/web/server/chunks/{8-hNuZYHp2.js.map → 8-TYbX-1bO.js.map} +1 -1
- package/dist/web/server/chunks/{9-KM8ukvws.js → 9-XGQQvTLc.js} +9 -9
- package/dist/web/server/chunks/{9-KM8ukvws.js.map → 9-XGQQvTLc.js.map} +1 -1
- package/dist/web/server/chunks/{_layout.svelte-DTdVhWSL.js → _layout.svelte-yrPX5VFm.js} +4 -4
- package/dist/web/server/chunks/{_layout.svelte-DTdVhWSL.js.map → _layout.svelte-yrPX5VFm.js.map} +1 -1
- package/dist/web/server/chunks/{_page.svelte-DlJs45B3.js → _page.svelte-C_kFA0Lq.js} +3 -3
- package/dist/web/server/chunks/{_page.svelte-DlJs45B3.js.map → _page.svelte-C_kFA0Lq.js.map} +1 -1
- package/dist/web/server/chunks/{_page.svelte-Bmge0Cj4.js → _page.svelte-DvxpwsgS.js} +5 -5
- package/dist/web/server/chunks/{_page.svelte-Bmge0Cj4.js.map → _page.svelte-DvxpwsgS.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-DFw1dZh6.js → _server.ts-CNBy2p2U.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-DFw1dZh6.js.map → _server.ts-CNBy2p2U.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-C837tDPt.js → _server.ts-KbQyErIR.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-C837tDPt.js.map → _server.ts-KbQyErIR.js.map} +1 -1
- package/dist/web/server/chunks/{checkbox-DEKquZNV.js → checkbox-DiJTAtHi.js} +2 -2
- package/dist/web/server/chunks/{checkbox-DEKquZNV.js.map → checkbox-DiJTAtHi.js.map} +1 -1
- package/dist/web/server/chunks/{create-id-CGB-ZsMW.js → create-id-DpoSQWrl.js} +2 -2
- package/dist/web/server/chunks/{create-id-CGB-ZsMW.js.map → create-id-DpoSQWrl.js.map} +1 -1
- package/dist/web/server/chunks/{drafts.svelte-DoF8wcyh.js → drafts.svelte-DsFAtH-s.js} +2 -2
- package/dist/web/server/chunks/{drafts.svelte-DoF8wcyh.js.map → drafts.svelte-DsFAtH-s.js.map} +1 -1
- package/dist/web/server/chunks/{version-Clbh-EaZ.js → version-BqEJmw2g.js} +2 -2
- package/dist/web/server/chunks/version-BqEJmw2g.js.map +1 -0
- package/dist/web/server/index.js +1 -1
- package/dist/web/server/index.js.map +1 -1
- package/dist/web/server/manifest.js +17 -17
- package/dist/web/server/manifest.js.map +1 -1
- package/package.json +1 -1
- package/src/utils/version.ts +1 -1
- package/web/.svelte-kit/adapter-bun/chunks/internal2.js +1 -1
- package/web/.svelte-kit/adapter-bun/chunks/internal2.js.map +1 -1
- package/web/.svelte-kit/adapter-bun/chunks/version.js +1 -1
- package/web/.svelte-kit/adapter-bun/chunks/version.js.map +1 -1
- package/web/.svelte-kit/adapter-bun/entries/pages/session/_target_/_page.svelte.js.map +1 -1
- package/web/.svelte-kit/adapter-bun/manifest-full.js +1 -1
- package/web/.svelte-kit/adapter-bun/manifest.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/0.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/1.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/2.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/3.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/4.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/5.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/6.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/7.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/8.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/9.js +1 -1
- package/web/.svelte-kit/generated/server/internal.js +1 -1
- package/web/.svelte-kit/output/client/.vite/manifest.json +206 -206
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{BvumWaKv.js → BQQ3-rqs.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{BvumWaKv.js.map → BQQ3-rqs.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{CuqNMNCh.js → BQzv8cqz.js} +2 -2
- package/{dist/web/client/_app/immutable/chunks/CuqNMNCh.js.map → web/.svelte-kit/output/client/_app/immutable/chunks/BQzv8cqz.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{Djib3OX9.js → BvX4FYxp.js} +2 -2
- package/{dist/web/client/_app/immutable/chunks/Djib3OX9.js.map → web/.svelte-kit/output/client/_app/immutable/chunks/BvX4FYxp.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/CM0CI9GL.js +3 -0
- package/{dist/web/client/_app/immutable/chunks/CFx1X5dv.js.map → web/.svelte-kit/output/client/_app/immutable/chunks/CM0CI9GL.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{CgY8CVMX.js → CiU8KBun.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{CgY8CVMX.js.map → CiU8KBun.js.map} +1 -1
- package/{dist/web/client/_app/immutable/chunks/CFKTes94.js → web/.svelte-kit/output/client/_app/immutable/chunks/CtjkAirr.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{CFKTes94.js.map → CtjkAirr.js.map} +1 -1
- package/{dist/web/client/_app/immutable/chunks/CZ0xQL03.js → web/.svelte-kit/output/client/_app/immutable/chunks/CtlIfY1C.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{CZ0xQL03.js.map → CtlIfY1C.js.map} +1 -1
- package/{dist/web/client/_app/immutable/chunks/BMdeNATU.js → web/.svelte-kit/output/client/_app/immutable/chunks/Dck--FBb.js} +2 -2
- package/{dist/web/client/_app/immutable/chunks/BMdeNATU.js.map → web/.svelte-kit/output/client/_app/immutable/chunks/Dck--FBb.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{CBFZAP-M.js → DlENCZqZ.js} +2 -2
- package/{dist/web/client/_app/immutable/chunks/CBFZAP-M.js.map → web/.svelte-kit/output/client/_app/immutable/chunks/DlENCZqZ.js.map} +1 -1
- package/{dist/web/client/_app/immutable/chunks/C_d6SvJ2.js → web/.svelte-kit/output/client/_app/immutable/chunks/Q5yhzux8.js} +2 -2
- package/{dist/web/client/_app/immutable/chunks/C_d6SvJ2.js.map → web/.svelte-kit/output/client/_app/immutable/chunks/Q5yhzux8.js.map} +1 -1
- package/{dist/web/client/_app/immutable/chunks/DMKEzxnc.js → web/.svelte-kit/output/client/_app/immutable/chunks/VceCNUd7.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{DMKEzxnc.js.map → VceCNUd7.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{DATxby6u.js → W5_HMZ5E.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{DATxby6u.js.map → W5_HMZ5E.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{BY5WGGQP.js → XgSsj0QY.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{BY5WGGQP.js.map → XgSsj0QY.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{BwPDlhmz.js → cvsGFvDx.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{BwPDlhmz.js.map → cvsGFvDx.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{B3wFHwBp.js → sULMfRFG.js} +10 -10
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{B3wFHwBp.js.map → sULMfRFG.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/entry/{app.D6ZoWARI.js → app.BwTbN8wB.js} +3 -3
- package/{dist/web/client/_app/immutable/entry/app.D6ZoWARI.js.map → web/.svelte-kit/output/client/_app/immutable/entry/app.BwTbN8wB.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/entry/start.B2ZPizAt.js +2 -0
- package/web/.svelte-kit/output/client/_app/immutable/entry/start.B2ZPizAt.js.map +1 -0
- package/{dist/web/client/_app/immutable/nodes/0.DQpEqRwc.js → web/.svelte-kit/output/client/_app/immutable/nodes/0.BnHV-ElR.js} +2 -2
- package/{dist/web/client/_app/immutable/nodes/0.DQpEqRwc.js.map → web/.svelte-kit/output/client/_app/immutable/nodes/0.BnHV-ElR.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{1.DZtqO_vJ.js → 1.Dc3ryOCf.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{1.DZtqO_vJ.js.map → 1.Dc3ryOCf.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{2.C5Qs1_oy.js → 2.DUrpAceY.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{2.C5Qs1_oy.js.map → 2.DUrpAceY.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{3.BU0CxqHT.js → 3.BaCofjAn.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{3.BU0CxqHT.js.map → 3.BaCofjAn.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/4.v1wYkrvS.js +2 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{4.DUZfcDfX.js.map → 4.v1wYkrvS.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/5.Bn4A77jK.js +2 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{5.BUR8dPHU.js.map → 5.Bn4A77jK.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{6.C0sXY_AI.js → 6.C2hEoITj.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{6.C0sXY_AI.js.map → 6.C2hEoITj.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{7.BwxdLqVN.js → 7.BcHOjWdp.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{7.BwxdLqVN.js.map → 7.BcHOjWdp.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/8.D7NtqIYy.js +2 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{8.D7XNfIoQ.js.map → 8.D7NtqIYy.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/9.D-211z9-.js +2 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{9.DK1PnFTi.js.map → 9.D-211z9-.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/version.json +1 -1
- package/web/.svelte-kit/output/server/chunks/internal2.js +1 -1
- package/web/.svelte-kit/output/server/chunks/internal2.js.map +1 -1
- package/web/.svelte-kit/output/server/chunks/version.js +1 -1
- package/web/.svelte-kit/output/server/chunks/version.js.map +1 -1
- package/web/.svelte-kit/output/server/entries/pages/session/_target_/_page.svelte.js.map +1 -1
- package/web/.svelte-kit/output/server/manifest-full.js +1 -1
- package/web/.svelte-kit/output/server/manifest.js +1 -1
- package/web/.svelte-kit/output/server/nodes/0.js +1 -1
- package/web/.svelte-kit/output/server/nodes/1.js +1 -1
- package/web/.svelte-kit/output/server/nodes/2.js +1 -1
- package/web/.svelte-kit/output/server/nodes/3.js +1 -1
- package/web/.svelte-kit/output/server/nodes/4.js +1 -1
- package/web/.svelte-kit/output/server/nodes/5.js +1 -1
- package/web/.svelte-kit/output/server/nodes/6.js +1 -1
- package/web/.svelte-kit/output/server/nodes/7.js +1 -1
- package/web/.svelte-kit/output/server/nodes/8.js +1 -1
- package/web/.svelte-kit/output/server/nodes/9.js +1 -1
- package/web/src/routes/session/[target]/+page.svelte +24 -1
- package/dist/web/client/_app/immutable/chunks/CFx1X5dv.js +0 -3
- package/dist/web/client/_app/immutable/entry/start.CGC2zRGN.js +0 -2
- package/dist/web/client/_app/immutable/entry/start.CGC2zRGN.js.map +0 -1
- package/dist/web/server/chunks/version-Clbh-EaZ.js.map +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/CFx1X5dv.js +0 -3
- package/web/.svelte-kit/output/client/_app/immutable/entry/start.CGC2zRGN.js +0 -2
- package/web/.svelte-kit/output/client/_app/immutable/entry/start.CGC2zRGN.js.map +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/4.DUZfcDfX.js +0 -2
- package/web/.svelte-kit/output/client/_app/immutable/nodes/5.BUR8dPHU.js +0 -2
- package/web/.svelte-kit/output/client/_app/immutable/nodes/8.D7XNfIoQ.js +0 -2
- package/web/.svelte-kit/output/client/_app/immutable/nodes/9.DK1PnFTi.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CBFZAP-M.js","sources":["../../../../../../../node_modules/.bun/svelte@5.57.3/node_modules/svelte/src/internal/client/dom/elements/bindings/size.js","../../../../../../../src/transcript/json.ts","../../../../../../src/lib/stores/transcript.svelte.ts","../../../../../../src/lib/components/DictateButton.svelte","../../../../../../src/lib/quote.ts","../../../../../../src/lib/components/QuoteSelection.svelte","../../../../../../src/lib/dictation.ts","../../../../../../../src/tmux/answer-keys.ts","../../../../../../src/lib/components/DialogCard.svelte","../../../../../../src/lib/components/LoginCard.svelte","../../../../../../src/lib/components/RewindCard.svelte","../../../../../../../src/transcript/mcp.ts","../../../../../../src/lib/tool-icons.ts","../../../../../../src/lib/components/ToolLabel.svelte","../../../../../../../src/transcript/forks.ts","../../../../../../../src/transcript/grilling.ts","../../../../../../../src/transcript/tool-groups.ts","../../../../../../src/lib/components/TurnChangesCard.svelte","../../../../../../src/lib/components/TranscriptView.svelte"],"sourcesContent":["import { effect, teardown } from '../../../reactivity/effects.js';\nimport { untrack } from '../../../runtime.js';\n\n/**\n * We create one listener for all elements\n * @see {@link https://groups.google.com/a/chromium.org/g/blink-dev/c/z6ienONUb5A/m/F5-VcUZtBAAJ Explanation}\n */\nclass ResizeObserverSingleton {\n\t/** */\n\t#listeners = new WeakMap();\n\n\t/** @type {ResizeObserver | undefined} */\n\t#observer;\n\n\t/** @type {ResizeObserverOptions} */\n\t#options;\n\n\t/** @static */\n\tstatic entries = new WeakMap();\n\n\t/** @param {ResizeObserverOptions} options */\n\tconstructor(options) {\n\t\tthis.#options = options;\n\t}\n\n\t/**\n\t * @param {Element} element\n\t * @param {(entry: ResizeObserverEntry) => any} listener\n\t */\n\tobserve(element, listener) {\n\t\tvar listeners = this.#listeners.get(element) || new Set();\n\t\tlisteners.add(listener);\n\n\t\tthis.#listeners.set(element, listeners);\n\t\tthis.#getObserver().observe(element, this.#options);\n\n\t\treturn () => {\n\t\t\tvar listeners = this.#listeners.get(element);\n\t\t\tlisteners.delete(listener);\n\n\t\t\tif (listeners.size === 0) {\n\t\t\t\tthis.#listeners.delete(element);\n\t\t\t\t/** @type {ResizeObserver} */ (this.#observer).unobserve(element);\n\t\t\t}\n\t\t};\n\t}\n\n\t#getObserver() {\n\t\treturn (\n\t\t\tthis.#observer ??\n\t\t\t(this.#observer = new ResizeObserver(\n\t\t\t\t/** @param {any} entries */ (entries) => {\n\t\t\t\t\tfor (var entry of entries) {\n\t\t\t\t\t\tResizeObserverSingleton.entries.set(entry.target, entry);\n\t\t\t\t\t\tfor (var listener of this.#listeners.get(entry.target) || []) {\n\t\t\t\t\t\t\tlistener(entry);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t))\n\t\t);\n\t}\n}\n\nvar resize_observer_content_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'content-box'\n});\n\nvar resize_observer_border_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'border-box'\n});\n\nvar resize_observer_device_pixel_content_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'device-pixel-content-box'\n});\n\n/**\n * @param {Element} element\n * @param {'contentRect' | 'contentBoxSize' | 'borderBoxSize' | 'devicePixelContentBoxSize'} type\n * @param {(entry: keyof ResizeObserverEntry) => void} set\n */\nexport function bind_resize_observer(element, type, set) {\n\tvar observer =\n\t\ttype === 'contentRect' || type === 'contentBoxSize'\n\t\t\t? resize_observer_content_box\n\t\t\t: type === 'borderBoxSize'\n\t\t\t\t? resize_observer_border_box\n\t\t\t\t: resize_observer_device_pixel_content_box;\n\n\tvar unsub = observer.observe(element, /** @param {any} entry */ (entry) => set(entry[type]));\n\tteardown(unsub);\n}\n\n/**\n * @param {HTMLElement} element\n * @param {'clientWidth' | 'clientHeight' | 'offsetWidth' | 'offsetHeight'} type\n * @param {(size: number) => void} set\n */\nexport function bind_element_size(element, type, set) {\n\tvar unsub = resize_observer_border_box.observe(element, () => set(element[type]));\n\n\teffect(() => {\n\t\t// The update could contain reads which should be ignored\n\t\tuntrack(() => set(element[type]));\n\t\treturn unsub;\n\t});\n}\n","/**\n * Narrowing helpers for the untyped records that come out of Claude Code's\n * JSONL. Every field is optional in practice — the format is undocumented and\n * shifts between versions — so readers return null (or 0) rather than throw.\n */\n\nexport function asRecord(value: unknown): Record<string, unknown> | null {\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nexport function readString(value: unknown): string | null {\n return typeof value === \"string\" ? value : null;\n}\n\n/** A finite number off a record, or 0 — the sane default for a token count. */\nexport function readNumber(record: Record<string, unknown>, key: string): number {\n const value = record[key];\n return typeof value === \"number\" && Number.isFinite(value) ? value : 0;\n}\n","import { browser } from '$app/environment';\nimport { ReliableWebSocket } from './websocket-base.svelte';\nimport type { ContextUsage } from '../../../../src/transcript/context.js';\nimport type { TranscriptEntry } from '../../../../src/transcript/parser.js';\nimport type { SubagentPayload } from '../../../../src/server/ws-handlers.js';\n\nexport type { SubagentPayload };\n\ninterface SnapshotMsg {\n\ttype: 'snapshot';\n\tentries: TranscriptEntry[];\n\tfirstIndex: number;\n\tsubagents: SubagentPayload[];\n\tcontext: ContextUsage | null;\n\tmodel?: string | null;\n\tavailable: boolean;\n}\ninterface HistoryMsg {\n\ttype: 'history';\n\tentries: TranscriptEntry[];\n\tfirstIndex: number;\n}\ninterface EntriesMsg {\n\ttype: 'entries';\n\tentries: TranscriptEntry[];\n\tindices: number[];\n}\ninterface SubagentsMsg {\n\ttype: 'subagents';\n\tsubagents: SubagentPayload[];\n}\ninterface ContextMsg {\n\ttype: 'context';\n\tcontext: ContextUsage;\n}\ninterface ModelMsg {\n\ttype: 'model';\n\tmodel: string;\n}\ntype TranscriptMsg = SnapshotMsg | HistoryMsg | EntriesMsg | SubagentsMsg | ContextMsg | ModelMsg;\n\n/** Entries per \"load earlier\" request. */\nconst HISTORY_PAGE = 200;\n\n/**\n * Transcript view model: an ordered list of entries upserted by id.\n * The server sends a full snapshot on attach and per-entry deltas afterwards\n * (an updated entry — e.g. a tool call receiving its result — keeps its\n * position; a new one is appended).\n */\nexport class TranscriptStore extends ReliableWebSocket {\n\tentries = $state<TranscriptEntry[]>([]);\n\t/** All subagents, keyed by their own id — some have no parent Task id. */\n\tsubagents = $state<Record<string, SubagentPayload>>({});\n\t/** The subset that can be attached to a Task card, keyed by that card's id. */\n\tsubagentsByTask: Record<string, SubagentPayload> = $derived(\n\t\tObject.fromEntries(\n\t\t\tObject.values(this.subagents)\n\t\t\t\t.filter((sub) => sub.toolUseId)\n\t\t\t\t.map((sub) => [sub.toolUseId as string, sub])\n\t\t)\n\t);\n\t/** Context window in use as of the last API response, null before one. */\n\tcontext = $state<ContextUsage | null>(null);\n\t/** The model on the latest assistant line, as the API names it. */\n\tmodel = $state<string | null>(null);\n\t/** False until the session's JSONL file has been found and read. */\n\tavailable = $state(false);\n\t/** Entries appended since attach (page diffs it for the \"new below\" pill). */\n\tappended = $state(0);\n\t/**\n\t * Position of `entries[0]` in the session's whole transcript: the server\n\t * sends only the tail, so this is how many older entries exist. Zero once\n\t * the reader has pulled the whole thing back.\n\t */\n\tfirstIndex = $state(0);\n\t/** A history request is in flight (the button waits rather than stacking). */\n\tloadingEarlier = $state(false);\n\t/** Resolved when the slice a `loadEarlier()` caller asked for has landed. */\n\tprivate pendingEarlier: (() => void) | null = null;\n\n\tprivate indexById = new Map<string, number>();\n\tprivate sessionId: string | null = null;\n\t/** Set when this store reads one of the session's subagents instead of the session. */\n\tprivate agentId: string | null = null;\n\t/** The path the session's machine is reached through: '' here, `/fleet/<id>` elsewhere. */\n\tprivate base = '';\n\t/** What the socket reaches (`routeMachine().address`): a new base to the same address keeps it. */\n\tprivate address = '';\n\n\tprotected getWsUrl(): string {\n\t\tconst protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';\n\t\tconst session = encodeURIComponent(this.sessionId!);\n\t\tconst agent = this.agentId ? `/agents/${encodeURIComponent(this.agentId)}` : '';\n\t\treturn `${protocol}//${window.location.host}${this.base}/api/sessions/${session}${agent}/transcript/stream`;\n\t}\n\n\tprotected getLogPrefix(): string {\n\t\treturn '[transcript]';\n\t}\n\n\tprotected shouldReconnect(): boolean {\n\t\treturn this.sessionId !== null;\n\t}\n\n\tprotected handleMessage(event: MessageEvent): void {\n\t\tlet data: TranscriptMsg;\n\t\ttry {\n\t\t\tdata = JSON.parse(event.data);\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\t\tswitch (data.type) {\n\t\t\tcase 'snapshot':\n\t\t\t\tthis.applySnapshot(data);\n\t\t\t\tbreak;\n\t\t\tcase 'history':\n\t\t\t\tthis.applyHistory(data);\n\t\t\t\tbreak;\n\t\t\tcase 'entries':\n\t\t\t\tthis.applyEntries(data);\n\t\t\t\tbreak;\n\t\t\tcase 'subagents':\n\t\t\t\tthis.applySubagents(data.subagents);\n\t\t\t\tbreak;\n\t\t\tcase 'context':\n\t\t\t\tthis.context = data.context;\n\t\t\t\tbreak;\n\t\t\tcase 'model':\n\t\t\t\tthis.model = data.model;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tprivate applySnapshot(msg: SnapshotMsg): void {\n\t\tthis.entries = msg.entries;\n\t\tthis.available = msg.available;\n\t\tthis.firstIndex = msg.firstIndex;\n\t\tthis.settleEarlier();\n\t\tthis.context = msg.context ?? null;\n\t\tthis.model = msg.model ?? null;\n\t\tthis.reindex();\n\t\tthis.subagents = {};\n\t\tthis.applySubagents(msg.subagents ?? []);\n\t}\n\n\t/** An older slice, prepended in front of what is already held. */\n\tprivate applyHistory(msg: HistoryMsg): void {\n\t\t// A snapshot may have overtaken the request; anything already held wins.\n\t\tconst older = msg.entries.filter((entry) => !this.indexById.has(entry.id));\n\t\tif (older.length > 0) {\n\t\t\tthis.entries = [...older, ...this.entries];\n\t\t\tthis.firstIndex = msg.firstIndex;\n\t\t\tthis.reindex();\n\t\t}\n\t\tthis.settleEarlier();\n\t}\n\n\t/** Ends the wait a `loadEarlier()` caller is in, whatever answered it. */\n\tprivate settleEarlier(): void {\n\t\tthis.loadingEarlier = false;\n\t\tthis.pendingEarlier?.();\n\t\tthis.pendingEarlier = null;\n\t}\n\n\tprivate reindex(): void {\n\t\tthis.indexById = new Map(this.entries.map((entry, i) => [entry.id, i]));\n\t}\n\n\t/**\n\t * Ask the server for the slice before the oldest entry held. Resolves once\n\t * those entries are in `entries`, so a caller holding the reader's scroll\n\t * position knows when to restore it. Resolves immediately when there is\n\t * nothing older or a request is already out.\n\t */\n\tloadEarlier(): Promise<void> {\n\t\tif (this.firstIndex <= 0 || this.loadingEarlier) return Promise.resolve();\n\t\tconst sent = this.send(\n\t\t\tJSON.stringify({\n\t\t\t\ttype: 'history_request',\n\t\t\t\tbefore: this.firstIndex,\n\t\t\t\tcount: HISTORY_PAGE\n\t\t\t})\n\t\t);\n\t\tif (!sent) return Promise.resolve();\n\t\tthis.loadingEarlier = true;\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.pendingEarlier = resolve;\n\t\t});\n\t}\n\n\t/**\n\t * Ask for everything an agent ran and reported. Cards arrive lean — the\n\t * tail of the activity, no report — and this is what opening one sends.\n\t */\n\tloadSubagent(agentId: string): void {\n\t\tconst held = this.subagents[agentId];\n\t\tif (!held || held.full) return;\n\t\tthis.send(JSON.stringify({ type: 'subagent_request', agentId }));\n\t}\n\n\t/**\n\t * Subagents arrive lean unless their card was opened. A lean update for an\n\t * agent already held in full keeps what is held and appends the new tail,\n\t * so an open card does not lose its list to the next live update.\n\t */\n\tprivate applySubagents(subagents: SubagentPayload[]): void {\n\t\tfor (const sub of subagents) {\n\t\t\tconst held = this.subagents[sub.agentId];\n\t\t\tif (held?.full && !sub.full) {\n\t\t\t\tconst seen = new Set(sub.activity.map((a) => a.id));\n\t\t\t\tconst kept = held.activity.filter((a) => !seen.has(a.id));\n\t\t\t\tthis.subagents[sub.agentId] = {\n\t\t\t\t\t...sub,\n\t\t\t\t\tactivity: [...kept, ...sub.activity],\n\t\t\t\t\ttrimmed: Math.max(0, sub.trimmed - kept.length),\n\t\t\t\t\treport: sub.report ?? held.report,\n\t\t\t\t\tfull: true\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.subagents[sub.agentId] = sub;\n\t\t}\n\t}\n\n\tprivate applyEntries(msg: EntriesMsg): void {\n\t\tthis.available = true;\n\t\tfor (const [i, entry] of msg.entries.entries()) {\n\t\t\tconst index = this.indexById.get(entry.id);\n\t\t\tif (index !== undefined) {\n\t\t\t\tthis.entries[index] = entry;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// An update to an entry older than the tail this client holds: it\n\t\t\t// belongs in the gap above, and arrives with the history slice.\n\t\t\tif (msg.indices[i] < this.firstIndex) continue;\n\t\t\tthis.indexById.set(entry.id, this.entries.length);\n\t\t\tthis.entries.push(entry);\n\t\t\tthis.appended++;\n\t\t}\n\t}\n\n\t/**\n\t * Single entry point: pass a claude-mux session id to view its transcript,\n\t * or null to detach. Mirrors terminalStore.setTarget's lifecycle contract.\n\t * With `agentId`, the store holds that subagent's transcript instead, and\n\t * `subagents` holds that one agent. `base` names the session's machine\n\t * (`machineBase()`), and `address` what it reaches: when only the base\n\t * changes (the machine's id changed), the next connect takes the new base\n\t * and the open socket and its entries stay.\n\t */\n\tsetSession(sessionId: string | null | undefined, agentId: string | null = null, base = '', address = base): void {\n\t\tif (!browser) return;\n\t\tconst next = sessionId ?? null;\n\t\tconst nextAgent = next ? agentId : null;\n\n\t\tif (this.sessionId === next && this.agentId === nextAgent && this.address === address) {\n\t\t\tthis.base = base;\n\t\t\tif (next === null) return;\n\t\t\tif (this.ws) return;\n\t\t\tthis.doConnect();\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.ws) {\n\t\t\tthis.sessionId = null; // suppress reconnect in doDisconnect\n\t\t\tthis.doDisconnect();\n\t\t}\n\t\tthis.entries = [];\n\t\tthis.subagents = {};\n\t\tthis.context = null;\n\t\tthis.available = false;\n\t\tthis.appended = 0;\n\t\tthis.firstIndex = 0;\n\t\tthis.settleEarlier();\n\t\tthis.resetReceived();\n\t\tthis.indexById = new Map();\n\t\tthis.sessionId = next;\n\t\tthis.agentId = nextAgent;\n\t\tthis.base = base;\n\t\tthis.address = address;\n\n\t\tif (next) this.doConnect();\n\t}\n}\n\nexport const transcriptStore = new TranscriptStore();\n","<script lang=\"ts\" module>\n\tlet made = 0;\n</script>\n\n<script lang=\"ts\">\n\timport { voiceStore } from '$lib/stores/voice.svelte';\n\n\tinterface Props {\n\t\t/** The session the words are for; it says where spoken slash commands are looked up. */\n\t\ttarget: string;\n\t\t/** Given what was said, to put in the field this button sits beside. */\n\t\tonText: (text: string) => void;\n\t\tdisabled?: boolean;\n\t}\n\n\tlet { target, onText, disabled = false }: Props = $props();\n\n\t/**\n\t * A microphone for one field. The composer's records straight into the\n\t * session; this one only fills the field beside it, to be read, edited and\n\t * sent with the rest of the form. There is one microphone on the page, so\n\t * while another field or the composer has it this button waits.\n\t */\n\tconst field = `field-${++made}`;\n\tconst mine = $derived(voiceStore.isOwnedBy(target, field));\n\tconst status = $derived(mine ? voiceStore.status : 'idle');\n\tconst elsewhere = $derived(voiceStore.isActive && !mine);\n\tconst label = $derived(\n\t\tstatus === 'recording'\n\t\t\t? 'Stop and write what you said here'\n\t\t\t: status === 'transcribing'\n\t\t\t\t? 'Transcribing. Tap to cancel'\n\t\t\t\t: elsewhere\n\t\t\t\t\t? 'The microphone is in use'\n\t\t\t\t\t: 'Answer by voice'\n\t);\n\n\tasync function toggle() {\n\t\tif (status === 'transcribing') return voiceStore.cancelTranscribing();\n\t\tif (status === 'recording') {\n\t\t\tconst said = await voiceStore.stop();\n\t\t\tif (said) onText(said.text);\n\t\t\treturn;\n\t\t}\n\t\tawait voiceStore.startRecording(target, field);\n\t}\n</script>\n\n{#if voiceStore.supported}\n\t<button\n\t\ttype=\"button\"\n\t\tclass=\"dictate {status}\"\n\t\tdisabled={disabled || elsewhere}\n\t\taria-label={label}\n\t\ttitle={label}\n\t\taria-pressed={status === 'recording'}\n\t\tonclick={() => void toggle()}\n\t>\n\t\t{#if status === 'transcribing'}\n\t\t\t<iconify-icon icon=\"mdi:loading\" class=\"spin\"></iconify-icon>\n\t\t{:else if status === 'recording'}\n\t\t\t<iconify-icon icon=\"mdi:stop\"></iconify-icon>\n\t\t{:else}\n\t\t\t<iconify-icon icon=\"mdi:microphone\"></iconify-icon>\n\t\t{/if}\n\t</button>\n{/if}\n\n<style>\n\t.dictate {\n\t\tflex: none;\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 34px;\n\t\theight: 34px;\n\t\tborder: 1px solid #292524;\n\t\tborder-radius: 8px;\n\t\tbackground: transparent;\n\t\tcolor: #a8a29e;\n\t\tfont-size: 18px;\n\t\tcursor: pointer;\n\t\ttouch-action: manipulation;\n\t}\n\t.dictate:hover:not(:disabled) {\n\t\tcolor: #e7e5e4;\n\t\tborder-color: #44403c;\n\t}\n\t.dictate:disabled {\n\t\topacity: 0.4;\n\t\tcursor: default;\n\t}\n\t.dictate.recording {\n\t\tborder-color: #dc2626;\n\t\tbackground: rgba(220, 38, 38, 0.18);\n\t\tcolor: #fca5a5;\n\t}\n\t@media (pointer: coarse) {\n\t\t.dictate {\n\t\t\twidth: 40px;\n\t\t\theight: 40px;\n\t\t}\n\t}\n\t.dictate:focus-visible {\n\t\toutline: 2px solid #78716c;\n\t\toutline-offset: 1px;\n\t}\n</style>\n","/**\n * Quoting transcript text into the composer: what counts as quotable, how a\n * selection is read, and the markdown it becomes in the draft.\n */\n\n/**\n * The parts of the transcript that hold words someone wrote or a tool\n * printed. Everything else under it (a tool row's summary, a timestamp, a\n * badge, a button) is chrome, and a selection of nothing else quotes nothing.\n */\nconst QUOTABLE = '.user-text, .markdown, .thinking-text, pre';\n/** Fields and buttons keep their own selection and keys. */\nconst NOT_QUOTABLE = 'button, textarea, input';\n\n/** Without the blank lines around it; the first line keeps its indentation, which a plain trim would take from code. */\nfunction trimBlankLines(text: string): string {\n\treturn text.replace(/^(?:[^\\S\\n]*\\n)+/, '').trimEnd();\n}\n\n/** The selection as a markdown blockquote: `> ` on each line, runs of blank lines folded to one. */\nexport function quoteBlock(text: string): string {\n\tconst lines = trimBlankLines(\n\t\ttext.replace(/\\r\\n?/g, '\\n').replace(/\\n[^\\S\\n]*(?:\\n[^\\S\\n]*)+/g, '\\n\\n')\n\t);\n\tif (!lines.trim()) return '';\n\treturn lines\n\t\t.split('\\n')\n\t\t.map((line) => (line.trim() ? `> ${line.trimEnd()}` : '>'))\n\t\t.join('\\n');\n}\n\n/**\n * The draft with the selection quoted at its end and a blank line after, so\n * the caret, put at the end, sits where the reply goes. What was already\n * typed stays; a selection of nothing leaves the draft as it was.\n */\nexport function appendQuote(draft: string, text: string): string {\n\tconst quote = quoteBlock(text);\n\tif (!quote) return draft;\n\tconst before = draft.trimEnd();\n\treturn `${before ? `${before}\\n\\n` : ''}${quote}\\n\\n`;\n}\n\nfunction outermost(el: Element, root: Element): boolean {\n\tconst outer = el.parentElement?.closest(QUOTABLE);\n\treturn !outer || !root.contains(outer);\n}\n\n/**\n * The quotable stretches of a selection inside `root`, one range per message\n * part it touches, in document order. Empty when the selection is collapsed,\n * sits outside `root`, or covers nothing but chrome.\n */\nexport function quotableRanges(root: Element, selection: Selection | null): Range[] {\n\tif (!selection || selection.isCollapsed || selection.rangeCount === 0) return [];\n\tconst range = selection.getRangeAt(0);\n\tconst common = range.commonAncestorContainer;\n\tconst scope = common instanceof Element ? common : common.parentElement;\n\tif (!scope || !(root.contains(scope) || scope.contains(root))) return [];\n\n\t// A selection inside one message part is the usual case, and needs no search.\n\tconst within = root.contains(scope) ? scope.closest(QUOTABLE) : null;\n\tconst parts =\n\t\twithin && root.contains(within)\n\t\t\t? [within]\n\t\t\t: [...(scope.contains(root) ? root : scope).querySelectorAll(QUOTABLE)].filter(\n\t\t\t\t\t(el) => outermost(el, root) && range.intersectsNode(el)\n\t\t\t\t);\n\n\tconst ranges: Range[] = [];\n\tfor (const part of parts) {\n\t\tif (part.closest(NOT_QUOTABLE)) continue;\n\t\tconst clipped = range.cloneRange();\n\t\tconst whole = document.createRange();\n\t\twhole.selectNodeContents(part);\n\t\tif (clipped.compareBoundaryPoints(Range.START_TO_START, whole) < 0) {\n\t\t\tclipped.setStart(whole.startContainer, whole.startOffset);\n\t\t}\n\t\tif (clipped.compareBoundaryPoints(Range.END_TO_END, whole) > 0) {\n\t\t\tclipped.setEnd(whole.endContainer, whole.endOffset);\n\t\t}\n\t\t// A closed tool row's output is in the page but not on it: no boxes, nothing the reader selected.\n\t\tif (clipped.toString().trim() && clipped.getClientRects().length > 0) ranges.push(clipped);\n\t}\n\treturn ranges;\n}\n\n/** On the transcript while a quote is read: app.css draws a GitHub chip as the plain `#n` it stands for. */\nconst QUOTING = 'quoting';\n\n/**\n * The text of those ranges as the reader sees it, then the selection cleared.\n * Only a selection's own `toString()` keeps the line breaks between blocks\n * (a range's joins every text node end to end), so each range is selected in\n * turn to be read; a part is parted from the next by a blank line.\n */\nexport function takeQuote(root: Element, ranges: Range[]): string {\n\tconst selection = window.getSelection();\n\tif (!selection) return '';\n\tconst parts: string[] = [];\n\troot.classList.add(QUOTING);\n\ttry {\n\t\tfor (const range of ranges) {\n\t\t\tselection.removeAllRanges();\n\t\t\tselection.addRange(range);\n\t\t\tparts.push(trimBlankLines(selection.toString()));\n\t\t}\n\t} finally {\n\t\tselection.removeAllRanges();\n\t\troot.classList.remove(QUOTING);\n\t}\n\treturn parts.filter((part) => part.trim()).join('\\n\\n');\n}\n","<script lang=\"ts\">\n\t/**\n\t * \"Add to prompt\" for a selection in the transcript: a button that floats\n\t * by the selected text, and Ctrl/Cmd+L. Both hand the text to `onQuote`.\n\t * With nothing quotable selected neither does anything, so Ctrl+L keeps\n\t * the browser's meaning.\n\t */\n\timport { MediaQuery } from 'svelte/reactivity';\n\timport { Button } from '$lib/components/ui/button';\n\timport { IS_MAC } from '$lib/constants';\n\timport { quotableRanges, takeQuote } from '$lib/quote';\n\n\tlet {\n\t\troot,\n\t\tonQuote\n\t}: {\n\t\t/** The transcript; only a selection inside it counts. */\n\t\troot: HTMLElement | null;\n\t\tonQuote: (text: string) => void;\n\t} = $props();\n\n\t/** Room for the button above a selection, and its gap from the text. */\n\tconst ABOVE = 40;\n\tconst GAP = 8;\n\t/** On touch the button goes below, clear of the selection handles; the system menu takes the top. */\n\tconst HANDLES = 28;\n\t/** A selection still being dragged out by its handles moves many times a second. */\n\tconst SETTLE_MS = 200;\n\t/** How long after a finger leaves the button its click may still arrive. */\n\tconst PRESS_MS = 400;\n\n\tconst touch = new MediaQuery('(pointer: coarse)');\n\tconst coarse = $derived(touch.current);\n\n\t// Kept as ranges, not text: a tap on the button can end the selection on a\n\t// phone before the click arrives, and the ranges outlive it.\n\tlet ranges: Range[] = [];\n\t/** Where the button goes: the selection's middle, and the top of the button. */\n\tlet place = $state<{ left: number; top: number } | null>(null);\n\tlet width = $state(0);\n\t/** Its left edge, kept on the screen whatever the selection's middle is. */\n\tconst left = $derived(\n\t\tplace ? Math.max(GAP, Math.min(place.left - width / 2, window.innerWidth - width - GAP)) : 0\n\t);\n\tlet dragging = false;\n\t/** A finger is on the button: the selection it ends by landing there must not take the button away. */\n\tlet pressing = false;\n\t/** The shortcut's key is still down from a quote it made. */\n\tlet held = false;\n\tlet settle: ReturnType<typeof setTimeout> | null = null;\n\tlet frame = 0;\n\n\tfunction position() {\n\t\tif (ranges.length === 0) {\n\t\t\tplace = null;\n\t\t\treturn;\n\t\t}\n\t\tconst first = ranges[0].getBoundingClientRect();\n\t\tconst last = ranges[ranges.length - 1].getBoundingClientRect();\n\t\tconst top = first.top;\n\t\tconst bottom = last.bottom;\n\t\tif (bottom < 0 || top > window.innerHeight || (first.width === 0 && first.height === 0)) {\n\t\t\tplace = null;\n\t\t\treturn;\n\t\t}\n\t\tconst left = Math.min(first.left, last.left);\n\t\tconst right = Math.max(first.right, last.right);\n\t\tconst below = coarse || top < ABOVE + GAP;\n\t\tplace = {\n\t\t\tleft: (left + right) / 2,\n\t\t\ttop: below\n\t\t\t\t? Math.min(bottom + (coarse ? HANDLES : GAP), window.innerHeight - ABOVE)\n\t\t\t\t: top - ABOVE\n\t\t};\n\t}\n\n\tfunction selected(): Range[] {\n\t\treturn root ? quotableRanges(root, window.getSelection()) : [];\n\t}\n\n\tfunction read() {\n\t\tranges = selected();\n\t\tposition();\n\t}\n\n\tfunction readAfter(ms: number) {\n\t\tif (settle) clearTimeout(settle);\n\t\tsettle = setTimeout(read, ms);\n\t}\n\n\tfunction quote(from: Range[]) {\n\t\tif (!root || from.length === 0) return false;\n\t\tconst text = takeQuote(root, from);\n\t\tpressing = false;\n\t\tranges = [];\n\t\tplace = null;\n\t\tif (text) onQuote(text);\n\t\treturn text !== '';\n\t}\n\n\t$effect(() => {\n\t\tif (!root) return;\n\t\tconst onSelection = () => {\n\t\t\tif (settle) clearTimeout(settle);\n\t\t\t// Mid-drag the button would sit under the pointer; it waits for the release.\n\t\t\tif (dragging || pressing) return;\n\t\t\t// Handles being dragged would have the button under the finger; a\n\t\t\t// selection grown from the keyboard just moves it along.\n\t\t\tif (coarse) place = null;\n\t\t\treadAfter(coarse ? SETTLE_MS : 0);\n\t\t};\n\t\tconst onDown = (e: PointerEvent) => {\n\t\t\tpressing = e.target instanceof Element && e.target.closest('.quote-selection') !== null;\n\t\t\tif (pressing) return;\n\t\t\tdragging = e.pointerType === 'mouse';\n\t\t\tif (dragging) place = null;\n\t\t};\n\t\tconst onUp = () => {\n\t\t\tif (pressing) {\n\t\t\t\t// The click is still to come; a press that slid off the button never sends one.\n\t\t\t\tif (settle) clearTimeout(settle);\n\t\t\t\tsettle = setTimeout(() => {\n\t\t\t\t\tpressing = false;\n\t\t\t\t\tread();\n\t\t\t\t}, PRESS_MS);\n\t\t\t}\n\t\t\tif (!dragging) return;\n\t\t\tdragging = false;\n\t\t\t// The selection a click collapses is still whole at this point.\n\t\t\treadAfter(0);\n\t\t};\n\t\tconst onScroll = () => {\n\t\t\tif (ranges.length === 0) return;\n\t\t\tcancelAnimationFrame(frame);\n\t\t\tframe = requestAnimationFrame(position);\n\t\t};\n\t\tconst onKey = (e: KeyboardEvent) => {\n\t\t\t// By position, as the side panel's keys are: `key` is another letter on a non-Latin layout.\n\t\t\tif (e.code !== 'KeyL' || !(e.ctrlKey || e.metaKey) || e.altKey || e.shiftKey) return;\n\t\t\tif (e.defaultPrevented) return;\n\t\t\t// A key held down repeats after the quote is taken, and would then reach the address bar.\n\t\t\tif (e.repeat) {\n\t\t\t\tif (held) e.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Typed into something else (a field, the Browser pane), the key is that thing's.\n\t\t\tconst focus = document.activeElement;\n\t\t\tif (focus && focus !== document.body && !root.contains(focus)) return;\n\t\t\theld = quote(selected());\n\t\t\tif (held) e.preventDefault();\n\t\t};\n\t\tconst onKeyUp = (e: KeyboardEvent) => {\n\t\t\tif (e.code === 'KeyL') held = false;\n\t\t};\n\n\t\tdocument.addEventListener('selectionchange', onSelection);\n\t\tdocument.addEventListener('pointerdown', onDown, true);\n\t\tdocument.addEventListener('pointerup', onUp, true);\n\t\tdocument.addEventListener('pointercancel', onUp, true);\n\t\tdocument.addEventListener('keydown', onKey);\n\t\tdocument.addEventListener('keyup', onKeyUp);\n\t\twindow.addEventListener('scroll', onScroll, true);\n\t\twindow.addEventListener('resize', onScroll);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('selectionchange', onSelection);\n\t\t\tdocument.removeEventListener('pointerdown', onDown, true);\n\t\t\tdocument.removeEventListener('pointerup', onUp, true);\n\t\t\tdocument.removeEventListener('pointercancel', onUp, true);\n\t\t\tdocument.removeEventListener('keydown', onKey);\n\t\t\tdocument.removeEventListener('keyup', onKeyUp);\n\t\t\twindow.removeEventListener('scroll', onScroll, true);\n\t\t\twindow.removeEventListener('resize', onScroll);\n\t\t\tif (settle) clearTimeout(settle);\n\t\t\tcancelAnimationFrame(frame);\n\t\t};\n\t});\n</script>\n\n{#if place}\n\t<div class=\"quote-selection\" bind:offsetWidth={width} style:left=\"{left}px\" style:top=\"{place.top}px\">\n\t\t<!-- The press must not take the focus, or the selection it acts on is gone. -->\n\t\t<Button\n\t\t\tvariant=\"secondary\"\n\t\t\tsize=\"sm\"\n\t\t\tclass=\"quote-button\"\n\t\t\tonpointerdown={(e: PointerEvent) => e.preventDefault()}\n\t\t\tonmousedown={(e: MouseEvent) => e.preventDefault()}\n\t\t\tonclick={() => quote(ranges)}\n\t\t>\n\t\t\t<iconify-icon icon=\"mdi:format-quote-close\" aria-hidden=\"true\"></iconify-icon>\n\t\t\tAdd to prompt\n\t\t\t{#if !coarse}<kbd>{IS_MAC ? '⌘L' : 'Ctrl L'}</kbd>{/if}\n\t\t</Button>\n\t</div>\n{/if}\n\n<style>\n\t.quote-selection {\n\t\tposition: fixed;\n\t\tz-index: var(--z-floating);\n\t\t/* The native selection menu and handles stay the system's to draw. */\n\t\tuser-select: none;\n\t\t-webkit-user-select: none;\n\t\t-webkit-touch-callout: none;\n\t\tanimation: quote-in 120ms ease-out;\n\t}\n\n\t.quote-selection :global(.quote-button) {\n\t\tborder: 1px solid #44403c;\n\t\tbox-shadow: 0 6px 20px rgb(0 0 0 / 0.45);\n\t\tfont-size: 13px;\n\t}\n\n\t.quote-selection :global(iconify-icon) {\n\t\tfont-size: 16px;\n\t\tcolor: #a8a29e;\n\t}\n\n\tkbd {\n\t\tmargin-left: 2px;\n\t\tpadding: 1px 5px;\n\t\tborder: 1px solid #44403c;\n\t\tborder-radius: 4px;\n\t\tcolor: #a8a29e;\n\t\tfont:\n\t\t\t11px ui-monospace,\n\t\t\tSFMono-Regular,\n\t\t\tMenlo,\n\t\t\tmonospace;\n\t}\n\n\t@keyframes quote-in {\n\t\tfrom {\n\t\t\topacity: 0;\n\t\t}\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.quote-selection {\n\t\t\tanimation: none;\n\t\t}\n\t}\n</style>\n","import { tick } from 'svelte';\n\n/** Where a field's caret stands: equal ends for a caret, a span for a selection. */\nexport interface Spot {\n\tstart: number;\n\tend: number;\n}\n\n/** A field's text with what was said in it, and where the caret goes after the words. */\nexport interface Inserted {\n\ttext: string;\n\tcaret: number;\n}\n\ntype Field = HTMLInputElement | HTMLTextAreaElement;\n\n/**\n * Text that closes up on what comes before it, so words set in front need no\n * space. Straight quotes are left out: they open a quotation as often as close one.\n */\nconst CLOSES_UP = /^[\\s.,;:!?)\\]}…’”]/;\n\n/**\n * `text` with `said` put in at `spot`, replacing whatever it selects. Without\n * a spot, or with nothing but whitespace after the caret, the words join the\n * end the way they always have: trailing whitespace folds into one space.\n * Elsewhere a space goes in on each side the neighbouring text does not\n * already provide.\n */\nexport function insertSaid(text: string, said: string, spot: Spot | null): Inserted {\n\tconst start = Math.min(spot?.start ?? text.length, text.length);\n\tconst end = Math.min(spot?.end ?? text.length, text.length);\n\tconst before = text.slice(0, start);\n\tconst after = text.slice(end);\n\tif (!after.trim()) {\n\t\tconst joined = before.trim() ? `${before.trimEnd()} ${said}` : said;\n\t\treturn { text: joined, caret: joined.length };\n\t}\n\tconst lead = before && !/\\s$/.test(before) ? ' ' : '';\n\tconst tail = CLOSES_UP.test(after) ? '' : ' ';\n\tconst caret = before.length + lead.length + said.length;\n\treturn { text: `${before}${lead}${said}${tail}${after}`, caret };\n}\n\n/**\n * Where each field's caret stood when it last lost focus, beside the text it\n * held then. Tapping a microphone takes focus from the field, and a phone may\n * move a blurred field's selection, so the spot is read on the way out.\n */\nconst kept = new WeakMap<Field, { value: string; spot: Spot }>();\n\nfunction spotOf(el: Field): Spot | null {\n\tif (el.selectionStart == null) return null;\n\treturn { start: el.selectionStart, end: el.selectionEnd ?? el.selectionStart };\n}\n\n/**\n * Attachment for a field dictation writes into (`{@attach keepsCaret}`): it\n * keeps the caret the field leaves with, which `caretOf` reads once the\n * microphone has taken focus.\n */\nexport function keepsCaret(el: Field): () => void {\n\tconst keep = () => {\n\t\tconst spot = spotOf(el);\n\t\tif (spot) kept.set(el, { value: el.value, spot });\n\t};\n\tel.addEventListener('focusout', keep);\n\treturn () => el.removeEventListener('focusout', keep);\n}\n\n/**\n * Where dictation into `el` should go: its live caret while it has focus, the\n * caret it left with when its text has not changed since, and null when nobody\n * placed one (never focused, or the text was replaced behind its back), which\n * means the end.\n */\nexport function caretOf(el: Field | null | undefined): Spot | null {\n\tif (!el) return null;\n\tconst live = document.activeElement === el ? spotOf(el) : null;\n\tif (live) return live;\n\tconst left = kept.get(el);\n\treturn left && left.value === el.value ? left.spot : null;\n}\n\n/** Focus `el` with the caret at `caret`, so the next take carries on from there. */\nexport function putCaret(el: Field | null | undefined, caret: number): void {\n\tif (!el) return;\n\tel.focus();\n\tel.setSelectionRange(caret, caret);\n}\n\n/**\n * Put what was said into `field` where its caret stands, through `write`, and\n * leave the caret after the words; with no caret placed they join the end.\n */\nexport async function sayInto(\n\tfield: Field | null | undefined,\n\tcurrent: string,\n\tsaid: string,\n\twrite: (text: string) => void\n): Promise<void> {\n\tconst spot = caretOf(field);\n\tconst next = insertSaid(current, said, spot);\n\twrite(next.text);\n\tif (!spot) return;\n\tawait tick();\n\tputCaret(field, next.caret);\n}\n","/**\n * Translation of an AskUserQuestion answer into Claude Code TUI keystrokes.\n *\n * The dialog puts the cursor on the first option; Down walks the list, Space\n * toggles a checkbox in multi-select, and Enter submits the question. Keeping\n * this next to the other pane-driving code (rather than in the view) means the\n * protocol has one home and can be unit-tested when the TUI changes.\n */\n\n/**\n * Keys for answering one question, given the option indices to pick.\n * Returns null when the selection can't be expressed (no picks, or more than\n * one pick on a single-select question).\n */\nexport function keysForAnswer(\n picks: number[],\n options: { multiSelect: boolean },\n): string | null {\n const sorted = [...new Set(picks)].filter((i) => Number.isInteger(i) && i >= 0).sort((a, b) => a - b);\n if (sorted.length === 0) return null;\n if (!options.multiSelect) {\n if (sorted.length > 1) return null;\n // Same arrow walk as a pane dialog, from a cursor that always starts at 0.\n return keysForOptionPick(0, sorted[0], sorted[0] + 1);\n }\n\n const keys: string[] = [];\n let cursor = 0;\n for (const pick of sorted) {\n for (let step = 0; step < pick - cursor; step++) keys.push(\"Down\");\n keys.push(\"Space\");\n cursor = pick;\n }\n keys.push(\"Enter\");\n return keys.join(\" \");\n}\n\n/**\n * Keys that move Claude Code's own highlight from the row it is on to the row\n * the user tapped, then submit.\n *\n * Walks with arrows from where the pane says the highlight already is, rather\n * than typing the option's number — a dialog that does not take digits still\n * answers correctly, and a dialog whose highlight has moved since the last\n * capture lands on the row the user could see.\n *\n * @param from Index of the highlighted row, or -1 when none is marked.\n * @param to Index of the row to pick.\n * @returns The key sequence, or null when `to` is not a real row.\n */\nexport function keysForOptionPick(from: number, to: number, count: number): string | null {\n const move = keysForOptionMove(from, to, count);\n if (move === null) return null;\n return move ? `${move} Enter` : \"Enter\";\n}\n\n/**\n * Keys that move the highlight to a row without picking it.\n *\n * Some dialogs hang a setting off the highlighted row — the model picker's\n * effort level applies to whichever model the highlight is on — and a\n * question's notes field opens for the highlighted option, so moving the\n * highlight is an action of its own, not just the first half of a pick.\n *\n * @returns The arrow keys, \"\" when the highlight is already there, or null\n * when `to` is not a real row.\n */\nexport function keysForOptionMove(from: number, to: number, count: number): string | null {\n if (!Number.isInteger(to) || to < 0 || to >= count) return null;\n const start = from < 0 || from >= count ? 0 : from;\n const steps = to - start;\n return Array(Math.abs(steps)).fill(steps > 0 ? \"Down\" : \"Up\").join(\" \");\n}\n","<script lang=\"ts\">\n\timport DictateButton from './DictateButton.svelte';\n\timport { keepsCaret, sayInto } from '$lib/dictation';\n\timport type { TranscriptEntry } from '../../../../src/transcript/parser';\n\timport type { PaneChoice } from '$shared/types/ws-messages.js';\n\timport {\n\t\tkeysForAnswer,\n\t\tkeysForOptionMove,\n\t\tkeysForOptionPick\n\t} from '$shared/tmux/answer-keys.js';\n\timport { longPress } from '$lib/actions/longPress';\n\timport { Button } from '$lib/components/ui/button';\n\timport { Input } from '$lib/components/ui/input';\n\n\ttype AskEntry = Extract<TranscriptEntry, { kind: 'ask' }>;\n\ttype Row = PaneChoice['options'][number];\n\n\tlet {\n\t\tchoice,\n\t\task = null,\n\t\tpermission = false,\n\t\tclosed = false,\n\t\tonKeys,\n\t\tdictateTarget = null,\n\t\tonText,\n\t\tonSubmitted\n\t}: {\n\t\t/** The dialog as the pane draws it right now; null when the poll has not read one. */\n\t\tchoice: PaneChoice | null;\n\t\t/** The AskUserQuestion call behind the dialog, when it is one: every question up front. */\n\t\task?: AskEntry | null;\n\t\t/** A permission prompt rather than a question. */\n\t\tpermission?: boolean;\n\t\t/** The dialog has been answered and is gone from the pane. */\n\t\tclosed?: boolean;\n\t\t/** Sends a tmux key sequence (space-separated) to the pane. */\n\t\tonKeys: (keys: string) => Promise<void> | void;\n\t\t/** The session the answer field's microphone records for; null where voice is off. */\n\t\tdictateTarget?: string | null;\n\t\t/** Types text into the pane as-is, with no Enter after it. */\n\t\tonText: (text: string) => Promise<void> | void;\n\t\t/** The card sent the keys that close the dialog without the pane to confirm it. */\n\t\tonSubmitted?: () => void;\n\t} = $props();\n\n\t// ── where the dialog stands ──────────────────────────────────────────\n\t// The pane is the truth about which question is open and which row is\n\t// highlighted. The AskUserQuestion entry knows every question in advance,\n\t// so the card can draw them all and say which ones are already answered.\n\n\tconst norm = (s: string | null | undefined) => (s ?? '').replace(/\\s+/g, ' ').trim().toLowerCase();\n\n\t/** The pane is on the Submit tab a multi-question or multi-select dialog ends with. */\n\tconst reviewing = $derived(\n\t\tchoice != null && choice.options.some((o) => o.label === 'Submit answers')\n\t);\n\n\t/** Which of the entry's questions the pane has open; -1 when it cannot tell. */\n\tconst liveIndex = $derived.by(() => {\n\t\tif (!ask || !choice) return -1;\n\t\tif (reviewing) return ask.questions.length;\n\t\tconst asked = norm(choice.question);\n\t\tconst byText = ask.questions.findIndex(\n\t\t\t(q) => asked !== '' && (norm(q.question) === asked || asked.startsWith(norm(q.question)))\n\t\t);\n\t\tif (byText >= 0) return byText;\n\t\t// The question wrapped or was cut; the rows still name the same options.\n\t\tconst first = norm(choice.options[0]?.label);\n\t\treturn ask.questions.findIndex(\n\t\t\t(q) => q.options.length > 0 && first !== '' && norm(q.options[0].label).startsWith(first.slice(0, 16))\n\t\t);\n\t});\n\n\t/** Driving the entry's questions blind: no pane read, so the card keeps count. */\n\tlet sentCount = $state(0);\n\tlet picks = $state<Set<number>>(new Set());\n\tconst blind = $derived(ask != null && choice == null && !closed);\n\n\t/** The question the card answers now: an index into the entry, or its length on the Submit tab. */\n\tconst current = $derived(blind ? sentCount : liveIndex);\n\n\t/** A dialog with a Submit tab: several questions, or any multi-select. */\n\tconst hasSubmitTab = $derived(\n\t\task != null && (ask.questions.length > 1 || ask.questions.some((q) => q.multiSelect))\n\t);\n\tconst atSubmit = $derived(ask != null && current === ask.questions.length);\n\n\t/** The pane's tab strip, when it names one tab per question of the entry. */\n\tconst tabs = $derived(\n\t\task && choice?.tabs && choice.tabs.length === ask.questions.length ? choice.tabs : null\n\t);\n\n\t/** Whether a question holds an answer: the strip says so, else every question before the open one does. */\n\tfunction isAnswered(qi: number): boolean {\n\t\tif (closed) return true;\n\t\tif (tabs) return tabs[qi].answered;\n\t\treturn current >= 0 && qi < current;\n\t}\n\tconst answeredCount = $derived(ask ? ask.questions.filter((_, qi) => isAnswered(qi)).length : 0);\n\n\t/**\n\t * The card can walk the pane between questions: ←/→ move between a\n\t * dialog's tabs, answered or not, which is how an answer is changed.\n\t */\n\tconst canTravel = $derived(hasSubmitTab && choice != null && !closed && current >= 0);\n\n\t/** Answers given from this card, by question, so a question left behind still says what it holds. */\n\tlet answers = $state<Record<number, string>>({});\n\n\t/** What a question holds, as far as the card knows: its own record, or the row the pane marks. */\n\tfunction answerOf(qi: number): string | undefined {\n\t\treturn answers[qi] ?? (qi === current ? rows.find((r) => r.chosen)?.label : undefined);\n\t}\n\n\tfunction remember(qi: number, answer: string) {\n\t\tif (ask && qi >= 0 && qi < ask.questions.length) answers = { ...answers, [qi]: answer };\n\t}\n\n\t/** Open another question's tab (or Submit's, at the questions' count) in the pane. */\n\tasync function goToTab(to: number) {\n\t\tif (!canTravel || to === current) return;\n\t\tconst delta = to - current;\n\t\t// The arrows edit an open text field rather than leave it, so it is closed first.\n\t\tconst lead = noting ? ['Escape'] : typing ? ['Up'] : [];\n\t\tconst steps = Array<string>(Math.abs(delta)).fill(delta > 0 ? 'Right' : 'Left');\n\t\tawait onKeys([...lead, ...steps].join(' '));\n\t}\n\n\t// ── free text ────────────────────────────────────────────────────────\n\n\tlet draft = $state('');\n\tlet sending = $state(false);\n\tlet inputEl = $state<HTMLInputElement | null>(null);\n\n\t/** The pane's \"Type something\" row, which the card answers with its own field. */\n\tconst textRow = $derived(choice?.options.find((o) => o.text) ?? null);\n\t/** Rows the card draws as buttons: everything but the text row. */\n\tconst rows = $derived(choice?.options.filter((o) => !o.text) ?? []);\n\n\t/** The pane has a text field open: the free-text row, or the highlighted option's notes. */\n\tconst typing = $derived(choice?.typing === true);\n\tconst noting = $derived(choice?.noting === true);\n\n\t/** Notes go on the highlighted option; say which. */\n\tconst notingOn = $derived(\n\t\tnoting ? (choice?.options.find((o) => o.selected)?.label ?? choice?.question ?? 'this option') : null\n\t);\n\n\t$effect(() => {\n\t\t// The pane opened a text field (a key, or the terminal): the card's field is where to type.\n\t\tif ((typing || noting) && inputEl && document.activeElement?.tagName !== 'TEXTAREA') {\n\t\t\tinputEl.focus({ preventScroll: true });\n\t\t}\n\t});\n\n\tasync function sendFree() {\n\t\tconst text = draft.trim();\n\t\tif (!text || sending) return;\n\t\tsending = true;\n\t\ttry {\n\t\t\tif (blind) {\n\t\t\t\tconst q = ask!.questions[sentCount];\n\t\t\t\t// The text row sits under the options; the cursor starts on the first.\n\t\t\t\tconst n = q.options.length;\n\t\t\t\tawait onKeys(keysForOptionMove(0, n, n + 1) ?? '');\n\t\t\t\tawait onText(text);\n\t\t\t\tawait onKeys('Enter');\n\t\t\t\tremember(sentCount, text);\n\t\t\t\tadvanceBlind();\n\t\t\t} else if (choice) {\n\t\t\t\tconst opts = choice.options;\n\t\t\t\tconst multi = choice.multi === true;\n\t\t\t\tconst wasNoting = noting;\n\t\t\t\tif (!typing && !wasNoting) {\n\t\t\t\t\tconst to = opts.findIndex((o) => o.text);\n\t\t\t\t\tconst move = keysForOptionMove(\n\t\t\t\t\t\topts.findIndex((o) => o.selected),\n\t\t\t\t\t\tto,\n\t\t\t\t\t\topts.length\n\t\t\t\t\t);\n\t\t\t\t\tif (move === null) return;\n\t\t\t\t\t// Highlighting the row is what opens it for typing. Until the pane\n\t\t\t\t\t// says it is open, letters would drive the list (\"n\" opens notes)\n\t\t\t\t\t// and the Enter would pick whatever row is highlighted.\n\t\t\t\t\tif (move) await onKeys(move);\n\t\t\t\t\tif (!(await paneTyping())) return;\n\t\t\t\t}\n\t\t\t\tawait onText(text);\n\t\t\t\t// A note closes with Escape, which keeps it and brings the rows back;\n\t\t\t\t// a multi-select's row ticks with its text, and the answer goes in\n\t\t\t\t// from the Submit tab, so only a single-select takes Enter.\n\t\t\t\tif (wasNoting) await onKeys('Escape');\n\t\t\t\telse if (!multi) {\n\t\t\t\t\tawait onKeys('Enter');\n\t\t\t\t\tremember(current, text);\n\t\t\t\t}\n\t\t\t}\n\t\t\tdraft = '';\n\t\t} finally {\n\t\t\tsending = false;\n\t\t}\n\t}\n\n\t/** How long the free-text row may take to open before the card gives up and keeps the text. */\n\tconst OPEN_TIMEOUT_MS = 3000;\n\n\t/** Waits for the pane's next reads to show the text row open. */\n\tasync function paneTyping(): Promise<boolean> {\n\t\tconst until = Date.now() + OPEN_TIMEOUT_MS;\n\t\twhile (Date.now() < until) {\n\t\t\tif (choice?.typing === true) return true;\n\t\t\tawait new Promise((r) => setTimeout(r, 100));\n\t\t}\n\t\treturn false;\n\t}\n\n\tfunction freeKeydown(e: KeyboardEvent) {\n\t\t// The card's field never leaks keys to the page's own shortcuts.\n\t\te.stopPropagation();\n\t\tif (e.key === 'Enter' && !e.shiftKey && !e.isComposing) {\n\t\t\te.preventDefault();\n\t\t\tvoid sendFree();\n\t\t} else if (e.key === 'Escape' && (typing || noting)) {\n\t\t\te.preventDefault();\n\t\t\tvoid onKeys(noting ? 'Escape' : 'Up');\n\t\t}\n\t}\n\n\t// ── picking rows ─────────────────────────────────────────────────────\n\n\t/**\n\t * Move Claude Code's own highlight to the row you tapped, then submit.\n\t *\n\t * Walks with arrows from the row the pane says is selected rather than\n\t * typing the number, so it works whether or not the dialog takes digits.\n\t */\n\tasync function pick(row: Row) {\n\t\t// An open text field is the selected row, so the walk starts from it.\n\t\tconst keys = walkTo(row, keysForOptionPick);\n\t\tif (!keys) return;\n\t\tawait onKeys(keys);\n\t\tif (!choice?.multi && !reviewing) remember(current, row.label);\n\t}\n\n\t/**\n\t * Move the highlight without picking — a long press. Some dialogs hang a\n\t * setting off the highlighted row: the model picker's effort, a\n\t * question's notes.\n\t */\n\tasync function highlight(row: Row) {\n\t\tconst keys = walkTo(row, keysForOptionMove);\n\t\tif (keys) await onKeys(keys);\n\t}\n\n\t/** Keys from the pane's highlighted row to `row`, by the given walk. */\n\tfunction walkTo(row: Row, walk: typeof keysForOptionMove): string | null {\n\t\tif (!choice) return null;\n\t\tconst opts = choice.options;\n\t\treturn walk(\n\t\t\topts.findIndex((o) => o.selected),\n\t\t\topts.findIndex((o) => o.n === row.n),\n\t\t\topts.length\n\t\t);\n\t}\n\n\tfunction advanceBlind() {\n\t\tsentCount += 1;\n\t\tpicks = new Set();\n\t\tif (ask && !hasSubmitTab && sentCount >= ask.questions.length) onSubmitted?.();\n\t}\n\n\tfunction pickBlind(qi: number, oi: number) {\n\t\tconst q = ask!.questions[qi];\n\t\tif (q.multiSelect) {\n\t\t\tconst next = new Set(picks);\n\t\t\tif (next.has(oi)) next.delete(oi);\n\t\t\telse next.add(oi);\n\t\t\tpicks = next;\n\t\t\treturn;\n\t\t}\n\t\tconst keys = keysForAnswer([oi], q);\n\t\tif (!keys) return;\n\t\tvoid onKeys(keys);\n\t\tremember(qi, q.options[oi].label);\n\t\tadvanceBlind();\n\t}\n\n\tfunction confirmBlind(qi: number) {\n\t\tconst q = ask!.questions[qi];\n\t\tconst keys = keysForAnswer([...picks], q);\n\t\tif (!keys) return;\n\t\tvoid onKeys(keys);\n\t\tremember(qi, [...picks].sort((a, b) => a - b).map((oi) => q.options[oi].label).join(', '));\n\t\tadvanceBlind();\n\t}\n\n\t/** Submit or Cancel on the closing tab. */\n\tasync function finish(submit: boolean) {\n\t\tif (blind) {\n\t\t\tawait onKeys(submit ? 'Enter' : 'Down Enter');\n\t\t\tonSubmitted?.();\n\t\t\treturn;\n\t\t}\n\t\tconst row = choice?.options.find((o) =>\n\t\t\tsubmit ? o.label === 'Submit answers' : norm(o.label) === 'cancel'\n\t\t);\n\t\tif (row) await pick(row);\n\t}\n\n\t/** A multi-select's ticks are done: on to the next tab (Submit, after the last question). */\n\tfunction done() {\n\t\tconst ticked = rows.filter((r) => r.checked).map((r) => r.label);\n\t\tif (ticked.length > 0) remember(current, ticked.join(', '));\n\t\tvoid onKeys(typing ? 'Up Right' : 'Right');\n\t}\n\n\t// ── the dialog's other keys ──────────────────────────────────────────\n\n\t/** A hint segment naming a key and what it does: \"s to use this session only\". */\n\tconst KEY_SEGMENT = /^(\\S+) to (.+)$/;\n\t/** A note the dialog adjusts with the horizontal arrows. */\n\tconst ARROW_NOTE = /←\\/→/;\n\n\t/**\n\t * The keys a dialog answers to beyond picking a row — the model picker's\n\t * \"s to use this session only\", a question's \"n to add notes\" — read off\n\t * the hint line the dialog draws under itself, so a dialog this page has\n\t * never seen still gets its extra keys offered as buttons.\n\t */\n\tconst extraKeys = $derived.by(() => {\n\t\tconst out: { key: string; label: string }[] = [];\n\t\tfor (const segment of (choice?.keys ?? '').split('·')) {\n\t\t\tconst m = segment.trim().match(KEY_SEGMENT);\n\t\t\t// Only keys the card does not already drive with its rows and buttons.\n\t\t\tif (!m || (!/^[a-z]$/i.test(m[1]) && m[1] !== 'Tab' && m[1] !== 'Space')) continue;\n\t\t\tout.push({ key: m[1], label: m[2] });\n\t\t}\n\t\treturn out;\n\t});\n\n\t/** The panel a question draws beside an option, from the entry the pane cuts it out of. */\n\tfunction previewFor(qi: number, label: string): string | undefined {\n\t\tconst q = ask?.questions[qi];\n\t\tif (!q) return undefined;\n\t\tconst l = norm(label);\n\t\treturn q.options.find((o) => norm(o.label) === l || (l !== '' && norm(o.label).startsWith(l)))\n\t\t\t?.preview;\n\t}\n\n\t/** Someone opened the session to answer this: bring the card into view once. */\n\tfunction reveal(el: HTMLElement) {\n\t\trequestAnimationFrame(() => el.scrollIntoView({ block: 'nearest' }));\n\t}\n\n\tconst isPermission = $derived(permission && !ask);\n\tconst title = $derived(isPermission ? 'Permission needed' : 'Claude is asking');\n</script>\n\n{#snippet liveRows(qi: number)}\n\t<div class=\"rows\" role=\"group\">\n\t\t{#each rows as row (row.n)}\n\t\t\t{@const preview = previewFor(qi, row.label)}\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"row\"\n\t\t\t\tclass:sel={row.selected}\n\t\t\t\tdisabled={closed}\n\t\t\t\ttitle=\"Tap to pick · hold to highlight only\"\n\t\t\t\tonclick={() => void pick(row)}\n\t\t\t\tuse:longPress={{ onTrigger: () => void highlight(row) }}\n\t\t\t>\n\t\t\t\t{#if row.checked === undefined}\n\t\t\t\t\t<span class=\"num\">{row.n}</span>\n\t\t\t\t{:else}\n\t\t\t\t\t<iconify-icon\n\t\t\t\t\t\tclass=\"box\"\n\t\t\t\t\t\tclass:on={row.checked}\n\t\t\t\t\t\ticon={row.checked ? 'mdi:checkbox-marked' : 'mdi:checkbox-blank-outline'}\n\t\t\t\t\t></iconify-icon>\n\t\t\t\t{/if}\n\t\t\t\t<span class=\"label\">\n\t\t\t\t\t<span class=\"name\"\n\t\t\t\t\t\t>{row.label}{#if row.chosen}<iconify-icon\n\t\t\t\t\t\t\t\tclass=\"chosen\"\n\t\t\t\t\t\t\t\ticon=\"mdi:check\"\n\t\t\t\t\t\t\t\ttitle=\"The answer this question holds\"\n\t\t\t\t\t\t\t></iconify-icon>{/if}</span\n\t\t\t\t\t>\n\t\t\t\t\t{#if row.hint}<span class=\"hint\">{row.hint}</span>{/if}\n\t\t\t\t\t{#if preview}<pre class=\"preview\">{preview}</pre>{/if}\n\t\t\t\t</span>\n\t\t\t</button>\n\t\t{/each}\n\t</div>\n{/snippet}\n\n{#snippet freeText(placeholder: string, label: string)}\n\t<form\n\t\tclass=\"free\"\n\t\tonsubmit={(e) => {\n\t\t\te.preventDefault();\n\t\t\tvoid sendFree();\n\t\t}}\n\t>\n\t\t<Input\n\t\t\tbind:ref={inputEl}\n\t\t\tbind:value={draft}\n\t\t\t{@attach keepsCaret}\n\t\t\tdata-dialog-input\n\t\t\tclass=\"free-input\"\n\t\t\t{placeholder}\n\t\t\taria-label={label}\n\t\t\tdisabled={closed}\n\t\t\tonkeydown={freeKeydown}\n\t\t/>\n\t\t{#if dictateTarget}\n\t\t\t<DictateButton\n\t\t\t\ttarget={dictateTarget}\n\t\t\t\tdisabled={closed}\n\t\t\t\tonText={(text) => void sayInto(inputEl, draft, text, (t) => (draft = t))}\n\t\t\t/>\n\t\t{/if}\n\t\t<Button\n\t\t\ttype=\"submit\"\n\t\t\tvariant=\"warning\"\n\t\t\tsize=\"sm\"\n\t\t\tclass=\"free-send\"\n\t\t\tdisabled={closed || sending || draft.trim() === ''}\n\t\t>\n\t\t\t<iconify-icon icon={noting ? 'mdi:note-check-outline' : 'mdi:send'}></iconify-icon>\n\t\t\t{noting ? 'Save' : 'Send'}\n\t\t</Button>\n\t</form>\n{/snippet}\n\n{#snippet paneFreeText(answerLabel: string)}\n\t{#if textRow || noting}\n\t\t{@render freeText(\n\t\t\tnoting ? `Note on ${notingOn}` : 'Type something else',\n\t\t\tnoting ? 'Note' : answerLabel\n\t\t)}\n\t{/if}\n{/snippet}\n\n{#snippet keysBar()}\n\t{#each choice?.notes ?? [] as note (note)}\n\t\t<p class=\"note\">\n\t\t\t<span>{note}</span>\n\t\t\t{#if ARROW_NOTE.test(note)}\n\t\t\t\t<button type=\"button\" class=\"arrow\" title=\"Left\" onclick={() => void onKeys('Left')}>\n\t\t\t\t\t<iconify-icon icon=\"mdi:chevron-left\"></iconify-icon>\n\t\t\t\t</button>\n\t\t\t\t<button type=\"button\" class=\"arrow\" title=\"Right\" onclick={() => void onKeys('Right')}>\n\t\t\t\t\t<iconify-icon icon=\"mdi:chevron-right\"></iconify-icon>\n\t\t\t\t</button>\n\t\t\t{/if}\n\t\t</p>\n\t{/each}\n\t<div class=\"extra\">\n\t\t<!-- Move the highlight without picking: what a setting under the rows,\n\t\t or a note, applies to. A held row does the same. -->\n\t\t<button type=\"button\" class=\"key nav\" title=\"Highlight the row above\" onclick={() => void onKeys('Up')}>\n\t\t\t<iconify-icon icon=\"mdi:chevron-up\"></iconify-icon>\n\t\t</button>\n\t\t<button type=\"button\" class=\"key nav\" title=\"Highlight the row below\" onclick={() => void onKeys('Down')}>\n\t\t\t<iconify-icon icon=\"mdi:chevron-down\"></iconify-icon>\n\t\t</button>\n\t\t{#if choice?.multi && !reviewing}\n\t\t\t<!-- Ticking a box leaves the dialog open; the answer goes in from a\n\t\t\t tab of its own, one key to the right. -->\n\t\t\t<button type=\"button\" class=\"key done\" onclick={done}>\n\t\t\t\t<iconify-icon icon=\"mdi:check-all\"></iconify-icon>Done\n\t\t\t</button>\n\t\t{/if}\n\t\t{#each extraKeys as extra (extra.key)}\n\t\t\t<button type=\"button\" class=\"key\" onclick={() => void onKeys(extra.key)}>\n\t\t\t\t<kbd>{extra.key}</kbd>{extra.label}\n\t\t\t</button>\n\t\t{/each}\n\t\t<button type=\"button\" class=\"key\" title=\"Dismiss the dialog\" onclick={() => void onKeys('Escape')}>\n\t\t\t<kbd>Esc</kbd>cancel\n\t\t</button>\n\t</div>\n\t{#if choice?.keys}<p class=\"keys\">{choice.keys}</p>{/if}\n{/snippet}\n\n<section\n\tclass=\"dialog-card\"\n\tclass:closed\n\taria-label={title}\n\tuse:reveal\n>\n\t<header class=\"title\">\n\t\t<iconify-icon icon={isPermission ? 'mdi:shield-alert-outline' : 'mdi:chat-question'}></iconify-icon>\n\t\t<span>{closed ? 'Answered' : title}</span>\n\t\t{#if closed}<iconify-icon class=\"ok\" icon=\"mdi:check\"></iconify-icon>{/if}\n\t</header>\n\n\t{#if ask}\n\t\t{#each ask.questions as q, qi (q.question)}\n\t\t\t{@const active = !closed && qi === current}\n\t\t\t{@const sent = !active && isAnswered(qi)}\n\t\t\t{@const answer = answerOf(qi)}\n\t\t\t<div class=\"ask-q\" class:inactive={!active && !sent}>\n\t\t\t\t<div class=\"q-head\">\n\t\t\t\t\t<span class=\"chip\" class:done={isAnswered(qi)}>{q.header}</span>\n\t\t\t\t\t{#if canTravel && !active}\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"travel\"\n\t\t\t\t\t\t\ttitle={sent ? 'Go back to this question and pick again' : 'Open this question'}\n\t\t\t\t\t\t\tonclick={() => void goToTab(qi)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<iconify-icon icon={sent ? 'mdi:pencil-outline' : 'mdi:arrow-right'}></iconify-icon>\n\t\t\t\t\t\t\t{sent ? 'Change' : 'Go to'}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t{/if}\n\t\t\t\t</div>\n\t\t\t\t<p class=\"question\">{q.question}</p>\n\t\t\t\t{#if sent}\n\t\t\t\t\t<div class=\"sent\">\n\t\t\t\t\t\t<iconify-icon icon=\"mdi:check\"></iconify-icon>\n\t\t\t\t\t\t{#if answer}<span class=\"answer\">{answer}</span>{:else}answered{/if}\n\t\t\t\t\t</div>\n\t\t\t\t{:else if active && choice && !reviewing}\n\t\t\t\t\t{@render liveRows(qi)}\n\t\t\t\t\t{@render paneFreeText(`Your own answer to: ${q.question}`)}\n\t\t\t\t{:else}\n\t\t\t\t\t<!-- Not open in the pane yet, or no pane read: the entry's own options. -->\n\t\t\t\t\t<div class=\"rows\">\n\t\t\t\t\t\t{#each q.options as opt, oi (opt.label)}\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclass=\"row\"\n\t\t\t\t\t\t\t\tclass:sel={active && q.multiSelect && picks.has(oi)}\n\t\t\t\t\t\t\t\tdisabled={!active || !blind}\n\t\t\t\t\t\t\t\tonclick={() => pickBlind(qi, oi)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{#if q.multiSelect}\n\t\t\t\t\t\t\t\t\t<iconify-icon\n\t\t\t\t\t\t\t\t\t\tclass=\"box\"\n\t\t\t\t\t\t\t\t\t\tclass:on={active && picks.has(oi)}\n\t\t\t\t\t\t\t\t\t\ticon={active && picks.has(oi)\n\t\t\t\t\t\t\t\t\t\t\t? 'mdi:checkbox-marked'\n\t\t\t\t\t\t\t\t\t\t\t: 'mdi:checkbox-blank-outline'}\n\t\t\t\t\t\t\t\t\t></iconify-icon>\n\t\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t\t<span class=\"num\">{oi + 1}</span>\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t<span class=\"label\">\n\t\t\t\t\t\t\t\t\t<span class=\"name\">{opt.label}</span>\n\t\t\t\t\t\t\t\t\t{#if opt.description}<span class=\"hint\">{opt.description}</span>{/if}\n\t\t\t\t\t\t\t\t\t{#if opt.preview}<pre class=\"preview\">{opt.preview}</pre>{/if}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</div>\n\t\t\t\t\t{#if active && blind}\n\t\t\t\t\t\t{#if q.multiSelect}\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tvariant=\"warning\"\n\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\tclass=\"confirm\"\n\t\t\t\t\t\t\t\tdisabled={picks.size === 0}\n\t\t\t\t\t\t\t\tonclick={() => confirmBlind(qi)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tConfirm selection\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t{@render freeText('Type something else', `Your own answer to: ${q.question}`)}\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t{/if}\n\t\t\t\t{/if}\n\t\t\t</div>\n\t\t{/each}\n\n\t\t{#if liveIndex < 0 && choice && !closed}\n\t\t\t<!-- The pane shows something the entry does not name: draw it as it is. -->\n\t\t\t<div class=\"ask-q\">\n\t\t\t\t{#if choice.question}<p class=\"question\">{choice.question}</p>{/if}\n\t\t\t\t{@render liveRows(-1)}\n\t\t\t\t{#if textRow || noting}{@render freeText('Type something else', 'Your own answer')}{/if}\n\t\t\t</div>\n\t\t{/if}\n\n\t\t{#if hasSubmitTab && !closed}\n\t\t\t<footer class=\"foot\">\n\t\t\t\t<span class=\"tally\">\n\t\t\t\t\t{#if atSubmit && answeredCount === ask.questions.length}\n\t\t\t\t\t\tAll answered — ready to submit\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t{answeredCount} of {ask.questions.length} answered\n\t\t\t\t\t{/if}\n\t\t\t\t</span>\n\t\t\t\t<Button variant=\"ghost\" size=\"sm\" disabled={!atSubmit} onclick={() => void finish(false)}>\n\t\t\t\t\tCancel\n\t\t\t\t</Button>\n\t\t\t\t{#if !atSubmit && canTravel && answeredCount === ask.questions.length}\n\t\t\t\t\t<!-- Every question holds an answer, but one was gone back to: on to the review. -->\n\t\t\t\t\t<Button variant=\"warning\" size=\"sm\" title=\"Review your answers\" onclick={() => void goToTab(ask.questions.length)}>\n\t\t\t\t\t\t<iconify-icon icon=\"mdi:arrow-right\"></iconify-icon>Review\n\t\t\t\t\t</Button>\n\t\t\t\t{:else}\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"warning\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tdisabled={!atSubmit}\n\t\t\t\t\t\ttitle={atSubmit ? 'Submit your answers' : 'Answer every question first'}\n\t\t\t\t\t\tonclick={() => void finish(true)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<iconify-icon icon=\"mdi:check-all\"></iconify-icon>Submit\n\t\t\t\t\t</Button>\n\t\t\t\t{/if}\n\t\t\t</footer>\n\t\t{/if}\n\t\t{#if choice && !closed}{@render keysBar()}{/if}\n\t{:else if choice && !closed}\n\t\t<div class=\"ask-q\">\n\t\t\t{#if choice.question}<p class=\"question\">{choice.question}</p>{/if}\n\t\t\t{@render liveRows(-1)}\n\t\t\t{@render paneFreeText('Your own answer')}\n\t\t</div>\n\t\t{@render keysBar()}\n\t{:else if !closed}\n\t\t<p class=\"question muted\">Reading the dialog from the pane…</p>\n\t{/if}\n</section>\n\n<style>\n\t/* The one thing in the transcript that wants you: amber, the colour every\n\t surface gives a waiting session. It cools to a log line once answered. */\n\t.dialog-card {\n\t\tmargin: 14px 0 14px 12px;\n\t\tborder: 1px solid #5c4410;\n\t\tborder-left: 3px solid #fbbf24;\n\t\tborder-radius: 8px;\n\t\tbackground: #1a1610;\n\t\tpadding: 10px 12px 12px;\n\t\tscroll-margin: 16px;\n\t}\n\t.dialog-card.closed {\n\t\tborder-color: #2a2a2e;\n\t\tborder-left-color: #4d7c5f;\n\t\tbackground: #161616;\n\t}\n\t.title {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 7px;\n\t\tmargin-bottom: 8px;\n\t\tfont-size: 11px;\n\t\tfont-weight: 700;\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.08em;\n\t\tcolor: #fbbf24;\n\t}\n\t.closed .title {\n\t\tcolor: #86b898;\n\t}\n\t.ask-q + .ask-q {\n\t\tmargin-top: 12px;\n\t\tpadding-top: 10px;\n\t\tborder-top: 1px solid #2c2416;\n\t}\n\t.ask-q.inactive {\n\t\topacity: 0.45;\n\t}\n\t.chip {\n\t\tdisplay: inline-block;\n\t\tmargin-bottom: 4px;\n\t\tpadding: 1px 7px;\n\t\tborder-radius: 4px;\n\t\tbackground: #3a2d0d;\n\t\tcolor: #fde68a;\n\t\tfont-size: 10px;\n\t\tfont-weight: 700;\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.08em;\n\t}\n\t.chip.done {\n\t\tbackground: #262220;\n\t\tcolor: #a8a29e;\n\t}\n\t.question {\n\t\tmargin: 0 0 8px;\n\t\tcolor: #f5f0ee;\n\t\tfont-weight: 600;\n\t\t/* Carried whole from the pane, with the breaks the dialog drew itself. */\n\t\twhite-space: pre-line;\n\t\toverflow-wrap: anywhere;\n\t}\n\t.question.muted {\n\t\tcolor: #a8a29e;\n\t\tfont-weight: 400;\n\t}\n\t.sent {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 6px;\n\t\tfont-size: 12.5px;\n\t\tcolor: #86b898;\n\t}\n\t.sent .answer {\n\t\tcolor: #d6d3d1;\n\t\toverflow-wrap: anywhere;\n\t}\n\t.q-head {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 8px;\n\t\tmargin-bottom: 4px;\n\t}\n\t.q-head .chip {\n\t\tmargin-bottom: 0;\n\t}\n\t/* Going back to a question is how its answer is changed. */\n\t.travel {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: 4px;\n\t\tmargin-left: auto;\n\t\tpadding: 2px 8px;\n\t\tborder: 1px solid #3a2f17;\n\t\tborder-radius: 4px;\n\t\tbackground: none;\n\t\tcolor: #d6b46a;\n\t\tfont-size: 11.5px;\n\t\tcursor: pointer;\n\t}\n\t.travel:hover,\n\t.travel:focus-visible {\n\t\tborder-color: #fbbf24;\n\t\tcolor: #fde68a;\n\t}\n\t.name .chosen {\n\t\tmargin-left: 6px;\n\t\tcolor: #86b898;\n\t\tvertical-align: -2px;\n\t}\n\t.rows {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 5px;\n\t}\n\t.row {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tgap: 9px;\n\t\twidth: 100%;\n\t\tmin-height: 34px;\n\t\tpadding: 7px 10px;\n\t\tborder: 1px solid #2c2416;\n\t\tborder-radius: 7px;\n\t\tbackground: #201b12;\n\t\tcolor: #d6d3d1;\n\t\ttext-align: left;\n\t\tcursor: pointer;\n\t\ttransition:\n\t\t\tborder-color 0.12s,\n\t\t\tbackground 0.12s;\n\t}\n\t.row:hover:not(:disabled) {\n\t\tborder-color: #b45309;\n\t\tbackground: #2a2214;\n\t}\n\t.row:disabled {\n\t\tcursor: default;\n\t}\n\t/* Claude Code's own highlight: Enter (or the gamepad's A) takes this row. */\n\t.row.sel {\n\t\tborder-color: #fbbf24;\n\t\tbackground: #3a2d0d;\n\t\tcolor: #fde68a;\n\t}\n\t.num {\n\t\tflex: none;\n\t\twidth: 10px;\n\t\tpadding-top: 2px;\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 10.5px;\n\t\tcolor: #78716c;\n\t}\n\t.row.sel .num {\n\t\tcolor: #fbbf24;\n\t}\n\t/* A multi-select row says what it is with its own box: the box is the\n\t thing a tap changes. */\n\t.box {\n\t\tflex: none;\n\t\tpadding-top: 1px;\n\t\tfont-size: 15px;\n\t\tcolor: #57534e;\n\t}\n\t.box.on {\n\t\tcolor: #34d399;\n\t}\n\t.label {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 2px;\n\t\tmin-width: 0;\n\t\tflex: 1;\n\t}\n\t.name {\n\t\tfont-size: 13px;\n\t\tfont-weight: 600;\n\t\tcolor: inherit;\n\t\toverflow-wrap: anywhere;\n\t}\n\t.hint {\n\t\tfont-size: 12px;\n\t\tline-height: 1.45;\n\t\tcolor: #a8a29e;\n\t\twhite-space: pre-line;\n\t\toverflow-wrap: anywhere;\n\t}\n\t.row.sel .hint {\n\t\tcolor: #c8a94a;\n\t}\n\t/* The panel the terminal draws beside a highlighted option, shown under\n\t it here: on a phone there is no room to the side. */\n\t.preview {\n\t\tmargin: 6px 0 0;\n\t\tpadding: 8px 10px;\n\t\tborder: 1px solid #2c2416;\n\t\tborder-radius: 6px;\n\t\tbackground: #14110c;\n\t\tcolor: #d6d3d1;\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 12px;\n\t\tline-height: 1.5;\n\t\twhite-space: pre;\n\t\toverflow-x: auto;\n\t}\n\t.free {\n\t\tdisplay: flex;\n\t\tgap: 6px;\n\t\tmargin-top: 8px;\n\t}\n\t.free :global(.free-input) {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\theight: 34px;\n\t\tborder-color: #3a2f1a;\n\t\tbackground: #14110c;\n\t\tcolor: #f5f0ee;\n\t\tfont-size: 13px;\n\t}\n\t.free :global(.free-send) {\n\t\theight: 34px;\n\t}\n\t.dialog-card :global(.confirm) {\n\t\tmargin-top: 8px;\n\t}\n\t.foot {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tflex-wrap: wrap;\n\t\tgap: 6px;\n\t\tmargin-top: 12px;\n\t\tpadding-top: 10px;\n\t\tborder-top: 1px solid #2c2416;\n\t}\n\t.tally {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\tfont-size: 12px;\n\t\tcolor: #a8a29e;\n\t}\n\t/* A line the dialog prints for itself under the rows, with the arrows that\n\t adjust it when the line says they do. */\n\t.note {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 4px;\n\t\tmargin: 8px 0 0;\n\t\tfont-size: 12px;\n\t\tline-height: 1.4;\n\t\tcolor: #a8a29e;\n\t}\n\t.note span {\n\t\tmin-width: 0;\n\t}\n\t.arrow {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 26px;\n\t\theight: 24px;\n\t\tpadding: 0;\n\t\tborder: 0;\n\t\tborder-radius: 6px;\n\t\tbackground: #26262a;\n\t\tcolor: #d6d3d1;\n\t\tfont-size: 16px;\n\t\tcursor: pointer;\n\t}\n\t.extra {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 6px;\n\t\tmargin-top: 8px;\n\t}\n\t/* One of the keys the dialog names: the key as a cap, then its verb. */\n\t.key {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t\theight: 30px;\n\t\tpadding: 0 11px 0 8px;\n\t\tborder: 0;\n\t\tborder-radius: 8px;\n\t\tbackground: #26262a;\n\t\tcolor: #d6d3d1;\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 11.5px;\n\t\tcursor: pointer;\n\t}\n\t.key:hover {\n\t\tbackground: #33333a;\n\t}\n\t.key.nav {\n\t\twidth: 34px;\n\t\tpadding: 0;\n\t\tjustify-content: center;\n\t\tfont-size: 17px;\n\t}\n\t.key.done {\n\t\tbackground: #1c3326;\n\t\tcolor: #6ee7b7;\n\t}\n\t.key.done:hover {\n\t\tbackground: #244433;\n\t}\n\t.key kbd {\n\t\tpadding: 0 5px;\n\t\tborder: 1px solid #44444a;\n\t\tborder-radius: 4px;\n\t\tfont-family: inherit;\n\t\tfont-size: 10.5px;\n\t\tcolor: #fbbf24;\n\t}\n\t.keys {\n\t\tmargin: 6px 0 0;\n\t\tcolor: #6b6b70;\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 10.5px;\n\t\toverflow-wrap: anywhere;\n\t}\n\t@media (pointer: coarse) {\n\t\t.row {\n\t\t\tmin-height: 44px;\n\t\t}\n\t\t.key,\n\t\t.free :global(.free-input),\n\t\t.free :global(.free-send) {\n\t\t\theight: 40px;\n\t\t}\n\t\t/* Below 16px, iOS zooms the page to the field on focus. */\n\t\t.free :global(.free-input) {\n\t\t\tfont-size: 16px;\n\t\t}\n\t}\n</style>\n","<script lang=\"ts\">\n\timport type { LoginScreen } from '$shared/tmux/login.js';\n\timport { Button } from '$lib/components/ui/button';\n\timport { Input } from '$lib/components/ui/input';\n\n\tlet {\n\t\tlogin,\n\t\tonKeys,\n\t\tonText\n\t}: {\n\t\t/** The sign-in screen as the pane draws it right now. */\n\t\tlogin: NonNullable<LoginScreen>;\n\t\tonKeys: (keys: string) => Promise<void> | void;\n\t\tonText: (text: string) => Promise<void> | void;\n\t} = $props();\n\n\t/** What the sign-in page hands back: the code, a `#`, and the request's state. */\n\tconst CODE_SHAPE = /^[\\w-]{8,}#[\\w-]{8,}$/;\n\n\tlet draft = $state('');\n\tlet sending = $state(false);\n\tlet copied = $state(false);\n\tlet note = $state<string | null>(null);\n\t/** The link was opened from here, so coming back to this tab means the code is likely on the clipboard. */\n\tlet awaitingCode = $state(false);\n\n\tconst url = $derived(login.step === 'code' ? login.url : null);\n\n\tasync function submit(code = draft) {\n\t\tconst text = code.trim();\n\t\tif (!text || sending) return;\n\t\tsending = true;\n\t\tnote = null;\n\t\ttry {\n\t\t\tawait onText(text);\n\t\t\tawait onKeys('Enter');\n\t\t\tdraft = '';\n\t\t\tawaitingCode = false;\n\t\t} finally {\n\t\t\tsending = false;\n\t\t}\n\t}\n\n\t/** The clipboard on a click: a code goes straight in, anything else lands in the field to look at. */\n\tasync function pasteAndSubmit() {\n\t\tlet text: string;\n\t\ttry {\n\t\t\ttext = (await navigator.clipboard.readText()).trim();\n\t\t} catch {\n\t\t\tnote = 'This browser would not share the clipboard. Paste the code into the field.';\n\t\t\treturn;\n\t\t}\n\t\tif (CODE_SHAPE.test(text)) await submit(text);\n\t\telse {\n\t\t\tdraft = text;\n\t\t\tnote = text ? 'That does not look like a sign-in code. Check it, then press Sign in.' : 'The clipboard is empty.';\n\t\t}\n\t}\n\n\tasync function copyLink() {\n\t\tif (!url) return;\n\t\ttry {\n\t\t\tawait navigator.clipboard.writeText(url);\n\t\t\tcopied = true;\n\t\t\tsetTimeout(() => (copied = false), 1500);\n\t\t} catch {\n\t\t\tnote = 'Copying was refused. Open the page instead.';\n\t\t}\n\t}\n\n\t// Back from the sign-in tab: where the browser already lets this page read\n\t// the clipboard, a code waiting there fills the field without asking.\n\t$effect(() => {\n\t\tif (!awaitingCode) return;\n\t\tconst onBack = async () => {\n\t\t\tif (document.visibilityState !== 'visible' || draft) return;\n\t\t\ttry {\n\t\t\t\tconst perm = await navigator.permissions.query({ name: 'clipboard-read' as PermissionName });\n\t\t\t\tif (perm.state !== 'granted') return;\n\t\t\t\tconst text = (await navigator.clipboard.readText()).trim();\n\t\t\t\tif (CODE_SHAPE.test(text)) draft = text;\n\t\t\t} catch {\n\t\t\t\t// No permission API or no clipboard: the buttons still work.\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener('visibilitychange', onBack);\n\t\twindow.addEventListener('focus', onBack);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('visibilitychange', onBack);\n\t\t\twindow.removeEventListener('focus', onBack);\n\t\t};\n\t});\n</script>\n\n<section class=\"login-card\" aria-label=\"Sign in to Claude Code\">\n\t<header class=\"title\">\n\t\t<iconify-icon icon=\"mdi:account-key-outline\"></iconify-icon>\n\t\t<span>{login.step === 'done' ? 'Signed in' : 'Sign in to Claude Code'}</span>\n\t</header>\n\n\t{#if login.step === 'expired'}\n\t\t<p class=\"lead\">This session's sign-in has expired, so its turns fail until it signs in again.</p>\n\t\t<Button\n\t\t\tvariant=\"warning\"\n\t\t\tsize=\"sm\"\n\t\t\tdisabled={sending}\n\t\t\tonclick={async () => {\n\t\t\t\tsending = true;\n\t\t\t\ttry {\n\t\t\t\t\tawait onText('/login');\n\t\t\t\t\tawait onKeys('Enter');\n\t\t\t\t} finally {\n\t\t\t\t\tsending = false;\n\t\t\t\t}\n\t\t\t}}\n\t\t>\n\t\t\t<iconify-icon icon=\"mdi:login\"></iconify-icon>Sign in\n\t\t</Button>\n\t{:else if login.step === 'failed'}\n\t\t<p class=\"error\">{login.error}</p>\n\t\t<p class=\"lead\">A code works once and only for the link it came from. Try again for a fresh link.</p>\n\t\t<div class=\"link-row\">\n\t\t\t<Button variant=\"warning\" size=\"sm\" onclick={() => void onKeys('Enter')}>\n\t\t\t\t<iconify-icon icon=\"mdi:refresh\"></iconify-icon>Try again\n\t\t\t</Button>\n\t\t\t<Button variant=\"ghost\" size=\"sm\" onclick={() => void onKeys('Escape')}>Cancel</Button>\n\t\t</div>\n\t{:else if login.step === 'done'}\n\t\t<p class=\"lead\">The code was accepted. Claude Code waits for Enter to carry on.</p>\n\t\t<Button variant=\"warning\" size=\"sm\" onclick={() => void onKeys('Enter')}>\n\t\t\t<iconify-icon icon=\"mdi:keyboard-return\"></iconify-icon>Continue\n\t\t</Button>\n\t{:else}\n\t\t<p class=\"lead\">Open the sign-in page, approve, and paste the code it shows you here.</p>\n\t\t{#if url}\n\t\t\t<div class=\"link-row\">\n\t\t\t\t<Button\n\t\t\t\t\thref={url}\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\tvariant=\"warning\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tonclick={() => (awaitingCode = true)}\n\t\t\t\t>\n\t\t\t\t\t<iconify-icon icon=\"mdi:open-in-new\"></iconify-icon>Open sign-in page\n\t\t\t\t</Button>\n\t\t\t\t<Button variant=\"ghost\" size=\"sm\" onclick={() => void copyLink()}>\n\t\t\t\t\t<iconify-icon icon={copied ? 'mdi:check' : 'mdi:content-copy'}></iconify-icon>\n\t\t\t\t\t{copied ? 'Copied' : 'Copy link'}\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t{:else}\n\t\t\t<p class=\"muted\">The link is not on screen. Open the terminal view to see it.</p>\n\t\t{/if}\n\n\t\t<form\n\t\t\tclass=\"code-row\"\n\t\t\tonsubmit={(e) => {\n\t\t\t\te.preventDefault();\n\t\t\t\tvoid submit();\n\t\t\t}}\n\t\t>\n\t\t\t<Input\n\t\t\t\tbind:value={draft}\n\t\t\t\tclass=\"code-input\"\n\t\t\t\tplaceholder=\"Code from the sign-in page\"\n\t\t\t\taria-label=\"Sign-in code\"\n\t\t\t\tautocomplete=\"off\"\n\t\t\t\tspellcheck={false}\n\t\t\t/>\n\t\t\t<Button type=\"button\" variant=\"ghost\" size=\"sm\" disabled={sending} onclick={() => void pasteAndSubmit()}>\n\t\t\t\t<iconify-icon icon=\"mdi:clipboard-arrow-down-outline\"></iconify-icon>Paste\n\t\t\t</Button>\n\t\t\t<Button type=\"submit\" variant=\"warning\" size=\"sm\" disabled={sending || !draft.trim()}>\n\t\t\t\t<iconify-icon icon=\"mdi:send\"></iconify-icon>Sign in\n\t\t\t</Button>\n\t\t</form>\n\n\t\t{#if login.error}<p class=\"error\">{login.error}</p>{/if}\n\t\t{#if login.typed}<p class=\"muted\">Already in the pane's field: <code>{login.typed}</code></p>{/if}\n\t{/if}\n\t{#if note}<p class=\"muted\">{note}</p>{/if}\n</section>\n\n<style>\n\t/* Amber like a dialog: the session waits on a person until it signs in. */\n\t.login-card {\n\t\tmargin: 14px 0 14px 12px;\n\t\tborder: 1px solid #5c4410;\n\t\tborder-left: 3px solid #fbbf24;\n\t\tborder-radius: 8px;\n\t\tbackground: #1a1610;\n\t\tpadding: 10px 12px 12px;\n\t}\n\t.title {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 7px;\n\t\tmargin-bottom: 8px;\n\t\tfont-size: 11px;\n\t\tfont-weight: 700;\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.08em;\n\t\tcolor: #fbbf24;\n\t}\n\t.lead {\n\t\tmargin: 0 0 10px;\n\t\tcolor: #f5f0ee;\n\t}\n\t.link-row,\n\t.code-row {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t}\n\t.code-row {\n\t\tmargin-top: 10px;\n\t}\n\t.code-row :global(.code-input) {\n\t\tflex: 1 1 14rem;\n\t\tmin-width: 0;\n\t\tfont-family: ui-monospace, monospace;\n\t}\n\t.error {\n\t\tmargin: 8px 0 0;\n\t\tcolor: #f87171;\n\t\tfont-size: 12.5px;\n\t}\n\t.muted {\n\t\tmargin: 8px 0 0;\n\t\tcolor: #a8a29e;\n\t\tfont-size: 12.5px;\n\t\toverflow-wrap: anywhere;\n\t}\n</style>\n","<script lang=\"ts\">\n\timport type { RewindAction, RewindChoice, RewindScreen } from '$shared/tmux/rewind.js';\n\timport { Button } from '$lib/components/ui/button';\n\n\tlet {\n\t\tscreen,\n\t\tonRewind\n\t}: {\n\t\t/** The rewind dialog as the pane draws it right now. */\n\t\tscreen: NonNullable<RewindScreen>;\n\t\t/** Works the dialog through the rewind route; resolves false when it failed (the page says why). */\n\t\tonRewind: (action: RewindAction) => Promise<boolean>;\n\t} = $props();\n\n\tlet pending = $state<string | null>(null);\n\tlet card = $state<HTMLElement | null>(null);\n\n\tasync function run(key: string, action: RewindAction) {\n\t\tif (pending) return;\n\t\tpending = key;\n\t\ttry {\n\t\t\tawait onRewind(action);\n\t\t} finally {\n\t\t\tpending = null;\n\t\t}\n\t}\n\n\t// Opened from a prompt far up the transcript, the card is at its foot.\n\t$effect(() => {\n\t\tcard?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n\t});\n\n\t/** The choices that restore, which are what a rewind is for; the summaries come after. */\n\tconst restores = $derived(\n\t\tscreen.step === 'confirm' ? screen.options.filter((o) => o.label.startsWith('Restore')) : []\n\t);\n\tconst summaries = $derived(\n\t\tscreen.step === 'confirm' ? screen.options.filter((o) => o.label.startsWith('Summarize')) : []\n\t);\n</script>\n\n<section class=\"rewind-card\" aria-label=\"Rewind\" bind:this={card}>\n\t<header class=\"title\">\n\t\t<iconify-icon icon=\"mdi:history\"></iconify-icon>\n\t\t<span>Rewind</span>\n\t</header>\n\n\t{#if screen.step === 'list'}\n\t\t<p class=\"lead\">Go back to before which prompt?</p>\n\t\t<div class=\"rows\">\n\t\t\t{#if screen.above > 0}<p class=\"muted\">{screen.above} earlier, use Rewind on a prompt above</p>{/if}\n\t\t\t{#each screen.rows.filter((r) => !r.current) as row (row.text)}\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"row\"\n\t\t\t\t\tclass:selected={row.selected}\n\t\t\t\t\tdisabled={pending !== null}\n\t\t\t\t\tonclick={() => void run(row.text, { action: 'open', prompt: row.text, back: null })}\n\t\t\t\t>\n\t\t\t\t\t<span class=\"row-text\">{row.text}</span>\n\t\t\t\t\t{#if row.files}<span class=\"row-files\">{row.files}</span>{/if}\n\t\t\t\t</button>\n\t\t\t{/each}\n\t\t</div>\n\t{:else}\n\t\t<p class=\"lead\">Go back to before this prompt{screen.ago ? `, sent ${screen.ago}` : ''}:</p>\n\t\t<blockquote>{screen.prompt}</blockquote>\n\t\t{#if screen.effects.length > 0}\n\t\t\t<ul class=\"effects\">\n\t\t\t\t{#each screen.effects as effect (effect)}<li>{effect}</li>{/each}\n\t\t\t</ul>\n\t\t{/if}\n\t\t<div class=\"choices\">\n\t\t\t{#each restores as option (option.n)}\n\t\t\t\t<Button\n\t\t\t\t\tvariant={option.n === restores[0]?.n ? 'warning' : 'outline'}\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tdisabled={pending !== null}\n\t\t\t\t\tonclick={() => void run(option.label, { action: 'choose', choice: option.label as RewindChoice })}\n\t\t\t\t>\n\t\t\t\t\t{pending === option.label ? 'Rewinding…' : option.label}\n\t\t\t\t</Button>\n\t\t\t{/each}\n\t\t</div>\n\t\t{#if summaries.length > 0}\n\t\t\t<div class=\"choices\">\n\t\t\t\t{#each summaries as option (option.n)}\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tdisabled={pending !== null}\n\t\t\t\t\t\tonclick={() => void run(option.label, { action: 'choose', choice: option.label as RewindChoice })}\n\t\t\t\t\t>\n\t\t\t\t\t\t<iconify-icon icon=\"mdi:text-box-outline\"></iconify-icon>{option.label}\n\t\t\t\t\t</Button>\n\t\t\t\t{/each}\n\t\t\t</div>\n\t\t{/if}\n\t\t<p class=\"muted\">Files changed through Bash or by hand stay as they are.</p>\n\t{/if}\n\t<div class=\"foot\">\n\t\t<Button variant=\"ghost\" size=\"sm\" disabled={pending !== null} onclick={() => void run('cancel', { action: 'cancel' })}>\n\t\t\tCancel\n\t\t</Button>\n\t</div>\n</section>\n\n<style>\n\t/* Amber like a dialog: the pane waits on a person until it is answered. */\n\t.rewind-card {\n\t\tmargin: 14px 0 14px 12px;\n\t\tborder: 1px solid #5c4410;\n\t\tborder-left: 3px solid #fbbf24;\n\t\tborder-radius: 8px;\n\t\tbackground: #1a1610;\n\t\tpadding: 10px 12px 12px;\n\t}\n\t.title {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 7px;\n\t\tmargin-bottom: 8px;\n\t\tfont-size: 11px;\n\t\tfont-weight: 700;\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.08em;\n\t\tcolor: #fbbf24;\n\t}\n\t.lead {\n\t\tmargin: 0 0 8px;\n\t\tcolor: #f5f0ee;\n\t}\n\tblockquote {\n\t\tmargin: 0 0 8px;\n\t\tpadding: 4px 0 4px 10px;\n\t\tborder-left: 2px solid #5c4410;\n\t\tcolor: #e7e5e4;\n\t\twhite-space: pre-wrap;\n\t\toverflow-wrap: anywhere;\n\t}\n\t.effects {\n\t\tmargin: 0 0 10px;\n\t\tpadding-left: 18px;\n\t\tcolor: #d6d3d1;\n\t\tfont-size: 12.5px;\n\t}\n\t.rows {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 4px;\n\t}\n\t.row {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 10px;\n\t\twidth: 100%;\n\t\tpadding: 6px 8px;\n\t\tborder: 1px solid #3a2f17;\n\t\tborder-radius: 6px;\n\t\tbackground: transparent;\n\t\tcolor: #f5f0ee;\n\t\ttext-align: left;\n\t\tcursor: pointer;\n\t}\n\t.row:hover:not(:disabled),\n\t.row:focus-visible {\n\t\tborder-color: #fbbf24;\n\t}\n\t.row.selected {\n\t\tborder-color: #8a6a1c;\n\t}\n\t.row-text {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n\t.row-files {\n\t\tflex: none;\n\t\tcolor: #a8a29e;\n\t\tfont-size: 12px;\n\t}\n\t.choices {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 6px;\n\t\tmargin-top: 6px;\n\t}\n\t.foot {\n\t\tdisplay: flex;\n\t\tjustify-content: flex-end;\n\t\tmargin-top: 6px;\n\t}\n\t.muted {\n\t\tmargin: 8px 0 0;\n\t\tcolor: #a8a29e;\n\t\tfont-size: 12.5px;\n\t}\n</style>\n","/**\n * MCP tools reach the transcript as `mcp__<server>__<tool>`. Server names may\n * themselves hold single underscores (`claude_ai_Claude_Docs`), so the name is\n * split on the double underscore, never on `_`.\n */\nexport interface McpToolName {\n server: string;\n tool: string;\n}\n\nexport function parseMcpToolName(name: string): McpToolName | null {\n const match = /^mcp__(.+?)__(.+)$/.exec(name);\n return match ? { server: match[1], tool: match[2] } : null;\n}\n","import { parseMcpToolName } from '$shared/transcript/mcp.js';\n\n/** Icons for MCP server families recognisable from the server name. */\nconst MCP_FAMILIES: [RegExp, string][] = [\n\t[/brave|chrome|browser|devtools|playwright|puppeteer/i, 'mdi:web'],\n\t[/docs|notion|confluence|drive/i, 'mdi:file-document-outline'],\n\t[/github/i, 'mdi:github'],\n\t[/slack/i, 'mdi:slack']\n];\n\n/** The icon a tool call is drawn with in the transcript. */\nexport function toolIcon(name: string): string {\n\tconst mcp = parseMcpToolName(name);\n\tif (mcp) {\n\t\treturn MCP_FAMILIES.find(([pattern]) => pattern.test(mcp.server))?.[1] ?? 'mdi:power-plug-outline';\n\t}\n\tconst n = name.toLowerCase();\n\tif (n.includes('bash') || n.includes('command')) return 'mdi:console';\n\tif (n.includes('edit') || n.includes('write') || n.includes('notebook')) return 'mdi:file-edit-outline';\n\tif (n.includes('read')) return 'mdi:file-eye-outline';\n\tif (n.includes('grep') || n.includes('glob') || n.includes('search')) return 'mdi:magnify';\n\tif (n.includes('task') || n.includes('agent')) return 'mdi:robot-outline';\n\tif (n.includes('web')) return 'mdi:web';\n\tif (n.includes('todo')) return 'mdi:checkbox-marked-outline';\n\treturn 'mdi:tools';\n}\n","<script lang=\"ts\">\n\timport { parseMcpToolName } from '$shared/transcript/mcp.js';\n\n\t/**\n\t * A tool call's one-line label. Built-in tools read as their summary; an MCP\n\t * tool adds the server it came from, faint, ahead of the tool name, and sets\n\t * its key argument apart from the name.\n\t */\n\tlet { name, summary }: { name: string; summary: string } = $props();\n\n\tconst mcp = $derived(parseMcpToolName(name));\n\t// The summary reads `tool: arg`; tool names never hold ': '.\n\tconst arg = $derived(mcp ? summary.split(': ').slice(1).join(': ') : '');\n</script>\n\n{#if mcp}<span class=\"server\">{mcp.server}</span><span class=\"sep\">·</span><span class=\"tool\"\n\t\t>{mcp.tool}</span\n\t>{#if arg}<span class=\"arg\">{arg}</span>{/if}{:else}{summary}{/if}\n\n<style>\n\t.server {\n\t\topacity: 0.55;\n\t}\n\t.sep {\n\t\topacity: 0.4;\n\t\tmargin: 0 0.45em;\n\t}\n\t.arg {\n\t\tmargin-left: 1.2em;\n\t\topacity: 0.7;\n\t}\n</style>\n","import type { TranscriptItem } from \"./tool-groups.js\";\n\n/**\n * Where a rewind left the conversation.\n *\n * Claude Code's rewind (Esc Esc, or /rewind) writes nothing when it runs: the\n * next prompt is simply logged with the `parentUuid` of the point it went\n * back to, in the same file, so the log becomes a tree and the turns after\n * that point are a branch nobody follows any more. A prompt is the first sign\n * of it, then, and the test is whether anything the model said was logged\n * between its parent and itself: an ordinary prompt hangs off the line just\n * before it, give or take Claude Code's own bookkeeping, and only a rewind\n * skips an answer.\n */\nexport class ForkTracker {\n private seqByUuid = new Map<string, number>();\n private next = 0;\n private lastAssistant = -1;\n\n /** Note a main-conversation line in file order; answers its position. */\n see(uuid: string | null, type: unknown): number {\n const seq = this.next++;\n if (uuid) this.seqByUuid.set(uuid, seq);\n if (type === \"assistant\") this.lastAssistant = seq;\n return seq;\n }\n\n /**\n * For a prompt about to be noted, the position after which the conversation\n * was abandoned (everything after it, up to the prompt, is the old branch),\n * or null when the prompt simply follows on.\n */\n abandonedAfter(parentUuid: string | null): number | null {\n if (!parentUuid) return null;\n const parent = this.seqByUuid.get(parentUuid);\n if (parent === undefined || this.lastAssistant <= parent) return null;\n return parent;\n }\n}\n\n/** A run of items a rewind went back past, drawn folded. */\nexport interface RewoundRun {\n kind: \"rewound\";\n id: string;\n items: TranscriptItem[];\n /** How many prompts it holds. */\n turns: number;\n}\n\nconst isRewound = (item: TranscriptItem) => (item.kind === \"group\" ? item.entries[0]?.rewound : item.rewound) === true;\n\n/** Fold each run of rewound items into one, leaving the rest as they are. */\nexport function foldRewound(items: TranscriptItem[]): (TranscriptItem | RewoundRun)[] {\n const out: (TranscriptItem | RewoundRun)[] = [];\n for (const item of items) {\n if (!isRewound(item)) {\n out.push(item);\n continue;\n }\n let run = out[out.length - 1];\n if (run?.kind !== \"rewound\") {\n run = { kind: \"rewound\", id: `rewound:${item.id}`, items: [], turns: 0 };\n out.push(run);\n }\n run.items.push(item);\n if (item.kind === \"user\") run.turns++;\n }\n return out;\n}\n","/**\n * A grilling round, read out of Claude's reply so it can be answered as a form.\n *\n * The grilling skill asks a whole round of questions at once, each in the\n * same shape, with its own recommendation under it:\n *\n * ❓ **Q1** - **Storage**: Where do drafts live?\n *\n * ➡️ In the session JSON, next to the rest of the live state.\n *\n * Answering that in a text box means retyping \"Q1: yes, Q2: …\" for every\n * question, most of which you agree with. Read as a round, each question\n * becomes a row you accept with one tap or answer in your own words, and the\n * reply is written for you.\n */\n\nexport interface GrillQuestion {\n /** The number Claude gave it: Q3 is 3. */\n n: number;\n /** The bold title after the number, when the question has one. */\n title: string | null;\n /** The question itself, as markdown. */\n body: string;\n /** Claude's recommended answer, as markdown; null when it offered none. */\n recommended: string | null;\n}\n\nexport interface GrillRound {\n /** Whatever Claude wrote before the first question. */\n intro: string;\n questions: GrillQuestion[];\n /** Whatever it wrote after the last question's recommendation. */\n outro: string;\n}\n\nexport type GrillAnswer = { mode: \"accept\" } | { mode: \"own\"; text: string } | { mode: \"skip\" };\n\n/** `❓ **Q1** - **Title**: body`, or `❓ **Q1 - Title**: body`. */\nconst QUESTION = /^\\s*❓️?\\s*\\*\\*Q(\\d+)(?:\\s*[-–—:.]\\s*([^*]+?))?\\*\\*\\s*[-–—:.]?\\s*(?:\\*\\*([^*]+?)\\*\\*\\s*:?)?\\s*(.*)$/;\nconst RECOMMENDED = /^\\s*➡️?\\s*(.*)$/;\n\n/** Splits text at blank lines into its first paragraph and the rest. */\nfunction firstParagraph(lines: string[]): [string[], string[]] {\n const blank = lines.findIndex((l) => l.trim() === \"\");\n return blank === -1 ? [lines, []] : [lines.slice(0, blank), lines.slice(blank + 1)];\n}\n\nfunction join(lines: string[]): string {\n return lines.join(\"\\n\").trim();\n}\n\n/** The round in `text`, or null when it asks no numbered questions. */\nexport function parseGrillRound(text: string): GrillRound | null {\n const lines = text.split(\"\\n\");\n const starts: number[] = [];\n lines.forEach((line, i) => {\n if (QUESTION.test(line)) starts.push(i);\n });\n if (starts.length === 0) return null;\n\n const intro = join(lines.slice(0, starts[0]));\n const questions: GrillQuestion[] = [];\n let outro = \"\";\n\n starts.forEach((start, qi) => {\n const end = starts[qi + 1] ?? lines.length;\n const m = lines[start].match(QUESTION)!;\n const rest = lines.slice(start + 1, end);\n const recAt = rest.findIndex((l) => RECOMMENDED.test(l));\n const bodyLines = [m[4], ...(recAt === -1 ? rest : rest.slice(0, recAt))];\n\n let recommended: string | null = null;\n if (recAt !== -1) {\n const recLines = [rest[recAt].match(RECOMMENDED)![1], ...rest.slice(recAt + 1)];\n const [para, after] = firstParagraph(recLines);\n recommended = join(para) || null;\n // Past the last question, what follows the recommendation is Claude\n // talking to you again, not part of the answer it proposed.\n if (qi === starts.length - 1) outro = join(after);\n else if (join(after)) recommended = join(recLines);\n }\n\n questions.push({\n n: Number(m[1]),\n title: (m[2] ?? m[3])?.trim() || null,\n body: join(bodyLines),\n recommended,\n });\n });\n\n return { intro, questions, outro };\n}\n\n/**\n * The reply a round's answers make, one line per question in Claude's order.\n * A skipped question is said to be skipped, so Claude knows it is still open\n * rather than guessing it was agreed.\n */\nexport function composeGrillReply(round: GrillRound, answers: Record<number, GrillAnswer>): string {\n return round.questions\n .map((q) => {\n const label = q.title ? `Q${q.n} (${q.title})` : `Q${q.n}`;\n const answer = answers[q.n] ?? (q.recommended ? { mode: \"accept\" } : { mode: \"skip\" });\n if (answer.mode === \"accept\") return `${label}: agreed, go with your recommendation.`;\n if (answer.mode === \"skip\" || !answer.text.trim()) return `${label}: skip for now, leave it open.`;\n return `${label}: ${answer.text.trim()}`;\n })\n .join(\"\\n\");\n}\n","/**\n * Folds runs of routine tool calls into one summary line, the way Claude\n * Code's fullscreen TUI does: \"Ran 4 shell commands\", \"Searched for 1\n * pattern, called brave-windows 2 times\". A working session otherwise reads\n * as a wall of tool rows with the prose lost between them.\n *\n * Only calls that are finished and unremarkable fold. Anything the reader\n * should see without opening a group stays a row of its own and ends the run:\n * a call still in flight, a subagent, a todo or plan update, an edit drawn as\n * a diff, a question. Thinking between folded calls folds with them; thinking\n * before the first call or after the last stays outside, with the prose.\n */\n\nimport { asRecord, readString } from \"./json.js\";\nimport { parseMcpToolName } from \"./mcp.js\";\nimport type { TranscriptEntry } from \"./parser.js\";\n\ntype ToolEntry = Extract<TranscriptEntry, { kind: \"tool\" }>;\n\nexport interface ToolGroup {\n kind: \"group\";\n /** The first call's id, so the group keeps its key as it grows. */\n id: string;\n entries: TranscriptEntry[];\n summary: string;\n failed: number;\n}\n\n/**\n * An entry passes through as the same object, so a keyed `each` over the\n * items re-renders only the rows that changed, not every row on every delta.\n */\nexport type TranscriptItem = TranscriptEntry | ToolGroup;\n\n/** Tools whose rows the transcript draws specially, never folded. */\nconst STANDALONE_TOOLS = new Set([\n \"Task\",\n \"Agent\",\n \"TodoWrite\",\n \"TaskCreate\",\n \"TaskUpdate\",\n \"ExitPlanMode\",\n \"EnterPlanMode\",\n \"AskUserQuestion\",\n]);\n\nfunction foldable(entry: TranscriptEntry): entry is ToolEntry {\n return (\n entry.kind === \"tool\" &&\n entry.result != null &&\n !entry.patch &&\n !STANDALONE_TOOLS.has(entry.name)\n );\n}\n\n/** A verb phrase, singular and plural, for one category of call. */\ninterface Category {\n key: string;\n phrase: (n: number) => string;\n}\n\nconst plural = (n: number, one: string, many: string) => `${n} ${n === 1 ? one : many}`;\nconst times = (n: number) => plural(n, \"time\", \"times\");\n\nconst SHELL: Category = {\n key: \"shell\",\n phrase: (n) => `ran ${plural(n, \"shell command\", \"shell commands\")}`,\n};\nconst READ: Category = { key: \"read\", phrase: (n) => `read ${plural(n, \"file\", \"files\")}` };\nconst EDIT: Category = { key: \"edit\", phrase: (n) => `edited ${plural(n, \"file\", \"files\")}` };\nconst WRITE: Category = { key: \"write\", phrase: (n) => `wrote ${plural(n, \"file\", \"files\")}` };\nconst SEARCH: Category = {\n key: \"search\",\n phrase: (n) => `searched for ${plural(n, \"pattern\", \"patterns\")}`,\n};\nconst LIST: Category = {\n key: \"list\",\n phrase: (n) => `listed ${plural(n, \"directory\", \"directories\")}`,\n};\nconst FETCH: Category = { key: \"fetch\", phrase: (n) => `fetched ${plural(n, \"page\", \"pages\")}` };\nconst WEB_SEARCH: Category = { key: \"websearch\", phrase: (n) => `searched the web ${times(n)}` };\n\n/** A shell command chaining, redirecting or spanning lines is just a shell command. */\nconst COMPOUND = /[|;&<>`$\\n]/;\nconst SHELL_VERBS: Record<string, Category> = {\n ls: LIST,\n tree: LIST,\n grep: SEARCH,\n rg: SEARCH,\n ag: SEARCH,\n cat: READ,\n head: READ,\n tail: READ,\n};\n\n/** A lone `ls` or `grep` reads as what it does, as the TUI shows it. */\nfunction shellCategory(input: string): Category {\n let command: string | undefined;\n try {\n command = readString(asRecord(JSON.parse(input))?.command)?.trim();\n } catch {\n // Truncated input: fall through to a plain shell command.\n }\n if (!command || COMPOUND.test(command)) return SHELL;\n const [verb, ...args] = command.split(/\\s+/);\n const category = SHELL_VERBS[verb] ?? SHELL;\n // `cat a b` is not \"read 1 file\"; only a read of exactly one file says so.\n if (category === READ && args.filter((a) => !a.startsWith(\"-\")).length !== 1) return SHELL;\n return category;\n}\n\nconst TOOL_CATEGORIES: Record<string, Category> = {\n BashOutput: SHELL,\n KillShell: SHELL,\n PowerShell: SHELL,\n Read: READ,\n Edit: EDIT,\n MultiEdit: EDIT,\n NotebookEdit: EDIT,\n Write: WRITE,\n Grep: SEARCH,\n Glob: SEARCH,\n LS: LIST,\n WebFetch: FETCH,\n WebSearch: WEB_SEARCH,\n};\n\n/**\n * Categories by entry. The view regroups on every streamed delta, and a Bash\n * call's category costs a JSON parse; an entry that changes is a new object.\n */\nconst categoryCache = new WeakMap<ToolEntry, Category>();\n\nfunction categorize(tool: ToolEntry): Category {\n let category = categoryCache.get(tool);\n if (!category) {\n category = categorizeUncached(tool);\n categoryCache.set(tool, category);\n }\n return category;\n}\n\nfunction categorizeUncached(tool: ToolEntry): Category {\n const mcp = parseMcpToolName(tool.name);\n if (mcp) return { key: `mcp:${mcp.server}`, phrase: (n) => `called ${mcp.server} ${times(n)}` };\n if (tool.name === \"Bash\") return shellCategory(tool.input);\n return (\n TOOL_CATEGORIES[tool.name] ?? {\n key: `tool:${tool.name}`,\n phrase: (n) => `used ${tool.name} ${times(n)}`,\n }\n );\n}\n\n/** \"Listed 1 directory, ran 2 shell commands\": categories in order of first use. */\nexport function summarizeToolRun(tools: ToolEntry[]): string {\n const counts = new Map<string, { category: Category; n: number }>();\n for (const tool of tools) {\n const category = categorize(tool);\n const seen = counts.get(category.key);\n if (seen) seen.n++;\n else counts.set(category.key, { category, n: 1 });\n }\n const text = [...counts.values()].map(({ category, n }) => category.phrase(n)).join(\", \");\n return text.charAt(0).toUpperCase() + text.slice(1);\n}\n\n/**\n * The transcript as the view draws it: entries in order, with every run of two\n * or more foldable calls (and the thinking among them) gathered into a group.\n */\nexport function groupToolRuns(entries: TranscriptEntry[]): TranscriptItem[] {\n const items: TranscriptItem[] = [];\n let run: TranscriptEntry[] = [];\n\n const flush = () => {\n // Thinking around the calls belongs to the prose beside it.\n let start = 0;\n let end = run.length;\n while (start < end && run[start].kind === \"thinking\") start++;\n while (end > start && run[end - 1].kind === \"thinking\") end--;\n const body = run.slice(start, end);\n const tools = body.filter(foldable);\n if (tools.length >= 2) {\n items.push(...run.slice(0, start));\n items.push({\n kind: \"group\",\n id: body[0].id,\n entries: body,\n summary: summarizeToolRun(tools),\n failed: tools.filter((t) => t.result?.ok === false).length,\n });\n items.push(...run.slice(end));\n } else {\n items.push(...run);\n }\n run = [];\n };\n\n for (const entry of entries) {\n if (entry.kind === \"thinking\" || foldable(entry)) {\n run.push(entry);\n continue;\n }\n flush();\n items.push(entry);\n }\n flush();\n return items;\n}\n","<script lang=\"ts\">\n\t/**\n\t * What one turn changed, drawn where the turn ends in the transcript. Closed,\n\t * it is one quiet line (\"Changed 3 files +42 −10\"); open, a card with the\n\t * turn's files and their counts. A file, or \"View diff\", opens the side\n\t * panel's Changes pane on this turn.\n\t */\n\timport { Button } from '$lib/components/ui/button';\n\timport { displayPath, statusLetter, sumCounts, type Turn } from '$lib/side-panel/changes';\n\n\tlet {\n\t\tturn,\n\t\troot,\n\t\topen = $bindable(false),\n\t\tlink\n\t}: {\n\t\tturn: Turn;\n\t\t/** Paths under it are shown relative to it. */\n\t\troot: string | null;\n\t\topen?: boolean;\n\t\t/** Where the Changes pane opens on this turn, at `file` or its first file. */\n\t\tlink: (file: string | null) => string;\n\t} = $props();\n\n\tconst totals = $derived(sumCounts(turn.files));\n\tconst count = $derived(`${turn.files.length} ${turn.files.length === 1 ? 'file' : 'files'}`);\n</script>\n\n{#if open}\n\t<section class=\"card\" aria-label=\"Files changed in this turn\">\n\t\t<header>\n\t\t\t<span class=\"label\">\n\t\t\t\tCHANGED FILES ({turn.files.length}) · <span class=\"add\">+{totals.additions}</span>\n\t\t\t\t<span class=\"del\">−{totals.deletions}</span>\n\t\t\t</span>\n\t\t\t<span class=\"grow\"></span>\n\t\t\t<Button variant=\"ghost\" size=\"sm\" class=\"h-[30px] border border-[#2f2a27] px-2.5 text-xs\" onclick={() => (open = false)}>\n\t\t\t\tCollapse\n\t\t\t</Button>\n\t\t\t<Button\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\tclass=\"h-[30px] border border-[#3f3a36] px-2.5 text-xs\"\n\t\t\t\thref={link(null)}\n\t\t\t\tdata-sveltekit-noscroll\n\t\t\t\tdata-sveltekit-keepfocus\n\t\t\t>\n\t\t\t\tView diff\n\t\t\t</Button>\n\t\t</header>\n\t\t<ul>\n\t\t\t{#each turn.files as f (f.file)}\n\t\t\t\t{@const letter = statusLetter(f)}\n\t\t\t\t<li>\n\t\t\t\t\t<a\n\t\t\t\t\t\thref={link(f.file)}\n\t\t\t\t\t\ttitle={f.oldPath ? `${f.oldPath} → ${f.file}` : f.file}\n\t\t\t\t\t\tdata-sveltekit-noscroll\n\t\t\t\t\t\tdata-sveltekit-keepfocus\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"st st-{letter === '?' ? 'u' : letter.toLowerCase()}\">{letter}</span>\n\t\t\t\t\t\t<span class=\"path\"><bdi>{displayPath(f.file, root)}</bdi></span>\n\t\t\t\t\t\t{#if f.binary}\n\t\t\t\t\t\t\t<span class=\"dim\">bin</span>\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t{#if f.additions}<span class=\"add\">+{f.additions}</span>{/if}\n\t\t\t\t\t\t\t{#if f.deletions}<span class=\"del\">−{f.deletions}</span>{/if}\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t{/each}\n\t\t</ul>\n\t</section>\n{:else}\n\t<button type=\"button\" class=\"line\" onclick={() => (open = true)} aria-expanded=\"false\">\n\t\t<iconify-icon icon=\"mdi:chevron-right\"></iconify-icon>\n\t\t<span>Changed {count}</span>\n\t\t<span class=\"nums\"><span class=\"add\">+{totals.additions}</span> <span class=\"del\">−{totals.deletions}</span></span>\n\t</button>\n{/if}\n\n<style>\n\t.card {\n\t\tmargin: 8px 0 10px 12px;\n\t\tborder: 1px solid #262220;\n\t\tborder-radius: 10px;\n\t\tbackground: #141210;\n\t}\n\theader {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 8px;\n\t\tpadding: 8px 10px 8px 14px;\n\t}\n\t.label {\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 10.5px;\n\t\tletter-spacing: 0.12em;\n\t\tcolor: #a8a29e;\n\t\twhite-space: nowrap;\n\t}\n\t.grow {\n\t\tflex: 1;\n\t}\n\tul {\n\t\tlist-style: none;\n\t\tmargin: 0;\n\t\tpadding: 6px;\n\t\tborder-top: 1px solid #221e1c;\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 12px;\n\t}\n\tli a {\n\t\tdisplay: flex;\n\t\tgap: 10px;\n\t\tpadding: 6px 10px;\n\t\tborder-radius: 6px;\n\t\tcolor: #d6d3d1;\n\t\ttext-decoration: none;\n\t}\n\tli a:hover {\n\t\tbackground: #1f1c1a;\n\t\tcolor: #fff;\n\t}\n\t.st {\n\t\twidth: 1ch;\n\t}\n\t.st-m,\n\t.st-r {\n\t\tcolor: #fbbf24;\n\t}\n\t.st-a {\n\t\tcolor: #4ade80;\n\t}\n\t.st-d {\n\t\tcolor: #f87171;\n\t}\n\t.st-u,\n\t.dim {\n\t\tcolor: #78716c;\n\t}\n\t.path {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t\t/* Cut from the left, so the file name stays in view. */\n\t\tdirection: rtl;\n\t\ttext-align: left;\n\t}\n\t.add {\n\t\tcolor: #4ade80;\n\t}\n\t.del {\n\t\tcolor: #f87171;\n\t}\n\t.line {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 8px;\n\t\tmargin: 6px 0 8px 12px;\n\t\tpadding: 6px 12px 6px 8px;\n\t\tborder: 1px solid #1f1c1a;\n\t\tborder-radius: 8px;\n\t\tbackground: transparent;\n\t\tcolor: #a8a29e;\n\t\tfont-size: 13px;\n\t\tcursor: pointer;\n\t}\n\t.line:hover {\n\t\tborder-color: #2f2a27;\n\t\tcolor: #d6d3d1;\n\t}\n\t.line iconify-icon {\n\t\tcolor: #78716c;\n\t\tfont-size: 15px;\n\t}\n\t.nums {\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 12px;\n\t}\n</style>\n","<script lang=\"ts\">\n\timport { untrack } from 'svelte';\n\timport { goto } from '$app/navigation';\n\timport { renderMarkdown } from '$lib/markdown';\n\timport type { TranscriptEntry } from '../../../../src/transcript/parser';\n\timport DictateButton from './DictateButton.svelte';\n\timport QuoteSelection from './QuoteSelection.svelte';\n\timport GithubRefCards from './GithubRefCards.svelte';\n\timport { keepsCaret, sayInto } from '$lib/dictation';\n\timport DialogCard from '$lib/components/DialogCard.svelte';\n\timport LoginCard from '$lib/components/LoginCard.svelte';\n\timport RewindCard from '$lib/components/RewindCard.svelte';\n\timport type { SubagentPayload } from '$lib/stores/transcript.svelte';\n\timport { toolIcon } from '$lib/tool-icons';\n\timport ToolLabel from '$lib/components/ToolLabel.svelte';\n\timport { toolFileTarget } from '$lib/side-panel/files';\n\timport SessionStateIndicator from '$lib/components/SessionStateIndicator.svelte';\n\timport { sessionStateVisual } from '$shared/session-state.js';\n\timport type { DeliveryInfo } from '$shared/types/ws-messages.js';\n\timport type { PaneActivity, PaneChoice } from '$shared/types/ws-messages.js';\n\timport type { LoginScreen } from '$shared/tmux/login.js';\n\timport type { RewindAction, RewindScreen } from '$shared/tmux/rewind.js';\n\timport { foldRewound } from '$shared/transcript/forks.js';\n\timport { formatSpinnerElapsed } from '$lib/format';\n\timport { Badge } from '$lib/components/ui/badge';\n\timport {\n\t\tparseGrillRound,\n\t\tcomposeGrillReply,\n\t\ttype GrillAnswer,\n\t\ttype GrillRound\n\t} from '$shared/transcript/grilling.js';\n\timport { groupToolRuns, type TranscriptItem } from '$shared/transcript/tool-groups.js';\n\timport TurnChangesCard from '$lib/components/TurnChangesCard.svelte';\n\timport { placeTurnChanges, type TranscriptChanges, type Turn } from '$lib/side-panel/changes';\n\n\tlet {\n\t\tentries,\n\t\tavailable,\n\t\tloaded,\n\t\tsessionState = null,\n\t\tcurrentAction = null,\n\t\tactivity = null,\n\t\tdelivered = [],\n\t\tsuggestion = null,\n\t\tonAcceptSuggestion,\n\t\tpaneChoice = null,\n\t\tpaneLogin = null,\n\t\tpaneRewind = null,\n\t\tonRewind,\n\t\tsubagents = {},\n\t\tonLoadSubagent,\n\t\tonSendKeys,\n\t\tonSendPaneText,\n\t\tolderCount = 0,\n\t\tloadingEarlier = false,\n\t\tonLoadEarlier,\n\t\tonSendReply,\n\t\tdictateTarget = null,\n\t\tbase = '',\n\t\tfileLink,\n\t\trepoSession = null,\n\t\tonOpenGithub,\n\t\tagentLink,\n\t\tturnChanges = null,\n\t\tchangesLink,\n\t\tonQuote\n\t}: {\n\t\tentries: TranscriptEntry[];\n\t\tavailable: boolean;\n\t\t/** False while the first snapshot is still in flight. */\n\t\tloaded: boolean;\n\t\t/** Live session state from the hooks (real-time, unlike the JSONL which lags). */\n\t\tsessionState?: 'busy' | 'idle' | 'waiting' | 'permission' | null;\n\t\tcurrentAction?: string | null;\n\t\t/** Claude Code's spinner line, split into its parts; null outside tmux or between frames. */\n\t\tactivity?: PaneActivity | null;\n\t\t/** What claude-mux's queue and steers handed the pane lately, newest last. */\n\t\tdelivered?: DeliveryInfo[];\n\t\t/** Claude Code's own ghost-text proposal for the next prompt. */\n\t\tsuggestion?: string | null;\n\t\t/** Accepts the suggestion (Tab then Enter in the pane). */\n\t\tonAcceptSuggestion?: () => void;\n\t\t/** The dialog the pane is drawing, as the poll read it; drawn as a card here. */\n\t\tpaneChoice?: PaneChoice | null;\n\t\t/** Claude Code's sign-in screen, which only the pane shows. */\n\t\tpaneLogin?: LoginScreen;\n\t\t/** Claude Code's rewind dialog, which only the pane shows. */\n\t\tpaneRewind?: RewindScreen;\n\t\t/** Works the rewind dialog; without it prompts offer no rewind. Resolves false when it failed. */\n\t\tonRewind?: (action: RewindAction) => Promise<boolean>;\n\t\t/** Sends a tmux key sequence (space-separated) to answer a dialog. */\n\t\tonSendKeys?: (keys: string) => Promise<void> | void;\n\t\t/** Types text into the pane as-is, for a dialog's free-text row or notes. */\n\t\tonSendPaneText?: (text: string) => Promise<void> | void;\n\t\t/** Subagent work, keyed by the Task tool_use id that spawned it. */\n\t\tsubagents?: Record<string, SubagentPayload>;\n\t\t/** A reader opened an agent's card: fetch everything it ran and reported. */\n\t\tonLoadSubagent?: (agentId: string) => void;\n\t\t/** Entries the server holds before the ones passed in `entries`. */\n\t\tolderCount?: number;\n\t\t/** A request for those older entries is in flight. */\n\t\tloadingEarlier?: boolean;\n\t\t/**\n\t\t * Asks for the next slice of older entries. Called before they render,\n\t\t * so the scroll container can note where the reader was.\n\t\t */\n\t\tonLoadEarlier?: () => void;\n\t\t/**\n\t\t * Sends a message as the next prompt, the way the composer does;\n\t\t * resolves false when the pane did not take it.\n\t\t */\n\t\tonSendReply?: (text: string) => Promise<boolean>;\n\t\t/** The session a question's own microphone records for; null where voice is off. */\n\t\tdictateTarget?: string | null;\n\t\t/** The relay path to the session's machine, '' for this one: where its images are read. */\n\t\tbase?: string;\n\t\t/** The link that opens a file a tool row touched or a message names, at a line; without it neither draws one. */\n\t\tfileLink?: (path: string, line: number | null) => string;\n\t\t/** The session whose repo a bare `#123` in a message is looked up in; null where it has none. */\n\t\trepoSession?: string | null;\n\t\t/** Opens a pull request or issue (`owner/name#n`) in the GitHub pane; without it a chip's click goes to github.com. */\n\t\tonOpenGithub?: (ref: string) => void;\n\t\t/** Where a subagent opens as a page of its own; without it agent cards link nowhere. */\n\t\tagentLink?: (agentId: string) => string;\n\t\t/** The session's turns that edited files, from the changes API's session source. */\n\t\tturnChanges?: TranscriptChanges | null;\n\t\t/** Where the Changes pane opens on turn `n`, at `file` or its first file; without it no summaries draw. */\n\t\tchangesLink?: (n: number, file: string | null) => string;\n\t\t/** Takes text selected in the transcript (\"Add to prompt\", Ctrl+L); without it a selection offers nothing. */\n\t\tonQuote?: (text: string) => void;\n\t} = $props();\n\n\tlet transcriptEl = $state<HTMLElement | null>(null);\n\n\t// ── file paths and GitHub links in messages ──────────────────────────\n\t// A link to a pull request or issue is only marked here; `GithubRefCards`\n\t// draws it as a chip once GitHub has answered.\n\t// A message's HTML is rendered once, so the href written into it is the\n\t// link as it stood then (read untracked: tracking it would render every\n\t// message again each time the URL moved). It serves a middle click or a\n\t// long press; a plain click asks `fileLink` afresh.\n\n\tfunction markdown(text: string): string {\n\t\tconst link = fileLink;\n\t\treturn renderMarkdown(text, {\n\t\t\tfiles: link && ((path, line) => untrack(() => link(path, line))),\n\t\t\tgithub: { bare: repoSession != null }\n\t\t});\n\t}\n\n\tfunction openFileLink(e: MouseEvent) {\n\t\tif (!fileLink || e.defaultPrevented || e.button !== 0) return;\n\t\tif (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) return;\n\t\tconst a = e.target instanceof Element ? e.target.closest<HTMLAnchorElement>('a.file-link') : null;\n\t\tconst path = a?.dataset.file;\n\t\tif (!path) return;\n\t\te.preventDefault();\n\t\tvoid goto(fileLink(path, Number(a.dataset.line) || null), { noScroll: true, keepFocus: true });\n\t}\n\n\t/** One listener for every file link in the transcript, since they arrive as HTML. */\n\tfunction fileLinks(node: HTMLElement) {\n\t\tnode.addEventListener('click', openFileLink);\n\t\treturn { destroy: () => node.removeEventListener('click', openFileLink) };\n\t}\n\n\t// ── live activity line ───────────────────────────────────────────────\n\t// The pane's elapsed count would move every second; the server sends the\n\t// turn's start instead, and the count ticks here.\n\n\tlet now = $state(Date.now());\n\tconst startedAt = $derived(activity?.started_at ?? null);\n\tconst ticking = $derived(startedAt !== null);\n\t$effect(() => {\n\t\tif (!ticking) return;\n\t\tnow = Date.now();\n\t\tconst id = setInterval(() => (now = Date.now()), 1000);\n\t\treturn () => clearInterval(id);\n\t});\n\n\t/** The spinner's parts, drawn as quiet pills beside its verb. */\n\tconst CHIP = 'border-[#2f2f36] px-[7px] py-0 text-[11.5px] leading-[18px] font-normal text-[#78716c]';\n\n\tconst elapsedText = $derived(\n\t\tstartedAt !== null ? formatSpinnerElapsed(Math.max(0, Math.floor((now - startedAt) / 1000))) : null\n\t);\n\n\t/** Entries as drawn: runs of routine tool calls fold into one summary row. */\n\tconst items = $derived(groupToolRuns(entries));\n\t/** The same, with each run of turns a rewind went back past folded into one. */\n\tconst blocks = $derived(foldRewound(items));\n\n\t// ── rewind ───────────────────────────────────────────────────────────\n\t// A prompt offers to go back to before it, through Claude Code's own\n\t// dialog. Only while the session is idle: Esc Esc would stop a turn.\n\n\t/** The prompt whose rewind is being opened. */\n\tlet rewinding = $state<string | null>(null);\n\tconst canRewind = $derived(sessionState === 'idle' && !paneRewind);\n\n\t/** Whether a prompt is one Claude Code's rewind list holds: a local command's (/context) is not. */\n\tconst rewindable = (e: TranscriptEntry) => e.kind === 'user' && !e.rewound && !e.command?.output;\n\n\t/** How many rows above \"(current)\" the list should hold this prompt, counting it. */\n\tfunction rowsBack(id: string): number {\n\t\tconst at = entries.findIndex((e) => e.id === id);\n\t\treturn entries.slice(at).filter(rewindable).length;\n\t}\n\n\tasync function rewindTo(entry: Extract<TranscriptEntry, { kind: 'user' }>) {\n\t\tif (!onRewind || rewinding || !canRewind) return;\n\t\trewinding = entry.id;\n\t\ttry {\n\t\t\tawait onRewind({ action: 'open', prompt: entry.text, back: rowsBack(entry.id) });\n\t\t} finally {\n\t\t\trewinding = null;\n\t\t}\n\t}\n\n\t/** Each turn's change summary, by the item it follows; the turn still running has none yet. */\n\tconst turnRunning = $derived(sessionState !== null && sessionState !== 'idle');\n\tconst turnCards = $derived(\n\t\tchangesLink && turnChanges\n\t\t\t? placeTurnChanges(items, turnChanges.turns, turnChanges.prompts, turnRunning)\n\t\t\t: new Map<string, Turn>()\n\t);\n\t/** The latest summary (the map runs in transcript order) starts open, the rest closed, until the reader says otherwise. */\n\tconst latestCard = $derived([...turnCards.values()].at(-1)?.id ?? null);\n\t/** By the turn's prompt id, which unlike its number never repeats across sessions in one pane. */\n\tlet cardOpen = $state<Record<string, boolean>>({});\n\n\t/**\n\t * Which tool cards and groups the reader has open, by entry id (a group\n\t * under `group:<first call>`). A run folds only as its calls finish, so the\n\t * card someone is reading can turn into a group under them; remembering it\n\t * here lets the new group open on that card instead of snapping shut.\n\t */\n\tlet opened = $state<Record<string, boolean>>({});\n\n\t// ── grilling rounds ──────────────────────────────────────────────────\n\t// A reply that asks a numbered round of questions, each with Claude's\n\t// recommendation, is drawn as a form: take the recommendation, write your\n\t// own answer, or leave the question open — and the reply is composed.\n\n\t/** Parsed rounds by entry text; a reply's text never changes once written. */\n\tconst roundCache = new Map<string, GrillRound | null>();\n\tfunction grillRound(text: string): GrillRound | null {\n\t\tif (!text.includes('❓')) return null;\n\t\tlet round = roundCache.get(text);\n\t\tif (round === undefined) {\n\t\t\tround = parseGrillRound(text);\n\t\t\troundCache.set(text, round);\n\t\t}\n\t\treturn round;\n\t}\n\n\t/**\n\t * The one round that can still be answered: the latest one with nothing\n\t * from you after it. Claude may go on talking past it — a background\n\t * agent reports in, and it says so — without the questions being any\n\t * less open; only your reply, or a question dialog, closes a round.\n\t * Older rounds are history, drawn read-only.\n\t */\n\tconst liveGrillId = $derived.by(() => {\n\t\tfor (let i = entries.length - 1; i >= 0; i--) {\n\t\t\tconst e = entries[i];\n\t\t\tif (e.kind === 'user' || e.kind === 'queued' || e.kind === 'ask' || e.kind === 'interrupt')\n\t\t\t\treturn null;\n\t\t\tif (e.kind === 'text' && grillRound(e.text)) return e.id;\n\t\t}\n\t\treturn null;\n\t});\n\n\tlet grillAnswers = $state<Record<string, Record<number, GrillAnswer>>>({});\n\tlet grillSending = $state<string | null>(null);\n\t/**\n\t * What you have done with a round on this page: sent its answers, or opened\n\t * a past one to answer again (a second thought, or a reply that went astray).\n\t */\n\tlet grillPhase = $state<Record<string, 'sent' | 'reopened'>>({});\n\n\tfunction answerOf(id: string, q: GrillRound['questions'][number]): GrillAnswer {\n\t\treturn grillAnswers[id]?.[q.n] ?? (q.recommended ? { mode: 'accept' } : { mode: 'own', text: '' });\n\t}\n\n\tfunction setAnswer(id: string, n: number, answer: GrillAnswer) {\n\t\tgrillAnswers[id] = { ...(grillAnswers[id] ?? {}), [n]: answer };\n\t}\n\n\t/** Typing makes the answer yours; clearing the field hands it back. */\n\tfunction typeAnswer(id: string, q: GrillRound['questions'][number], text: string) {\n\t\tif (text.trim() === '' && q.recommended) setAnswer(id, q.n, { mode: 'accept' });\n\t\telse setAnswer(id, q.n, { mode: 'own', text });\n\t}\n\n\tfunction ownText(id: string, q: GrillRound['questions'][number]): string {\n\t\tconst a = answerOf(id, q);\n\t\treturn a.mode === 'own' ? a.text : '';\n\t}\n\n\t/** Each question's own field, for dictation to find its caret. Read only in handlers. */\n\tconst ownFields: Record<string, HTMLTextAreaElement | undefined> = {};\n\tconst fieldKey = (id: string, q: GrillRound['questions'][number]) => `${id}:${q.n}`;\n\n\tfunction tally(id: string, round: GrillRound): string {\n\t\tlet agreed = 0;\n\t\tlet own = 0;\n\t\tlet open = 0;\n\t\tfor (const q of round.questions) {\n\t\t\tconst a = answerOf(id, q);\n\t\t\tif (a.mode === 'accept') agreed++;\n\t\t\telse if (a.mode === 'own' && a.text.trim()) own++;\n\t\t\telse open++;\n\t\t}\n\t\tconst parts: string[] = [];\n\t\tif (agreed) parts.push(`${agreed} agreed`);\n\t\tif (own) parts.push(`${own} in your words`);\n\t\tif (open) parts.push(`${open} left open`);\n\t\treturn parts.join(', ');\n\t}\n\n\tasync function sendRound(id: string, round: GrillRound) {\n\t\tif (!onSendReply || grillSending) return;\n\t\tconst answers: Record<number, GrillAnswer> = {};\n\t\tfor (const q of round.questions) answers[q.n] = answerOf(id, q);\n\t\tgrillSending = id;\n\t\ttry {\n\t\t\tif (await onSendReply(composeGrillReply(round, answers))) grillPhase[id] = 'sent';\n\t\t} finally {\n\t\t\tgrillSending = null;\n\t\t}\n\t}\n\n\t/** Grows a textarea with what is typed into it, up to the CSS max-height. */\n\tfunction autosize(el: HTMLTextAreaElement) {\n\t\tconst fit = () => {\n\t\t\tel.style.height = 'auto';\n\t\t\tel.style.height = `${el.scrollHeight}px`;\n\t\t};\n\t\tfit();\n\t\tel.addEventListener('input', fit);\n\t\treturn { destroy: () => el.removeEventListener('input', fit) };\n\t}\n\n\t/**\n\t * Only the newest unanswered dialog can be driven — older cards are history.\n\t * Claude Code also sends a permission notification for a question, which\n\t * a hook from before 0.29.1 took for a permission prompt; an open question\n\t * is answerable either way.\n\t */\n\tconst canAnswer = $derived(\n\t\t(sessionState === 'waiting' || sessionState === 'permission') && onSendKeys != null\n\t);\n\n\tconst liveAskId = $derived(\n\t\tcanAnswer\n\t\t\t? (entries.findLast((e) => e.kind === 'ask' && !e.answers && !e.rejected)?.id ?? null)\n\t\t\t: null\n\t);\n\n\t// ── the open dialog ──────────────────────────────────────────────────\n\t// A dialog is drawn as a card in the transcript, never in the composer:\n\t// an AskUserQuestion where its entry sits, anything else (a permission\n\t// prompt, a local command's picker) at the foot, where the turn stopped.\n\n\t/** Which dialog is open: the live question's entry, or the pane's own. */\n\tconst dialogKey = $derived(liveAskId ?? (paneChoice || canAnswer ? 'pane' : null));\n\t/** The pane drew this dialog at some point, so its going away means it was answered. */\n\tlet seenLive = $state<string | null>(null);\n\t/** The card sent the keys that close this dialog, with no pane read to confirm it. */\n\tlet submitted = $state<string | null>(null);\n\t$effect(() => {\n\t\tif (dialogKey === null) {\n\t\t\tseenLive = null;\n\t\t\tsubmitted = null;\n\t\t} else if (paneChoice) {\n\t\t\tseenLive = dialogKey;\n\t\t\t// The pane still draws it, whatever keys the card sent blind.\n\t\t\tsubmitted = null;\n\t\t}\n\t});\n\t/** Answered and gone from the pane, while the hooks may still say it is open. */\n\tconst dialogClosed = $derived(\n\t\tdialogKey !== null &&\n\t\t\t((seenLive === dialogKey && paneChoice === null) || submitted === dialogKey)\n\t);\n\t/**\n\t * Questions answered here before the log says so. The JSONL records the\n\t * answers a moment after the dialog closes, and the card should not flash\n\t * back to open in between.\n\t */\n\tlet answeredAsks = $state<Record<string, true>>({});\n\tlet lastLiveAsk: { id: string; seen: boolean } | null = null;\n\t$effect(() => {\n\t\tif (liveAskId && dialogClosed) answeredAsks[liveAskId] = true;\n\t\t// The hooks can leave `waiting` on the same tick the pane drops the\n\t\t// dialog, so a question seen live that stops being live was answered.\n\t\tif (lastLiveAsk && lastLiveAsk.id !== liveAskId && lastLiveAsk.seen) {\n\t\t\tansweredAsks[lastLiveAsk.id] = true;\n\t\t}\n\t\tlastLiveAsk = liveAskId ? { id: liveAskId, seen: seenLive === liveAskId } : null;\n\t});\n\t/** The pane's dialog at the foot, when it is not the live question's. */\n\tconst footDialog = $derived(liveAskId === null && paneChoice !== null);\n\n\t/**\n\t * The turns claude-mux delivered from its queue or as a steer, by entry id.\n\t * Each delivery labels the first turn after it that carries its text, so\n\t * the same words sent twice label two turns, not one.\n\t */\n\tconst deliveredVia = $derived.by(() => {\n\t\tconst out = new Map<string, DeliveryInfo['via']>();\n\t\tfor (const d of delivered) {\n\t\t\tconst text = d.text.trim();\n\t\t\t// The JSONL stamps the turn a moment after the paste; allow for clock skew.\n\t\t\tconst turn = entries.find(\n\t\t\t\t(e) =>\n\t\t\t\t\t// A delivered queued entry is hidden behind its user turn.\n\t\t\t\t\t(e.kind === 'user' || (e.kind === 'queued' && !e.delivered)) &&\n\t\t\t\t\t!out.has(e.id) &&\n\t\t\t\t\te.ts >= d.at - 5000 &&\n\t\t\t\t\te.text.trim() === text\n\t\t\t);\n\t\t\tif (turn) out.set(turn.id, d.via);\n\t\t}\n\t\treturn out;\n\t});\n\n\tfunction formatTime(ts: number): string {\n\t\ttry {\n\t\t\treturn new Date(ts).toLocaleTimeString(undefined, {\n\t\t\t\thour: '2-digit',\n\t\t\t\tminute: '2-digit'\n\t\t\t});\n\t\t} catch {\n\t\t\treturn '';\n\t\t}\n\t}\n\n\tinterface InputField {\n\t\tkey: string;\n\t\tvalue: string;\n\t}\n\n\t/**\n\t * Split a tool's input into the shell command (when it has one), short\n\t * key/value rows and long text blocks — one pass, since the template would\n\t * otherwise filter the same list three times per render.\n\t */\n\tfunction inputPanes(\n\t\tinputJson: string,\n\t\ttoolName: string\n\t): { cmd: string | null; short: InputField[]; long: InputField[] } {\n\t\tlet entries: [string, unknown][];\n\t\ttry {\n\t\t\tentries = Object.entries(JSON.parse(inputJson) as Record<string, unknown>);\n\t\t} catch {\n\t\t\treturn { cmd: null, short: [], long: [{ key: 'input', value: inputJson }] };\n\t\t}\n\t\tconst isShell = toolName.toLowerCase().includes('bash');\n\t\tlet cmd: string | null = null;\n\t\tconst short: InputField[] = [];\n\t\tconst long: InputField[] = [];\n\t\tfor (const [key, raw] of entries) {\n\t\t\tconst value = typeof raw === 'string' ? raw : (JSON.stringify(raw, null, 2) ?? String(raw));\n\t\t\tif (isShell && key === 'command') {\n\t\t\t\tcmd = value;\n\t\t\t} else if (value.includes('\\n') || value.length > 90) {\n\t\t\t\tlong.push({ key, value });\n\t\t\t} else {\n\t\t\t\tshort.push({ key, value });\n\t\t\t}\n\t\t}\n\t\treturn { cmd, short, long };\n\t}\n\n</script>\n\n{#snippet grill(id: string, round: GrillRound)}\n\t{@const phase = grillPhase[id]}\n\t{@const live =\n\t\tonSendReply != null && (phase === 'reopened' || (id === liveGrillId && phase !== 'sent'))}\n\t<!-- A busy session takes the reply into Claude Code's own queue, as the\n\t composer's does; only an open dialog would swallow it as keystrokes. -->\n\t{@const ready = live && sessionState !== 'waiting' && sessionState !== 'permission'}\n\t{#if round.intro}\n\t\t<!-- eslint-disable-next-line svelte/no-at-html-tags -- markdown output with raw HTML escaped above -->\n\t\t<div class=\"assistant-text markdown\">{@html markdown(round.intro)}</div>\n\t{/if}\n\t<section class=\"grill\" class:live aria-label=\"Questions from Claude\">\n\t\t{#each round.questions as q (q.n)}\n\t\t\t{@const a = answerOf(id, q)}\n\t\t\t<div class=\"gq\" class:skipped={live && a.mode === 'skip'}>\n\t\t\t\t<span class=\"gq-n\">Q{q.n}</span>\n\t\t\t\t<div class=\"gq-main\">\n\t\t\t\t\t{#if q.title}<p class=\"gq-title\">{q.title}</p>{/if}\n\t\t\t\t\t<!-- eslint-disable-next-line svelte/no-at-html-tags -- markdown output with raw HTML escaped above -->\n\t\t\t\t\t<div class=\"gq-body markdown\">{@html markdown(q.body)}</div>\n\t\t\t\t\t{#if q.recommended}\n\t\t\t\t\t\t{#if live}\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclass=\"gq-rec\"\n\t\t\t\t\t\t\t\tclass:on={a.mode === 'accept'}\n\t\t\t\t\t\t\t\taria-pressed={a.mode === 'accept'}\n\t\t\t\t\t\t\t\tonclick={() => setAnswer(id, q.n, { mode: 'accept' })}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<iconify-icon\n\t\t\t\t\t\t\t\t\ticon={a.mode === 'accept' ? 'mdi:check-circle' : 'mdi:circle-outline'}\n\t\t\t\t\t\t\t\t></iconify-icon>\n\t\t\t\t\t\t\t\t<!-- No file links here: the whole row is the button. -->\n\t\t\t\t\t\t\t\t<!-- eslint-disable-next-line svelte/no-at-html-tags -- markdown output with raw HTML escaped above -->\n\t\t\t\t\t\t\t\t<span class=\"markdown\">{@html renderMarkdown(q.recommended)}</span>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t<div class=\"gq-rec past\">\n\t\t\t\t\t\t\t\t<iconify-icon icon=\"mdi:arrow-right\"></iconify-icon>\n\t\t\t\t\t\t\t\t<!-- eslint-disable-next-line svelte/no-at-html-tags -- markdown output with raw HTML escaped above -->\n\t\t\t\t\t\t\t\t<span class=\"markdown\">{@html markdown(q.recommended)}</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t{/if}\n\t\t\t\t\t{#if live}\n\t\t\t\t\t\t<div class=\"gq-own\">\n\t\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\t\trows=\"1\"\n\t\t\t\t\t\t\t\tuse:autosize\n\t\t\t\t\t\t\t\tbind:this={ownFields[fieldKey(id, q)]}\n\t\t\t\t\t\t\t\t{@attach keepsCaret}\n\t\t\t\t\t\t\t\tplaceholder={q.recommended ? 'Or answer in your own words' : 'Your answer'}\n\t\t\t\t\t\t\t\tvalue={ownText(id, q)}\n\t\t\t\t\t\t\t\toninput={(e) => typeAnswer(id, q, e.currentTarget.value)}\n\t\t\t\t\t\t\t\tclass:filled={a.mode === 'own' && a.text.trim() !== ''}\n\t\t\t\t\t\t\t></textarea>\n\t\t\t\t\t\t\t{#if dictateTarget}\n\t\t\t\t\t\t\t\t<DictateButton\n\t\t\t\t\t\t\t\t\ttarget={dictateTarget}\n\t\t\t\t\t\t\t\t\tonText={(text) =>\n\t\t\t\t\t\t\t\t\t\tvoid sayInto(ownFields[fieldKey(id, q)], ownText(id, q), text, (t) =>\n\t\t\t\t\t\t\t\t\t\t\ttypeAnswer(id, q, t)\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclass=\"gq-skip\"\n\t\t\t\t\t\t\t\tclass:on={a.mode === 'skip'}\n\t\t\t\t\t\t\t\taria-pressed={a.mode === 'skip'}\n\t\t\t\t\t\t\t\ttitle=\"Leave this question open for a later round\"\n\t\t\t\t\t\t\t\tonclick={() =>\n\t\t\t\t\t\t\t\t\tsetAnswer(id, q.n, a.mode === 'skip' ? (q.recommended ? { mode: 'accept' } : { mode: 'own', text: '' }) : { mode: 'skip' })}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{a.mode === 'skip' ? 'Left open' : 'Skip'}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t{/if}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t{/each}\n\t\t{#if live}\n\t\t\t<footer class=\"grill-foot\">\n\t\t\t\t<span class=\"grill-tally\">{tally(id, round)}</span>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"grill-send\"\n\t\t\t\t\tdisabled={!ready || grillSending === id}\n\t\t\t\t\ttitle={ready\n\t\t\t\t\t\t? 'Send these answers as your next message'\n\t\t\t\t\t\t: 'Answer the open dialog first; these go in after it'}\n\t\t\t\t\tonclick={() => void sendRound(id, round)}\n\t\t\t\t>\n\t\t\t\t\t{grillSending === id ? 'Sending…' : 'Send answers'}\n\t\t\t\t</button>\n\t\t\t\t{#if id !== liveGrillId}\n\t\t\t\t\t<button type=\"button\" class=\"grill-again\" onclick={() => delete grillPhase[id]}>\n\t\t\t\t\t\tCancel\n\t\t\t\t\t</button>\n\t\t\t\t{/if}\n\t\t\t</footer>\n\t\t{:else if onSendReply}\n\t\t\t<footer class=\"grill-foot\">\n\t\t\t\t<span class=\"grill-tally\">{phase === 'sent' ? 'Answers sent' : ''}</span>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"grill-again\"\n\t\t\t\t\ttitle=\"Open these questions again and send another set of answers\"\n\t\t\t\t\tonclick={() => (grillPhase[id] = 'reopened')}\n\t\t\t\t>\n\t\t\t\t\t<iconify-icon icon=\"mdi:reply-outline\"></iconify-icon>\n\t\t\t\t\tAnswer again\n\t\t\t\t</button>\n\t\t\t</footer>\n\t\t{/if}\n\t</section>\n\t{#if round.outro}\n\t\t<!-- eslint-disable-next-line svelte/no-at-html-tags -- markdown output with raw HTML escaped above -->\n\t\t<div class=\"assistant-text markdown\">{@html markdown(round.outro)}</div>\n\t{/if}\n{/snippet}\n\n{#if onQuote}<QuoteSelection root={transcriptEl} {onQuote} />{/if}\n<div class=\"transcript\" use:fileLinks bind:this={transcriptEl}>\n\t{#if !loaded}\n\t\t<div class=\"empty\">\n\t\t\t<iconify-icon class=\"spin\" icon=\"mdi:loading\" style=\"font-size: 32px;\"></iconify-icon>\n\t\t\t<p>Loading transcript…</p>\n\t\t</div>\n\t{:else if !available && sessionState && sessionState !== 'idle'}\n\t\t<!-- The turn is under way; Claude Code writes the log as each block\n\t\t finishes, and the live row below says what it is doing meanwhile. -->\n\t\t<div class=\"empty starting\">\n\t\t\t<iconify-icon icon=\"mdi:text-box-plus-outline\" style=\"font-size: 32px;\"></iconify-icon>\n\t\t\t<p>Starting… waiting for the first entry.</p>\n\t\t</div>\n\t{:else if !available}\n\t\t<div class=\"empty\">\n\t\t\t<iconify-icon icon=\"mdi:text-box-search-outline\" style=\"font-size: 32px;\"></iconify-icon>\n\t\t\t<p>No transcript for this session yet.</p>\n\t\t\t<p class=\"hint\">It appears as soon as Claude Code writes its session log.</p>\n\t\t</div>\n\t{/if}\n\t{#if olderCount > 0}\n\t\t<div class=\"earlier\">\n\t\t\t<button type=\"button\" disabled={loadingEarlier} onclick={() => onLoadEarlier?.()}>\n\t\t\t\t<iconify-icon icon={loadingEarlier ? 'mdi:loading' : 'mdi:chevron-double-up'}\n\t\t\t\t></iconify-icon>\n\t\t\t\t{loadingEarlier ? 'Loading…' : 'Load earlier'}\n\t\t\t</button>\n\t\t\t<span class=\"earlier-count\">{olderCount} older {olderCount === 1 ? 'entry' : 'entries'}</span>\n\t\t</div>\n\t{/if}\n\t{#snippet turnGlyph(dictated: boolean)}\n\t\t{#if dictated}\n\t\t\t<iconify-icon class=\"mic-glyph\" icon=\"mdi:microphone\" title=\"dictated\"></iconify-icon>\n\t\t{:else}\n\t\t\t<span class=\"prompt-glyph\">❯</span>\n\t\t{/if}\n\t{/snippet}\n\t{#snippet via(id: string)}\n\t\t{@const how = deliveredVia.get(id)}\n\t\t{#if how}\n\t\t\t<span\n\t\t\t\tclass=\"via\"\n\t\t\t\ttitle={how === 'steer' ? 'Steered into the running turn' : 'Sent from the queue'}\n\t\t\t\t>{how === 'steer' ? 'Steer' : 'Queued'}</span\n\t\t\t>\n\t\t{/if}\n\t{/snippet}\n\t{#snippet row(entry: TranscriptEntry)}\n\t\t{#if entry.kind === 'user'}\n\t\t\t<div class=\"user-block\" class:dictated={entry.dictated} data-entry-id={entry.id}>\n\t\t\t\t{@render turnGlyph(entry.dictated ?? false)}\n\t\t\t\t<!-- A slash command is a different kind of turn: not prose the agent\n\t\t\t\t read, but an instruction to the harness. Show the command as a\n\t\t\t\t token so it is scannable, and its arguments as ordinary prompt\n\t\t\t\t text — the raw <command-*> tags never reach the reader. -->\n\t\t\t\t{#if entry.command}\n\t\t\t\t\t<div class=\"user-text\">\n\t\t\t\t\t\t<span class=\"slash-name\">{entry.command.name}</span>{#if entry.command.args}<span\n\t\t\t\t\t\t\t\tclass=\"slash-args\">{entry.command.args}</span\n\t\t\t\t\t\t\t>{/if}\n\t\t\t\t\t\t<!-- A local command answers on the spot — \"Set model to Fable\" —\n\t\t\t\t\t\t and that answer is the harness's, not the agent's, so it sits\n\t\t\t\t\t\t under the command rather than as a turn. -->\n\t\t\t\t\t\t{#if entry.command.output}\n\t\t\t\t\t\t\t<div class=\"slash-output\">{entry.command.output}</div>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</div>\n\t\t\t\t{:else}\n\t\t\t\t\t<div class=\"user-text\">{entry.text}</div>\n\t\t\t\t{/if}\n\t\t\t\t<span class=\"time\">\n\t\t\t\t\t{#if onRewind && rewindable(entry)}\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"rewind-btn\"\n\t\t\t\t\t\t\tdisabled={!canRewind || rewinding !== null}\n\t\t\t\t\t\t\ttitle={canRewind ? 'Rewind to before this prompt' : 'Stop the turn first'}\n\t\t\t\t\t\t\taria-label=\"Rewind to before this prompt\"\n\t\t\t\t\t\t\tonclick={() => void rewindTo(entry)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<iconify-icon icon={rewinding === entry.id ? 'mdi:loading' : 'mdi:history'}></iconify-icon>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t{/if}\n\t\t\t\t\t{@render via(entry.id)}{formatTime(entry.ts)}\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t{:else if entry.kind === 'queued'}\n\t\t\t{#if !entry.delivered}\n\t\t\t\t<div class=\"user-block\" class:dictated={entry.dictated} data-entry-id={entry.id}>\n\t\t\t\t\t{@render turnGlyph(entry.dictated ?? false)}\n\t\t\t\t\t<div class=\"user-text\">{entry.text}</div>\n\t\t\t\t\t<span class=\"time\" title=\"sent while the agent was working\">\n\t\t\t\t\t\t{@render via(entry.id)}\n\t\t\t\t\t\t<iconify-icon icon=\"mdi:clock-fast\"></iconify-icon>\n\t\t\t\t\t\t{formatTime(entry.ts)}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t{/if}\n\t\t{:else if entry.kind === 'peer'}\n\t\t\t<div class=\"user-block peer\">\n\t\t\t\t<iconify-icon class=\"peer-icon\" icon=\"mdi:swap-horizontal\"></iconify-icon>\n\t\t\t\t<div class=\"peer-body\">\n\t\t\t\t\t{#if entry.from}<span class=\"peer-from\">{entry.from}</span>{/if}\n\t\t\t\t\t<div class=\"user-text peer-text\">{entry.text}</div>\n\t\t\t\t</div>\n\t\t\t\t<span class=\"time peer-time\">{formatTime(entry.ts)}</span>\n\t\t\t</div>\n\t\t{:else if entry.kind === 'interrupt'}\n\t\t\t<!-- Escape stopped the turn. Claude Code logs it as a user line, but\n\t\t\t nobody typed it, so it reads as a log note like \"Question dismissed\". -->\n\t\t\t<div class=\"row note\">\n\t\t\t\t<iconify-icon icon=\"mdi:stop-circle-outline\"></iconify-icon>\n\t\t\t\t<span class=\"row-summary\">{entry.text}</span>\n\t\t\t\t<span class=\"time\">{formatTime(entry.ts)}</span>\n\t\t\t</div>\n\t\t{:else if entry.kind === 'compact'}\n\t\t\t<!-- The conversation was folded here. Everything above it is what the\n\t\t\t model no longer sees; the summary is what it reads instead. -->\n\t\t\t<details class=\"compact\">\n\t\t\t\t<summary>\n\t\t\t\t\t<iconify-icon icon=\"mdi:arrow-collapse-vertical\"></iconify-icon>\n\t\t\t\t\t<span class=\"compact-title\">\n\t\t\t\t\t\tContext compacted{entry.trigger === 'manual' ? ' (/compact)' : ' automatically'}\n\t\t\t\t\t</span>\n\t\t\t\t\t{#if entry.preTokens && entry.postTokens}\n\t\t\t\t\t\t<span class=\"compact-tokens\">\n\t\t\t\t\t\t\t{Math.round(entry.preTokens / 1000)}k → {Math.round(entry.postTokens / 1000)}k tokens\n\t\t\t\t\t\t</span>\n\t\t\t\t\t{/if}\n\t\t\t\t\t<span class=\"time\">{formatTime(entry.ts)}</span>\n\t\t\t\t</summary>\n\t\t\t\t{#if entry.summary}\n\t\t\t\t\t<div class=\"compact-summary\">{@html markdown(entry.summary)}</div>\n\t\t\t\t{:else}\n\t\t\t\t\t<p class=\"compact-summary muted\">Summary not written yet.</p>\n\t\t\t\t{/if}\n\t\t\t</details>\n\t\t{:else if entry.kind === 'ask'}\n\t\t\t{#if entry.answers || entry.rejected}\n\t\t\t\t<details class=\"row ask-done\">\n\t\t\t\t\t<summary>\n\t\t\t\t\t\t<iconify-icon icon=\"mdi:chat-question-outline\"></iconify-icon>\n\t\t\t\t\t\t<span class=\"row-summary\">\n\t\t\t\t\t\t\t{#if entry.rejected}\n\t\t\t\t\t\t\t\tQuestion dismissed\n\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t{entry.questions\n\t\t\t\t\t\t\t\t\t.map((q) => `${q.header}: ${entry.answers?.[q.question] ?? '—'}`)\n\t\t\t\t\t\t\t\t\t.join(' · ')}\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<iconify-icon class=\"tool-status ok\" icon=\"mdi:check\"></iconify-icon>\n\t\t\t\t\t</summary>\n\t\t\t\t\t<div class=\"ask-detail\">\n\t\t\t\t\t\t{#each entry.questions as q (q.question)}\n\t\t\t\t\t\t\t<div class=\"ask-q-review\">\n\t\t\t\t\t\t\t\t<span class=\"ask-header-chip\">{q.header}</span>\n\t\t\t\t\t\t\t\t<p class=\"ask-question\">{q.question}</p>\n\t\t\t\t\t\t\t\t{#each q.options as opt (opt.label)}\n\t\t\t\t\t\t\t\t\t<div class=\"ask-opt-review\" class:chosen={entry.answers?.[q.question] === opt.label}>\n\t\t\t\t\t\t\t\t\t\t{opt.label}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t{#if entry.answers && !q.options.some((o) => o.label === entry.answers?.[q.question])}\n\t\t\t\t\t\t\t\t\t<div class=\"ask-opt-review chosen\">{entry.answers?.[q.question]}</div>\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</div>\n\t\t\t\t</details>\n\t\t\t{:else if entry.id === liveAskId || answeredAsks[entry.id]}\n\t\t\t\t<DialogCard\n\t\t\t\t\task={entry}\n\t\t\t\t\tchoice={entry.id === liveAskId ? paneChoice : null}\n\t\t\t\t\tpermission={sessionState === 'permission'}\n\t\t\t\t\tclosed={entry.id !== liveAskId || dialogClosed}\n\t\t\t\t\tonKeys={(keys) => onSendKeys?.(keys)}\n\t\t\t\t\tonText={(text) => onSendPaneText?.(text)}\n\t\t\t\t\tonSubmitted={() => (submitted = entry.id)}\n\t\t\t\t\t{dictateTarget}\n\t\t\t\t/>\n\t\t\t{:else}\n\t\t\t\t<div class=\"row note\">\n\t\t\t\t\t<iconify-icon icon=\"mdi:chat-question-outline\"></iconify-icon>\n\t\t\t\t\t<span class=\"row-summary\">\n\t\t\t\t\t\tQuestion not answered: {entry.questions.map((q) => q.header).join(' · ')}\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"time\">{formatTime(entry.ts)}</span>\n\t\t\t\t</div>\n\t\t\t{/if}\n\t\t{:else if entry.kind === 'text' && grillRound(entry.text)}\n\t\t\t{@render grill(entry.id, grillRound(entry.text)!)}\n\t\t{:else if entry.kind === 'text'}\n\t\t\t<!-- eslint-disable-next-line svelte/no-at-html-tags -- markdown output with raw HTML escaped above -->\n\t\t\t<div class=\"assistant-text markdown\">{@html markdown(entry.text)}</div>\n\t\t{:else if entry.kind === 'thinking'}\n\t\t\t<details class=\"row thinking\">\n\t\t\t\t<summary>\n\t\t\t\t\t<iconify-icon icon=\"mdi:thought-bubble-outline\"></iconify-icon>\n\t\t\t\t\t<span class=\"row-summary\">Thinking</span>\n\t\t\t\t</summary>\n\t\t\t\t<div class=\"thinking-text\">{entry.text}</div>\n\t\t\t</details>\n\t\t{:else if entry.kind === 'tool'}\n\t\t\t{@const input = inputPanes(entry.input, entry.name)}\n\t\t\t{@const showResult = entry.result != null && !(entry.patch && entry.result.ok)}\n\t\t\t{@const sub = subagents[entry.id]}\n\t\t\t{@const doing = sub?.running ? sub.activity[sub.activity.length - 1] : null}\n\t\t\t<details\n\t\t\t\tclass=\"row tool-card\"\n\t\t\t\tclass:error={entry.result?.ok === false}\n\t\t\t\tclass:agent={sub != null}\n\t\t\t\tdata-entry-id={entry.id}\n\t\t\t\topen={opened[entry.id] ?? false}\n\t\t\t\tontoggle={(e) => {\n\t\t\t\t\topened[entry.id] = e.currentTarget.open;\n\t\t\t\t\tif (sub && !sub.full && e.currentTarget.open) onLoadSubagent?.(sub.agentId);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<summary>\n\t\t\t\t\t<iconify-icon class=\"tool-icon\" icon={toolIcon(entry.name)}></iconify-icon>\n\t\t\t\t\t{#if sub}\n\t\t\t\t\t\t<span class=\"row-summary agent-line\">\n\t\t\t\t\t\t\t<span class=\"agent-name\">{sub.description ?? entry.summary}</span>\n\t\t\t\t\t\t\t{#if sub.agentType}<span class=\"agent-type\">{sub.agentType}</span>{/if}\n\t\t\t\t\t\t\t{#if doing}\n\t\t\t\t\t\t\t\t<span class=\"agent-doing mono\"><ToolLabel name={doing.name} summary={doing.summary} /></span>\n\t\t\t\t\t\t\t{:else if sub.activity.length > 0}\n\t\t\t\t\t\t\t\t<span class=\"agent-count\">{sub.activity.length} tools</span>\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t{#if agentLink}\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\tclass=\"tool-open\"\n\t\t\t\t\t\t\t\thref={agentLink(sub.agentId)}\n\t\t\t\t\t\t\t\ttitle=\"Open agent\"\n\t\t\t\t\t\t\t\taria-label=\"Open agent\"\n\t\t\t\t\t\t\t\tonclick={(e) => e.stopPropagation()}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<iconify-icon icon=\"mdi:open-in-new\"></iconify-icon>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t<span class=\"row-summary mono\"><ToolLabel name={entry.name} summary={entry.summary} /></span>\n\t\t\t\t\t\t{@const opens = fileLink ? toolFileTarget(entry) : null}\n\t\t\t\t\t\t{#if opens && fileLink}\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\tclass=\"tool-open\"\n\t\t\t\t\t\t\t\thref={fileLink(opens.path, opens.line)}\n\t\t\t\t\t\t\t\ttitle=\"Open in Files{opens.line ? ` at line ${opens.line}` : ''}\"\n\t\t\t\t\t\t\t\taria-label=\"Open in Files\"\n\t\t\t\t\t\t\t\tdata-sveltekit-noscroll\n\t\t\t\t\t\t\t\tdata-sveltekit-keepfocus\n\t\t\t\t\t\t\t\tonclick={(e) => e.stopPropagation()}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<iconify-icon icon=\"mdi:file-eye-outline\"></iconify-icon>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t{/if}\n\t\t\t\t\t{#if entry.result}\n\t\t\t\t\t\t<iconify-icon\n\t\t\t\t\t\t\tclass=\"tool-status {entry.result.ok ? 'ok' : 'fail'}\"\n\t\t\t\t\t\t\ticon={entry.result.ok ? 'mdi:check' : 'mdi:alert-circle-outline'}\n\t\t\t\t\t\t></iconify-icon>\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t<iconify-icon class=\"tool-status running spin\" icon=\"mdi:loading\"></iconify-icon>\n\t\t\t\t\t{/if}\n\t\t\t\t</summary>\n\t\t\t\t{#if sub}\n\t\t\t\t\t<div class=\"agent-detail\">\n\t\t\t\t\t\t<div class=\"agent-meta\">\n\t\t\t\t\t\t\t{#if sub.model}<span class=\"agent-chip\">{sub.model}</span>{/if}\n\t\t\t\t\t\t\t<span class=\"agent-chip\">{sub.activity.length} tools</span>\n\t\t\t\t\t\t\t{#if sub.running}<span class=\"agent-chip live\">running</span>{/if}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{#if sub.trimmed > 0}\n\t\t\t\t\t\t\t<div class=\"agent-trimmed\">{sub.trimmed} earlier calls not shown</div>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t<ol class=\"agent-activity\">\n\t\t\t\t\t\t\t{#each sub.activity as act (act.id)}\n\t\t\t\t\t\t\t\t<li class:pending={act.ok === null} class:failed={act.ok === false}>\n\t\t\t\t\t\t\t\t\t<iconify-icon class=\"tool-icon\" icon={toolIcon(act.name)}></iconify-icon>\n\t\t\t\t\t\t\t\t\t<span class=\"mono\"><ToolLabel name={act.name} summary={act.summary} /></span>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</ol>\n\t\t\t\t\t\t{#if sub.report}\n\t\t\t\t\t\t\t<div class=\"agent-report\">\n\t\t\t\t\t\t\t\t<header class=\"pane-head\">Report</header>\n\t\t\t\t\t\t\t\t<!-- eslint-disable-next-line svelte/no-at-html-tags -- markdown output with raw HTML escaped above -->\n\t\t\t\t\t\t\t\t<div class=\"markdown\">{@html markdown(sub.report)}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</div>\n\t\t\t\t{:else}\n\t\t\t\t<div class=\"tool-detail\" class:two-col={showResult && !entry.patch}>\n\t\t\t\t\t{#if entry.patch}\n\t\t\t\t\t\t<section class=\"pane diff-pane\">\n\t\t\t\t\t\t\t<header class=\"pane-head\">\n\t\t\t\t\t\t\t\tDiff\n\t\t\t\t\t\t\t\t{#if entry.patch.file}<span class=\"diff-file\">{entry.patch.file.split('/').pop()}</span>{/if}\n\t\t\t\t\t\t\t</header>\n\t\t\t\t\t\t\t<pre class=\"diff\">{#each entry.patch.hunks as hunk, hi (hi)}<span class=\"diff-hunk\">{hunk.header}</span>{'\\n'}{#each hunk.lines as dl, li (li)}<span\n\t\t\t\t\t\t\t\t\t\tclass={dl.startsWith('+') ? 'diff-add' : dl.startsWith('-') ? 'diff-del' : 'diff-ctx'}>{dl}</span>{'\\n'}{/each}{/each}</pre>\n\t\t\t\t\t\t</section>\n\t\t\t\t\t{:else if input.cmd || input.short.length > 0 || input.long.length > 0}\n\t\t\t\t\t\t<section class=\"pane\">\n\t\t\t\t\t\t\t<header class=\"pane-head\">Input</header>\n\t\t\t\t\t\t\t{#if input.cmd}\n\t\t\t\t\t\t\t\t<pre class=\"cmd\"><span class=\"cmd-glyph\">$</span> {input.cmd}</pre>\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t{#each input.short as field (field.key)}\n\t\t\t\t\t\t\t\t<div class=\"kv\"><span class=\"k\">{field.key}</span><span class=\"v\">{field.value}</span></div>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t{#each input.long as field (field.key)}\n\t\t\t\t\t\t\t\t<div class=\"kv-long\">\n\t\t\t\t\t\t\t\t\t<span class=\"k\">{field.key}</span>\n\t\t\t\t\t\t\t\t\t<pre>{field.value}</pre>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</section>\n\t\t\t\t\t{/if}\n\t\t\t\t\t{#if showResult && entry.result}\n\t\t\t\t\t\t<section class=\"pane result\" class:ok={entry.result.ok} class:fail={!entry.result.ok}>\n\t\t\t\t\t\t\t<header class=\"pane-head\">{entry.result.ok ? 'Result' : 'Error'}</header>\n\t\t\t\t\t\t\t{#each entry.result.images ?? [] as path, i (i)}\n\t\t\t\t\t\t\t\t{@const src = `${base}/api/files/image?path=${encodeURIComponent(path)}`}\n\t\t\t\t\t\t\t\t<a class=\"result-image\" href={src} target=\"_blank\" rel=\"noopener\">\n\t\t\t\t\t\t\t\t\t<img {src} alt={path.split('/').pop()} loading=\"lazy\" />\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t{#if entry.result.output || !entry.result.images}\n\t\t\t\t\t\t\t\t<pre>{entry.result.output || '(no output)'}</pre>\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t</section>\n\t\t\t\t\t{/if}\n\t\t\t\t\t</div>\n\t\t\t\t{/if}\n\t\t\t</details>\n\t\t{/if}\n\t{/snippet}\n\t{#snippet itemView(item: TranscriptItem)}\n\t\t{#if item.kind === 'group'}\n\t\t\t<!-- A run of routine calls, folded the way the terminal folds it. Open,\n\t\t\t it is the same rows the run would have drawn on its own. -->\n\t\t\t<details\n\t\t\t\tclass=\"row tool-group\"\n\t\t\t\topen={opened[`group:${item.id}`] ?? opened[item.id] ?? false}\n\t\t\t\tontoggle={(e) => (opened[`group:${item.id}`] = e.currentTarget.open)}\n\t\t\t>\n\t\t\t\t<summary>\n\t\t\t\t\t<iconify-icon class=\"tool-icon\" icon=\"mdi:layers-outline\"></iconify-icon>\n\t\t\t\t\t<span class=\"row-summary\">{item.summary}</span>\n\t\t\t\t\t{#if item.failed > 0}\n\t\t\t\t\t\t<span class=\"group-failed\">{item.failed} failed</span>\n\t\t\t\t\t\t<iconify-icon class=\"tool-status fail\" icon=\"mdi:alert-circle-outline\"></iconify-icon>\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t<iconify-icon class=\"tool-status ok\" icon=\"mdi:check\"></iconify-icon>\n\t\t\t\t\t{/if}\n\t\t\t\t</summary>\n\t\t\t\t<div class=\"group-rows\">\n\t\t\t\t\t{#each item.entries as entry (entry.id)}\n\t\t\t\t\t\t{@render row(entry)}\n\t\t\t\t\t{/each}\n\t\t\t\t</div>\n\t\t\t</details>\n\t\t{:else}\n\t\t\t{@render row(item)}\n\t\t{/if}\n\t\t{@const changed = turnCards.get(item.id)}\n\t\t{#if changed && changesLink}\n\t\t\t<TurnChangesCard\n\t\t\t\tturn={changed}\n\t\t\t\troot={turnChanges?.root ?? null}\n\t\t\t\tbind:open={() => cardOpen[changed.id!] ?? changed.id === latestCard, (v) => (cardOpen[changed.id!] = v)}\n\t\t\t\tlink={(file) => changesLink(changed.n, file)}\n\t\t\t/>\n\t\t{/if}\n\t{/snippet}\n\t{#each blocks as block (block.id)}\n\t\t{#if block.kind === 'rewound'}\n\t\t\t<!-- Turns a rewind went back past: still in the log, but the\n\t\t\t conversation no longer follows them. -->\n\t\t\t<details class=\"rewound\" open={opened[block.id] ?? false} ontoggle={(e) => (opened[block.id] = e.currentTarget.open)}>\n\t\t\t\t<summary>\n\t\t\t\t\t<iconify-icon icon=\"mdi:history\"></iconify-icon>\n\t\t\t\t\t<span>Rewound · {block.turns} {block.turns === 1 ? 'turn' : 'turns'}</span>\n\t\t\t\t</summary>\n\t\t\t\t<div class=\"rewound-rows\">\n\t\t\t\t\t{#each block.items as item (item.id)}\n\t\t\t\t\t\t{@render itemView(item)}\n\t\t\t\t\t{/each}\n\t\t\t\t</div>\n\t\t\t</details>\n\t\t{:else}\n\t\t\t{@render itemView(block)}\n\t\t{/if}\n\t{/each}\n\n\t{#if footDialog}\n\t\t<DialogCard\n\t\t\tchoice={paneChoice}\n\t\t\tpermission={sessionState === 'permission'}\n\t\t\tonKeys={(keys) => onSendKeys?.(keys)}\n\t\t\tonText={(text) => onSendPaneText?.(text)}\n\t\t\t{dictateTarget}\n\t\t/>\n\t{/if}\n\n\t{#if paneLogin}\n\t\t<LoginCard\n\t\t\tlogin={paneLogin}\n\t\t\tonKeys={(keys) => onSendKeys?.(keys)}\n\t\t\tonText={(text) => onSendPaneText?.(text)}\n\t\t/>\n\t{/if}\n\n\t{#if paneRewind && onRewind}\n\t\t<RewindCard screen={paneRewind} {onRewind} />\n\t{/if}\n\n\t<!-- Live status: driven by hooks, which fire the instant a tool starts;\n\t the JSONL itself is written in batches and lags by seconds. -->\n\t{#if sessionState === 'busy'}\n\t\t<div class=\"live-row busy\">\n\t\t\t<SessionStateIndicator state=\"busy\" />\n\t\t\t{#if activity}\n\t\t\t\t<span class=\"live-verb mono\">{activity.verb}</span>\n\t\t\t\t<span class=\"live-chips\">\n\t\t\t\t\t{#if activity.doing}\n\t\t\t\t\t\t<Badge variant=\"outline\" class=\"{CHIP} min-w-0 shrink justify-start text-[#a8a29e]\">\n\t\t\t\t\t\t\t<span class=\"truncate\">{activity.doing}</span>\n\t\t\t\t\t\t</Badge>\n\t\t\t\t\t{/if}\n\t\t\t\t\t{#if elapsedText}<Badge variant=\"outline\" class=\"{CHIP} font-mono\">{elapsedText}</Badge>{/if}\n\t\t\t\t\t{#if activity.tokens}\n\t\t\t\t\t\t<Badge variant=\"outline\" class=\"{CHIP} font-mono\"\n\t\t\t\t\t\t\t>{activity.tokens.dir === 'up' ? '↑' : '↓'} {activity.tokens.count} tokens</Badge\n\t\t\t\t\t\t>\n\t\t\t\t\t{/if}\n\t\t\t\t\t{#if activity.thinking}<Badge variant=\"outline\" class={CHIP}>{activity.thinking}</Badge>{/if}\n\t\t\t\t</span>\n\t\t\t{:else}\n\t\t\t\t<span class=\"live-text mono\">{currentAction ?? 'Working…'}</span>\n\t\t\t{/if}\n\t\t</div>\n\t{:else if sessionState === 'permission' || sessionState === 'waiting'}\n\t\t{@const state = sessionState}\n\t\t<div class=\"live-row attention\" style=\"color: {sessionStateVisual(state).color}\">\n\t\t\t<SessionStateIndicator {state} />\n\t\t\t<span class=\"live-text\">\n\t\t\t\t{#if dialogClosed}\n\t\t\t\t\tAnswer sent — waiting for Claude to carry on\n\t\t\t\t{:else if liveAskId || footDialog}\n\t\t\t\t\tWaiting for your answer — answer in the card above ↑\n\t\t\t\t{:else if state === 'permission'}\n\t\t\t\t\tWaiting for permission — reading the dialog, or switch to terminal view to respond\n\t\t\t\t{:else}\n\t\t\t\t\tQuestion incoming… answer here when it appears, or in the terminal view\n\t\t\t\t{/if}\n\t\t\t</span>\n\t\t</div>\n\t{/if}\n\n\t{#if suggestion}\n\t\t<!-- Claude's own next-prompt proposal, drawn as the same not-yet-happened\n\t\t turn anchor as a queued message — but in the suggestion's blue, and\n\t\t tappable: accepting is the only interaction it has. -->\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclass=\"user-block pending suggested\"\n\t\t\tonclick={onAcceptSuggestion}\n\t\t\ttitle=\"Accept Claude's suggestion\"\n\t\t>\n\t\t\t<span class=\"prompt-glyph\">❯</span>\n\t\t\t<div class=\"user-text\">{suggestion}</div>\n\t\t\t<span class=\"time suggested-tag\" title=\"Claude's suggested next prompt — tap to accept\">\n\t\t\t\t<iconify-icon icon=\"mdi:star-four-points-outline\"></iconify-icon>\n\t\t\t\tsuggested · accept <kbd>⇥</kbd>\n\t\t\t</span>\n\t\t</button>\n\t{/if}\n</div>\n\n{#if transcriptEl}\n\t<GithubRefCards root={transcriptEl} session={repoSession} {base} onOpen={onOpenGithub} />\n{/if}\n\n<style>\n\t.transcript {\n\t\twidth: 100%;\n\t\tmax-width: 860px;\n\t\tmargin: 0 auto;\n\t\t/* Assistant prose reads as text, not terminal output — deliberate contrast\n\t\t with the mono user prompts and tool rows (the terminal's vernacular). */\n\t\tfont-family:\n\t\t\tui-sans-serif,\n\t\t\tsystem-ui,\n\t\t\t-apple-system,\n\t\t\t'Segoe UI',\n\t\t\tRoboto,\n\t\t\tsans-serif;\n\t\t--mono: var(--font-mono);\n\t\tfont-size: 14.5px;\n\t\tline-height: 1.65;\n\t\tcolor: #d6d3d1;\n\t\tpadding-bottom: 8px;\n\t\t/* The .output host is a terminal container with pre-wrap; without this,\n\t\t the newlines marked emits between blocks render as visible gaps. */\n\t\twhite-space: normal;\n\t\tcontainer-type: inline-size;\n\t}\n\n\t.empty {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t\tpadding: 56px 16px;\n\t\tcolor: #78716c;\n\t\ttext-align: center;\n\t}\n\t.empty.starting {\n\t\tpadding-bottom: 24px;\n\t}\n\t.empty.starting iconify-icon {\n\t\tanimation: starting-breathe 1.8s ease-in-out infinite;\n\t}\n\t@keyframes starting-breathe {\n\t\t50% {\n\t\t\topacity: 0.4;\n\t\t}\n\t}\n\t.empty .hint {\n\t\tfont-size: 12px;\n\t\tcolor: #57534e;\n\t}\n\n\t/* --- The head of a windowed transcript: quiet, since the reader who wants\n\t older turns is looking for it and everyone else is reading downward. --- */\n\t.earlier {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tflex-wrap: wrap;\n\t\tgap: 8px 12px;\n\t\tpadding: 14px 8px 18px;\n\t\tborder-bottom: 1px solid #292524;\n\t\tmargin-bottom: 8px;\n\t}\n\t.earlier button {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t\tpadding: 5px 12px;\n\t\tborder: 1px solid #44403c;\n\t\tborder-radius: 999px;\n\t\tbackground: #1c1917;\n\t\tcolor: #d6d3d1;\n\t\tfont-size: 12px;\n\t\tcursor: pointer;\n\t}\n\t.earlier button:hover {\n\t\tborder-color: #57534e;\n\t\tcolor: #fafaf9;\n\t}\n\t.earlier button[disabled] {\n\t\topacity: 0.6;\n\t\tcursor: default;\n\t}\n\t.earlier-count {\n\t\tfont-size: 11px;\n\t\tcolor: #78716c;\n\t}\n\n\t/* --- User prompt: the turn anchor, in the terminal's own voice.\n\t The one place this view spends visual weight: a warm panel against the\n\t cool-dark tool cards, so turns are findable when scrolling fast. --- */\n\t.user-block {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 10px;\n\t\tmargin: 30px 0 12px;\n\t\tpadding: 10px 12px;\n\t\tbackground: #241d12;\n\t\tborder: 1px solid #46351c;\n\t\tborder-left: 3px solid #d97706;\n\t\tborder-radius: 8px;\n\t}\n\t.user-block:first-child {\n\t\tmargin-top: 6px;\n\t}\n\t/* Queued in the terminal: the same turn anchor, drawn as an outline because\n\t it has not happened yet. */\n\t.user-block.pending {\n\t\tbackground: transparent;\n\t\tborder-style: dashed;\n\t\tborder-left-style: solid;\n\t\tborder-left-color: #7c5e2a;\n\t\tmargin: 12px 0;\n\t}\n\t.user-block.pending .prompt-glyph,\n\t.user-block.pending .user-text {\n\t\tcolor: #8f8578;\n\t}\n\t/* Claude's suggestion: the queued anchor's shape, in the one colour nothing\n\t else in the app uses — and clickable, because tapping accepts it. */\n\t.user-block.suggested {\n\t\twidth: 100%;\n\t\tfont: inherit;\n\t\ttext-align: left;\n\t\tcursor: pointer;\n\t\tborder-color: #3b3b5c;\n\t\tborder-left-color: #6366f1;\n\t}\n\t.user-block.suggested:hover {\n\t\tbackground: #14141c;\n\t}\n\t.user-block.suggested:focus-visible {\n\t\toutline: 2px solid #818cf8;\n\t\toutline-offset: -2px;\n\t}\n\t.user-block.suggested .prompt-glyph {\n\t\tcolor: #818cf8;\n\t}\n\t/* Ghost text reads faint in the terminal; keep it reading that way here. */\n\t.user-block.suggested .user-text {\n\t\tcolor: #8b8fb0;\n\t}\n\t.user-block.suggested .suggested-tag {\n\t\tcolor: #a5b4fc;\n\t}\n\t.suggested-tag kbd {\n\t\tfont: inherit;\n\t\tpadding: 0 4px;\n\t\tborder: 1px solid #3a3a52;\n\t\tborder-radius: 3px;\n\t}\n\t/* How a turn got there, when claude-mux delivered it for you. */\n\t.via {\n\t\tmargin-right: 6px;\n\t\tpadding: 0 5px;\n\t\tborder-radius: 4px;\n\t\tbackground: #292524;\n\t\tcolor: #a8a29e;\n\t\tfont-size: 10px;\n\t}\n\n\t.prompt-glyph,\n\t.mic-glyph {\n\t\tflex-shrink: 0;\n\t\twidth: 14px;\n\t\tfont-family: var(--mono);\n\t\tfont-weight: 700;\n\t\tfont-size: 14px;\n\t\tcolor: #f59e0b;\n\t}\n\t/* Dictated prompt: same turn anchor, warmed toward coral — spoken, not\n\t typed — with the microphone standing where the prompt glyph would be. */\n\t.user-block.dictated {\n\t\tbackground: #261418;\n\t\tborder-color: #492530;\n\t\tborder-left-color: #e0566f;\n\t}\n\t.mic-glyph {\n\t\tcolor: #fb7185;\n\t\talign-self: baseline;\n\t\ttransform: translateY(2px);\n\t}\n\t.user-block.dictated .user-text {\n\t\tcolor: #fde8e8;\n\t}\n\t.user-text {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\tfont-family: var(--mono);\n\t\tfont-size: 13px;\n\t\tline-height: 1.55;\n\t\twhite-space: pre-wrap;\n\t\tword-break: break-word;\n\t\tcolor: #fef3c7;\n\t}\n\t/* Slash command: the name reads as a token, its arguments as plain prompt\n\t text — the same distinction the terminal's own input line makes. */\n\t.slash-name {\n\t\tpadding: 1px 6px;\n\t\tborder: 1px solid #6b4c1a;\n\t\tborder-radius: 5px;\n\t\tbackground: #33260f;\n\t\tcolor: #fbbf24;\n\t\tfont-weight: 600;\n\t}\n\t.slash-args {\n\t\tmargin-left: 8px;\n\t}\n\t/* What the command printed back, in the harness's voice: quieter than the\n\t prompt, and kept as printed. */\n\t.slash-output {\n\t\tmargin-top: 5px;\n\t\tpadding-left: 10px;\n\t\tborder-left: 2px solid #6b4c1a;\n\t\tcolor: #b8a87a;\n\t\tfont-size: 12.5px;\n\t\twhite-space: pre-wrap;\n\t\tword-break: break-word;\n\t}\n\n\t.time {\n\t\tflex-shrink: 0;\n\t\tfont-size: 10px;\n\t\tcolor: #8a7a55;\n\t\tfont-variant-numeric: tabular-nums;\n\t}\n\n\t.time iconify-icon {\n\t\tfont-size: 12px;\n\t\tvertical-align: -2px;\n\t}\n\n\t/* Cross-session (A2A) message: same anchor shape as a human turn, cool\n\t teal instead of warm amber — another agent's voice, not the user's. */\n\t.user-block.peer {\n\t\tbackground: #10201f;\n\t\tborder-color: #1e3d3a;\n\t\tborder-left-color: #14b8a6;\n\t}\n\t.peer-icon {\n\t\tflex-shrink: 0;\n\t\talign-self: baseline;\n\t\tfont-size: 15px;\n\t\tcolor: #2dd4bf;\n\t}\n\t.peer-body {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t}\n\t.peer-from {\n\t\tdisplay: block;\n\t\tfont-family: var(--mono);\n\t\tfont-size: 10.5px;\n\t\tfont-weight: 700;\n\t\tcolor: #2dd4bf;\n\t\tmargin-bottom: 2px;\n\t}\n\t.peer-text {\n\t\tcolor: #d8f3ef;\n\t}\n\t.peer-time {\n\t\tcolor: #3f6f68;\n\t}\n\n\t/* Agent activity sits slightly indented under its prompt anchor — the\n\t amber panel alone carries the turn structure, no rail needed. */\n\t.assistant-text,\n\t.row {\n\t\tmargin-left: 12px;\n\t}\n\n\t/* --- Assistant prose --- */\n\t.assistant-text {\n\t\tmargin-top: 10px;\n\t\tmargin-bottom: 10px;\n\t\tword-break: break-word;\n\t}\n\n\t/* --- Collapsible rows (tools + thinking): closed, they read as slim log\n\t lines — no box, dimmed, clearly \"machine activity\" next to the prose.\n\t The card chrome only appears when a row is opened. --- */\n\t.row {\n\t\tmargin-top: 1px;\n\t\tmargin-bottom: 1px;\n\t\tborder: 1px solid transparent;\n\t\tborder-radius: 7px;\n\t\tbackground: transparent;\n\t}\n\t.row[open] {\n\t\tmargin-top: 6px;\n\t\tmargin-bottom: 8px;\n\t\tborder-color: #262220;\n\t\tbackground: #1b1816;\n\t}\n\t.row summary {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 8px;\n\t\tpadding: 2px 8px;\n\t\tcursor: pointer;\n\t\tlist-style: none;\n\t\tuser-select: none;\n\t\tfont-size: 12.5px;\n\t\tcolor: #8a837c;\n\t\tborder-radius: 7px;\n\t\ttransition: background 0.12s;\n\t}\n\t.row summary:hover {\n\t\tbackground: #201c18;\n\t\tcolor: #c7c2bd;\n\t}\n\t.row summary::-webkit-details-marker {\n\t\tdisplay: none;\n\t}\n\t.row[open] > summary {\n\t\tpadding: 5px 10px;\n\t\tcolor: #c7c2bd;\n\t\tborder-bottom: 1px solid #262220;\n\t\tborder-bottom-left-radius: 0;\n\t\tborder-bottom-right-radius: 0;\n\t}\n\t/* A row with nothing to open: the closed summary's look, no hover. */\n\t.row.note {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 8px;\n\t\tpadding: 2px 8px;\n\t\tfont-size: 12.5px;\n\t\tcolor: #8a837c;\n\t}\n\t.row-summary {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n\t.mono {\n\t\tfont-family: var(--mono);\n\t\tfont-size: 12px;\n\t\tcolor: inherit;\n\t}\n\n\t.tool-icon {\n\t\tflex-shrink: 0;\n\t\tcolor: #78716c;\n\t\tfont-size: 15px;\n\t}\n\t.tool-status {\n\t\tflex-shrink: 0;\n\t\tfont-size: 14px;\n\t}\n\t.tool-open {\n\t\tflex-shrink: 0;\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 24px;\n\t\theight: 24px;\n\t\tmargin: -4px 0;\n\t\tborder-radius: 6px;\n\t\tcolor: #78716c;\n\t\tfont-size: 14px;\n\t}\n\t.tool-open:hover {\n\t\tbackground: #262626;\n\t\tcolor: #e7e5e4;\n\t}\n\t.tool-status.ok {\n\t\tcolor: #4d7c5f;\n\t}\n\t.tool-status.fail {\n\t\tcolor: #f87171;\n\t}\n\t.tool-status.running {\n\t\tcolor: #d97706;\n\t}\n\t.tool-card.error {\n\t\tborder-color: rgba(127, 29, 29, 0.6);\n\t}\n\t/* A folded run opens in place, without a card of its own: its rows hang off\n\t a thin rule under the summary, so a call opened inside it still reads as\n\t the one card on the screen. */\n\t.tool-group[open] {\n\t\tborder-color: transparent;\n\t\tbackground: transparent;\n\t}\n\t.tool-group[open] > summary {\n\t\tpadding: 2px 8px;\n\t\tborder-bottom: none;\n\t\tborder-radius: 7px;\n\t}\n\t.group-rows {\n\t\tmargin: 2px 0 6px 15px;\n\t\tpadding-left: 8px;\n\t\tborder-left: 1px solid #292524;\n\t}\n\t.group-failed {\n\t\tflex-shrink: 0;\n\t\tfont-size: 11.5px;\n\t\tcolor: #f87171;\n\t}\n\t.spin {\n\t\tanimation: spin 1s linear infinite;\n\t}\n\t@keyframes spin {\n\t\tto {\n\t\t\ttransform: rotate(360deg);\n\t\t}\n\t}\n\n\t.tool-detail {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: 1fr;\n\t\tgap: 8px;\n\t\tpadding: 8px 10px 10px;\n\t}\n\t/* Input and result share the row when there is room — the card stays short. */\n\t@container (min-width: 700px) {\n\t\t.tool-detail.two-col {\n\t\t\tgrid-template-columns: minmax(0, 5fr) minmax(0, 7fr);\n\t\t}\n\t}\n\t.pane {\n\t\tmin-width: 0;\n\t\tbackground: #14110e;\n\t\tborder: 1px solid #221e1a;\n\t\tborder-radius: 6px;\n\t\tpadding: 6px 9px 8px;\n\t}\n\t.pane.result.ok {\n\t\tborder-color: #1f2b22;\n\t\tbackground: #10140f;\n\t}\n\t.pane.result.fail {\n\t\tborder-color: #3d1d1d;\n\t\tbackground: #171010;\n\t}\n\t.pane-head {\n\t\tfont-size: 9.5px;\n\t\tfont-weight: 700;\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.1em;\n\t\tcolor: #6b6560;\n\t\tmargin-bottom: 5px;\n\t}\n\t.pane.result.ok .pane-head {\n\t\tcolor: #5f8a6e;\n\t}\n\t.pane.result.fail .pane-head {\n\t\tcolor: #d16b6b;\n\t}\n\t.result-image {\n\t\tdisplay: block;\n\t\tmargin-bottom: 6px;\n\t}\n\t.result-image img {\n\t\tdisplay: block;\n\t\tmax-width: 100%;\n\t\tmax-height: 320px;\n\t\tborder: 1px solid #221e1a;\n\t\tborder-radius: 4px;\n\t}\n\t.pane pre {\n\t\tfont-family: var(--mono);\n\t\tfont-size: 11.5px;\n\t\tline-height: 1.5;\n\t\toverflow-x: auto;\n\t\twhite-space: pre-wrap;\n\t\tword-break: break-word;\n\t\tmax-height: 260px;\n\t\toverflow-y: auto;\n\t\tmargin: 0;\n\t}\n\t.diff-file {\n\t\tmargin-left: 8px;\n\t\ttext-transform: none;\n\t\tletter-spacing: 0;\n\t\tfont-size: 11px;\n\t\tfont-weight: 400;\n\t\tcolor: #a8a29e;\n\t\tfont-family: var(--mono);\n\t}\n\t.diff-hunk {\n\t\tcolor: #7d96b8;\n\t}\n\t.diff-add {\n\t\tcolor: #b7e0ae;\n\t\tbackground: rgba(46, 160, 67, 0.14);\n\t\tdisplay: inline-block;\n\t\twidth: 100%;\n\t}\n\t.diff-del {\n\t\tcolor: #f0b0aa;\n\t\tbackground: rgba(248, 81, 73, 0.13);\n\t\tdisplay: inline-block;\n\t\twidth: 100%;\n\t}\n\t.diff-ctx {\n\t\tcolor: #7d7871;\n\t}\n\n\t.cmd {\n\t\tcolor: #e7e5e4;\n\t}\n\t.cmd-glyph {\n\t\tcolor: #d97706;\n\t\tfont-weight: 700;\n\t\tuser-select: none;\n\t}\n\t.kv {\n\t\tdisplay: flex;\n\t\tgap: 8px;\n\t\talign-items: baseline;\n\t\tfont-size: 11.5px;\n\t\tmargin-top: 4px;\n\t\tmin-width: 0;\n\t}\n\t.kv-long {\n\t\tmargin-top: 6px;\n\t}\n\t.k {\n\t\tflex-shrink: 0;\n\t\tfont-family: var(--mono);\n\t\tfont-size: 10.5px;\n\t\tcolor: #6b6560;\n\t}\n\t.kv-long .k {\n\t\tdisplay: block;\n\t\tmargin-bottom: 3px;\n\t}\n\t.v {\n\t\tfont-family: var(--mono);\n\t\tcolor: #c7c2bd;\n\t\toverflow-wrap: anywhere;\n\t\tmin-width: 0;\n\t}\n\n\t/* --- A grilling round: questions as a form. Amber while it waits on you,\n\t the colour every surface keeps for \"a person is needed\"; the numbers sit\n\t in a gutter of their own because the round is read in order. --- */\n\t.grill {\n\t\tmargin: 12px 0 14px;\n\t\tborder: 1px solid #2a2a2c;\n\t\tborder-radius: 10px;\n\t\tbackground: #161514;\n\t}\n\t.grill.live {\n\t\tborder-color: #5a4310;\n\t\tborder-left: 3px solid #f59e0b;\n\t\tbackground: #1a1712;\n\t}\n\t.gq {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: 34px 1fr;\n\t\tpadding: 12px 14px 12px 0;\n\t}\n\t.gq + .gq {\n\t\tborder-top: 1px solid #262320;\n\t}\n\t.gq.skipped .gq-main {\n\t\topacity: 0.55;\n\t}\n\t.gq-n {\n\t\tfont-family: var(--mono);\n\t\tfont-size: 12px;\n\t\t/* The title's line box, so the number sits on the title's baseline. */\n\t\tline-height: calc(14.5px * 1.65);\n\t\tcolor: #78716c;\n\t\ttext-align: right;\n\t\tpadding-right: 10px;\n\t}\n\t.live .gq-n {\n\t\tcolor: #fbbf24;\n\t}\n\t.gq-main {\n\t\tmin-width: 0;\n\t}\n\t.gq-title {\n\t\tmargin: 0 0 2px;\n\t\tfont-weight: 600;\n\t\tcolor: #f5f5f4;\n\t}\n\t.gq-body {\n\t\tcolor: #d6d3d1;\n\t}\n\t.gq-rec {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tgap: 8px;\n\t\twidth: 100%;\n\t\tmargin-top: 9px;\n\t\tpadding: 8px 10px;\n\t\tborder: 1px dashed #44403c;\n\t\tborder-radius: 8px;\n\t\tbackground: transparent;\n\t\tcolor: #a8a29e;\n\t\tfont: inherit;\n\t\tfont-size: 13.5px;\n\t\tline-height: 1.55;\n\t\ttext-align: left;\n\t}\n\tbutton.gq-rec {\n\t\tcursor: pointer;\n\t}\n\tbutton.gq-rec:hover {\n\t\tborder-color: #78716c;\n\t\tcolor: #d6d3d1;\n\t}\n\t.gq-rec.on {\n\t\tborder-style: solid;\n\t\tborder-color: #a16207;\n\t\tbackground: #2a2112;\n\t\tcolor: #fde68a;\n\t}\n\t.gq-rec iconify-icon {\n\t\tflex: none;\n\t\tfont-size: 16px;\n\t\tmargin-top: 2px;\n\t}\n\t.gq-rec.on iconify-icon {\n\t\tcolor: #fbbf24;\n\t}\n\t.gq-rec.past {\n\t\tborder-style: solid;\n\t\tborder-color: #292524;\n\t\tcolor: #a8a29e;\n\t}\n\t.gq-rec .markdown {\n\t\tmin-width: 0;\n\t}\n\t.gq-own {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tgap: 6px;\n\t\tmargin-top: 6px;\n\t}\n\t.gq-own textarea {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\tmax-height: 160px;\n\t\tresize: none;\n\t\tpadding: 6px 10px;\n\t\tborder: 1px solid #292524;\n\t\tborder-radius: 8px;\n\t\tbackground: #121110;\n\t\tcolor: #e7e5e4;\n\t\tfont: inherit;\n\t\tfont-size: 13.5px;\n\t\tline-height: 1.5;\n\t\toutline: none;\n\t}\n\t.gq-own textarea::placeholder {\n\t\tcolor: #57534e;\n\t}\n\t.gq-own textarea:focus {\n\t\tborder-color: #78716c;\n\t}\n\t.gq-own textarea.filled {\n\t\tborder-color: #a16207;\n\t}\n\t.gq-skip {\n\t\tflex: none;\n\t\theight: 32px;\n\t\tpadding: 0 10px;\n\t\tborder: 1px solid transparent;\n\t\tborder-radius: 8px;\n\t\tbackground: transparent;\n\t\tcolor: #78716c;\n\t\tfont-size: 12px;\n\t\tcursor: pointer;\n\t}\n\t.gq-skip:hover,\n\t.gq-skip.on {\n\t\tborder-color: #292524;\n\t\tcolor: #d6d3d1;\n\t}\n\t.grill-foot {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 10px;\n\t\tpadding: 10px 14px 12px 34px;\n\t\tborder-top: 1px solid #262320;\n\t}\n\t.grill-tally {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\tfont-family: var(--mono);\n\t\tfont-size: 11.5px;\n\t\tcolor: #a8a29e;\n\t}\n\t.grill-again {\n\t\tflex: none;\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t\theight: 34px;\n\t\tpadding: 0 12px;\n\t\tborder: 1px solid #292524;\n\t\tborder-radius: 8px;\n\t\tbackground: transparent;\n\t\tcolor: #a8a29e;\n\t\tfont: inherit;\n\t\tfont-size: 12.5px;\n\t\tcursor: pointer;\n\t}\n\t.grill-again:hover {\n\t\tcolor: #e7e5e4;\n\t\tborder-color: #44403c;\n\t}\n\t.grill-again:focus-visible {\n\t\toutline: 2px solid #78716c;\n\t\toutline-offset: 1px;\n\t}\n\t.grill-send {\n\t\tflex: none;\n\t\theight: 34px;\n\t\tpadding: 0 16px;\n\t\tborder: 0;\n\t\tborder-radius: 8px;\n\t\tbackground: #f59e0b;\n\t\tcolor: #1c1307;\n\t\tfont-size: 13px;\n\t\tfont-weight: 600;\n\t\tcursor: pointer;\n\t}\n\t.grill-send:hover:not(:disabled) {\n\t\tbackground: #fbbf24;\n\t}\n\t.grill-send:disabled {\n\t\topacity: 0.45;\n\t\tcursor: default;\n\t}\n\t.gq-rec:focus-visible,\n\t.gq-skip:focus-visible,\n\t.grill-send:focus-visible {\n\t\toutline: 2px solid #fbbf24;\n\t\toutline-offset: 2px;\n\t}\n\t@media (pointer: coarse) {\n\t\t.gq-skip,\n\t\t.grill-again,\n\t\t.grill-send {\n\t\t\theight: 40px;\n\t\t}\n\t}\n\n\t/* --- AskUserQuestion, once answered: a log line that opens to the\n\t choices. The open dialog is DialogCard's. --- */\n\t.ask-header-chip {\n\t\tdisplay: inline-block;\n\t\tfont-size: 10px;\n\t\tfont-weight: 700;\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.08em;\n\t\tcolor: #a8a29e;\n\t\tbackground: #262220;\n\t\tborder-radius: 4px;\n\t\tpadding: 1px 7px;\n\t\tmargin-bottom: 4px;\n\t}\n\t.ask-question {\n\t\tfont-weight: 500;\n\t\tcolor: #d6d3d1;\n\t\tmargin: 4px 0 6px;\n\t}\n\t/* Answered question: review layout inside the collapsed row */\n\t.ask-detail {\n\t\tpadding: 8px 12px 10px;\n\t}\n\t.ask-q-review + .ask-q-review {\n\t\tmargin-top: 10px;\n\t\tpadding-top: 8px;\n\t\tborder-top: 1px solid #262220;\n\t}\n\t.ask-opt-review {\n\t\tfont-size: 12.5px;\n\t\tcolor: #78716c;\n\t\tpadding: 2px 8px;\n\t\tborder-left: 2px solid transparent;\n\t}\n\t.ask-opt-review.chosen {\n\t\tcolor: #e7e5e4;\n\t\tborder-left-color: #4d7c5f;\n\t\tbackground: #161a16;\n\t\tborder-radius: 3px;\n\t}\n\n\t/* --- Subagent Task card: the one row that carries hierarchy. Closed, it\n\t reports what its agent is doing right now; open, it becomes that agent's\n\t own activity log and final report. --- */\n\t.tool-card.agent[open] {\n\t\tborder-color: #33302a;\n\t}\n\t.agent-line {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 8px;\n\t\tmin-width: 0;\n\t}\n\t.agent-name {\n\t\tmin-width: 0;\n\t\tmax-width: 60%;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t\tfont-weight: 600;\n\t\tcolor: #d6d3d1;\n\t}\n\t.agent-type {\n\t\tflex-shrink: 0;\n\t\tfont-size: 9.5px;\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.08em;\n\t\tcolor: #9b8fd4;\n\t\tbackground: #221f2e;\n\t\tborder-radius: 4px;\n\t\tpadding: 1px 6px;\n\t}\n\t.agent-doing,\n\t.agent-count {\n\t\tmin-width: 0;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t\tfont-size: 11.5px;\n\t\tcolor: #7d7871;\n\t}\n\t.agent-doing::before {\n\t\tcontent: '● ';\n\t\tcolor: #34d399;\n\t}\n\n\t.agent-detail {\n\t\tpadding: 8px 12px 10px;\n\t}\n\t.agent-meta {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 5px;\n\t\tmargin-bottom: 8px;\n\t}\n\t.agent-chip {\n\t\tfont-size: 10px;\n\t\tcolor: #a8a29e;\n\t\tbackground: #232019;\n\t\tborder-radius: 4px;\n\t\tpadding: 1px 7px;\n\t}\n\t.agent-chip.live {\n\t\tcolor: #6ee7b7;\n\t\tbackground: #14251d;\n\t}\n\t.agent-activity {\n\t\tlist-style: none;\n\t\tmargin: 0;\n\t\tpadding: 0 0 0 11px;\n\t\tborder-left: 2px solid #2b2622;\n\t\t/* Agents reach 150+ calls; scroll inside the card instead of growing it. */\n\t\tmax-height: 260px;\n\t\toverflow-y: auto;\n\t}\n\t.agent-trimmed {\n\t\tfont-size: 10.5px;\n\t\tcolor: #6b6560;\n\t\tmargin-bottom: 3px;\n\t}\n\t.agent-activity li {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 7px;\n\t\tpadding: 1px 0;\n\t\tfont-size: 11.5px;\n\t\tcolor: #8a837c;\n\t\tmin-width: 0;\n\t}\n\t.agent-activity li span {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n\t.agent-activity li.pending {\n\t\tcolor: #d6d3d1;\n\t}\n\t.agent-activity li.failed {\n\t\tcolor: #f0b0aa;\n\t}\n\t.agent-report {\n\t\tmargin-top: 10px;\n\t\tpadding-top: 8px;\n\t\tborder-top: 1px solid #262220;\n\t\tfont-size: 13.5px;\n\t}\n\n\t/* --- Compaction boundary: a fold line across the conversation --- */\n\t/* A prompt's rewind: quiet until the prompt is pointed at, always there to a finger. */\n\t.rewind-btn {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tmargin-right: 6px;\n\t\tpadding: 0;\n\t\tborder: 0;\n\t\tbackground: none;\n\t\tcolor: inherit;\n\t\tcursor: pointer;\n\t\topacity: 0;\n\t\ttransition: opacity 0.15s;\n\t}\n\t.user-block:hover .rewind-btn,\n\t.rewind-btn:focus-visible {\n\t\topacity: 1;\n\t}\n\t@media (hover: none) {\n\t\t.rewind-btn:not(:disabled) {\n\t\t\topacity: 0.7;\n\t\t}\n\t}\n\t.rewind-btn:disabled {\n\t\tcursor: default;\n\t}\n\t.user-block:hover .rewind-btn:disabled {\n\t\topacity: 0.4;\n\t}\n\t.rewind-btn:not(:disabled):hover {\n\t\tcolor: #fbbf24;\n\t}\n\t.rewound {\n\t\tmargin: 10px 0;\n\t\tborder: 1px dashed #3f3f46;\n\t\tborder-radius: 8px;\n\t\tpadding: 6px 10px;\n\t\tcolor: #78716c;\n\t}\n\t.rewound summary {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t\tcursor: pointer;\n\t\tfont-size: 12.5px;\n\t\tlist-style: none;\n\t}\n\t.rewound summary::-webkit-details-marker {\n\t\tdisplay: none;\n\t}\n\t.rewound-rows {\n\t\topacity: 0.6;\n\t}\n\n\t.compact {\n\t\tmargin: 22px 0 14px;\n\t\tborder: 1px dashed #3a3a42;\n\t\tborder-radius: 8px;\n\t\tbackground: #121216;\n\t\tfont-size: 12.5px;\n\t}\n\t.compact summary {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 9px;\n\t\tpadding: 8px 12px;\n\t\tlist-style: none;\n\t\tcursor: pointer;\n\t\tcolor: #a8a29e;\n\t}\n\t.compact summary::-webkit-details-marker {\n\t\tdisplay: none;\n\t}\n\t.compact summary iconify-icon {\n\t\tfont-size: 15px;\n\t\tcolor: #a78bfa;\n\t}\n\t.compact-title {\n\t\tcolor: #c4b5fd;\n\t}\n\t.compact-tokens {\n\t\tfont-family: var(--mono);\n\t\tfont-size: 11px;\n\t\tcolor: #78716c;\n\t}\n\t.compact summary .time {\n\t\tmargin-left: auto;\n\t}\n\t.compact-summary {\n\t\tpadding: 4px 14px 12px;\n\t\tborder-top: 1px dashed #3a3a42;\n\t\tfont-size: 13px;\n\t\tline-height: 1.55;\n\t\tcolor: #a8a29e;\n\t}\n\t.compact-summary.muted {\n\t\tcolor: #57534e;\n\t}\n\n\t/* --- Live status row --- */\n\t.live-row {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 9px;\n\t\tmargin: 8px 0 4px 12px;\n\t\tfont-size: 12.5px;\n\t\tcolor: #a8a29e;\n\t}\n\t.live-verb {\n\t\tflex: none;\n\t\tcolor: #d6d3d1;\n\t}\n\t.live-chips {\n\t\tdisplay: flex;\n\t\tgap: 5px;\n\t\tmin-width: 0;\n\t\toverflow: hidden;\n\t}\n\t.live-text {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.spin,\n\t\t.empty.starting iconify-icon {\n\t\t\tanimation: none;\n\t\t}\n\t}\n\n\t.thinking summary {\n\t\tcolor: #6b6560;\n\t\tfont-style: italic;\n\t}\n\t.thinking-text {\n\t\tpadding: 8px 12px;\n\t\twhite-space: pre-wrap;\n\t\tword-break: break-word;\n\t\tcolor: #78716c;\n\t\tfont-size: 13px;\n\t\tfont-style: italic;\n\t}\n</style>\n"],"names":["ResizeObserverSingleton","#listeners","#observer","#options","options","element","listener","listeners","#getObserver","entries","entry","resize_observer_border_box","bind_element_size","type","set","unsub","effect","untrack","asRecord","value","readString","HISTORY_PAGE","TranscriptStore","ReliableWebSocket","$.state","#subagentsByTask","$.derived","sub","protocol","session","agent","event","data","msg","older","i","resolve","agentId","held","subagents","seen","a","kept","index","sessionId","base","address","next","nextAgent","transcriptStore","made","disabled","$.prop","$$props","field","mine","voiceStore","status","$.get","elsewhere","label","toggle","said","button","root_1","node_1","$.child","iconify_icon","root","iconify_icon_1","$.set_custom_element_data","$.append","$$anchor","iconify_icon_2","$$render","consequent","consequent_1","alternate","$.reset","$.set_class","$.set_attribute","$.delegated","consequent_2","QUOTABLE","NOT_QUOTABLE","trimBlankLines","text","quoteBlock","lines","line","appendQuote","draft","quote","before","outermost","el","outer","quotableRanges","selection","range","common","scope","within","parts","ranges","part","clipped","whole","QUOTING","takeQuote","ABOVE","GAP","HANDLES","SETTLE_MS","PRESS_MS","touch","MediaQuery","coarse","place","width","left","dragging","pressing","settle","frame","position","$.set","first","last","top","bottom","right","below","selected","read","readAfter","ms","from","$.user_effect","onSelection","onDown","e","onUp","onScroll","onKey","focus","onKeyUp","div","root_3","Button","$.first_child","fragment_1","kbd","IS_MAC","styles","$.bind_element_size","$$value","CLOSES_UP","insertSaid","spot","start","end","after","joined","lead","tail","caret","spotOf","keepsCaret","keep","caretOf","live","putCaret","sayInto","current","write","tick","keysForAnswer","picks","sorted","keysForOptionPick","keys","cursor","pick","step","to","count","move","keysForOptionMove","steps","liveRows","qi","$.noop","root_5","rows","row","preview","previewFor","root_4","node","span","$.template_effect","$.set_text","text_1","classes_1","span_1","$.sibling","span_2","text_2","node_2","span_3","root_2","text_3","$.only_child","pre","consequent_3","$$node","$$action_arg","longPress","highlight","classes","closed","freeText","placeholder","form","root_7","node_4","Input","freeKeydown","inputEl","DictateButton","dictateTarget","t","consequent_4","sending","node_6","noting","text_5","sendFree","paneFreeText","answerLabel","notingOn","textRow","consequent_5","keysBar","note","p","root_9","span_4","text_6","node_9","button_1","fragment_5","iconify_icon_3","button_2","iconify_icon_4","d","ARROW_NOTE","div_1","node_8","button_3","iconify_icon_5","button_4","iconify_icon_6","node_10","button_5","root_10","iconify_icon_7","done","reviewing","consequent_7","$.each","node_11","extraKeys","extra","button_6","root_11","text_7","text_8","button_7","node_12","p_1","root_12","text_9","consequent_8","ask","permission","norm","s","o","liveIndex","asked","byText","q","sentCount","blind","hasSubmitTab","atSubmit","tabs","isAnswered","answeredCount","canTravel","answers","$.proxy","answerOf","r","remember","answer","goToTab","delta","typing","n","advanceBlind","opts","multi","wasNoting","paneTyping","OPEN_TIMEOUT_MS","until","walkTo","walk","pickBlind","oi","confirmBlind","b","finish","submit","ticked","KEY_SEGMENT","out","segment","m","l","reveal","isPermission","title","section","root_29","header","iconify_icon_8","span_5","text_10","node_13","iconify_icon_9","consequent_9","active","sent","div_2","root_20","div_3","span_6","text_11","node_16","button_8","root_14","iconify_icon_10","text_12","consequent_10","p_2","text_13","node_17","div_4","root_16","iconify_icon_11","node_18","span_7","root_15","text_14","consequent_11","alternate_1","node_20","div_5","fragment_8","opt","button_9","root_18","node_21","iconify_icon_12","$0","classes_6","span_8","text_16","consequent_14","alternate_2","span_9","span_10","text_17","node_22","span_11","text_18","consequent_15","pre_1","text_19","consequent_16","classes_5","node_24","consequent_17","alternate_3","consequent_18","consequent_12","consequent_13","alternate_4","classes_3","classes_4","div_6","root_22","node_27","p_3","root_21","text_21","consequent_19","node_28","consequent_20","consequent_21","footer","root_25","span_12","node_31","text_23","consequent_22","alternate_5","node_32","iconify_icon_13","fragment_15","iconify_icon_14","fragment_17","consequent_23","alternate_6","consequent_24","consequent_25","div_7","fragment_19","node_35","p_4","text_25","consequent_27","node_36","node_38","p_5","root_28","consequent_28","consequent_29","$.action","classes_2","CODE_SHAPE","copied","awaitingCode","url","code","pasteAndSubmit","copyLink","onBack","fragment_2","fragment_3","node_3","root_8","fragment_7","node_7","text_4","node_5","fragment_9","fragment_10","code_1","consequent_6","pending","card","run","key","action","restores","summaries","fragment","blockquote","ul","li","option","$1","parseMcpToolName","name","match","MCP_FAMILIES","toolIcon","mcp","pattern","arg","isRewound","item","foldRewound","items","QUESTION","RECOMMENDED","firstParagraph","blank","join","parseGrillRound","starts","intro","questions","outro","rest","recAt","bodyLines","recommended","recLines","para","composeGrillReply","round","STANDALONE_TOOLS","foldable","plural","one","many","times","SHELL","READ","EDIT","WRITE","SEARCH","LIST","FETCH","WEB_SEARCH","COMPOUND","SHELL_VERBS","shellCategory","input","command","verb","args","category","TOOL_CATEGORIES","categoryCache","categorize","tool","categorizeUncached","summarizeToolRun","tools","counts","groupToolRuns","flush","body","open","totals","sumCounts","root_6","f","letter","statusLetter","bdi","displayPath","grill","id","phase","grillPhase","liveGrillId","ready","sessionState","$.html","markdown","renderMarkdown","setAnswer","textarea","$.remove_textarea_child","autosize","ownFields","fieldKey","$.attach","ownText","typeAnswer","$.set_value","grillSending","tally","sendRound","footer_1","currentAction","activity","delivered","suggestion","paneChoice","paneLogin","paneRewind","olderCount","loadingEarlier","repoSession","turnChanges","transcriptEl","link","path","openFileLink","goto","fileLinks","now","startedAt","ticking","CHIP","elapsedText","formatSpinnerElapsed","blocks","rewinding","canRewind","rewindable","rowsBack","at","rewindTo","turnRunning","turnCards","placeTurnChanges","latestCard","cardOpen","opened","roundCache","grillRound","grillAnswers","agreed","own","fit","canAnswer","liveAskId","dialogKey","seenLive","submitted","dialogClosed","answeredAsks","lastLiveAsk","footDialog","deliveredVia","turn","formatTime","ts","inputPanes","inputJson","toolName","isShell","cmd","short","long","raw","QuoteSelection","turnGlyph","dictated","via","how","div_8","node_15","div_9","root_13","div_10","div_11","node_19","root_17","div_12","root_19","div_13","node_23","div_14","div_15","text_15","div_16","div_17","span_13","span_14","details","root_26","summary","span_15","text_20","node_25","span_16","root_23","span_17","text_22","div_18","root_24","details_1","root_30","summary_1","span_18","consequent_26","div_19","div_20","span_19","text_26","node_29","div_21","root_27","text_27","classes_7","div_22","text_28","$2","DialogCard","div_23","span_20","text_29","span_21","text_30","div_24","details_2","root_31","summary_2","div_25","text_31","showResult","doing","details_3","root_57","summary_3","span_22","fragment_13","span_23","text_32","span_24","root_32","text_33","consequent_34","span_25","root_33","node_34","ToolLabel","span_26","root_34","text_34","consequent_36","a_1","root_35","opens","toolFileTarget","span_27","fragment_14","node_37","a_2","root_37","iconify_icon_15","consequent_39","consequent_38","iconify_icon_16","iconify_icon_17","consequent_40","alternate_7","div_26","root_44","div_27","node_40","span_28","root_39","text_35","consequent_41","span_29","text_36","node_41","span_30","root_40","consequent_42","node_42","div_28","root_41","text_37","consequent_43","ol","act","li_1","root_42","iconify_icon_18","span_31","node_43","classes_9","div_29","root_43","div_30","consequent_44","div_31","root_56","node_45","section_1","root_48","span_32","root_45","text_38","consequent_46","hunk","span_33","text_39","text_40","$.index","dl","span_34","fragment_16","text_41","text_42","$.clsx","section_2","root_52","node_48","root_49","text_43","consequent_48","div_32","root_50","span_35","text_44","span_36","text_45","div_33","root_51","span_37","text_46","pre_2","text_47","consequent_47","consequent_49","section_3","root_55","header_1","text_48","node_52","src","a_3","root_53","img","pre_3","root_54","text_49","consequent_50","classes_11","consequent_51","classes_10","consequent_45","alternate_8","classes_8","consequent_30","d_3","consequent_31","consequent_32","consequent_52","itemView","changed","details_4","root_59","summary_4","iconify_icon_19","span_38","text_50","node_55","span_39","fragment_18","text_51","iconify_icon_20","iconify_icon_21","consequent_53","alternate_9","div_34","$.event","consequent_54","alternate_10","v","TurnChangesCard","file","consequent_55","node_57","div_35","root_61","iconify_icon_22","$.set_style","div_36","root_62","iconify_icon_23","div_37","root_63","iconify_icon_24","consequent_57","consequent_58","consequent_56","div_38","root_64","iconify_icon_25","text_52","span_40","text_53","consequent_59","node_59","block","details_5","root_65","summary_5","iconify_icon_26","span_41","text_54","div_39","consequent_60","alternate_11","consequent_61","LoginCard","consequent_62","RewindCard","consequent_63","div_40","root_69","node_65","SessionStateIndicator","span_42","fragment_28","text_55","span_43","node_67","Badge","span_44","root_66","text_56","consequent_64","consequent_65","text_58","consequent_66","text_59","consequent_67","span_45","root_68","text_60","consequent_68","alternate_12","state","div_41","root_70","node_71","span_46","node_72","consequent_71","consequent_72","alternate_13","sessionStateVisual","consequent_69","consequent_73","root_71","div_42","text_65","span_47","iconify_icon_27","$$args","consequent_74","$.bind_this","node_74","GithubRefCards","consequent_75"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"DlENCZqZ.js","sources":["../../../../../../../node_modules/.bun/svelte@5.57.3/node_modules/svelte/src/internal/client/dom/elements/bindings/size.js","../../../../../../../src/transcript/json.ts","../../../../../../src/lib/stores/transcript.svelte.ts","../../../../../../src/lib/components/DictateButton.svelte","../../../../../../src/lib/quote.ts","../../../../../../src/lib/components/QuoteSelection.svelte","../../../../../../src/lib/dictation.ts","../../../../../../../src/tmux/answer-keys.ts","../../../../../../src/lib/components/DialogCard.svelte","../../../../../../src/lib/components/LoginCard.svelte","../../../../../../src/lib/components/RewindCard.svelte","../../../../../../../src/transcript/mcp.ts","../../../../../../src/lib/tool-icons.ts","../../../../../../src/lib/components/ToolLabel.svelte","../../../../../../../src/transcript/forks.ts","../../../../../../../src/transcript/grilling.ts","../../../../../../../src/transcript/tool-groups.ts","../../../../../../src/lib/components/TurnChangesCard.svelte","../../../../../../src/lib/components/TranscriptView.svelte"],"sourcesContent":["import { effect, teardown } from '../../../reactivity/effects.js';\nimport { untrack } from '../../../runtime.js';\n\n/**\n * We create one listener for all elements\n * @see {@link https://groups.google.com/a/chromium.org/g/blink-dev/c/z6ienONUb5A/m/F5-VcUZtBAAJ Explanation}\n */\nclass ResizeObserverSingleton {\n\t/** */\n\t#listeners = new WeakMap();\n\n\t/** @type {ResizeObserver | undefined} */\n\t#observer;\n\n\t/** @type {ResizeObserverOptions} */\n\t#options;\n\n\t/** @static */\n\tstatic entries = new WeakMap();\n\n\t/** @param {ResizeObserverOptions} options */\n\tconstructor(options) {\n\t\tthis.#options = options;\n\t}\n\n\t/**\n\t * @param {Element} element\n\t * @param {(entry: ResizeObserverEntry) => any} listener\n\t */\n\tobserve(element, listener) {\n\t\tvar listeners = this.#listeners.get(element) || new Set();\n\t\tlisteners.add(listener);\n\n\t\tthis.#listeners.set(element, listeners);\n\t\tthis.#getObserver().observe(element, this.#options);\n\n\t\treturn () => {\n\t\t\tvar listeners = this.#listeners.get(element);\n\t\t\tlisteners.delete(listener);\n\n\t\t\tif (listeners.size === 0) {\n\t\t\t\tthis.#listeners.delete(element);\n\t\t\t\t/** @type {ResizeObserver} */ (this.#observer).unobserve(element);\n\t\t\t}\n\t\t};\n\t}\n\n\t#getObserver() {\n\t\treturn (\n\t\t\tthis.#observer ??\n\t\t\t(this.#observer = new ResizeObserver(\n\t\t\t\t/** @param {any} entries */ (entries) => {\n\t\t\t\t\tfor (var entry of entries) {\n\t\t\t\t\t\tResizeObserverSingleton.entries.set(entry.target, entry);\n\t\t\t\t\t\tfor (var listener of this.#listeners.get(entry.target) || []) {\n\t\t\t\t\t\t\tlistener(entry);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t))\n\t\t);\n\t}\n}\n\nvar resize_observer_content_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'content-box'\n});\n\nvar resize_observer_border_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'border-box'\n});\n\nvar resize_observer_device_pixel_content_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'device-pixel-content-box'\n});\n\n/**\n * @param {Element} element\n * @param {'contentRect' | 'contentBoxSize' | 'borderBoxSize' | 'devicePixelContentBoxSize'} type\n * @param {(entry: keyof ResizeObserverEntry) => void} set\n */\nexport function bind_resize_observer(element, type, set) {\n\tvar observer =\n\t\ttype === 'contentRect' || type === 'contentBoxSize'\n\t\t\t? resize_observer_content_box\n\t\t\t: type === 'borderBoxSize'\n\t\t\t\t? resize_observer_border_box\n\t\t\t\t: resize_observer_device_pixel_content_box;\n\n\tvar unsub = observer.observe(element, /** @param {any} entry */ (entry) => set(entry[type]));\n\tteardown(unsub);\n}\n\n/**\n * @param {HTMLElement} element\n * @param {'clientWidth' | 'clientHeight' | 'offsetWidth' | 'offsetHeight'} type\n * @param {(size: number) => void} set\n */\nexport function bind_element_size(element, type, set) {\n\tvar unsub = resize_observer_border_box.observe(element, () => set(element[type]));\n\n\teffect(() => {\n\t\t// The update could contain reads which should be ignored\n\t\tuntrack(() => set(element[type]));\n\t\treturn unsub;\n\t});\n}\n","/**\n * Narrowing helpers for the untyped records that come out of Claude Code's\n * JSONL. Every field is optional in practice — the format is undocumented and\n * shifts between versions — so readers return null (or 0) rather than throw.\n */\n\nexport function asRecord(value: unknown): Record<string, unknown> | null {\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nexport function readString(value: unknown): string | null {\n return typeof value === \"string\" ? value : null;\n}\n\n/** A finite number off a record, or 0 — the sane default for a token count. */\nexport function readNumber(record: Record<string, unknown>, key: string): number {\n const value = record[key];\n return typeof value === \"number\" && Number.isFinite(value) ? value : 0;\n}\n","import { browser } from '$app/environment';\nimport { ReliableWebSocket } from './websocket-base.svelte';\nimport type { ContextUsage } from '../../../../src/transcript/context.js';\nimport type { TranscriptEntry } from '../../../../src/transcript/parser.js';\nimport type { SubagentPayload } from '../../../../src/server/ws-handlers.js';\n\nexport type { SubagentPayload };\n\ninterface SnapshotMsg {\n\ttype: 'snapshot';\n\tentries: TranscriptEntry[];\n\tfirstIndex: number;\n\tsubagents: SubagentPayload[];\n\tcontext: ContextUsage | null;\n\tmodel?: string | null;\n\tavailable: boolean;\n}\ninterface HistoryMsg {\n\ttype: 'history';\n\tentries: TranscriptEntry[];\n\tfirstIndex: number;\n}\ninterface EntriesMsg {\n\ttype: 'entries';\n\tentries: TranscriptEntry[];\n\tindices: number[];\n}\ninterface SubagentsMsg {\n\ttype: 'subagents';\n\tsubagents: SubagentPayload[];\n}\ninterface ContextMsg {\n\ttype: 'context';\n\tcontext: ContextUsage;\n}\ninterface ModelMsg {\n\ttype: 'model';\n\tmodel: string;\n}\ntype TranscriptMsg = SnapshotMsg | HistoryMsg | EntriesMsg | SubagentsMsg | ContextMsg | ModelMsg;\n\n/** Entries per \"load earlier\" request. */\nconst HISTORY_PAGE = 200;\n\n/**\n * Transcript view model: an ordered list of entries upserted by id.\n * The server sends a full snapshot on attach and per-entry deltas afterwards\n * (an updated entry — e.g. a tool call receiving its result — keeps its\n * position; a new one is appended).\n */\nexport class TranscriptStore extends ReliableWebSocket {\n\tentries = $state<TranscriptEntry[]>([]);\n\t/** All subagents, keyed by their own id — some have no parent Task id. */\n\tsubagents = $state<Record<string, SubagentPayload>>({});\n\t/** The subset that can be attached to a Task card, keyed by that card's id. */\n\tsubagentsByTask: Record<string, SubagentPayload> = $derived(\n\t\tObject.fromEntries(\n\t\t\tObject.values(this.subagents)\n\t\t\t\t.filter((sub) => sub.toolUseId)\n\t\t\t\t.map((sub) => [sub.toolUseId as string, sub])\n\t\t)\n\t);\n\t/** Context window in use as of the last API response, null before one. */\n\tcontext = $state<ContextUsage | null>(null);\n\t/** The model on the latest assistant line, as the API names it. */\n\tmodel = $state<string | null>(null);\n\t/** False until the session's JSONL file has been found and read. */\n\tavailable = $state(false);\n\t/** Entries appended since attach (page diffs it for the \"new below\" pill). */\n\tappended = $state(0);\n\t/**\n\t * Position of `entries[0]` in the session's whole transcript: the server\n\t * sends only the tail, so this is how many older entries exist. Zero once\n\t * the reader has pulled the whole thing back.\n\t */\n\tfirstIndex = $state(0);\n\t/** A history request is in flight (the button waits rather than stacking). */\n\tloadingEarlier = $state(false);\n\t/** Resolved when the slice a `loadEarlier()` caller asked for has landed. */\n\tprivate pendingEarlier: (() => void) | null = null;\n\n\tprivate indexById = new Map<string, number>();\n\tprivate sessionId: string | null = null;\n\t/** Set when this store reads one of the session's subagents instead of the session. */\n\tprivate agentId: string | null = null;\n\t/** The path the session's machine is reached through: '' here, `/fleet/<id>` elsewhere. */\n\tprivate base = '';\n\t/** What the socket reaches (`routeMachine().address`): a new base to the same address keeps it. */\n\tprivate address = '';\n\n\tprotected getWsUrl(): string {\n\t\tconst protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';\n\t\tconst session = encodeURIComponent(this.sessionId!);\n\t\tconst agent = this.agentId ? `/agents/${encodeURIComponent(this.agentId)}` : '';\n\t\treturn `${protocol}//${window.location.host}${this.base}/api/sessions/${session}${agent}/transcript/stream`;\n\t}\n\n\tprotected getLogPrefix(): string {\n\t\treturn '[transcript]';\n\t}\n\n\tprotected shouldReconnect(): boolean {\n\t\treturn this.sessionId !== null;\n\t}\n\n\tprotected handleMessage(event: MessageEvent): void {\n\t\tlet data: TranscriptMsg;\n\t\ttry {\n\t\t\tdata = JSON.parse(event.data);\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\t\tswitch (data.type) {\n\t\t\tcase 'snapshot':\n\t\t\t\tthis.applySnapshot(data);\n\t\t\t\tbreak;\n\t\t\tcase 'history':\n\t\t\t\tthis.applyHistory(data);\n\t\t\t\tbreak;\n\t\t\tcase 'entries':\n\t\t\t\tthis.applyEntries(data);\n\t\t\t\tbreak;\n\t\t\tcase 'subagents':\n\t\t\t\tthis.applySubagents(data.subagents);\n\t\t\t\tbreak;\n\t\t\tcase 'context':\n\t\t\t\tthis.context = data.context;\n\t\t\t\tbreak;\n\t\t\tcase 'model':\n\t\t\t\tthis.model = data.model;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tprivate applySnapshot(msg: SnapshotMsg): void {\n\t\tthis.entries = msg.entries;\n\t\tthis.available = msg.available;\n\t\tthis.firstIndex = msg.firstIndex;\n\t\tthis.settleEarlier();\n\t\tthis.context = msg.context ?? null;\n\t\tthis.model = msg.model ?? null;\n\t\tthis.reindex();\n\t\tthis.subagents = {};\n\t\tthis.applySubagents(msg.subagents ?? []);\n\t}\n\n\t/** An older slice, prepended in front of what is already held. */\n\tprivate applyHistory(msg: HistoryMsg): void {\n\t\t// A snapshot may have overtaken the request; anything already held wins.\n\t\tconst older = msg.entries.filter((entry) => !this.indexById.has(entry.id));\n\t\tif (older.length > 0) {\n\t\t\tthis.entries = [...older, ...this.entries];\n\t\t\tthis.firstIndex = msg.firstIndex;\n\t\t\tthis.reindex();\n\t\t}\n\t\tthis.settleEarlier();\n\t}\n\n\t/** Ends the wait a `loadEarlier()` caller is in, whatever answered it. */\n\tprivate settleEarlier(): void {\n\t\tthis.loadingEarlier = false;\n\t\tthis.pendingEarlier?.();\n\t\tthis.pendingEarlier = null;\n\t}\n\n\tprivate reindex(): void {\n\t\tthis.indexById = new Map(this.entries.map((entry, i) => [entry.id, i]));\n\t}\n\n\t/**\n\t * Ask the server for the slice before the oldest entry held. Resolves once\n\t * those entries are in `entries`, so a caller holding the reader's scroll\n\t * position knows when to restore it. Resolves immediately when there is\n\t * nothing older or a request is already out.\n\t */\n\tloadEarlier(): Promise<void> {\n\t\tif (this.firstIndex <= 0 || this.loadingEarlier) return Promise.resolve();\n\t\tconst sent = this.send(\n\t\t\tJSON.stringify({\n\t\t\t\ttype: 'history_request',\n\t\t\t\tbefore: this.firstIndex,\n\t\t\t\tcount: HISTORY_PAGE\n\t\t\t})\n\t\t);\n\t\tif (!sent) return Promise.resolve();\n\t\tthis.loadingEarlier = true;\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.pendingEarlier = resolve;\n\t\t});\n\t}\n\n\t/**\n\t * Ask for everything an agent ran and reported. Cards arrive lean — the\n\t * tail of the activity, no report — and this is what opening one sends.\n\t */\n\tloadSubagent(agentId: string): void {\n\t\tconst held = this.subagents[agentId];\n\t\tif (!held || held.full) return;\n\t\tthis.send(JSON.stringify({ type: 'subagent_request', agentId }));\n\t}\n\n\t/**\n\t * Subagents arrive lean unless their card was opened. A lean update for an\n\t * agent already held in full keeps what is held and appends the new tail,\n\t * so an open card does not lose its list to the next live update.\n\t */\n\tprivate applySubagents(subagents: SubagentPayload[]): void {\n\t\tfor (const sub of subagents) {\n\t\t\tconst held = this.subagents[sub.agentId];\n\t\t\tif (held?.full && !sub.full) {\n\t\t\t\tconst seen = new Set(sub.activity.map((a) => a.id));\n\t\t\t\tconst kept = held.activity.filter((a) => !seen.has(a.id));\n\t\t\t\tthis.subagents[sub.agentId] = {\n\t\t\t\t\t...sub,\n\t\t\t\t\tactivity: [...kept, ...sub.activity],\n\t\t\t\t\ttrimmed: Math.max(0, sub.trimmed - kept.length),\n\t\t\t\t\treport: sub.report ?? held.report,\n\t\t\t\t\tfull: true\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.subagents[sub.agentId] = sub;\n\t\t}\n\t}\n\n\tprivate applyEntries(msg: EntriesMsg): void {\n\t\tthis.available = true;\n\t\tfor (const [i, entry] of msg.entries.entries()) {\n\t\t\tconst index = this.indexById.get(entry.id);\n\t\t\tif (index !== undefined) {\n\t\t\t\tthis.entries[index] = entry;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// An update to an entry older than the tail this client holds: it\n\t\t\t// belongs in the gap above, and arrives with the history slice.\n\t\t\tif (msg.indices[i] < this.firstIndex) continue;\n\t\t\tthis.indexById.set(entry.id, this.entries.length);\n\t\t\tthis.entries.push(entry);\n\t\t\tthis.appended++;\n\t\t}\n\t}\n\n\t/**\n\t * Single entry point: pass a claude-mux session id to view its transcript,\n\t * or null to detach. Mirrors terminalStore.setTarget's lifecycle contract.\n\t * With `agentId`, the store holds that subagent's transcript instead, and\n\t * `subagents` holds that one agent. `base` names the session's machine\n\t * (`machineBase()`), and `address` what it reaches: when only the base\n\t * changes (the machine's id changed), the next connect takes the new base\n\t * and the open socket and its entries stay.\n\t */\n\tsetSession(sessionId: string | null | undefined, agentId: string | null = null, base = '', address = base): void {\n\t\tif (!browser) return;\n\t\tconst next = sessionId ?? null;\n\t\tconst nextAgent = next ? agentId : null;\n\n\t\tif (this.sessionId === next && this.agentId === nextAgent && this.address === address) {\n\t\t\tthis.base = base;\n\t\t\tif (next === null) return;\n\t\t\tif (this.ws) return;\n\t\t\tthis.doConnect();\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.ws) {\n\t\t\tthis.sessionId = null; // suppress reconnect in doDisconnect\n\t\t\tthis.doDisconnect();\n\t\t}\n\t\tthis.entries = [];\n\t\tthis.subagents = {};\n\t\tthis.context = null;\n\t\tthis.available = false;\n\t\tthis.appended = 0;\n\t\tthis.firstIndex = 0;\n\t\tthis.settleEarlier();\n\t\tthis.resetReceived();\n\t\tthis.indexById = new Map();\n\t\tthis.sessionId = next;\n\t\tthis.agentId = nextAgent;\n\t\tthis.base = base;\n\t\tthis.address = address;\n\n\t\tif (next) this.doConnect();\n\t}\n}\n\nexport const transcriptStore = new TranscriptStore();\n","<script lang=\"ts\" module>\n\tlet made = 0;\n</script>\n\n<script lang=\"ts\">\n\timport { voiceStore } from '$lib/stores/voice.svelte';\n\n\tinterface Props {\n\t\t/** The session the words are for; it says where spoken slash commands are looked up. */\n\t\ttarget: string;\n\t\t/** Given what was said, to put in the field this button sits beside. */\n\t\tonText: (text: string) => void;\n\t\tdisabled?: boolean;\n\t}\n\n\tlet { target, onText, disabled = false }: Props = $props();\n\n\t/**\n\t * A microphone for one field. The composer's records straight into the\n\t * session; this one only fills the field beside it, to be read, edited and\n\t * sent with the rest of the form. There is one microphone on the page, so\n\t * while another field or the composer has it this button waits.\n\t */\n\tconst field = `field-${++made}`;\n\tconst mine = $derived(voiceStore.isOwnedBy(target, field));\n\tconst status = $derived(mine ? voiceStore.status : 'idle');\n\tconst elsewhere = $derived(voiceStore.isActive && !mine);\n\tconst label = $derived(\n\t\tstatus === 'recording'\n\t\t\t? 'Stop and write what you said here'\n\t\t\t: status === 'transcribing'\n\t\t\t\t? 'Transcribing. Tap to cancel'\n\t\t\t\t: elsewhere\n\t\t\t\t\t? 'The microphone is in use'\n\t\t\t\t\t: 'Answer by voice'\n\t);\n\n\tasync function toggle() {\n\t\tif (status === 'transcribing') return voiceStore.cancelTranscribing();\n\t\tif (status === 'recording') {\n\t\t\tconst said = await voiceStore.stop();\n\t\t\tif (said) onText(said.text);\n\t\t\treturn;\n\t\t}\n\t\tawait voiceStore.startRecording(target, field);\n\t}\n</script>\n\n{#if voiceStore.supported}\n\t<button\n\t\ttype=\"button\"\n\t\tclass=\"dictate {status}\"\n\t\tdisabled={disabled || elsewhere}\n\t\taria-label={label}\n\t\ttitle={label}\n\t\taria-pressed={status === 'recording'}\n\t\tonclick={() => void toggle()}\n\t>\n\t\t{#if status === 'transcribing'}\n\t\t\t<iconify-icon icon=\"mdi:loading\" class=\"spin\"></iconify-icon>\n\t\t{:else if status === 'recording'}\n\t\t\t<iconify-icon icon=\"mdi:stop\"></iconify-icon>\n\t\t{:else}\n\t\t\t<iconify-icon icon=\"mdi:microphone\"></iconify-icon>\n\t\t{/if}\n\t</button>\n{/if}\n\n<style>\n\t.dictate {\n\t\tflex: none;\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 34px;\n\t\theight: 34px;\n\t\tborder: 1px solid #292524;\n\t\tborder-radius: 8px;\n\t\tbackground: transparent;\n\t\tcolor: #a8a29e;\n\t\tfont-size: 18px;\n\t\tcursor: pointer;\n\t\ttouch-action: manipulation;\n\t}\n\t.dictate:hover:not(:disabled) {\n\t\tcolor: #e7e5e4;\n\t\tborder-color: #44403c;\n\t}\n\t.dictate:disabled {\n\t\topacity: 0.4;\n\t\tcursor: default;\n\t}\n\t.dictate.recording {\n\t\tborder-color: #dc2626;\n\t\tbackground: rgba(220, 38, 38, 0.18);\n\t\tcolor: #fca5a5;\n\t}\n\t@media (pointer: coarse) {\n\t\t.dictate {\n\t\t\twidth: 40px;\n\t\t\theight: 40px;\n\t\t}\n\t}\n\t.dictate:focus-visible {\n\t\toutline: 2px solid #78716c;\n\t\toutline-offset: 1px;\n\t}\n</style>\n","/**\n * Quoting transcript text into the composer: what counts as quotable, how a\n * selection is read, and the markdown it becomes in the draft.\n */\n\n/**\n * The parts of the transcript that hold words someone wrote or a tool\n * printed. Everything else under it (a tool row's summary, a timestamp, a\n * badge, a button) is chrome, and a selection of nothing else quotes nothing.\n */\nconst QUOTABLE = '.user-text, .markdown, .thinking-text, pre';\n/** Fields and buttons keep their own selection and keys. */\nconst NOT_QUOTABLE = 'button, textarea, input';\n\n/** Without the blank lines around it; the first line keeps its indentation, which a plain trim would take from code. */\nfunction trimBlankLines(text: string): string {\n\treturn text.replace(/^(?:[^\\S\\n]*\\n)+/, '').trimEnd();\n}\n\n/** The selection as a markdown blockquote: `> ` on each line, runs of blank lines folded to one. */\nexport function quoteBlock(text: string): string {\n\tconst lines = trimBlankLines(\n\t\ttext.replace(/\\r\\n?/g, '\\n').replace(/\\n[^\\S\\n]*(?:\\n[^\\S\\n]*)+/g, '\\n\\n')\n\t);\n\tif (!lines.trim()) return '';\n\treturn lines\n\t\t.split('\\n')\n\t\t.map((line) => (line.trim() ? `> ${line.trimEnd()}` : '>'))\n\t\t.join('\\n');\n}\n\n/**\n * The draft with the selection quoted at its end and a blank line after, so\n * the caret, put at the end, sits where the reply goes. What was already\n * typed stays; a selection of nothing leaves the draft as it was.\n */\nexport function appendQuote(draft: string, text: string): string {\n\tconst quote = quoteBlock(text);\n\tif (!quote) return draft;\n\tconst before = draft.trimEnd();\n\treturn `${before ? `${before}\\n\\n` : ''}${quote}\\n\\n`;\n}\n\nfunction outermost(el: Element, root: Element): boolean {\n\tconst outer = el.parentElement?.closest(QUOTABLE);\n\treturn !outer || !root.contains(outer);\n}\n\n/**\n * The quotable stretches of a selection inside `root`, one range per message\n * part it touches, in document order. Empty when the selection is collapsed,\n * sits outside `root`, or covers nothing but chrome.\n */\nexport function quotableRanges(root: Element, selection: Selection | null): Range[] {\n\tif (!selection || selection.isCollapsed || selection.rangeCount === 0) return [];\n\tconst range = selection.getRangeAt(0);\n\tconst common = range.commonAncestorContainer;\n\tconst scope = common instanceof Element ? common : common.parentElement;\n\tif (!scope || !(root.contains(scope) || scope.contains(root))) return [];\n\n\t// A selection inside one message part is the usual case, and needs no search.\n\tconst within = root.contains(scope) ? scope.closest(QUOTABLE) : null;\n\tconst parts =\n\t\twithin && root.contains(within)\n\t\t\t? [within]\n\t\t\t: [...(scope.contains(root) ? root : scope).querySelectorAll(QUOTABLE)].filter(\n\t\t\t\t\t(el) => outermost(el, root) && range.intersectsNode(el)\n\t\t\t\t);\n\n\tconst ranges: Range[] = [];\n\tfor (const part of parts) {\n\t\tif (part.closest(NOT_QUOTABLE)) continue;\n\t\tconst clipped = range.cloneRange();\n\t\tconst whole = document.createRange();\n\t\twhole.selectNodeContents(part);\n\t\tif (clipped.compareBoundaryPoints(Range.START_TO_START, whole) < 0) {\n\t\t\tclipped.setStart(whole.startContainer, whole.startOffset);\n\t\t}\n\t\tif (clipped.compareBoundaryPoints(Range.END_TO_END, whole) > 0) {\n\t\t\tclipped.setEnd(whole.endContainer, whole.endOffset);\n\t\t}\n\t\t// A closed tool row's output is in the page but not on it: no boxes, nothing the reader selected.\n\t\tif (clipped.toString().trim() && clipped.getClientRects().length > 0) ranges.push(clipped);\n\t}\n\treturn ranges;\n}\n\n/** On the transcript while a quote is read: app.css draws a GitHub chip as the plain `#n` it stands for. */\nconst QUOTING = 'quoting';\n\n/**\n * The text of those ranges as the reader sees it, then the selection cleared.\n * Only a selection's own `toString()` keeps the line breaks between blocks\n * (a range's joins every text node end to end), so each range is selected in\n * turn to be read; a part is parted from the next by a blank line.\n */\nexport function takeQuote(root: Element, ranges: Range[]): string {\n\tconst selection = window.getSelection();\n\tif (!selection) return '';\n\tconst parts: string[] = [];\n\troot.classList.add(QUOTING);\n\ttry {\n\t\tfor (const range of ranges) {\n\t\t\tselection.removeAllRanges();\n\t\t\tselection.addRange(range);\n\t\t\tparts.push(trimBlankLines(selection.toString()));\n\t\t}\n\t} finally {\n\t\tselection.removeAllRanges();\n\t\troot.classList.remove(QUOTING);\n\t}\n\treturn parts.filter((part) => part.trim()).join('\\n\\n');\n}\n","<script lang=\"ts\">\n\t/**\n\t * \"Add to prompt\" for a selection in the transcript: a button that floats\n\t * by the selected text, and Ctrl/Cmd+L. Both hand the text to `onQuote`.\n\t * With nothing quotable selected neither does anything, so Ctrl+L keeps\n\t * the browser's meaning.\n\t */\n\timport { MediaQuery } from 'svelte/reactivity';\n\timport { Button } from '$lib/components/ui/button';\n\timport { IS_MAC } from '$lib/constants';\n\timport { quotableRanges, takeQuote } from '$lib/quote';\n\n\tlet {\n\t\troot,\n\t\tonQuote\n\t}: {\n\t\t/** The transcript; only a selection inside it counts. */\n\t\troot: HTMLElement | null;\n\t\tonQuote: (text: string) => void;\n\t} = $props();\n\n\t/** Room for the button above a selection, and its gap from the text. */\n\tconst ABOVE = 40;\n\tconst GAP = 8;\n\t/** On touch the button goes below, clear of the selection handles; the system menu takes the top. */\n\tconst HANDLES = 28;\n\t/** A selection still being dragged out by its handles moves many times a second. */\n\tconst SETTLE_MS = 200;\n\t/** How long after a finger leaves the button its click may still arrive. */\n\tconst PRESS_MS = 400;\n\n\tconst touch = new MediaQuery('(pointer: coarse)');\n\tconst coarse = $derived(touch.current);\n\n\t// Kept as ranges, not text: a tap on the button can end the selection on a\n\t// phone before the click arrives, and the ranges outlive it.\n\tlet ranges: Range[] = [];\n\t/** Where the button goes: the selection's middle, and the top of the button. */\n\tlet place = $state<{ left: number; top: number } | null>(null);\n\tlet width = $state(0);\n\t/** Its left edge, kept on the screen whatever the selection's middle is. */\n\tconst left = $derived(\n\t\tplace ? Math.max(GAP, Math.min(place.left - width / 2, window.innerWidth - width - GAP)) : 0\n\t);\n\tlet dragging = false;\n\t/** A finger is on the button: the selection it ends by landing there must not take the button away. */\n\tlet pressing = false;\n\t/** The shortcut's key is still down from a quote it made. */\n\tlet held = false;\n\tlet settle: ReturnType<typeof setTimeout> | null = null;\n\tlet frame = 0;\n\n\tfunction position() {\n\t\tif (ranges.length === 0) {\n\t\t\tplace = null;\n\t\t\treturn;\n\t\t}\n\t\tconst first = ranges[0].getBoundingClientRect();\n\t\tconst last = ranges[ranges.length - 1].getBoundingClientRect();\n\t\tconst top = first.top;\n\t\tconst bottom = last.bottom;\n\t\tif (bottom < 0 || top > window.innerHeight || (first.width === 0 && first.height === 0)) {\n\t\t\tplace = null;\n\t\t\treturn;\n\t\t}\n\t\tconst left = Math.min(first.left, last.left);\n\t\tconst right = Math.max(first.right, last.right);\n\t\tconst below = coarse || top < ABOVE + GAP;\n\t\tplace = {\n\t\t\tleft: (left + right) / 2,\n\t\t\ttop: below\n\t\t\t\t? Math.min(bottom + (coarse ? HANDLES : GAP), window.innerHeight - ABOVE)\n\t\t\t\t: top - ABOVE\n\t\t};\n\t}\n\n\tfunction selected(): Range[] {\n\t\treturn root ? quotableRanges(root, window.getSelection()) : [];\n\t}\n\n\tfunction read() {\n\t\tranges = selected();\n\t\tposition();\n\t}\n\n\tfunction readAfter(ms: number) {\n\t\tif (settle) clearTimeout(settle);\n\t\tsettle = setTimeout(read, ms);\n\t}\n\n\tfunction quote(from: Range[]) {\n\t\tif (!root || from.length === 0) return false;\n\t\tconst text = takeQuote(root, from);\n\t\tpressing = false;\n\t\tranges = [];\n\t\tplace = null;\n\t\tif (text) onQuote(text);\n\t\treturn text !== '';\n\t}\n\n\t$effect(() => {\n\t\tif (!root) return;\n\t\tconst onSelection = () => {\n\t\t\tif (settle) clearTimeout(settle);\n\t\t\t// Mid-drag the button would sit under the pointer; it waits for the release.\n\t\t\tif (dragging || pressing) return;\n\t\t\t// Handles being dragged would have the button under the finger; a\n\t\t\t// selection grown from the keyboard just moves it along.\n\t\t\tif (coarse) place = null;\n\t\t\treadAfter(coarse ? SETTLE_MS : 0);\n\t\t};\n\t\tconst onDown = (e: PointerEvent) => {\n\t\t\tpressing = e.target instanceof Element && e.target.closest('.quote-selection') !== null;\n\t\t\tif (pressing) return;\n\t\t\tdragging = e.pointerType === 'mouse';\n\t\t\tif (dragging) place = null;\n\t\t};\n\t\tconst onUp = () => {\n\t\t\tif (pressing) {\n\t\t\t\t// The click is still to come; a press that slid off the button never sends one.\n\t\t\t\tif (settle) clearTimeout(settle);\n\t\t\t\tsettle = setTimeout(() => {\n\t\t\t\t\tpressing = false;\n\t\t\t\t\tread();\n\t\t\t\t}, PRESS_MS);\n\t\t\t}\n\t\t\tif (!dragging) return;\n\t\t\tdragging = false;\n\t\t\t// The selection a click collapses is still whole at this point.\n\t\t\treadAfter(0);\n\t\t};\n\t\tconst onScroll = () => {\n\t\t\tif (ranges.length === 0) return;\n\t\t\tcancelAnimationFrame(frame);\n\t\t\tframe = requestAnimationFrame(position);\n\t\t};\n\t\tconst onKey = (e: KeyboardEvent) => {\n\t\t\t// By position, as the side panel's keys are: `key` is another letter on a non-Latin layout.\n\t\t\tif (e.code !== 'KeyL' || !(e.ctrlKey || e.metaKey) || e.altKey || e.shiftKey) return;\n\t\t\tif (e.defaultPrevented) return;\n\t\t\t// A key held down repeats after the quote is taken, and would then reach the address bar.\n\t\t\tif (e.repeat) {\n\t\t\t\tif (held) e.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Typed into something else (a field, the Browser pane), the key is that thing's.\n\t\t\tconst focus = document.activeElement;\n\t\t\tif (focus && focus !== document.body && !root.contains(focus)) return;\n\t\t\theld = quote(selected());\n\t\t\tif (held) e.preventDefault();\n\t\t};\n\t\tconst onKeyUp = (e: KeyboardEvent) => {\n\t\t\tif (e.code === 'KeyL') held = false;\n\t\t};\n\n\t\tdocument.addEventListener('selectionchange', onSelection);\n\t\tdocument.addEventListener('pointerdown', onDown, true);\n\t\tdocument.addEventListener('pointerup', onUp, true);\n\t\tdocument.addEventListener('pointercancel', onUp, true);\n\t\tdocument.addEventListener('keydown', onKey);\n\t\tdocument.addEventListener('keyup', onKeyUp);\n\t\twindow.addEventListener('scroll', onScroll, true);\n\t\twindow.addEventListener('resize', onScroll);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('selectionchange', onSelection);\n\t\t\tdocument.removeEventListener('pointerdown', onDown, true);\n\t\t\tdocument.removeEventListener('pointerup', onUp, true);\n\t\t\tdocument.removeEventListener('pointercancel', onUp, true);\n\t\t\tdocument.removeEventListener('keydown', onKey);\n\t\t\tdocument.removeEventListener('keyup', onKeyUp);\n\t\t\twindow.removeEventListener('scroll', onScroll, true);\n\t\t\twindow.removeEventListener('resize', onScroll);\n\t\t\tif (settle) clearTimeout(settle);\n\t\t\tcancelAnimationFrame(frame);\n\t\t};\n\t});\n</script>\n\n{#if place}\n\t<div class=\"quote-selection\" bind:offsetWidth={width} style:left=\"{left}px\" style:top=\"{place.top}px\">\n\t\t<!-- The press must not take the focus, or the selection it acts on is gone. -->\n\t\t<Button\n\t\t\tvariant=\"secondary\"\n\t\t\tsize=\"sm\"\n\t\t\tclass=\"quote-button\"\n\t\t\tonpointerdown={(e: PointerEvent) => e.preventDefault()}\n\t\t\tonmousedown={(e: MouseEvent) => e.preventDefault()}\n\t\t\tonclick={() => quote(ranges)}\n\t\t>\n\t\t\t<iconify-icon icon=\"mdi:format-quote-close\" aria-hidden=\"true\"></iconify-icon>\n\t\t\tAdd to prompt\n\t\t\t{#if !coarse}<kbd>{IS_MAC ? '⌘L' : 'Ctrl L'}</kbd>{/if}\n\t\t</Button>\n\t</div>\n{/if}\n\n<style>\n\t.quote-selection {\n\t\tposition: fixed;\n\t\tz-index: var(--z-floating);\n\t\t/* The native selection menu and handles stay the system's to draw. */\n\t\tuser-select: none;\n\t\t-webkit-user-select: none;\n\t\t-webkit-touch-callout: none;\n\t\tanimation: quote-in 120ms ease-out;\n\t}\n\n\t.quote-selection :global(.quote-button) {\n\t\tborder: 1px solid #44403c;\n\t\tbox-shadow: 0 6px 20px rgb(0 0 0 / 0.45);\n\t\tfont-size: 13px;\n\t}\n\n\t.quote-selection :global(iconify-icon) {\n\t\tfont-size: 16px;\n\t\tcolor: #a8a29e;\n\t}\n\n\tkbd {\n\t\tmargin-left: 2px;\n\t\tpadding: 1px 5px;\n\t\tborder: 1px solid #44403c;\n\t\tborder-radius: 4px;\n\t\tcolor: #a8a29e;\n\t\tfont:\n\t\t\t11px ui-monospace,\n\t\t\tSFMono-Regular,\n\t\t\tMenlo,\n\t\t\tmonospace;\n\t}\n\n\t@keyframes quote-in {\n\t\tfrom {\n\t\t\topacity: 0;\n\t\t}\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.quote-selection {\n\t\t\tanimation: none;\n\t\t}\n\t}\n</style>\n","import { tick } from 'svelte';\n\n/** Where a field's caret stands: equal ends for a caret, a span for a selection. */\nexport interface Spot {\n\tstart: number;\n\tend: number;\n}\n\n/** A field's text with what was said in it, and where the caret goes after the words. */\nexport interface Inserted {\n\ttext: string;\n\tcaret: number;\n}\n\ntype Field = HTMLInputElement | HTMLTextAreaElement;\n\n/**\n * Text that closes up on what comes before it, so words set in front need no\n * space. Straight quotes are left out: they open a quotation as often as close one.\n */\nconst CLOSES_UP = /^[\\s.,;:!?)\\]}…’”]/;\n\n/**\n * `text` with `said` put in at `spot`, replacing whatever it selects. Without\n * a spot, or with nothing but whitespace after the caret, the words join the\n * end the way they always have: trailing whitespace folds into one space.\n * Elsewhere a space goes in on each side the neighbouring text does not\n * already provide.\n */\nexport function insertSaid(text: string, said: string, spot: Spot | null): Inserted {\n\tconst start = Math.min(spot?.start ?? text.length, text.length);\n\tconst end = Math.min(spot?.end ?? text.length, text.length);\n\tconst before = text.slice(0, start);\n\tconst after = text.slice(end);\n\tif (!after.trim()) {\n\t\tconst joined = before.trim() ? `${before.trimEnd()} ${said}` : said;\n\t\treturn { text: joined, caret: joined.length };\n\t}\n\tconst lead = before && !/\\s$/.test(before) ? ' ' : '';\n\tconst tail = CLOSES_UP.test(after) ? '' : ' ';\n\tconst caret = before.length + lead.length + said.length;\n\treturn { text: `${before}${lead}${said}${tail}${after}`, caret };\n}\n\n/**\n * Where each field's caret stood when it last lost focus, beside the text it\n * held then. Tapping a microphone takes focus from the field, and a phone may\n * move a blurred field's selection, so the spot is read on the way out.\n */\nconst kept = new WeakMap<Field, { value: string; spot: Spot }>();\n\nfunction spotOf(el: Field): Spot | null {\n\tif (el.selectionStart == null) return null;\n\treturn { start: el.selectionStart, end: el.selectionEnd ?? el.selectionStart };\n}\n\n/**\n * Attachment for a field dictation writes into (`{@attach keepsCaret}`): it\n * keeps the caret the field leaves with, which `caretOf` reads once the\n * microphone has taken focus.\n */\nexport function keepsCaret(el: Field): () => void {\n\tconst keep = () => {\n\t\tconst spot = spotOf(el);\n\t\tif (spot) kept.set(el, { value: el.value, spot });\n\t};\n\tel.addEventListener('focusout', keep);\n\treturn () => el.removeEventListener('focusout', keep);\n}\n\n/**\n * Where dictation into `el` should go: its live caret while it has focus, the\n * caret it left with when its text has not changed since, and null when nobody\n * placed one (never focused, or the text was replaced behind its back), which\n * means the end.\n */\nexport function caretOf(el: Field | null | undefined): Spot | null {\n\tif (!el) return null;\n\tconst live = document.activeElement === el ? spotOf(el) : null;\n\tif (live) return live;\n\tconst left = kept.get(el);\n\treturn left && left.value === el.value ? left.spot : null;\n}\n\n/** Focus `el` with the caret at `caret`, so the next take carries on from there. */\nexport function putCaret(el: Field | null | undefined, caret: number): void {\n\tif (!el) return;\n\tel.focus();\n\tel.setSelectionRange(caret, caret);\n}\n\n/**\n * Put what was said into `field` where its caret stands, through `write`, and\n * leave the caret after the words; with no caret placed they join the end.\n */\nexport async function sayInto(\n\tfield: Field | null | undefined,\n\tcurrent: string,\n\tsaid: string,\n\twrite: (text: string) => void\n): Promise<void> {\n\tconst spot = caretOf(field);\n\tconst next = insertSaid(current, said, spot);\n\twrite(next.text);\n\tif (!spot) return;\n\tawait tick();\n\tputCaret(field, next.caret);\n}\n","/**\n * Translation of an AskUserQuestion answer into Claude Code TUI keystrokes.\n *\n * The dialog puts the cursor on the first option; Down walks the list, Space\n * toggles a checkbox in multi-select, and Enter submits the question. Keeping\n * this next to the other pane-driving code (rather than in the view) means the\n * protocol has one home and can be unit-tested when the TUI changes.\n */\n\n/**\n * Keys for answering one question, given the option indices to pick.\n * Returns null when the selection can't be expressed (no picks, or more than\n * one pick on a single-select question).\n */\nexport function keysForAnswer(\n picks: number[],\n options: { multiSelect: boolean },\n): string | null {\n const sorted = [...new Set(picks)].filter((i) => Number.isInteger(i) && i >= 0).sort((a, b) => a - b);\n if (sorted.length === 0) return null;\n if (!options.multiSelect) {\n if (sorted.length > 1) return null;\n // Same arrow walk as a pane dialog, from a cursor that always starts at 0.\n return keysForOptionPick(0, sorted[0], sorted[0] + 1);\n }\n\n const keys: string[] = [];\n let cursor = 0;\n for (const pick of sorted) {\n for (let step = 0; step < pick - cursor; step++) keys.push(\"Down\");\n keys.push(\"Space\");\n cursor = pick;\n }\n keys.push(\"Enter\");\n return keys.join(\" \");\n}\n\n/**\n * Keys that move Claude Code's own highlight from the row it is on to the row\n * the user tapped, then submit.\n *\n * Walks with arrows from where the pane says the highlight already is, rather\n * than typing the option's number — a dialog that does not take digits still\n * answers correctly, and a dialog whose highlight has moved since the last\n * capture lands on the row the user could see.\n *\n * @param from Index of the highlighted row, or -1 when none is marked.\n * @param to Index of the row to pick.\n * @returns The key sequence, or null when `to` is not a real row.\n */\nexport function keysForOptionPick(from: number, to: number, count: number): string | null {\n const move = keysForOptionMove(from, to, count);\n if (move === null) return null;\n return move ? `${move} Enter` : \"Enter\";\n}\n\n/**\n * Keys that move the highlight to a row without picking it.\n *\n * Some dialogs hang a setting off the highlighted row — the model picker's\n * effort level applies to whichever model the highlight is on — and a\n * question's notes field opens for the highlighted option, so moving the\n * highlight is an action of its own, not just the first half of a pick.\n *\n * @returns The arrow keys, \"\" when the highlight is already there, or null\n * when `to` is not a real row.\n */\nexport function keysForOptionMove(from: number, to: number, count: number): string | null {\n if (!Number.isInteger(to) || to < 0 || to >= count) return null;\n const start = from < 0 || from >= count ? 0 : from;\n const steps = to - start;\n return Array(Math.abs(steps)).fill(steps > 0 ? \"Down\" : \"Up\").join(\" \");\n}\n","<script lang=\"ts\">\n\timport DictateButton from './DictateButton.svelte';\n\timport { keepsCaret, sayInto } from '$lib/dictation';\n\timport type { TranscriptEntry } from '../../../../src/transcript/parser';\n\timport type { PaneChoice } from '$shared/types/ws-messages.js';\n\timport {\n\t\tkeysForAnswer,\n\t\tkeysForOptionMove,\n\t\tkeysForOptionPick\n\t} from '$shared/tmux/answer-keys.js';\n\timport { longPress } from '$lib/actions/longPress';\n\timport { Button } from '$lib/components/ui/button';\n\timport { Input } from '$lib/components/ui/input';\n\n\ttype AskEntry = Extract<TranscriptEntry, { kind: 'ask' }>;\n\ttype Row = PaneChoice['options'][number];\n\n\tlet {\n\t\tchoice,\n\t\task = null,\n\t\tpermission = false,\n\t\tclosed = false,\n\t\tonKeys,\n\t\tdictateTarget = null,\n\t\tonText,\n\t\tonSubmitted\n\t}: {\n\t\t/** The dialog as the pane draws it right now; null when the poll has not read one. */\n\t\tchoice: PaneChoice | null;\n\t\t/** The AskUserQuestion call behind the dialog, when it is one: every question up front. */\n\t\task?: AskEntry | null;\n\t\t/** A permission prompt rather than a question. */\n\t\tpermission?: boolean;\n\t\t/** The dialog has been answered and is gone from the pane. */\n\t\tclosed?: boolean;\n\t\t/** Sends a tmux key sequence (space-separated) to the pane. */\n\t\tonKeys: (keys: string) => Promise<void> | void;\n\t\t/** The session the answer field's microphone records for; null where voice is off. */\n\t\tdictateTarget?: string | null;\n\t\t/** Types text into the pane as-is, with no Enter after it. */\n\t\tonText: (text: string) => Promise<void> | void;\n\t\t/** The card sent the keys that close the dialog without the pane to confirm it. */\n\t\tonSubmitted?: () => void;\n\t} = $props();\n\n\t// ── where the dialog stands ──────────────────────────────────────────\n\t// The pane is the truth about which question is open and which row is\n\t// highlighted. The AskUserQuestion entry knows every question in advance,\n\t// so the card can draw them all and say which ones are already answered.\n\n\tconst norm = (s: string | null | undefined) => (s ?? '').replace(/\\s+/g, ' ').trim().toLowerCase();\n\n\t/** The pane is on the Submit tab a multi-question or multi-select dialog ends with. */\n\tconst reviewing = $derived(\n\t\tchoice != null && choice.options.some((o) => o.label === 'Submit answers')\n\t);\n\n\t/** Which of the entry's questions the pane has open; -1 when it cannot tell. */\n\tconst liveIndex = $derived.by(() => {\n\t\tif (!ask || !choice) return -1;\n\t\tif (reviewing) return ask.questions.length;\n\t\tconst asked = norm(choice.question);\n\t\tconst byText = ask.questions.findIndex(\n\t\t\t(q) => asked !== '' && (norm(q.question) === asked || asked.startsWith(norm(q.question)))\n\t\t);\n\t\tif (byText >= 0) return byText;\n\t\t// The question wrapped or was cut; the rows still name the same options.\n\t\tconst first = norm(choice.options[0]?.label);\n\t\treturn ask.questions.findIndex(\n\t\t\t(q) => q.options.length > 0 && first !== '' && norm(q.options[0].label).startsWith(first.slice(0, 16))\n\t\t);\n\t});\n\n\t/** Driving the entry's questions blind: no pane read, so the card keeps count. */\n\tlet sentCount = $state(0);\n\tlet picks = $state<Set<number>>(new Set());\n\tconst blind = $derived(ask != null && choice == null && !closed);\n\n\t/** The question the card answers now: an index into the entry, or its length on the Submit tab. */\n\tconst current = $derived(blind ? sentCount : liveIndex);\n\n\t/** A dialog with a Submit tab: several questions, or any multi-select. */\n\tconst hasSubmitTab = $derived(\n\t\task != null && (ask.questions.length > 1 || ask.questions.some((q) => q.multiSelect))\n\t);\n\tconst atSubmit = $derived(ask != null && current === ask.questions.length);\n\n\t/** The pane's tab strip, when it names one tab per question of the entry. */\n\tconst tabs = $derived(\n\t\task && choice?.tabs && choice.tabs.length === ask.questions.length ? choice.tabs : null\n\t);\n\n\t/** Whether a question holds an answer: the strip says so, else every question before the open one does. */\n\tfunction isAnswered(qi: number): boolean {\n\t\tif (closed) return true;\n\t\tif (tabs) return tabs[qi].answered;\n\t\treturn current >= 0 && qi < current;\n\t}\n\tconst answeredCount = $derived(ask ? ask.questions.filter((_, qi) => isAnswered(qi)).length : 0);\n\n\t/**\n\t * The card can walk the pane between questions: ←/→ move between a\n\t * dialog's tabs, answered or not, which is how an answer is changed.\n\t */\n\tconst canTravel = $derived(hasSubmitTab && choice != null && !closed && current >= 0);\n\n\t/** Answers given from this card, by question, so a question left behind still says what it holds. */\n\tlet answers = $state<Record<number, string>>({});\n\n\t/** What a question holds, as far as the card knows: its own record, or the row the pane marks. */\n\tfunction answerOf(qi: number): string | undefined {\n\t\treturn answers[qi] ?? (qi === current ? rows.find((r) => r.chosen)?.label : undefined);\n\t}\n\n\tfunction remember(qi: number, answer: string) {\n\t\tif (ask && qi >= 0 && qi < ask.questions.length) answers = { ...answers, [qi]: answer };\n\t}\n\n\t/** Open another question's tab (or Submit's, at the questions' count) in the pane. */\n\tasync function goToTab(to: number) {\n\t\tif (!canTravel || to === current) return;\n\t\tconst delta = to - current;\n\t\t// The arrows edit an open text field rather than leave it, so it is closed first.\n\t\tconst lead = noting ? ['Escape'] : typing ? ['Up'] : [];\n\t\tconst steps = Array<string>(Math.abs(delta)).fill(delta > 0 ? 'Right' : 'Left');\n\t\tawait onKeys([...lead, ...steps].join(' '));\n\t}\n\n\t// ── free text ────────────────────────────────────────────────────────\n\n\tlet draft = $state('');\n\tlet sending = $state(false);\n\tlet inputEl = $state<HTMLInputElement | null>(null);\n\n\t/** The pane's \"Type something\" row, which the card answers with its own field. */\n\tconst textRow = $derived(choice?.options.find((o) => o.text) ?? null);\n\t/** Rows the card draws as buttons: everything but the text row. */\n\tconst rows = $derived(choice?.options.filter((o) => !o.text) ?? []);\n\n\t/** The pane has a text field open: the free-text row, or the highlighted option's notes. */\n\tconst typing = $derived(choice?.typing === true);\n\tconst noting = $derived(choice?.noting === true);\n\n\t/** Notes go on the highlighted option; say which. */\n\tconst notingOn = $derived(\n\t\tnoting ? (choice?.options.find((o) => o.selected)?.label ?? choice?.question ?? 'this option') : null\n\t);\n\n\t$effect(() => {\n\t\t// The pane opened a text field (a key, or the terminal): the card's field is where to type.\n\t\tif ((typing || noting) && inputEl && document.activeElement?.tagName !== 'TEXTAREA') {\n\t\t\tinputEl.focus({ preventScroll: true });\n\t\t}\n\t});\n\n\tasync function sendFree() {\n\t\tconst text = draft.trim();\n\t\tif (!text || sending) return;\n\t\tsending = true;\n\t\ttry {\n\t\t\tif (blind) {\n\t\t\t\tconst q = ask!.questions[sentCount];\n\t\t\t\t// The text row sits under the options; the cursor starts on the first.\n\t\t\t\tconst n = q.options.length;\n\t\t\t\tawait onKeys(keysForOptionMove(0, n, n + 1) ?? '');\n\t\t\t\tawait onText(text);\n\t\t\t\tawait onKeys('Enter');\n\t\t\t\tremember(sentCount, text);\n\t\t\t\tadvanceBlind();\n\t\t\t} else if (choice) {\n\t\t\t\tconst opts = choice.options;\n\t\t\t\tconst multi = choice.multi === true;\n\t\t\t\tconst wasNoting = noting;\n\t\t\t\tif (!typing && !wasNoting) {\n\t\t\t\t\tconst to = opts.findIndex((o) => o.text);\n\t\t\t\t\tconst move = keysForOptionMove(\n\t\t\t\t\t\topts.findIndex((o) => o.selected),\n\t\t\t\t\t\tto,\n\t\t\t\t\t\topts.length\n\t\t\t\t\t);\n\t\t\t\t\tif (move === null) return;\n\t\t\t\t\t// Highlighting the row is what opens it for typing. Until the pane\n\t\t\t\t\t// says it is open, letters would drive the list (\"n\" opens notes)\n\t\t\t\t\t// and the Enter would pick whatever row is highlighted.\n\t\t\t\t\tif (move) await onKeys(move);\n\t\t\t\t\tif (!(await paneTyping())) return;\n\t\t\t\t}\n\t\t\t\tawait onText(text);\n\t\t\t\t// A note closes with Escape, which keeps it and brings the rows back;\n\t\t\t\t// a multi-select's row ticks with its text, and the answer goes in\n\t\t\t\t// from the Submit tab, so only a single-select takes Enter.\n\t\t\t\tif (wasNoting) await onKeys('Escape');\n\t\t\t\telse if (!multi) {\n\t\t\t\t\tawait onKeys('Enter');\n\t\t\t\t\tremember(current, text);\n\t\t\t\t}\n\t\t\t}\n\t\t\tdraft = '';\n\t\t} finally {\n\t\t\tsending = false;\n\t\t}\n\t}\n\n\t/** How long the free-text row may take to open before the card gives up and keeps the text. */\n\tconst OPEN_TIMEOUT_MS = 3000;\n\n\t/** Waits for the pane's next reads to show the text row open. */\n\tasync function paneTyping(): Promise<boolean> {\n\t\tconst until = Date.now() + OPEN_TIMEOUT_MS;\n\t\twhile (Date.now() < until) {\n\t\t\tif (choice?.typing === true) return true;\n\t\t\tawait new Promise((r) => setTimeout(r, 100));\n\t\t}\n\t\treturn false;\n\t}\n\n\tfunction freeKeydown(e: KeyboardEvent) {\n\t\t// The card's field never leaks keys to the page's own shortcuts.\n\t\te.stopPropagation();\n\t\tif (e.key === 'Enter' && !e.shiftKey && !e.isComposing) {\n\t\t\te.preventDefault();\n\t\t\tvoid sendFree();\n\t\t} else if (e.key === 'Escape' && (typing || noting)) {\n\t\t\te.preventDefault();\n\t\t\tvoid onKeys(noting ? 'Escape' : 'Up');\n\t\t}\n\t}\n\n\t// ── picking rows ─────────────────────────────────────────────────────\n\n\t/**\n\t * Move Claude Code's own highlight to the row you tapped, then submit.\n\t *\n\t * Walks with arrows from the row the pane says is selected rather than\n\t * typing the number, so it works whether or not the dialog takes digits.\n\t */\n\tasync function pick(row: Row) {\n\t\t// An open text field is the selected row, so the walk starts from it.\n\t\tconst keys = walkTo(row, keysForOptionPick);\n\t\tif (!keys) return;\n\t\tawait onKeys(keys);\n\t\tif (!choice?.multi && !reviewing) remember(current, row.label);\n\t}\n\n\t/**\n\t * Move the highlight without picking — a long press. Some dialogs hang a\n\t * setting off the highlighted row: the model picker's effort, a\n\t * question's notes.\n\t */\n\tasync function highlight(row: Row) {\n\t\tconst keys = walkTo(row, keysForOptionMove);\n\t\tif (keys) await onKeys(keys);\n\t}\n\n\t/** Keys from the pane's highlighted row to `row`, by the given walk. */\n\tfunction walkTo(row: Row, walk: typeof keysForOptionMove): string | null {\n\t\tif (!choice) return null;\n\t\tconst opts = choice.options;\n\t\treturn walk(\n\t\t\topts.findIndex((o) => o.selected),\n\t\t\topts.findIndex((o) => o.n === row.n),\n\t\t\topts.length\n\t\t);\n\t}\n\n\tfunction advanceBlind() {\n\t\tsentCount += 1;\n\t\tpicks = new Set();\n\t\tif (ask && !hasSubmitTab && sentCount >= ask.questions.length) onSubmitted?.();\n\t}\n\n\tfunction pickBlind(qi: number, oi: number) {\n\t\tconst q = ask!.questions[qi];\n\t\tif (q.multiSelect) {\n\t\t\tconst next = new Set(picks);\n\t\t\tif (next.has(oi)) next.delete(oi);\n\t\t\telse next.add(oi);\n\t\t\tpicks = next;\n\t\t\treturn;\n\t\t}\n\t\tconst keys = keysForAnswer([oi], q);\n\t\tif (!keys) return;\n\t\tvoid onKeys(keys);\n\t\tremember(qi, q.options[oi].label);\n\t\tadvanceBlind();\n\t}\n\n\tfunction confirmBlind(qi: number) {\n\t\tconst q = ask!.questions[qi];\n\t\tconst keys = keysForAnswer([...picks], q);\n\t\tif (!keys) return;\n\t\tvoid onKeys(keys);\n\t\tremember(qi, [...picks].sort((a, b) => a - b).map((oi) => q.options[oi].label).join(', '));\n\t\tadvanceBlind();\n\t}\n\n\t/** Submit or Cancel on the closing tab. */\n\tasync function finish(submit: boolean) {\n\t\tif (blind) {\n\t\t\tawait onKeys(submit ? 'Enter' : 'Down Enter');\n\t\t\tonSubmitted?.();\n\t\t\treturn;\n\t\t}\n\t\tconst row = choice?.options.find((o) =>\n\t\t\tsubmit ? o.label === 'Submit answers' : norm(o.label) === 'cancel'\n\t\t);\n\t\tif (row) await pick(row);\n\t}\n\n\t/** A multi-select's ticks are done: on to the next tab (Submit, after the last question). */\n\tfunction done() {\n\t\tconst ticked = rows.filter((r) => r.checked).map((r) => r.label);\n\t\tif (ticked.length > 0) remember(current, ticked.join(', '));\n\t\tvoid onKeys(typing ? 'Up Right' : 'Right');\n\t}\n\n\t// ── the dialog's other keys ──────────────────────────────────────────\n\n\t/** A hint segment naming a key and what it does: \"s to use this session only\". */\n\tconst KEY_SEGMENT = /^(\\S+) to (.+)$/;\n\t/** A note the dialog adjusts with the horizontal arrows. */\n\tconst ARROW_NOTE = /←\\/→/;\n\n\t/**\n\t * The keys a dialog answers to beyond picking a row — the model picker's\n\t * \"s to use this session only\", a question's \"n to add notes\" — read off\n\t * the hint line the dialog draws under itself, so a dialog this page has\n\t * never seen still gets its extra keys offered as buttons.\n\t */\n\tconst extraKeys = $derived.by(() => {\n\t\tconst out: { key: string; label: string }[] = [];\n\t\tfor (const segment of (choice?.keys ?? '').split('·')) {\n\t\t\tconst m = segment.trim().match(KEY_SEGMENT);\n\t\t\t// Only keys the card does not already drive with its rows and buttons.\n\t\t\tif (!m || (!/^[a-z]$/i.test(m[1]) && m[1] !== 'Tab' && m[1] !== 'Space')) continue;\n\t\t\tout.push({ key: m[1], label: m[2] });\n\t\t}\n\t\treturn out;\n\t});\n\n\t/** The panel a question draws beside an option, from the entry the pane cuts it out of. */\n\tfunction previewFor(qi: number, label: string): string | undefined {\n\t\tconst q = ask?.questions[qi];\n\t\tif (!q) return undefined;\n\t\tconst l = norm(label);\n\t\treturn q.options.find((o) => norm(o.label) === l || (l !== '' && norm(o.label).startsWith(l)))\n\t\t\t?.preview;\n\t}\n\n\t/** Someone opened the session to answer this: bring the card into view once. */\n\tfunction reveal(el: HTMLElement) {\n\t\trequestAnimationFrame(() => el.scrollIntoView({ block: 'nearest' }));\n\t}\n\n\tconst isPermission = $derived(permission && !ask);\n\tconst title = $derived(isPermission ? 'Permission needed' : 'Claude is asking');\n</script>\n\n{#snippet liveRows(qi: number)}\n\t<div class=\"rows\" role=\"group\">\n\t\t{#each rows as row (row.n)}\n\t\t\t{@const preview = previewFor(qi, row.label)}\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"row\"\n\t\t\t\tclass:sel={row.selected}\n\t\t\t\tdisabled={closed}\n\t\t\t\ttitle=\"Tap to pick · hold to highlight only\"\n\t\t\t\tonclick={() => void pick(row)}\n\t\t\t\tuse:longPress={{ onTrigger: () => void highlight(row) }}\n\t\t\t>\n\t\t\t\t{#if row.checked === undefined}\n\t\t\t\t\t<span class=\"num\">{row.n}</span>\n\t\t\t\t{:else}\n\t\t\t\t\t<iconify-icon\n\t\t\t\t\t\tclass=\"box\"\n\t\t\t\t\t\tclass:on={row.checked}\n\t\t\t\t\t\ticon={row.checked ? 'mdi:checkbox-marked' : 'mdi:checkbox-blank-outline'}\n\t\t\t\t\t></iconify-icon>\n\t\t\t\t{/if}\n\t\t\t\t<span class=\"label\">\n\t\t\t\t\t<span class=\"name\"\n\t\t\t\t\t\t>{row.label}{#if row.chosen}<iconify-icon\n\t\t\t\t\t\t\t\tclass=\"chosen\"\n\t\t\t\t\t\t\t\ticon=\"mdi:check\"\n\t\t\t\t\t\t\t\ttitle=\"The answer this question holds\"\n\t\t\t\t\t\t\t></iconify-icon>{/if}</span\n\t\t\t\t\t>\n\t\t\t\t\t{#if row.hint}<span class=\"hint\">{row.hint}</span>{/if}\n\t\t\t\t\t{#if preview}<pre class=\"preview\">{preview}</pre>{/if}\n\t\t\t\t</span>\n\t\t\t</button>\n\t\t{/each}\n\t</div>\n{/snippet}\n\n{#snippet freeText(placeholder: string, label: string)}\n\t<form\n\t\tclass=\"free\"\n\t\tonsubmit={(e) => {\n\t\t\te.preventDefault();\n\t\t\tvoid sendFree();\n\t\t}}\n\t>\n\t\t<Input\n\t\t\tbind:ref={inputEl}\n\t\t\tbind:value={draft}\n\t\t\t{@attach keepsCaret}\n\t\t\tdata-dialog-input\n\t\t\tclass=\"free-input\"\n\t\t\t{placeholder}\n\t\t\taria-label={label}\n\t\t\tdisabled={closed}\n\t\t\tonkeydown={freeKeydown}\n\t\t/>\n\t\t{#if dictateTarget}\n\t\t\t<DictateButton\n\t\t\t\ttarget={dictateTarget}\n\t\t\t\tdisabled={closed}\n\t\t\t\tonText={(text) => void sayInto(inputEl, draft, text, (t) => (draft = t))}\n\t\t\t/>\n\t\t{/if}\n\t\t<Button\n\t\t\ttype=\"submit\"\n\t\t\tvariant=\"warning\"\n\t\t\tsize=\"sm\"\n\t\t\tclass=\"free-send\"\n\t\t\tdisabled={closed || sending || draft.trim() === ''}\n\t\t>\n\t\t\t<iconify-icon icon={noting ? 'mdi:note-check-outline' : 'mdi:send'}></iconify-icon>\n\t\t\t{noting ? 'Save' : 'Send'}\n\t\t</Button>\n\t</form>\n{/snippet}\n\n{#snippet paneFreeText(answerLabel: string)}\n\t{#if textRow || noting}\n\t\t{@render freeText(\n\t\t\tnoting ? `Note on ${notingOn}` : 'Type something else',\n\t\t\tnoting ? 'Note' : answerLabel\n\t\t)}\n\t{/if}\n{/snippet}\n\n{#snippet keysBar()}\n\t{#each choice?.notes ?? [] as note (note)}\n\t\t<p class=\"note\">\n\t\t\t<span>{note}</span>\n\t\t\t{#if ARROW_NOTE.test(note)}\n\t\t\t\t<button type=\"button\" class=\"arrow\" title=\"Left\" onclick={() => void onKeys('Left')}>\n\t\t\t\t\t<iconify-icon icon=\"mdi:chevron-left\"></iconify-icon>\n\t\t\t\t</button>\n\t\t\t\t<button type=\"button\" class=\"arrow\" title=\"Right\" onclick={() => void onKeys('Right')}>\n\t\t\t\t\t<iconify-icon icon=\"mdi:chevron-right\"></iconify-icon>\n\t\t\t\t</button>\n\t\t\t{/if}\n\t\t</p>\n\t{/each}\n\t<div class=\"extra\">\n\t\t<!-- Move the highlight without picking: what a setting under the rows,\n\t\t or a note, applies to. A held row does the same. -->\n\t\t<button type=\"button\" class=\"key nav\" title=\"Highlight the row above\" onclick={() => void onKeys('Up')}>\n\t\t\t<iconify-icon icon=\"mdi:chevron-up\"></iconify-icon>\n\t\t</button>\n\t\t<button type=\"button\" class=\"key nav\" title=\"Highlight the row below\" onclick={() => void onKeys('Down')}>\n\t\t\t<iconify-icon icon=\"mdi:chevron-down\"></iconify-icon>\n\t\t</button>\n\t\t{#if choice?.multi && !reviewing}\n\t\t\t<!-- Ticking a box leaves the dialog open; the answer goes in from a\n\t\t\t tab of its own, one key to the right. -->\n\t\t\t<button type=\"button\" class=\"key done\" onclick={done}>\n\t\t\t\t<iconify-icon icon=\"mdi:check-all\"></iconify-icon>Done\n\t\t\t</button>\n\t\t{/if}\n\t\t{#each extraKeys as extra (extra.key)}\n\t\t\t<button type=\"button\" class=\"key\" onclick={() => void onKeys(extra.key)}>\n\t\t\t\t<kbd>{extra.key}</kbd>{extra.label}\n\t\t\t</button>\n\t\t{/each}\n\t\t<button type=\"button\" class=\"key\" title=\"Dismiss the dialog\" onclick={() => void onKeys('Escape')}>\n\t\t\t<kbd>Esc</kbd>cancel\n\t\t</button>\n\t</div>\n\t{#if choice?.keys}<p class=\"keys\">{choice.keys}</p>{/if}\n{/snippet}\n\n<section\n\tclass=\"dialog-card\"\n\tclass:closed\n\taria-label={title}\n\tuse:reveal\n>\n\t<header class=\"title\">\n\t\t<iconify-icon icon={isPermission ? 'mdi:shield-alert-outline' : 'mdi:chat-question'}></iconify-icon>\n\t\t<span>{closed ? 'Answered' : title}</span>\n\t\t{#if closed}<iconify-icon class=\"ok\" icon=\"mdi:check\"></iconify-icon>{/if}\n\t</header>\n\n\t{#if ask}\n\t\t{#each ask.questions as q, qi (q.question)}\n\t\t\t{@const active = !closed && qi === current}\n\t\t\t{@const sent = !active && isAnswered(qi)}\n\t\t\t{@const answer = answerOf(qi)}\n\t\t\t<div class=\"ask-q\" class:inactive={!active && !sent}>\n\t\t\t\t<div class=\"q-head\">\n\t\t\t\t\t<span class=\"chip\" class:done={isAnswered(qi)}>{q.header}</span>\n\t\t\t\t\t{#if canTravel && !active}\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"travel\"\n\t\t\t\t\t\t\ttitle={sent ? 'Go back to this question and pick again' : 'Open this question'}\n\t\t\t\t\t\t\tonclick={() => void goToTab(qi)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<iconify-icon icon={sent ? 'mdi:pencil-outline' : 'mdi:arrow-right'}></iconify-icon>\n\t\t\t\t\t\t\t{sent ? 'Change' : 'Go to'}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t{/if}\n\t\t\t\t</div>\n\t\t\t\t<p class=\"question\">{q.question}</p>\n\t\t\t\t{#if sent}\n\t\t\t\t\t<div class=\"sent\">\n\t\t\t\t\t\t<iconify-icon icon=\"mdi:check\"></iconify-icon>\n\t\t\t\t\t\t{#if answer}<span class=\"answer\">{answer}</span>{:else}answered{/if}\n\t\t\t\t\t</div>\n\t\t\t\t{:else if active && choice && !reviewing}\n\t\t\t\t\t{@render liveRows(qi)}\n\t\t\t\t\t{@render paneFreeText(`Your own answer to: ${q.question}`)}\n\t\t\t\t{:else}\n\t\t\t\t\t<!-- Not open in the pane yet, or no pane read: the entry's own options. -->\n\t\t\t\t\t<div class=\"rows\">\n\t\t\t\t\t\t{#each q.options as opt, oi (opt.label)}\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclass=\"row\"\n\t\t\t\t\t\t\t\tclass:sel={active && q.multiSelect && picks.has(oi)}\n\t\t\t\t\t\t\t\tdisabled={!active || !blind}\n\t\t\t\t\t\t\t\tonclick={() => pickBlind(qi, oi)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{#if q.multiSelect}\n\t\t\t\t\t\t\t\t\t<iconify-icon\n\t\t\t\t\t\t\t\t\t\tclass=\"box\"\n\t\t\t\t\t\t\t\t\t\tclass:on={active && picks.has(oi)}\n\t\t\t\t\t\t\t\t\t\ticon={active && picks.has(oi)\n\t\t\t\t\t\t\t\t\t\t\t? 'mdi:checkbox-marked'\n\t\t\t\t\t\t\t\t\t\t\t: 'mdi:checkbox-blank-outline'}\n\t\t\t\t\t\t\t\t\t></iconify-icon>\n\t\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t\t<span class=\"num\">{oi + 1}</span>\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t<span class=\"label\">\n\t\t\t\t\t\t\t\t\t<span class=\"name\">{opt.label}</span>\n\t\t\t\t\t\t\t\t\t{#if opt.description}<span class=\"hint\">{opt.description}</span>{/if}\n\t\t\t\t\t\t\t\t\t{#if opt.preview}<pre class=\"preview\">{opt.preview}</pre>{/if}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</div>\n\t\t\t\t\t{#if active && blind}\n\t\t\t\t\t\t{#if q.multiSelect}\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tvariant=\"warning\"\n\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\tclass=\"confirm\"\n\t\t\t\t\t\t\t\tdisabled={picks.size === 0}\n\t\t\t\t\t\t\t\tonclick={() => confirmBlind(qi)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tConfirm selection\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t{@render freeText('Type something else', `Your own answer to: ${q.question}`)}\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t{/if}\n\t\t\t\t{/if}\n\t\t\t</div>\n\t\t{/each}\n\n\t\t{#if liveIndex < 0 && choice && !closed}\n\t\t\t<!-- The pane shows something the entry does not name: draw it as it is. -->\n\t\t\t<div class=\"ask-q\">\n\t\t\t\t{#if choice.question}<p class=\"question\">{choice.question}</p>{/if}\n\t\t\t\t{@render liveRows(-1)}\n\t\t\t\t{#if textRow || noting}{@render freeText('Type something else', 'Your own answer')}{/if}\n\t\t\t</div>\n\t\t{/if}\n\n\t\t{#if hasSubmitTab && !closed}\n\t\t\t<footer class=\"foot\">\n\t\t\t\t<span class=\"tally\">\n\t\t\t\t\t{#if atSubmit && answeredCount === ask.questions.length}\n\t\t\t\t\t\tAll answered — ready to submit\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t{answeredCount} of {ask.questions.length} answered\n\t\t\t\t\t{/if}\n\t\t\t\t</span>\n\t\t\t\t<Button variant=\"ghost\" size=\"sm\" disabled={!atSubmit} onclick={() => void finish(false)}>\n\t\t\t\t\tCancel\n\t\t\t\t</Button>\n\t\t\t\t{#if !atSubmit && canTravel && answeredCount === ask.questions.length}\n\t\t\t\t\t<!-- Every question holds an answer, but one was gone back to: on to the review. -->\n\t\t\t\t\t<Button variant=\"warning\" size=\"sm\" title=\"Review your answers\" onclick={() => void goToTab(ask.questions.length)}>\n\t\t\t\t\t\t<iconify-icon icon=\"mdi:arrow-right\"></iconify-icon>Review\n\t\t\t\t\t</Button>\n\t\t\t\t{:else}\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"warning\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tdisabled={!atSubmit}\n\t\t\t\t\t\ttitle={atSubmit ? 'Submit your answers' : 'Answer every question first'}\n\t\t\t\t\t\tonclick={() => void finish(true)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<iconify-icon icon=\"mdi:check-all\"></iconify-icon>Submit\n\t\t\t\t\t</Button>\n\t\t\t\t{/if}\n\t\t\t</footer>\n\t\t{/if}\n\t\t{#if choice && !closed}{@render keysBar()}{/if}\n\t{:else if choice && !closed}\n\t\t<div class=\"ask-q\">\n\t\t\t{#if choice.question}<p class=\"question\">{choice.question}</p>{/if}\n\t\t\t{@render liveRows(-1)}\n\t\t\t{@render paneFreeText('Your own answer')}\n\t\t</div>\n\t\t{@render keysBar()}\n\t{:else if !closed}\n\t\t<p class=\"question muted\">Reading the dialog from the pane…</p>\n\t{/if}\n</section>\n\n<style>\n\t/* The one thing in the transcript that wants you: amber, the colour every\n\t surface gives a waiting session. It cools to a log line once answered. */\n\t.dialog-card {\n\t\tmargin: 14px 0 14px 12px;\n\t\tborder: 1px solid #5c4410;\n\t\tborder-left: 3px solid #fbbf24;\n\t\tborder-radius: 8px;\n\t\tbackground: #1a1610;\n\t\tpadding: 10px 12px 12px;\n\t\tscroll-margin: 16px;\n\t}\n\t.dialog-card.closed {\n\t\tborder-color: #2a2a2e;\n\t\tborder-left-color: #4d7c5f;\n\t\tbackground: #161616;\n\t}\n\t.title {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 7px;\n\t\tmargin-bottom: 8px;\n\t\tfont-size: 11px;\n\t\tfont-weight: 700;\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.08em;\n\t\tcolor: #fbbf24;\n\t}\n\t.closed .title {\n\t\tcolor: #86b898;\n\t}\n\t.ask-q + .ask-q {\n\t\tmargin-top: 12px;\n\t\tpadding-top: 10px;\n\t\tborder-top: 1px solid #2c2416;\n\t}\n\t.ask-q.inactive {\n\t\topacity: 0.45;\n\t}\n\t.chip {\n\t\tdisplay: inline-block;\n\t\tmargin-bottom: 4px;\n\t\tpadding: 1px 7px;\n\t\tborder-radius: 4px;\n\t\tbackground: #3a2d0d;\n\t\tcolor: #fde68a;\n\t\tfont-size: 10px;\n\t\tfont-weight: 700;\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.08em;\n\t}\n\t.chip.done {\n\t\tbackground: #262220;\n\t\tcolor: #a8a29e;\n\t}\n\t.question {\n\t\tmargin: 0 0 8px;\n\t\tcolor: #f5f0ee;\n\t\tfont-weight: 600;\n\t\t/* Carried whole from the pane, with the breaks the dialog drew itself. */\n\t\twhite-space: pre-line;\n\t\toverflow-wrap: anywhere;\n\t}\n\t.question.muted {\n\t\tcolor: #a8a29e;\n\t\tfont-weight: 400;\n\t}\n\t.sent {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 6px;\n\t\tfont-size: 12.5px;\n\t\tcolor: #86b898;\n\t}\n\t.sent .answer {\n\t\tcolor: #d6d3d1;\n\t\toverflow-wrap: anywhere;\n\t}\n\t.q-head {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 8px;\n\t\tmargin-bottom: 4px;\n\t}\n\t.q-head .chip {\n\t\tmargin-bottom: 0;\n\t}\n\t/* Going back to a question is how its answer is changed. */\n\t.travel {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: 4px;\n\t\tmargin-left: auto;\n\t\tpadding: 2px 8px;\n\t\tborder: 1px solid #3a2f17;\n\t\tborder-radius: 4px;\n\t\tbackground: none;\n\t\tcolor: #d6b46a;\n\t\tfont-size: 11.5px;\n\t\tcursor: pointer;\n\t}\n\t.travel:hover,\n\t.travel:focus-visible {\n\t\tborder-color: #fbbf24;\n\t\tcolor: #fde68a;\n\t}\n\t.name .chosen {\n\t\tmargin-left: 6px;\n\t\tcolor: #86b898;\n\t\tvertical-align: -2px;\n\t}\n\t.rows {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 5px;\n\t}\n\t.row {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tgap: 9px;\n\t\twidth: 100%;\n\t\tmin-height: 34px;\n\t\tpadding: 7px 10px;\n\t\tborder: 1px solid #2c2416;\n\t\tborder-radius: 7px;\n\t\tbackground: #201b12;\n\t\tcolor: #d6d3d1;\n\t\ttext-align: left;\n\t\tcursor: pointer;\n\t\ttransition:\n\t\t\tborder-color 0.12s,\n\t\t\tbackground 0.12s;\n\t}\n\t.row:hover:not(:disabled) {\n\t\tborder-color: #b45309;\n\t\tbackground: #2a2214;\n\t}\n\t.row:disabled {\n\t\tcursor: default;\n\t}\n\t/* Claude Code's own highlight: Enter (or the gamepad's A) takes this row. */\n\t.row.sel {\n\t\tborder-color: #fbbf24;\n\t\tbackground: #3a2d0d;\n\t\tcolor: #fde68a;\n\t}\n\t.num {\n\t\tflex: none;\n\t\twidth: 10px;\n\t\tpadding-top: 2px;\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 10.5px;\n\t\tcolor: #78716c;\n\t}\n\t.row.sel .num {\n\t\tcolor: #fbbf24;\n\t}\n\t/* A multi-select row says what it is with its own box: the box is the\n\t thing a tap changes. */\n\t.box {\n\t\tflex: none;\n\t\tpadding-top: 1px;\n\t\tfont-size: 15px;\n\t\tcolor: #57534e;\n\t}\n\t.box.on {\n\t\tcolor: #34d399;\n\t}\n\t.label {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 2px;\n\t\tmin-width: 0;\n\t\tflex: 1;\n\t}\n\t.name {\n\t\tfont-size: 13px;\n\t\tfont-weight: 600;\n\t\tcolor: inherit;\n\t\toverflow-wrap: anywhere;\n\t}\n\t.hint {\n\t\tfont-size: 12px;\n\t\tline-height: 1.45;\n\t\tcolor: #a8a29e;\n\t\twhite-space: pre-line;\n\t\toverflow-wrap: anywhere;\n\t}\n\t.row.sel .hint {\n\t\tcolor: #c8a94a;\n\t}\n\t/* The panel the terminal draws beside a highlighted option, shown under\n\t it here: on a phone there is no room to the side. */\n\t.preview {\n\t\tmargin: 6px 0 0;\n\t\tpadding: 8px 10px;\n\t\tborder: 1px solid #2c2416;\n\t\tborder-radius: 6px;\n\t\tbackground: #14110c;\n\t\tcolor: #d6d3d1;\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 12px;\n\t\tline-height: 1.5;\n\t\twhite-space: pre;\n\t\toverflow-x: auto;\n\t}\n\t.free {\n\t\tdisplay: flex;\n\t\tgap: 6px;\n\t\tmargin-top: 8px;\n\t}\n\t.free :global(.free-input) {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\theight: 34px;\n\t\tborder-color: #3a2f1a;\n\t\tbackground: #14110c;\n\t\tcolor: #f5f0ee;\n\t\tfont-size: 13px;\n\t}\n\t.free :global(.free-send) {\n\t\theight: 34px;\n\t}\n\t.dialog-card :global(.confirm) {\n\t\tmargin-top: 8px;\n\t}\n\t.foot {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tflex-wrap: wrap;\n\t\tgap: 6px;\n\t\tmargin-top: 12px;\n\t\tpadding-top: 10px;\n\t\tborder-top: 1px solid #2c2416;\n\t}\n\t.tally {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\tfont-size: 12px;\n\t\tcolor: #a8a29e;\n\t}\n\t/* A line the dialog prints for itself under the rows, with the arrows that\n\t adjust it when the line says they do. */\n\t.note {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 4px;\n\t\tmargin: 8px 0 0;\n\t\tfont-size: 12px;\n\t\tline-height: 1.4;\n\t\tcolor: #a8a29e;\n\t}\n\t.note span {\n\t\tmin-width: 0;\n\t}\n\t.arrow {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 26px;\n\t\theight: 24px;\n\t\tpadding: 0;\n\t\tborder: 0;\n\t\tborder-radius: 6px;\n\t\tbackground: #26262a;\n\t\tcolor: #d6d3d1;\n\t\tfont-size: 16px;\n\t\tcursor: pointer;\n\t}\n\t.extra {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 6px;\n\t\tmargin-top: 8px;\n\t}\n\t/* One of the keys the dialog names: the key as a cap, then its verb. */\n\t.key {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t\theight: 30px;\n\t\tpadding: 0 11px 0 8px;\n\t\tborder: 0;\n\t\tborder-radius: 8px;\n\t\tbackground: #26262a;\n\t\tcolor: #d6d3d1;\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 11.5px;\n\t\tcursor: pointer;\n\t}\n\t.key:hover {\n\t\tbackground: #33333a;\n\t}\n\t.key.nav {\n\t\twidth: 34px;\n\t\tpadding: 0;\n\t\tjustify-content: center;\n\t\tfont-size: 17px;\n\t}\n\t.key.done {\n\t\tbackground: #1c3326;\n\t\tcolor: #6ee7b7;\n\t}\n\t.key.done:hover {\n\t\tbackground: #244433;\n\t}\n\t.key kbd {\n\t\tpadding: 0 5px;\n\t\tborder: 1px solid #44444a;\n\t\tborder-radius: 4px;\n\t\tfont-family: inherit;\n\t\tfont-size: 10.5px;\n\t\tcolor: #fbbf24;\n\t}\n\t.keys {\n\t\tmargin: 6px 0 0;\n\t\tcolor: #6b6b70;\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 10.5px;\n\t\toverflow-wrap: anywhere;\n\t}\n\t@media (pointer: coarse) {\n\t\t.row {\n\t\t\tmin-height: 44px;\n\t\t}\n\t\t.key,\n\t\t.free :global(.free-input),\n\t\t.free :global(.free-send) {\n\t\t\theight: 40px;\n\t\t}\n\t\t/* Below 16px, iOS zooms the page to the field on focus. */\n\t\t.free :global(.free-input) {\n\t\t\tfont-size: 16px;\n\t\t}\n\t}\n</style>\n","<script lang=\"ts\">\n\timport type { LoginScreen } from '$shared/tmux/login.js';\n\timport { Button } from '$lib/components/ui/button';\n\timport { Input } from '$lib/components/ui/input';\n\n\tlet {\n\t\tlogin,\n\t\tonKeys,\n\t\tonText\n\t}: {\n\t\t/** The sign-in screen as the pane draws it right now. */\n\t\tlogin: NonNullable<LoginScreen>;\n\t\tonKeys: (keys: string) => Promise<void> | void;\n\t\tonText: (text: string) => Promise<void> | void;\n\t} = $props();\n\n\t/** What the sign-in page hands back: the code, a `#`, and the request's state. */\n\tconst CODE_SHAPE = /^[\\w-]{8,}#[\\w-]{8,}$/;\n\n\tlet draft = $state('');\n\tlet sending = $state(false);\n\tlet copied = $state(false);\n\tlet note = $state<string | null>(null);\n\t/** The link was opened from here, so coming back to this tab means the code is likely on the clipboard. */\n\tlet awaitingCode = $state(false);\n\n\tconst url = $derived(login.step === 'code' ? login.url : null);\n\n\tasync function submit(code = draft) {\n\t\tconst text = code.trim();\n\t\tif (!text || sending) return;\n\t\tsending = true;\n\t\tnote = null;\n\t\ttry {\n\t\t\tawait onText(text);\n\t\t\tawait onKeys('Enter');\n\t\t\tdraft = '';\n\t\t\tawaitingCode = false;\n\t\t} finally {\n\t\t\tsending = false;\n\t\t}\n\t}\n\n\t/** The clipboard on a click: a code goes straight in, anything else lands in the field to look at. */\n\tasync function pasteAndSubmit() {\n\t\tlet text: string;\n\t\ttry {\n\t\t\ttext = (await navigator.clipboard.readText()).trim();\n\t\t} catch {\n\t\t\tnote = 'This browser would not share the clipboard. Paste the code into the field.';\n\t\t\treturn;\n\t\t}\n\t\tif (CODE_SHAPE.test(text)) await submit(text);\n\t\telse {\n\t\t\tdraft = text;\n\t\t\tnote = text ? 'That does not look like a sign-in code. Check it, then press Sign in.' : 'The clipboard is empty.';\n\t\t}\n\t}\n\n\tasync function copyLink() {\n\t\tif (!url) return;\n\t\ttry {\n\t\t\tawait navigator.clipboard.writeText(url);\n\t\t\tcopied = true;\n\t\t\tsetTimeout(() => (copied = false), 1500);\n\t\t} catch {\n\t\t\tnote = 'Copying was refused. Open the page instead.';\n\t\t}\n\t}\n\n\t// Back from the sign-in tab: where the browser already lets this page read\n\t// the clipboard, a code waiting there fills the field without asking.\n\t$effect(() => {\n\t\tif (!awaitingCode) return;\n\t\tconst onBack = async () => {\n\t\t\tif (document.visibilityState !== 'visible' || draft) return;\n\t\t\ttry {\n\t\t\t\tconst perm = await navigator.permissions.query({ name: 'clipboard-read' as PermissionName });\n\t\t\t\tif (perm.state !== 'granted') return;\n\t\t\t\tconst text = (await navigator.clipboard.readText()).trim();\n\t\t\t\tif (CODE_SHAPE.test(text)) draft = text;\n\t\t\t} catch {\n\t\t\t\t// No permission API or no clipboard: the buttons still work.\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener('visibilitychange', onBack);\n\t\twindow.addEventListener('focus', onBack);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('visibilitychange', onBack);\n\t\t\twindow.removeEventListener('focus', onBack);\n\t\t};\n\t});\n</script>\n\n<section class=\"login-card\" aria-label=\"Sign in to Claude Code\">\n\t<header class=\"title\">\n\t\t<iconify-icon icon=\"mdi:account-key-outline\"></iconify-icon>\n\t\t<span>{login.step === 'done' ? 'Signed in' : 'Sign in to Claude Code'}</span>\n\t</header>\n\n\t{#if login.step === 'expired'}\n\t\t<p class=\"lead\">This session's sign-in has expired, so its turns fail until it signs in again.</p>\n\t\t<Button\n\t\t\tvariant=\"warning\"\n\t\t\tsize=\"sm\"\n\t\t\tdisabled={sending}\n\t\t\tonclick={async () => {\n\t\t\t\tsending = true;\n\t\t\t\ttry {\n\t\t\t\t\tawait onText('/login');\n\t\t\t\t\tawait onKeys('Enter');\n\t\t\t\t} finally {\n\t\t\t\t\tsending = false;\n\t\t\t\t}\n\t\t\t}}\n\t\t>\n\t\t\t<iconify-icon icon=\"mdi:login\"></iconify-icon>Sign in\n\t\t</Button>\n\t{:else if login.step === 'failed'}\n\t\t<p class=\"error\">{login.error}</p>\n\t\t<p class=\"lead\">A code works once and only for the link it came from. Try again for a fresh link.</p>\n\t\t<div class=\"link-row\">\n\t\t\t<Button variant=\"warning\" size=\"sm\" onclick={() => void onKeys('Enter')}>\n\t\t\t\t<iconify-icon icon=\"mdi:refresh\"></iconify-icon>Try again\n\t\t\t</Button>\n\t\t\t<Button variant=\"ghost\" size=\"sm\" onclick={() => void onKeys('Escape')}>Cancel</Button>\n\t\t</div>\n\t{:else if login.step === 'done'}\n\t\t<p class=\"lead\">The code was accepted. Claude Code waits for Enter to carry on.</p>\n\t\t<Button variant=\"warning\" size=\"sm\" onclick={() => void onKeys('Enter')}>\n\t\t\t<iconify-icon icon=\"mdi:keyboard-return\"></iconify-icon>Continue\n\t\t</Button>\n\t{:else}\n\t\t<p class=\"lead\">Open the sign-in page, approve, and paste the code it shows you here.</p>\n\t\t{#if url}\n\t\t\t<div class=\"link-row\">\n\t\t\t\t<Button\n\t\t\t\t\thref={url}\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\tvariant=\"warning\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tonclick={() => (awaitingCode = true)}\n\t\t\t\t>\n\t\t\t\t\t<iconify-icon icon=\"mdi:open-in-new\"></iconify-icon>Open sign-in page\n\t\t\t\t</Button>\n\t\t\t\t<Button variant=\"ghost\" size=\"sm\" onclick={() => void copyLink()}>\n\t\t\t\t\t<iconify-icon icon={copied ? 'mdi:check' : 'mdi:content-copy'}></iconify-icon>\n\t\t\t\t\t{copied ? 'Copied' : 'Copy link'}\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t{:else}\n\t\t\t<p class=\"muted\">The link is not on screen. Open the terminal view to see it.</p>\n\t\t{/if}\n\n\t\t<form\n\t\t\tclass=\"code-row\"\n\t\t\tonsubmit={(e) => {\n\t\t\t\te.preventDefault();\n\t\t\t\tvoid submit();\n\t\t\t}}\n\t\t>\n\t\t\t<Input\n\t\t\t\tbind:value={draft}\n\t\t\t\tclass=\"code-input\"\n\t\t\t\tplaceholder=\"Code from the sign-in page\"\n\t\t\t\taria-label=\"Sign-in code\"\n\t\t\t\tautocomplete=\"off\"\n\t\t\t\tspellcheck={false}\n\t\t\t/>\n\t\t\t<Button type=\"button\" variant=\"ghost\" size=\"sm\" disabled={sending} onclick={() => void pasteAndSubmit()}>\n\t\t\t\t<iconify-icon icon=\"mdi:clipboard-arrow-down-outline\"></iconify-icon>Paste\n\t\t\t</Button>\n\t\t\t<Button type=\"submit\" variant=\"warning\" size=\"sm\" disabled={sending || !draft.trim()}>\n\t\t\t\t<iconify-icon icon=\"mdi:send\"></iconify-icon>Sign in\n\t\t\t</Button>\n\t\t</form>\n\n\t\t{#if login.error}<p class=\"error\">{login.error}</p>{/if}\n\t\t{#if login.typed}<p class=\"muted\">Already in the pane's field: <code>{login.typed}</code></p>{/if}\n\t{/if}\n\t{#if note}<p class=\"muted\">{note}</p>{/if}\n</section>\n\n<style>\n\t/* Amber like a dialog: the session waits on a person until it signs in. */\n\t.login-card {\n\t\tmargin: 14px 0 14px 12px;\n\t\tborder: 1px solid #5c4410;\n\t\tborder-left: 3px solid #fbbf24;\n\t\tborder-radius: 8px;\n\t\tbackground: #1a1610;\n\t\tpadding: 10px 12px 12px;\n\t}\n\t.title {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 7px;\n\t\tmargin-bottom: 8px;\n\t\tfont-size: 11px;\n\t\tfont-weight: 700;\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.08em;\n\t\tcolor: #fbbf24;\n\t}\n\t.lead {\n\t\tmargin: 0 0 10px;\n\t\tcolor: #f5f0ee;\n\t}\n\t.link-row,\n\t.code-row {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t}\n\t.code-row {\n\t\tmargin-top: 10px;\n\t}\n\t.code-row :global(.code-input) {\n\t\tflex: 1 1 14rem;\n\t\tmin-width: 0;\n\t\tfont-family: ui-monospace, monospace;\n\t}\n\t.error {\n\t\tmargin: 8px 0 0;\n\t\tcolor: #f87171;\n\t\tfont-size: 12.5px;\n\t}\n\t.muted {\n\t\tmargin: 8px 0 0;\n\t\tcolor: #a8a29e;\n\t\tfont-size: 12.5px;\n\t\toverflow-wrap: anywhere;\n\t}\n</style>\n","<script lang=\"ts\">\n\timport type { RewindAction, RewindChoice, RewindScreen } from '$shared/tmux/rewind.js';\n\timport { Button } from '$lib/components/ui/button';\n\n\tlet {\n\t\tscreen,\n\t\tonRewind\n\t}: {\n\t\t/** The rewind dialog as the pane draws it right now. */\n\t\tscreen: NonNullable<RewindScreen>;\n\t\t/** Works the dialog through the rewind route; resolves false when it failed (the page says why). */\n\t\tonRewind: (action: RewindAction) => Promise<boolean>;\n\t} = $props();\n\n\tlet pending = $state<string | null>(null);\n\tlet card = $state<HTMLElement | null>(null);\n\n\tasync function run(key: string, action: RewindAction) {\n\t\tif (pending) return;\n\t\tpending = key;\n\t\ttry {\n\t\t\tawait onRewind(action);\n\t\t} finally {\n\t\t\tpending = null;\n\t\t}\n\t}\n\n\t// Opened from a prompt far up the transcript, the card is at its foot.\n\t$effect(() => {\n\t\tcard?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n\t});\n\n\t/** The choices that restore, which are what a rewind is for; the summaries come after. */\n\tconst restores = $derived(\n\t\tscreen.step === 'confirm' ? screen.options.filter((o) => o.label.startsWith('Restore')) : []\n\t);\n\tconst summaries = $derived(\n\t\tscreen.step === 'confirm' ? screen.options.filter((o) => o.label.startsWith('Summarize')) : []\n\t);\n</script>\n\n<section class=\"rewind-card\" aria-label=\"Rewind\" bind:this={card}>\n\t<header class=\"title\">\n\t\t<iconify-icon icon=\"mdi:history\"></iconify-icon>\n\t\t<span>Rewind</span>\n\t</header>\n\n\t{#if screen.step === 'list'}\n\t\t<p class=\"lead\">Go back to before which prompt?</p>\n\t\t<div class=\"rows\">\n\t\t\t{#if screen.above > 0}<p class=\"muted\">{screen.above} earlier, use Rewind on a prompt above</p>{/if}\n\t\t\t{#each screen.rows.filter((r) => !r.current) as row (row.text)}\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"row\"\n\t\t\t\t\tclass:selected={row.selected}\n\t\t\t\t\tdisabled={pending !== null}\n\t\t\t\t\tonclick={() => void run(row.text, { action: 'open', prompt: row.text, back: null })}\n\t\t\t\t>\n\t\t\t\t\t<span class=\"row-text\">{row.text}</span>\n\t\t\t\t\t{#if row.files}<span class=\"row-files\">{row.files}</span>{/if}\n\t\t\t\t</button>\n\t\t\t{/each}\n\t\t</div>\n\t{:else}\n\t\t<p class=\"lead\">Go back to before this prompt{screen.ago ? `, sent ${screen.ago}` : ''}:</p>\n\t\t<blockquote>{screen.prompt}</blockquote>\n\t\t{#if screen.effects.length > 0}\n\t\t\t<ul class=\"effects\">\n\t\t\t\t{#each screen.effects as effect (effect)}<li>{effect}</li>{/each}\n\t\t\t</ul>\n\t\t{/if}\n\t\t<div class=\"choices\">\n\t\t\t{#each restores as option (option.n)}\n\t\t\t\t<Button\n\t\t\t\t\tvariant={option.n === restores[0]?.n ? 'warning' : 'outline'}\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tdisabled={pending !== null}\n\t\t\t\t\tonclick={() => void run(option.label, { action: 'choose', choice: option.label as RewindChoice })}\n\t\t\t\t>\n\t\t\t\t\t{pending === option.label ? 'Rewinding…' : option.label}\n\t\t\t\t</Button>\n\t\t\t{/each}\n\t\t</div>\n\t\t{#if summaries.length > 0}\n\t\t\t<div class=\"choices\">\n\t\t\t\t{#each summaries as option (option.n)}\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tdisabled={pending !== null}\n\t\t\t\t\t\tonclick={() => void run(option.label, { action: 'choose', choice: option.label as RewindChoice })}\n\t\t\t\t\t>\n\t\t\t\t\t\t<iconify-icon icon=\"mdi:text-box-outline\"></iconify-icon>{option.label}\n\t\t\t\t\t</Button>\n\t\t\t\t{/each}\n\t\t\t</div>\n\t\t{/if}\n\t\t<p class=\"muted\">Files changed through Bash or by hand stay as they are.</p>\n\t{/if}\n\t<div class=\"foot\">\n\t\t<Button variant=\"ghost\" size=\"sm\" disabled={pending !== null} onclick={() => void run('cancel', { action: 'cancel' })}>\n\t\t\tCancel\n\t\t</Button>\n\t</div>\n</section>\n\n<style>\n\t/* Amber like a dialog: the pane waits on a person until it is answered. */\n\t.rewind-card {\n\t\tmargin: 14px 0 14px 12px;\n\t\tborder: 1px solid #5c4410;\n\t\tborder-left: 3px solid #fbbf24;\n\t\tborder-radius: 8px;\n\t\tbackground: #1a1610;\n\t\tpadding: 10px 12px 12px;\n\t}\n\t.title {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 7px;\n\t\tmargin-bottom: 8px;\n\t\tfont-size: 11px;\n\t\tfont-weight: 700;\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.08em;\n\t\tcolor: #fbbf24;\n\t}\n\t.lead {\n\t\tmargin: 0 0 8px;\n\t\tcolor: #f5f0ee;\n\t}\n\tblockquote {\n\t\tmargin: 0 0 8px;\n\t\tpadding: 4px 0 4px 10px;\n\t\tborder-left: 2px solid #5c4410;\n\t\tcolor: #e7e5e4;\n\t\twhite-space: pre-wrap;\n\t\toverflow-wrap: anywhere;\n\t}\n\t.effects {\n\t\tmargin: 0 0 10px;\n\t\tpadding-left: 18px;\n\t\tcolor: #d6d3d1;\n\t\tfont-size: 12.5px;\n\t}\n\t.rows {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 4px;\n\t}\n\t.row {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 10px;\n\t\twidth: 100%;\n\t\tpadding: 6px 8px;\n\t\tborder: 1px solid #3a2f17;\n\t\tborder-radius: 6px;\n\t\tbackground: transparent;\n\t\tcolor: #f5f0ee;\n\t\ttext-align: left;\n\t\tcursor: pointer;\n\t}\n\t.row:hover:not(:disabled),\n\t.row:focus-visible {\n\t\tborder-color: #fbbf24;\n\t}\n\t.row.selected {\n\t\tborder-color: #8a6a1c;\n\t}\n\t.row-text {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n\t.row-files {\n\t\tflex: none;\n\t\tcolor: #a8a29e;\n\t\tfont-size: 12px;\n\t}\n\t.choices {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 6px;\n\t\tmargin-top: 6px;\n\t}\n\t.foot {\n\t\tdisplay: flex;\n\t\tjustify-content: flex-end;\n\t\tmargin-top: 6px;\n\t}\n\t.muted {\n\t\tmargin: 8px 0 0;\n\t\tcolor: #a8a29e;\n\t\tfont-size: 12.5px;\n\t}\n</style>\n","/**\n * MCP tools reach the transcript as `mcp__<server>__<tool>`. Server names may\n * themselves hold single underscores (`claude_ai_Claude_Docs`), so the name is\n * split on the double underscore, never on `_`.\n */\nexport interface McpToolName {\n server: string;\n tool: string;\n}\n\nexport function parseMcpToolName(name: string): McpToolName | null {\n const match = /^mcp__(.+?)__(.+)$/.exec(name);\n return match ? { server: match[1], tool: match[2] } : null;\n}\n","import { parseMcpToolName } from '$shared/transcript/mcp.js';\n\n/** Icons for MCP server families recognisable from the server name. */\nconst MCP_FAMILIES: [RegExp, string][] = [\n\t[/brave|chrome|browser|devtools|playwright|puppeteer/i, 'mdi:web'],\n\t[/docs|notion|confluence|drive/i, 'mdi:file-document-outline'],\n\t[/github/i, 'mdi:github'],\n\t[/slack/i, 'mdi:slack']\n];\n\n/** The icon a tool call is drawn with in the transcript. */\nexport function toolIcon(name: string): string {\n\tconst mcp = parseMcpToolName(name);\n\tif (mcp) {\n\t\treturn MCP_FAMILIES.find(([pattern]) => pattern.test(mcp.server))?.[1] ?? 'mdi:power-plug-outline';\n\t}\n\tconst n = name.toLowerCase();\n\tif (n.includes('bash') || n.includes('command')) return 'mdi:console';\n\tif (n.includes('edit') || n.includes('write') || n.includes('notebook')) return 'mdi:file-edit-outline';\n\tif (n.includes('read')) return 'mdi:file-eye-outline';\n\tif (n.includes('grep') || n.includes('glob') || n.includes('search')) return 'mdi:magnify';\n\tif (n.includes('task') || n.includes('agent')) return 'mdi:robot-outline';\n\tif (n.includes('web')) return 'mdi:web';\n\tif (n.includes('todo')) return 'mdi:checkbox-marked-outline';\n\treturn 'mdi:tools';\n}\n","<script lang=\"ts\">\n\timport { parseMcpToolName } from '$shared/transcript/mcp.js';\n\n\t/**\n\t * A tool call's one-line label. Built-in tools read as their summary; an MCP\n\t * tool adds the server it came from, faint, ahead of the tool name, and sets\n\t * its key argument apart from the name.\n\t */\n\tlet { name, summary }: { name: string; summary: string } = $props();\n\n\tconst mcp = $derived(parseMcpToolName(name));\n\t// The summary reads `tool: arg`; tool names never hold ': '.\n\tconst arg = $derived(mcp ? summary.split(': ').slice(1).join(': ') : '');\n</script>\n\n{#if mcp}<span class=\"server\">{mcp.server}</span><span class=\"sep\">·</span><span class=\"tool\"\n\t\t>{mcp.tool}</span\n\t>{#if arg}<span class=\"arg\">{arg}</span>{/if}{:else}{summary}{/if}\n\n<style>\n\t.server {\n\t\topacity: 0.55;\n\t}\n\t.sep {\n\t\topacity: 0.4;\n\t\tmargin: 0 0.45em;\n\t}\n\t.arg {\n\t\tmargin-left: 1.2em;\n\t\topacity: 0.7;\n\t}\n</style>\n","import type { TranscriptItem } from \"./tool-groups.js\";\n\n/**\n * Where a rewind left the conversation.\n *\n * Claude Code's rewind (Esc Esc, or /rewind) writes nothing when it runs: the\n * next prompt is simply logged with the `parentUuid` of the point it went\n * back to, in the same file, so the log becomes a tree and the turns after\n * that point are a branch nobody follows any more. A prompt is the first sign\n * of it, then, and the test is whether anything the model said was logged\n * between its parent and itself: an ordinary prompt hangs off the line just\n * before it, give or take Claude Code's own bookkeeping, and only a rewind\n * skips an answer.\n */\nexport class ForkTracker {\n private seqByUuid = new Map<string, number>();\n private next = 0;\n private lastAssistant = -1;\n\n /** Note a main-conversation line in file order; answers its position. */\n see(uuid: string | null, type: unknown): number {\n const seq = this.next++;\n if (uuid) this.seqByUuid.set(uuid, seq);\n if (type === \"assistant\") this.lastAssistant = seq;\n return seq;\n }\n\n /**\n * For a prompt about to be noted, the position after which the conversation\n * was abandoned (everything after it, up to the prompt, is the old branch),\n * or null when the prompt simply follows on.\n */\n abandonedAfter(parentUuid: string | null): number | null {\n if (!parentUuid) return null;\n const parent = this.seqByUuid.get(parentUuid);\n if (parent === undefined || this.lastAssistant <= parent) return null;\n return parent;\n }\n}\n\n/** A run of items a rewind went back past, drawn folded. */\nexport interface RewoundRun {\n kind: \"rewound\";\n id: string;\n items: TranscriptItem[];\n /** How many prompts it holds. */\n turns: number;\n}\n\nconst isRewound = (item: TranscriptItem) => (item.kind === \"group\" ? item.entries[0]?.rewound : item.rewound) === true;\n\n/** Fold each run of rewound items into one, leaving the rest as they are. */\nexport function foldRewound(items: TranscriptItem[]): (TranscriptItem | RewoundRun)[] {\n const out: (TranscriptItem | RewoundRun)[] = [];\n for (const item of items) {\n if (!isRewound(item)) {\n out.push(item);\n continue;\n }\n let run = out[out.length - 1];\n if (run?.kind !== \"rewound\") {\n run = { kind: \"rewound\", id: `rewound:${item.id}`, items: [], turns: 0 };\n out.push(run);\n }\n run.items.push(item);\n if (item.kind === \"user\") run.turns++;\n }\n return out;\n}\n","/**\n * A grilling round, read out of Claude's reply so it can be answered as a form.\n *\n * The grilling skill asks a whole round of questions at once, each in the\n * same shape, with its own recommendation under it:\n *\n * ❓ **Q1** - **Storage**: Where do drafts live?\n *\n * ➡️ In the session JSON, next to the rest of the live state.\n *\n * Answering that in a text box means retyping \"Q1: yes, Q2: …\" for every\n * question, most of which you agree with. Read as a round, each question\n * becomes a row you accept with one tap or answer in your own words, and the\n * reply is written for you.\n */\n\nexport interface GrillQuestion {\n /** The number Claude gave it: Q3 is 3. */\n n: number;\n /** The bold title after the number, when the question has one. */\n title: string | null;\n /** The question itself, as markdown. */\n body: string;\n /** Claude's recommended answer, as markdown; null when it offered none. */\n recommended: string | null;\n}\n\nexport interface GrillRound {\n /** Whatever Claude wrote before the first question. */\n intro: string;\n questions: GrillQuestion[];\n /** Whatever it wrote after the last question's recommendation. */\n outro: string;\n}\n\nexport type GrillAnswer = { mode: \"accept\" } | { mode: \"own\"; text: string } | { mode: \"skip\" };\n\n/** `❓ **Q1** - **Title**: body`, or `❓ **Q1 - Title**: body`. */\nconst QUESTION = /^\\s*❓️?\\s*\\*\\*Q(\\d+)(?:\\s*[-–—:.]\\s*([^*]+?))?\\*\\*\\s*[-–—:.]?\\s*(?:\\*\\*([^*]+?)\\*\\*\\s*:?)?\\s*(.*)$/;\nconst RECOMMENDED = /^\\s*➡️?\\s*(.*)$/;\n\n/** Splits text at blank lines into its first paragraph and the rest. */\nfunction firstParagraph(lines: string[]): [string[], string[]] {\n const blank = lines.findIndex((l) => l.trim() === \"\");\n return blank === -1 ? [lines, []] : [lines.slice(0, blank), lines.slice(blank + 1)];\n}\n\nfunction join(lines: string[]): string {\n return lines.join(\"\\n\").trim();\n}\n\n/** The round in `text`, or null when it asks no numbered questions. */\nexport function parseGrillRound(text: string): GrillRound | null {\n const lines = text.split(\"\\n\");\n const starts: number[] = [];\n lines.forEach((line, i) => {\n if (QUESTION.test(line)) starts.push(i);\n });\n if (starts.length === 0) return null;\n\n const intro = join(lines.slice(0, starts[0]));\n const questions: GrillQuestion[] = [];\n let outro = \"\";\n\n starts.forEach((start, qi) => {\n const end = starts[qi + 1] ?? lines.length;\n const m = lines[start].match(QUESTION)!;\n const rest = lines.slice(start + 1, end);\n const recAt = rest.findIndex((l) => RECOMMENDED.test(l));\n const bodyLines = [m[4], ...(recAt === -1 ? rest : rest.slice(0, recAt))];\n\n let recommended: string | null = null;\n if (recAt !== -1) {\n const recLines = [rest[recAt].match(RECOMMENDED)![1], ...rest.slice(recAt + 1)];\n const [para, after] = firstParagraph(recLines);\n recommended = join(para) || null;\n // Past the last question, what follows the recommendation is Claude\n // talking to you again, not part of the answer it proposed.\n if (qi === starts.length - 1) outro = join(after);\n else if (join(after)) recommended = join(recLines);\n }\n\n questions.push({\n n: Number(m[1]),\n title: (m[2] ?? m[3])?.trim() || null,\n body: join(bodyLines),\n recommended,\n });\n });\n\n return { intro, questions, outro };\n}\n\n/**\n * The reply a round's answers make, one line per question in Claude's order.\n * A skipped question is said to be skipped, so Claude knows it is still open\n * rather than guessing it was agreed.\n */\nexport function composeGrillReply(round: GrillRound, answers: Record<number, GrillAnswer>): string {\n return round.questions\n .map((q) => {\n const label = q.title ? `Q${q.n} (${q.title})` : `Q${q.n}`;\n const answer = answers[q.n] ?? (q.recommended ? { mode: \"accept\" } : { mode: \"skip\" });\n if (answer.mode === \"accept\") return `${label}: agreed, go with your recommendation.`;\n if (answer.mode === \"skip\" || !answer.text.trim()) return `${label}: skip for now, leave it open.`;\n return `${label}: ${answer.text.trim()}`;\n })\n .join(\"\\n\");\n}\n","/**\n * Folds runs of routine tool calls into one summary line, the way Claude\n * Code's fullscreen TUI does: \"Ran 4 shell commands\", \"Searched for 1\n * pattern, called brave-windows 2 times\". A working session otherwise reads\n * as a wall of tool rows with the prose lost between them.\n *\n * Only calls that are finished and unremarkable fold. Anything the reader\n * should see without opening a group stays a row of its own and ends the run:\n * a call still in flight, a subagent, a todo or plan update, an edit drawn as\n * a diff, a question. Thinking between folded calls folds with them; thinking\n * before the first call or after the last stays outside, with the prose.\n */\n\nimport { asRecord, readString } from \"./json.js\";\nimport { parseMcpToolName } from \"./mcp.js\";\nimport type { TranscriptEntry } from \"./parser.js\";\n\ntype ToolEntry = Extract<TranscriptEntry, { kind: \"tool\" }>;\n\nexport interface ToolGroup {\n kind: \"group\";\n /** The first call's id, so the group keeps its key as it grows. */\n id: string;\n entries: TranscriptEntry[];\n summary: string;\n failed: number;\n}\n\n/**\n * An entry passes through as the same object, so a keyed `each` over the\n * items re-renders only the rows that changed, not every row on every delta.\n */\nexport type TranscriptItem = TranscriptEntry | ToolGroup;\n\n/** Tools whose rows the transcript draws specially, never folded. */\nconst STANDALONE_TOOLS = new Set([\n \"Task\",\n \"Agent\",\n \"TodoWrite\",\n \"TaskCreate\",\n \"TaskUpdate\",\n \"ExitPlanMode\",\n \"EnterPlanMode\",\n \"AskUserQuestion\",\n]);\n\nfunction foldable(entry: TranscriptEntry): entry is ToolEntry {\n return (\n entry.kind === \"tool\" &&\n entry.result != null &&\n !entry.patch &&\n !STANDALONE_TOOLS.has(entry.name)\n );\n}\n\n/** A verb phrase, singular and plural, for one category of call. */\ninterface Category {\n key: string;\n phrase: (n: number) => string;\n}\n\nconst plural = (n: number, one: string, many: string) => `${n} ${n === 1 ? one : many}`;\nconst times = (n: number) => plural(n, \"time\", \"times\");\n\nconst SHELL: Category = {\n key: \"shell\",\n phrase: (n) => `ran ${plural(n, \"shell command\", \"shell commands\")}`,\n};\nconst READ: Category = { key: \"read\", phrase: (n) => `read ${plural(n, \"file\", \"files\")}` };\nconst EDIT: Category = { key: \"edit\", phrase: (n) => `edited ${plural(n, \"file\", \"files\")}` };\nconst WRITE: Category = { key: \"write\", phrase: (n) => `wrote ${plural(n, \"file\", \"files\")}` };\nconst SEARCH: Category = {\n key: \"search\",\n phrase: (n) => `searched for ${plural(n, \"pattern\", \"patterns\")}`,\n};\nconst LIST: Category = {\n key: \"list\",\n phrase: (n) => `listed ${plural(n, \"directory\", \"directories\")}`,\n};\nconst FETCH: Category = { key: \"fetch\", phrase: (n) => `fetched ${plural(n, \"page\", \"pages\")}` };\nconst WEB_SEARCH: Category = { key: \"websearch\", phrase: (n) => `searched the web ${times(n)}` };\n\n/** A shell command chaining, redirecting or spanning lines is just a shell command. */\nconst COMPOUND = /[|;&<>`$\\n]/;\nconst SHELL_VERBS: Record<string, Category> = {\n ls: LIST,\n tree: LIST,\n grep: SEARCH,\n rg: SEARCH,\n ag: SEARCH,\n cat: READ,\n head: READ,\n tail: READ,\n};\n\n/** A lone `ls` or `grep` reads as what it does, as the TUI shows it. */\nfunction shellCategory(input: string): Category {\n let command: string | undefined;\n try {\n command = readString(asRecord(JSON.parse(input))?.command)?.trim();\n } catch {\n // Truncated input: fall through to a plain shell command.\n }\n if (!command || COMPOUND.test(command)) return SHELL;\n const [verb, ...args] = command.split(/\\s+/);\n const category = SHELL_VERBS[verb] ?? SHELL;\n // `cat a b` is not \"read 1 file\"; only a read of exactly one file says so.\n if (category === READ && args.filter((a) => !a.startsWith(\"-\")).length !== 1) return SHELL;\n return category;\n}\n\nconst TOOL_CATEGORIES: Record<string, Category> = {\n BashOutput: SHELL,\n KillShell: SHELL,\n PowerShell: SHELL,\n Read: READ,\n Edit: EDIT,\n MultiEdit: EDIT,\n NotebookEdit: EDIT,\n Write: WRITE,\n Grep: SEARCH,\n Glob: SEARCH,\n LS: LIST,\n WebFetch: FETCH,\n WebSearch: WEB_SEARCH,\n};\n\n/**\n * Categories by entry. The view regroups on every streamed delta, and a Bash\n * call's category costs a JSON parse; an entry that changes is a new object.\n */\nconst categoryCache = new WeakMap<ToolEntry, Category>();\n\nfunction categorize(tool: ToolEntry): Category {\n let category = categoryCache.get(tool);\n if (!category) {\n category = categorizeUncached(tool);\n categoryCache.set(tool, category);\n }\n return category;\n}\n\nfunction categorizeUncached(tool: ToolEntry): Category {\n const mcp = parseMcpToolName(tool.name);\n if (mcp) return { key: `mcp:${mcp.server}`, phrase: (n) => `called ${mcp.server} ${times(n)}` };\n if (tool.name === \"Bash\") return shellCategory(tool.input);\n return (\n TOOL_CATEGORIES[tool.name] ?? {\n key: `tool:${tool.name}`,\n phrase: (n) => `used ${tool.name} ${times(n)}`,\n }\n );\n}\n\n/** \"Listed 1 directory, ran 2 shell commands\": categories in order of first use. */\nexport function summarizeToolRun(tools: ToolEntry[]): string {\n const counts = new Map<string, { category: Category; n: number }>();\n for (const tool of tools) {\n const category = categorize(tool);\n const seen = counts.get(category.key);\n if (seen) seen.n++;\n else counts.set(category.key, { category, n: 1 });\n }\n const text = [...counts.values()].map(({ category, n }) => category.phrase(n)).join(\", \");\n return text.charAt(0).toUpperCase() + text.slice(1);\n}\n\n/**\n * The transcript as the view draws it: entries in order, with every run of two\n * or more foldable calls (and the thinking among them) gathered into a group.\n */\nexport function groupToolRuns(entries: TranscriptEntry[]): TranscriptItem[] {\n const items: TranscriptItem[] = [];\n let run: TranscriptEntry[] = [];\n\n const flush = () => {\n // Thinking around the calls belongs to the prose beside it.\n let start = 0;\n let end = run.length;\n while (start < end && run[start].kind === \"thinking\") start++;\n while (end > start && run[end - 1].kind === \"thinking\") end--;\n const body = run.slice(start, end);\n const tools = body.filter(foldable);\n if (tools.length >= 2) {\n items.push(...run.slice(0, start));\n items.push({\n kind: \"group\",\n id: body[0].id,\n entries: body,\n summary: summarizeToolRun(tools),\n failed: tools.filter((t) => t.result?.ok === false).length,\n });\n items.push(...run.slice(end));\n } else {\n items.push(...run);\n }\n run = [];\n };\n\n for (const entry of entries) {\n if (entry.kind === \"thinking\" || foldable(entry)) {\n run.push(entry);\n continue;\n }\n flush();\n items.push(entry);\n }\n flush();\n return items;\n}\n","<script lang=\"ts\">\n\t/**\n\t * What one turn changed, drawn where the turn ends in the transcript. Closed,\n\t * it is one quiet line (\"Changed 3 files +42 −10\"); open, a card with the\n\t * turn's files and their counts. A file, or \"View diff\", opens the side\n\t * panel's Changes pane on this turn.\n\t */\n\timport { Button } from '$lib/components/ui/button';\n\timport { displayPath, statusLetter, sumCounts, type Turn } from '$lib/side-panel/changes';\n\n\tlet {\n\t\tturn,\n\t\troot,\n\t\topen = $bindable(false),\n\t\tlink\n\t}: {\n\t\tturn: Turn;\n\t\t/** Paths under it are shown relative to it. */\n\t\troot: string | null;\n\t\topen?: boolean;\n\t\t/** Where the Changes pane opens on this turn, at `file` or its first file. */\n\t\tlink: (file: string | null) => string;\n\t} = $props();\n\n\tconst totals = $derived(sumCounts(turn.files));\n\tconst count = $derived(`${turn.files.length} ${turn.files.length === 1 ? 'file' : 'files'}`);\n</script>\n\n{#if open}\n\t<section class=\"card\" aria-label=\"Files changed in this turn\">\n\t\t<header>\n\t\t\t<span class=\"label\">\n\t\t\t\tCHANGED FILES ({turn.files.length}) · <span class=\"add\">+{totals.additions}</span>\n\t\t\t\t<span class=\"del\">−{totals.deletions}</span>\n\t\t\t</span>\n\t\t\t<span class=\"grow\"></span>\n\t\t\t<Button variant=\"ghost\" size=\"sm\" class=\"h-[30px] border border-[#2f2a27] px-2.5 text-xs\" onclick={() => (open = false)}>\n\t\t\t\tCollapse\n\t\t\t</Button>\n\t\t\t<Button\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\tclass=\"h-[30px] border border-[#3f3a36] px-2.5 text-xs\"\n\t\t\t\thref={link(null)}\n\t\t\t\tdata-sveltekit-noscroll\n\t\t\t\tdata-sveltekit-keepfocus\n\t\t\t>\n\t\t\t\tView diff\n\t\t\t</Button>\n\t\t</header>\n\t\t<ul>\n\t\t\t{#each turn.files as f (f.file)}\n\t\t\t\t{@const letter = statusLetter(f)}\n\t\t\t\t<li>\n\t\t\t\t\t<a\n\t\t\t\t\t\thref={link(f.file)}\n\t\t\t\t\t\ttitle={f.oldPath ? `${f.oldPath} → ${f.file}` : f.file}\n\t\t\t\t\t\tdata-sveltekit-noscroll\n\t\t\t\t\t\tdata-sveltekit-keepfocus\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"st st-{letter === '?' ? 'u' : letter.toLowerCase()}\">{letter}</span>\n\t\t\t\t\t\t<span class=\"path\"><bdi>{displayPath(f.file, root)}</bdi></span>\n\t\t\t\t\t\t{#if f.binary}\n\t\t\t\t\t\t\t<span class=\"dim\">bin</span>\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t{#if f.additions}<span class=\"add\">+{f.additions}</span>{/if}\n\t\t\t\t\t\t\t{#if f.deletions}<span class=\"del\">−{f.deletions}</span>{/if}\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t{/each}\n\t\t</ul>\n\t</section>\n{:else}\n\t<button type=\"button\" class=\"line\" onclick={() => (open = true)} aria-expanded=\"false\">\n\t\t<iconify-icon icon=\"mdi:chevron-right\"></iconify-icon>\n\t\t<span>Changed {count}</span>\n\t\t<span class=\"nums\"><span class=\"add\">+{totals.additions}</span> <span class=\"del\">−{totals.deletions}</span></span>\n\t</button>\n{/if}\n\n<style>\n\t.card {\n\t\tmargin: 8px 0 10px 12px;\n\t\tborder: 1px solid #262220;\n\t\tborder-radius: 10px;\n\t\tbackground: #141210;\n\t}\n\theader {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 8px;\n\t\tpadding: 8px 10px 8px 14px;\n\t}\n\t.label {\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 10.5px;\n\t\tletter-spacing: 0.12em;\n\t\tcolor: #a8a29e;\n\t\twhite-space: nowrap;\n\t}\n\t.grow {\n\t\tflex: 1;\n\t}\n\tul {\n\t\tlist-style: none;\n\t\tmargin: 0;\n\t\tpadding: 6px;\n\t\tborder-top: 1px solid #221e1c;\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 12px;\n\t}\n\tli a {\n\t\tdisplay: flex;\n\t\tgap: 10px;\n\t\tpadding: 6px 10px;\n\t\tborder-radius: 6px;\n\t\tcolor: #d6d3d1;\n\t\ttext-decoration: none;\n\t}\n\tli a:hover {\n\t\tbackground: #1f1c1a;\n\t\tcolor: #fff;\n\t}\n\t.st {\n\t\twidth: 1ch;\n\t}\n\t.st-m,\n\t.st-r {\n\t\tcolor: #fbbf24;\n\t}\n\t.st-a {\n\t\tcolor: #4ade80;\n\t}\n\t.st-d {\n\t\tcolor: #f87171;\n\t}\n\t.st-u,\n\t.dim {\n\t\tcolor: #78716c;\n\t}\n\t.path {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t\t/* Cut from the left, so the file name stays in view. */\n\t\tdirection: rtl;\n\t\ttext-align: left;\n\t}\n\t.add {\n\t\tcolor: #4ade80;\n\t}\n\t.del {\n\t\tcolor: #f87171;\n\t}\n\t.line {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 8px;\n\t\tmargin: 6px 0 8px 12px;\n\t\tpadding: 6px 12px 6px 8px;\n\t\tborder: 1px solid #1f1c1a;\n\t\tborder-radius: 8px;\n\t\tbackground: transparent;\n\t\tcolor: #a8a29e;\n\t\tfont-size: 13px;\n\t\tcursor: pointer;\n\t}\n\t.line:hover {\n\t\tborder-color: #2f2a27;\n\t\tcolor: #d6d3d1;\n\t}\n\t.line iconify-icon {\n\t\tcolor: #78716c;\n\t\tfont-size: 15px;\n\t}\n\t.nums {\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 12px;\n\t}\n</style>\n","<script lang=\"ts\">\n\timport { untrack } from 'svelte';\n\timport { goto } from '$app/navigation';\n\timport { renderMarkdown } from '$lib/markdown';\n\timport type { TranscriptEntry } from '../../../../src/transcript/parser';\n\timport DictateButton from './DictateButton.svelte';\n\timport QuoteSelection from './QuoteSelection.svelte';\n\timport GithubRefCards from './GithubRefCards.svelte';\n\timport { keepsCaret, sayInto } from '$lib/dictation';\n\timport DialogCard from '$lib/components/DialogCard.svelte';\n\timport LoginCard from '$lib/components/LoginCard.svelte';\n\timport RewindCard from '$lib/components/RewindCard.svelte';\n\timport type { SubagentPayload } from '$lib/stores/transcript.svelte';\n\timport { toolIcon } from '$lib/tool-icons';\n\timport ToolLabel from '$lib/components/ToolLabel.svelte';\n\timport { toolFileTarget } from '$lib/side-panel/files';\n\timport SessionStateIndicator from '$lib/components/SessionStateIndicator.svelte';\n\timport { sessionStateVisual } from '$shared/session-state.js';\n\timport type { DeliveryInfo } from '$shared/types/ws-messages.js';\n\timport type { PaneActivity, PaneChoice } from '$shared/types/ws-messages.js';\n\timport type { LoginScreen } from '$shared/tmux/login.js';\n\timport type { RewindAction, RewindScreen } from '$shared/tmux/rewind.js';\n\timport { foldRewound } from '$shared/transcript/forks.js';\n\timport { formatSpinnerElapsed } from '$lib/format';\n\timport { Badge } from '$lib/components/ui/badge';\n\timport {\n\t\tparseGrillRound,\n\t\tcomposeGrillReply,\n\t\ttype GrillAnswer,\n\t\ttype GrillRound\n\t} from '$shared/transcript/grilling.js';\n\timport { groupToolRuns, type TranscriptItem } from '$shared/transcript/tool-groups.js';\n\timport TurnChangesCard from '$lib/components/TurnChangesCard.svelte';\n\timport { placeTurnChanges, type TranscriptChanges, type Turn } from '$lib/side-panel/changes';\n\n\tlet {\n\t\tentries,\n\t\tavailable,\n\t\tloaded,\n\t\tsessionState = null,\n\t\tcurrentAction = null,\n\t\tactivity = null,\n\t\tdelivered = [],\n\t\tsuggestion = null,\n\t\tonAcceptSuggestion,\n\t\tpaneChoice = null,\n\t\tpaneLogin = null,\n\t\tpaneRewind = null,\n\t\tonRewind,\n\t\tsubagents = {},\n\t\tonLoadSubagent,\n\t\tonSendKeys,\n\t\tonSendPaneText,\n\t\tolderCount = 0,\n\t\tloadingEarlier = false,\n\t\tonLoadEarlier,\n\t\tonSendReply,\n\t\tdictateTarget = null,\n\t\tbase = '',\n\t\tfileLink,\n\t\trepoSession = null,\n\t\tonOpenGithub,\n\t\tagentLink,\n\t\tturnChanges = null,\n\t\tchangesLink,\n\t\tonQuote\n\t}: {\n\t\tentries: TranscriptEntry[];\n\t\tavailable: boolean;\n\t\t/** False while the first snapshot is still in flight. */\n\t\tloaded: boolean;\n\t\t/** Live session state from the hooks (real-time, unlike the JSONL which lags). */\n\t\tsessionState?: 'busy' | 'idle' | 'waiting' | 'permission' | null;\n\t\tcurrentAction?: string | null;\n\t\t/** Claude Code's spinner line, split into its parts; null outside tmux or between frames. */\n\t\tactivity?: PaneActivity | null;\n\t\t/** What claude-mux's queue and steers handed the pane lately, newest last. */\n\t\tdelivered?: DeliveryInfo[];\n\t\t/** Claude Code's own ghost-text proposal for the next prompt. */\n\t\tsuggestion?: string | null;\n\t\t/** Accepts the suggestion (Tab then Enter in the pane). */\n\t\tonAcceptSuggestion?: () => void;\n\t\t/** The dialog the pane is drawing, as the poll read it; drawn as a card here. */\n\t\tpaneChoice?: PaneChoice | null;\n\t\t/** Claude Code's sign-in screen, which only the pane shows. */\n\t\tpaneLogin?: LoginScreen;\n\t\t/** Claude Code's rewind dialog, which only the pane shows. */\n\t\tpaneRewind?: RewindScreen;\n\t\t/** Works the rewind dialog; without it prompts offer no rewind. Resolves false when it failed. */\n\t\tonRewind?: (action: RewindAction) => Promise<boolean>;\n\t\t/** Sends a tmux key sequence (space-separated) to answer a dialog. */\n\t\tonSendKeys?: (keys: string) => Promise<void> | void;\n\t\t/** Types text into the pane as-is, for a dialog's free-text row or notes. */\n\t\tonSendPaneText?: (text: string) => Promise<void> | void;\n\t\t/** Subagent work, keyed by the Task tool_use id that spawned it. */\n\t\tsubagents?: Record<string, SubagentPayload>;\n\t\t/** A reader opened an agent's card: fetch everything it ran and reported. */\n\t\tonLoadSubagent?: (agentId: string) => void;\n\t\t/** Entries the server holds before the ones passed in `entries`. */\n\t\tolderCount?: number;\n\t\t/** A request for those older entries is in flight. */\n\t\tloadingEarlier?: boolean;\n\t\t/**\n\t\t * Asks for the next slice of older entries. Called before they render,\n\t\t * so the scroll container can note where the reader was.\n\t\t */\n\t\tonLoadEarlier?: () => void;\n\t\t/**\n\t\t * Sends a message as the next prompt, the way the composer does;\n\t\t * resolves false when the pane did not take it.\n\t\t */\n\t\tonSendReply?: (text: string) => Promise<boolean>;\n\t\t/** The session a question's own microphone records for; null where voice is off. */\n\t\tdictateTarget?: string | null;\n\t\t/** The relay path to the session's machine, '' for this one: where its images are read. */\n\t\tbase?: string;\n\t\t/** The link that opens a file a tool row touched or a message names, at a line; without it neither draws one. */\n\t\tfileLink?: (path: string, line: number | null) => string;\n\t\t/** The session whose repo a bare `#123` in a message is looked up in; null where it has none. */\n\t\trepoSession?: string | null;\n\t\t/** Opens a pull request or issue (`owner/name#n`) in the GitHub pane; without it a chip's click goes to github.com. */\n\t\tonOpenGithub?: (ref: string) => void;\n\t\t/** Where a subagent opens as a page of its own; without it agent cards link nowhere. */\n\t\tagentLink?: (agentId: string) => string;\n\t\t/** The session's turns that edited files, from the changes API's session source. */\n\t\tturnChanges?: TranscriptChanges | null;\n\t\t/** Where the Changes pane opens on turn `n`, at `file` or its first file; without it no summaries draw. */\n\t\tchangesLink?: (n: number, file: string | null) => string;\n\t\t/** Takes text selected in the transcript (\"Add to prompt\", Ctrl+L); without it a selection offers nothing. */\n\t\tonQuote?: (text: string) => void;\n\t} = $props();\n\n\tlet transcriptEl = $state<HTMLElement | null>(null);\n\n\t// ── file paths and GitHub links in messages ──────────────────────────\n\t// A link to a pull request or issue is only marked here; `GithubRefCards`\n\t// draws it as a chip once GitHub has answered.\n\t// A message's HTML is rendered once, so the href written into it is the\n\t// link as it stood then (read untracked: tracking it would render every\n\t// message again each time the URL moved). It serves a middle click or a\n\t// long press; a plain click asks `fileLink` afresh.\n\n\tfunction markdown(text: string): string {\n\t\tconst link = fileLink;\n\t\treturn renderMarkdown(text, {\n\t\t\tfiles: link && ((path, line) => untrack(() => link(path, line))),\n\t\t\tgithub: { bare: repoSession != null }\n\t\t});\n\t}\n\n\tfunction openFileLink(e: MouseEvent) {\n\t\tif (!fileLink || e.defaultPrevented || e.button !== 0) return;\n\t\tif (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) return;\n\t\tconst a = e.target instanceof Element ? e.target.closest<HTMLAnchorElement>('a.file-link') : null;\n\t\tconst path = a?.dataset.file;\n\t\tif (!path) return;\n\t\te.preventDefault();\n\t\tvoid goto(fileLink(path, Number(a.dataset.line) || null), { noScroll: true, keepFocus: true });\n\t}\n\n\t/** One listener for every file link in the transcript, since they arrive as HTML. */\n\tfunction fileLinks(node: HTMLElement) {\n\t\tnode.addEventListener('click', openFileLink);\n\t\treturn { destroy: () => node.removeEventListener('click', openFileLink) };\n\t}\n\n\t// ── live activity line ───────────────────────────────────────────────\n\t// The pane's elapsed count would move every second; the server sends the\n\t// turn's start instead, and the count ticks here.\n\n\tlet now = $state(Date.now());\n\tconst startedAt = $derived(activity?.started_at ?? null);\n\tconst ticking = $derived(startedAt !== null);\n\t$effect(() => {\n\t\tif (!ticking) return;\n\t\tnow = Date.now();\n\t\tconst id = setInterval(() => (now = Date.now()), 1000);\n\t\treturn () => clearInterval(id);\n\t});\n\n\t/** The spinner's parts, drawn as quiet pills beside its verb. */\n\tconst CHIP = 'border-[#2f2f36] px-[7px] py-0 text-[11.5px] leading-[18px] font-normal text-[#78716c]';\n\n\tconst elapsedText = $derived(\n\t\tstartedAt !== null ? formatSpinnerElapsed(Math.max(0, Math.floor((now - startedAt) / 1000))) : null\n\t);\n\n\t/** Entries as drawn: runs of routine tool calls fold into one summary row. */\n\tconst items = $derived(groupToolRuns(entries));\n\t/** The same, with each run of turns a rewind went back past folded into one. */\n\tconst blocks = $derived(foldRewound(items));\n\n\t// ── rewind ───────────────────────────────────────────────────────────\n\t// A prompt offers to go back to before it, through Claude Code's own\n\t// dialog. Only while the session is idle: Esc Esc would stop a turn.\n\n\t/** The prompt whose rewind is being opened. */\n\tlet rewinding = $state<string | null>(null);\n\tconst canRewind = $derived(sessionState === 'idle' && !paneRewind);\n\n\t/** Whether a prompt is one Claude Code's rewind list holds: a local command's (/context) is not. */\n\tconst rewindable = (e: TranscriptEntry) => e.kind === 'user' && !e.rewound && !e.command?.output;\n\n\t/** How many rows above \"(current)\" the list should hold this prompt, counting it. */\n\tfunction rowsBack(id: string): number {\n\t\tconst at = entries.findIndex((e) => e.id === id);\n\t\treturn entries.slice(at).filter(rewindable).length;\n\t}\n\n\tasync function rewindTo(entry: Extract<TranscriptEntry, { kind: 'user' }>) {\n\t\tif (!onRewind || rewinding || !canRewind) return;\n\t\trewinding = entry.id;\n\t\ttry {\n\t\t\tawait onRewind({ action: 'open', prompt: entry.text, back: rowsBack(entry.id) });\n\t\t} finally {\n\t\t\trewinding = null;\n\t\t}\n\t}\n\n\t/** Each turn's change summary, by the item it follows; the turn still running has none yet. */\n\tconst turnRunning = $derived(sessionState !== null && sessionState !== 'idle');\n\tconst turnCards = $derived(\n\t\tchangesLink && turnChanges\n\t\t\t? placeTurnChanges(items, turnChanges.turns, turnChanges.prompts, turnRunning)\n\t\t\t: new Map<string, Turn>()\n\t);\n\t/** The latest summary (the map runs in transcript order) starts open, the rest closed, until the reader says otherwise. */\n\tconst latestCard = $derived([...turnCards.values()].at(-1)?.id ?? null);\n\t/** By the turn's prompt id, which unlike its number never repeats across sessions in one pane. */\n\tlet cardOpen = $state<Record<string, boolean>>({});\n\n\t/**\n\t * Which tool cards and groups the reader has open, by entry id (a group\n\t * under `group:<first call>`). A run folds only as its calls finish, so the\n\t * card someone is reading can turn into a group under them; remembering it\n\t * here lets the new group open on that card instead of snapping shut.\n\t */\n\tlet opened = $state<Record<string, boolean>>({});\n\n\t// ── grilling rounds ──────────────────────────────────────────────────\n\t// A reply that asks a numbered round of questions, each with Claude's\n\t// recommendation, is drawn as a form: take the recommendation, write your\n\t// own answer, or leave the question open — and the reply is composed.\n\n\t/** Parsed rounds by entry text; a reply's text never changes once written. */\n\tconst roundCache = new Map<string, GrillRound | null>();\n\tfunction grillRound(text: string): GrillRound | null {\n\t\tif (!text.includes('❓')) return null;\n\t\tlet round = roundCache.get(text);\n\t\tif (round === undefined) {\n\t\t\tround = parseGrillRound(text);\n\t\t\troundCache.set(text, round);\n\t\t}\n\t\treturn round;\n\t}\n\n\t/**\n\t * The one round that can still be answered: the latest one with nothing\n\t * from you after it. Claude may go on talking past it — a background\n\t * agent reports in, and it says so — without the questions being any\n\t * less open; only your reply, or a question dialog, closes a round.\n\t * Older rounds are history, drawn read-only.\n\t */\n\tconst liveGrillId = $derived.by(() => {\n\t\tfor (let i = entries.length - 1; i >= 0; i--) {\n\t\t\tconst e = entries[i];\n\t\t\tif (e.kind === 'user' || e.kind === 'queued' || e.kind === 'ask' || e.kind === 'interrupt')\n\t\t\t\treturn null;\n\t\t\tif (e.kind === 'text' && grillRound(e.text)) return e.id;\n\t\t}\n\t\treturn null;\n\t});\n\n\tlet grillAnswers = $state<Record<string, Record<number, GrillAnswer>>>({});\n\tlet grillSending = $state<string | null>(null);\n\t/**\n\t * What you have done with a round on this page: sent its answers, or opened\n\t * a past one to answer again (a second thought, or a reply that went astray).\n\t */\n\tlet grillPhase = $state<Record<string, 'sent' | 'reopened'>>({});\n\n\tfunction answerOf(id: string, q: GrillRound['questions'][number]): GrillAnswer {\n\t\treturn grillAnswers[id]?.[q.n] ?? (q.recommended ? { mode: 'accept' } : { mode: 'own', text: '' });\n\t}\n\n\tfunction setAnswer(id: string, n: number, answer: GrillAnswer) {\n\t\tgrillAnswers[id] = { ...(grillAnswers[id] ?? {}), [n]: answer };\n\t}\n\n\t/** Typing makes the answer yours; clearing the field hands it back. */\n\tfunction typeAnswer(id: string, q: GrillRound['questions'][number], text: string) {\n\t\tif (text.trim() === '' && q.recommended) setAnswer(id, q.n, { mode: 'accept' });\n\t\telse setAnswer(id, q.n, { mode: 'own', text });\n\t}\n\n\tfunction ownText(id: string, q: GrillRound['questions'][number]): string {\n\t\tconst a = answerOf(id, q);\n\t\treturn a.mode === 'own' ? a.text : '';\n\t}\n\n\t/** Each question's own field, for dictation to find its caret. Read only in handlers. */\n\tconst ownFields: Record<string, HTMLTextAreaElement | undefined> = {};\n\tconst fieldKey = (id: string, q: GrillRound['questions'][number]) => `${id}:${q.n}`;\n\n\tfunction tally(id: string, round: GrillRound): string {\n\t\tlet agreed = 0;\n\t\tlet own = 0;\n\t\tlet open = 0;\n\t\tfor (const q of round.questions) {\n\t\t\tconst a = answerOf(id, q);\n\t\t\tif (a.mode === 'accept') agreed++;\n\t\t\telse if (a.mode === 'own' && a.text.trim()) own++;\n\t\t\telse open++;\n\t\t}\n\t\tconst parts: string[] = [];\n\t\tif (agreed) parts.push(`${agreed} agreed`);\n\t\tif (own) parts.push(`${own} in your words`);\n\t\tif (open) parts.push(`${open} left open`);\n\t\treturn parts.join(', ');\n\t}\n\n\tasync function sendRound(id: string, round: GrillRound) {\n\t\tif (!onSendReply || grillSending) return;\n\t\tconst answers: Record<number, GrillAnswer> = {};\n\t\tfor (const q of round.questions) answers[q.n] = answerOf(id, q);\n\t\tgrillSending = id;\n\t\ttry {\n\t\t\tif (await onSendReply(composeGrillReply(round, answers))) grillPhase[id] = 'sent';\n\t\t} finally {\n\t\t\tgrillSending = null;\n\t\t}\n\t}\n\n\t/** Grows a textarea with what is typed into it, up to the CSS max-height. */\n\tfunction autosize(el: HTMLTextAreaElement) {\n\t\tconst fit = () => {\n\t\t\tel.style.height = 'auto';\n\t\t\tel.style.height = `${el.scrollHeight}px`;\n\t\t};\n\t\tfit();\n\t\tel.addEventListener('input', fit);\n\t\treturn { destroy: () => el.removeEventListener('input', fit) };\n\t}\n\n\t/**\n\t * Only the newest unanswered dialog can be driven — older cards are history.\n\t * Claude Code also sends a permission notification for a question, which\n\t * a hook from before 0.29.1 took for a permission prompt; an open question\n\t * is answerable either way.\n\t */\n\tconst canAnswer = $derived(\n\t\t(sessionState === 'waiting' || sessionState === 'permission') && onSendKeys != null\n\t);\n\n\tconst liveAskId = $derived(\n\t\tcanAnswer\n\t\t\t? (entries.findLast((e) => e.kind === 'ask' && !e.answers && !e.rejected)?.id ?? null)\n\t\t\t: null\n\t);\n\n\t// ── the open dialog ──────────────────────────────────────────────────\n\t// A dialog is drawn as a card in the transcript, never in the composer:\n\t// an AskUserQuestion where its entry sits, anything else (a permission\n\t// prompt, a local command's picker) at the foot, where the turn stopped.\n\n\t/** Which dialog is open: the live question's entry, or the pane's own. */\n\tconst dialogKey = $derived(liveAskId ?? (paneChoice || canAnswer ? 'pane' : null));\n\t/** The pane drew this dialog at some point, so its going away means it was answered. */\n\tlet seenLive = $state<string | null>(null);\n\t/** The card sent the keys that close this dialog, with no pane read to confirm it. */\n\tlet submitted = $state<string | null>(null);\n\t$effect(() => {\n\t\tif (dialogKey === null) {\n\t\t\tseenLive = null;\n\t\t\tsubmitted = null;\n\t\t} else if (paneChoice) {\n\t\t\tseenLive = dialogKey;\n\t\t\t// The pane still draws it, whatever keys the card sent blind.\n\t\t\tsubmitted = null;\n\t\t}\n\t});\n\t/** Answered and gone from the pane, while the hooks may still say it is open. */\n\tconst dialogClosed = $derived(\n\t\tdialogKey !== null &&\n\t\t\t((seenLive === dialogKey && paneChoice === null) || submitted === dialogKey)\n\t);\n\t/**\n\t * Questions answered here before the log says so. The JSONL records the\n\t * answers a moment after the dialog closes, and the card should not flash\n\t * back to open in between.\n\t */\n\tlet answeredAsks = $state<Record<string, true>>({});\n\tlet lastLiveAsk: { id: string; seen: boolean } | null = null;\n\t$effect(() => {\n\t\tif (liveAskId && dialogClosed) answeredAsks[liveAskId] = true;\n\t\t// The hooks can leave `waiting` on the same tick the pane drops the\n\t\t// dialog, so a question seen live that stops being live was answered.\n\t\tif (lastLiveAsk && lastLiveAsk.id !== liveAskId && lastLiveAsk.seen) {\n\t\t\tansweredAsks[lastLiveAsk.id] = true;\n\t\t}\n\t\tlastLiveAsk = liveAskId ? { id: liveAskId, seen: seenLive === liveAskId } : null;\n\t});\n\t/** The pane's dialog at the foot, when it is not the live question's. */\n\tconst footDialog = $derived(liveAskId === null && paneChoice !== null);\n\n\t/**\n\t * The turns claude-mux delivered from its queue or as a steer, by entry id.\n\t * Each delivery labels the first turn after it that carries its text, so\n\t * the same words sent twice label two turns, not one.\n\t */\n\tconst deliveredVia = $derived.by(() => {\n\t\tconst out = new Map<string, DeliveryInfo['via']>();\n\t\tfor (const d of delivered) {\n\t\t\tconst text = d.text.trim();\n\t\t\t// The JSONL stamps the turn a moment after the paste; allow for clock skew.\n\t\t\tconst turn = entries.find(\n\t\t\t\t(e) =>\n\t\t\t\t\t// A delivered queued entry is hidden behind its user turn.\n\t\t\t\t\t(e.kind === 'user' || (e.kind === 'queued' && !e.delivered)) &&\n\t\t\t\t\t!out.has(e.id) &&\n\t\t\t\t\te.ts >= d.at - 5000 &&\n\t\t\t\t\te.text.trim() === text\n\t\t\t);\n\t\t\tif (turn) out.set(turn.id, d.via);\n\t\t}\n\t\treturn out;\n\t});\n\n\tfunction formatTime(ts: number): string {\n\t\ttry {\n\t\t\treturn new Date(ts).toLocaleTimeString(undefined, {\n\t\t\t\thour: '2-digit',\n\t\t\t\tminute: '2-digit'\n\t\t\t});\n\t\t} catch {\n\t\t\treturn '';\n\t\t}\n\t}\n\n\tinterface InputField {\n\t\tkey: string;\n\t\tvalue: string;\n\t}\n\n\t/**\n\t * Split a tool's input into the shell command (when it has one), short\n\t * key/value rows and long text blocks — one pass, since the template would\n\t * otherwise filter the same list three times per render.\n\t */\n\tfunction inputPanes(\n\t\tinputJson: string,\n\t\ttoolName: string\n\t): { cmd: string | null; short: InputField[]; long: InputField[] } {\n\t\tlet entries: [string, unknown][];\n\t\ttry {\n\t\t\tentries = Object.entries(JSON.parse(inputJson) as Record<string, unknown>);\n\t\t} catch {\n\t\t\treturn { cmd: null, short: [], long: [{ key: 'input', value: inputJson }] };\n\t\t}\n\t\tconst isShell = toolName.toLowerCase().includes('bash');\n\t\tlet cmd: string | null = null;\n\t\tconst short: InputField[] = [];\n\t\tconst long: InputField[] = [];\n\t\tfor (const [key, raw] of entries) {\n\t\t\tconst value = typeof raw === 'string' ? raw : (JSON.stringify(raw, null, 2) ?? String(raw));\n\t\t\tif (isShell && key === 'command') {\n\t\t\t\tcmd = value;\n\t\t\t} else if (value.includes('\\n') || value.length > 90) {\n\t\t\t\tlong.push({ key, value });\n\t\t\t} else {\n\t\t\t\tshort.push({ key, value });\n\t\t\t}\n\t\t}\n\t\treturn { cmd, short, long };\n\t}\n\n</script>\n\n{#snippet grill(id: string, round: GrillRound)}\n\t{@const phase = grillPhase[id]}\n\t{@const live =\n\t\tonSendReply != null && (phase === 'reopened' || (id === liveGrillId && phase !== 'sent'))}\n\t<!-- A busy session takes the reply into Claude Code's own queue, as the\n\t composer's does; only an open dialog would swallow it as keystrokes. -->\n\t{@const ready = live && sessionState !== 'waiting' && sessionState !== 'permission'}\n\t{#if round.intro}\n\t\t<!-- eslint-disable-next-line svelte/no-at-html-tags -- markdown output with raw HTML escaped above -->\n\t\t<div class=\"assistant-text markdown\">{@html markdown(round.intro)}</div>\n\t{/if}\n\t<section class=\"grill\" class:live aria-label=\"Questions from Claude\">\n\t\t{#each round.questions as q (q.n)}\n\t\t\t{@const a = answerOf(id, q)}\n\t\t\t<div class=\"gq\" class:skipped={live && a.mode === 'skip'}>\n\t\t\t\t<span class=\"gq-n\">Q{q.n}</span>\n\t\t\t\t<div class=\"gq-main\">\n\t\t\t\t\t{#if q.title}<p class=\"gq-title\">{q.title}</p>{/if}\n\t\t\t\t\t<!-- eslint-disable-next-line svelte/no-at-html-tags -- markdown output with raw HTML escaped above -->\n\t\t\t\t\t<div class=\"gq-body markdown\">{@html markdown(q.body)}</div>\n\t\t\t\t\t{#if q.recommended}\n\t\t\t\t\t\t{#if live}\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclass=\"gq-rec\"\n\t\t\t\t\t\t\t\tclass:on={a.mode === 'accept'}\n\t\t\t\t\t\t\t\taria-pressed={a.mode === 'accept'}\n\t\t\t\t\t\t\t\tonclick={() => setAnswer(id, q.n, { mode: 'accept' })}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<iconify-icon\n\t\t\t\t\t\t\t\t\ticon={a.mode === 'accept' ? 'mdi:check-circle' : 'mdi:circle-outline'}\n\t\t\t\t\t\t\t\t></iconify-icon>\n\t\t\t\t\t\t\t\t<!-- No file links here: the whole row is the button. -->\n\t\t\t\t\t\t\t\t<!-- eslint-disable-next-line svelte/no-at-html-tags -- markdown output with raw HTML escaped above -->\n\t\t\t\t\t\t\t\t<span class=\"markdown\">{@html renderMarkdown(q.recommended)}</span>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t<div class=\"gq-rec past\">\n\t\t\t\t\t\t\t\t<iconify-icon icon=\"mdi:arrow-right\"></iconify-icon>\n\t\t\t\t\t\t\t\t<!-- eslint-disable-next-line svelte/no-at-html-tags -- markdown output with raw HTML escaped above -->\n\t\t\t\t\t\t\t\t<span class=\"markdown\">{@html markdown(q.recommended)}</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t{/if}\n\t\t\t\t\t{#if live}\n\t\t\t\t\t\t<div class=\"gq-own\">\n\t\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\t\trows=\"1\"\n\t\t\t\t\t\t\t\tuse:autosize\n\t\t\t\t\t\t\t\tbind:this={ownFields[fieldKey(id, q)]}\n\t\t\t\t\t\t\t\t{@attach keepsCaret}\n\t\t\t\t\t\t\t\tplaceholder={q.recommended ? 'Or answer in your own words' : 'Your answer'}\n\t\t\t\t\t\t\t\tvalue={ownText(id, q)}\n\t\t\t\t\t\t\t\toninput={(e) => typeAnswer(id, q, e.currentTarget.value)}\n\t\t\t\t\t\t\t\tclass:filled={a.mode === 'own' && a.text.trim() !== ''}\n\t\t\t\t\t\t\t></textarea>\n\t\t\t\t\t\t\t{#if dictateTarget}\n\t\t\t\t\t\t\t\t<DictateButton\n\t\t\t\t\t\t\t\t\ttarget={dictateTarget}\n\t\t\t\t\t\t\t\t\tonText={(text) =>\n\t\t\t\t\t\t\t\t\t\tvoid sayInto(ownFields[fieldKey(id, q)], ownText(id, q), text, (t) =>\n\t\t\t\t\t\t\t\t\t\t\ttypeAnswer(id, q, t)\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclass=\"gq-skip\"\n\t\t\t\t\t\t\t\tclass:on={a.mode === 'skip'}\n\t\t\t\t\t\t\t\taria-pressed={a.mode === 'skip'}\n\t\t\t\t\t\t\t\ttitle=\"Leave this question open for a later round\"\n\t\t\t\t\t\t\t\tonclick={() =>\n\t\t\t\t\t\t\t\t\tsetAnswer(id, q.n, a.mode === 'skip' ? (q.recommended ? { mode: 'accept' } : { mode: 'own', text: '' }) : { mode: 'skip' })}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{a.mode === 'skip' ? 'Left open' : 'Skip'}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t{/if}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t{/each}\n\t\t{#if live}\n\t\t\t<footer class=\"grill-foot\">\n\t\t\t\t<span class=\"grill-tally\">{tally(id, round)}</span>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"grill-send\"\n\t\t\t\t\tdisabled={!ready || grillSending === id}\n\t\t\t\t\ttitle={ready\n\t\t\t\t\t\t? 'Send these answers as your next message'\n\t\t\t\t\t\t: 'Answer the open dialog first; these go in after it'}\n\t\t\t\t\tonclick={() => void sendRound(id, round)}\n\t\t\t\t>\n\t\t\t\t\t{grillSending === id ? 'Sending…' : 'Send answers'}\n\t\t\t\t</button>\n\t\t\t\t{#if id !== liveGrillId}\n\t\t\t\t\t<button type=\"button\" class=\"grill-again\" onclick={() => delete grillPhase[id]}>\n\t\t\t\t\t\tCancel\n\t\t\t\t\t</button>\n\t\t\t\t{/if}\n\t\t\t</footer>\n\t\t{:else if onSendReply}\n\t\t\t<footer class=\"grill-foot\">\n\t\t\t\t<span class=\"grill-tally\">{phase === 'sent' ? 'Answers sent' : ''}</span>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"grill-again\"\n\t\t\t\t\ttitle=\"Open these questions again and send another set of answers\"\n\t\t\t\t\tonclick={() => (grillPhase[id] = 'reopened')}\n\t\t\t\t>\n\t\t\t\t\t<iconify-icon icon=\"mdi:reply-outline\"></iconify-icon>\n\t\t\t\t\tAnswer again\n\t\t\t\t</button>\n\t\t\t</footer>\n\t\t{/if}\n\t</section>\n\t{#if round.outro}\n\t\t<!-- eslint-disable-next-line svelte/no-at-html-tags -- markdown output with raw HTML escaped above -->\n\t\t<div class=\"assistant-text markdown\">{@html markdown(round.outro)}</div>\n\t{/if}\n{/snippet}\n\n{#if onQuote}<QuoteSelection root={transcriptEl} {onQuote} />{/if}\n<div class=\"transcript\" use:fileLinks bind:this={transcriptEl}>\n\t{#if !loaded}\n\t\t<div class=\"empty\">\n\t\t\t<iconify-icon class=\"spin\" icon=\"mdi:loading\" style=\"font-size: 32px;\"></iconify-icon>\n\t\t\t<p>Loading transcript…</p>\n\t\t</div>\n\t{:else if !available && sessionState && sessionState !== 'idle'}\n\t\t<!-- The turn is under way; Claude Code writes the log as each block\n\t\t finishes, and the live row below says what it is doing meanwhile. -->\n\t\t<div class=\"empty starting\">\n\t\t\t<iconify-icon icon=\"mdi:text-box-plus-outline\" style=\"font-size: 32px;\"></iconify-icon>\n\t\t\t<p>Starting… waiting for the first entry.</p>\n\t\t</div>\n\t{:else if !available}\n\t\t<div class=\"empty\">\n\t\t\t<iconify-icon icon=\"mdi:text-box-search-outline\" style=\"font-size: 32px;\"></iconify-icon>\n\t\t\t<p>No transcript for this session yet.</p>\n\t\t\t<p class=\"hint\">It appears as soon as Claude Code writes its session log.</p>\n\t\t</div>\n\t{/if}\n\t{#if olderCount > 0}\n\t\t<div class=\"earlier\">\n\t\t\t<button type=\"button\" disabled={loadingEarlier} onclick={() => onLoadEarlier?.()}>\n\t\t\t\t<iconify-icon icon={loadingEarlier ? 'mdi:loading' : 'mdi:chevron-double-up'}\n\t\t\t\t></iconify-icon>\n\t\t\t\t{loadingEarlier ? 'Loading…' : 'Load earlier'}\n\t\t\t</button>\n\t\t\t<span class=\"earlier-count\">{olderCount} older {olderCount === 1 ? 'entry' : 'entries'}</span>\n\t\t</div>\n\t{/if}\n\t{#snippet turnGlyph(dictated: boolean)}\n\t\t{#if dictated}\n\t\t\t<iconify-icon class=\"mic-glyph\" icon=\"mdi:microphone\" title=\"dictated\"></iconify-icon>\n\t\t{:else}\n\t\t\t<span class=\"prompt-glyph\">❯</span>\n\t\t{/if}\n\t{/snippet}\n\t{#snippet via(id: string)}\n\t\t{@const how = deliveredVia.get(id)}\n\t\t{#if how}\n\t\t\t<span\n\t\t\t\tclass=\"via\"\n\t\t\t\ttitle={how === 'steer' ? 'Steered into the running turn' : 'Sent from the queue'}\n\t\t\t\t>{how === 'steer' ? 'Steer' : 'Queued'}</span\n\t\t\t>\n\t\t{/if}\n\t{/snippet}\n\t{#snippet row(entry: TranscriptEntry)}\n\t\t{#if entry.kind === 'user'}\n\t\t\t<div class=\"user-block\" class:dictated={entry.dictated} data-entry-id={entry.id}>\n\t\t\t\t{@render turnGlyph(entry.dictated ?? false)}\n\t\t\t\t<!-- A slash command is a different kind of turn: not prose the agent\n\t\t\t\t read, but an instruction to the harness. Show the command as a\n\t\t\t\t token so it is scannable, and its arguments as ordinary prompt\n\t\t\t\t text — the raw <command-*> tags never reach the reader. -->\n\t\t\t\t{#if entry.command}\n\t\t\t\t\t<div class=\"user-text\">\n\t\t\t\t\t\t<span class=\"slash-name\">{entry.command.name}</span>{#if entry.command.args}<span\n\t\t\t\t\t\t\t\tclass=\"slash-args\">{entry.command.args}</span\n\t\t\t\t\t\t\t>{/if}\n\t\t\t\t\t\t<!-- A local command answers on the spot — \"Set model to Fable\" —\n\t\t\t\t\t\t and that answer is the harness's, not the agent's, so it sits\n\t\t\t\t\t\t under the command rather than as a turn. -->\n\t\t\t\t\t\t{#if entry.command.output}\n\t\t\t\t\t\t\t<div class=\"slash-output\">{entry.command.output}</div>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</div>\n\t\t\t\t{:else}\n\t\t\t\t\t<div class=\"user-text\">{entry.text}</div>\n\t\t\t\t{/if}\n\t\t\t\t<span class=\"time\">\n\t\t\t\t\t{#if onRewind && rewindable(entry)}\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"rewind-btn\"\n\t\t\t\t\t\t\tdisabled={!canRewind || rewinding !== null}\n\t\t\t\t\t\t\ttitle={canRewind ? 'Rewind to before this prompt' : 'Stop the turn first'}\n\t\t\t\t\t\t\taria-label=\"Rewind to before this prompt\"\n\t\t\t\t\t\t\tonclick={() => void rewindTo(entry)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<iconify-icon icon={rewinding === entry.id ? 'mdi:loading' : 'mdi:history'}></iconify-icon>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t{/if}\n\t\t\t\t\t{@render via(entry.id)}{formatTime(entry.ts)}\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t{:else if entry.kind === 'queued'}\n\t\t\t{#if !entry.delivered}\n\t\t\t\t<div class=\"user-block\" class:dictated={entry.dictated} data-entry-id={entry.id}>\n\t\t\t\t\t{@render turnGlyph(entry.dictated ?? false)}\n\t\t\t\t\t<div class=\"user-text\">{entry.text}</div>\n\t\t\t\t\t<span class=\"time\" title=\"sent while the agent was working\">\n\t\t\t\t\t\t{@render via(entry.id)}\n\t\t\t\t\t\t<iconify-icon icon=\"mdi:clock-fast\"></iconify-icon>\n\t\t\t\t\t\t{formatTime(entry.ts)}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t{/if}\n\t\t{:else if entry.kind === 'peer'}\n\t\t\t<div class=\"user-block peer\">\n\t\t\t\t<iconify-icon class=\"peer-icon\" icon=\"mdi:swap-horizontal\"></iconify-icon>\n\t\t\t\t<div class=\"peer-body\">\n\t\t\t\t\t{#if entry.from}<span class=\"peer-from\">{entry.from}</span>{/if}\n\t\t\t\t\t<div class=\"user-text peer-text\">{entry.text}</div>\n\t\t\t\t</div>\n\t\t\t\t<span class=\"time peer-time\">{formatTime(entry.ts)}</span>\n\t\t\t</div>\n\t\t{:else if entry.kind === 'interrupt'}\n\t\t\t<!-- Escape stopped the turn. Claude Code logs it as a user line, but\n\t\t\t nobody typed it, so it reads as a log note like \"Question dismissed\". -->\n\t\t\t<div class=\"row note\">\n\t\t\t\t<iconify-icon icon=\"mdi:stop-circle-outline\"></iconify-icon>\n\t\t\t\t<span class=\"row-summary\">{entry.text}</span>\n\t\t\t\t<span class=\"time\">{formatTime(entry.ts)}</span>\n\t\t\t</div>\n\t\t{:else if entry.kind === 'compact'}\n\t\t\t<!-- The conversation was folded here. Everything above it is what the\n\t\t\t model no longer sees; the summary is what it reads instead. -->\n\t\t\t<details class=\"compact\">\n\t\t\t\t<summary>\n\t\t\t\t\t<iconify-icon icon=\"mdi:arrow-collapse-vertical\"></iconify-icon>\n\t\t\t\t\t<span class=\"compact-title\">\n\t\t\t\t\t\tContext compacted{entry.trigger === 'manual' ? ' (/compact)' : ' automatically'}\n\t\t\t\t\t</span>\n\t\t\t\t\t{#if entry.preTokens && entry.postTokens}\n\t\t\t\t\t\t<span class=\"compact-tokens\">\n\t\t\t\t\t\t\t{Math.round(entry.preTokens / 1000)}k → {Math.round(entry.postTokens / 1000)}k tokens\n\t\t\t\t\t\t</span>\n\t\t\t\t\t{/if}\n\t\t\t\t\t<span class=\"time\">{formatTime(entry.ts)}</span>\n\t\t\t\t</summary>\n\t\t\t\t{#if entry.summary}\n\t\t\t\t\t<div class=\"compact-summary\">{@html markdown(entry.summary)}</div>\n\t\t\t\t{:else}\n\t\t\t\t\t<p class=\"compact-summary muted\">Summary not written yet.</p>\n\t\t\t\t{/if}\n\t\t\t</details>\n\t\t{:else if entry.kind === 'ask'}\n\t\t\t{#if entry.answers || entry.rejected}\n\t\t\t\t<details class=\"row ask-done\">\n\t\t\t\t\t<summary>\n\t\t\t\t\t\t<iconify-icon icon=\"mdi:chat-question-outline\"></iconify-icon>\n\t\t\t\t\t\t<span class=\"row-summary\">\n\t\t\t\t\t\t\t{#if entry.rejected}\n\t\t\t\t\t\t\t\tQuestion dismissed\n\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t{entry.questions\n\t\t\t\t\t\t\t\t\t.map((q) => `${q.header}: ${entry.answers?.[q.question] ?? '—'}`)\n\t\t\t\t\t\t\t\t\t.join(' · ')}\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<iconify-icon class=\"tool-status ok\" icon=\"mdi:check\"></iconify-icon>\n\t\t\t\t\t</summary>\n\t\t\t\t\t<div class=\"ask-detail\">\n\t\t\t\t\t\t{#each entry.questions as q (q.question)}\n\t\t\t\t\t\t\t<div class=\"ask-q-review\">\n\t\t\t\t\t\t\t\t<span class=\"ask-header-chip\">{q.header}</span>\n\t\t\t\t\t\t\t\t<p class=\"ask-question\">{q.question}</p>\n\t\t\t\t\t\t\t\t{#each q.options as opt (opt.label)}\n\t\t\t\t\t\t\t\t\t<div class=\"ask-opt-review\" class:chosen={entry.answers?.[q.question] === opt.label}>\n\t\t\t\t\t\t\t\t\t\t{opt.label}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t{#if entry.answers && !q.options.some((o) => o.label === entry.answers?.[q.question])}\n\t\t\t\t\t\t\t\t\t<div class=\"ask-opt-review chosen\">{entry.answers?.[q.question]}</div>\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</div>\n\t\t\t\t</details>\n\t\t\t{:else if entry.id === liveAskId || answeredAsks[entry.id]}\n\t\t\t\t<DialogCard\n\t\t\t\t\task={entry}\n\t\t\t\t\tchoice={entry.id === liveAskId ? paneChoice : null}\n\t\t\t\t\tpermission={sessionState === 'permission'}\n\t\t\t\t\tclosed={entry.id !== liveAskId || dialogClosed}\n\t\t\t\t\tonKeys={(keys) => onSendKeys?.(keys)}\n\t\t\t\t\tonText={(text) => onSendPaneText?.(text)}\n\t\t\t\t\tonSubmitted={() => (submitted = entry.id)}\n\t\t\t\t\t{dictateTarget}\n\t\t\t\t/>\n\t\t\t{:else}\n\t\t\t\t<div class=\"row note\">\n\t\t\t\t\t<iconify-icon icon=\"mdi:chat-question-outline\"></iconify-icon>\n\t\t\t\t\t<span class=\"row-summary\">\n\t\t\t\t\t\tQuestion not answered: {entry.questions.map((q) => q.header).join(' · ')}\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"time\">{formatTime(entry.ts)}</span>\n\t\t\t\t</div>\n\t\t\t{/if}\n\t\t{:else if entry.kind === 'text' && grillRound(entry.text)}\n\t\t\t{@render grill(entry.id, grillRound(entry.text)!)}\n\t\t{:else if entry.kind === 'text'}\n\t\t\t<!-- eslint-disable-next-line svelte/no-at-html-tags -- markdown output with raw HTML escaped above -->\n\t\t\t<div class=\"assistant-text markdown\">{@html markdown(entry.text)}</div>\n\t\t{:else if entry.kind === 'thinking'}\n\t\t\t<details class=\"row thinking\">\n\t\t\t\t<summary>\n\t\t\t\t\t<iconify-icon icon=\"mdi:thought-bubble-outline\"></iconify-icon>\n\t\t\t\t\t<span class=\"row-summary\">Thinking</span>\n\t\t\t\t</summary>\n\t\t\t\t<div class=\"thinking-text\">{entry.text}</div>\n\t\t\t</details>\n\t\t{:else if entry.kind === 'tool'}\n\t\t\t{@const input = inputPanes(entry.input, entry.name)}\n\t\t\t{@const showResult = entry.result != null && !(entry.patch && entry.result.ok)}\n\t\t\t{@const sub = subagents[entry.id]}\n\t\t\t{@const doing = sub?.running ? sub.activity[sub.activity.length - 1] : null}\n\t\t\t<details\n\t\t\t\tclass=\"row tool-card\"\n\t\t\t\tclass:error={entry.result?.ok === false}\n\t\t\t\tclass:agent={sub != null}\n\t\t\t\tdata-entry-id={entry.id}\n\t\t\t\topen={opened[entry.id] ?? false}\n\t\t\t\tontoggle={(e) => {\n\t\t\t\t\topened[entry.id] = e.currentTarget.open;\n\t\t\t\t\tif (sub && !sub.full && e.currentTarget.open) onLoadSubagent?.(sub.agentId);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<summary>\n\t\t\t\t\t<iconify-icon class=\"tool-icon\" icon={toolIcon(entry.name)}></iconify-icon>\n\t\t\t\t\t{#if sub}\n\t\t\t\t\t\t<span class=\"row-summary agent-line\">\n\t\t\t\t\t\t\t<span class=\"agent-name\">{sub.description ?? entry.summary}</span>\n\t\t\t\t\t\t\t{#if sub.agentType}<span class=\"agent-type\">{sub.agentType}</span>{/if}\n\t\t\t\t\t\t\t{#if doing}\n\t\t\t\t\t\t\t\t<span class=\"agent-doing mono\"><ToolLabel name={doing.name} summary={doing.summary} /></span>\n\t\t\t\t\t\t\t{:else if sub.activity.length > 0}\n\t\t\t\t\t\t\t\t<span class=\"agent-count\">{sub.activity.length} tools</span>\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t{#if agentLink}\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\tclass=\"tool-open\"\n\t\t\t\t\t\t\t\thref={agentLink(sub.agentId)}\n\t\t\t\t\t\t\t\ttitle=\"Open agent\"\n\t\t\t\t\t\t\t\taria-label=\"Open agent\"\n\t\t\t\t\t\t\t\tonclick={(e) => e.stopPropagation()}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<iconify-icon icon=\"mdi:open-in-new\"></iconify-icon>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t<span class=\"row-summary mono\"><ToolLabel name={entry.name} summary={entry.summary} /></span>\n\t\t\t\t\t\t{@const opens = fileLink ? toolFileTarget(entry) : null}\n\t\t\t\t\t\t{#if opens && fileLink}\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\tclass=\"tool-open\"\n\t\t\t\t\t\t\t\thref={fileLink(opens.path, opens.line)}\n\t\t\t\t\t\t\t\ttitle=\"Open in Files{opens.line ? ` at line ${opens.line}` : ''}\"\n\t\t\t\t\t\t\t\taria-label=\"Open in Files\"\n\t\t\t\t\t\t\t\tdata-sveltekit-noscroll\n\t\t\t\t\t\t\t\tdata-sveltekit-keepfocus\n\t\t\t\t\t\t\t\tonclick={(e) => e.stopPropagation()}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<iconify-icon icon=\"mdi:file-eye-outline\"></iconify-icon>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t{/if}\n\t\t\t\t\t{#if entry.result}\n\t\t\t\t\t\t<iconify-icon\n\t\t\t\t\t\t\tclass=\"tool-status {entry.result.ok ? 'ok' : 'fail'}\"\n\t\t\t\t\t\t\ticon={entry.result.ok ? 'mdi:check' : 'mdi:alert-circle-outline'}\n\t\t\t\t\t\t></iconify-icon>\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t<iconify-icon class=\"tool-status running spin\" icon=\"mdi:loading\"></iconify-icon>\n\t\t\t\t\t{/if}\n\t\t\t\t</summary>\n\t\t\t\t{#if sub}\n\t\t\t\t\t<div class=\"agent-detail\">\n\t\t\t\t\t\t<div class=\"agent-meta\">\n\t\t\t\t\t\t\t{#if sub.model}<span class=\"agent-chip\">{sub.model}</span>{/if}\n\t\t\t\t\t\t\t<span class=\"agent-chip\">{sub.activity.length} tools</span>\n\t\t\t\t\t\t\t{#if sub.running}<span class=\"agent-chip live\">running</span>{/if}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{#if sub.trimmed > 0}\n\t\t\t\t\t\t\t<div class=\"agent-trimmed\">{sub.trimmed} earlier calls not shown</div>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t<ol class=\"agent-activity\">\n\t\t\t\t\t\t\t{#each sub.activity as act (act.id)}\n\t\t\t\t\t\t\t\t<li class:pending={act.ok === null} class:failed={act.ok === false}>\n\t\t\t\t\t\t\t\t\t<iconify-icon class=\"tool-icon\" icon={toolIcon(act.name)}></iconify-icon>\n\t\t\t\t\t\t\t\t\t<span class=\"mono\"><ToolLabel name={act.name} summary={act.summary} /></span>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</ol>\n\t\t\t\t\t\t{#if sub.report}\n\t\t\t\t\t\t\t<div class=\"agent-report\">\n\t\t\t\t\t\t\t\t<header class=\"pane-head\">Report</header>\n\t\t\t\t\t\t\t\t<!-- eslint-disable-next-line svelte/no-at-html-tags -- markdown output with raw HTML escaped above -->\n\t\t\t\t\t\t\t\t<div class=\"markdown\">{@html markdown(sub.report)}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</div>\n\t\t\t\t{:else}\n\t\t\t\t<div class=\"tool-detail\" class:two-col={showResult && !entry.patch}>\n\t\t\t\t\t{#if entry.patch}\n\t\t\t\t\t\t<section class=\"pane diff-pane\">\n\t\t\t\t\t\t\t<header class=\"pane-head\">\n\t\t\t\t\t\t\t\tDiff\n\t\t\t\t\t\t\t\t{#if entry.patch.file}<span class=\"diff-file\">{entry.patch.file.split('/').pop()}</span>{/if}\n\t\t\t\t\t\t\t</header>\n\t\t\t\t\t\t\t<pre class=\"diff\">{#each entry.patch.hunks as hunk, hi (hi)}<span class=\"diff-hunk\">{hunk.header}</span>{'\\n'}{#each hunk.lines as dl, li (li)}<span\n\t\t\t\t\t\t\t\t\t\tclass={dl.startsWith('+') ? 'diff-add' : dl.startsWith('-') ? 'diff-del' : 'diff-ctx'}>{dl}</span>{'\\n'}{/each}{/each}</pre>\n\t\t\t\t\t\t</section>\n\t\t\t\t\t{:else if input.cmd || input.short.length > 0 || input.long.length > 0}\n\t\t\t\t\t\t<section class=\"pane\">\n\t\t\t\t\t\t\t<header class=\"pane-head\">Input</header>\n\t\t\t\t\t\t\t{#if input.cmd}\n\t\t\t\t\t\t\t\t<pre class=\"cmd\"><span class=\"cmd-glyph\">$</span> {input.cmd}</pre>\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t{#each input.short as field (field.key)}\n\t\t\t\t\t\t\t\t<div class=\"kv\"><span class=\"k\">{field.key}</span><span class=\"v\">{field.value}</span></div>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t{#each input.long as field (field.key)}\n\t\t\t\t\t\t\t\t<div class=\"kv-long\">\n\t\t\t\t\t\t\t\t\t<span class=\"k\">{field.key}</span>\n\t\t\t\t\t\t\t\t\t<pre>{field.value}</pre>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</section>\n\t\t\t\t\t{/if}\n\t\t\t\t\t{#if showResult && entry.result}\n\t\t\t\t\t\t<section class=\"pane result\" class:ok={entry.result.ok} class:fail={!entry.result.ok}>\n\t\t\t\t\t\t\t<header class=\"pane-head\">{entry.result.ok ? 'Result' : 'Error'}</header>\n\t\t\t\t\t\t\t{#each entry.result.images ?? [] as path, i (i)}\n\t\t\t\t\t\t\t\t{@const src = `${base}/api/files/image?path=${encodeURIComponent(path)}`}\n\t\t\t\t\t\t\t\t<a class=\"result-image\" href={src} target=\"_blank\" rel=\"noopener\">\n\t\t\t\t\t\t\t\t\t<img {src} alt={path.split('/').pop()} loading=\"lazy\" />\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t{#if entry.result.output || !entry.result.images}\n\t\t\t\t\t\t\t\t<pre>{entry.result.output || '(no output)'}</pre>\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t</section>\n\t\t\t\t\t{/if}\n\t\t\t\t\t</div>\n\t\t\t\t{/if}\n\t\t\t</details>\n\t\t{/if}\n\t{/snippet}\n\t{#snippet itemView(item: TranscriptItem)}\n\t\t{#if item.kind === 'group'}\n\t\t\t<!-- A run of routine calls, folded the way the terminal folds it. Open,\n\t\t\t it is the same rows the run would have drawn on its own. -->\n\t\t\t<details\n\t\t\t\tclass=\"row tool-group\"\n\t\t\t\topen={opened[`group:${item.id}`] ?? opened[item.id] ?? false}\n\t\t\t\tontoggle={(e) => (opened[`group:${item.id}`] = e.currentTarget.open)}\n\t\t\t>\n\t\t\t\t<summary>\n\t\t\t\t\t<iconify-icon class=\"tool-icon\" icon=\"mdi:layers-outline\"></iconify-icon>\n\t\t\t\t\t<span class=\"row-summary\">{item.summary}</span>\n\t\t\t\t\t{#if item.failed > 0}\n\t\t\t\t\t\t<span class=\"group-failed\">{item.failed} failed</span>\n\t\t\t\t\t\t<iconify-icon class=\"tool-status fail\" icon=\"mdi:alert-circle-outline\"></iconify-icon>\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t<iconify-icon class=\"tool-status ok\" icon=\"mdi:check\"></iconify-icon>\n\t\t\t\t\t{/if}\n\t\t\t\t</summary>\n\t\t\t\t<div class=\"group-rows\">\n\t\t\t\t\t{#each item.entries as entry (entry.id)}\n\t\t\t\t\t\t{@render row(entry)}\n\t\t\t\t\t{/each}\n\t\t\t\t</div>\n\t\t\t</details>\n\t\t{:else}\n\t\t\t{@render row(item)}\n\t\t{/if}\n\t\t{@const changed = turnCards.get(item.id)}\n\t\t{#if changed && changesLink}\n\t\t\t<TurnChangesCard\n\t\t\t\tturn={changed}\n\t\t\t\troot={turnChanges?.root ?? null}\n\t\t\t\tbind:open={() => cardOpen[changed.id!] ?? changed.id === latestCard, (v) => (cardOpen[changed.id!] = v)}\n\t\t\t\tlink={(file) => changesLink(changed.n, file)}\n\t\t\t/>\n\t\t{/if}\n\t{/snippet}\n\t{#each blocks as block (block.id)}\n\t\t{#if block.kind === 'rewound'}\n\t\t\t<!-- Turns a rewind went back past: still in the log, but the\n\t\t\t conversation no longer follows them. -->\n\t\t\t<details class=\"rewound\" open={opened[block.id] ?? false} ontoggle={(e) => (opened[block.id] = e.currentTarget.open)}>\n\t\t\t\t<summary>\n\t\t\t\t\t<iconify-icon icon=\"mdi:history\"></iconify-icon>\n\t\t\t\t\t<span>Rewound · {block.turns} {block.turns === 1 ? 'turn' : 'turns'}</span>\n\t\t\t\t</summary>\n\t\t\t\t<div class=\"rewound-rows\">\n\t\t\t\t\t{#each block.items as item (item.id)}\n\t\t\t\t\t\t{@render itemView(item)}\n\t\t\t\t\t{/each}\n\t\t\t\t</div>\n\t\t\t</details>\n\t\t{:else}\n\t\t\t{@render itemView(block)}\n\t\t{/if}\n\t{/each}\n\n\t{#if footDialog}\n\t\t<DialogCard\n\t\t\tchoice={paneChoice}\n\t\t\tpermission={sessionState === 'permission'}\n\t\t\tonKeys={(keys) => onSendKeys?.(keys)}\n\t\t\tonText={(text) => onSendPaneText?.(text)}\n\t\t\t{dictateTarget}\n\t\t/>\n\t{/if}\n\n\t{#if paneLogin}\n\t\t<LoginCard\n\t\t\tlogin={paneLogin}\n\t\t\tonKeys={(keys) => onSendKeys?.(keys)}\n\t\t\tonText={(text) => onSendPaneText?.(text)}\n\t\t/>\n\t{/if}\n\n\t{#if paneRewind && onRewind}\n\t\t<RewindCard screen={paneRewind} {onRewind} />\n\t{/if}\n\n\t<!-- Live status: driven by hooks, which fire the instant a tool starts;\n\t the JSONL itself is written in batches and lags by seconds. -->\n\t{#if sessionState === 'busy'}\n\t\t<div class=\"live-row busy\">\n\t\t\t<SessionStateIndicator state=\"busy\" />\n\t\t\t{#if activity}\n\t\t\t\t<span class=\"live-verb mono\">{activity.verb}</span>\n\t\t\t\t<span class=\"live-chips\">\n\t\t\t\t\t{#if activity.doing}\n\t\t\t\t\t\t<Badge variant=\"outline\" class=\"{CHIP} min-w-0 shrink justify-start text-[#a8a29e]\">\n\t\t\t\t\t\t\t<span class=\"truncate\">{activity.doing}</span>\n\t\t\t\t\t\t</Badge>\n\t\t\t\t\t{/if}\n\t\t\t\t\t{#if elapsedText}<Badge variant=\"outline\" class=\"{CHIP} font-mono\">{elapsedText}</Badge>{/if}\n\t\t\t\t\t{#if activity.tokens}\n\t\t\t\t\t\t<Badge variant=\"outline\" class=\"{CHIP} font-mono\"\n\t\t\t\t\t\t\t>{activity.tokens.dir === 'up' ? '↑' : '↓'} {activity.tokens.count} tokens</Badge\n\t\t\t\t\t\t>\n\t\t\t\t\t{/if}\n\t\t\t\t\t{#if activity.thinking}<Badge variant=\"outline\" class={CHIP}>{activity.thinking}</Badge>{/if}\n\t\t\t\t</span>\n\t\t\t{:else}\n\t\t\t\t<span class=\"live-text mono\">{currentAction ?? 'Working…'}</span>\n\t\t\t{/if}\n\t\t</div>\n\t{:else if sessionState === 'permission' || sessionState === 'waiting'}\n\t\t{@const state = sessionState}\n\t\t<div class=\"live-row attention\" style=\"color: {sessionStateVisual(state).color}\">\n\t\t\t<SessionStateIndicator {state} />\n\t\t\t<span class=\"live-text\">\n\t\t\t\t{#if dialogClosed}\n\t\t\t\t\tAnswer sent — waiting for Claude to carry on\n\t\t\t\t{:else if liveAskId || footDialog}\n\t\t\t\t\tWaiting for your answer — answer in the card above ↑\n\t\t\t\t{:else if state === 'permission'}\n\t\t\t\t\tWaiting for permission — reading the dialog, or switch to terminal view to respond\n\t\t\t\t{:else}\n\t\t\t\t\tQuestion incoming… answer here when it appears, or in the terminal view\n\t\t\t\t{/if}\n\t\t\t</span>\n\t\t</div>\n\t{/if}\n\n\t{#if suggestion}\n\t\t<!-- Claude's own next-prompt proposal, drawn as the same not-yet-happened\n\t\t turn anchor as a queued message — but in the suggestion's blue, and\n\t\t tappable: accepting is the only interaction it has. -->\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclass=\"user-block pending suggested\"\n\t\t\tonclick={onAcceptSuggestion}\n\t\t\ttitle=\"Accept Claude's suggestion\"\n\t\t>\n\t\t\t<span class=\"prompt-glyph\">❯</span>\n\t\t\t<div class=\"user-text\">{suggestion}</div>\n\t\t\t<span class=\"time suggested-tag\" title=\"Claude's suggested next prompt — tap to accept\">\n\t\t\t\t<iconify-icon icon=\"mdi:star-four-points-outline\"></iconify-icon>\n\t\t\t\tsuggested · accept <kbd>⇥</kbd>\n\t\t\t</span>\n\t\t</button>\n\t{/if}\n</div>\n\n{#if transcriptEl}\n\t<GithubRefCards root={transcriptEl} session={repoSession} {base} onOpen={onOpenGithub} />\n{/if}\n\n<style>\n\t.transcript {\n\t\twidth: 100%;\n\t\tmax-width: 860px;\n\t\tmargin: 0 auto;\n\t\t/* Assistant prose reads as text, not terminal output — deliberate contrast\n\t\t with the mono user prompts and tool rows (the terminal's vernacular). */\n\t\tfont-family:\n\t\t\tui-sans-serif,\n\t\t\tsystem-ui,\n\t\t\t-apple-system,\n\t\t\t'Segoe UI',\n\t\t\tRoboto,\n\t\t\tsans-serif;\n\t\t--mono: var(--font-mono);\n\t\tfont-size: 14.5px;\n\t\tline-height: 1.65;\n\t\tcolor: #d6d3d1;\n\t\tpadding-bottom: 8px;\n\t\t/* The .output host is a terminal container with pre-wrap; without this,\n\t\t the newlines marked emits between blocks render as visible gaps. */\n\t\twhite-space: normal;\n\t\tcontainer-type: inline-size;\n\t}\n\n\t.empty {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t\tpadding: 56px 16px;\n\t\tcolor: #78716c;\n\t\ttext-align: center;\n\t}\n\t.empty.starting {\n\t\tpadding-bottom: 24px;\n\t}\n\t.empty.starting iconify-icon {\n\t\tanimation: starting-breathe 1.8s ease-in-out infinite;\n\t}\n\t@keyframes starting-breathe {\n\t\t50% {\n\t\t\topacity: 0.4;\n\t\t}\n\t}\n\t.empty .hint {\n\t\tfont-size: 12px;\n\t\tcolor: #57534e;\n\t}\n\n\t/* --- The head of a windowed transcript: quiet, since the reader who wants\n\t older turns is looking for it and everyone else is reading downward. --- */\n\t.earlier {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tflex-wrap: wrap;\n\t\tgap: 8px 12px;\n\t\tpadding: 14px 8px 18px;\n\t\tborder-bottom: 1px solid #292524;\n\t\tmargin-bottom: 8px;\n\t}\n\t.earlier button {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t\tpadding: 5px 12px;\n\t\tborder: 1px solid #44403c;\n\t\tborder-radius: 999px;\n\t\tbackground: #1c1917;\n\t\tcolor: #d6d3d1;\n\t\tfont-size: 12px;\n\t\tcursor: pointer;\n\t}\n\t.earlier button:hover {\n\t\tborder-color: #57534e;\n\t\tcolor: #fafaf9;\n\t}\n\t.earlier button[disabled] {\n\t\topacity: 0.6;\n\t\tcursor: default;\n\t}\n\t.earlier-count {\n\t\tfont-size: 11px;\n\t\tcolor: #78716c;\n\t}\n\n\t/* --- User prompt: the turn anchor, in the terminal's own voice.\n\t The one place this view spends visual weight: a warm panel against the\n\t cool-dark tool cards, so turns are findable when scrolling fast. --- */\n\t.user-block {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 10px;\n\t\tmargin: 30px 0 12px;\n\t\tpadding: 10px 12px;\n\t\tbackground: #241d12;\n\t\tborder: 1px solid #46351c;\n\t\tborder-left: 3px solid #d97706;\n\t\tborder-radius: 8px;\n\t}\n\t.user-block:first-child {\n\t\tmargin-top: 6px;\n\t}\n\t/* Queued in the terminal: the same turn anchor, drawn as an outline because\n\t it has not happened yet. */\n\t.user-block.pending {\n\t\tbackground: transparent;\n\t\tborder-style: dashed;\n\t\tborder-left-style: solid;\n\t\tborder-left-color: #7c5e2a;\n\t\tmargin: 12px 0;\n\t}\n\t.user-block.pending .prompt-glyph,\n\t.user-block.pending .user-text {\n\t\tcolor: #8f8578;\n\t}\n\t/* Claude's suggestion: the queued anchor's shape, in the one colour nothing\n\t else in the app uses — and clickable, because tapping accepts it. */\n\t.user-block.suggested {\n\t\twidth: 100%;\n\t\tfont: inherit;\n\t\ttext-align: left;\n\t\tcursor: pointer;\n\t\tborder-color: #3b3b5c;\n\t\tborder-left-color: #6366f1;\n\t}\n\t.user-block.suggested:hover {\n\t\tbackground: #14141c;\n\t}\n\t.user-block.suggested:focus-visible {\n\t\toutline: 2px solid #818cf8;\n\t\toutline-offset: -2px;\n\t}\n\t.user-block.suggested .prompt-glyph {\n\t\tcolor: #818cf8;\n\t}\n\t/* Ghost text reads faint in the terminal; keep it reading that way here. */\n\t.user-block.suggested .user-text {\n\t\tcolor: #8b8fb0;\n\t}\n\t.user-block.suggested .suggested-tag {\n\t\tcolor: #a5b4fc;\n\t}\n\t.suggested-tag kbd {\n\t\tfont: inherit;\n\t\tpadding: 0 4px;\n\t\tborder: 1px solid #3a3a52;\n\t\tborder-radius: 3px;\n\t}\n\t/* How a turn got there, when claude-mux delivered it for you. */\n\t.via {\n\t\tmargin-right: 6px;\n\t\tpadding: 0 5px;\n\t\tborder-radius: 4px;\n\t\tbackground: #292524;\n\t\tcolor: #a8a29e;\n\t\tfont-size: 10px;\n\t}\n\n\t.prompt-glyph,\n\t.mic-glyph {\n\t\tflex-shrink: 0;\n\t\twidth: 14px;\n\t\tfont-family: var(--mono);\n\t\tfont-weight: 700;\n\t\tfont-size: 14px;\n\t\tcolor: #f59e0b;\n\t}\n\t/* Dictated prompt: same turn anchor, warmed toward coral — spoken, not\n\t typed — with the microphone standing where the prompt glyph would be. */\n\t.user-block.dictated {\n\t\tbackground: #261418;\n\t\tborder-color: #492530;\n\t\tborder-left-color: #e0566f;\n\t}\n\t.mic-glyph {\n\t\tcolor: #fb7185;\n\t\talign-self: baseline;\n\t\ttransform: translateY(2px);\n\t}\n\t.user-block.dictated .user-text {\n\t\tcolor: #fde8e8;\n\t}\n\t.user-text {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\tfont-family: var(--mono);\n\t\tfont-size: 13px;\n\t\tline-height: 1.55;\n\t\twhite-space: pre-wrap;\n\t\tword-break: break-word;\n\t\tcolor: #fef3c7;\n\t}\n\t/* Slash command: the name reads as a token, its arguments as plain prompt\n\t text — the same distinction the terminal's own input line makes. */\n\t.slash-name {\n\t\tpadding: 1px 6px;\n\t\tborder: 1px solid #6b4c1a;\n\t\tborder-radius: 5px;\n\t\tbackground: #33260f;\n\t\tcolor: #fbbf24;\n\t\tfont-weight: 600;\n\t}\n\t.slash-args {\n\t\tmargin-left: 8px;\n\t}\n\t/* What the command printed back, in the harness's voice: quieter than the\n\t prompt, and kept as printed. */\n\t.slash-output {\n\t\tmargin-top: 5px;\n\t\tpadding-left: 10px;\n\t\tborder-left: 2px solid #6b4c1a;\n\t\tcolor: #b8a87a;\n\t\tfont-size: 12.5px;\n\t\twhite-space: pre-wrap;\n\t\tword-break: break-word;\n\t}\n\n\t.time {\n\t\tflex-shrink: 0;\n\t\tfont-size: 10px;\n\t\tcolor: #8a7a55;\n\t\tfont-variant-numeric: tabular-nums;\n\t}\n\n\t.time iconify-icon {\n\t\tfont-size: 12px;\n\t\tvertical-align: -2px;\n\t}\n\n\t/* Cross-session (A2A) message: same anchor shape as a human turn, cool\n\t teal instead of warm amber — another agent's voice, not the user's. */\n\t.user-block.peer {\n\t\tbackground: #10201f;\n\t\tborder-color: #1e3d3a;\n\t\tborder-left-color: #14b8a6;\n\t}\n\t.peer-icon {\n\t\tflex-shrink: 0;\n\t\talign-self: baseline;\n\t\tfont-size: 15px;\n\t\tcolor: #2dd4bf;\n\t}\n\t.peer-body {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t}\n\t.peer-from {\n\t\tdisplay: block;\n\t\tfont-family: var(--mono);\n\t\tfont-size: 10.5px;\n\t\tfont-weight: 700;\n\t\tcolor: #2dd4bf;\n\t\tmargin-bottom: 2px;\n\t}\n\t.peer-text {\n\t\tcolor: #d8f3ef;\n\t}\n\t.peer-time {\n\t\tcolor: #3f6f68;\n\t}\n\n\t/* Agent activity sits slightly indented under its prompt anchor — the\n\t amber panel alone carries the turn structure, no rail needed. */\n\t.assistant-text,\n\t.row {\n\t\tmargin-left: 12px;\n\t}\n\n\t/* --- Assistant prose --- */\n\t.assistant-text {\n\t\tmargin-top: 10px;\n\t\tmargin-bottom: 10px;\n\t\tword-break: break-word;\n\t}\n\n\t/* --- Collapsible rows (tools + thinking): closed, they read as slim log\n\t lines — no box, dimmed, clearly \"machine activity\" next to the prose.\n\t The card chrome only appears when a row is opened. --- */\n\t.row {\n\t\tmargin-top: 1px;\n\t\tmargin-bottom: 1px;\n\t\tborder: 1px solid transparent;\n\t\tborder-radius: 7px;\n\t\tbackground: transparent;\n\t}\n\t.row[open] {\n\t\tmargin-top: 6px;\n\t\tmargin-bottom: 8px;\n\t\tborder-color: #262220;\n\t\tbackground: #1b1816;\n\t}\n\t.row summary {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 8px;\n\t\tpadding: 2px 8px;\n\t\tcursor: pointer;\n\t\tlist-style: none;\n\t\tuser-select: none;\n\t\tfont-size: 12.5px;\n\t\tcolor: #8a837c;\n\t\tborder-radius: 7px;\n\t\ttransition: background 0.12s;\n\t}\n\t.row summary:hover {\n\t\tbackground: #201c18;\n\t\tcolor: #c7c2bd;\n\t}\n\t.row summary::-webkit-details-marker {\n\t\tdisplay: none;\n\t}\n\t.row[open] > summary {\n\t\tpadding: 5px 10px;\n\t\tcolor: #c7c2bd;\n\t\tborder-bottom: 1px solid #262220;\n\t\tborder-bottom-left-radius: 0;\n\t\tborder-bottom-right-radius: 0;\n\t}\n\t/* A row with nothing to open: the closed summary's look, no hover. */\n\t.row.note {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 8px;\n\t\tpadding: 2px 8px;\n\t\tfont-size: 12.5px;\n\t\tcolor: #8a837c;\n\t}\n\t.row-summary {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n\t.mono {\n\t\tfont-family: var(--mono);\n\t\tfont-size: 12px;\n\t\tcolor: inherit;\n\t}\n\n\t.tool-icon {\n\t\tflex-shrink: 0;\n\t\tcolor: #78716c;\n\t\tfont-size: 15px;\n\t}\n\t.tool-status {\n\t\tflex-shrink: 0;\n\t\tfont-size: 14px;\n\t}\n\t.tool-open {\n\t\tflex-shrink: 0;\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 24px;\n\t\theight: 24px;\n\t\tmargin: -4px 0;\n\t\tborder-radius: 6px;\n\t\tcolor: #78716c;\n\t\tfont-size: 14px;\n\t}\n\t.tool-open:hover {\n\t\tbackground: #262626;\n\t\tcolor: #e7e5e4;\n\t}\n\t.tool-status.ok {\n\t\tcolor: #4d7c5f;\n\t}\n\t.tool-status.fail {\n\t\tcolor: #f87171;\n\t}\n\t.tool-status.running {\n\t\tcolor: #d97706;\n\t}\n\t.tool-card.error {\n\t\tborder-color: rgba(127, 29, 29, 0.6);\n\t}\n\t/* A folded run opens in place, without a card of its own: its rows hang off\n\t a thin rule under the summary, so a call opened inside it still reads as\n\t the one card on the screen. */\n\t.tool-group[open] {\n\t\tborder-color: transparent;\n\t\tbackground: transparent;\n\t}\n\t.tool-group[open] > summary {\n\t\tpadding: 2px 8px;\n\t\tborder-bottom: none;\n\t\tborder-radius: 7px;\n\t}\n\t.group-rows {\n\t\tmargin: 2px 0 6px 15px;\n\t\tpadding-left: 8px;\n\t\tborder-left: 1px solid #292524;\n\t}\n\t.group-failed {\n\t\tflex-shrink: 0;\n\t\tfont-size: 11.5px;\n\t\tcolor: #f87171;\n\t}\n\t.spin {\n\t\tanimation: spin 1s linear infinite;\n\t}\n\t@keyframes spin {\n\t\tto {\n\t\t\ttransform: rotate(360deg);\n\t\t}\n\t}\n\n\t.tool-detail {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: 1fr;\n\t\tgap: 8px;\n\t\tpadding: 8px 10px 10px;\n\t}\n\t/* Input and result share the row when there is room — the card stays short. */\n\t@container (min-width: 700px) {\n\t\t.tool-detail.two-col {\n\t\t\tgrid-template-columns: minmax(0, 5fr) minmax(0, 7fr);\n\t\t}\n\t}\n\t.pane {\n\t\tmin-width: 0;\n\t\tbackground: #14110e;\n\t\tborder: 1px solid #221e1a;\n\t\tborder-radius: 6px;\n\t\tpadding: 6px 9px 8px;\n\t}\n\t.pane.result.ok {\n\t\tborder-color: #1f2b22;\n\t\tbackground: #10140f;\n\t}\n\t.pane.result.fail {\n\t\tborder-color: #3d1d1d;\n\t\tbackground: #171010;\n\t}\n\t.pane-head {\n\t\tfont-size: 9.5px;\n\t\tfont-weight: 700;\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.1em;\n\t\tcolor: #6b6560;\n\t\tmargin-bottom: 5px;\n\t}\n\t.pane.result.ok .pane-head {\n\t\tcolor: #5f8a6e;\n\t}\n\t.pane.result.fail .pane-head {\n\t\tcolor: #d16b6b;\n\t}\n\t.result-image {\n\t\tdisplay: block;\n\t\tmargin-bottom: 6px;\n\t}\n\t.result-image img {\n\t\tdisplay: block;\n\t\tmax-width: 100%;\n\t\tmax-height: 320px;\n\t\tborder: 1px solid #221e1a;\n\t\tborder-radius: 4px;\n\t}\n\t.pane pre {\n\t\tfont-family: var(--mono);\n\t\tfont-size: 11.5px;\n\t\tline-height: 1.5;\n\t\toverflow-x: auto;\n\t\twhite-space: pre-wrap;\n\t\tword-break: break-word;\n\t\tmax-height: 260px;\n\t\toverflow-y: auto;\n\t\tmargin: 0;\n\t}\n\t.diff-file {\n\t\tmargin-left: 8px;\n\t\ttext-transform: none;\n\t\tletter-spacing: 0;\n\t\tfont-size: 11px;\n\t\tfont-weight: 400;\n\t\tcolor: #a8a29e;\n\t\tfont-family: var(--mono);\n\t}\n\t.diff-hunk {\n\t\tcolor: #7d96b8;\n\t}\n\t.diff-add {\n\t\tcolor: #b7e0ae;\n\t\tbackground: rgba(46, 160, 67, 0.14);\n\t\tdisplay: inline-block;\n\t\twidth: 100%;\n\t}\n\t.diff-del {\n\t\tcolor: #f0b0aa;\n\t\tbackground: rgba(248, 81, 73, 0.13);\n\t\tdisplay: inline-block;\n\t\twidth: 100%;\n\t}\n\t.diff-ctx {\n\t\tcolor: #7d7871;\n\t}\n\n\t.cmd {\n\t\tcolor: #e7e5e4;\n\t}\n\t.cmd-glyph {\n\t\tcolor: #d97706;\n\t\tfont-weight: 700;\n\t\tuser-select: none;\n\t}\n\t.kv {\n\t\tdisplay: flex;\n\t\tgap: 8px;\n\t\talign-items: baseline;\n\t\tfont-size: 11.5px;\n\t\tmargin-top: 4px;\n\t\tmin-width: 0;\n\t}\n\t.kv-long {\n\t\tmargin-top: 6px;\n\t}\n\t.k {\n\t\tflex-shrink: 0;\n\t\tfont-family: var(--mono);\n\t\tfont-size: 10.5px;\n\t\tcolor: #6b6560;\n\t}\n\t.kv-long .k {\n\t\tdisplay: block;\n\t\tmargin-bottom: 3px;\n\t}\n\t.v {\n\t\tfont-family: var(--mono);\n\t\tcolor: #c7c2bd;\n\t\toverflow-wrap: anywhere;\n\t\tmin-width: 0;\n\t}\n\n\t/* --- A grilling round: questions as a form. Amber while it waits on you,\n\t the colour every surface keeps for \"a person is needed\"; the numbers sit\n\t in a gutter of their own because the round is read in order. --- */\n\t.grill {\n\t\tmargin: 12px 0 14px;\n\t\tborder: 1px solid #2a2a2c;\n\t\tborder-radius: 10px;\n\t\tbackground: #161514;\n\t}\n\t.grill.live {\n\t\tborder-color: #5a4310;\n\t\tborder-left: 3px solid #f59e0b;\n\t\tbackground: #1a1712;\n\t}\n\t.gq {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: 34px 1fr;\n\t\tpadding: 12px 14px 12px 0;\n\t}\n\t.gq + .gq {\n\t\tborder-top: 1px solid #262320;\n\t}\n\t.gq.skipped .gq-main {\n\t\topacity: 0.55;\n\t}\n\t.gq-n {\n\t\tfont-family: var(--mono);\n\t\tfont-size: 12px;\n\t\t/* The title's line box, so the number sits on the title's baseline. */\n\t\tline-height: calc(14.5px * 1.65);\n\t\tcolor: #78716c;\n\t\ttext-align: right;\n\t\tpadding-right: 10px;\n\t}\n\t.live .gq-n {\n\t\tcolor: #fbbf24;\n\t}\n\t.gq-main {\n\t\tmin-width: 0;\n\t}\n\t.gq-title {\n\t\tmargin: 0 0 2px;\n\t\tfont-weight: 600;\n\t\tcolor: #f5f5f4;\n\t}\n\t.gq-body {\n\t\tcolor: #d6d3d1;\n\t}\n\t.gq-rec {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tgap: 8px;\n\t\twidth: 100%;\n\t\tmargin-top: 9px;\n\t\tpadding: 8px 10px;\n\t\tborder: 1px dashed #44403c;\n\t\tborder-radius: 8px;\n\t\tbackground: transparent;\n\t\tcolor: #a8a29e;\n\t\tfont: inherit;\n\t\tfont-size: 13.5px;\n\t\tline-height: 1.55;\n\t\ttext-align: left;\n\t}\n\tbutton.gq-rec {\n\t\tcursor: pointer;\n\t}\n\tbutton.gq-rec:hover {\n\t\tborder-color: #78716c;\n\t\tcolor: #d6d3d1;\n\t}\n\t.gq-rec.on {\n\t\tborder-style: solid;\n\t\tborder-color: #a16207;\n\t\tbackground: #2a2112;\n\t\tcolor: #fde68a;\n\t}\n\t.gq-rec iconify-icon {\n\t\tflex: none;\n\t\tfont-size: 16px;\n\t\tmargin-top: 2px;\n\t}\n\t.gq-rec.on iconify-icon {\n\t\tcolor: #fbbf24;\n\t}\n\t.gq-rec.past {\n\t\tborder-style: solid;\n\t\tborder-color: #292524;\n\t\tcolor: #a8a29e;\n\t}\n\t.gq-rec .markdown {\n\t\tmin-width: 0;\n\t}\n\t.gq-own {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tgap: 6px;\n\t\tmargin-top: 6px;\n\t}\n\t.gq-own textarea {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\tmax-height: 160px;\n\t\tresize: none;\n\t\tpadding: 6px 10px;\n\t\tborder: 1px solid #292524;\n\t\tborder-radius: 8px;\n\t\tbackground: #121110;\n\t\tcolor: #e7e5e4;\n\t\tfont: inherit;\n\t\tfont-size: 13.5px;\n\t\tline-height: 1.5;\n\t\toutline: none;\n\t}\n\t.gq-own textarea::placeholder {\n\t\tcolor: #57534e;\n\t}\n\t.gq-own textarea:focus {\n\t\tborder-color: #78716c;\n\t}\n\t.gq-own textarea.filled {\n\t\tborder-color: #a16207;\n\t}\n\t.gq-skip {\n\t\tflex: none;\n\t\theight: 32px;\n\t\tpadding: 0 10px;\n\t\tborder: 1px solid transparent;\n\t\tborder-radius: 8px;\n\t\tbackground: transparent;\n\t\tcolor: #78716c;\n\t\tfont-size: 12px;\n\t\tcursor: pointer;\n\t}\n\t.gq-skip:hover,\n\t.gq-skip.on {\n\t\tborder-color: #292524;\n\t\tcolor: #d6d3d1;\n\t}\n\t.grill-foot {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 10px;\n\t\tpadding: 10px 14px 12px 34px;\n\t\tborder-top: 1px solid #262320;\n\t}\n\t.grill-tally {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\tfont-family: var(--mono);\n\t\tfont-size: 11.5px;\n\t\tcolor: #a8a29e;\n\t}\n\t.grill-again {\n\t\tflex: none;\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t\theight: 34px;\n\t\tpadding: 0 12px;\n\t\tborder: 1px solid #292524;\n\t\tborder-radius: 8px;\n\t\tbackground: transparent;\n\t\tcolor: #a8a29e;\n\t\tfont: inherit;\n\t\tfont-size: 12.5px;\n\t\tcursor: pointer;\n\t}\n\t.grill-again:hover {\n\t\tcolor: #e7e5e4;\n\t\tborder-color: #44403c;\n\t}\n\t.grill-again:focus-visible {\n\t\toutline: 2px solid #78716c;\n\t\toutline-offset: 1px;\n\t}\n\t.grill-send {\n\t\tflex: none;\n\t\theight: 34px;\n\t\tpadding: 0 16px;\n\t\tborder: 0;\n\t\tborder-radius: 8px;\n\t\tbackground: #f59e0b;\n\t\tcolor: #1c1307;\n\t\tfont-size: 13px;\n\t\tfont-weight: 600;\n\t\tcursor: pointer;\n\t}\n\t.grill-send:hover:not(:disabled) {\n\t\tbackground: #fbbf24;\n\t}\n\t.grill-send:disabled {\n\t\topacity: 0.45;\n\t\tcursor: default;\n\t}\n\t.gq-rec:focus-visible,\n\t.gq-skip:focus-visible,\n\t.grill-send:focus-visible {\n\t\toutline: 2px solid #fbbf24;\n\t\toutline-offset: 2px;\n\t}\n\t@media (pointer: coarse) {\n\t\t.gq-skip,\n\t\t.grill-again,\n\t\t.grill-send {\n\t\t\theight: 40px;\n\t\t}\n\t}\n\n\t/* --- AskUserQuestion, once answered: a log line that opens to the\n\t choices. The open dialog is DialogCard's. --- */\n\t.ask-header-chip {\n\t\tdisplay: inline-block;\n\t\tfont-size: 10px;\n\t\tfont-weight: 700;\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.08em;\n\t\tcolor: #a8a29e;\n\t\tbackground: #262220;\n\t\tborder-radius: 4px;\n\t\tpadding: 1px 7px;\n\t\tmargin-bottom: 4px;\n\t}\n\t.ask-question {\n\t\tfont-weight: 500;\n\t\tcolor: #d6d3d1;\n\t\tmargin: 4px 0 6px;\n\t}\n\t/* Answered question: review layout inside the collapsed row */\n\t.ask-detail {\n\t\tpadding: 8px 12px 10px;\n\t}\n\t.ask-q-review + .ask-q-review {\n\t\tmargin-top: 10px;\n\t\tpadding-top: 8px;\n\t\tborder-top: 1px solid #262220;\n\t}\n\t.ask-opt-review {\n\t\tfont-size: 12.5px;\n\t\tcolor: #78716c;\n\t\tpadding: 2px 8px;\n\t\tborder-left: 2px solid transparent;\n\t}\n\t.ask-opt-review.chosen {\n\t\tcolor: #e7e5e4;\n\t\tborder-left-color: #4d7c5f;\n\t\tbackground: #161a16;\n\t\tborder-radius: 3px;\n\t}\n\n\t/* --- Subagent Task card: the one row that carries hierarchy. Closed, it\n\t reports what its agent is doing right now; open, it becomes that agent's\n\t own activity log and final report. --- */\n\t.tool-card.agent[open] {\n\t\tborder-color: #33302a;\n\t}\n\t.agent-line {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 8px;\n\t\tmin-width: 0;\n\t}\n\t.agent-name {\n\t\tmin-width: 0;\n\t\tmax-width: 60%;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t\tfont-weight: 600;\n\t\tcolor: #d6d3d1;\n\t}\n\t.agent-type {\n\t\tflex-shrink: 0;\n\t\tfont-size: 9.5px;\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.08em;\n\t\tcolor: #9b8fd4;\n\t\tbackground: #221f2e;\n\t\tborder-radius: 4px;\n\t\tpadding: 1px 6px;\n\t}\n\t.agent-doing,\n\t.agent-count {\n\t\tmin-width: 0;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t\tfont-size: 11.5px;\n\t\tcolor: #7d7871;\n\t}\n\t.agent-doing::before {\n\t\tcontent: '● ';\n\t\tcolor: #34d399;\n\t}\n\n\t.agent-detail {\n\t\tpadding: 8px 12px 10px;\n\t}\n\t.agent-meta {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 5px;\n\t\tmargin-bottom: 8px;\n\t}\n\t.agent-chip {\n\t\tfont-size: 10px;\n\t\tcolor: #a8a29e;\n\t\tbackground: #232019;\n\t\tborder-radius: 4px;\n\t\tpadding: 1px 7px;\n\t}\n\t.agent-chip.live {\n\t\tcolor: #6ee7b7;\n\t\tbackground: #14251d;\n\t}\n\t.agent-activity {\n\t\tlist-style: none;\n\t\tmargin: 0;\n\t\tpadding: 0 0 0 11px;\n\t\tborder-left: 2px solid #2b2622;\n\t\t/* Agents reach 150+ calls; scroll inside the card instead of growing it. */\n\t\tmax-height: 260px;\n\t\toverflow-y: auto;\n\t}\n\t.agent-trimmed {\n\t\tfont-size: 10.5px;\n\t\tcolor: #6b6560;\n\t\tmargin-bottom: 3px;\n\t}\n\t.agent-activity li {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 7px;\n\t\tpadding: 1px 0;\n\t\tfont-size: 11.5px;\n\t\tcolor: #8a837c;\n\t\tmin-width: 0;\n\t}\n\t.agent-activity li span {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n\t.agent-activity li.pending {\n\t\tcolor: #d6d3d1;\n\t}\n\t.agent-activity li.failed {\n\t\tcolor: #f0b0aa;\n\t}\n\t.agent-report {\n\t\tmargin-top: 10px;\n\t\tpadding-top: 8px;\n\t\tborder-top: 1px solid #262220;\n\t\tfont-size: 13.5px;\n\t}\n\n\t/* --- Compaction boundary: a fold line across the conversation --- */\n\t/* A prompt's rewind: quiet until the prompt is pointed at, always there to a finger. */\n\t.rewind-btn {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tmargin-right: 6px;\n\t\tpadding: 0;\n\t\tborder: 0;\n\t\tbackground: none;\n\t\tcolor: inherit;\n\t\tcursor: pointer;\n\t\topacity: 0;\n\t\ttransition: opacity 0.15s;\n\t}\n\t.user-block:hover .rewind-btn,\n\t.rewind-btn:focus-visible {\n\t\topacity: 1;\n\t}\n\t@media (hover: none) {\n\t\t.rewind-btn:not(:disabled) {\n\t\t\topacity: 0.7;\n\t\t}\n\t}\n\t.rewind-btn:disabled {\n\t\tcursor: default;\n\t}\n\t.user-block:hover .rewind-btn:disabled {\n\t\topacity: 0.4;\n\t}\n\t.rewind-btn:not(:disabled):hover {\n\t\tcolor: #fbbf24;\n\t}\n\t.rewound {\n\t\tmargin: 10px 0;\n\t\tborder: 1px dashed #3f3f46;\n\t\tborder-radius: 8px;\n\t\tpadding: 6px 10px;\n\t\tcolor: #78716c;\n\t}\n\t.rewound summary {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t\tcursor: pointer;\n\t\tfont-size: 12.5px;\n\t\tlist-style: none;\n\t}\n\t.rewound summary::-webkit-details-marker {\n\t\tdisplay: none;\n\t}\n\t.rewound-rows {\n\t\topacity: 0.6;\n\t}\n\n\t.compact {\n\t\tmargin: 22px 0 14px;\n\t\tborder: 1px dashed #3a3a42;\n\t\tborder-radius: 8px;\n\t\tbackground: #121216;\n\t\tfont-size: 12.5px;\n\t}\n\t.compact summary {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 9px;\n\t\tpadding: 8px 12px;\n\t\tlist-style: none;\n\t\tcursor: pointer;\n\t\tcolor: #a8a29e;\n\t}\n\t.compact summary::-webkit-details-marker {\n\t\tdisplay: none;\n\t}\n\t.compact summary iconify-icon {\n\t\tfont-size: 15px;\n\t\tcolor: #a78bfa;\n\t}\n\t.compact-title {\n\t\tcolor: #c4b5fd;\n\t}\n\t.compact-tokens {\n\t\tfont-family: var(--mono);\n\t\tfont-size: 11px;\n\t\tcolor: #78716c;\n\t}\n\t.compact summary .time {\n\t\tmargin-left: auto;\n\t}\n\t.compact-summary {\n\t\tpadding: 4px 14px 12px;\n\t\tborder-top: 1px dashed #3a3a42;\n\t\tfont-size: 13px;\n\t\tline-height: 1.55;\n\t\tcolor: #a8a29e;\n\t}\n\t.compact-summary.muted {\n\t\tcolor: #57534e;\n\t}\n\n\t/* --- Live status row --- */\n\t.live-row {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 9px;\n\t\tmargin: 8px 0 4px 12px;\n\t\tfont-size: 12.5px;\n\t\tcolor: #a8a29e;\n\t}\n\t.live-verb {\n\t\tflex: none;\n\t\tcolor: #d6d3d1;\n\t}\n\t.live-chips {\n\t\tdisplay: flex;\n\t\tgap: 5px;\n\t\tmin-width: 0;\n\t\toverflow: hidden;\n\t}\n\t.live-text {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.spin,\n\t\t.empty.starting iconify-icon {\n\t\t\tanimation: none;\n\t\t}\n\t}\n\n\t.thinking summary {\n\t\tcolor: #6b6560;\n\t\tfont-style: italic;\n\t}\n\t.thinking-text {\n\t\tpadding: 8px 12px;\n\t\twhite-space: pre-wrap;\n\t\tword-break: break-word;\n\t\tcolor: #78716c;\n\t\tfont-size: 13px;\n\t\tfont-style: italic;\n\t}\n</style>\n"],"names":["ResizeObserverSingleton","#listeners","#observer","#options","options","element","listener","listeners","#getObserver","entries","entry","resize_observer_border_box","bind_element_size","type","set","unsub","effect","untrack","asRecord","value","readString","HISTORY_PAGE","TranscriptStore","ReliableWebSocket","$.state","#subagentsByTask","$.derived","sub","protocol","session","agent","event","data","msg","older","i","resolve","agentId","held","subagents","seen","a","kept","index","sessionId","base","address","next","nextAgent","transcriptStore","made","disabled","$.prop","$$props","field","mine","voiceStore","status","$.get","elsewhere","label","toggle","said","button","root_1","node_1","$.child","iconify_icon","root","iconify_icon_1","$.set_custom_element_data","$.append","$$anchor","iconify_icon_2","$$render","consequent","consequent_1","alternate","$.reset","$.set_class","$.set_attribute","$.delegated","consequent_2","QUOTABLE","NOT_QUOTABLE","trimBlankLines","text","quoteBlock","lines","line","appendQuote","draft","quote","before","outermost","el","outer","quotableRanges","selection","range","common","scope","within","parts","ranges","part","clipped","whole","QUOTING","takeQuote","ABOVE","GAP","HANDLES","SETTLE_MS","PRESS_MS","touch","MediaQuery","coarse","place","width","left","dragging","pressing","settle","frame","position","$.set","first","last","top","bottom","right","below","selected","read","readAfter","ms","from","$.user_effect","onSelection","onDown","e","onUp","onScroll","onKey","focus","onKeyUp","div","root_3","Button","$.first_child","fragment_1","kbd","IS_MAC","styles","$.bind_element_size","$$value","CLOSES_UP","insertSaid","spot","start","end","after","joined","lead","tail","caret","spotOf","keepsCaret","keep","caretOf","live","putCaret","sayInto","current","write","tick","keysForAnswer","picks","sorted","keysForOptionPick","keys","cursor","pick","step","to","count","move","keysForOptionMove","steps","liveRows","qi","$.noop","root_5","rows","row","preview","previewFor","root_4","node","span","$.template_effect","$.set_text","text_1","classes_1","span_1","$.sibling","span_2","text_2","node_2","span_3","root_2","text_3","$.only_child","pre","consequent_3","$$node","$$action_arg","longPress","highlight","classes","closed","freeText","placeholder","form","root_7","node_4","Input","freeKeydown","inputEl","DictateButton","dictateTarget","t","consequent_4","sending","node_6","noting","text_5","sendFree","paneFreeText","answerLabel","notingOn","textRow","consequent_5","keysBar","note","p","root_9","span_4","text_6","node_9","button_1","fragment_5","iconify_icon_3","button_2","iconify_icon_4","d","ARROW_NOTE","div_1","node_8","button_3","iconify_icon_5","button_4","iconify_icon_6","node_10","button_5","root_10","iconify_icon_7","done","reviewing","consequent_7","$.each","node_11","extraKeys","extra","button_6","root_11","text_7","text_8","button_7","node_12","p_1","root_12","text_9","consequent_8","ask","permission","norm","s","o","liveIndex","asked","byText","q","sentCount","blind","hasSubmitTab","atSubmit","tabs","isAnswered","answeredCount","canTravel","answers","$.proxy","answerOf","r","remember","answer","goToTab","delta","typing","n","advanceBlind","opts","multi","wasNoting","paneTyping","OPEN_TIMEOUT_MS","until","walkTo","walk","pickBlind","oi","confirmBlind","b","finish","submit","ticked","KEY_SEGMENT","out","segment","m","l","reveal","isPermission","title","section","root_29","header","iconify_icon_8","span_5","text_10","node_13","iconify_icon_9","consequent_9","active","sent","div_2","root_20","div_3","span_6","text_11","node_16","button_8","root_14","iconify_icon_10","text_12","consequent_10","p_2","text_13","node_17","div_4","root_16","iconify_icon_11","node_18","span_7","root_15","text_14","consequent_11","alternate_1","node_20","div_5","fragment_8","opt","button_9","root_18","node_21","iconify_icon_12","$0","classes_6","span_8","text_16","consequent_14","alternate_2","span_9","span_10","text_17","node_22","span_11","text_18","consequent_15","pre_1","text_19","consequent_16","classes_5","node_24","consequent_17","alternate_3","consequent_18","consequent_12","consequent_13","alternate_4","classes_3","classes_4","div_6","root_22","node_27","p_3","root_21","text_21","consequent_19","node_28","consequent_20","consequent_21","footer","root_25","span_12","node_31","text_23","consequent_22","alternate_5","node_32","iconify_icon_13","fragment_15","iconify_icon_14","fragment_17","consequent_23","alternate_6","consequent_24","consequent_25","div_7","fragment_19","node_35","p_4","text_25","consequent_27","node_36","node_38","p_5","root_28","consequent_28","consequent_29","$.action","classes_2","CODE_SHAPE","copied","awaitingCode","url","code","pasteAndSubmit","copyLink","onBack","fragment_2","fragment_3","node_3","root_8","fragment_7","node_7","text_4","node_5","fragment_9","fragment_10","code_1","consequent_6","pending","card","run","key","action","restores","summaries","fragment","blockquote","ul","li","option","$1","parseMcpToolName","name","match","MCP_FAMILIES","toolIcon","mcp","pattern","arg","isRewound","item","foldRewound","items","QUESTION","RECOMMENDED","firstParagraph","blank","join","parseGrillRound","starts","intro","questions","outro","rest","recAt","bodyLines","recommended","recLines","para","composeGrillReply","round","STANDALONE_TOOLS","foldable","plural","one","many","times","SHELL","READ","EDIT","WRITE","SEARCH","LIST","FETCH","WEB_SEARCH","COMPOUND","SHELL_VERBS","shellCategory","input","command","verb","args","category","TOOL_CATEGORIES","categoryCache","categorize","tool","categorizeUncached","summarizeToolRun","tools","counts","groupToolRuns","flush","body","open","totals","sumCounts","root_6","f","letter","statusLetter","bdi","displayPath","grill","id","phase","grillPhase","liveGrillId","ready","sessionState","$.html","markdown","renderMarkdown","setAnswer","textarea","$.remove_textarea_child","autosize","ownFields","fieldKey","$.attach","ownText","typeAnswer","$.set_value","grillSending","tally","sendRound","footer_1","currentAction","activity","delivered","suggestion","paneChoice","paneLogin","paneRewind","olderCount","loadingEarlier","repoSession","turnChanges","transcriptEl","link","path","openFileLink","goto","fileLinks","now","startedAt","ticking","CHIP","elapsedText","formatSpinnerElapsed","blocks","rewinding","canRewind","rewindable","rowsBack","at","rewindTo","turnRunning","turnCards","placeTurnChanges","latestCard","cardOpen","opened","roundCache","grillRound","grillAnswers","agreed","own","fit","canAnswer","liveAskId","dialogKey","seenLive","submitted","dialogClosed","answeredAsks","lastLiveAsk","footDialog","deliveredVia","turn","formatTime","ts","inputPanes","inputJson","toolName","isShell","cmd","short","long","raw","QuoteSelection","turnGlyph","dictated","via","how","div_8","node_15","div_9","root_13","div_10","div_11","node_19","root_17","div_12","root_19","div_13","node_23","div_14","div_15","text_15","div_16","div_17","span_13","span_14","details","root_26","summary","span_15","text_20","node_25","span_16","root_23","span_17","text_22","div_18","root_24","details_1","root_30","summary_1","span_18","consequent_26","div_19","div_20","span_19","text_26","node_29","div_21","root_27","text_27","classes_7","div_22","text_28","$2","DialogCard","div_23","span_20","text_29","span_21","text_30","div_24","details_2","root_31","summary_2","div_25","text_31","showResult","doing","details_3","root_57","summary_3","span_22","fragment_13","span_23","text_32","span_24","root_32","text_33","consequent_34","span_25","root_33","node_34","ToolLabel","span_26","root_34","text_34","consequent_36","a_1","root_35","opens","toolFileTarget","span_27","fragment_14","node_37","a_2","root_37","iconify_icon_15","consequent_39","consequent_38","iconify_icon_16","iconify_icon_17","consequent_40","alternate_7","div_26","root_44","div_27","node_40","span_28","root_39","text_35","consequent_41","span_29","text_36","node_41","span_30","root_40","consequent_42","node_42","div_28","root_41","text_37","consequent_43","ol","act","li_1","root_42","iconify_icon_18","span_31","node_43","classes_9","div_29","root_43","div_30","consequent_44","div_31","root_56","node_45","section_1","root_48","span_32","root_45","text_38","consequent_46","hunk","span_33","text_39","text_40","$.index","dl","span_34","fragment_16","text_41","text_42","$.clsx","section_2","root_52","node_48","root_49","text_43","consequent_48","div_32","root_50","span_35","text_44","span_36","text_45","div_33","root_51","span_37","text_46","pre_2","text_47","consequent_47","consequent_49","section_3","root_55","header_1","text_48","node_52","src","a_3","root_53","img","pre_3","root_54","text_49","consequent_50","classes_11","consequent_51","classes_10","consequent_45","alternate_8","classes_8","consequent_30","d_3","consequent_31","consequent_32","consequent_52","itemView","changed","details_4","root_59","summary_4","iconify_icon_19","span_38","text_50","node_55","span_39","fragment_18","text_51","iconify_icon_20","iconify_icon_21","consequent_53","alternate_9","div_34","$.event","consequent_54","alternate_10","v","TurnChangesCard","file","consequent_55","node_57","div_35","root_61","iconify_icon_22","$.set_style","div_36","root_62","iconify_icon_23","div_37","root_63","iconify_icon_24","consequent_57","consequent_58","consequent_56","div_38","root_64","iconify_icon_25","text_52","span_40","text_53","consequent_59","node_59","block","details_5","root_65","summary_5","iconify_icon_26","span_41","text_54","div_39","consequent_60","alternate_11","consequent_61","LoginCard","consequent_62","RewindCard","consequent_63","div_40","root_69","node_65","SessionStateIndicator","span_42","fragment_28","text_55","span_43","node_67","Badge","span_44","root_66","text_56","consequent_64","consequent_65","text_58","consequent_66","text_59","consequent_67","span_45","root_68","text_60","consequent_68","alternate_12","state","div_41","root_70","node_71","span_46","node_72","consequent_71","consequent_72","alternate_13","sessionStateVisual","consequent_69","consequent_73","root_71","div_42","text_65","span_47","iconify_icon_27","$$args","consequent_74","$.bind_this","node_74","GithubRefCards","consequent_75"],"mappings":"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","x_google_ignoreList":[0]}
|