@hienlh/ppm 0.18.7 → 0.18.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/assets/skills/ppm/SKILL.md +1 -1
  3. package/assets/skills/ppm/references/cli-reference.md +4 -4
  4. package/assets/skills/ppm/references/http-api.md +2 -1
  5. package/dist/web/assets/{ai-resource-editor-DZQUyrsU.js → ai-resource-editor-BydGrxjb.js} +1 -1
  6. package/dist/web/assets/{audio-preview-GGksv6U8.js → audio-preview-DzBGq9Lk.js} +1 -1
  7. package/dist/web/assets/{chat-tab-Xd2WMjdX.js → chat-tab-pBGQ9SCY.js} +3 -3
  8. package/dist/web/assets/{code-editor-DqXYJWAB.js → code-editor-XviNXdzi.js} +2 -2
  9. package/dist/web/assets/{conflict-editor-Dg_JIcKq.js → conflict-editor-CRConSGG.js} +1 -1
  10. package/dist/web/assets/{csv-preview-DsJ_a2Op.js → csv-preview-BtCGfmrq.js} +1 -1
  11. package/dist/web/assets/{database-viewer-CzjnrnMz.js → database-viewer-2M5sKRqb.js} +1 -1
  12. package/dist/web/assets/{diff-viewer-DUNkO-ll.js → diff-viewer-BMr7vOvZ.js} +1 -1
  13. package/dist/web/assets/{docx-preview-DujpUDkE.js → docx-preview-BpG2kr_-.js} +1 -1
  14. package/dist/web/assets/{explorer-body-DSDJUQs7.js → explorer-body-DXufyj-9.js} +1 -1
  15. package/dist/web/assets/{explorer-window-content-CWYBapkj.js → explorer-window-content-B3krk4G1.js} +1 -1
  16. package/dist/web/assets/{extension-webview-DBTFznQp.js → extension-webview-12M45CGq.js} +1 -1
  17. package/dist/web/assets/{git-log-panel-D8ZQdoYl.js → git-log-panel-Cp4k3tX_.js} +1 -1
  18. package/dist/web/assets/{glide-data-grid-uIjdTT7c.js → glide-data-grid-B0BB0VDl.js} +1 -1
  19. package/dist/web/assets/{group-chat-tab-B3sryFdA.js → group-chat-tab-CcG_NXIS.js} +1 -1
  20. package/dist/web/assets/{image-preview-B0VXSpYu.js → image-preview-3HfuxA0N.js} +1 -1
  21. package/dist/web/assets/{index-DgbOF3xa.js → index-BAVBuKmT.js} +4 -4
  22. package/dist/web/assets/{keybindings-store-FyolpNND.js → keybindings-store-oMJmtpH4.js} +1 -1
  23. package/dist/web/assets/{markdown-renderer-BaBQ6Wm6.js → markdown-renderer-DPcoPjmO.js} +1 -1
  24. package/dist/web/assets/{markdown-renderer-feiuhJ9n.js → markdown-renderer-Dg5HE9Zq.js} +1 -1
  25. package/dist/web/assets/media-url-DlYsHq0S.js +1 -0
  26. package/dist/web/assets/{mobile-explorer-sheet-Zxjl-e4c.js → mobile-explorer-sheet-CEVcU964.js} +1 -1
  27. package/dist/web/assets/{notification-store-DnGpxgkF.js → notification-store-B8AqxwRT.js} +1 -1
  28. package/dist/web/assets/{pdf-preview-xzAA4-kD.js → pdf-preview-BslNoDFw.js} +1 -1
  29. package/dist/web/assets/{postgres-viewer-Dkec6GyK.js → postgres-viewer-BtSXQ3S4.js} +1 -1
  30. package/dist/web/assets/{settings-tab-Bd8e6iqY.js → settings-tab-COSUzGl8.js} +1 -1
  31. package/dist/web/assets/{sql-query-editor-Bz1XrUqI.js → sql-query-editor-CkvpmXyA.js} +1 -1
  32. package/dist/web/assets/{sqlite-viewer-D5-NZw6b.js → sqlite-viewer-CJbP6ruh.js} +1 -1
  33. package/dist/web/assets/{system-monitor-tab-A0jvt5Qw.js → system-monitor-tab-DThAFSd_.js} +1 -1
  34. package/dist/web/assets/{team-member-sheet-5Oaqm8I_.js → team-member-sheet-M83B4znI.js} +2 -2
  35. package/dist/web/assets/{team-member-window-content-DSpZ2zhL.js → team-member-window-content-Cxh-HF2V.js} +1 -1
  36. package/dist/web/assets/{terminal-tab-DXazqejW.js → terminal-tab-gQCs_fyx.js} +1 -1
  37. package/dist/web/assets/{tool-cards-Bgp8iceS.js → tool-cards-BG2fz83z.js} +2 -2
  38. package/dist/web/assets/{use-monaco-theme-CpF3A7JL.js → use-monaco-theme-DaqI7O-a.js} +1 -1
  39. package/dist/web/assets/{use-open-team-member-CUvV02fA.js → use-open-team-member-DKpstvLS.js} +1 -1
  40. package/dist/web/assets/{use-websocket-TnL2I1io.js → use-websocket-KVhDtbwK.js} +1 -1
  41. package/dist/web/assets/video-preview-CVEUDZBj.js +1 -0
  42. package/dist/web/index.html +1 -1
  43. package/dist/web/sw.js +1 -1
  44. package/package.json +1 -1
  45. package/src/server/helpers/media-route-handlers.ts +22 -3
  46. package/src/server/routes/files.ts +5 -2
  47. package/src/server/routes/fs-browse.ts +5 -2
  48. package/src/services/edge-forwarder.ts +191 -191
  49. package/src/services/fs-path-guard.service.ts +17 -1
  50. package/src/services/media-transcode/transcode-stream.ts +27 -5
  51. package/src/services/windows-process-tree.ts +351 -351
  52. package/src/web/components/editor/video-player/video-player.tsx +54 -22
  53. package/src/web/lib/media-url.ts +30 -4
  54. package/.release-run.sh +0 -5
  55. package/dist/web/assets/media-url-CUpN5vI1.js +0 -1
  56. package/dist/web/assets/video-preview-CwtLPELG.js +0 -1
  57. package/packages/vscode-compat/node_modules/.bin/tsc.bunx +0 -0
  58. package/packages/vscode-compat/node_modules/.bin/tsc.exe +0 -0
  59. package/packages/vscode-compat/node_modules/.bin/tsserver.bunx +0 -0
  60. package/packages/vscode-compat/node_modules/.bin/tsserver.exe +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.18.8] - 2026-09-04
4
+
5
+ ### Fixed
6
+ - **Images the assistant opens show in the transcript again** — attachments live in the PPM directory, which is shielded to keep the credentials database off the file routes, so every attachment preview, editor open and download answered 403.
7
+ - **Seeking an AVI over a tunnel no longer sticks on "Transcoding failed"** — each seek left an ffmpeg job running to the end of the file until the slots ran out.
8
+ - **The video player keeps volume, mute and speed across loads**, and rapid seeks no longer stall at 0:00.
9
+
3
10
  ## [0.18.7] - 2026-09-04
4
11
 
5
12
  ### Fixed
@@ -71,4 +71,4 @@ This skill covers the `ppm` CLI, its HTTP API, and its config DB. It does **not*
71
71
  - Third-party extensions (inspect via `ppm ext list`).
72
72
  - The Claude Agent SDK internals (separate skill).
73
73
 
74
- <!-- Generated for PPM v0.18.7 at build time. Re-run `ppm export skill --install` to refresh. -->
74
+ <!-- Generated for PPM v0.18.8 at build time. Re-run `ppm export skill --install` to refresh. -->
@@ -763,7 +763,7 @@ Show recent runs for a schedule
763
763
  Manage and inspect discovered skills & commands
764
764
 
765
765
  **Options:**
766
- - `--project <path>` — Project path (default: `"C:\\Users\\PC\\ppm"`)
766
+ - `--project <path>` — Project path (default: `"C:\\Users\\PC\\ppm-release-0188"`)
767
767
 
768
768
  **Usage:** `ppm skills [options] [command]`
769
769
 
@@ -773,7 +773,7 @@ List all discovered skills and commands
773
773
 
774
774
  **Options:**
775
775
  - `--json` — JSON output
776
- - `--project <path>` — Project path (default: `"C:\\Users\\PC\\ppm"`)
776
+ - `--project <path>` — Project path (default: `"C:\\Users\\PC\\ppm-release-0188"`)
777
777
 
778
778
  ### `ppm skills search`
779
779
 
@@ -781,7 +781,7 @@ Fuzzy search skills and commands
781
781
 
782
782
  **Options:**
783
783
  - `--json` — JSON output
784
- - `--project <path>` — Project path (default: `"C:\\Users\\PC\\ppm"`)
784
+ - `--project <path>` — Project path (default: `"C:\\Users\\PC\\ppm-release-0188"`)
785
785
 
786
786
  **Usage:** `ppm skills search [options] <query>`
787
787
 
@@ -791,7 +791,7 @@ Show detailed info for a specific skill
791
791
 
792
792
  **Options:**
793
793
  - `--json` — JSON output
794
- - `--project <path>` — Project path (default: `"C:\\Users\\PC\\ppm"`)
794
+ - `--project <path>` — Project path (default: `"C:\\Users\\PC\\ppm-release-0188"`)
795
795
 
796
796
  **Usage:** `ppm skills info [options] <name>`
797
797
 
@@ -108,6 +108,7 @@ _Base URL: `http://localhost:8080` (default; override via `ppm config set port <
108
108
  - `GET /api/fs/raw`
109
109
  - `GET /api/fs/probe`
110
110
  - `GET /api/fs/transcode`
111
+ - `DELETE /api/fs/transcode`
111
112
  - `GET /api/fs/docx-html`
112
113
  - `POST /api/fs/mkdir`
113
114
  - `PUT /api/fs/write`
@@ -307,4 +308,4 @@ _Base URL: `http://localhost:8080` (default; override via `ppm config set port <
307
308
  - `ws://<host>/ws/terminal` — PTY terminal multiplexer
308
309
  - `ws://<host>/ws/extensions` — extension host channel
309
310
 
310
- <!-- Generated from src/server/routes/ for PPM v0.18.7 -->
311
+ <!-- Generated from src/server/routes/ for PPM v0.18.8 -->
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{S as t,x as n}from"./vendor-markdown-Ls5AcU91.js";import"./vendor-ui-CaeeFO0B.js";import{t as r}from"./save-DRPrDfTt.js";import{s as i}from"./api-client-BSB14J4w.js";import"./vendor-mermaid-Bg4vE8QA.js";import"./settings-store-C9YT1Hir.js";import{n as a}from"./utils-DoY4yTP-.js";import{$n as o,A as s,M as c,N as l,On as u,er as d,j as f,k as p,kn as m,s as h}from"./index-DgbOF3xa.js";import{t as g}from"./use-monaco-theme-CpF3A7JL.js";var _=e(t(),1),v=n();function y({metadata:e}){let t=e?.filePath,n=e?.name,a=e?.resourceType??`skill`,y=e?.scope??`user`,x=e?.readOnly===!0,S=e?.shadowed===!0,C=e?.shadowedBy,w=e?.project??``,[T,E]=(0,_.useState)(``),[D,O]=(0,_.useState)(``),[k,A]=(0,_.useState)(!0),[j,M]=(0,_.useState)(null),[N,P]=(0,_.useState)(!1),F=g(),I=(0,_.useRef)(``),L=T!==D;(0,_.useEffect)(()=>{let e=!1;return A(!0),M(null),c(t,w).then(t=>{e||(E(t.content),O(t.content),I.current=t.content)}).catch(t=>{e||M(t.message)}).finally(()=>{e||A(!1)}),()=>{e=!0}},[t,w]);let R=(0,_.useCallback)(async()=>{if(x||N)return;let e=I.current;if(e!==D){P(!0);try{await l(t,e,w),O(e),E(e),i.success(`Saved`),f.getState().reload()}catch(e){i.error(e.message)}finally{P(!1)}}},[t,w,D,x,N]);(0,_.useEffect)(()=>{let e=e=>{(e.ctrlKey||e.metaKey)&&e.key.toLowerCase()===`s`&&(e.preventDefault(),R())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[R]);let z=s[a];return(0,v.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border px-3 py-2 shrink-0`,children:[(0,v.jsx)(z,{className:`size-4 text-text-subtle`}),(0,v.jsx)(`span`,{className:`text-sm font-semibold`,children:n}),(0,v.jsx)(p,{scope:y}),L&&!x&&(0,v.jsx)(`span`,{className:`size-1.5 rounded-full bg-primary`,title:`Unsaved changes`}),(0,v.jsx)(`div`,{className:`flex-1`}),(0,v.jsxs)(`span`,{className:`hidden sm:block text-[11px] text-text-subtle`,children:[a,` · markdown`]}),!x&&(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(`button`,{onClick:()=>E(D),disabled:!L||N,className:`flex items-center gap-1 rounded px-2 py-1 text-xs text-text-secondary hover:bg-surface-elevated disabled:opacity-40`,children:[(0,v.jsx)(u,{className:`size-3.5`}),` Revert`]}),(0,v.jsxs)(`button`,{onClick:()=>void R(),disabled:!L||N,className:`flex items-center gap-1 rounded bg-primary px-2.5 py-1 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-40`,children:[N?(0,v.jsx)(d,{className:`size-3.5 animate-spin`}):(0,v.jsx)(r,{className:`size-3.5`}),` Save`]})]})]}),x&&(0,v.jsx)(b,{icon:o,tone:`muted`,children:`Bundled resource — read-only. Duplicate it (from the AI Resources panel) to make an editable copy.`}),S&&C&&(0,v.jsxs)(b,{icon:m,tone:`warn`,children:[`This `,a,` is overridden by another “`,C.name,`” from a higher-priority source (`,C.source,`). It is currently inactive.`]}),(0,v.jsx)(`div`,{className:`min-h-0 flex-1`,children:k?(0,v.jsx)(`div`,{className:`flex h-full items-center justify-center`,children:(0,v.jsx)(d,{className:`size-5 animate-spin text-primary`})}):j?(0,v.jsx)(`div`,{className:`p-6 text-center text-sm text-destructive`,children:j}):(0,v.jsx)(h,{height:`100%`,language:`markdown`,theme:F,value:T,onChange:e=>{let t=e??``;I.current=t,E(t)},options:{readOnly:x,minimap:{enabled:!1},fontSize:13,wordWrap:`on`,scrollBeyondLastLine:!1,lineNumbers:`on`}})})]})}function b({icon:e,tone:t,children:n}){return(0,v.jsxs)(`div`,{className:a(`flex items-start gap-2 px-3 py-2 text-[12px] shrink-0 border-b border-border`,t===`warn`?`bg-amber-500/10 text-amber-300`:`bg-surface-elevated text-text-secondary`),children:[(0,v.jsx)(e,{className:`mt-0.5 size-3.5 shrink-0`}),(0,v.jsx)(`span`,{children:n})]})}export{y as AiResourceEditor};
1
+ import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{S as t,x as n}from"./vendor-markdown-Ls5AcU91.js";import"./vendor-ui-CaeeFO0B.js";import{t as r}from"./save-DRPrDfTt.js";import{s as i}from"./api-client-BSB14J4w.js";import"./vendor-mermaid-Bg4vE8QA.js";import"./settings-store-C9YT1Hir.js";import{n as a}from"./utils-DoY4yTP-.js";import{$n as o,A as s,M as c,N as l,On as u,er as d,j as f,k as p,kn as m,s as h}from"./index-BAVBuKmT.js";import{t as g}from"./use-monaco-theme-DaqI7O-a.js";var _=e(t(),1),v=n();function y({metadata:e}){let t=e?.filePath,n=e?.name,a=e?.resourceType??`skill`,y=e?.scope??`user`,x=e?.readOnly===!0,S=e?.shadowed===!0,C=e?.shadowedBy,w=e?.project??``,[T,E]=(0,_.useState)(``),[D,O]=(0,_.useState)(``),[k,A]=(0,_.useState)(!0),[j,M]=(0,_.useState)(null),[N,P]=(0,_.useState)(!1),F=g(),I=(0,_.useRef)(``),L=T!==D;(0,_.useEffect)(()=>{let e=!1;return A(!0),M(null),c(t,w).then(t=>{e||(E(t.content),O(t.content),I.current=t.content)}).catch(t=>{e||M(t.message)}).finally(()=>{e||A(!1)}),()=>{e=!0}},[t,w]);let R=(0,_.useCallback)(async()=>{if(x||N)return;let e=I.current;if(e!==D){P(!0);try{await l(t,e,w),O(e),E(e),i.success(`Saved`),f.getState().reload()}catch(e){i.error(e.message)}finally{P(!1)}}},[t,w,D,x,N]);(0,_.useEffect)(()=>{let e=e=>{(e.ctrlKey||e.metaKey)&&e.key.toLowerCase()===`s`&&(e.preventDefault(),R())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[R]);let z=s[a];return(0,v.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border px-3 py-2 shrink-0`,children:[(0,v.jsx)(z,{className:`size-4 text-text-subtle`}),(0,v.jsx)(`span`,{className:`text-sm font-semibold`,children:n}),(0,v.jsx)(p,{scope:y}),L&&!x&&(0,v.jsx)(`span`,{className:`size-1.5 rounded-full bg-primary`,title:`Unsaved changes`}),(0,v.jsx)(`div`,{className:`flex-1`}),(0,v.jsxs)(`span`,{className:`hidden sm:block text-[11px] text-text-subtle`,children:[a,` · markdown`]}),!x&&(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(`button`,{onClick:()=>E(D),disabled:!L||N,className:`flex items-center gap-1 rounded px-2 py-1 text-xs text-text-secondary hover:bg-surface-elevated disabled:opacity-40`,children:[(0,v.jsx)(u,{className:`size-3.5`}),` Revert`]}),(0,v.jsxs)(`button`,{onClick:()=>void R(),disabled:!L||N,className:`flex items-center gap-1 rounded bg-primary px-2.5 py-1 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-40`,children:[N?(0,v.jsx)(d,{className:`size-3.5 animate-spin`}):(0,v.jsx)(r,{className:`size-3.5`}),` Save`]})]})]}),x&&(0,v.jsx)(b,{icon:o,tone:`muted`,children:`Bundled resource — read-only. Duplicate it (from the AI Resources panel) to make an editable copy.`}),S&&C&&(0,v.jsxs)(b,{icon:m,tone:`warn`,children:[`This `,a,` is overridden by another “`,C.name,`” from a higher-priority source (`,C.source,`). It is currently inactive.`]}),(0,v.jsx)(`div`,{className:`min-h-0 flex-1`,children:k?(0,v.jsx)(`div`,{className:`flex h-full items-center justify-center`,children:(0,v.jsx)(d,{className:`size-5 animate-spin text-primary`})}):j?(0,v.jsx)(`div`,{className:`p-6 text-center text-sm text-destructive`,children:j}):(0,v.jsx)(h,{height:`100%`,language:`markdown`,theme:F,value:T,onChange:e=>{let t=e??``;I.current=t,E(t)},options:{readOnly:x,minimap:{enabled:!1},fontSize:13,wordWrap:`on`,scrollBeyondLastLine:!1,lineNumbers:`on`}})})]})}function b({icon:e,tone:t,children:n}){return(0,v.jsxs)(`div`,{className:a(`flex items-start gap-2 px-3 py-2 text-[12px] shrink-0 border-b border-border`,t===`warn`?`bg-amber-500/10 text-amber-300`:`bg-surface-elevated text-text-secondary`),children:[(0,v.jsx)(e,{className:`mt-0.5 size-3.5 shrink-0`}),(0,v.jsx)(`span`,{children:n})]})}export{y as AiResourceEditor};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{S as t,x as n}from"./vendor-markdown-Ls5AcU91.js";import"./vendor-ui-CaeeFO0B.js";import{t as r}from"./createLucideIcon-D8pyde1A.js";import{t as i}from"./file-exclamation-point-a8f3_w7a.js";import"./api-client-BSB14J4w.js";import{t as a}from"./utils-DoY4yTP-.js";import{n as o}from"./media-url-CUpN5vI1.js";var s=r(`music`,[[`path`,{d:`M9 18V5l12-2v13`,key:`1jmyc2`}],[`circle`,{cx:`6`,cy:`18`,r:`3`,key:`fqmcym`}],[`circle`,{cx:`18`,cy:`16`,r:`3`,key:`1hluhg`}]]),c=e(t(),1),l=n();function u({filePath:e,projectName:t}){let[n,r]=(0,c.useState)(!1);return n?(0,l.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-text-secondary`,children:[(0,l.jsx)(i,{className:`size-10 text-text-subtle`}),(0,l.jsx)(`p`,{className:`text-sm`,children:`Failed to load audio.`})]}):(0,l.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-4 p-4 bg-surface`,children:[(0,l.jsx)(s,{className:`size-16 text-text-subtle`}),(0,l.jsx)(`p`,{className:`text-sm text-text-secondary truncate max-w-xs`,children:a(e)}),(0,l.jsx)(`audio`,{src:o(e,t),controls:!0,preload:`metadata`,className:`w-full max-w-md`,onError:()=>r(!0)},e)]})}export{u as AudioPreview};
1
+ import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{S as t,x as n}from"./vendor-markdown-Ls5AcU91.js";import"./vendor-ui-CaeeFO0B.js";import{t as r}from"./createLucideIcon-D8pyde1A.js";import{t as i}from"./file-exclamation-point-a8f3_w7a.js";import"./api-client-BSB14J4w.js";import{t as a}from"./utils-DoY4yTP-.js";import{r as o}from"./media-url-DlYsHq0S.js";var s=r(`music`,[[`path`,{d:`M9 18V5l12-2v13`,key:`1jmyc2`}],[`circle`,{cx:`6`,cy:`18`,r:`3`,key:`fqmcym`}],[`circle`,{cx:`18`,cy:`16`,r:`3`,key:`1hluhg`}]]),c=e(t(),1),l=n();function u({filePath:e,projectName:t}){let[n,r]=(0,c.useState)(!1);return n?(0,l.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-text-secondary`,children:[(0,l.jsx)(i,{className:`size-10 text-text-subtle`}),(0,l.jsx)(`p`,{className:`text-sm`,children:`Failed to load audio.`})]}):(0,l.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-4 p-4 bg-surface`,children:[(0,l.jsx)(s,{className:`size-16 text-text-subtle`}),(0,l.jsx)(`p`,{className:`text-sm text-text-secondary truncate max-w-xs`,children:a(e)}),(0,l.jsx)(`audio`,{src:o(e,t),controls:!0,preload:`metadata`,className:`w-full max-w-md`,onError:()=>r(!0)},e)]})}export{u as AudioPreview};
@@ -1,6 +1,6 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/edit-diff-preview-BivQwZMD.js","assets/rolldown-runtime-FhOqtrmT.js","assets/vendor-markdown-Ls5AcU91.js","assets/libesm-ah-mr-sh.js","assets/markdown-renderer-feiuhJ9n.js","assets/vendor-mermaid-Bg4vE8QA.js","assets/vendor-ui-CaeeFO0B.js","assets/markdown-renderer-BaBQ6Wm6.js","assets/index-DgbOF3xa.js","assets/button-B4MWPjWj.js","assets/utils-DoY4yTP-.js","assets/createLucideIcon-D8pyde1A.js","assets/eye-off-CUdzgmX8.js","assets/bot-CunPuEdW.js","assets/context-menu-DkQdt6YA.js","assets/chevron-right-BLOtX8Vy.js","assets/clock-D493FU_D.js","assets/sparkles-n1hzh65o.js","assets/copy-BApI9v7Z.js","assets/database-B9okYLx6.js","assets/download-D9UYwY0-.js","assets/plus-DmjC2iRB.js","assets/x-BcqfTY_7.js","assets/api-client-BSB14J4w.js","assets/react-I_EwPIZi.js","assets/mobile-bottom-sheet-CS3XMwFw.js","assets/use-is-mobile-B8FA4kQf.js","assets/api-settings-DfNRPr1q.js","assets/project-store-B8BkHXy5.js","assets/panel-store-DCD82zc1.js","assets/settings-store-C9YT1Hir.js","assets/tab-store-DAsvpx4t.js","assets/apply-theme-CNj1iA-v.js","assets/resolve-theme-CJvkL8hU.js","assets/index-oxsyfDa0.css","assets/image-gallery-CrM5fHKy.js","assets/run-in-terminal-CGW6o37_.js","assets/api-client-CzABTreM.js"])))=>i.map(i=>d[i]);
2
- import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{S as t,x as n}from"./vendor-markdown-Ls5AcU91.js";import"./vendor-ui-CaeeFO0B.js";import{t as r}from"./createLucideIcon-D8pyde1A.js";import{t as i}from"./bot-CunPuEdW.js";import{d as a}from"./context-menu-DkQdt6YA.js";import{t as o}from"./chevron-right-BLOtX8Vy.js";import{a as s,i as c,n as l,o as u,r as d}from"./tool-cards-Bgp8iceS.js";import{r as f,t as p}from"./button-B4MWPjWj.js";import{t as m}from"./clock-D493FU_D.js";import{t as h}from"./code-CLF5x7KK.js";import{t as g}from"./sparkles-n1hzh65o.js";import{t as _}from"./copy-BApI9v7Z.js";import{t as v}from"./download-D9UYwY0-.js";import{n as y,t as b}from"./plus-DmjC2iRB.js";import{t as x}from"./shield-off-egKAZEwR.js";import{t as S}from"./x-BcqfTY_7.js";import{i as C,n as w,r as ee,s as T}from"./api-client-BSB14J4w.js";import{q as te}from"./vendor-mermaid-Bg4vE8QA.js";import{t as ne}from"./settings-store-C9YT1Hir.js";import{n as E,r as re,t as D}from"./utils-DoY4yTP-.js";import{t as ie}from"./panel-store-DCD82zc1.js";import{i as O}from"./project-store-B8BkHXy5.js";import{t as ae}from"./tab-store-DAsvpx4t.js";import{n as k}from"./use-is-mobile-B8FA4kQf.js";import{t as oe}from"./mobile-bottom-sheet-CS3XMwFw.js";import{_ as se,a as A,c as ce,h as j,i as M,l as le,m as N,o as P,p as F,r as I,s as ue,t as L,u as R}from"./api-settings-DfNRPr1q.js";import{$n as z,$t as B,An as de,Ar as V,B as H,Bn as fe,Cn as pe,Cr as U,Dn as W,Dr as me,En as he,Er as G,Fn as ge,G as _e,Gn as ve,H as ye,Hn as K,In as be,Jt as q,K as xe,Kn as Se,L as Ce,Ln as we,Mn as Te,Mr as Ee,Nn as De,Nr as Oe,O as ke,Or as J,Pn as Ae,Qn as je,Qt as Y,R as Me,Rn as Ne,Sn as Pe,Tr as X,U as Fe,Un as Ie,V as Le,W as Re,Xn as ze,Xt as Be,Yn as Ve,Yt as He,Zt as Ue,_n as We,en as Ge,er as Z,g as Ke,hn as qe,hr as Je,in as Ye,ir as Xe,jr as Ze,kn as Qe,kr as $e,lt as et,mn as tt,or as nt,pn as rt,pr as it,q as at,qn as ot,r as st,t as ct,ur as lt,wn as ut,wr as dt,xn as ft,yr as pt,z as mt}from"./index-DgbOF3xa.js";import{t as ht}from"./use-websocket-TnL2I1io.js";import"./use-blob-url-BmlYYZ8L.js";import{n as gt,r as _t,t as vt}from"./image-gallery-CrM5fHKy.js";import{t as yt}from"./libesm-ah-mr-sh.js";import{t as bt}from"./use-open-team-member-CUvV02fA.js";import{n as xt,t as St}from"./send-to-chat-YXHdAyLG.js";var Ct=r(`activity`,[[`path`,{d:`M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2`,key:`169zse`}]]),wt=r(`chevrons-down`,[[`path`,{d:`m7 6 5 5 5-5`,key:`1lc07p`}],[`path`,{d:`m7 13 5 5 5-5`,key:`1d48rs`}]]),Tt=r(`clipboard-check`,[[`rect`,{width:`8`,height:`4`,x:`8`,y:`2`,rx:`1`,ry:`1`,key:`tgr4d6`}],[`path`,{d:`M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2`,key:`116196`}],[`path`,{d:`m9 14 2 2 4-4`,key:`df797q`}]]),Et=r(`hand`,[[`path`,{d:`M18 11V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2`,key:`1fvzgz`}],[`path`,{d:`M14 10V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v2`,key:`1kc0my`}],[`path`,{d:`M10 10.5V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2v8`,key:`10h0bg`}],[`path`,{d:`M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15`,key:`1s1gnw`}]]),Dt=r(`image-off`,[[`line`,{x1:`2`,x2:`22`,y1:`2`,y2:`22`,key:`a6p6uj`}],[`path`,{d:`M10.41 10.41a2 2 0 1 1-2.83-2.83`,key:`1bzlo9`}],[`line`,{x1:`13.5`,x2:`6`,y1:`13.5`,y2:`21`,key:`1q0aeu`}],[`line`,{x1:`18`,x2:`21`,y1:`12`,y2:`15`,key:`5mozeu`}],[`path`,{d:`M3.59 3.59A1.99 1.99 0 0 0 3 5v14a2 2 0 0 0 2 2h14c.55 0 1.052-.22 1.41-.59`,key:`mmje98`}],[`path`,{d:`M21 15V5a2 2 0 0 0-2-2H9`,key:`43el77`}]]),Ot=r(`list-ordered`,[[`path`,{d:`M11 5h10`,key:`1cz7ny`}],[`path`,{d:`M11 12h10`,key:`1438ji`}],[`path`,{d:`M11 19h10`,key:`11t30w`}],[`path`,{d:`M4 4h1v5`,key:`10yrso`}],[`path`,{d:`M4 9h2`,key:`r1h2o0`}],[`path`,{d:`M6.5 20H3.4c0-1 2.6-1.925 2.6-3.5a1.5 1.5 0 0 0-2.6-1.02`,key:`xtkcd5`}]]),kt=r(`mic-off`,[[`path`,{d:`M12 19v3`,key:`npa21l`}],[`path`,{d:`M15 9.34V5a3 3 0 0 0-5.68-1.33`,key:`1gzdoj`}],[`path`,{d:`M16.95 16.95A7 7 0 0 1 5 12v-2`,key:`cqa7eg`}],[`path`,{d:`M18.89 13.23A7 7 0 0 0 19 12v-2`,key:`16hl24`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}],[`path`,{d:`M9 9v3a3 3 0 0 0 5.12 2.12`,key:`r2i35w`}]]),At=r(`paperclip`,[[`path`,{d:`m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551`,key:`1miecu`}]]),jt=r(`shield-alert`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`M12 8v4`,key:`1got3b`}],[`path`,{d:`M12 16h.01`,key:`1drbdi`}]]),Mt=r(`slash`,[[`path`,{d:`M22 2 2 22`,key:`y4kqgn`}]]),Q=e(t(),1);function Nt(e){let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n)|0;return Math.abs(t).toString(36)}function Pt(e,t){let n=`pc-${Nt(t)}-`;return e.map(e=>e.id?{...e,id:`${n}${e.id}`}:e)}function Ft(e,t){if(t.size===0)return e;let n=[];for(let r of e){let e=r.id?t.get(r.id):void 0;e&&e.length>0&&n.push(...e),n.push(r)}return n}var It=null;function Lt(){return It||=new AudioContext,It}function Rt(e,t,n,r,i=`sine`){let a=Lt(),o=a.createOscillator(),s=a.createGain();o.type=i,o.frequency.value=e,s.gain.setValueAtTime(r,n),s.gain.exponentialRampToValueAtTime(.001,n+t),o.connect(s),s.connect(a.destination),o.start(n),o.stop(n+t)}function zt(){let e=Lt().currentTime;Rt(523,.15,e,.15),Rt(659,.2,e+.12,.15)}function Bt(){let e=Lt().currentTime;Rt(880,.12,e,.18,`square`),Rt(698,.12,e+.15,.18,`square`),Rt(880,.15,e+.3,.15,`square`)}function Vt(){let e=Lt().currentTime;Rt(440,.12,e,.12),Rt(523,.12,e+.1,.12),Rt(659,.18,e+.2,.12)}var Ht={done:zt,approval_request:Bt,question:Vt};function Ut(e){try{Ht[e]?.()}catch{}}var Wt={hasTeams:!1,teamNames:[],messageCount:0,unreadCount:0};function Gt(e){if(document.hidden)return!1;let{panels:t}=ie.getState();for(let n of Object.values(t)){let t=n.tabs.find(e=>e.id===n.activeTabId);if(t?.type===`chat`&&t.metadata?.sessionId===e)return!0}return!1}function Kt(e,t=`claude`,n=``){let[r,i]=(0,Q.useState)([]),[a,o]=(0,Q.useState)(new Map),[s,c]=(0,Q.useState)(!1),[l,u]=(0,Q.useState)({}),[d,f]=(0,Q.useState)(`idle`),[p,m]=(0,Q.useState)(!1),[h,g]=(0,Q.useState)(0),[_,v]=(0,Q.useState)(null),[y,b]=(0,Q.useState)(null),[x,S]=(0,Q.useState)(null),[te,ne]=(0,Q.useState)([]),E=(0,Q.useRef)([]),[re,D]=(0,Q.useState)(null),[O,ae]=(0,Q.useState)(null),[k,oe]=(0,Q.useState)(!1),[se,A]=(0,Q.useState)(null),[ce,j]=(0,Q.useState)(null),M=(0,Q.useRef)(null),le=(0,Q.useRef)(null),[N,P]=(0,Q.useState)(null),F=(0,Q.useRef)(null),[I,ue]=(0,Q.useState)(!0),L=(0,Q.useRef)(null),R=(0,Q.useRef)(null),z=(0,Q.useRef)(``),B=(0,Q.useRef)([]),de=(0,Q.useRef)(new Map),V=(0,Q.useRef)(null),H=(0,Q.useRef)(`idle`),fe=(0,Q.useRef)(null),pe=(0,Q.useRef)(()=>{}),U=(0,Q.useRef)(null),W=(0,Q.useRef)(!1),me=(0,Q.useRef)(new Set),he=(0,Q.useRef)(0),G=(0,Q.useRef)(null),ge=(0,Q.useRef)(0),_e=(0,Q.useRef)(e);_e.current=e;let ve=(0,Q.useRef)([]);ve.current=r;let ye=(0,Q.useRef)(n);ye.current=n;let K=(0,Q.useRef)(null),be=(0,Q.useRef)(0),q=(0,Q.useRef)({teamNames:new Set,messages:[]}),xe=(0,Q.useRef)(0),[Se,Ce]=(0,Q.useState)(Wt),[we,Te]=(0,Q.useState)([]),Ee=(0,Q.useCallback)(()=>{let e=q.current;Ce({hasTeams:e.teamNames.size>0,teamNames:Array.from(e.teamNames),messageCount:e.messages.length,unreadCount:xe.current}),Te([...e.messages])},[]),De=(0,Q.useCallback)(()=>{xe.current=0,Ee()},[Ee]),Oe=(0,Q.useCallback)(async e=>{try{let t=await w.get(`/api/teams/${encodeURIComponent(e)}`);if(!t?.messages)return;let n=q.current.messages,r=t.messages.filter(e=>!n.some(t=>t.timestamp===e.timestamp&&t.from===e.from));n.push(...r),n.sort((e,t)=>new Date(e.timestamp).getTime()-new Date(t.timestamp).getTime()),n.length>500&&n.splice(0,n.length-500),Ee()}catch{}},[Ee]),ke=d!==`idle`;(0,Q.useEffect)(()=>{if(e)return Ye.getState().setStreaming(e,d!==`idle`,n),()=>{Ye.getState().setStreaming(e,!1)}},[e,d,n]);let J=(0,Q.useCallback)((e,t)=>{let n=B.current.findIndex(e=>e.type===`tool_use`&&(e.tool===`Agent`||e.tool===`Task`)&&e.toolUseId===t);if(n===-1)return!1;let r=B.current[n];if(r.type!==`tool_use`)return!1;let i=[...r.children??[],e];return B.current[n]={...r,children:i},!0},[]),Ae=(0,Q.useCallback)((e,t)=>{let n=e=>e.type===`tool_use`&&(e.tool===`Agent`||e.tool===`Task`)&&e.toolUseId===t,r=ve.current,a=-1;for(let e=r.length-1;e>=0;e--)if(r[e].events?.some(n)){a=e;break}return a===-1?!1:(i(t=>{let r=-1;for(let e=t.length-1;e>=0;e--)if(t[e].events?.some(n)){r=e;break}if(r===-1)return t;let i=t[r],a=i.events.map(t=>{if(!n(t)||t.type!==`tool_use`)return t;let r=[...t.children??[]],i=e.toolUseId,a=i?r.findIndex(t=>t.type===e.type&&t.toolUseId===i):-1;return a===-1?r.push(e):r[a]=e,{...t,children:r}});return[...t.slice(0,r),{...i,events:a},...t.slice(r+1)]}),!0)},[]),je=(0,Q.useCallback)(()=>{be.current=0;let e=z.current,t=[...B.current],n=V.current;(0,Q.startTransition)(()=>{i(r=>{let i=r[r.length-1];return i?.role===`assistant`&&!i.id.startsWith(`final-`)?[...r.slice(0,-1),{...i,content:e,events:t,...n}]:[...r,{id:`streaming-${Date.now()}`,role:`assistant`,content:e,events:t,timestamp:new Date().toISOString(),...n}]})})},[]),Y=(0,Q.useCallback)(()=>{be.current||=window.setTimeout(je,100)},[je]),Me=(0,Q.useCallback)((e,t)=>{let n=t=>t.type===`tool_use`&&(t.tool===`Agent`||t.tool===`Task`)&&t.toolUseId===e,r=B.current.findIndex(n);if(r!==-1){B.current[r]={...B.current[r],bgStatus:t},Y();return}i(e=>{let r=-1;for(let t=e.length-1;t>=0;t--)if(e[t].events?.some(n)){r=t;break}if(r===-1)return e;let i=e[r],a=i.events.map(e=>n(e)?{...e,bgStatus:t}:e);return[...e.slice(0,r),{...i,events:a},...e.slice(r+1)]})},[Y]),Ne=(0,Q.useCallback)(e=>{let t=e,n=t?.type;if(!n)return;let r=e=>{let n=B.current,r=n.findIndex(e);r===-1?n.push(t):n[r]=t};switch(n){case`account_info`:V.current={accountId:t.accountId,accountLabel:t.accountLabel},D(null);break;case`account_retry`:t.accountId&&t.accountLabel&&(V.current={accountId:t.accountId,accountLabel:t.accountLabel}),B.current=[t],Y();break;case`status_update`:{let e=t.accountLabel?` (${t.accountLabel})`:``;D(`${t.message}${e}`);break}case`text`:{let e=t.parentToolUseId;if(e&&J(t,e)){Y();break}if(e){Ae(t,e);break}z.current+=t.content,B.current.push(t),Y();break}case`thinking`:{let e=t.parentToolUseId;if(e&&J(t,e)){Y();break}if(e){Ae(t,e);break}B.current.push(t),Y();break}case`tool_use`:{if(t.tool===`AskUserQuestion`){t.toolUseId&&me.current.add(t.toolUseId);break}let e=t.parentToolUseId;if(e&&J(t,e)){Y();break}if(e){Ae(t,e);break}let n=t.toolUseId;r(e=>!!n&&e.type===`tool_use`&&e.toolUseId===n),Y();break}case`tool_result`:{let e=t.toolUseId;if(e&&de.current.delete(e),e&&me.current.has(e))break;let n=t.parentToolUseId;if(n&&J(t,n)){Y();break}if(n){Ae(t,n);break}r(t=>!!e&&t.type===`tool_result`&&t.toolUseId===e),Y();break}case`approval_resolved`:{let e=t.requestId;if(t.approved&&t.answers){let n=B.current.find(t=>t.type===`approval_request`&&t.requestId===e&&t.tool===`AskUserQuestion`),r=n&&n.input;r&&typeof r==`object`&&(r.answers=t.answers,i(e=>[...e]))}v(t=>t&&t.requestId===e?null:t),K.current!=null&&(T.dismiss(K.current),K.current=null);break}case`approval_request`:if(r(e=>e.type===`approval_request`&&e.requestId===t.requestId),W.current)break;if(v({requestId:t.requestId,tool:t.tool,input:t.input}),_e.current&&!Gt(_e.current)){Ut(t.tool===`AskUserQuestion`?`question`:`approval_request`);let e=_e.current,n=t.tool===`AskUserQuestion`;K.current=T[n?`info`:`warning`](n?`AI has a question`:`${t.tool} needs permission`,{description:ye.current||`Session ${e.slice(0,8)}`,duration:1/0,action:{label:`Go to session`,onClick:()=>{let{panels:t}=ie.getState();for(let[n,r]of Object.entries(t)){let t=r.tabs.find(t=>t.metadata?.sessionId===e);if(t){ie.getState().setActiveTab(t.id,n);break}}}}})}break;case`error`:i(e=>{let n=e[e.length-1];if(n?.role===`assistant`){let r=B.current,i=r[r.length-1],a=i?.type===`error`&&i.message===t.message?r:[...r,t];return B.current=a,[...e.slice(0,-1),{...n,events:a}]}return n?.role===`system`&&n.content===t.message?e:[...e,{id:`error-${Date.now()}`,role:`system`,content:t.message,events:[t],timestamp:new Date().toISOString()}]});break;case`team_detected`:{let e=t.teamName;e&&(q.current.teamNames.add(e),Ee(),Oe(e));break}case`team_inbox`:{let e=t.messages;if(Array.isArray(e)){let t=q.current.messages;t.push(...e),t.length>500&&t.splice(0,t.length-500),xe.current+=e.length,Ee()}break}case`team_updated`:Ee();break;case`bash_output`:{let e=t.toolUseId;if(e){let n=de.current.get(e);n?(n.content+=t.content,n.content.length>5e5&&(n.content=n.content.slice(-5e5)),n.lineCount=t.lineCount):de.current.set(e,{content:t.content,lineCount:t.lineCount}),Y()}break}case`subagent_status`:{let e=t.toolUseId,n=t.status;e&&n&&Me(e,n);break}case`background_registry`:{let e=t.shells??[];E.current=e,ne(e);break}case`done`:{if(H.current===`idle`)break;t.contextWindowPct!=null&&b(t.contextWindowPct),_e.current&&!Gt(_e.current)&&Ut(`done`),be.current&&=(clearTimeout(be.current),0);let e=z.current,n=[...B.current],r=V.current,a=t.lastMessageUuid,o=t.usage;i(t=>{let i=t[t.length-1];return i?.role===`assistant`?[...t.slice(0,-1),{...i,id:`final-${Date.now()}`,content:e||i.content,events:n.length>0?n:i.events,...a&&{sdkUuid:a},...o&&{usage:o}}]:e||n.length>0?[...t,{id:`final-${Date.now()}`,role:`assistant`,content:e,events:n,timestamp:new Date().toISOString(),...a&&{sdkUuid:a},...o&&{usage:o},...r}]:t}),z.current=``,B.current=[],V.current=null,G.current=null,de.current.clear(),D(null);break}}},[J,Ae,Y,Me,Ee,Oe]),Pe=(0,Q.useCallback)(e=>{let t;try{t=JSON.parse(e.data)}catch{return}if(t.type!==`ping`){if(t.type===`user_message`){let e=t.content;i(n=>{let r=n[n.length-1];return r?.role===`user`&&r.content===e?n:[...n,{id:`user-remote-${Date.now()}`,role:`user`,content:e,timestamp:t.timestamp??new Date().toISOString()}]});return}if(t.type===`title_updated`){ae(t.title??null);return}if(t.type===`compact_status`){let e=t.status;e===`compacting`?S(`compacting`):e===`done`&&S(null);return}if(t.type===`phase_changed`){let e=t.phase;f(e),H.current=e,g(e===`connecting`?t.elapsed??0:0),e===`idle`&&S(null);return}if(t.type===`session_state`){oe(!0),A(t.sessionId??_e.current);let e=t,n=e.phase,r=H.current===`idle`;if(f(n),H.current=n,e.sessionTitle&&ae(e.sessionTitle),e.model&&(le.current&&e.model!==le.current||(e.model===le.current&&(le.current=null),j(e.model),M.current=e.model)),typeof e.effort==`string`&&(P(e.effort),F.current=e.effort),typeof e.thinking==`boolean`&&ue(e.thinking),e.pendingApproval&&v({requestId:e.pendingApproval.requestId,tool:e.pendingApproval.tool,input:e.pendingApproval.input}),S(e.compactStatus===`compacting`?`compacting`:null),n===`idle`){let e=Date.now()-ge.current<5e3;r&&e||U.current?.(),m(!1)}return}if(t.type===`turn_events`){let e=t.events,n=t.userMessage;if(!e?.length&&!n){m(!1);return}he.current&&=(cancelAnimationFrame(he.current),0),G.current=n,i(e=>{let t=[...e],r=t.length;for(;r>0&&t[r-1].role===`assistant`;)r--;if(n!=null&&r>0&&t[r-1].role===`user`&&t[r-1].content===n)t=t.slice(0,r-1);else{let e=t[t.length-1];e?.role===`assistant`&&e.id.startsWith(`streaming-`)&&(t=t.slice(0,-1))}if(n){let e=t[t.length-1];(e?.role!==`user`||e.content!==n)&&(t=[...t,{id:`user-replay-${Date.now()}`,role:`user`,content:n,timestamp:new Date().toISOString()}])}return t}),z.current=``,B.current=[],V.current=null,W.current=!0;let r=0,a=()=>{let t=Math.min(r+100,e.length);for(let n=r;n<t;n++)Ne(e[n]);r=t,r<e.length?he.current=requestAnimationFrame(a):(he.current=0,W.current=!1,m(!1))};he.current=requestAnimationFrame(a);return}Ne(t)}},[Ne]),{send:X,connect:Fe}=ht({url:e&&n?`/ws/project/${encodeURIComponent(n)}/chat/${e}`:``,onMessage:Pe,autoConnect:!!e&&!!n});pe.current=X,(0,Q.useEffect)(()=>{let r=!1;R.current&&R.current!==e&&(le.current=null,L.current=null),R.current=e??null,f(`idle`),H.current=`idle`,v(null),K.current!=null&&(T.dismiss(K.current),K.current=null),S(null),o(new Map),u({}),z.current=``,B.current=[],G.current=null,ge.current=0,de.current.clear(),be.current&&=(clearTimeout(be.current),0),oe(!1),A(null),q.current={teamNames:new Set,messages:[]},xe.current=0,Ce(Wt),Te([]),e&&w.get(`/api/teams`).then(t=>{r||!Array.isArray(t)||t.filter(t=>(t?.name??t?.team_name)===e).length!==0&&(q.current.teamNames.add(e),Ee(),Oe(e))}).catch(()=>{});let a=new Set(ve.current.map(e=>e.id));return e&&n?(c(!0),w.get(`${C(n)}/chat/sessions/${e}/messages?providerId=${t}`).then(e=>{if(r)return;let t=Array.isArray(e)?{messages:e,versionMap:{}}:e,n=Array.isArray(t?.messages)?t.messages:[];t?.versionMap&&u(t.versionMap);let o=G.current;if(o!=null){for(let e=n.length-1;e>=0;e--)if(n[e].role===`user`&&n[e].content===o){n=n.slice(0,e);break}}i(e=>{let t=e.filter(e=>!a.has(e.id));return[...n,...t]}),ge.current=Date.now()}).catch(()=>{r||i(e=>e.filter(e=>!a.has(e.id)))}).finally(()=>{r||c(!1)})):i([]),()=>{r=!0}},[e,t,n,Ee,Oe]);let Ie=(0,Q.useCallback)((e,t)=>{if(!e.trim())return;let n=H.current!==`idle`;if(n){be.current&&=(clearTimeout(be.current),0);let e=z.current,t=[...B.current];i(n=>{let r=n[n.length-1];return r?.role===`assistant`?[...n.slice(0,-1),{...r,id:`final-${Date.now()}`,content:e||r.content,events:t.length>0?t:r.events}]:n})}i(t=>[...t,{id:`user-${Date.now()}`,role:`user`,content:e,timestamp:new Date().toISOString()}]),z.current=``,B.current=[],fe.current=null,n?(f(`thinking`),H.current=`thinking`):(f(`initializing`),H.current=`initializing`),v(null),K.current!=null&&(T.dismiss(K.current),K.current=null),X(JSON.stringify({type:`message`,content:e,permissionMode:t?.permissionMode,priority:t?.priority,images:t?.images,...M.current&&{model:M.current},...F.current&&{effort:F.current},...L.current!==null&&{thinking:L.current}}))},[X]),Le=(0,Q.useCallback)(e=>{j(e),M.current=e,le.current=e,X(JSON.stringify({type:`set_model`,model:e}))},[X]),Re=(0,Q.useCallback)(e=>{P(e),F.current=e,X(JSON.stringify({type:`set_effort`,effort:e}))},[X]),ze=(0,Q.useCallback)(e=>{ue(e),L.current=e,X(JSON.stringify({type:`set_thinking`,enabled:e}))},[X]),Be=(0,Q.useCallback)((e,t,n)=>{if(X(JSON.stringify({type:`approval_response`,requestId:e,approved:t,data:n})),t&&n){let t=B.current.find(t=>t.type===`approval_request`&&t.requestId===e&&t.tool===`AskUserQuestion`);if(t){let e=t.input;e&&typeof e==`object`&&(e.answers=n)}i(e=>[...e])}v(null),K.current!=null&&(T.dismiss(K.current),K.current=null)},[X]),Ve=(0,Q.useCallback)(()=>{if(H.current===`idle`)return;X(JSON.stringify({type:`cancel`}));let e=z.current,t=[...B.current];i(n=>{let r=n[n.length-1];return r?.role===`assistant`?[...n.slice(0,-1),{...r,id:`final-${Date.now()}`,content:e||r.content,events:t.length>0?t:r.events}]:n}),z.current=``,B.current=[],de.current.clear(),fe.current=null,f(`idle`),H.current=`idle`,v(null),K.current!=null&&(T.dismiss(K.current),K.current=null)},[X]),He=(0,Q.useCallback)(e=>{e&&X(JSON.stringify({type:`kill_background_shell`,shellId:e}))},[X]),Ue=(0,Q.useCallback)(e=>{if(!e)return;let t=e.replace(/\.output$/,``);return E.current.find(n=>n.shellId===t||n.outputPath.endsWith(e)||n.outputPath.endsWith(`${t}.output`))},[]);(0,Q.useEffect)(()=>{e&&ct.getState().setSessionShells(e,te)},[e,te]),(0,Q.useEffect)(()=>{if(e)return ct.getState().retainSession(e),()=>{ct.getState().releaseSession(e)}},[e]);let We=(0,Q.useCallback)(()=>{oe(!1),m(!0),Fe()},[Fe]),Ge=(0,Q.useCallback)(()=>{!e||!n||fetch(`${C(n)}/chat/sessions/${e}/messages?providerId=${t}`,{headers:{Authorization:`Bearer ${ee()}`}}).then(e=>e.json()).then(e=>{if(H.current!==`idle`)return;let t=e.ok?Array.isArray(e.data)?{messages:e.data,versionMap:void 0}:e.data:null;t?.versionMap&&u(t.versionMap),Array.isArray(t?.messages)&&t.messages.length>0&&(i(t.messages),z.current=``,B.current=[]),ge.current=Date.now()}).catch(()=>{})},[e,t,n]);U.current=Ge;let Z=(0,Q.useCallback)(async(e,t)=>{if(!n)throw Error(`No project context available`);let r=e.replace(/^pc-[^-]+-/,``),i=`${C(n)}/chat/pre-compact-messages?jsonlPath=${encodeURIComponent(t)}&before=${encodeURIComponent(r)}`,a=Pt(await w.get(i),t);return o(t=>{let n=new Map(t);return n.set(e,a),n}),a.length},[n]),Ke=(0,Q.useCallback)(e=>a.has(e),[a]),qe=(0,Q.useCallback)(e=>{i(t=>t.filter(t=>t.id!==e))},[]),Je=(0,Q.useCallback)(()=>{i(e=>e.filter(e=>e.role!==`system`))},[]);return{messages:r,renderedMessages:(0,Q.useMemo)(()=>Ft(r,a),[r,a]),expandCompact:Z,isCompactExpanded:Ke,dismissMessage:qe,clearErrors:Je,messagesLoading:s,versionMap:l,isStreaming:ke,phase:d,isReconnecting:p,connectingElapsed:h,pendingApproval:_,contextWindowPct:y,compactStatus:x,statusMessage:re,sessionTitle:O,model:ce,setModel:Le,effort:N,setEffort:Re,thinking:I,setThinking:ze,teamActivity:Se,teamMessages:we,markTeamRead:De,bashPartialOutput:de,backgroundShells:te,killBackgroundShell:He,findBackgroundShellByOutput:Ue,sendMessage:Ie,respondToApproval:Be,cancelStreaming:Ve,reconnect:We,refetchMessages:Ge,isConnected:k&&se===e}}var qt=12e4;function Jt(e,t=`claude`,n){let[r,i]=(0,Q.useState)({}),[a,o]=(0,Q.useState)(!1),[s,c]=(0,Q.useState)(null),l=(0,Q.useRef)(null),u=(0,Q.useCallback)((r=!1)=>{if(!e)return;o(!0);let a=r?`&refresh=1`:``,s=n?`&session=${encodeURIComponent(n)}`:``;w.get(`${C(e)}/chat/usage?providerId=${t}${s}${a}`).then(e=>{e&&(i(t=>({...t,...e})),e.lastFetchedAt&&c(e.lastFetchedAt))}).catch(()=>{}).finally(()=>o(!1))},[e,t,n]);return(0,Q.useEffect)(()=>(u(),l.current=setInterval(()=>u(),qt),()=>{l.current&&clearInterval(l.current)}),[u]),{usageInfo:r,usageLoading:a,lastFetchedAt:s,refreshUsage:(0,Q.useCallback)(()=>u(!0),[u])}}var Yt={damping:.7,stiffness:.05,mass:1.25},Xt=70,Zt=1e3/60,Qt=350,$t=!1;globalThis.document?.addEventListener(`mousedown`,()=>{$t=!0}),globalThis.document?.addEventListener(`mouseup`,()=>{$t=!1}),globalThis.document?.addEventListener(`click`,()=>{$t=!1});var en=(e={})=>{let[t,n]=(0,Q.useState)(!1),[r,i]=(0,Q.useState)(e.initial!==!1),[a,o]=(0,Q.useState)(!1),s=(0,Q.useRef)(null);s.current=e;let c=(0,Q.useCallback)(()=>{if(!$t)return!1;let e=window.getSelection();if(!e||!e.rangeCount)return!1;let t=e.getRangeAt(0);return t.commonAncestorContainer.contains(g.current)||g.current?.contains(t.commonAncestorContainer)},[]),l=(0,Q.useCallback)(e=>{d.isAtBottom=e,i(e)},[]),u=(0,Q.useCallback)(e=>{d.escapedFromLock=e,n(e)},[]),d=(0,Q.useMemo)(()=>{let n;return{escapedFromLock:t,isAtBottom:r,resizeDifference:0,accumulated:0,velocity:0,listeners:new Set,get scrollTop(){return g.current?.scrollTop??0},set scrollTop(e){if(g.current){let{scrollBehavior:t}=getComputedStyle(g.current);t!==`auto`&&(g.current.style.scrollBehavior=`auto`),g.current.scrollTop=e,d.ignoreScrollToTop=g.current.scrollTop,t!==`auto`&&(g.current.style.scrollBehavior=t)}},get targetScrollTop(){return!g.current||!_.current?0:g.current.scrollHeight-1-g.current.clientHeight},get calculatedTargetScrollTop(){if(!g.current||!_.current)return 0;let{targetScrollTop:t}=this;if(!e.targetScrollTop)return t;if(n?.targetScrollTop===t)return n.calculatedScrollTop;let r=Math.max(Math.min(e.targetScrollTop(t,{scrollElement:g.current,contentElement:_.current}),t),0);return n={targetScrollTop:t,calculatedScrollTop:r},requestAnimationFrame(()=>{n=void 0}),r},get scrollDifference(){return this.calculatedTargetScrollTop-this.scrollTop},get isNearBottom(){return this.scrollDifference<=Xt}}},[]),f=(0,Q.useCallback)((e={})=>{typeof e==`string`&&(e={animation:e}),e.preserveScrollPosition||l(!0);let t=Date.now()+(Number(e.wait)||0),n=rn(s.current,e.animation),{ignoreEscapes:r=!1}=e,i,a=d.calculatedTargetScrollTop;e.duration instanceof Promise?e.duration.finally(()=>{i=Date.now()}):i=t+(e.duration??0);let o=async()=>{let e=new Promise(requestAnimationFrame).then(()=>{if(!d.isAtBottom)return d.animation=void 0,!1;let{scrollTop:l}=d,u=performance.now(),p=(u-(d.lastTick??u))/Zt;if(d.animation||={behavior:n,promise:e,ignoreEscapes:r},d.animation.behavior===n&&(d.lastTick=u),c()||t>Date.now())return o();if(l<Math.min(a,d.calculatedTargetScrollTop)){if(d.animation?.behavior===n){if(n===`instant`)return d.scrollTop=d.calculatedTargetScrollTop,o();d.velocity=(n.damping*d.velocity+n.stiffness*d.scrollDifference)/n.mass,d.accumulated+=d.velocity*p,d.scrollTop+=d.accumulated,d.scrollTop!==l&&(d.accumulated=0)}return o()}return i>Date.now()?(a=d.calculatedTargetScrollTop,o()):(d.animation=void 0,d.scrollTop<d.calculatedTargetScrollTop?f({animation:rn(s.current,s.current.resize),ignoreEscapes:r,duration:Math.max(0,i-Date.now())||void 0}):d.isAtBottom)});return e.then(e=>(requestAnimationFrame(()=>{d.animation||(d.lastTick=void 0,d.velocity=0)}),e))};return e.wait!==!0&&(d.animation=void 0),d.animation?.behavior===n?d.animation.promise:o()},[l,c,d]),p=(0,Q.useCallback)(()=>{u(!0),l(!1)},[u,l]),m=(0,Q.useCallback)(({target:e})=>{if(e!==g.current)return;let{scrollTop:t,ignoreScrollToTop:n}=d,{lastScrollTop:r=t}=d;d.lastScrollTop=t,d.ignoreScrollToTop=void 0,n&&n>t&&(r=n),o(d.isNearBottom),setTimeout(()=>{if(d.resizeDifference||t===n)return;if(c()){u(!0),l(!1);return}let e=t>r,i=t<r;if(d.animation?.ignoreEscapes){d.scrollTop=r;return}i&&(u(!0),l(!1)),e&&u(!1),!d.escapedFromLock&&d.isNearBottom&&l(!0)},1)},[u,l,c,d]),h=(0,Q.useCallback)(({target:e,deltaY:t})=>{let n=e;for(;![`scroll`,`auto`].includes(getComputedStyle(n).overflow);){if(!n.parentElement)return;n=n.parentElement}n===g.current&&t<0&&g.current.scrollHeight>g.current.clientHeight&&!d.animation?.ignoreEscapes&&(u(!0),l(!1))},[u,l,d]),g=tn(e=>{g.current?.removeEventListener(`scroll`,m),g.current?.removeEventListener(`wheel`,h),e?.addEventListener(`scroll`,m,{passive:!0}),e?.addEventListener(`wheel`,h,{passive:!0})},[]),_=tn(e=>{if(d.resizeObserver?.disconnect(),d.resizeObserver=void 0,!e)return;let t;d.resizeObserver=new ResizeObserver(([e])=>{let{height:n}=e.contentRect,r=n-(t??n);if(d.resizeDifference=r,d.scrollTop>d.targetScrollTop&&(d.scrollTop=d.targetScrollTop),o(d.isNearBottom),r>=0){let e=rn(s.current,t?s.current.resize:s.current.initial);f({animation:e,wait:!0,preserveScrollPosition:!0,duration:e===`instant`?void 0:Qt})}else d.isNearBottom&&(u(!1),l(!0));t=n,requestAnimationFrame(()=>{setTimeout(()=>{d.resizeDifference===r&&(d.resizeDifference=0)},1)})}),d.resizeObserver?.observe(e)},[]);return{contentRef:_,scrollRef:g,scrollToBottom:f,stopScroll:p,isAtBottom:r||a,isNearBottom:a,escapedFromLock:t,state:d}};function tn(e,t){let n=(0,Q.useCallback)(t=>(n.current=t,e(t)),t);return n}var nn=new Map;function rn(...e){let t={...Yt},n=!1;for(let r of e){if(r===`instant`){n=!0;continue}typeof r==`object`&&(n=!1,t.damping=r.damping??t.damping,t.stiffness=r.stiffness??t.stiffness,t.mass=r.mass??t.mass)}let r=JSON.stringify(t);return nn.has(r)||nn.set(r,Object.freeze(t)),n?`instant`:nn.get(r)}var an=60,on=8,sn=1400;function cn(e){if(e.scrollHeight<=e.clientHeight)return!1;let t=getComputedStyle(e).overflowY;return t===`auto`||t===`scroll`}function ln(e,t){let n=[],r=e.parentElement;for(;r&&r!==t;)cn(r)&&n.push(r),r=r.parentElement;return n}function un(){return typeof matchMedia==`function`&&matchMedia(`(prefers-reduced-motion: reduce)`).matches}function dn(e,t){let n=e.querySelector(`[data-edit-ref="${CSS.escape(t)}"]`);if(n)return{el:n,level:`edit`};let r=t.replace(/-\d+$/,``),i=e.querySelector(`[data-tool-ref="${CSS.escape(r)}"]`);return i?{el:i,level:`card`}:null}function fn(e,t,n,r){let i=e.scrollTop+t.getBoundingClientRect().top-e.getBoundingClientRect().top-n;e.scrollTo({top:i,behavior:r?`smooth`:`auto`})}function pn(e,t){let n=dn(e,t);if(!n)return()=>{};let{el:r,level:i}=n;for(let t of ln(r,e))fn(t,r,on,!1);fn(e,r,an,!un()),r.dataset.flash=i;let a=setTimeout(()=>{delete r.dataset.flash},sn);return()=>{clearTimeout(a),delete r.dataset.flash}}var mn=new Set([`Write`,`Edit`,`MultiEdit`,`NotebookEdit`]),hn={create:3,write:2,notebook:2,edit:1};function gn(e){return typeof e==`string`?e:``}function _n(e,t){let n=0,r=0;for(let i of yt(e,t))i.added?n+=i.count??0:i.removed&&(r+=i.count??0);return{added:n,removed:r}}function vn(e){return e&&/created successfully/i.test(e)?`create`:`write`}function yn(e,t,n){switch(e){case`Write`:{let e=gn(t.file_path);return e?{filePath:e,op:vn(n),fragments:[{oldStr:``,newStr:gn(t.content)}]}:null}case`Edit`:{let e=gn(t.file_path);return e?{filePath:e,op:`edit`,fragments:[{oldStr:gn(t.old_string),newStr:gn(t.new_string)}]}:null}case`MultiEdit`:{let e=gn(t.file_path);if(!e||!Array.isArray(t.edits))return null;let n=t.edits.filter(e=>!!e&&typeof e==`object`).map(e=>({oldStr:gn(e.old_string),newStr:gn(e.new_string)}));return n.length===0?null:{filePath:e,op:`edit`,fragments:n}}case`NotebookEdit`:{let e=gn(t.notebook_path)||gn(t.file_path);return e?{filePath:e,op:`notebook`,fragments:[{oldStr:``,newStr:gn(t.new_source)}]}:null}default:return null}}function bn(e,t){if(e){for(let n of e)if(n.type===`tool_result`&&n.toolUseId&&t.set(n.toolUseId,n.output??``),n.type===`tool_use`){let e=n.result;n.toolUseId&&e?.output!=null&&!t.has(n.toolUseId)&&t.set(n.toolUseId,e.output),bn(n.children,t)}}}function xn(e,t,n,r){if(e)for(let i of e){if(i.type!==`tool_use`||(i.children?.length&&xn(i.children,!0,n,r),!mn.has(i.tool)))continue;let e=i.input&&typeof i.input==`object`?i.input:null;if(!e)continue;let a=yn(i.tool,e,i.toolUseId?r.get(i.toolUseId):void 0);if(!a)continue;let o=n.get(a.filePath);o||(o={filePath:a.filePath,op:a.op,editCount:0,linesAdded:0,linesRemoved:0,edits:[],viaSubagent:!1},n.set(a.filePath,o)),hn[a.op]>hn[o.op]&&(o.op=a.op),t&&(o.viaSubagent=!0),a.fragments.forEach((e,n)=>{let{added:r,removed:a}=_n(e.oldStr,e.newStr);o.linesAdded+=r,o.linesRemoved+=a,o.editCount+=1,o.edits.push({...e,toolUseId:i.toolUseId,editIndex:n,editRef:i.toolUseId?`${i.toolUseId}-${n}`:void 0,viaSubagent:t})})}}function Sn(e){let t=new Map;for(let n of e)bn(n.events,t);let n=new Map;for(let r of e)xn(r.events,!1,n,t);return[...n.values()]}function Cn(e,t){let n=[];for(let r=t;r>=0&&e[r]?.role===`assistant`;r--)n.unshift(e[r]);return n}var $=n();function wn(e){try{return new Date(e).toLocaleString()}catch{return``}}function Tn({icon:e,label:t,title:n,onClick:r}){return(0,$.jsxs)(`button`,{type:`button`,onClick:r,title:n,"aria-label":t,className:`inline-flex items-center justify-center gap-1 rounded-md px-1.5 py-1 text-text-subtle hover:text-text-primary hover:bg-surface transition-colors`,children:[e,(0,$.jsx)(`span`,{children:t})]})}function En({content:e}){let[t,n]=(0,Q.useState)(!1);return(0,$.jsx)(Tn,{icon:t?(0,$.jsx)(a,{className:`size-3.5`}):(0,$.jsx)(_,{className:`size-3.5`}),label:t?`Copied`:`Copy`,title:`Copy message to clipboard`,onClick:()=>{Ge(e),n(!0),setTimeout(()=>n(!1),1500)}})}function Dn({timestamp:e,content:t,className:n,children:r}){return(0,$.jsxs)(`div`,{className:E(`flex items-center gap-0.5 flex-wrap text-xs text-text-subtle select-none`,n),children:[(0,$.jsx)(`time`,{title:wn(e),className:`pr-1 tabular-nums`,children:pe(e)}),(0,$.jsx)(En,{content:t}),r]})}function On(e){let t=0,n=0;for(let r of e)t+=r.linesAdded,n+=r.linesRemoved;return{added:t,removed:n}}function kn({count:e,totals:t,open:n,onToggle:r,ref:i}){let a=`${e} file${e===1?``:`s`}`;return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{"aria-hidden":!0,className:`mx-1.5 h-3.5 w-px bg-border-soft`}),(0,$.jsxs)(`button`,{ref:i,type:`button`,onClick:r,"aria-expanded":n,"aria-label":`${a} changed this turn, ${t.added} added, ${t.removed} removed`,className:E(`inline-flex items-center gap-[7px] rounded-full font-mono text-[11.5px]`,`px-3 min-h-11 md:min-h-0 md:px-[9px] md:py-[5px]`,`text-text-secondary transition-colors hover:bg-surface hover:text-text-primary`),children:[(0,$.jsx)(`span`,{"aria-hidden":!0,className:`size-[5px] shrink-0 rounded-full bg-primary`}),(0,$.jsx)(`span`,{children:a}),(0,$.jsxs)(`span`,{className:`flex items-center gap-[5px] tabular-nums`,children:[(0,$.jsxs)(`span`,{className:`text-success`,children:[`+`,t.added]}),(0,$.jsxs)(`span`,{className:`text-error`,children:[`−`,t.removed]})]})]})]})}function An(e){if(!e)return!1;let t=e.closest(`[data-tab-pool-id]`)?.dataset.tabPoolId;if(!t)return e.offsetParent!==null;let{panels:n,focusedPanelId:r}=ie.getState();return n[r]?.activeTabId===t}var jn={create:{glyph:`A`,cls:`text-success`,label:`created`},write:{glyph:`W`,cls:`text-warning`,label:`overwritten`},notebook:{glyph:`N`,cls:`text-accent-2`,label:`notebook edited`},edit:{glyph:`·`,cls:`text-text-subtle`,label:`edited`}};function Mn(e){let t=Math.max(e.lastIndexOf(`/`),e.lastIndexOf(`\\`));return t<0?{base:e,dir:``}:{base:e.slice(t+1),dir:e.slice(0,t)}}function Nn({added:e,removed:t,editCount:n,className:r}){return(0,$.jsxs)(`span`,{className:E(`flex items-center gap-[5px] tabular-nums`,r),children:[(0,$.jsxs)(`span`,{className:`text-success`,children:[`+`,e]}),(0,$.jsxs)(`span`,{className:`text-error`,children:[`−`,t]}),n!=null&&n>1&&(0,$.jsxs)(`span`,{className:`text-text-subtle`,children:[`×`,n]})]})}function Pn({change:e,dense:t,selected:n,onClick:r}){let i=jn[e.op],{base:a,dir:s}=Mn(e.filePath),c=e.viaSubagent?`${i.label} · changed by a sub-agent`:i.label;return(0,$.jsxs)(`button`,{type:`button`,onClick:r,title:e.filePath,className:E(`grid w-full grid-cols-[16px_1fr_auto_10px] items-center gap-[10px] text-left font-mono`,`border-b border-border-soft hover:bg-surface transition-colors`,t?`min-h-[38px] px-2.5 py-[5px] text-xs`:`min-h-[52px] px-3 py-[7px] text-[12.5px]`,n&&`bg-surface shadow-[inset_2px_0_0_var(--accent)]`),children:[(0,$.jsx)(`span`,{"aria-label":c,title:c,className:E(`inline-flex size-4 items-center justify-center rounded bg-white/5 text-[9px] font-semibold`,i.cls,e.viaSubagent&&`bg-accent-2/20 ring-1 ring-inset ring-accent-2/35`),children:i.glyph}),(0,$.jsxs)(`span`,{className:`min-w-0`,children:[(0,$.jsx)(`span`,{className:`block truncate text-text-primary`,children:a}),s&&(0,$.jsx)(`span`,{className:`block overflow-hidden text-ellipsis whitespace-nowrap text-[10px] text-text-subtle [direction:rtl] text-left`,children:s})]}),(0,$.jsx)(Nn,{added:e.linesAdded,removed:e.linesRemoved,editCount:e.editCount,className:`text-[11px]`}),(0,$.jsx)(o,{className:`size-[11px] text-text-subtle`})]})}var Fn=(0,Q.lazy)(()=>te(()=>import(`./edit-diff-preview-BivQwZMD.js`),__vite__mapDeps([0,1,2,3])));function In({change:e,onJump:t}){return(0,$.jsx)(`div`,{children:e.edits.map((n,r)=>(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`button`,{type:`button`,disabled:!n.editRef,onClick:()=>n.editRef&&t(n.editRef),className:`group flex min-h-11 w-full items-center gap-2 px-3 font-mono text-[10px] text-text-subtle transition-colors hover:bg-surface disabled:hover:bg-transparent`,children:[(0,$.jsxs)(`span`,{children:[`edit `,r+1,` of `,e.editCount]}),(0,$.jsx)(`span`,{className:`h-px flex-1 bg-border-soft`}),n.editRef&&(0,$.jsxs)(`span`,{className:`flex items-center gap-1 group-hover:text-primary`,children:[(0,$.jsx)(Oe,{className:`size-3`}),`jump`]})]}),(0,$.jsx)(`div`,{className:`mx-3 mb-1`,children:(0,$.jsx)(Q.Suspense,{fallback:(0,$.jsx)(`div`,{className:`h-4`}),children:(0,$.jsx)(Fn,{oldStr:n.oldStr,newStr:n.newStr,filePath:e.filePath})})})]},n.editRef??r))})}function Ln(e){let t=Math.max(e.lastIndexOf(`/`),e.lastIndexOf(`\\`));return t<0?{base:e,dir:``}:{base:e.slice(t+1),dir:e.slice(0,t)}}var Rn=null;function zn(e){return e instanceof HTMLElement?e.tagName===`INPUT`||e.tagName===`TEXTAREA`||e.isContentEditable:!1}function Bn({changes:e,onJump:t,onClose:n}){let[r,i]=(0,Q.useState)(0),a=(0,Q.useRef)(null),o=(0,Q.useRef)(null),s=(0,Q.useId)();(0,Q.useEffect)(()=>(Rn=s,o.current?.querySelector(`button`)?.focus(),()=>{Rn===s&&(Rn=null)}),[s]),(0,Q.useEffect)(()=>{let o=o=>{if(Rn===s&&An(a.current)&&!zn(document.activeElement)){if(o.key===`Escape`)o.preventDefault(),n();else if(o.key===`j`)o.preventDefault(),i(t=>Math.min(t+1,e.length-1));else if(o.key===`k`)o.preventDefault(),i(e=>Math.max(e-1,0));else if(o.key===`Enter`){let n=e[r]?.edits[0]?.editRef;n&&(o.preventDefault(),t(n))}}};return window.addEventListener(`keydown`,o),()=>window.removeEventListener(`keydown`,o)},[s,e,r,t,n]);let c=e[Math.min(r,e.length-1)];if(!c)return null;let{base:l,dir:u}=Ln(c.filePath);return(0,$.jsx)(`div`,{ref:a,className:`mt-0.5 overflow-hidden rounded-[10px] border border-border-soft bg-bg`,children:(0,$.jsxs)(`div`,{className:`grid h-[356px] grid-cols-[294px_1fr] grid-rows-[minmax(0,1fr)] bg-surface-elevated`,children:[(0,$.jsxs)(`div`,{ref:o,className:`min-h-0 overflow-y-auto border-r border-border-soft`,children:[e.map((e,t)=>(0,$.jsx)(Pn,{change:e,dense:!0,selected:t===r,onClick:()=>i(t)},e.filePath)),(0,$.jsx)(`p`,{className:`px-2.5 pt-2 pb-2.5 font-mono text-[10px] text-text-subtle`,children:`j / k to move · enter to jump`})]}),(0,$.jsxs)(`div`,{className:`min-h-0 overflow-y-auto`,children:[(0,$.jsxs)(`div`,{className:`sticky top-0 z-10 flex items-center gap-2 border-b border-border-soft bg-surface-elevated py-[5px] pl-2.5 pr-2`,children:[(0,$.jsx)(`span`,{className:`shrink-0 font-mono text-xs font-medium text-text-primary`,children:l}),u&&(0,$.jsx)(`span`,{title:c.filePath,className:`min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap font-mono text-[10.5px] text-text-subtle [direction:rtl] text-left`,children:u}),(0,$.jsx)(Nn,{added:c.linesAdded,removed:c.linesRemoved,className:`shrink-0 font-mono text-[11px]`}),(0,$.jsx)(`button`,{type:`button`,onClick:()=>void Ge(c.filePath),className:`shrink-0 rounded-md px-1.5 py-1 font-mono text-[10px] text-text-subtle transition-colors hover:bg-surface hover:text-text-primary`,children:`copy path`}),(0,$.jsx)(`button`,{type:`button`,onClick:n,"aria-label":`Close change tray`,className:`inline-flex size-8 shrink-0 items-center justify-center rounded-lg text-text-subtle transition-colors hover:bg-surface hover:text-text-primary`,children:(0,$.jsx)(S,{className:`size-3.5`})})]}),(0,$.jsx)(In,{change:c,onJump:t})]})]})})}function Vn(e){let t=Math.max(e.lastIndexOf(`/`),e.lastIndexOf(`\\`));return t<0?e:e.slice(t+1)}function Hn({label:e,onClick:t,children:n}){return(0,$.jsx)(`button`,{type:`button`,onClick:t,"aria-label":e,className:`inline-flex size-11 shrink-0 items-center justify-center rounded-lg text-text-subtle transition-colors hover:bg-surface hover:text-text-primary`,children:n})}function Un({changes:e,totals:t,open:n,onClose:r,onJump:i}){let[a,o]=(0,Q.useState)(null),s=a==null?null:e[a],c=(0,Q.useRef)(null),l=()=>{o(null),r()},u=e=>{l(),i(e)};return(0,Q.useEffect)(()=>{if(!n)return;let e=c.current,t=()=>Array.from(e?.querySelectorAll(`button:not([disabled])`)??[]);t()[0]?.focus();let r=e=>{if(e.key===`Escape`){e.preventDefault(),l();return}if(e.key!==`Tab`)return;let n=t();if(n.length===0)return;let r=n[0],i=n[n.length-1];e.shiftKey&&document.activeElement===r?(e.preventDefault(),i.focus()):!e.shiftKey&&document.activeElement===i&&(e.preventDefault(),r.focus())};return window.addEventListener(`keydown`,r),()=>window.removeEventListener(`keydown`,r)},[n,a]),(0,$.jsx)(oe,{open:n,onClose:l,className:`flex max-h-[85%] flex-col rounded-t-[14px] motion-reduce:animate-none`,children:(0,$.jsx)(`div`,{ref:c,className:`flex min-h-0 flex-1 flex-col`,children:s?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-1 border-b border-border-soft px-1 pb-1`,children:[(0,$.jsx)(Hn,{label:`Back to file list`,onClick:()=>o(null),children:(0,$.jsx)(me,{className:`size-4`})}),(0,$.jsx)(`span`,{className:`min-w-0 flex-1 truncate font-mono text-xs font-medium text-text-primary`,children:Vn(s.filePath)}),(0,$.jsx)(Nn,{added:s.linesAdded,removed:s.linesRemoved,className:`shrink-0 font-mono text-[11px]`}),(0,$.jsx)(Hn,{label:`Close`,onClick:l,children:(0,$.jsx)(S,{className:`size-4`})})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-1 border-b border-border-soft py-1.5 pl-3 pr-2`,children:[(0,$.jsx)(`span`,{title:s.filePath,className:`min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap font-mono text-[10.5px] text-text-subtle [direction:rtl] text-left`,children:s.filePath}),(0,$.jsx)(`button`,{type:`button`,onClick:()=>void Ge(s.filePath),className:`inline-flex min-h-11 shrink-0 items-center rounded-md px-2.5 font-mono text-[10px] text-text-subtle transition-colors hover:bg-surface hover:text-text-primary`,children:`copy`}),s.edits[0]?.editRef&&(0,$.jsxs)(`button`,{type:`button`,onClick:()=>u(s.edits[0].editRef),className:`inline-flex min-h-11 shrink-0 items-center gap-1 rounded-md px-2.5 font-mono text-[10px] text-text-subtle transition-colors hover:bg-surface hover:text-primary`,children:[(0,$.jsx)(Oe,{className:`size-3`}),`card`]})]}),(0,$.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:(0,$.jsx)(In,{change:s,onJump:u})})]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border-soft px-3 pb-2`,children:[(0,$.jsxs)(`span`,{className:`min-w-0 flex-1 truncate font-mono text-xs font-medium text-text-primary`,children:[`Changed this turn · `,e.length,` file`,e.length===1?``:`s`]}),(0,$.jsx)(Nn,{added:t.added,removed:t.removed,className:`shrink-0 font-mono text-[11px]`}),(0,$.jsx)(Hn,{label:`Close`,onClick:l,children:(0,$.jsx)(S,{className:`size-4`})})]}),(0,$.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:e.map((e,t)=>(0,$.jsx)(Pn,{change:e,onClick:()=>o(t)},e.filePath))})]})})})}function Wn({timestamp:e,content:t,changes:n,onJumpToEdit:r}){let[i,a]=(0,Q.useState)(!1),o=k(),s=(0,Q.useRef)(null),c=()=>{a(!1),s.current?.focus()},l=(0,$.jsx)(Dn,{timestamp:e,content:t,className:`-mt-1.5`,children:n&&n.length>0&&(0,$.jsx)(kn,{ref:s,count:n.length,totals:On(n),open:i,onToggle:()=>i?c():a(!0)})});return!n||n.length===0?l:(0,$.jsxs)($.Fragment,{children:[l,o?(0,$.jsx)(Un,{changes:n,totals:On(n),open:i,onClose:c,onJump:r??(()=>{})}):i&&(0,$.jsx)(Bn,{changes:n,onJump:e=>{a(!1),r?.(e)},onClose:c})]})}function Gn(e){return e.inputTokens+e.cacheReadTokens+e.cacheWriteTokens}function Kn(e){return e.inputTokens+e.cacheWriteTokens}var qn=.5,Jn=.9,Yn={cache_expired:`the session's prompt cache had already lapsed, so PPM released its subprocess`,idle_timeout:`the session sat idle with no tab open long enough for PPM to release its subprocess`,warm_idle_cap:`too many idle sessions were holding a subprocess, so this one was released early`,tab_closed:`PPM shut the session's subprocess down when the last tab disconnected`,set_model:`the model was changed, which restarts the session`,stream_ended:`the session's subprocess had already exited`,resume:`the session was resumed on a new subprocess`};function Xn(e){let t=Kn(e),n=Gn(e);if(!e.coldStart||n<2e4)return{level:`ok`,wastedTokens:t,reason:``};let r=e.cacheHitRate<qn?`bad`:e.cacheHitRate<Jn?`warn`:`ok`;if(r===`ok`)return{level:r,wastedTokens:t,reason:``};let i=e.coldReason?Yn[e.coldReason]??`the session restarted (${e.coldReason})`:null;return{level:r,wastedTokens:t,reason:i?`${er(t)} of this session's transcript was re-sent uncached because ${i}.`:`${er(t)} of this session's transcript was re-sent uncached.`}}var Zn=.1,Qn=1.25;function $n(e){let t=Gn(e);if(t===0)return 1;let n=e.inputTokens+e.cacheWriteTokens*Qn+e.cacheReadTokens*Zn,r=t*Zn;return r>0?Math.max(1,n/r):1}function er(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(e>=1e4?0:1)}k`:String(e)}function tr({usage:e}){let[t,n]=(0,Q.useState)(!1),r=Xn(e);if(r.level===`ok`)return null;let i=$n(e),a=Gn(e),o=Math.round(e.cacheHitRate*100),s=r.level===`bad`;return(0,$.jsxs)(`div`,{className:`rounded-md border px-2.5 py-2 text-[11px] ${s?`border-warning/40 bg-warning/10`:`border-border bg-surface`}`,children:[(0,$.jsxs)(`button`,{onClick:()=>n(e=>!e),"aria-expanded":t,className:`flex w-full items-start gap-2 py-1 text-left text-text-secondary transition-colors hover:text-text-primary`,children:[(0,$.jsx)(Qe,{className:`mt-px size-3.5 shrink-0 ${s?`text-warning`:`text-text-subtle`}`}),(0,$.jsxs)(`span`,{className:`flex-1`,children:[`Costly turn — `,o,`% of a `,er(a),`-token transcript came from cache, so it cost about`,` `,(0,$.jsxs)(`strong`,{className:`font-semibold`,children:[i.toFixed(1),`x`]}),` a fully cached turn.`]}),(0,$.jsx)(J,{className:`mt-px size-3.5 shrink-0 transition-transform ${t?`rotate-180`:``}`})]}),t&&(0,$.jsxs)(`div`,{className:`mt-2 flex flex-col gap-2 border-t border-border pt-2`,children:[r.reason&&(0,$.jsx)(`p`,{className:`text-text-secondary`,children:r.reason}),(0,$.jsxs)(`dl`,{className:`grid grid-cols-2 gap-x-3 gap-y-1 font-mono text-[10.5px] text-text-subtle`,children:[(0,$.jsx)(nr,{label:`From cache`,value:`${er(e.cacheReadTokens)} (${o}%)`}),(0,$.jsx)(nr,{label:`Written to cache`,value:er(e.cacheWriteTokens)}),(0,$.jsx)(nr,{label:`Fresh input`,value:er(e.inputTokens)}),(0,$.jsx)(nr,{label:`Output`,value:er(e.outputTokens)}),(0,$.jsx)(nr,{label:`Model`,value:e.model||`unknown`}),(0,$.jsx)(nr,{label:`Cost`,value:`$${e.costUsd.toFixed(4)}`})]}),(0,$.jsx)(`p`,{className:`text-text-subtle`,children:`A turn stays cached while the session keeps running. Closing the last tab of an idle session, switching model, or a retry all restart it, and the next turn re-sends the transcript at full price.`})]})]})}function nr({label:e,value:t}){return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`dt`,{className:`truncate`,children:e}),(0,$.jsx)(`dd`,{className:`truncate text-right text-text-secondary`,children:t})]})}function rr(e,t,n,r){let[i,a]=(0,Q.useState)([]),o=(0,Q.useRef)(null);return(0,Q.useEffect)(()=>{if(!n||!e||!t){a([]);return}let r=!1;return o.current&&clearTimeout(o.current),o.current=setTimeout(()=>{w.get(`/api/project/${encodeURIComponent(e)}/chat/sessions/${encodeURIComponent(t)}/tasks`).then(e=>{r||a(e)}).catch(()=>{})},300),()=>{r=!0,o.current&&clearTimeout(o.current)}},[e,t,n,r]),i}var ir=new Set([`TaskCreate`,`TaskUpdate`,`TaskStop`]);function ar(e){let t=0;for(let n of e)if(n.events)for(let e of n.events)e.type===`tool_use`&&ir.has(e.tool)&&t++;return t}var or={completed:{icon:`✓`,cls:`text-success`},in_progress:{icon:`▶`,cls:`text-warning`},stopped:{icon:`■`,cls:`text-text-subtle`},pending:{icon:`○`,cls:`text-text-subtle`}};function sr({projectName:e,sessionId:t,messages:n}){let r=(0,Q.useMemo)(()=>ar(n),[n]),i=rr(e,t,r>0,r),[a,s]=(0,Q.useState)(!0);if(i.length===0||i.every(e=>e.status===`completed`||e.status===`stopped`))return null;let l=i.filter(e=>e.status===`completed`).length,u=i.length,d=u?Math.round(l/u*100):0;return(0,$.jsxs)(`div`,{className:`shrink-0 border-b border-border bg-surface/60 backdrop-blur-sm`,children:[(0,$.jsxs)(`button`,{type:`button`,onClick:()=>s(e=>!e),className:`flex items-center gap-2 w-full px-3 min-h-11 text-left text-xs hover:bg-surface transition-colors`,children:[a?(0,$.jsx)(o,{className:`size-3.5 shrink-0`}):(0,$.jsx)(J,{className:`size-3.5 shrink-0`}),(0,$.jsx)(c,{className:`size-3.5 shrink-0 text-text-secondary`}),(0,$.jsx)(`span`,{className:`text-text-primary font-medium`,children:`Tasks`}),(0,$.jsxs)(`span`,{className:`text-text-subtle`,children:[l,`/`,u,` done`]}),(0,$.jsx)(`span`,{className:`ml-auto h-1 w-16 rounded-full bg-border overflow-hidden shrink-0`,children:(0,$.jsx)(`span`,{className:`block h-full bg-success/70`,style:{width:`${d}%`}})})]}),!a&&(0,$.jsx)(`ul`,{className:`px-3 pb-2 space-y-0.5 max-h-48 overflow-y-auto`,children:i.map(e=>(0,$.jsx)(cr,{task:e},e.id))})]})}function cr({task:e}){let t=or[e.status]??or.pending,n=e.status===`in_progress`;return(0,$.jsxs)(`li`,{className:`flex items-start gap-1.5 text-xs rounded px-1 ${n?`bg-warning/10`:``}`,children:[(0,$.jsx)(`span`,{className:`shrink-0 mt-0.5 ${t.cls}`,children:t.icon}),(0,$.jsx)(`span`,{className:e.status===`completed`?`line-through text-text-subtle`:n?`text-text-primary font-medium`:`text-text-secondary`,children:e.subject||(0,$.jsxs)(`span`,{className:`text-text-subtle italic`,children:[`#`,e.id,` (no title)`]})})]})}var lr=/read the full transcript at:\s*(\S+\.jsonl)/i;function ur(e){return e.match(lr)?.[1]?.trim()??null}var dr=class extends Q.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}render(){return this.state.hasError?this.props.fallback?this.props.fallback:this.props.fallbackContent?(0,$.jsx)(`div`,{className:`text-sm whitespace-pre-wrap break-words text-text-primary opacity-80`,children:this.props.fallbackContent}):null:this.props.children}};function fr({projectName:e,onSelectSession:t}){return(0,$.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-6 text-text-secondary overflow-y-auto`,children:[(0,$.jsxs)(`div`,{className:`flex flex-col items-center gap-3`,children:[(0,$.jsx)(i,{className:`size-10 text-text-subtle`}),(0,$.jsx)(`p`,{className:`text-sm`,children:`Send a message to start a new conversation`})]}),(0,$.jsx)(tt,{projectName:e,onSelectSession:t,className:`w-full px-4`})]})}var pr=3200,mr=1e3,hr={hasAbove:!1,atBottom:!0,idx:0,total:0};function gr({scrollElement:e,userIndices:t,scrollToBottom:n}){let r=k(),[i,a]=(0,Q.useState)(hr),[o,s]=(0,Q.useState)(!1),[c,l]=(0,Q.useState)(0),u=(0,Q.useRef)(pr),d=(0,Q.useRef)(null),f=(0,Q.useRef)(null),p=(0,Q.useRef)(!1),m=(0,Q.useRef)(!1),h=(e,t,n)=>t.getBoundingClientRect().top-n+e.scrollTop,g=(0,Q.useCallback)(e=>Array.from(e.querySelectorAll(`[data-msg-index]`)).filter(e=>t.includes(Number(e.dataset.msgIndex))),[t]);(0,Q.useEffect)(()=>{let t=e;if(!t)return;let n=0,r=()=>{let e=t.scrollTop,n=t.getBoundingClientRect().top,r=g(t).map(e=>h(t,e,n)),i=0;for(let t=0;t<r.length;t++)r[t]<=e+12&&(i=t+1);let o={hasAbove:r.some(t=>t<e-4),atBottom:t.scrollHeight-e-t.clientHeight<8,idx:i,total:r.length};a(e=>e.hasAbove===o.hasAbove&&e.atBottom===o.atBottom&&e.idx===o.idx&&e.total===o.total?e:o)},i=()=>{n&&cancelAnimationFrame(n),n=requestAnimationFrame(r)};r(),t.addEventListener(`scroll`,i,{passive:!0});let o=new ResizeObserver(i);return o.observe(t),()=>{n&&cancelAnimationFrame(n),t.removeEventListener(`scroll`,i),o.disconnect()}},[e,g]),(0,Q.useEffect)(()=>{if(!o)return;let e=setTimeout(()=>s(!1),u.current);return()=>clearTimeout(e)},[o,i.idx,c]),(0,Q.useEffect)(()=>{if(!o||!m.current)return;m.current=!1;let e=d.current;(e?.querySelector(`button:not(:disabled)`)??e)?.focus()},[o]),(0,Q.useEffect)(()=>{o||!p.current||(p.current=!1,f.current?.focus())},[o]);let _=(0,Q.useCallback)(()=>{u.current=pr,l(e=>e+1)},[]),v=(0,Q.useCallback)(()=>{let t=e;if(!t)return;let n=t.scrollTop,r=t.getBoundingClientRect().top,i;for(let e of g(t)){let a=h(t,e,r);if(a<n-4)i=a;else break}i!=null&&t.scrollTo({top:i,behavior:`auto`}),_()},[e,g,_]),y=(0,Q.useCallback)(()=>{let t=e;if(!t)return;let r=t.scrollTop,i=t.getBoundingClientRect().top,a=g(t).map(e=>h(t,e,i)).find(e=>e>r+4);a==null?n({animation:`instant`}):t.scrollTo({top:a,behavior:`auto`}),_()},[e,g,n,_]),b=(0,Q.useCallback)(()=>{n({animation:`instant`}),_()},[n,_]);(0,Q.useEffect)(()=>{let t=e;if(!t)return;let n=e=>()=>{An(t)&&(e(),u.current=mr,s(!0))},r=n(v),i=n(y);return window.addEventListener(`chat-nav-prev`,r),window.addEventListener(`chat-nav-next`,i),()=>{window.removeEventListener(`chat-nav-prev`,r),window.removeEventListener(`chat-nav-next`,i)}},[e,v,y]);let x=E(`w-[34px] flex items-center justify-center rounded-[9px] text-text-secondary`,`motion-safe:transition-colors hover:bg-surface-elevated hover:text-foreground`,`disabled:opacity-30 disabled:cursor-default disabled:hover:bg-transparent disabled:hover:text-text-secondary`,r?`h-9`:`h-[30px]`);return(0,$.jsx)(`div`,{className:`absolute bottom-3 right-2.5 z-10 flex flex-col items-end gap-1.5`,children:o?(0,$.jsxs)(`div`,{ref:d,tabIndex:-1,className:`flex flex-col p-[3px] rounded-xl border border-border bg-surface-elevated/95 backdrop-blur-[8px] shadow-lg outline-none`,onFocus:()=>{p.current=!0},onKeyDown:e=>{e.key===`Escape`&&s(!1)},children:[(0,$.jsx)(`button`,{type:`button`,onClick:v,disabled:!i.hasAbove,"aria-label":`Jump to previous message`,className:x,children:(0,$.jsx)(G,{className:`size-[15px]`})}),(0,$.jsx)(`span`,{className:`font-mono text-[10px] font-medium text-text-subtle text-center py-px`,"aria-label":`Message ${i.idx||1} of ${i.total}`,children:i.total?`${i.idx||1}/${i.total}`:`0/0`}),(0,$.jsx)(`button`,{type:`button`,onClick:y,disabled:i.atBottom,"aria-label":`Jump to next message`,className:x,children:(0,$.jsx)(J,{className:`size-[15px]`})}),(0,$.jsx)(`button`,{type:`button`,onClick:b,disabled:i.atBottom,"aria-label":`Jump to latest`,className:x,children:(0,$.jsx)(wt,{className:`size-[13px]`})})]}):(0,$.jsx)(`button`,{ref:f,type:`button`,onClick:()=>{u.current=pr,m.current=!0,s(!0)},"aria-label":`Navigate messages`,"aria-expanded":!1,title:`Navigate messages`,className:E(`group flex items-center justify-center`,r?`size-11`:`size-[30px]`),children:(0,$.jsx)(`span`,{className:E(`flex items-center justify-center rounded-full border border-border bg-surface-elevated/55 backdrop-blur-[6px] text-text-subtle`,`motion-safe:transition-colors group-hover:bg-surface-elevated group-hover:text-foreground`,r?`size-9`:`size-[30px]`),children:(0,$.jsx)(X,{className:`size-[15px]`})})})})}function _r({group:e,onNavigate:t,disabled:n}){if(!e||e.ids.length<2)return null;let{ids:r,currentIndex:i}=e,a=e=>{let i=r[e];i&&!n&&t(i)};return(0,$.jsxs)(`div`,{className:`mt-1 flex items-center gap-1 text-xs text-text-subtle select-none`,children:[(0,$.jsx)(`button`,{type:`button`,onClick:()=>a(i-1),disabled:n||i<=0,"aria-label":`Previous version`,className:`flex items-center justify-center rounded p-0.5 hover:text-text-primary disabled:opacity-30 disabled:cursor-default`,children:(0,$.jsx)(me,{className:`size-3.5`})}),(0,$.jsxs)(`span`,{className:`tabular-nums`,children:[i+1,`/`,r.length]}),(0,$.jsx)(`button`,{type:`button`,onClick:()=>a(i+1),disabled:n||i>=r.length-1,"aria-label":`Next version`,className:`flex items-center justify-center rounded p-0.5 hover:text-text-primary disabled:opacity-30 disabled:cursor-default`,children:(0,$.jsx)(o,{className:`size-3.5`})})]})}function vr(e){let[t,n]=(0,Q.useState)({}),[r,i]=(0,Q.useState)({}),[a,o]=(0,Q.useState)(0),s=(0,Q.useCallback)((e,t)=>{n(n=>({...n,[e]:[t]})),i(t=>({...t,[e]:``}))},[]),c=(0,Q.useCallback)((e,t)=>{n(n=>{let r=n[e]||[];return{...n,[e]:r.includes(t)?r.filter(e=>e!==t):[...r,t]}})},[]),l=(0,Q.useCallback)((e,t)=>{i(n=>({...n,[e]:t})),t&&n(t=>({...t,[e]:[]}))},[]),u=(0,Q.useCallback)(e=>(t[e]?.length??0)>0||(r[e]?.trim().length??0)>0,[t,r]);return{answers:t,customInputs:r,activeTab:a,setActiveTab:o,handleSingleSelect:s,handleMultiSelect:c,handleCustomInput:l,hasAnswer:u,allAnswered:(0,Q.useMemo)(()=>e.every((e,t)=>u(t)),[e,u]),getFinalAnswer:(0,Q.useCallback)(e=>r[e]?.trim()||(t[e]??[]).join(`, `),[t,r]),goToNextTab:(0,Q.useCallback)(()=>o(t=>Math.min(t+1,e.length-1)),[e.length]),goToPrevTab:(0,Q.useCallback)(()=>o(e=>Math.max(e-1,0)),[])}}function yr(e){let[t,n]=(0,Q.useState)(0),r=(0,Q.useRef)(null);return(0,Q.useEffect)(()=>n(0),[e.activeTab]),(0,Q.useEffect)(()=>{if(!e.enabled)return;let i=r=>{let i=document.activeElement===e.customInputRef.current;if(!i&&r.key>=`1`&&r.key<=`9`){r.preventDefault();let t=parseInt(r.key)-1;t<e.totalOptions-1&&(n(t),e.onSelectOption(t));return}if(!i&&(r.key===`o`||r.key===`O`||r.key===`0`)){r.preventDefault(),e.customInputRef.current?.focus(),n(e.totalOptions-1);return}if(r.key===`Tab`&&e.questions.length>1){r.preventDefault(),r.shiftKey?e.goToPrevTab():e.goToNextTab();return}if(!i){if(r.key===`ArrowLeft`){r.preventDefault(),e.goToPrevTab();return}if(r.key===`ArrowRight`){r.preventDefault(),e.goToNextTab();return}if(r.key===`ArrowUp`){r.preventDefault(),n(e=>Math.max(0,e-1));return}if(r.key===`ArrowDown`){r.preventDefault(),n(t=>Math.min(e.totalOptions-1,t+1));return}if(r.key===` `){r.preventDefault(),e.onSelectOption(t);return}}if(r.key===`Enter`){r.preventDefault(),e.allAnswered?e.onSubmit():e.hasAnswer(e.activeTab)&&e.goToNextTab();return}r.key===`Escape`&&i&&e.customInputRef.current?.blur()},a=r.current;return a&&(a.addEventListener(`keydown`,i),a.setAttribute(`tabindex`,`0`),a.contains(document.activeElement)||a.focus()),()=>{a?.removeEventListener(`keydown`,i)}},[e,t]),{focusedOption:t,setFocusedOption:n,containerRef:r}}function br({questions:e,onSubmit:t,onSkip:n}){let r=(0,Q.useRef)(null),i=vr(e),a=e[i.activeTab],o=a?a.options.length+1:0,s=e.length>1,c=(0,Q.useCallback)(()=>{if(!i.allAnswered)return;let n={};e.forEach((e,t)=>{n[e.question]=i.getFinalAnswer(t)}),t(n)},[i.allAnswered,i.getFinalAnswer,e,t]),l=(0,Q.useCallback)(e=>{if(!(!a||e<0))if(e<a.options.length){let t=a.options[e]?.label;if(!t)return;a.multiSelect?i.handleMultiSelect(i.activeTab,t):i.handleSingleSelect(i.activeTab,t)}else e===a.options.length&&r.current?.focus()},[a,i]),u=yr({questions:e,activeTab:i.activeTab,totalOptions:o,allAnswered:i.allAnswered,hasAnswer:i.hasAnswer,onSelectOption:l,goToNextTab:i.goToNextTab,goToPrevTab:i.goToPrevTab,onSubmit:c,customInputRef:r,enabled:!0}),d=(0,Q.useCallback)(e=>{l(e),u.setFocusedOption(e)},[l,u.setFocusedOption]);return(0,$.jsxs)(`div`,{ref:u.containerRef,className:`rounded-lg border-2 border-primary/30 bg-primary/5 p-3 space-y-3 outline-none animate-in slide-in-from-bottom-2`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between text-sm font-medium text-text-primary`,children:[(0,$.jsxs)(`span`,{children:[`AI has `,s?`${e.length} questions`:`a question`]}),(0,$.jsxs)(`span`,{className:`text-[10px] text-text-secondary font-normal`,children:[s?`←→ tabs · `:``,`↑↓ options · 1-`,Math.min(o-1,9),` select · Enter submit`]})]}),s&&(0,$.jsx)(`div`,{className:`flex gap-1 p-1 bg-background rounded-md overflow-x-auto border border-border`,children:e.map((e,t)=>(0,$.jsxs)(`button`,{className:`flex items-center gap-1.5 px-3 py-1.5 rounded text-xs whitespace-nowrap transition-all ${i.activeTab===t?`bg-primary text-primary-foreground`:i.hasAnswer(t)?`text-primary bg-transparent`:`text-text-secondary hover:bg-surface-elevated`}`,onClick:()=>{i.setActiveTab(t),u.setFocusedOption(0)},tabIndex:-1,children:[(0,$.jsx)(`span`,{className:`flex items-center justify-center w-4 h-4 rounded-full text-[10px] font-semibold ${i.activeTab===t?`bg-white/20`:i.hasAnswer(t)?`bg-primary/20 text-primary`:`bg-surface-elevated text-text-secondary`}`,children:i.hasAnswer(t)?`✓`:t+1}),(0,$.jsx)(`span`,{className:`max-w-[100px] overflow-hidden text-ellipsis`,children:e.header||`Q${t+1}`})]},t))}),a&&(0,$.jsxs)(`div`,{className:`space-y-2`,children:[!s&&a.header&&(0,$.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-text-secondary`,children:a.header}),(0,$.jsx)(`div`,{className:`text-sm text-text-primary select-text`,children:a.question}),a.multiSelect&&(0,$.jsx)(`div`,{className:`text-[11px] text-text-secondary`,children:`Select multiple`}),(0,$.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[a.options.map((e,t)=>{let n=(i.answers[i.activeTab]||[]).includes(e.label),r=u.focusedOption===t;return(0,$.jsxs)(`div`,{role:`button`,onClick:()=>d(t),className:`text-left flex items-start gap-2.5 rounded px-2.5 py-2 text-xs border transition-all cursor-pointer select-text ${n?`border-primary bg-primary/10 text-text-primary`:`border-border bg-background text-text-secondary hover:border-primary/40 hover:bg-primary/5`} ${r?`ring-2 ring-primary/40 ring-offset-1 ring-offset-background`:``}`,children:[(0,$.jsx)(`span`,{className:`flex items-center justify-center w-4.5 h-4.5 rounded text-[10px] font-semibold shrink-0 mt-px ${n?`bg-primary/20 text-primary`:`bg-surface-elevated text-text-secondary`}`,children:t+1}),(0,$.jsxs)(`div`,{className:`flex flex-col gap-0.5 flex-1`,children:[(0,$.jsx)(`span`,{className:`font-medium text-text-primary`,children:e.label}),e.description&&(0,$.jsx)(`span`,{className:`text-[11px] text-text-secondary`,children:e.description})]})]},t)}),(0,$.jsxs)(`div`,{className:`flex items-start gap-2.5 rounded px-2.5 py-2 text-xs border border-dashed transition-all border-border bg-transparent ${u.focusedOption===o-1?`ring-2 ring-primary/40 ring-offset-1 ring-offset-background`:``}`,children:[(0,$.jsx)(`span`,{className:`flex items-center justify-center w-4.5 h-4.5 rounded bg-surface-elevated text-text-secondary text-[10px] font-semibold shrink-0 mt-px`,children:`O`}),(0,$.jsx)(`input`,{ref:r,type:`text`,className:`flex-1 px-2 py-1 text-xs bg-surface border border-border rounded text-text-primary outline-none placeholder:text-text-subtle focus:border-primary`,placeholder:`Other (press O to type)...`,value:i.customInputs[i.activeTab]||``,onChange:e=>i.handleCustomInput(i.activeTab,e.target.value),onFocus:()=>u.setFocusedOption(o-1)})]})]})]}),(0,$.jsxs)(`div`,{className:`flex gap-2 justify-end pt-1`,children:[s&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`button`,{className:`px-3 py-1.5 text-xs rounded border border-border bg-background text-text-primary hover:bg-surface-elevated disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,onClick:i.goToPrevTab,disabled:i.activeTab===0,tabIndex:-1,children:`← Prev`}),(0,$.jsx)(`button`,{className:`px-3 py-1.5 text-xs rounded border border-border bg-background text-text-primary hover:bg-surface-elevated disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,onClick:i.goToNextTab,disabled:i.activeTab===e.length-1,tabIndex:-1,children:`Next →`})]}),(0,$.jsx)(`button`,{onClick:n,className:`px-4 py-1.5 rounded border border-border bg-background text-text-secondary text-xs hover:bg-surface-elevated transition-colors`,tabIndex:-1,children:`Skip`}),(0,$.jsxs)(`button`,{onClick:c,disabled:!i.allAnswered,className:`px-4 py-1.5 rounded bg-primary text-primary-foreground text-xs font-medium hover:bg-primary/80 transition-colors disabled:opacity-40 disabled:cursor-not-allowed`,tabIndex:-1,children:[`Submit `,i.allAnswered?`✓`:`(${e.filter((e,t)=>i.hasAnswer(t)).length}/${e.length})`]})]})]})}var xr={"system-reminder":`Context`,claudeMd:`CLAUDE.md`,gitStatus:`Git Status`,currentDate:`Date`,fast_mode_info:`Fast Mode`,"available-deferred-tools":`Tools`,"task-notification":`Task Result`,environment_details:`Environment`,"local-command-caveat":`System`};function Sr(e){let t=[],n=/<(system-reminder|available-deferred-tools|antml:[\w-]+|fast_mode_info|claudeMd|gitStatus|currentDate|task-notification|environment_details|local-command-caveat)[^>]*>([\s\S]*?)<\/\1>/g,r;for(;(r=n.exec(e))!==null;){let e=r[1];t.push({name:e,label:xr[e]??e.replace(/^antml:/,``).replace(/-/g,` `),content:r[2].trim()})}return{cleanText:e.replace(n,``).trim(),tags:t}}function Cr(e){let t=e.match(/<command-name>([\s\S]*?)<\/command-name>/);if(!t)return{command:null,cleanText:e};let n=t[1].trim(),r=e.match(/<command-args>([\s\S]*?)<\/command-args>/)?.[1]?.trim()||void 0,i=e.replace(/<command-name>[\s\S]*?<\/command-name>/g,``).replace(/<command-message>[\s\S]*?<\/command-message>/g,``).replace(/<command-args>[\s\S]*?<\/command-args>/g,``).trim();return{command:{name:n,args:r},cleanText:i}}function wr(e){let t=e.match(/^Use the (\S+) agent to\s?/);return t?{agent:t[1],cleanText:e.slice(t[0].length)}:{agent:null,cleanText:e}}function Tr(e){let t=/<ide_opened_file>([\s\S]*?)<\/ide_opened_file>/g.exec(e);return t?{idePath:t[1].match(/opened the file (.+?) in the IDE/)?.[1]?.trim()??null,cleanText:e.replace(/<ide_opened_file>[\s\S]*?<\/ide_opened_file>/g,``).trim()}:{idePath:null,cleanText:e}}function Er(e){let t=e.match(/^\[Attached file: (.+?)\]\n*/);if(t)return{files:[t[1]],text:e.slice(t[0].length)};let n=e.match(/^\[Attached files:\n([\s\S]+?)\]\n*/);return n?{files:n[1].split(`
3
- `).map(e=>e.trim()).filter(Boolean),text:e.slice(n[0].length)}:{files:[],text:e}}function Dr(e){let t=[],n=e,r=/^```(?:bash|sh|shell|zsh)\n([\s\S]*?)\n```\s*(?:\n\n?)?/,i;for(;(i=n.match(r))!==null;)t.push(i[1]),n=n.slice(i[0].length);return{blocks:t,remainingText:n.trim()}}function Or(e){let{idePath:t,cleanText:n}=Tr(e),{blocks:r,remainingText:i}=Dr(n),a=Er(i),{cleanText:o,tags:s}=Sr(a.text.replace(/<local-command-(?:stdout|stderr)>([\s\S]*?)<\/local-command-(?:stdout|stderr)>/g,`$1`)),{command:c,cleanText:l}=Cr(o),{agent:u,cleanText:d}=wr(l),f=c?.args?d?`${c.args}\n\n${d}`:c.args:d;return{files:a.files,text:f,body:d,tags:s,command:c,terminalBlocks:r,idePath:t,agent:u}}function kr(e){let{agent:t,body:n,command:r}=Or(e);if(!r)return{agent:t,text:n};let i=`/${r.name.replace(/^\/+/,``)}${r.args?` ${r.args}`:``}`;return{agent:t,text:n?`${i}\n\n${n}`:i}}var Ar=te(()=>import(`./markdown-renderer-feiuhJ9n.js`),__vite__mapDeps([4,5,1,6,2,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36])),jr=(0,Q.lazy)(()=>Ar.then(e=>({default:e.MarkdownRenderer})));function Mr({messages:e,messagesLoading:t,keepStaleWhileLoading:n,pendingApproval:r,onApprovalResponse:a,isStreaming:o,phase:s,onSelectSession:c,connectingElapsed:l,statusMessage:d,compactStatus:f,projectName:p,onFork:m,onEdit:h,editingMsgId:g,sessionId:_,providerId:v,onNavigateVersion:y,versionMap:b,bashPartialOutput:x,onExpandCompact:S,isCompactExpanded:C,onDismissMessage:w,onClearErrors:ee}){let{scrollRef:T,contentRef:te,scrollToBottom:ne,stopScroll:E,isAtBottom:re}=en({initial:`instant`,resize:`instant`}),D=(0,Q.useMemo)(()=>e.filter(e=>{let t=e.content&&e.content.trim().length>0,n=e.events&&e.events.length>0;return e.role===`user`?t:t||n}),[e]),ie=!!r||o,[O,ae]=(0,Q.useState)(null),k=(0,Q.useCallback)(e=>{T(e),ae(e)},[T]),oe=(0,Q.useRef)(new Map),se=(0,Q.useMemo)(()=>{let e=oe.current,t=new Map;for(let n=0;n<D.length;n++){let r=D[n];if(r.role!==`assistant`||D[n+1]?.role===`assistant`)continue;let i=`${r.id}:${r.events?.length??0}`,a=e.get(i);a||(a=Sn(Cn(D,n)),e.set(i,a)),a.length>0&&t.set(n,a)}return t},[D]),A=(0,Q.useRef)(null),ce=(0,Q.useCallback)(e=>{O&&(A.current?.(),A.current=pn(O,e))},[O]);(0,Q.useEffect)(()=>()=>A.current?.(),[]);let j=(0,Q.useRef)(null);(0,Q.useLayoutEffect)(()=>{let e=O;e&&j.current!=null&&(e.scrollTop=e.scrollHeight-j.current,j.current=null)},[D.length,O]),(0,Q.useLayoutEffect)(()=>{O&&ne({animation:`instant`})},[_,O]);let M=(0,Q.useRef)(!0);(0,Q.useEffect)(()=>{O&&O.clientHeight>0&&(M.current=re)},[re,O]),(0,Q.useEffect)(()=>{let e=O;if(!e)return;let t=e.clientHeight,n=new ResizeObserver(()=>{let n=e.clientHeight,r=t===0&&n>0;t=n,r&&!M.current&&E()});return n.observe(e),()=>n.disconnect()},[O,E]);let le=(0,Q.useCallback)((e,t)=>{m?.(e,t)},[m]),N=(0,Q.useCallback)((e,t,n)=>{h?.(e,t,n)},[h]),P=(0,Q.useCallback)(e=>{w?.(e)},[w]),F=(0,Q.useMemo)(()=>D.reduce((e,t)=>t.role===`system`?e+1:e,0),[D]),I=(0,Q.useMemo)(()=>D.reduce((e,t,n)=>(t.role===`user`&&e.push(n),e),[]),[D]),ue=(0,Q.useCallback)(()=>{if(!S||!C)return null;for(let e of D){if(C(e.id))continue;let t=ur(e.content||``);if(t)return{id:e.id,jsonlPath:t};if(e.events){for(let t of e.events)if(t.type===`text`){let n=ur(t.content||``);if(n)return{id:e.id,jsonlPath:n}}}}return null},[D,S,C])(),L=!!ue,[R,z]=(0,Q.useState)(!1),B=(0,Q.useCallback)(async()=>{if(!ue||!S||R)return;let e=O;j.current=e?e.scrollHeight-e.scrollTop:null,z(!0);try{await S(ue.id,ue.jsonlPath)}finally{z(!1)}},[ue,S,R,O]);return(0,Q.useEffect)(()=>{let e=O;if(!e||!L)return;let t=()=>{e.scrollTop<200&&!R&&B()};return e.addEventListener(`scroll`,t,{passive:!0}),()=>e.removeEventListener(`scroll`,t)},[O,L,R,B]),t&&(!n||e.length===0)?(0,$.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-text-secondary`,children:[(0,$.jsx)(i,{className:`size-10 text-text-subtle animate-pulse`}),(0,$.jsx)(`p`,{className:`text-sm`,children:`Loading messages...`})]}):e.length===0&&!o?(0,$.jsx)(fr,{projectName:p||``,onSelectSession:c||(()=>{})}):(0,$.jsxs)(`div`,{className:`relative flex-1 overflow-hidden flex flex-col min-h-0`,children:[(0,$.jsx)(sr,{projectName:p,sessionId:_,messages:e}),F>1&&ee&&(0,$.jsx)(`div`,{className:`absolute top-2 left-0 right-0 z-20 flex justify-center pointer-events-none`,children:(0,$.jsxs)(`button`,{type:`button`,onClick:ee,className:`pointer-events-auto flex items-center gap-1.5 rounded-full bg-error/15 border border-error/25 px-3 py-1 text-xs text-error hover:bg-error/25 shadow-md backdrop-blur-sm`,children:[(0,$.jsx)(u,{className:`size-3.5`}),`Clear all errors (`,F,`)`]})}),R&&(0,$.jsxs)(`div`,{className:`absolute top-2 left-0 right-0 z-10 flex items-center justify-center gap-1.5 text-xs text-text-secondary pointer-events-none`,children:[(0,$.jsx)(Z,{className:`size-3 animate-spin`}),`Loading previous conversation...`]}),(0,$.jsx)(`div`,{ref:k,[gt]:``,className:`flex-1 overflow-y-auto overflow-x-hidden [overflow-anchor:none]`,style:{WebkitOverflowScrolling:`touch`,overscrollBehavior:`contain`},children:(0,$.jsxs)(`div`,{ref:te,className:`w-full`,children:[D.map((e,t)=>{let n=t>0?D[t-1]:void 0,r=e.role===`user`?D.slice(0,t+1).reduce((e,t)=>e+(t.role===`user`?1:0),0):0,i=r?b?.[r]:void 0,a=e.role===`user`&&g!=null&&e.id===g,s=D[t+1],c=e.role===`assistant`&&s?.role!==`assistant`,l;if(c){let e=[];for(let n=t;n>=0&&D[n].role===`assistant`;n--){let t=Nr(D[n]);t&&e.unshift(t)}l=e.join(`
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/edit-diff-preview-BivQwZMD.js","assets/rolldown-runtime-FhOqtrmT.js","assets/vendor-markdown-Ls5AcU91.js","assets/libesm-ah-mr-sh.js","assets/markdown-renderer-Dg5HE9Zq.js","assets/vendor-mermaid-Bg4vE8QA.js","assets/vendor-ui-CaeeFO0B.js","assets/markdown-renderer-DPcoPjmO.js","assets/index-BAVBuKmT.js","assets/button-B4MWPjWj.js","assets/utils-DoY4yTP-.js","assets/createLucideIcon-D8pyde1A.js","assets/eye-off-CUdzgmX8.js","assets/bot-CunPuEdW.js","assets/context-menu-DkQdt6YA.js","assets/chevron-right-BLOtX8Vy.js","assets/clock-D493FU_D.js","assets/sparkles-n1hzh65o.js","assets/copy-BApI9v7Z.js","assets/database-B9okYLx6.js","assets/download-D9UYwY0-.js","assets/plus-DmjC2iRB.js","assets/x-BcqfTY_7.js","assets/api-client-BSB14J4w.js","assets/react-I_EwPIZi.js","assets/mobile-bottom-sheet-CS3XMwFw.js","assets/use-is-mobile-B8FA4kQf.js","assets/api-settings-DfNRPr1q.js","assets/project-store-B8BkHXy5.js","assets/panel-store-DCD82zc1.js","assets/settings-store-C9YT1Hir.js","assets/tab-store-DAsvpx4t.js","assets/apply-theme-CNj1iA-v.js","assets/resolve-theme-CJvkL8hU.js","assets/index-oxsyfDa0.css","assets/image-gallery-CrM5fHKy.js","assets/run-in-terminal-CGW6o37_.js","assets/api-client-CzABTreM.js"])))=>i.map(i=>d[i]);
2
+ import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{S as t,x as n}from"./vendor-markdown-Ls5AcU91.js";import"./vendor-ui-CaeeFO0B.js";import{t as r}from"./createLucideIcon-D8pyde1A.js";import{t as i}from"./bot-CunPuEdW.js";import{d as a}from"./context-menu-DkQdt6YA.js";import{t as o}from"./chevron-right-BLOtX8Vy.js";import{a as s,i as c,n as l,o as u,r as d}from"./tool-cards-BG2fz83z.js";import{r as f,t as p}from"./button-B4MWPjWj.js";import{t as m}from"./clock-D493FU_D.js";import{t as h}from"./code-CLF5x7KK.js";import{t as g}from"./sparkles-n1hzh65o.js";import{t as _}from"./copy-BApI9v7Z.js";import{t as v}from"./download-D9UYwY0-.js";import{n as y,t as b}from"./plus-DmjC2iRB.js";import{t as x}from"./shield-off-egKAZEwR.js";import{t as S}from"./x-BcqfTY_7.js";import{i as C,n as w,r as ee,s as T}from"./api-client-BSB14J4w.js";import{q as te}from"./vendor-mermaid-Bg4vE8QA.js";import{t as ne}from"./settings-store-C9YT1Hir.js";import{n as E,r as re,t as D}from"./utils-DoY4yTP-.js";import{t as ie}from"./panel-store-DCD82zc1.js";import{i as O}from"./project-store-B8BkHXy5.js";import{t as ae}from"./tab-store-DAsvpx4t.js";import{n as k}from"./use-is-mobile-B8FA4kQf.js";import{t as oe}from"./mobile-bottom-sheet-CS3XMwFw.js";import{_ as se,a as A,c as ce,h as j,i as M,l as le,m as N,o as P,p as F,r as I,s as ue,t as L,u as R}from"./api-settings-DfNRPr1q.js";import{$n as z,$t as B,An as de,Ar as V,B as H,Bn as fe,Cn as pe,Cr as U,Dn as W,Dr as me,En as he,Er as G,Fn as ge,G as _e,Gn as ve,H as ye,Hn as K,In as be,Jt as q,K as xe,Kn as Se,L as Ce,Ln as we,Mn as Te,Mr as Ee,Nn as De,Nr as Oe,O as ke,Or as J,Pn as Ae,Qn as je,Qt as Y,R as Me,Rn as Ne,Sn as Pe,Tr as X,U as Fe,Un as Ie,V as Le,W as Re,Xn as ze,Xt as Be,Yn as Ve,Yt as He,Zt as Ue,_n as We,en as Ge,er as Z,g as Ke,hn as qe,hr as Je,in as Ye,ir as Xe,jr as Ze,kn as Qe,kr as $e,lt as et,mn as tt,or as nt,pn as rt,pr as it,q as at,qn as ot,r as st,t as ct,ur as lt,wn as ut,wr as dt,xn as ft,yr as pt,z as mt}from"./index-BAVBuKmT.js";import{t as ht}from"./use-websocket-KVhDtbwK.js";import"./use-blob-url-BmlYYZ8L.js";import{n as gt,r as _t,t as vt}from"./image-gallery-CrM5fHKy.js";import{t as yt}from"./libesm-ah-mr-sh.js";import{t as bt}from"./use-open-team-member-DKpstvLS.js";import{n as xt,t as St}from"./send-to-chat-YXHdAyLG.js";var Ct=r(`activity`,[[`path`,{d:`M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2`,key:`169zse`}]]),wt=r(`chevrons-down`,[[`path`,{d:`m7 6 5 5 5-5`,key:`1lc07p`}],[`path`,{d:`m7 13 5 5 5-5`,key:`1d48rs`}]]),Tt=r(`clipboard-check`,[[`rect`,{width:`8`,height:`4`,x:`8`,y:`2`,rx:`1`,ry:`1`,key:`tgr4d6`}],[`path`,{d:`M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2`,key:`116196`}],[`path`,{d:`m9 14 2 2 4-4`,key:`df797q`}]]),Et=r(`hand`,[[`path`,{d:`M18 11V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2`,key:`1fvzgz`}],[`path`,{d:`M14 10V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v2`,key:`1kc0my`}],[`path`,{d:`M10 10.5V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2v8`,key:`10h0bg`}],[`path`,{d:`M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15`,key:`1s1gnw`}]]),Dt=r(`image-off`,[[`line`,{x1:`2`,x2:`22`,y1:`2`,y2:`22`,key:`a6p6uj`}],[`path`,{d:`M10.41 10.41a2 2 0 1 1-2.83-2.83`,key:`1bzlo9`}],[`line`,{x1:`13.5`,x2:`6`,y1:`13.5`,y2:`21`,key:`1q0aeu`}],[`line`,{x1:`18`,x2:`21`,y1:`12`,y2:`15`,key:`5mozeu`}],[`path`,{d:`M3.59 3.59A1.99 1.99 0 0 0 3 5v14a2 2 0 0 0 2 2h14c.55 0 1.052-.22 1.41-.59`,key:`mmje98`}],[`path`,{d:`M21 15V5a2 2 0 0 0-2-2H9`,key:`43el77`}]]),Ot=r(`list-ordered`,[[`path`,{d:`M11 5h10`,key:`1cz7ny`}],[`path`,{d:`M11 12h10`,key:`1438ji`}],[`path`,{d:`M11 19h10`,key:`11t30w`}],[`path`,{d:`M4 4h1v5`,key:`10yrso`}],[`path`,{d:`M4 9h2`,key:`r1h2o0`}],[`path`,{d:`M6.5 20H3.4c0-1 2.6-1.925 2.6-3.5a1.5 1.5 0 0 0-2.6-1.02`,key:`xtkcd5`}]]),kt=r(`mic-off`,[[`path`,{d:`M12 19v3`,key:`npa21l`}],[`path`,{d:`M15 9.34V5a3 3 0 0 0-5.68-1.33`,key:`1gzdoj`}],[`path`,{d:`M16.95 16.95A7 7 0 0 1 5 12v-2`,key:`cqa7eg`}],[`path`,{d:`M18.89 13.23A7 7 0 0 0 19 12v-2`,key:`16hl24`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}],[`path`,{d:`M9 9v3a3 3 0 0 0 5.12 2.12`,key:`r2i35w`}]]),At=r(`paperclip`,[[`path`,{d:`m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551`,key:`1miecu`}]]),jt=r(`shield-alert`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`M12 8v4`,key:`1got3b`}],[`path`,{d:`M12 16h.01`,key:`1drbdi`}]]),Mt=r(`slash`,[[`path`,{d:`M22 2 2 22`,key:`y4kqgn`}]]),Q=e(t(),1);function Nt(e){let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n)|0;return Math.abs(t).toString(36)}function Pt(e,t){let n=`pc-${Nt(t)}-`;return e.map(e=>e.id?{...e,id:`${n}${e.id}`}:e)}function Ft(e,t){if(t.size===0)return e;let n=[];for(let r of e){let e=r.id?t.get(r.id):void 0;e&&e.length>0&&n.push(...e),n.push(r)}return n}var It=null;function Lt(){return It||=new AudioContext,It}function Rt(e,t,n,r,i=`sine`){let a=Lt(),o=a.createOscillator(),s=a.createGain();o.type=i,o.frequency.value=e,s.gain.setValueAtTime(r,n),s.gain.exponentialRampToValueAtTime(.001,n+t),o.connect(s),s.connect(a.destination),o.start(n),o.stop(n+t)}function zt(){let e=Lt().currentTime;Rt(523,.15,e,.15),Rt(659,.2,e+.12,.15)}function Bt(){let e=Lt().currentTime;Rt(880,.12,e,.18,`square`),Rt(698,.12,e+.15,.18,`square`),Rt(880,.15,e+.3,.15,`square`)}function Vt(){let e=Lt().currentTime;Rt(440,.12,e,.12),Rt(523,.12,e+.1,.12),Rt(659,.18,e+.2,.12)}var Ht={done:zt,approval_request:Bt,question:Vt};function Ut(e){try{Ht[e]?.()}catch{}}var Wt={hasTeams:!1,teamNames:[],messageCount:0,unreadCount:0};function Gt(e){if(document.hidden)return!1;let{panels:t}=ie.getState();for(let n of Object.values(t)){let t=n.tabs.find(e=>e.id===n.activeTabId);if(t?.type===`chat`&&t.metadata?.sessionId===e)return!0}return!1}function Kt(e,t=`claude`,n=``){let[r,i]=(0,Q.useState)([]),[a,o]=(0,Q.useState)(new Map),[s,c]=(0,Q.useState)(!1),[l,u]=(0,Q.useState)({}),[d,f]=(0,Q.useState)(`idle`),[p,m]=(0,Q.useState)(!1),[h,g]=(0,Q.useState)(0),[_,v]=(0,Q.useState)(null),[y,b]=(0,Q.useState)(null),[x,S]=(0,Q.useState)(null),[te,ne]=(0,Q.useState)([]),E=(0,Q.useRef)([]),[re,D]=(0,Q.useState)(null),[O,ae]=(0,Q.useState)(null),[k,oe]=(0,Q.useState)(!1),[se,A]=(0,Q.useState)(null),[ce,j]=(0,Q.useState)(null),M=(0,Q.useRef)(null),le=(0,Q.useRef)(null),[N,P]=(0,Q.useState)(null),F=(0,Q.useRef)(null),[I,ue]=(0,Q.useState)(!0),L=(0,Q.useRef)(null),R=(0,Q.useRef)(null),z=(0,Q.useRef)(``),B=(0,Q.useRef)([]),de=(0,Q.useRef)(new Map),V=(0,Q.useRef)(null),H=(0,Q.useRef)(`idle`),fe=(0,Q.useRef)(null),pe=(0,Q.useRef)(()=>{}),U=(0,Q.useRef)(null),W=(0,Q.useRef)(!1),me=(0,Q.useRef)(new Set),he=(0,Q.useRef)(0),G=(0,Q.useRef)(null),ge=(0,Q.useRef)(0),_e=(0,Q.useRef)(e);_e.current=e;let ve=(0,Q.useRef)([]);ve.current=r;let ye=(0,Q.useRef)(n);ye.current=n;let K=(0,Q.useRef)(null),be=(0,Q.useRef)(0),q=(0,Q.useRef)({teamNames:new Set,messages:[]}),xe=(0,Q.useRef)(0),[Se,Ce]=(0,Q.useState)(Wt),[we,Te]=(0,Q.useState)([]),Ee=(0,Q.useCallback)(()=>{let e=q.current;Ce({hasTeams:e.teamNames.size>0,teamNames:Array.from(e.teamNames),messageCount:e.messages.length,unreadCount:xe.current}),Te([...e.messages])},[]),De=(0,Q.useCallback)(()=>{xe.current=0,Ee()},[Ee]),Oe=(0,Q.useCallback)(async e=>{try{let t=await w.get(`/api/teams/${encodeURIComponent(e)}`);if(!t?.messages)return;let n=q.current.messages,r=t.messages.filter(e=>!n.some(t=>t.timestamp===e.timestamp&&t.from===e.from));n.push(...r),n.sort((e,t)=>new Date(e.timestamp).getTime()-new Date(t.timestamp).getTime()),n.length>500&&n.splice(0,n.length-500),Ee()}catch{}},[Ee]),ke=d!==`idle`;(0,Q.useEffect)(()=>{if(e)return Ye.getState().setStreaming(e,d!==`idle`,n),()=>{Ye.getState().setStreaming(e,!1)}},[e,d,n]);let J=(0,Q.useCallback)((e,t)=>{let n=B.current.findIndex(e=>e.type===`tool_use`&&(e.tool===`Agent`||e.tool===`Task`)&&e.toolUseId===t);if(n===-1)return!1;let r=B.current[n];if(r.type!==`tool_use`)return!1;let i=[...r.children??[],e];return B.current[n]={...r,children:i},!0},[]),Ae=(0,Q.useCallback)((e,t)=>{let n=e=>e.type===`tool_use`&&(e.tool===`Agent`||e.tool===`Task`)&&e.toolUseId===t,r=ve.current,a=-1;for(let e=r.length-1;e>=0;e--)if(r[e].events?.some(n)){a=e;break}return a===-1?!1:(i(t=>{let r=-1;for(let e=t.length-1;e>=0;e--)if(t[e].events?.some(n)){r=e;break}if(r===-1)return t;let i=t[r],a=i.events.map(t=>{if(!n(t)||t.type!==`tool_use`)return t;let r=[...t.children??[]],i=e.toolUseId,a=i?r.findIndex(t=>t.type===e.type&&t.toolUseId===i):-1;return a===-1?r.push(e):r[a]=e,{...t,children:r}});return[...t.slice(0,r),{...i,events:a},...t.slice(r+1)]}),!0)},[]),je=(0,Q.useCallback)(()=>{be.current=0;let e=z.current,t=[...B.current],n=V.current;(0,Q.startTransition)(()=>{i(r=>{let i=r[r.length-1];return i?.role===`assistant`&&!i.id.startsWith(`final-`)?[...r.slice(0,-1),{...i,content:e,events:t,...n}]:[...r,{id:`streaming-${Date.now()}`,role:`assistant`,content:e,events:t,timestamp:new Date().toISOString(),...n}]})})},[]),Y=(0,Q.useCallback)(()=>{be.current||=window.setTimeout(je,100)},[je]),Me=(0,Q.useCallback)((e,t)=>{let n=t=>t.type===`tool_use`&&(t.tool===`Agent`||t.tool===`Task`)&&t.toolUseId===e,r=B.current.findIndex(n);if(r!==-1){B.current[r]={...B.current[r],bgStatus:t},Y();return}i(e=>{let r=-1;for(let t=e.length-1;t>=0;t--)if(e[t].events?.some(n)){r=t;break}if(r===-1)return e;let i=e[r],a=i.events.map(e=>n(e)?{...e,bgStatus:t}:e);return[...e.slice(0,r),{...i,events:a},...e.slice(r+1)]})},[Y]),Ne=(0,Q.useCallback)(e=>{let t=e,n=t?.type;if(!n)return;let r=e=>{let n=B.current,r=n.findIndex(e);r===-1?n.push(t):n[r]=t};switch(n){case`account_info`:V.current={accountId:t.accountId,accountLabel:t.accountLabel},D(null);break;case`account_retry`:t.accountId&&t.accountLabel&&(V.current={accountId:t.accountId,accountLabel:t.accountLabel}),B.current=[t],Y();break;case`status_update`:{let e=t.accountLabel?` (${t.accountLabel})`:``;D(`${t.message}${e}`);break}case`text`:{let e=t.parentToolUseId;if(e&&J(t,e)){Y();break}if(e){Ae(t,e);break}z.current+=t.content,B.current.push(t),Y();break}case`thinking`:{let e=t.parentToolUseId;if(e&&J(t,e)){Y();break}if(e){Ae(t,e);break}B.current.push(t),Y();break}case`tool_use`:{if(t.tool===`AskUserQuestion`){t.toolUseId&&me.current.add(t.toolUseId);break}let e=t.parentToolUseId;if(e&&J(t,e)){Y();break}if(e){Ae(t,e);break}let n=t.toolUseId;r(e=>!!n&&e.type===`tool_use`&&e.toolUseId===n),Y();break}case`tool_result`:{let e=t.toolUseId;if(e&&de.current.delete(e),e&&me.current.has(e))break;let n=t.parentToolUseId;if(n&&J(t,n)){Y();break}if(n){Ae(t,n);break}r(t=>!!e&&t.type===`tool_result`&&t.toolUseId===e),Y();break}case`approval_resolved`:{let e=t.requestId;if(t.approved&&t.answers){let n=B.current.find(t=>t.type===`approval_request`&&t.requestId===e&&t.tool===`AskUserQuestion`),r=n&&n.input;r&&typeof r==`object`&&(r.answers=t.answers,i(e=>[...e]))}v(t=>t&&t.requestId===e?null:t),K.current!=null&&(T.dismiss(K.current),K.current=null);break}case`approval_request`:if(r(e=>e.type===`approval_request`&&e.requestId===t.requestId),W.current)break;if(v({requestId:t.requestId,tool:t.tool,input:t.input}),_e.current&&!Gt(_e.current)){Ut(t.tool===`AskUserQuestion`?`question`:`approval_request`);let e=_e.current,n=t.tool===`AskUserQuestion`;K.current=T[n?`info`:`warning`](n?`AI has a question`:`${t.tool} needs permission`,{description:ye.current||`Session ${e.slice(0,8)}`,duration:1/0,action:{label:`Go to session`,onClick:()=>{let{panels:t}=ie.getState();for(let[n,r]of Object.entries(t)){let t=r.tabs.find(t=>t.metadata?.sessionId===e);if(t){ie.getState().setActiveTab(t.id,n);break}}}}})}break;case`error`:i(e=>{let n=e[e.length-1];if(n?.role===`assistant`){let r=B.current,i=r[r.length-1],a=i?.type===`error`&&i.message===t.message?r:[...r,t];return B.current=a,[...e.slice(0,-1),{...n,events:a}]}return n?.role===`system`&&n.content===t.message?e:[...e,{id:`error-${Date.now()}`,role:`system`,content:t.message,events:[t],timestamp:new Date().toISOString()}]});break;case`team_detected`:{let e=t.teamName;e&&(q.current.teamNames.add(e),Ee(),Oe(e));break}case`team_inbox`:{let e=t.messages;if(Array.isArray(e)){let t=q.current.messages;t.push(...e),t.length>500&&t.splice(0,t.length-500),xe.current+=e.length,Ee()}break}case`team_updated`:Ee();break;case`bash_output`:{let e=t.toolUseId;if(e){let n=de.current.get(e);n?(n.content+=t.content,n.content.length>5e5&&(n.content=n.content.slice(-5e5)),n.lineCount=t.lineCount):de.current.set(e,{content:t.content,lineCount:t.lineCount}),Y()}break}case`subagent_status`:{let e=t.toolUseId,n=t.status;e&&n&&Me(e,n);break}case`background_registry`:{let e=t.shells??[];E.current=e,ne(e);break}case`done`:{if(H.current===`idle`)break;t.contextWindowPct!=null&&b(t.contextWindowPct),_e.current&&!Gt(_e.current)&&Ut(`done`),be.current&&=(clearTimeout(be.current),0);let e=z.current,n=[...B.current],r=V.current,a=t.lastMessageUuid,o=t.usage;i(t=>{let i=t[t.length-1];return i?.role===`assistant`?[...t.slice(0,-1),{...i,id:`final-${Date.now()}`,content:e||i.content,events:n.length>0?n:i.events,...a&&{sdkUuid:a},...o&&{usage:o}}]:e||n.length>0?[...t,{id:`final-${Date.now()}`,role:`assistant`,content:e,events:n,timestamp:new Date().toISOString(),...a&&{sdkUuid:a},...o&&{usage:o},...r}]:t}),z.current=``,B.current=[],V.current=null,G.current=null,de.current.clear(),D(null);break}}},[J,Ae,Y,Me,Ee,Oe]),Pe=(0,Q.useCallback)(e=>{let t;try{t=JSON.parse(e.data)}catch{return}if(t.type!==`ping`){if(t.type===`user_message`){let e=t.content;i(n=>{let r=n[n.length-1];return r?.role===`user`&&r.content===e?n:[...n,{id:`user-remote-${Date.now()}`,role:`user`,content:e,timestamp:t.timestamp??new Date().toISOString()}]});return}if(t.type===`title_updated`){ae(t.title??null);return}if(t.type===`compact_status`){let e=t.status;e===`compacting`?S(`compacting`):e===`done`&&S(null);return}if(t.type===`phase_changed`){let e=t.phase;f(e),H.current=e,g(e===`connecting`?t.elapsed??0:0),e===`idle`&&S(null);return}if(t.type===`session_state`){oe(!0),A(t.sessionId??_e.current);let e=t,n=e.phase,r=H.current===`idle`;if(f(n),H.current=n,e.sessionTitle&&ae(e.sessionTitle),e.model&&(le.current&&e.model!==le.current||(e.model===le.current&&(le.current=null),j(e.model),M.current=e.model)),typeof e.effort==`string`&&(P(e.effort),F.current=e.effort),typeof e.thinking==`boolean`&&ue(e.thinking),e.pendingApproval&&v({requestId:e.pendingApproval.requestId,tool:e.pendingApproval.tool,input:e.pendingApproval.input}),S(e.compactStatus===`compacting`?`compacting`:null),n===`idle`){let e=Date.now()-ge.current<5e3;r&&e||U.current?.(),m(!1)}return}if(t.type===`turn_events`){let e=t.events,n=t.userMessage;if(!e?.length&&!n){m(!1);return}he.current&&=(cancelAnimationFrame(he.current),0),G.current=n,i(e=>{let t=[...e],r=t.length;for(;r>0&&t[r-1].role===`assistant`;)r--;if(n!=null&&r>0&&t[r-1].role===`user`&&t[r-1].content===n)t=t.slice(0,r-1);else{let e=t[t.length-1];e?.role===`assistant`&&e.id.startsWith(`streaming-`)&&(t=t.slice(0,-1))}if(n){let e=t[t.length-1];(e?.role!==`user`||e.content!==n)&&(t=[...t,{id:`user-replay-${Date.now()}`,role:`user`,content:n,timestamp:new Date().toISOString()}])}return t}),z.current=``,B.current=[],V.current=null,W.current=!0;let r=0,a=()=>{let t=Math.min(r+100,e.length);for(let n=r;n<t;n++)Ne(e[n]);r=t,r<e.length?he.current=requestAnimationFrame(a):(he.current=0,W.current=!1,m(!1))};he.current=requestAnimationFrame(a);return}Ne(t)}},[Ne]),{send:X,connect:Fe}=ht({url:e&&n?`/ws/project/${encodeURIComponent(n)}/chat/${e}`:``,onMessage:Pe,autoConnect:!!e&&!!n});pe.current=X,(0,Q.useEffect)(()=>{let r=!1;R.current&&R.current!==e&&(le.current=null,L.current=null),R.current=e??null,f(`idle`),H.current=`idle`,v(null),K.current!=null&&(T.dismiss(K.current),K.current=null),S(null),o(new Map),u({}),z.current=``,B.current=[],G.current=null,ge.current=0,de.current.clear(),be.current&&=(clearTimeout(be.current),0),oe(!1),A(null),q.current={teamNames:new Set,messages:[]},xe.current=0,Ce(Wt),Te([]),e&&w.get(`/api/teams`).then(t=>{r||!Array.isArray(t)||t.filter(t=>(t?.name??t?.team_name)===e).length!==0&&(q.current.teamNames.add(e),Ee(),Oe(e))}).catch(()=>{});let a=new Set(ve.current.map(e=>e.id));return e&&n?(c(!0),w.get(`${C(n)}/chat/sessions/${e}/messages?providerId=${t}`).then(e=>{if(r)return;let t=Array.isArray(e)?{messages:e,versionMap:{}}:e,n=Array.isArray(t?.messages)?t.messages:[];t?.versionMap&&u(t.versionMap);let o=G.current;if(o!=null){for(let e=n.length-1;e>=0;e--)if(n[e].role===`user`&&n[e].content===o){n=n.slice(0,e);break}}i(e=>{let t=e.filter(e=>!a.has(e.id));return[...n,...t]}),ge.current=Date.now()}).catch(()=>{r||i(e=>e.filter(e=>!a.has(e.id)))}).finally(()=>{r||c(!1)})):i([]),()=>{r=!0}},[e,t,n,Ee,Oe]);let Ie=(0,Q.useCallback)((e,t)=>{if(!e.trim())return;let n=H.current!==`idle`;if(n){be.current&&=(clearTimeout(be.current),0);let e=z.current,t=[...B.current];i(n=>{let r=n[n.length-1];return r?.role===`assistant`?[...n.slice(0,-1),{...r,id:`final-${Date.now()}`,content:e||r.content,events:t.length>0?t:r.events}]:n})}i(t=>[...t,{id:`user-${Date.now()}`,role:`user`,content:e,timestamp:new Date().toISOString()}]),z.current=``,B.current=[],fe.current=null,n?(f(`thinking`),H.current=`thinking`):(f(`initializing`),H.current=`initializing`),v(null),K.current!=null&&(T.dismiss(K.current),K.current=null),X(JSON.stringify({type:`message`,content:e,permissionMode:t?.permissionMode,priority:t?.priority,images:t?.images,...M.current&&{model:M.current},...F.current&&{effort:F.current},...L.current!==null&&{thinking:L.current}}))},[X]),Le=(0,Q.useCallback)(e=>{j(e),M.current=e,le.current=e,X(JSON.stringify({type:`set_model`,model:e}))},[X]),Re=(0,Q.useCallback)(e=>{P(e),F.current=e,X(JSON.stringify({type:`set_effort`,effort:e}))},[X]),ze=(0,Q.useCallback)(e=>{ue(e),L.current=e,X(JSON.stringify({type:`set_thinking`,enabled:e}))},[X]),Be=(0,Q.useCallback)((e,t,n)=>{if(X(JSON.stringify({type:`approval_response`,requestId:e,approved:t,data:n})),t&&n){let t=B.current.find(t=>t.type===`approval_request`&&t.requestId===e&&t.tool===`AskUserQuestion`);if(t){let e=t.input;e&&typeof e==`object`&&(e.answers=n)}i(e=>[...e])}v(null),K.current!=null&&(T.dismiss(K.current),K.current=null)},[X]),Ve=(0,Q.useCallback)(()=>{if(H.current===`idle`)return;X(JSON.stringify({type:`cancel`}));let e=z.current,t=[...B.current];i(n=>{let r=n[n.length-1];return r?.role===`assistant`?[...n.slice(0,-1),{...r,id:`final-${Date.now()}`,content:e||r.content,events:t.length>0?t:r.events}]:n}),z.current=``,B.current=[],de.current.clear(),fe.current=null,f(`idle`),H.current=`idle`,v(null),K.current!=null&&(T.dismiss(K.current),K.current=null)},[X]),He=(0,Q.useCallback)(e=>{e&&X(JSON.stringify({type:`kill_background_shell`,shellId:e}))},[X]),Ue=(0,Q.useCallback)(e=>{if(!e)return;let t=e.replace(/\.output$/,``);return E.current.find(n=>n.shellId===t||n.outputPath.endsWith(e)||n.outputPath.endsWith(`${t}.output`))},[]);(0,Q.useEffect)(()=>{e&&ct.getState().setSessionShells(e,te)},[e,te]),(0,Q.useEffect)(()=>{if(e)return ct.getState().retainSession(e),()=>{ct.getState().releaseSession(e)}},[e]);let We=(0,Q.useCallback)(()=>{oe(!1),m(!0),Fe()},[Fe]),Ge=(0,Q.useCallback)(()=>{!e||!n||fetch(`${C(n)}/chat/sessions/${e}/messages?providerId=${t}`,{headers:{Authorization:`Bearer ${ee()}`}}).then(e=>e.json()).then(e=>{if(H.current!==`idle`)return;let t=e.ok?Array.isArray(e.data)?{messages:e.data,versionMap:void 0}:e.data:null;t?.versionMap&&u(t.versionMap),Array.isArray(t?.messages)&&t.messages.length>0&&(i(t.messages),z.current=``,B.current=[]),ge.current=Date.now()}).catch(()=>{})},[e,t,n]);U.current=Ge;let Z=(0,Q.useCallback)(async(e,t)=>{if(!n)throw Error(`No project context available`);let r=e.replace(/^pc-[^-]+-/,``),i=`${C(n)}/chat/pre-compact-messages?jsonlPath=${encodeURIComponent(t)}&before=${encodeURIComponent(r)}`,a=Pt(await w.get(i),t);return o(t=>{let n=new Map(t);return n.set(e,a),n}),a.length},[n]),Ke=(0,Q.useCallback)(e=>a.has(e),[a]),qe=(0,Q.useCallback)(e=>{i(t=>t.filter(t=>t.id!==e))},[]),Je=(0,Q.useCallback)(()=>{i(e=>e.filter(e=>e.role!==`system`))},[]);return{messages:r,renderedMessages:(0,Q.useMemo)(()=>Ft(r,a),[r,a]),expandCompact:Z,isCompactExpanded:Ke,dismissMessage:qe,clearErrors:Je,messagesLoading:s,versionMap:l,isStreaming:ke,phase:d,isReconnecting:p,connectingElapsed:h,pendingApproval:_,contextWindowPct:y,compactStatus:x,statusMessage:re,sessionTitle:O,model:ce,setModel:Le,effort:N,setEffort:Re,thinking:I,setThinking:ze,teamActivity:Se,teamMessages:we,markTeamRead:De,bashPartialOutput:de,backgroundShells:te,killBackgroundShell:He,findBackgroundShellByOutput:Ue,sendMessage:Ie,respondToApproval:Be,cancelStreaming:Ve,reconnect:We,refetchMessages:Ge,isConnected:k&&se===e}}var qt=12e4;function Jt(e,t=`claude`,n){let[r,i]=(0,Q.useState)({}),[a,o]=(0,Q.useState)(!1),[s,c]=(0,Q.useState)(null),l=(0,Q.useRef)(null),u=(0,Q.useCallback)((r=!1)=>{if(!e)return;o(!0);let a=r?`&refresh=1`:``,s=n?`&session=${encodeURIComponent(n)}`:``;w.get(`${C(e)}/chat/usage?providerId=${t}${s}${a}`).then(e=>{e&&(i(t=>({...t,...e})),e.lastFetchedAt&&c(e.lastFetchedAt))}).catch(()=>{}).finally(()=>o(!1))},[e,t,n]);return(0,Q.useEffect)(()=>(u(),l.current=setInterval(()=>u(),qt),()=>{l.current&&clearInterval(l.current)}),[u]),{usageInfo:r,usageLoading:a,lastFetchedAt:s,refreshUsage:(0,Q.useCallback)(()=>u(!0),[u])}}var Yt={damping:.7,stiffness:.05,mass:1.25},Xt=70,Zt=1e3/60,Qt=350,$t=!1;globalThis.document?.addEventListener(`mousedown`,()=>{$t=!0}),globalThis.document?.addEventListener(`mouseup`,()=>{$t=!1}),globalThis.document?.addEventListener(`click`,()=>{$t=!1});var en=(e={})=>{let[t,n]=(0,Q.useState)(!1),[r,i]=(0,Q.useState)(e.initial!==!1),[a,o]=(0,Q.useState)(!1),s=(0,Q.useRef)(null);s.current=e;let c=(0,Q.useCallback)(()=>{if(!$t)return!1;let e=window.getSelection();if(!e||!e.rangeCount)return!1;let t=e.getRangeAt(0);return t.commonAncestorContainer.contains(g.current)||g.current?.contains(t.commonAncestorContainer)},[]),l=(0,Q.useCallback)(e=>{d.isAtBottom=e,i(e)},[]),u=(0,Q.useCallback)(e=>{d.escapedFromLock=e,n(e)},[]),d=(0,Q.useMemo)(()=>{let n;return{escapedFromLock:t,isAtBottom:r,resizeDifference:0,accumulated:0,velocity:0,listeners:new Set,get scrollTop(){return g.current?.scrollTop??0},set scrollTop(e){if(g.current){let{scrollBehavior:t}=getComputedStyle(g.current);t!==`auto`&&(g.current.style.scrollBehavior=`auto`),g.current.scrollTop=e,d.ignoreScrollToTop=g.current.scrollTop,t!==`auto`&&(g.current.style.scrollBehavior=t)}},get targetScrollTop(){return!g.current||!_.current?0:g.current.scrollHeight-1-g.current.clientHeight},get calculatedTargetScrollTop(){if(!g.current||!_.current)return 0;let{targetScrollTop:t}=this;if(!e.targetScrollTop)return t;if(n?.targetScrollTop===t)return n.calculatedScrollTop;let r=Math.max(Math.min(e.targetScrollTop(t,{scrollElement:g.current,contentElement:_.current}),t),0);return n={targetScrollTop:t,calculatedScrollTop:r},requestAnimationFrame(()=>{n=void 0}),r},get scrollDifference(){return this.calculatedTargetScrollTop-this.scrollTop},get isNearBottom(){return this.scrollDifference<=Xt}}},[]),f=(0,Q.useCallback)((e={})=>{typeof e==`string`&&(e={animation:e}),e.preserveScrollPosition||l(!0);let t=Date.now()+(Number(e.wait)||0),n=rn(s.current,e.animation),{ignoreEscapes:r=!1}=e,i,a=d.calculatedTargetScrollTop;e.duration instanceof Promise?e.duration.finally(()=>{i=Date.now()}):i=t+(e.duration??0);let o=async()=>{let e=new Promise(requestAnimationFrame).then(()=>{if(!d.isAtBottom)return d.animation=void 0,!1;let{scrollTop:l}=d,u=performance.now(),p=(u-(d.lastTick??u))/Zt;if(d.animation||={behavior:n,promise:e,ignoreEscapes:r},d.animation.behavior===n&&(d.lastTick=u),c()||t>Date.now())return o();if(l<Math.min(a,d.calculatedTargetScrollTop)){if(d.animation?.behavior===n){if(n===`instant`)return d.scrollTop=d.calculatedTargetScrollTop,o();d.velocity=(n.damping*d.velocity+n.stiffness*d.scrollDifference)/n.mass,d.accumulated+=d.velocity*p,d.scrollTop+=d.accumulated,d.scrollTop!==l&&(d.accumulated=0)}return o()}return i>Date.now()?(a=d.calculatedTargetScrollTop,o()):(d.animation=void 0,d.scrollTop<d.calculatedTargetScrollTop?f({animation:rn(s.current,s.current.resize),ignoreEscapes:r,duration:Math.max(0,i-Date.now())||void 0}):d.isAtBottom)});return e.then(e=>(requestAnimationFrame(()=>{d.animation||(d.lastTick=void 0,d.velocity=0)}),e))};return e.wait!==!0&&(d.animation=void 0),d.animation?.behavior===n?d.animation.promise:o()},[l,c,d]),p=(0,Q.useCallback)(()=>{u(!0),l(!1)},[u,l]),m=(0,Q.useCallback)(({target:e})=>{if(e!==g.current)return;let{scrollTop:t,ignoreScrollToTop:n}=d,{lastScrollTop:r=t}=d;d.lastScrollTop=t,d.ignoreScrollToTop=void 0,n&&n>t&&(r=n),o(d.isNearBottom),setTimeout(()=>{if(d.resizeDifference||t===n)return;if(c()){u(!0),l(!1);return}let e=t>r,i=t<r;if(d.animation?.ignoreEscapes){d.scrollTop=r;return}i&&(u(!0),l(!1)),e&&u(!1),!d.escapedFromLock&&d.isNearBottom&&l(!0)},1)},[u,l,c,d]),h=(0,Q.useCallback)(({target:e,deltaY:t})=>{let n=e;for(;![`scroll`,`auto`].includes(getComputedStyle(n).overflow);){if(!n.parentElement)return;n=n.parentElement}n===g.current&&t<0&&g.current.scrollHeight>g.current.clientHeight&&!d.animation?.ignoreEscapes&&(u(!0),l(!1))},[u,l,d]),g=tn(e=>{g.current?.removeEventListener(`scroll`,m),g.current?.removeEventListener(`wheel`,h),e?.addEventListener(`scroll`,m,{passive:!0}),e?.addEventListener(`wheel`,h,{passive:!0})},[]),_=tn(e=>{if(d.resizeObserver?.disconnect(),d.resizeObserver=void 0,!e)return;let t;d.resizeObserver=new ResizeObserver(([e])=>{let{height:n}=e.contentRect,r=n-(t??n);if(d.resizeDifference=r,d.scrollTop>d.targetScrollTop&&(d.scrollTop=d.targetScrollTop),o(d.isNearBottom),r>=0){let e=rn(s.current,t?s.current.resize:s.current.initial);f({animation:e,wait:!0,preserveScrollPosition:!0,duration:e===`instant`?void 0:Qt})}else d.isNearBottom&&(u(!1),l(!0));t=n,requestAnimationFrame(()=>{setTimeout(()=>{d.resizeDifference===r&&(d.resizeDifference=0)},1)})}),d.resizeObserver?.observe(e)},[]);return{contentRef:_,scrollRef:g,scrollToBottom:f,stopScroll:p,isAtBottom:r||a,isNearBottom:a,escapedFromLock:t,state:d}};function tn(e,t){let n=(0,Q.useCallback)(t=>(n.current=t,e(t)),t);return n}var nn=new Map;function rn(...e){let t={...Yt},n=!1;for(let r of e){if(r===`instant`){n=!0;continue}typeof r==`object`&&(n=!1,t.damping=r.damping??t.damping,t.stiffness=r.stiffness??t.stiffness,t.mass=r.mass??t.mass)}let r=JSON.stringify(t);return nn.has(r)||nn.set(r,Object.freeze(t)),n?`instant`:nn.get(r)}var an=60,on=8,sn=1400;function cn(e){if(e.scrollHeight<=e.clientHeight)return!1;let t=getComputedStyle(e).overflowY;return t===`auto`||t===`scroll`}function ln(e,t){let n=[],r=e.parentElement;for(;r&&r!==t;)cn(r)&&n.push(r),r=r.parentElement;return n}function un(){return typeof matchMedia==`function`&&matchMedia(`(prefers-reduced-motion: reduce)`).matches}function dn(e,t){let n=e.querySelector(`[data-edit-ref="${CSS.escape(t)}"]`);if(n)return{el:n,level:`edit`};let r=t.replace(/-\d+$/,``),i=e.querySelector(`[data-tool-ref="${CSS.escape(r)}"]`);return i?{el:i,level:`card`}:null}function fn(e,t,n,r){let i=e.scrollTop+t.getBoundingClientRect().top-e.getBoundingClientRect().top-n;e.scrollTo({top:i,behavior:r?`smooth`:`auto`})}function pn(e,t){let n=dn(e,t);if(!n)return()=>{};let{el:r,level:i}=n;for(let t of ln(r,e))fn(t,r,on,!1);fn(e,r,an,!un()),r.dataset.flash=i;let a=setTimeout(()=>{delete r.dataset.flash},sn);return()=>{clearTimeout(a),delete r.dataset.flash}}var mn=new Set([`Write`,`Edit`,`MultiEdit`,`NotebookEdit`]),hn={create:3,write:2,notebook:2,edit:1};function gn(e){return typeof e==`string`?e:``}function _n(e,t){let n=0,r=0;for(let i of yt(e,t))i.added?n+=i.count??0:i.removed&&(r+=i.count??0);return{added:n,removed:r}}function vn(e){return e&&/created successfully/i.test(e)?`create`:`write`}function yn(e,t,n){switch(e){case`Write`:{let e=gn(t.file_path);return e?{filePath:e,op:vn(n),fragments:[{oldStr:``,newStr:gn(t.content)}]}:null}case`Edit`:{let e=gn(t.file_path);return e?{filePath:e,op:`edit`,fragments:[{oldStr:gn(t.old_string),newStr:gn(t.new_string)}]}:null}case`MultiEdit`:{let e=gn(t.file_path);if(!e||!Array.isArray(t.edits))return null;let n=t.edits.filter(e=>!!e&&typeof e==`object`).map(e=>({oldStr:gn(e.old_string),newStr:gn(e.new_string)}));return n.length===0?null:{filePath:e,op:`edit`,fragments:n}}case`NotebookEdit`:{let e=gn(t.notebook_path)||gn(t.file_path);return e?{filePath:e,op:`notebook`,fragments:[{oldStr:``,newStr:gn(t.new_source)}]}:null}default:return null}}function bn(e,t){if(e){for(let n of e)if(n.type===`tool_result`&&n.toolUseId&&t.set(n.toolUseId,n.output??``),n.type===`tool_use`){let e=n.result;n.toolUseId&&e?.output!=null&&!t.has(n.toolUseId)&&t.set(n.toolUseId,e.output),bn(n.children,t)}}}function xn(e,t,n,r){if(e)for(let i of e){if(i.type!==`tool_use`||(i.children?.length&&xn(i.children,!0,n,r),!mn.has(i.tool)))continue;let e=i.input&&typeof i.input==`object`?i.input:null;if(!e)continue;let a=yn(i.tool,e,i.toolUseId?r.get(i.toolUseId):void 0);if(!a)continue;let o=n.get(a.filePath);o||(o={filePath:a.filePath,op:a.op,editCount:0,linesAdded:0,linesRemoved:0,edits:[],viaSubagent:!1},n.set(a.filePath,o)),hn[a.op]>hn[o.op]&&(o.op=a.op),t&&(o.viaSubagent=!0),a.fragments.forEach((e,n)=>{let{added:r,removed:a}=_n(e.oldStr,e.newStr);o.linesAdded+=r,o.linesRemoved+=a,o.editCount+=1,o.edits.push({...e,toolUseId:i.toolUseId,editIndex:n,editRef:i.toolUseId?`${i.toolUseId}-${n}`:void 0,viaSubagent:t})})}}function Sn(e){let t=new Map;for(let n of e)bn(n.events,t);let n=new Map;for(let r of e)xn(r.events,!1,n,t);return[...n.values()]}function Cn(e,t){let n=[];for(let r=t;r>=0&&e[r]?.role===`assistant`;r--)n.unshift(e[r]);return n}var $=n();function wn(e){try{return new Date(e).toLocaleString()}catch{return``}}function Tn({icon:e,label:t,title:n,onClick:r}){return(0,$.jsxs)(`button`,{type:`button`,onClick:r,title:n,"aria-label":t,className:`inline-flex items-center justify-center gap-1 rounded-md px-1.5 py-1 text-text-subtle hover:text-text-primary hover:bg-surface transition-colors`,children:[e,(0,$.jsx)(`span`,{children:t})]})}function En({content:e}){let[t,n]=(0,Q.useState)(!1);return(0,$.jsx)(Tn,{icon:t?(0,$.jsx)(a,{className:`size-3.5`}):(0,$.jsx)(_,{className:`size-3.5`}),label:t?`Copied`:`Copy`,title:`Copy message to clipboard`,onClick:()=>{Ge(e),n(!0),setTimeout(()=>n(!1),1500)}})}function Dn({timestamp:e,content:t,className:n,children:r}){return(0,$.jsxs)(`div`,{className:E(`flex items-center gap-0.5 flex-wrap text-xs text-text-subtle select-none`,n),children:[(0,$.jsx)(`time`,{title:wn(e),className:`pr-1 tabular-nums`,children:pe(e)}),(0,$.jsx)(En,{content:t}),r]})}function On(e){let t=0,n=0;for(let r of e)t+=r.linesAdded,n+=r.linesRemoved;return{added:t,removed:n}}function kn({count:e,totals:t,open:n,onToggle:r,ref:i}){let a=`${e} file${e===1?``:`s`}`;return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{"aria-hidden":!0,className:`mx-1.5 h-3.5 w-px bg-border-soft`}),(0,$.jsxs)(`button`,{ref:i,type:`button`,onClick:r,"aria-expanded":n,"aria-label":`${a} changed this turn, ${t.added} added, ${t.removed} removed`,className:E(`inline-flex items-center gap-[7px] rounded-full font-mono text-[11.5px]`,`px-3 min-h-11 md:min-h-0 md:px-[9px] md:py-[5px]`,`text-text-secondary transition-colors hover:bg-surface hover:text-text-primary`),children:[(0,$.jsx)(`span`,{"aria-hidden":!0,className:`size-[5px] shrink-0 rounded-full bg-primary`}),(0,$.jsx)(`span`,{children:a}),(0,$.jsxs)(`span`,{className:`flex items-center gap-[5px] tabular-nums`,children:[(0,$.jsxs)(`span`,{className:`text-success`,children:[`+`,t.added]}),(0,$.jsxs)(`span`,{className:`text-error`,children:[`−`,t.removed]})]})]})]})}function An(e){if(!e)return!1;let t=e.closest(`[data-tab-pool-id]`)?.dataset.tabPoolId;if(!t)return e.offsetParent!==null;let{panels:n,focusedPanelId:r}=ie.getState();return n[r]?.activeTabId===t}var jn={create:{glyph:`A`,cls:`text-success`,label:`created`},write:{glyph:`W`,cls:`text-warning`,label:`overwritten`},notebook:{glyph:`N`,cls:`text-accent-2`,label:`notebook edited`},edit:{glyph:`·`,cls:`text-text-subtle`,label:`edited`}};function Mn(e){let t=Math.max(e.lastIndexOf(`/`),e.lastIndexOf(`\\`));return t<0?{base:e,dir:``}:{base:e.slice(t+1),dir:e.slice(0,t)}}function Nn({added:e,removed:t,editCount:n,className:r}){return(0,$.jsxs)(`span`,{className:E(`flex items-center gap-[5px] tabular-nums`,r),children:[(0,$.jsxs)(`span`,{className:`text-success`,children:[`+`,e]}),(0,$.jsxs)(`span`,{className:`text-error`,children:[`−`,t]}),n!=null&&n>1&&(0,$.jsxs)(`span`,{className:`text-text-subtle`,children:[`×`,n]})]})}function Pn({change:e,dense:t,selected:n,onClick:r}){let i=jn[e.op],{base:a,dir:s}=Mn(e.filePath),c=e.viaSubagent?`${i.label} · changed by a sub-agent`:i.label;return(0,$.jsxs)(`button`,{type:`button`,onClick:r,title:e.filePath,className:E(`grid w-full grid-cols-[16px_1fr_auto_10px] items-center gap-[10px] text-left font-mono`,`border-b border-border-soft hover:bg-surface transition-colors`,t?`min-h-[38px] px-2.5 py-[5px] text-xs`:`min-h-[52px] px-3 py-[7px] text-[12.5px]`,n&&`bg-surface shadow-[inset_2px_0_0_var(--accent)]`),children:[(0,$.jsx)(`span`,{"aria-label":c,title:c,className:E(`inline-flex size-4 items-center justify-center rounded bg-white/5 text-[9px] font-semibold`,i.cls,e.viaSubagent&&`bg-accent-2/20 ring-1 ring-inset ring-accent-2/35`),children:i.glyph}),(0,$.jsxs)(`span`,{className:`min-w-0`,children:[(0,$.jsx)(`span`,{className:`block truncate text-text-primary`,children:a}),s&&(0,$.jsx)(`span`,{className:`block overflow-hidden text-ellipsis whitespace-nowrap text-[10px] text-text-subtle [direction:rtl] text-left`,children:s})]}),(0,$.jsx)(Nn,{added:e.linesAdded,removed:e.linesRemoved,editCount:e.editCount,className:`text-[11px]`}),(0,$.jsx)(o,{className:`size-[11px] text-text-subtle`})]})}var Fn=(0,Q.lazy)(()=>te(()=>import(`./edit-diff-preview-BivQwZMD.js`),__vite__mapDeps([0,1,2,3])));function In({change:e,onJump:t}){return(0,$.jsx)(`div`,{children:e.edits.map((n,r)=>(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`button`,{type:`button`,disabled:!n.editRef,onClick:()=>n.editRef&&t(n.editRef),className:`group flex min-h-11 w-full items-center gap-2 px-3 font-mono text-[10px] text-text-subtle transition-colors hover:bg-surface disabled:hover:bg-transparent`,children:[(0,$.jsxs)(`span`,{children:[`edit `,r+1,` of `,e.editCount]}),(0,$.jsx)(`span`,{className:`h-px flex-1 bg-border-soft`}),n.editRef&&(0,$.jsxs)(`span`,{className:`flex items-center gap-1 group-hover:text-primary`,children:[(0,$.jsx)(Oe,{className:`size-3`}),`jump`]})]}),(0,$.jsx)(`div`,{className:`mx-3 mb-1`,children:(0,$.jsx)(Q.Suspense,{fallback:(0,$.jsx)(`div`,{className:`h-4`}),children:(0,$.jsx)(Fn,{oldStr:n.oldStr,newStr:n.newStr,filePath:e.filePath})})})]},n.editRef??r))})}function Ln(e){let t=Math.max(e.lastIndexOf(`/`),e.lastIndexOf(`\\`));return t<0?{base:e,dir:``}:{base:e.slice(t+1),dir:e.slice(0,t)}}var Rn=null;function zn(e){return e instanceof HTMLElement?e.tagName===`INPUT`||e.tagName===`TEXTAREA`||e.isContentEditable:!1}function Bn({changes:e,onJump:t,onClose:n}){let[r,i]=(0,Q.useState)(0),a=(0,Q.useRef)(null),o=(0,Q.useRef)(null),s=(0,Q.useId)();(0,Q.useEffect)(()=>(Rn=s,o.current?.querySelector(`button`)?.focus(),()=>{Rn===s&&(Rn=null)}),[s]),(0,Q.useEffect)(()=>{let o=o=>{if(Rn===s&&An(a.current)&&!zn(document.activeElement)){if(o.key===`Escape`)o.preventDefault(),n();else if(o.key===`j`)o.preventDefault(),i(t=>Math.min(t+1,e.length-1));else if(o.key===`k`)o.preventDefault(),i(e=>Math.max(e-1,0));else if(o.key===`Enter`){let n=e[r]?.edits[0]?.editRef;n&&(o.preventDefault(),t(n))}}};return window.addEventListener(`keydown`,o),()=>window.removeEventListener(`keydown`,o)},[s,e,r,t,n]);let c=e[Math.min(r,e.length-1)];if(!c)return null;let{base:l,dir:u}=Ln(c.filePath);return(0,$.jsx)(`div`,{ref:a,className:`mt-0.5 overflow-hidden rounded-[10px] border border-border-soft bg-bg`,children:(0,$.jsxs)(`div`,{className:`grid h-[356px] grid-cols-[294px_1fr] grid-rows-[minmax(0,1fr)] bg-surface-elevated`,children:[(0,$.jsxs)(`div`,{ref:o,className:`min-h-0 overflow-y-auto border-r border-border-soft`,children:[e.map((e,t)=>(0,$.jsx)(Pn,{change:e,dense:!0,selected:t===r,onClick:()=>i(t)},e.filePath)),(0,$.jsx)(`p`,{className:`px-2.5 pt-2 pb-2.5 font-mono text-[10px] text-text-subtle`,children:`j / k to move · enter to jump`})]}),(0,$.jsxs)(`div`,{className:`min-h-0 overflow-y-auto`,children:[(0,$.jsxs)(`div`,{className:`sticky top-0 z-10 flex items-center gap-2 border-b border-border-soft bg-surface-elevated py-[5px] pl-2.5 pr-2`,children:[(0,$.jsx)(`span`,{className:`shrink-0 font-mono text-xs font-medium text-text-primary`,children:l}),u&&(0,$.jsx)(`span`,{title:c.filePath,className:`min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap font-mono text-[10.5px] text-text-subtle [direction:rtl] text-left`,children:u}),(0,$.jsx)(Nn,{added:c.linesAdded,removed:c.linesRemoved,className:`shrink-0 font-mono text-[11px]`}),(0,$.jsx)(`button`,{type:`button`,onClick:()=>void Ge(c.filePath),className:`shrink-0 rounded-md px-1.5 py-1 font-mono text-[10px] text-text-subtle transition-colors hover:bg-surface hover:text-text-primary`,children:`copy path`}),(0,$.jsx)(`button`,{type:`button`,onClick:n,"aria-label":`Close change tray`,className:`inline-flex size-8 shrink-0 items-center justify-center rounded-lg text-text-subtle transition-colors hover:bg-surface hover:text-text-primary`,children:(0,$.jsx)(S,{className:`size-3.5`})})]}),(0,$.jsx)(In,{change:c,onJump:t})]})]})})}function Vn(e){let t=Math.max(e.lastIndexOf(`/`),e.lastIndexOf(`\\`));return t<0?e:e.slice(t+1)}function Hn({label:e,onClick:t,children:n}){return(0,$.jsx)(`button`,{type:`button`,onClick:t,"aria-label":e,className:`inline-flex size-11 shrink-0 items-center justify-center rounded-lg text-text-subtle transition-colors hover:bg-surface hover:text-text-primary`,children:n})}function Un({changes:e,totals:t,open:n,onClose:r,onJump:i}){let[a,o]=(0,Q.useState)(null),s=a==null?null:e[a],c=(0,Q.useRef)(null),l=()=>{o(null),r()},u=e=>{l(),i(e)};return(0,Q.useEffect)(()=>{if(!n)return;let e=c.current,t=()=>Array.from(e?.querySelectorAll(`button:not([disabled])`)??[]);t()[0]?.focus();let r=e=>{if(e.key===`Escape`){e.preventDefault(),l();return}if(e.key!==`Tab`)return;let n=t();if(n.length===0)return;let r=n[0],i=n[n.length-1];e.shiftKey&&document.activeElement===r?(e.preventDefault(),i.focus()):!e.shiftKey&&document.activeElement===i&&(e.preventDefault(),r.focus())};return window.addEventListener(`keydown`,r),()=>window.removeEventListener(`keydown`,r)},[n,a]),(0,$.jsx)(oe,{open:n,onClose:l,className:`flex max-h-[85%] flex-col rounded-t-[14px] motion-reduce:animate-none`,children:(0,$.jsx)(`div`,{ref:c,className:`flex min-h-0 flex-1 flex-col`,children:s?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-1 border-b border-border-soft px-1 pb-1`,children:[(0,$.jsx)(Hn,{label:`Back to file list`,onClick:()=>o(null),children:(0,$.jsx)(me,{className:`size-4`})}),(0,$.jsx)(`span`,{className:`min-w-0 flex-1 truncate font-mono text-xs font-medium text-text-primary`,children:Vn(s.filePath)}),(0,$.jsx)(Nn,{added:s.linesAdded,removed:s.linesRemoved,className:`shrink-0 font-mono text-[11px]`}),(0,$.jsx)(Hn,{label:`Close`,onClick:l,children:(0,$.jsx)(S,{className:`size-4`})})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-1 border-b border-border-soft py-1.5 pl-3 pr-2`,children:[(0,$.jsx)(`span`,{title:s.filePath,className:`min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap font-mono text-[10.5px] text-text-subtle [direction:rtl] text-left`,children:s.filePath}),(0,$.jsx)(`button`,{type:`button`,onClick:()=>void Ge(s.filePath),className:`inline-flex min-h-11 shrink-0 items-center rounded-md px-2.5 font-mono text-[10px] text-text-subtle transition-colors hover:bg-surface hover:text-text-primary`,children:`copy`}),s.edits[0]?.editRef&&(0,$.jsxs)(`button`,{type:`button`,onClick:()=>u(s.edits[0].editRef),className:`inline-flex min-h-11 shrink-0 items-center gap-1 rounded-md px-2.5 font-mono text-[10px] text-text-subtle transition-colors hover:bg-surface hover:text-primary`,children:[(0,$.jsx)(Oe,{className:`size-3`}),`card`]})]}),(0,$.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:(0,$.jsx)(In,{change:s,onJump:u})})]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border-soft px-3 pb-2`,children:[(0,$.jsxs)(`span`,{className:`min-w-0 flex-1 truncate font-mono text-xs font-medium text-text-primary`,children:[`Changed this turn · `,e.length,` file`,e.length===1?``:`s`]}),(0,$.jsx)(Nn,{added:t.added,removed:t.removed,className:`shrink-0 font-mono text-[11px]`}),(0,$.jsx)(Hn,{label:`Close`,onClick:l,children:(0,$.jsx)(S,{className:`size-4`})})]}),(0,$.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:e.map((e,t)=>(0,$.jsx)(Pn,{change:e,onClick:()=>o(t)},e.filePath))})]})})})}function Wn({timestamp:e,content:t,changes:n,onJumpToEdit:r}){let[i,a]=(0,Q.useState)(!1),o=k(),s=(0,Q.useRef)(null),c=()=>{a(!1),s.current?.focus()},l=(0,$.jsx)(Dn,{timestamp:e,content:t,className:`-mt-1.5`,children:n&&n.length>0&&(0,$.jsx)(kn,{ref:s,count:n.length,totals:On(n),open:i,onToggle:()=>i?c():a(!0)})});return!n||n.length===0?l:(0,$.jsxs)($.Fragment,{children:[l,o?(0,$.jsx)(Un,{changes:n,totals:On(n),open:i,onClose:c,onJump:r??(()=>{})}):i&&(0,$.jsx)(Bn,{changes:n,onJump:e=>{a(!1),r?.(e)},onClose:c})]})}function Gn(e){return e.inputTokens+e.cacheReadTokens+e.cacheWriteTokens}function Kn(e){return e.inputTokens+e.cacheWriteTokens}var qn=.5,Jn=.9,Yn={cache_expired:`the session's prompt cache had already lapsed, so PPM released its subprocess`,idle_timeout:`the session sat idle with no tab open long enough for PPM to release its subprocess`,warm_idle_cap:`too many idle sessions were holding a subprocess, so this one was released early`,tab_closed:`PPM shut the session's subprocess down when the last tab disconnected`,set_model:`the model was changed, which restarts the session`,stream_ended:`the session's subprocess had already exited`,resume:`the session was resumed on a new subprocess`};function Xn(e){let t=Kn(e),n=Gn(e);if(!e.coldStart||n<2e4)return{level:`ok`,wastedTokens:t,reason:``};let r=e.cacheHitRate<qn?`bad`:e.cacheHitRate<Jn?`warn`:`ok`;if(r===`ok`)return{level:r,wastedTokens:t,reason:``};let i=e.coldReason?Yn[e.coldReason]??`the session restarted (${e.coldReason})`:null;return{level:r,wastedTokens:t,reason:i?`${er(t)} of this session's transcript was re-sent uncached because ${i}.`:`${er(t)} of this session's transcript was re-sent uncached.`}}var Zn=.1,Qn=1.25;function $n(e){let t=Gn(e);if(t===0)return 1;let n=e.inputTokens+e.cacheWriteTokens*Qn+e.cacheReadTokens*Zn,r=t*Zn;return r>0?Math.max(1,n/r):1}function er(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(e>=1e4?0:1)}k`:String(e)}function tr({usage:e}){let[t,n]=(0,Q.useState)(!1),r=Xn(e);if(r.level===`ok`)return null;let i=$n(e),a=Gn(e),o=Math.round(e.cacheHitRate*100),s=r.level===`bad`;return(0,$.jsxs)(`div`,{className:`rounded-md border px-2.5 py-2 text-[11px] ${s?`border-warning/40 bg-warning/10`:`border-border bg-surface`}`,children:[(0,$.jsxs)(`button`,{onClick:()=>n(e=>!e),"aria-expanded":t,className:`flex w-full items-start gap-2 py-1 text-left text-text-secondary transition-colors hover:text-text-primary`,children:[(0,$.jsx)(Qe,{className:`mt-px size-3.5 shrink-0 ${s?`text-warning`:`text-text-subtle`}`}),(0,$.jsxs)(`span`,{className:`flex-1`,children:[`Costly turn — `,o,`% of a `,er(a),`-token transcript came from cache, so it cost about`,` `,(0,$.jsxs)(`strong`,{className:`font-semibold`,children:[i.toFixed(1),`x`]}),` a fully cached turn.`]}),(0,$.jsx)(J,{className:`mt-px size-3.5 shrink-0 transition-transform ${t?`rotate-180`:``}`})]}),t&&(0,$.jsxs)(`div`,{className:`mt-2 flex flex-col gap-2 border-t border-border pt-2`,children:[r.reason&&(0,$.jsx)(`p`,{className:`text-text-secondary`,children:r.reason}),(0,$.jsxs)(`dl`,{className:`grid grid-cols-2 gap-x-3 gap-y-1 font-mono text-[10.5px] text-text-subtle`,children:[(0,$.jsx)(nr,{label:`From cache`,value:`${er(e.cacheReadTokens)} (${o}%)`}),(0,$.jsx)(nr,{label:`Written to cache`,value:er(e.cacheWriteTokens)}),(0,$.jsx)(nr,{label:`Fresh input`,value:er(e.inputTokens)}),(0,$.jsx)(nr,{label:`Output`,value:er(e.outputTokens)}),(0,$.jsx)(nr,{label:`Model`,value:e.model||`unknown`}),(0,$.jsx)(nr,{label:`Cost`,value:`$${e.costUsd.toFixed(4)}`})]}),(0,$.jsx)(`p`,{className:`text-text-subtle`,children:`A turn stays cached while the session keeps running. Closing the last tab of an idle session, switching model, or a retry all restart it, and the next turn re-sends the transcript at full price.`})]})]})}function nr({label:e,value:t}){return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`dt`,{className:`truncate`,children:e}),(0,$.jsx)(`dd`,{className:`truncate text-right text-text-secondary`,children:t})]})}function rr(e,t,n,r){let[i,a]=(0,Q.useState)([]),o=(0,Q.useRef)(null);return(0,Q.useEffect)(()=>{if(!n||!e||!t){a([]);return}let r=!1;return o.current&&clearTimeout(o.current),o.current=setTimeout(()=>{w.get(`/api/project/${encodeURIComponent(e)}/chat/sessions/${encodeURIComponent(t)}/tasks`).then(e=>{r||a(e)}).catch(()=>{})},300),()=>{r=!0,o.current&&clearTimeout(o.current)}},[e,t,n,r]),i}var ir=new Set([`TaskCreate`,`TaskUpdate`,`TaskStop`]);function ar(e){let t=0;for(let n of e)if(n.events)for(let e of n.events)e.type===`tool_use`&&ir.has(e.tool)&&t++;return t}var or={completed:{icon:`✓`,cls:`text-success`},in_progress:{icon:`▶`,cls:`text-warning`},stopped:{icon:`■`,cls:`text-text-subtle`},pending:{icon:`○`,cls:`text-text-subtle`}};function sr({projectName:e,sessionId:t,messages:n}){let r=(0,Q.useMemo)(()=>ar(n),[n]),i=rr(e,t,r>0,r),[a,s]=(0,Q.useState)(!0);if(i.length===0||i.every(e=>e.status===`completed`||e.status===`stopped`))return null;let l=i.filter(e=>e.status===`completed`).length,u=i.length,d=u?Math.round(l/u*100):0;return(0,$.jsxs)(`div`,{className:`shrink-0 border-b border-border bg-surface/60 backdrop-blur-sm`,children:[(0,$.jsxs)(`button`,{type:`button`,onClick:()=>s(e=>!e),className:`flex items-center gap-2 w-full px-3 min-h-11 text-left text-xs hover:bg-surface transition-colors`,children:[a?(0,$.jsx)(o,{className:`size-3.5 shrink-0`}):(0,$.jsx)(J,{className:`size-3.5 shrink-0`}),(0,$.jsx)(c,{className:`size-3.5 shrink-0 text-text-secondary`}),(0,$.jsx)(`span`,{className:`text-text-primary font-medium`,children:`Tasks`}),(0,$.jsxs)(`span`,{className:`text-text-subtle`,children:[l,`/`,u,` done`]}),(0,$.jsx)(`span`,{className:`ml-auto h-1 w-16 rounded-full bg-border overflow-hidden shrink-0`,children:(0,$.jsx)(`span`,{className:`block h-full bg-success/70`,style:{width:`${d}%`}})})]}),!a&&(0,$.jsx)(`ul`,{className:`px-3 pb-2 space-y-0.5 max-h-48 overflow-y-auto`,children:i.map(e=>(0,$.jsx)(cr,{task:e},e.id))})]})}function cr({task:e}){let t=or[e.status]??or.pending,n=e.status===`in_progress`;return(0,$.jsxs)(`li`,{className:`flex items-start gap-1.5 text-xs rounded px-1 ${n?`bg-warning/10`:``}`,children:[(0,$.jsx)(`span`,{className:`shrink-0 mt-0.5 ${t.cls}`,children:t.icon}),(0,$.jsx)(`span`,{className:e.status===`completed`?`line-through text-text-subtle`:n?`text-text-primary font-medium`:`text-text-secondary`,children:e.subject||(0,$.jsxs)(`span`,{className:`text-text-subtle italic`,children:[`#`,e.id,` (no title)`]})})]})}var lr=/read the full transcript at:\s*(\S+\.jsonl)/i;function ur(e){return e.match(lr)?.[1]?.trim()??null}var dr=class extends Q.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}render(){return this.state.hasError?this.props.fallback?this.props.fallback:this.props.fallbackContent?(0,$.jsx)(`div`,{className:`text-sm whitespace-pre-wrap break-words text-text-primary opacity-80`,children:this.props.fallbackContent}):null:this.props.children}};function fr({projectName:e,onSelectSession:t}){return(0,$.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-6 text-text-secondary overflow-y-auto`,children:[(0,$.jsxs)(`div`,{className:`flex flex-col items-center gap-3`,children:[(0,$.jsx)(i,{className:`size-10 text-text-subtle`}),(0,$.jsx)(`p`,{className:`text-sm`,children:`Send a message to start a new conversation`})]}),(0,$.jsx)(tt,{projectName:e,onSelectSession:t,className:`w-full px-4`})]})}var pr=3200,mr=1e3,hr={hasAbove:!1,atBottom:!0,idx:0,total:0};function gr({scrollElement:e,userIndices:t,scrollToBottom:n}){let r=k(),[i,a]=(0,Q.useState)(hr),[o,s]=(0,Q.useState)(!1),[c,l]=(0,Q.useState)(0),u=(0,Q.useRef)(pr),d=(0,Q.useRef)(null),f=(0,Q.useRef)(null),p=(0,Q.useRef)(!1),m=(0,Q.useRef)(!1),h=(e,t,n)=>t.getBoundingClientRect().top-n+e.scrollTop,g=(0,Q.useCallback)(e=>Array.from(e.querySelectorAll(`[data-msg-index]`)).filter(e=>t.includes(Number(e.dataset.msgIndex))),[t]);(0,Q.useEffect)(()=>{let t=e;if(!t)return;let n=0,r=()=>{let e=t.scrollTop,n=t.getBoundingClientRect().top,r=g(t).map(e=>h(t,e,n)),i=0;for(let t=0;t<r.length;t++)r[t]<=e+12&&(i=t+1);let o={hasAbove:r.some(t=>t<e-4),atBottom:t.scrollHeight-e-t.clientHeight<8,idx:i,total:r.length};a(e=>e.hasAbove===o.hasAbove&&e.atBottom===o.atBottom&&e.idx===o.idx&&e.total===o.total?e:o)},i=()=>{n&&cancelAnimationFrame(n),n=requestAnimationFrame(r)};r(),t.addEventListener(`scroll`,i,{passive:!0});let o=new ResizeObserver(i);return o.observe(t),()=>{n&&cancelAnimationFrame(n),t.removeEventListener(`scroll`,i),o.disconnect()}},[e,g]),(0,Q.useEffect)(()=>{if(!o)return;let e=setTimeout(()=>s(!1),u.current);return()=>clearTimeout(e)},[o,i.idx,c]),(0,Q.useEffect)(()=>{if(!o||!m.current)return;m.current=!1;let e=d.current;(e?.querySelector(`button:not(:disabled)`)??e)?.focus()},[o]),(0,Q.useEffect)(()=>{o||!p.current||(p.current=!1,f.current?.focus())},[o]);let _=(0,Q.useCallback)(()=>{u.current=pr,l(e=>e+1)},[]),v=(0,Q.useCallback)(()=>{let t=e;if(!t)return;let n=t.scrollTop,r=t.getBoundingClientRect().top,i;for(let e of g(t)){let a=h(t,e,r);if(a<n-4)i=a;else break}i!=null&&t.scrollTo({top:i,behavior:`auto`}),_()},[e,g,_]),y=(0,Q.useCallback)(()=>{let t=e;if(!t)return;let r=t.scrollTop,i=t.getBoundingClientRect().top,a=g(t).map(e=>h(t,e,i)).find(e=>e>r+4);a==null?n({animation:`instant`}):t.scrollTo({top:a,behavior:`auto`}),_()},[e,g,n,_]),b=(0,Q.useCallback)(()=>{n({animation:`instant`}),_()},[n,_]);(0,Q.useEffect)(()=>{let t=e;if(!t)return;let n=e=>()=>{An(t)&&(e(),u.current=mr,s(!0))},r=n(v),i=n(y);return window.addEventListener(`chat-nav-prev`,r),window.addEventListener(`chat-nav-next`,i),()=>{window.removeEventListener(`chat-nav-prev`,r),window.removeEventListener(`chat-nav-next`,i)}},[e,v,y]);let x=E(`w-[34px] flex items-center justify-center rounded-[9px] text-text-secondary`,`motion-safe:transition-colors hover:bg-surface-elevated hover:text-foreground`,`disabled:opacity-30 disabled:cursor-default disabled:hover:bg-transparent disabled:hover:text-text-secondary`,r?`h-9`:`h-[30px]`);return(0,$.jsx)(`div`,{className:`absolute bottom-3 right-2.5 z-10 flex flex-col items-end gap-1.5`,children:o?(0,$.jsxs)(`div`,{ref:d,tabIndex:-1,className:`flex flex-col p-[3px] rounded-xl border border-border bg-surface-elevated/95 backdrop-blur-[8px] shadow-lg outline-none`,onFocus:()=>{p.current=!0},onKeyDown:e=>{e.key===`Escape`&&s(!1)},children:[(0,$.jsx)(`button`,{type:`button`,onClick:v,disabled:!i.hasAbove,"aria-label":`Jump to previous message`,className:x,children:(0,$.jsx)(G,{className:`size-[15px]`})}),(0,$.jsx)(`span`,{className:`font-mono text-[10px] font-medium text-text-subtle text-center py-px`,"aria-label":`Message ${i.idx||1} of ${i.total}`,children:i.total?`${i.idx||1}/${i.total}`:`0/0`}),(0,$.jsx)(`button`,{type:`button`,onClick:y,disabled:i.atBottom,"aria-label":`Jump to next message`,className:x,children:(0,$.jsx)(J,{className:`size-[15px]`})}),(0,$.jsx)(`button`,{type:`button`,onClick:b,disabled:i.atBottom,"aria-label":`Jump to latest`,className:x,children:(0,$.jsx)(wt,{className:`size-[13px]`})})]}):(0,$.jsx)(`button`,{ref:f,type:`button`,onClick:()=>{u.current=pr,m.current=!0,s(!0)},"aria-label":`Navigate messages`,"aria-expanded":!1,title:`Navigate messages`,className:E(`group flex items-center justify-center`,r?`size-11`:`size-[30px]`),children:(0,$.jsx)(`span`,{className:E(`flex items-center justify-center rounded-full border border-border bg-surface-elevated/55 backdrop-blur-[6px] text-text-subtle`,`motion-safe:transition-colors group-hover:bg-surface-elevated group-hover:text-foreground`,r?`size-9`:`size-[30px]`),children:(0,$.jsx)(X,{className:`size-[15px]`})})})})}function _r({group:e,onNavigate:t,disabled:n}){if(!e||e.ids.length<2)return null;let{ids:r,currentIndex:i}=e,a=e=>{let i=r[e];i&&!n&&t(i)};return(0,$.jsxs)(`div`,{className:`mt-1 flex items-center gap-1 text-xs text-text-subtle select-none`,children:[(0,$.jsx)(`button`,{type:`button`,onClick:()=>a(i-1),disabled:n||i<=0,"aria-label":`Previous version`,className:`flex items-center justify-center rounded p-0.5 hover:text-text-primary disabled:opacity-30 disabled:cursor-default`,children:(0,$.jsx)(me,{className:`size-3.5`})}),(0,$.jsxs)(`span`,{className:`tabular-nums`,children:[i+1,`/`,r.length]}),(0,$.jsx)(`button`,{type:`button`,onClick:()=>a(i+1),disabled:n||i>=r.length-1,"aria-label":`Next version`,className:`flex items-center justify-center rounded p-0.5 hover:text-text-primary disabled:opacity-30 disabled:cursor-default`,children:(0,$.jsx)(o,{className:`size-3.5`})})]})}function vr(e){let[t,n]=(0,Q.useState)({}),[r,i]=(0,Q.useState)({}),[a,o]=(0,Q.useState)(0),s=(0,Q.useCallback)((e,t)=>{n(n=>({...n,[e]:[t]})),i(t=>({...t,[e]:``}))},[]),c=(0,Q.useCallback)((e,t)=>{n(n=>{let r=n[e]||[];return{...n,[e]:r.includes(t)?r.filter(e=>e!==t):[...r,t]}})},[]),l=(0,Q.useCallback)((e,t)=>{i(n=>({...n,[e]:t})),t&&n(t=>({...t,[e]:[]}))},[]),u=(0,Q.useCallback)(e=>(t[e]?.length??0)>0||(r[e]?.trim().length??0)>0,[t,r]);return{answers:t,customInputs:r,activeTab:a,setActiveTab:o,handleSingleSelect:s,handleMultiSelect:c,handleCustomInput:l,hasAnswer:u,allAnswered:(0,Q.useMemo)(()=>e.every((e,t)=>u(t)),[e,u]),getFinalAnswer:(0,Q.useCallback)(e=>r[e]?.trim()||(t[e]??[]).join(`, `),[t,r]),goToNextTab:(0,Q.useCallback)(()=>o(t=>Math.min(t+1,e.length-1)),[e.length]),goToPrevTab:(0,Q.useCallback)(()=>o(e=>Math.max(e-1,0)),[])}}function yr(e){let[t,n]=(0,Q.useState)(0),r=(0,Q.useRef)(null);return(0,Q.useEffect)(()=>n(0),[e.activeTab]),(0,Q.useEffect)(()=>{if(!e.enabled)return;let i=r=>{let i=document.activeElement===e.customInputRef.current;if(!i&&r.key>=`1`&&r.key<=`9`){r.preventDefault();let t=parseInt(r.key)-1;t<e.totalOptions-1&&(n(t),e.onSelectOption(t));return}if(!i&&(r.key===`o`||r.key===`O`||r.key===`0`)){r.preventDefault(),e.customInputRef.current?.focus(),n(e.totalOptions-1);return}if(r.key===`Tab`&&e.questions.length>1){r.preventDefault(),r.shiftKey?e.goToPrevTab():e.goToNextTab();return}if(!i){if(r.key===`ArrowLeft`){r.preventDefault(),e.goToPrevTab();return}if(r.key===`ArrowRight`){r.preventDefault(),e.goToNextTab();return}if(r.key===`ArrowUp`){r.preventDefault(),n(e=>Math.max(0,e-1));return}if(r.key===`ArrowDown`){r.preventDefault(),n(t=>Math.min(e.totalOptions-1,t+1));return}if(r.key===` `){r.preventDefault(),e.onSelectOption(t);return}}if(r.key===`Enter`){r.preventDefault(),e.allAnswered?e.onSubmit():e.hasAnswer(e.activeTab)&&e.goToNextTab();return}r.key===`Escape`&&i&&e.customInputRef.current?.blur()},a=r.current;return a&&(a.addEventListener(`keydown`,i),a.setAttribute(`tabindex`,`0`),a.contains(document.activeElement)||a.focus()),()=>{a?.removeEventListener(`keydown`,i)}},[e,t]),{focusedOption:t,setFocusedOption:n,containerRef:r}}function br({questions:e,onSubmit:t,onSkip:n}){let r=(0,Q.useRef)(null),i=vr(e),a=e[i.activeTab],o=a?a.options.length+1:0,s=e.length>1,c=(0,Q.useCallback)(()=>{if(!i.allAnswered)return;let n={};e.forEach((e,t)=>{n[e.question]=i.getFinalAnswer(t)}),t(n)},[i.allAnswered,i.getFinalAnswer,e,t]),l=(0,Q.useCallback)(e=>{if(!(!a||e<0))if(e<a.options.length){let t=a.options[e]?.label;if(!t)return;a.multiSelect?i.handleMultiSelect(i.activeTab,t):i.handleSingleSelect(i.activeTab,t)}else e===a.options.length&&r.current?.focus()},[a,i]),u=yr({questions:e,activeTab:i.activeTab,totalOptions:o,allAnswered:i.allAnswered,hasAnswer:i.hasAnswer,onSelectOption:l,goToNextTab:i.goToNextTab,goToPrevTab:i.goToPrevTab,onSubmit:c,customInputRef:r,enabled:!0}),d=(0,Q.useCallback)(e=>{l(e),u.setFocusedOption(e)},[l,u.setFocusedOption]);return(0,$.jsxs)(`div`,{ref:u.containerRef,className:`rounded-lg border-2 border-primary/30 bg-primary/5 p-3 space-y-3 outline-none animate-in slide-in-from-bottom-2`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between text-sm font-medium text-text-primary`,children:[(0,$.jsxs)(`span`,{children:[`AI has `,s?`${e.length} questions`:`a question`]}),(0,$.jsxs)(`span`,{className:`text-[10px] text-text-secondary font-normal`,children:[s?`←→ tabs · `:``,`↑↓ options · 1-`,Math.min(o-1,9),` select · Enter submit`]})]}),s&&(0,$.jsx)(`div`,{className:`flex gap-1 p-1 bg-background rounded-md overflow-x-auto border border-border`,children:e.map((e,t)=>(0,$.jsxs)(`button`,{className:`flex items-center gap-1.5 px-3 py-1.5 rounded text-xs whitespace-nowrap transition-all ${i.activeTab===t?`bg-primary text-primary-foreground`:i.hasAnswer(t)?`text-primary bg-transparent`:`text-text-secondary hover:bg-surface-elevated`}`,onClick:()=>{i.setActiveTab(t),u.setFocusedOption(0)},tabIndex:-1,children:[(0,$.jsx)(`span`,{className:`flex items-center justify-center w-4 h-4 rounded-full text-[10px] font-semibold ${i.activeTab===t?`bg-white/20`:i.hasAnswer(t)?`bg-primary/20 text-primary`:`bg-surface-elevated text-text-secondary`}`,children:i.hasAnswer(t)?`✓`:t+1}),(0,$.jsx)(`span`,{className:`max-w-[100px] overflow-hidden text-ellipsis`,children:e.header||`Q${t+1}`})]},t))}),a&&(0,$.jsxs)(`div`,{className:`space-y-2`,children:[!s&&a.header&&(0,$.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-text-secondary`,children:a.header}),(0,$.jsx)(`div`,{className:`text-sm text-text-primary select-text`,children:a.question}),a.multiSelect&&(0,$.jsx)(`div`,{className:`text-[11px] text-text-secondary`,children:`Select multiple`}),(0,$.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[a.options.map((e,t)=>{let n=(i.answers[i.activeTab]||[]).includes(e.label),r=u.focusedOption===t;return(0,$.jsxs)(`div`,{role:`button`,onClick:()=>d(t),className:`text-left flex items-start gap-2.5 rounded px-2.5 py-2 text-xs border transition-all cursor-pointer select-text ${n?`border-primary bg-primary/10 text-text-primary`:`border-border bg-background text-text-secondary hover:border-primary/40 hover:bg-primary/5`} ${r?`ring-2 ring-primary/40 ring-offset-1 ring-offset-background`:``}`,children:[(0,$.jsx)(`span`,{className:`flex items-center justify-center w-4.5 h-4.5 rounded text-[10px] font-semibold shrink-0 mt-px ${n?`bg-primary/20 text-primary`:`bg-surface-elevated text-text-secondary`}`,children:t+1}),(0,$.jsxs)(`div`,{className:`flex flex-col gap-0.5 flex-1`,children:[(0,$.jsx)(`span`,{className:`font-medium text-text-primary`,children:e.label}),e.description&&(0,$.jsx)(`span`,{className:`text-[11px] text-text-secondary`,children:e.description})]})]},t)}),(0,$.jsxs)(`div`,{className:`flex items-start gap-2.5 rounded px-2.5 py-2 text-xs border border-dashed transition-all border-border bg-transparent ${u.focusedOption===o-1?`ring-2 ring-primary/40 ring-offset-1 ring-offset-background`:``}`,children:[(0,$.jsx)(`span`,{className:`flex items-center justify-center w-4.5 h-4.5 rounded bg-surface-elevated text-text-secondary text-[10px] font-semibold shrink-0 mt-px`,children:`O`}),(0,$.jsx)(`input`,{ref:r,type:`text`,className:`flex-1 px-2 py-1 text-xs bg-surface border border-border rounded text-text-primary outline-none placeholder:text-text-subtle focus:border-primary`,placeholder:`Other (press O to type)...`,value:i.customInputs[i.activeTab]||``,onChange:e=>i.handleCustomInput(i.activeTab,e.target.value),onFocus:()=>u.setFocusedOption(o-1)})]})]})]}),(0,$.jsxs)(`div`,{className:`flex gap-2 justify-end pt-1`,children:[s&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`button`,{className:`px-3 py-1.5 text-xs rounded border border-border bg-background text-text-primary hover:bg-surface-elevated disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,onClick:i.goToPrevTab,disabled:i.activeTab===0,tabIndex:-1,children:`← Prev`}),(0,$.jsx)(`button`,{className:`px-3 py-1.5 text-xs rounded border border-border bg-background text-text-primary hover:bg-surface-elevated disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,onClick:i.goToNextTab,disabled:i.activeTab===e.length-1,tabIndex:-1,children:`Next →`})]}),(0,$.jsx)(`button`,{onClick:n,className:`px-4 py-1.5 rounded border border-border bg-background text-text-secondary text-xs hover:bg-surface-elevated transition-colors`,tabIndex:-1,children:`Skip`}),(0,$.jsxs)(`button`,{onClick:c,disabled:!i.allAnswered,className:`px-4 py-1.5 rounded bg-primary text-primary-foreground text-xs font-medium hover:bg-primary/80 transition-colors disabled:opacity-40 disabled:cursor-not-allowed`,tabIndex:-1,children:[`Submit `,i.allAnswered?`✓`:`(${e.filter((e,t)=>i.hasAnswer(t)).length}/${e.length})`]})]})]})}var xr={"system-reminder":`Context`,claudeMd:`CLAUDE.md`,gitStatus:`Git Status`,currentDate:`Date`,fast_mode_info:`Fast Mode`,"available-deferred-tools":`Tools`,"task-notification":`Task Result`,environment_details:`Environment`,"local-command-caveat":`System`};function Sr(e){let t=[],n=/<(system-reminder|available-deferred-tools|antml:[\w-]+|fast_mode_info|claudeMd|gitStatus|currentDate|task-notification|environment_details|local-command-caveat)[^>]*>([\s\S]*?)<\/\1>/g,r;for(;(r=n.exec(e))!==null;){let e=r[1];t.push({name:e,label:xr[e]??e.replace(/^antml:/,``).replace(/-/g,` `),content:r[2].trim()})}return{cleanText:e.replace(n,``).trim(),tags:t}}function Cr(e){let t=e.match(/<command-name>([\s\S]*?)<\/command-name>/);if(!t)return{command:null,cleanText:e};let n=t[1].trim(),r=e.match(/<command-args>([\s\S]*?)<\/command-args>/)?.[1]?.trim()||void 0,i=e.replace(/<command-name>[\s\S]*?<\/command-name>/g,``).replace(/<command-message>[\s\S]*?<\/command-message>/g,``).replace(/<command-args>[\s\S]*?<\/command-args>/g,``).trim();return{command:{name:n,args:r},cleanText:i}}function wr(e){let t=e.match(/^Use the (\S+) agent to\s?/);return t?{agent:t[1],cleanText:e.slice(t[0].length)}:{agent:null,cleanText:e}}function Tr(e){let t=/<ide_opened_file>([\s\S]*?)<\/ide_opened_file>/g.exec(e);return t?{idePath:t[1].match(/opened the file (.+?) in the IDE/)?.[1]?.trim()??null,cleanText:e.replace(/<ide_opened_file>[\s\S]*?<\/ide_opened_file>/g,``).trim()}:{idePath:null,cleanText:e}}function Er(e){let t=e.match(/^\[Attached file: (.+?)\]\n*/);if(t)return{files:[t[1]],text:e.slice(t[0].length)};let n=e.match(/^\[Attached files:\n([\s\S]+?)\]\n*/);return n?{files:n[1].split(`
3
+ `).map(e=>e.trim()).filter(Boolean),text:e.slice(n[0].length)}:{files:[],text:e}}function Dr(e){let t=[],n=e,r=/^```(?:bash|sh|shell|zsh)\n([\s\S]*?)\n```\s*(?:\n\n?)?/,i;for(;(i=n.match(r))!==null;)t.push(i[1]),n=n.slice(i[0].length);return{blocks:t,remainingText:n.trim()}}function Or(e){let{idePath:t,cleanText:n}=Tr(e),{blocks:r,remainingText:i}=Dr(n),a=Er(i),{cleanText:o,tags:s}=Sr(a.text.replace(/<local-command-(?:stdout|stderr)>([\s\S]*?)<\/local-command-(?:stdout|stderr)>/g,`$1`)),{command:c,cleanText:l}=Cr(o),{agent:u,cleanText:d}=wr(l),f=c?.args?d?`${c.args}\n\n${d}`:c.args:d;return{files:a.files,text:f,body:d,tags:s,command:c,terminalBlocks:r,idePath:t,agent:u}}function kr(e){let{agent:t,body:n,command:r}=Or(e);if(!r)return{agent:t,text:n};let i=`/${r.name.replace(/^\/+/,``)}${r.args?` ${r.args}`:``}`;return{agent:t,text:n?`${i}\n\n${n}`:i}}var Ar=te(()=>import(`./markdown-renderer-Dg5HE9Zq.js`),__vite__mapDeps([4,5,1,6,2,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36])),jr=(0,Q.lazy)(()=>Ar.then(e=>({default:e.MarkdownRenderer})));function Mr({messages:e,messagesLoading:t,keepStaleWhileLoading:n,pendingApproval:r,onApprovalResponse:a,isStreaming:o,phase:s,onSelectSession:c,connectingElapsed:l,statusMessage:d,compactStatus:f,projectName:p,onFork:m,onEdit:h,editingMsgId:g,sessionId:_,providerId:v,onNavigateVersion:y,versionMap:b,bashPartialOutput:x,onExpandCompact:S,isCompactExpanded:C,onDismissMessage:w,onClearErrors:ee}){let{scrollRef:T,contentRef:te,scrollToBottom:ne,stopScroll:E,isAtBottom:re}=en({initial:`instant`,resize:`instant`}),D=(0,Q.useMemo)(()=>e.filter(e=>{let t=e.content&&e.content.trim().length>0,n=e.events&&e.events.length>0;return e.role===`user`?t:t||n}),[e]),ie=!!r||o,[O,ae]=(0,Q.useState)(null),k=(0,Q.useCallback)(e=>{T(e),ae(e)},[T]),oe=(0,Q.useRef)(new Map),se=(0,Q.useMemo)(()=>{let e=oe.current,t=new Map;for(let n=0;n<D.length;n++){let r=D[n];if(r.role!==`assistant`||D[n+1]?.role===`assistant`)continue;let i=`${r.id}:${r.events?.length??0}`,a=e.get(i);a||(a=Sn(Cn(D,n)),e.set(i,a)),a.length>0&&t.set(n,a)}return t},[D]),A=(0,Q.useRef)(null),ce=(0,Q.useCallback)(e=>{O&&(A.current?.(),A.current=pn(O,e))},[O]);(0,Q.useEffect)(()=>()=>A.current?.(),[]);let j=(0,Q.useRef)(null);(0,Q.useLayoutEffect)(()=>{let e=O;e&&j.current!=null&&(e.scrollTop=e.scrollHeight-j.current,j.current=null)},[D.length,O]),(0,Q.useLayoutEffect)(()=>{O&&ne({animation:`instant`})},[_,O]);let M=(0,Q.useRef)(!0);(0,Q.useEffect)(()=>{O&&O.clientHeight>0&&(M.current=re)},[re,O]),(0,Q.useEffect)(()=>{let e=O;if(!e)return;let t=e.clientHeight,n=new ResizeObserver(()=>{let n=e.clientHeight,r=t===0&&n>0;t=n,r&&!M.current&&E()});return n.observe(e),()=>n.disconnect()},[O,E]);let le=(0,Q.useCallback)((e,t)=>{m?.(e,t)},[m]),N=(0,Q.useCallback)((e,t,n)=>{h?.(e,t,n)},[h]),P=(0,Q.useCallback)(e=>{w?.(e)},[w]),F=(0,Q.useMemo)(()=>D.reduce((e,t)=>t.role===`system`?e+1:e,0),[D]),I=(0,Q.useMemo)(()=>D.reduce((e,t,n)=>(t.role===`user`&&e.push(n),e),[]),[D]),ue=(0,Q.useCallback)(()=>{if(!S||!C)return null;for(let e of D){if(C(e.id))continue;let t=ur(e.content||``);if(t)return{id:e.id,jsonlPath:t};if(e.events){for(let t of e.events)if(t.type===`text`){let n=ur(t.content||``);if(n)return{id:e.id,jsonlPath:n}}}}return null},[D,S,C])(),L=!!ue,[R,z]=(0,Q.useState)(!1),B=(0,Q.useCallback)(async()=>{if(!ue||!S||R)return;let e=O;j.current=e?e.scrollHeight-e.scrollTop:null,z(!0);try{await S(ue.id,ue.jsonlPath)}finally{z(!1)}},[ue,S,R,O]);return(0,Q.useEffect)(()=>{let e=O;if(!e||!L)return;let t=()=>{e.scrollTop<200&&!R&&B()};return e.addEventListener(`scroll`,t,{passive:!0}),()=>e.removeEventListener(`scroll`,t)},[O,L,R,B]),t&&(!n||e.length===0)?(0,$.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-text-secondary`,children:[(0,$.jsx)(i,{className:`size-10 text-text-subtle animate-pulse`}),(0,$.jsx)(`p`,{className:`text-sm`,children:`Loading messages...`})]}):e.length===0&&!o?(0,$.jsx)(fr,{projectName:p||``,onSelectSession:c||(()=>{})}):(0,$.jsxs)(`div`,{className:`relative flex-1 overflow-hidden flex flex-col min-h-0`,children:[(0,$.jsx)(sr,{projectName:p,sessionId:_,messages:e}),F>1&&ee&&(0,$.jsx)(`div`,{className:`absolute top-2 left-0 right-0 z-20 flex justify-center pointer-events-none`,children:(0,$.jsxs)(`button`,{type:`button`,onClick:ee,className:`pointer-events-auto flex items-center gap-1.5 rounded-full bg-error/15 border border-error/25 px-3 py-1 text-xs text-error hover:bg-error/25 shadow-md backdrop-blur-sm`,children:[(0,$.jsx)(u,{className:`size-3.5`}),`Clear all errors (`,F,`)`]})}),R&&(0,$.jsxs)(`div`,{className:`absolute top-2 left-0 right-0 z-10 flex items-center justify-center gap-1.5 text-xs text-text-secondary pointer-events-none`,children:[(0,$.jsx)(Z,{className:`size-3 animate-spin`}),`Loading previous conversation...`]}),(0,$.jsx)(`div`,{ref:k,[gt]:``,className:`flex-1 overflow-y-auto overflow-x-hidden [overflow-anchor:none]`,style:{WebkitOverflowScrolling:`touch`,overscrollBehavior:`contain`},children:(0,$.jsxs)(`div`,{ref:te,className:`w-full`,children:[D.map((e,t)=>{let n=t>0?D[t-1]:void 0,r=e.role===`user`?D.slice(0,t+1).reduce((e,t)=>e+(t.role===`user`?1:0),0):0,i=r?b?.[r]:void 0,a=e.role===`user`&&g!=null&&e.id===g,s=D[t+1],c=e.role===`assistant`&&s?.role!==`assistant`,l;if(c){let e=[];for(let n=t;n>=0&&D[n].role===`assistant`;n--){let t=Nr(D[n]);t&&e.unshift(t)}l=e.join(`
4
4
 
5
5
  `)}return(0,$.jsx)(`div`,{"data-msg-index":t,className:`px-4 pt-4 select-none`,children:(0,$.jsx)(dr,{fallbackContent:e.content,children:(0,$.jsx)(Pr,{message:e,isStreaming:o&&e.id.startsWith(`streaming-`),isLastAssistantInTurn:c,turnCopyText:l,turnChanges:c?se.get(t):void 0,onJumpToEdit:ce,projectName:p,onFork:e.role===`user`&&m?le:void 0,onEdit:e.role===`user`&&h?N:void 0,isEditing:a,onDismiss:e.role===`system`&&w?P:void 0,prevMsgId:n?.sdkUuid??n?.id,sessionId:_,providerId:v,versionGroup:i,onNavigateVersion:y,versionNavDisabled:o,bashPartialOutput:x})})},e.id)}),ie&&(0,$.jsxs)(`div`,{className:`px-4 pt-4 pb-4 space-y-4 select-none`,children:[r&&(r.tool===`AskUserQuestion`?(0,$.jsx)(ai,{approval:r,onRespond:a}):(0,$.jsx)(ii,{approval:r,onRespond:a})),o&&(0,$.jsx)(ei,{lastMessage:e[e.length-1],phase:s,elapsed:l,statusMessage:f===`compacting`?`Compacting messages...`:d})]})]})}),(0,$.jsx)(gr,{scrollElement:O,userIndices:I,scrollToBottom:ne})]})}function Nr(e){return e.events?.length?e.events.filter(e=>e.type===`text`).map(e=>e.content).join(``):e.content}var Pr=(0,Q.memo)(function({message:e,isStreaming:t,isLastAssistantInTurn:n,turnCopyText:r,turnChanges:i,onJumpToEdit:a,projectName:o,onFork:s,onEdit:c,isEditing:l,onDismiss:d,prevMsgId:f,sessionId:p,providerId:m,versionGroup:h,onNavigateVersion:g,versionNavDisabled:_,bashPartialOutput:v}){if(e.role===`user`){let t=s?()=>s(e.content,f):void 0,n=c?()=>c(e.content,f,e.id):void 0;return(0,$.jsx)(zr,{content:e.content,messageId:e.id,timestamp:e.timestamp,projectName:o,onFork:t,onEdit:n,isEditing:l,sessionId:p,providerId:m,versionGroup:h,onNavigateVersion:g,versionNavDisabled:_})}return e.role===`system`?(0,$.jsxs)(`div`,{className:`group flex items-center gap-2 rounded-lg bg-error/10 border border-error/20 px-3 py-2 text-sm text-error`,children:[(0,$.jsx)(dt,{className:`size-4 shrink-0`}),(0,$.jsx)(`p`,{className:`flex-1`,children:e.content}),d&&(0,$.jsx)(`button`,{type:`button`,onClick:()=>d(e.id),"aria-label":`Dismiss`,title:`Dismiss`,className:`shrink-0 rounded p-1 text-error/70 hover:text-error hover:bg-error/15 md:opacity-0 md:group-hover:opacity-100`,children:(0,$.jsx)(u,{className:`size-4`})})]}):(0,$.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[e.events&&e.events.length>0?(0,$.jsx)(Zr,{events:e.events,isStreaming:t,projectName:o,bashPartialOutput:v}):e.content&&(0,$.jsx)(`div`,{className:`text-sm text-text-primary select-text`,children:(0,$.jsx)(ri,{content:e.content,projectName:o})}),!t&&n&&e.usage&&(0,$.jsx)(tr,{usage:e.usage}),!t&&n&&(0,$.jsx)(Wn,{timestamp:e.timestamp,content:r??Nr(e),changes:i,onJumpToEdit:a})]})}),Fr=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.webp`]);function Ir(e,t){let n=D(e);return`/api/project/${encodeURIComponent(t??`_`)}/chat/uploads/${encodeURIComponent(n)}`}function Lr(e){let t=e.lastIndexOf(`.`);return t===-1?!1:Fr.has(e.slice(t).toLowerCase())}var Rr=new Set([`task-notification`,`environment_details`,`local-command-caveat`]);function zr({content:e,messageId:t,timestamp:n,projectName:r,onFork:a,onEdit:o,isEditing:s,sessionId:c,providerId:l,versionGroup:u,onNavigateVersion:d,versionNavDisabled:f}){let{files:p,text:m,tags:h,command:g,terminalBlocks:_,idePath:v,agent:y}=(0,Q.useMemo)(()=>Or(e),[e]),b=h.some(e=>Rr.has(e.name)),[x,S]=(0,Q.useState)(!1),[C,w]=(0,Q.useState)(!1),ee=(0,Q.useRef)(null);return(0,Q.useEffect)(()=>{let e=ee.current;if(!e)return;let t=()=>w(e.scrollHeight>e.clientHeight+2);t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[m]),(0,$.jsxs)(`div`,{className:E(`flex flex-col gap-1`,!b&&`items-end`),children:[(0,$.jsxs)(`div`,{"data-user-message":b?void 0:`true`,style:b?void 0:{borderRadius:`var(--rad) var(--rad) 4px var(--rad)`},className:E(`group/user relative px-3 py-2 text-sm border shadow-sm transition-all`,b?`rounded-lg bg-surface/40 border-border/40 text-text-secondary`:`max-w-[80%] bg-accent-wash border-accent-wash-border text-text`,s&&`ring-2 ring-primary/60 border-primary/40`),children:[h.length>0&&(0,$.jsx)(Vr,{tags:h}),y&&(0,$.jsx)(`div`,{className:`flex items-center gap-1.5 mb-0.5`,children:(0,$.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-md bg-sky-500/15 border border-sky-500/25 px-2 py-0.5 text-xs font-medium text-sky-600 dark:text-sky-400`,children:[(0,$.jsx)(i,{className:`size-3 shrink-0`}),y]})}),g&&(0,$.jsx)(`div`,{className:`flex items-center gap-1.5 mb-0.5`,children:(0,$.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-md bg-primary/15 border border-primary/20 px-2 py-0.5 text-xs font-medium text-primary`,children:[(0,$.jsx)(Mt,{className:`size-3 shrink-0`}),g.name]})}),v&&(0,$.jsxs)(`div`,{className:`flex items-center gap-1.5 mb-1 text-[11px] text-text-subtle`,children:[(0,$.jsx)(`span`,{className:`shrink-0`,children:`Opened in IDE:`}),(0,$.jsx)(Gr,{path:v,projectName:r})]}),p.length>0&&(0,$.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:p.map((e,t)=>Lr(e)?(0,$.jsx)(Xr,{filePath:e,projectName:r},t):(0,$.jsxs)(`div`,{className:`flex items-center gap-1 rounded-md border border-border/60 bg-background/40 px-1.5 py-0.5 text-[11px] text-text-secondary`,children:[(0,$.jsx)(Je,{className:`size-3 shrink-0`}),(0,$.jsx)(`span`,{className:`truncate max-w-32`,children:D(e)})]},t))}),_.length>0&&(0,$.jsx)(`div`,{className:`space-y-1.5`,children:_.map((e,t)=>(0,$.jsx)(Br,{content:e},t))}),m&&(0,$.jsx)(`div`,{ref:ee,className:E(`whitespace-pre-wrap break-words transition-all duration-200 select-text`,!x&&`line-clamp-2`,x&&`max-h-[50vh] overflow-y-auto`),children:b?(0,$.jsx)(qr,{text:m,projectName:r}):(0,$.jsx)(Kr,{text:m})}),(C||x)&&(0,$.jsx)(`button`,{onClick:()=>S(!x),className:E(`flex items-center gap-1 text-xs mt-1 transition-colors`,b?`text-text-subtle hover:text-text-secondary`:`text-primary/70 hover:text-primary`),children:x?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(G,{className:`size-3`}),`Show less`]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(J,{className:`size-3`}),`Show more`]})}),!b&&d&&(0,$.jsx)(_r,{group:u,onNavigate:d,disabled:f})]}),!b&&(0,$.jsxs)(Dn,{timestamp:n,content:e,children:[o&&(0,$.jsx)(Tn,{icon:(0,$.jsx)(ot,{className:`size-3.5`}),label:`Edit`,title:`Edit this message (continue in the same tab)`,onClick:o}),a&&(0,$.jsx)(Tn,{icon:(0,$.jsx)(K,{className:`size-3.5`}),label:`Fork`,title:`Retry from this message (fork into a new tab)`,onClick:a})]})]})}function Br({content:e}){let[t,n]=(0,Q.useState)(!1);return(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`button`,{type:`button`,onClick:()=>n(!t),className:E(`flex items-center gap-1.5 rounded-md border px-2 py-1 text-xs transition-colors`,t?`border-primary/50 bg-surface-elevated text-text-primary`:`border-border/60 bg-background/40 text-text-secondary hover:bg-surface`),children:[(0,$.jsx)(be,{className:`size-3.5 shrink-0`}),(0,$.jsx)(`span`,{children:`Terminal output`}),(0,$.jsx)(J,{className:E(`size-3 shrink-0 transition-transform`,t&&`rotate-180`)})]}),t&&(0,$.jsx)(`pre`,{className:`mt-1 max-h-40 overflow-auto rounded-md border border-border bg-background p-2 text-xs text-text-primary font-mono whitespace-pre-wrap break-words`,children:e})]})}function Vr({tags:e}){return(0,$.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:e.map((e,t)=>(0,$.jsx)(Hr,{tag:e},t))})}function Hr({tag:e}){let[t,n]=(0,Q.useState)(!1);return e.name===`task-notification`?(0,$.jsx)(Wr,{content:e.content}):(0,$.jsxs)(`div`,{className:`text-xs`,children:[(0,$.jsxs)(`button`,{onClick:()=>n(!t),className:`flex items-center gap-1 rounded-full border border-border/60 bg-surface/50 px-2 py-0.5 text-text-subtle hover:text-text-secondary hover:bg-surface transition-colors`,children:[(0,$.jsx)(Ae,{className:`size-2.5`}),(0,$.jsx)(`span`,{children:e.label}),(0,$.jsx)(o,{className:E(`size-2.5 transition-transform`,t&&`rotate-90`)})]}),t&&(0,$.jsx)(`div`,{className:`mt-1 rounded border border-border/40 bg-surface/30 px-2 py-1.5 text-[11px] text-text-subtle/80 whitespace-pre-wrap max-h-40 overflow-y-auto leading-relaxed`,children:e.content})]})}function Ur(e,t){return e.match(RegExp(`<${t}>([\\s\\S]*?)</${t}>`))?.[1]?.trim()||void 0}function Wr({content:e}){let[t,n]=(0,Q.useState)(!1),r=Ur(e,`status`),i=Ur(e,`summary`),a=Ur(e,`output-file`),s=Ur(e,`result`);return(0,$.jsxs)(`div`,{className:`text-xs`,children:[(0,$.jsxs)(`button`,{onClick:()=>n(!t),className:`flex items-center gap-1.5 rounded-full border border-border/60 bg-surface/50 px-2 py-0.5 text-text-subtle hover:text-text-secondary hover:bg-surface transition-colors`,children:[r===`completed`?(0,$.jsx)(U,{className:`size-2.5 text-success`}):(0,$.jsx)(u,{className:`size-2.5 text-warning`}),(0,$.jsx)(`span`,{className:`truncate max-w-80`,children:i??`Task notification`}),(0,$.jsx)(o,{className:E(`size-2.5 transition-transform shrink-0`,t&&`rotate-90`)})]}),t&&(0,$.jsxs)(`div`,{className:`mt-1 rounded border border-border/40 bg-surface/30 px-2 py-1.5 space-y-1.5`,children:[i&&(0,$.jsx)(`p`,{className:`text-[11px] text-text-secondary`,children:i}),a&&(0,$.jsx)(Gr,{path:a}),s&&(0,$.jsx)(`div`,{className:`text-[11px] text-text-subtle/80 max-h-60 overflow-y-auto leading-relaxed`,children:(0,$.jsx)(ri,{content:s})})]})]})}function Gr({path:e,projectName:t}){return(0,$.jsxs)(`button`,{type:`button`,onClick:(0,Q.useCallback)(()=>{let n=ae.getState().openTab,r=t??O.getState().activeProject?.name,i=D(e),a={filePath:e};r&&(a.projectName=r),w.get(`/api/fs/read?path=${encodeURIComponent(e)}`).then(()=>{n({type:`editor`,title:i,metadata:a,projectId:null,closable:!0})}).catch(()=>{n({type:`editor`,title:i,metadata:a,projectId:null,closable:!0})})},[e,t]),className:`inline-flex items-center gap-1 rounded border border-border/50 bg-surface/50 px-1.5 py-0.5 font-mono text-[10px] text-text-secondary hover:text-text-primary hover:bg-surface transition-colors cursor-pointer`,children:[(0,$.jsx)(Je,{className:`size-2.5 shrink-0`}),(0,$.jsx)(`span`,{className:`truncate max-w-60`,children:D(e)}),(0,$.jsx)(pt,{className:`size-2 shrink-0 opacity-50`})]})}function Kr({text:e}){let t=(0,Q.useMemo)(()=>{let t=/(https?:\/\/[^\s<>()]+[^\s<>().,;:!?'"])/g,n=[],r=0,i;for(;(i=t.exec(e))!==null;)i.index>r&&n.push({kind:`text`,value:e.slice(r,i.index)}),n.push({kind:`url`,value:i[1]}),r=i.index+i[0].length;return r<e.length&&n.push({kind:`text`,value:e.slice(r)}),n},[e]);return t.every(e=>e.kind===`text`)?(0,$.jsx)($.Fragment,{children:e}):(0,$.jsx)($.Fragment,{children:t.map((e,t)=>e.kind===`url`?(0,$.jsx)(`a`,{href:e.value,target:`_blank`,rel:`noopener noreferrer`,className:`text-primary underline underline-offset-2 hover:text-primary/80 break-all`,onClick:e=>e.stopPropagation(),children:e.value},t):(0,$.jsx)(`span`,{children:e.value},t))})}function qr({text:e,projectName:t}){return(0,$.jsx)($.Fragment,{children:(0,Q.useMemo)(()=>{let t=/(\/(?:[\w.\-]+\/)+[\w.\-]+)/g,n=[],r=0,i;for(;(i=t.exec(e))!==null;)i.index>r&&n.push({kind:`text`,value:e.slice(r,i.index)}),n.push({kind:`path`,value:i[1]}),r=i.index+i[0].length;return r<e.length&&n.push({kind:`text`,value:e.slice(r)}),n},[e]).map((e,n)=>e.kind===`path`?(0,$.jsx)(Gr,{path:e.value,projectName:t},n):(0,$.jsx)(`span`,{children:e.value},n))})}var Jr=new Map;function Yr(e){let[t,n]=(0,Q.useState)(()=>Jr.get(e)?.url??null),[r,i]=(0,Q.useState)(!1);return(0,Q.useEffect)(()=>{let t=Jr.get(e);if(t){n(t.url);return}let r=!1,a=ee();return fetch(e,{headers:a?{Authorization:`Bearer ${a}`}:{}}).then(e=>{if(!e.ok)throw Error(`Failed`);return e.blob()}).then(t=>{if(r)return;let i=URL.createObjectURL(t);Jr.set(e,{url:i}),n(i)}).catch(()=>{r||i(!0)}),()=>{r=!0}},[e]),{blobUrl:t,error:r}}function Xr({filePath:e,projectName:t}){let{blobUrl:n,error:r}=Yr(Ir(e,t)),i=st(e=>e.open),a=D(e);return(0,$.jsxs)(`button`,{type:`button`,onClick:e=>n&&i(n,a,_t(e.currentTarget)),className:`flex items-center gap-1 rounded-md border border-border/60 bg-background/40 px-1.5 py-0.5 text-[11px] text-text-secondary hover:bg-surface transition-colors cursor-pointer`,children:[n?(0,$.jsx)(`img`,{src:n,alt:a,[vt]:``,className:`size-4 rounded-sm object-cover shrink-0`}):r?(0,$.jsx)(Xe,{className:`size-3 shrink-0`}):(0,$.jsx)(`div`,{className:`size-4 rounded-sm bg-surface animate-pulse shrink-0`}),(0,$.jsx)(`span`,{className:`truncate max-w-32`,children:a})]})}function Zr({events:e,isStreaming:t,projectName:n,bashPartialOutput:r}){let i=[],a=``,o=``;for(let t=0;t<e.length;t++){let n=e[t];if(n.type===`thinking`){a&&=(i.push({kind:`text`,content:a}),``),o+=n.content;continue}if(o&&=(i.push({kind:`thinking`,content:o}),``),n.type===`account_retry`){a&&=(i.push({kind:`text`,content:a}),``);let e=n.accountLabel??`another account`,t=n.reason??`Auth failed`;i.push({kind:`text`,content:`\n\n> ↻ ${t} — retrying with **${e}**...\n\n`});continue}n.type===`text`?a+=n.content:n.type===`tool_use`?(a&&=(i.push({kind:`text`,content:a}),``),i.push({kind:`tool`,tool:n})):n.type===`tool_result`||(a&&=(i.push({kind:`text`,content:a}),``),i.push({kind:`tool`,tool:n}))}o&&i.push({kind:`thinking`,content:o}),a&&i.push({kind:`text`,content:a});let s=e.filter(e=>e.type===`tool_result`);for(let e of s){let t=e.toolUseId;if(t){let n=i.find(e=>e.kind===`tool`&&e.tool.type===`tool_use`&&e.tool.toolUseId===t);if(n){n.result=e;continue}}let n=i.find(e=>e.kind===`tool`&&!e.result);n&&(n.result=e)}for(let e of i)if(e.kind===`tool`&&!e.result&&e.tool.type===`tool_use`){let t=e.tool.result;t&&(e.result={type:`tool_result`,output:t.output,isError:t.isError})}for(let e=0;e<i.length;e++){let n=i[e];if(n.kind===`tool`&&!n.result){let r=!1;if(n.tool.type===`tool_use`&&n.tool.tool===`Read`){let t=n.tool.input?.file_path;t&&(r=i.slice(e+1).some(e=>e.kind===`tool`&&e.result&&e.tool.type===`tool_use`&&e.tool.tool===`Edit`&&e.tool.input?.file_path===t))}n.completed=r||!t}}return(0,$.jsx)($.Fragment,{children:i.map((e,a)=>{if(e.kind===`thinking`)return(0,$.jsx)(Qr,{content:e.content,isStreaming:t&&a===i.length-1},`think-${a}`);if(e.kind===`text`){let r=t&&a===i.length-1;return(0,$.jsx)(`div`,{className:`text-sm text-text-primary select-text`,children:(0,$.jsx)($r,{content:e.content,animate:r,projectName:n})},`text-${a}`)}return(0,$.jsx)(l,{tool:e.tool,result:e.result,completed:e.completed,projectName:n,bashPartialOutput:r},`tool-${a}`)})})}function Qr({content:e,isStreaming:t}){let[n,r]=(0,Q.useState)(t),i=(0,Q.useRef)(null);return(0,Q.useEffect)(()=>{!t&&e.length>0&&r(!1)},[t,e.length]),(0,Q.useEffect)(()=>{t&&n&&i.current&&(i.current.scrollTop=i.current.scrollHeight)},[e,t,n]),(0,$.jsxs)(`div`,{className:`rounded border border-border/50 bg-surface/30 text-xs`,children:[(0,$.jsxs)(`button`,{onClick:()=>r(!n),className:`flex items-center gap-2 px-2 py-1.5 w-full text-left hover:bg-surface transition-colors text-text-subtle`,children:[t?(0,$.jsx)(Z,{className:`size-3 animate-spin`}):(0,$.jsx)(o,{className:`size-3 transition-transform ${n?`rotate-90`:``}`}),(0,$.jsxs)(`span`,{children:[`Thinking`,t?`...`:``]}),!t&&(0,$.jsx)(`span`,{className:`text-text-subtle/50 ml-auto`,children:e.length>100?`${Math.round(e.length/4)} tokens`:``})]}),n&&(0,$.jsx)(`div`,{ref:i,className:`max-h-60 overflow-y-auto`,children:(0,$.jsx)(`div`,{className:`px-2 pb-2 text-text-subtle/80 whitespace-pre-wrap text-[11px] leading-relaxed`,children:e})})]})}function $r({content:e,animate:t,projectName:n}){return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(ri,{content:e,projectName:n,isStreaming:t}),t&&(0,$.jsx)(`span`,{className:`text-text-subtle text-sm animate-pulse`,children:`Thinking...`})]})}function ei({lastMessage:e,phase:t,elapsed:n,statusMessage:r}){let i=!e||e.role!==`assistant`,a=e?.events?.length?e.events[e.events.length-1].type===`tool_result`:!1;return!r&&!i&&!a?null:(0,$.jsxs)(`div`,{className:`flex flex-col gap-1 text-sm`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2 text-text-subtle`,children:[(0,$.jsx)(Z,{className:`size-3 animate-spin`}),(0,$.jsxs)(`span`,{children:[r||(t===`initializing`?`Initializing`:t===`connecting`?`Connecting`:t===`thinking`?`Thinking`:`Processing`),i&&(n??0)>0&&(0,$.jsxs)(`span`,{className:`text-text-subtle/60`,children:[`... (`,n,`s)`]})]})]}),t===`connecting`&&(n??0)>=30&&(0,$.jsx)(`p`,{className:`text-xs text-warning/80 ml-5`,children:`Taking longer than usual — may be rate-limited or API slow. Try sending a new message to retry.`})]})}var ti=/<teammate-message[^>]*>[\s\S]*?<\/teammate-message>/g;function ni(e){return e.replace(ti,``).replace(/\n{3,}/g,`
6
6