nextclaw 0.52.0 → 0.52.1

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 (35) hide show
  1. package/dist/cli/app/index.js +1 -1
  2. package/dist/{nextclaw-cli-app-Br9GLB2U.js → nextclaw-cli-app-npOWL5Nm.js} +5 -2
  3. package/dist/nextclaw-cli-app-npOWL5Nm.js.map +1 -0
  4. package/package.json +9 -9
  5. package/ui-dist/.vite/manifest.json +22 -22
  6. package/ui-dist/.vite/manifest.json.gz +0 -0
  7. package/ui-dist/assets/{account-panel-BXTCFv7d.js → account-panel-BW4GbzQd.js} +1 -1
  8. package/ui-dist/assets/account-panel-BW4GbzQd.js.gz +0 -0
  9. package/ui-dist/assets/app-presenter-provider-CBZ_-ewx.js +115 -0
  10. package/ui-dist/assets/app-presenter-provider-CBZ_-ewx.js.gz +0 -0
  11. package/ui-dist/assets/{appearance-settings-page-83T2AtVm.js → appearance-settings-page-C-uZ2Wkf.js} +1 -1
  12. package/ui-dist/assets/appearance-settings-page-C-uZ2Wkf.js.gz +0 -0
  13. package/ui-dist/assets/{keyboard-shortcuts-settings-page-CkQbSKwI.js → keyboard-shortcuts-settings-page-CScSXYS4.js} +1 -1
  14. package/ui-dist/assets/main-DMNmwcJE.js +2 -0
  15. package/ui-dist/assets/main-DMNmwcJE.js.gz +0 -0
  16. package/ui-dist/assets/{projects-O3GTERwP.js → projects-Voql-cvx.js} +1 -1
  17. package/ui-dist/assets/projects-Voql-cvx.js.gz +0 -0
  18. package/ui-dist/assets/{pwa-D_nZUwG0.js → pwa-CzqfYjFx.js} +1 -1
  19. package/ui-dist/assets/pwa-CzqfYjFx.js.gz +0 -0
  20. package/ui-dist/assets/remote-BekqL5nA.js +1 -0
  21. package/ui-dist/assets/{runtime-config-page-BHTKwgDi.js → runtime-config-page-BH9uF4u_.js} +1 -1
  22. package/ui-dist/assets/runtime-config-page-BH9uF4u_.js.gz +0 -0
  23. package/ui-dist/index.html +3 -3
  24. package/ui-dist/index.html.gz +0 -0
  25. package/dist/nextclaw-cli-app-Br9GLB2U.js.map +0 -1
  26. package/ui-dist/assets/account-panel-BXTCFv7d.js.gz +0 -0
  27. package/ui-dist/assets/app-presenter-provider-V0xnU_Wb.js +0 -115
  28. package/ui-dist/assets/app-presenter-provider-V0xnU_Wb.js.gz +0 -0
  29. package/ui-dist/assets/appearance-settings-page-83T2AtVm.js.gz +0 -0
  30. package/ui-dist/assets/main-ky5Efhq1.js +0 -2
  31. package/ui-dist/assets/main-ky5Efhq1.js.gz +0 -0
  32. package/ui-dist/assets/projects-O3GTERwP.js.gz +0 -0
  33. package/ui-dist/assets/pwa-D_nZUwG0.js.gz +0 -0
  34. package/ui-dist/assets/remote-CFWp4wyH.js +0 -1
  35. package/ui-dist/assets/runtime-config-page-BHTKwgDi.js.gz +0 -0
@@ -1 +1 @@
1
- import{i as e}from"./chunk-DF37yw5_.js";import{A as t,M as n,t as r}from"./utils-CBZPzC_b.js";import{Jt as i,Kt as a,Qt as o,Ut as s,qt as c}from"./api-DqzQ-_3w.js";import{E as l,o as u}from"./app-presenter-provider-V0xnU_Wb.js";import{c as d,s as f}from"./i18n-20rSH40D.js";import{n as p}from"./chevron-down-BL-yMYcX.js";import{a as m,i as h,n as g,r as _,t as v}from"./select-CG5YWnwe.js";import{i as y,n as b}from"./theme-provider-DzvAi3pe.js";import{n as x}from"./i18n-provider-BPRq6S7O.js";var S=e(n(),1);function C(){let{language:e,setLanguage:t}=x();return{currentLanguage:e,currentLanguageLabel:d.find(t=>t.value===e)?.label??e,languageOptions:d,selectLanguage:(0,S.useCallback)(n=>{e!==n&&(t(n),window.location.reload())},[e,t])}}var w=t(),T=[{value:`card`,labelKey:`chatMessageLayoutCard`,descriptionKey:`chatMessageLayoutCardDescription`},{value:`flat`,labelKey:`chatMessageLayoutFlat`,descriptionKey:`chatMessageLayoutFlatDescription`}];function E(){let{theme:e,setTheme:t}=b(),{currentLanguage:n,languageOptions:d,selectLanguage:x}=C(),S=l(e=>e.layout),E=l(e=>e.setLayout),D=u(e=>e.isVisible),O=u(e=>e.setVisible);return(0,w.jsx)(o,{title:f(`appearance`),children:(0,w.jsx)(i,{children:(0,w.jsxs)(c,{children:[(0,w.jsx)(a,{title:f(`theme`),control:(0,w.jsxs)(v,{value:e,onValueChange:e=>t(e),children:[(0,w.jsx)(h,{"aria-label":f(`theme`),className:`w-36 sm:w-44`,children:(0,w.jsx)(m,{})}),(0,w.jsx)(g,{children:y.map(e=>(0,w.jsx)(_,{value:e.value,children:f(e.labelKey)},e.value))})]})}),(0,w.jsx)(a,{title:f(`language`),control:(0,w.jsxs)(v,{value:n,onValueChange:e=>x(e),children:[(0,w.jsx)(h,{"aria-label":f(`language`),className:`w-36 sm:w-44`,children:(0,w.jsx)(m,{})}),(0,w.jsx)(g,{children:d.map(e=>(0,w.jsx)(_,{value:e.value,children:e.label},e.value))})]})}),(0,w.jsx)(a,{title:f(`chatMessageLayoutTitle`),description:f(`chatMessageLayoutDescription`),layout:`stacked`,children:(0,w.jsx)(`div`,{role:`radiogroup`,"aria-label":f(`chatMessageLayoutTitle`),className:`grid gap-1 rounded-xl bg-background/65 p-1 sm:grid-cols-2`,children:T.map(e=>{let t=e.value===S;return(0,w.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":t,onClick:()=>E(e.value),className:r(`flex min-w-0 items-start gap-3 rounded-lg px-3 py-2.5 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40`,t?`bg-card text-foreground shadow-sm`:`text-muted-foreground hover:bg-card/60 hover:text-foreground`),children:[(0,w.jsx)(`span`,{className:r(`mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full ring-1`,t?`bg-primary text-primary-foreground ring-primary`:`bg-background ring-border`),children:t?(0,w.jsx)(p,{className:`h-2.5 w-2.5`,strokeWidth:3}):null}),(0,w.jsxs)(`span`,{className:`min-w-0`,children:[(0,w.jsx)(`span`,{className:`block text-sm font-medium`,children:f(e.labelKey)}),(0,w.jsx)(`span`,{className:`mt-1 block text-xs leading-5 text-muted-foreground`,children:f(e.descriptionKey)})]})]},e.value)})})}),(0,w.jsx)(a,{title:f(`sideDockVisibilityTitle`),description:f(`sideDockVisibilityDescription`),control:(0,w.jsx)(s,{id:`appearance-side-dock-visible`,"aria-label":f(`sideDockVisibilityTitle`),checked:D,onCheckedChange:O})})]})})})}export{E as AppearanceSettingsPage};
1
+ import{i as e}from"./chunk-DF37yw5_.js";import{A as t,M as n,t as r}from"./utils-CBZPzC_b.js";import{Jt as i,Kt as a,Qt as o,Ut as s,qt as c}from"./api-DqzQ-_3w.js";import{E as l,o as u}from"./app-presenter-provider-CBZ_-ewx.js";import{c as d,s as f}from"./i18n-20rSH40D.js";import{n as p}from"./chevron-down-BL-yMYcX.js";import{a as m,i as h,n as g,r as _,t as v}from"./select-CG5YWnwe.js";import{i as y,n as b}from"./theme-provider-DzvAi3pe.js";import{n as x}from"./i18n-provider-BPRq6S7O.js";var S=e(n(),1);function C(){let{language:e,setLanguage:t}=x();return{currentLanguage:e,currentLanguageLabel:d.find(t=>t.value===e)?.label??e,languageOptions:d,selectLanguage:(0,S.useCallback)(n=>{e!==n&&(t(n),window.location.reload())},[e,t])}}var w=t(),T=[{value:`card`,labelKey:`chatMessageLayoutCard`,descriptionKey:`chatMessageLayoutCardDescription`},{value:`flat`,labelKey:`chatMessageLayoutFlat`,descriptionKey:`chatMessageLayoutFlatDescription`}];function E(){let{theme:e,setTheme:t}=b(),{currentLanguage:n,languageOptions:d,selectLanguage:x}=C(),S=l(e=>e.layout),E=l(e=>e.setLayout),D=u(e=>e.isVisible),O=u(e=>e.setVisible);return(0,w.jsx)(o,{title:f(`appearance`),children:(0,w.jsx)(i,{children:(0,w.jsxs)(c,{children:[(0,w.jsx)(a,{title:f(`theme`),control:(0,w.jsxs)(v,{value:e,onValueChange:e=>t(e),children:[(0,w.jsx)(h,{"aria-label":f(`theme`),className:`w-36 sm:w-44`,children:(0,w.jsx)(m,{})}),(0,w.jsx)(g,{children:y.map(e=>(0,w.jsx)(_,{value:e.value,children:f(e.labelKey)},e.value))})]})}),(0,w.jsx)(a,{title:f(`language`),control:(0,w.jsxs)(v,{value:n,onValueChange:e=>x(e),children:[(0,w.jsx)(h,{"aria-label":f(`language`),className:`w-36 sm:w-44`,children:(0,w.jsx)(m,{})}),(0,w.jsx)(g,{children:d.map(e=>(0,w.jsx)(_,{value:e.value,children:e.label},e.value))})]})}),(0,w.jsx)(a,{title:f(`chatMessageLayoutTitle`),description:f(`chatMessageLayoutDescription`),layout:`stacked`,children:(0,w.jsx)(`div`,{role:`radiogroup`,"aria-label":f(`chatMessageLayoutTitle`),className:`grid gap-1 rounded-xl bg-background/65 p-1 sm:grid-cols-2`,children:T.map(e=>{let t=e.value===S;return(0,w.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":t,onClick:()=>E(e.value),className:r(`flex min-w-0 items-start gap-3 rounded-lg px-3 py-2.5 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40`,t?`bg-card text-foreground shadow-sm`:`text-muted-foreground hover:bg-card/60 hover:text-foreground`),children:[(0,w.jsx)(`span`,{className:r(`mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full ring-1`,t?`bg-primary text-primary-foreground ring-primary`:`bg-background ring-border`),children:t?(0,w.jsx)(p,{className:`h-2.5 w-2.5`,strokeWidth:3}):null}),(0,w.jsxs)(`span`,{className:`min-w-0`,children:[(0,w.jsx)(`span`,{className:`block text-sm font-medium`,children:f(e.labelKey)}),(0,w.jsx)(`span`,{className:`mt-1 block text-xs leading-5 text-muted-foreground`,children:f(e.descriptionKey)})]})]},e.value)})})}),(0,w.jsx)(a,{title:f(`sideDockVisibilityTitle`),description:f(`sideDockVisibilityDescription`),control:(0,w.jsx)(s,{id:`appearance-side-dock-visible`,"aria-label":f(`sideDockVisibilityTitle`),checked:D,onCheckedChange:O})})]})})})}export{E as AppearanceSettingsPage};
@@ -1 +1 @@
1
- import{A as e}from"./utils-CBZPzC_b.js";import{Jt as t,Kt as n,Qt as r,qt as i}from"./api-DqzQ-_3w.js";import{T as a}from"./app-presenter-provider-V0xnU_Wb.js";import{s as o}from"./i18n-20rSH40D.js";import{t as s}from"./use-viewport-layout-BS18drMT.js";var c=e();function l(){let{isMobile:e}=s();return(0,c.jsx)(r,{title:o(`keyboardShortcuts`),children:e?(0,c.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:o(`keyboardShortcutsDesktopOnly`)}):(0,c.jsx)(t,{children:(0,c.jsx)(i,{children:(0,c.jsx)(n,{title:o(`chatInputVoice`),layout:`stacked`,children:(0,c.jsx)(a,{})})})})})}export{l as KeyboardShortcutsSettingsPage};
1
+ import{A as e}from"./utils-CBZPzC_b.js";import{Jt as t,Kt as n,Qt as r,qt as i}from"./api-DqzQ-_3w.js";import{T as a}from"./app-presenter-provider-CBZ_-ewx.js";import{s as o}from"./i18n-20rSH40D.js";import{t as s}from"./use-viewport-layout-BS18drMT.js";var c=e();function l(){let{isMobile:e}=s();return(0,c.jsx)(r,{title:o(`keyboardShortcuts`),children:e?(0,c.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:o(`keyboardShortcutsDesktopOnly`)}):(0,c.jsx)(t,{children:(0,c.jsx)(i,{children:(0,c.jsx)(n,{title:o(`chatInputVoice`),layout:`stacked`,children:(0,c.jsx)(a,{})})})})})}export{l as KeyboardShortcutsSettingsPage};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/projects-Voql-cvx.js","assets/chunk-DF37yw5_.js","assets/app-presenter-provider-CBZ_-ewx.js","assets/preload-helper-ca-nBW7U.js","assets/select-CG5YWnwe.js","assets/dist-C5I0v8Qn.js","assets/dist-BiIcnf9j.js","assets/utils-CBZPzC_b.js","assets/es2015-cuwbYI-l.js","assets/createLucideIcon-BNKf0_kc.js","assets/chevron-down-BL-yMYcX.js","assets/dialog-Xe73hpQz.js","assets/dist-czPa8xFO.js","assets/x-DdXOqLnX.js","assets/popover-NkrFlWHp.js","assets/tooltip-DYcuWhuP.js","assets/api-DqzQ-_3w.js","assets/i18n-20rSH40D.js","assets/mcp-marketplace-page-FfIfEo6w.js","assets/doc-browser-BJrre2S_.js","assets/search-CUe41wjm.js","assets/book-open-xqEj1OLE.js","assets/boxes-D6uPnkGo.js","assets/navigation-link-BAQjgx2F.js","assets/host-capabilities-B107nwS3.js","assets/plus-LA8-jpxP.js","assets/refresh-cw-h9Xq3LY3.js","assets/doc-browser-context-TILuCY5c.js","assets/middleware-0o3JF3tS.js","assets/use-panel-app-scroll-restoration-ZnicIfo3.js","assets/circle-alert-lSa3LRvS.js","assets/loader-circle-K1BDdHR5.js","assets/confirm-dialog-BTKCWMn6.js","assets/i18n-provider-BPRq6S7O.js","assets/tag-chip-B1AYPOKL.js","assets/skeleton-Drvn83YW.js","assets/katex-B26hhTOT.js","assets/puzzle-D6gulz7u.js","assets/app-data-C54N2p8b.js","assets/trash-2-BPPYt2NV.js","assets/ellipsis-C5YXdOUx.js","assets/eye-C84inPcV.js","assets/tabs-BuE0qKMh.js","assets/use-viewport-layout-BS18drMT.js","assets/theme-provider-DzvAi3pe.js","assets/use-desktop-capabilities-BkuRd2cY.js","assets/logo-badge-C-5-zim6.js","assets/card-BhfAZv5L.js","assets/use-config-BEdbtpD4.js","assets/provider-models-hrHMcHqg.js","assets/app-presenter-provider-jNGlmBLe.css","assets/circle-dashed-CU3yApvP.js","assets/settings-2-CE3ELQyk.js","assets/model-config-page-Bcm6-pCX.js","assets/provider-scoped-model-input-BQsugx1v.js","assets/form-actions-BRESe-m_.js","assets/config-hints-B_C9DAp5.js","assets/appearance-settings-page-C-uZ2Wkf.js","assets/keyboard-shortcuts-settings-page-CScSXYS4.js","assets/search-config-page-DWKlMHgH.js","assets/config-split-page-DqAXKLmG.js","assets/providers-config-page-BDEdHJbw.js","assets/extensions-CVUFK6Jj.js","assets/channels-list-page-Bv7CVSqV.js","assets/runtime-config-page-BH9uF4u_.js","assets/rotate-cw-B6xm41Wn.js","assets/save-fff_WpY2.js","assets/pwa-CzqfYjFx.js","assets/desktop-update-config-PmofcFf6.js","assets/security-config-DmTDKKY4.js","assets/secrets-config-page-DiQL088Y.js","assets/privacy-settings-page-B1sHLAc1.js","assets/desktop-capabilities-page-zLzCSB7A.js","assets/remote-BekqL5nA.js","assets/mcp-marketplace-page-sH7VptN_.js"])))=>i.map(i=>d[i]);
2
+ import{i as e}from"./chunk-DF37yw5_.js";import{t}from"./client-BtGBwLTs.js";import{A as n,M as r,O as i,t as a}from"./utils-CBZPzC_b.js";import{t as o}from"./preload-helper-ca-nBW7U.js";import{a as s,c,d as l,f as u,l as d,r as f,s as p,u as m}from"./navigation-link-BAQjgx2F.js";import{$t as ee,An as h,Gt as g,Ht as _,Lt as v,Vt as te,Yt as y,_n as b,dn as x,en as ne,fn as S,gn as C,on as w,vn as re,x as T}from"./api-DqzQ-_3w.js";import{S as ie,b as ae,n as oe,p as se,u as ce}from"./mcp-marketplace-page-FfIfEo6w.js";import{A as le,B as ue,D as de,F as fe,H as pe,I as E,L as me,M as D,N as he,O as ge,R as O,S as _e,U as k,V as A,W as ve,_ as ye,a as be,at as j,b as xe,c as Se,d as Ce,f as we,ft as Te,g as Ee,h as De,i as Oe,j as ke,k as Ae,l as je,m as Me,n as M,o as N,ot as Ne,p as Pe,s as Fe,st as Ie,t as Le,u as Re,ut as ze,w as Be,x as Ve,z as He}from"./app-presenter-provider-CBZ_-ewx.js";import{i as Ue,s as P}from"./i18n-20rSH40D.js";import{t as We}from"./createLucideIcon-BNKf0_kc.js";import{c as Ge,f as Ke,g as qe,l as Je,s as Ye}from"./app-data-C54N2p8b.js";import{t as Xe}from"./chevron-down-BL-yMYcX.js";import{t as Ze}from"./ellipsis-C5YXdOUx.js";import{a as Qe,i as $e,n as et,r as tt,t as nt}from"./select-CG5YWnwe.js";import{t as rt}from"./provider-scoped-model-input-BQsugx1v.js";import{t as it}from"./eye-C84inPcV.js";import{t as F}from"./use-viewport-layout-BS18drMT.js";import{t as at}from"./plus-LA8-jpxP.js";import{n as ot,s as st,t as ct}from"./theme-provider-DzvAi3pe.js";import{t as lt}from"./settings-2-CE3ELQyk.js";import{n as ut,r as dt,t as ft}from"./pwa-CzqfYjFx.js";import{n as pt}from"./confirm-dialog-BTKCWMn6.js";import{t as mt}from"./trash-2-BPPYt2NV.js";import{a as ht,i as I,n as L,o as R,r as z,t as B}from"./dialog-Xe73hpQz.js";import{i as gt,r as _t,t as vt}from"./popover-NkrFlWHp.js";import{n as yt,t as bt}from"./i18n-provider-BPRq6S7O.js";import{n as xt,t as St}from"./doc-browser-context-TILuCY5c.js";import{t as Ct}from"./tag-chip-B1AYPOKL.js";import{n as V,t as H}from"./card-BhfAZv5L.js";import{n as wt}from"./provider-models-hrHMcHqg.js";import{f as U,p as W,t as G}from"./use-config-BEdbtpD4.js";import{t as Tt}from"./login-page-f8qQ4xKY.js";var Et=We(`Gauge`,[[`path`,{d:`m12 14 4-4`,key:`9kzdfg`}],[`path`,{d:`M3.34 19a10 10 0 1 1 17.32 0`,key:`19p75a`}]]),Dt=t(),K=e(r(),1);function Ot(){let e=M();return(0,K.useEffect)(()=>(e.chatCompletionNotificationManager.start(),()=>{e.chatCompletionNotificationManager.stop()}),[e.chatCompletionNotificationManager]),null}var kt=`NextClaw`,At=[{prefix:`/marketplace/mcp`,key:`marketplaceMcpPageTitle`},{prefix:`/marketplace/skills`,key:`marketplaceSkillsPageTitle`},{prefix:`/marketplace`,key:`marketplace`},{prefix:`/skills`,key:`marketplaceSkillsPageTitle`},{prefix:`/cron`,key:`cronPageTitle`},{prefix:`/agents`,key:`agentsPageTitle`},{prefix:`/projects`,key:`projectsTitle`},{prefix:`/chat`,key:`chat`},{prefix:`/model`,key:`modelPageTitle`},{prefix:`/search`,key:`searchPageTitle`},{prefix:`/providers`,key:`providersPageTitle`},{prefix:`/channels`,key:`channelsPageTitle`},{prefix:`/runtime`,key:`runtimePageTitle`},{prefix:`/updates`,key:`runtimeUpdatesPageTitle`},{prefix:`/remote`,key:`remotePageTitle`},{prefix:`/security`,key:`authSecurityTitle`},{prefix:`/secrets`,key:`secretsPageTitle`}];function jt(e,t){return e===t||e.startsWith(`${t}/`)}function Mt(e){let t=e.toLowerCase();for(let{prefix:e,key:n}of At)if(jt(t,e))return P(n);return P(`settings`)}function Nt(e){let t=e.toLowerCase();return t===`localhost`||t.endsWith(`.localhost`)||t===`::1`||t===`[::1]`||t.startsWith(`127.`)}function Pt(e){let t=e?.host.trim(),n=e?.hostname.trim(),r=e?.port.trim();return!t||!n?null:Nt(n)?r||null:t}function Ft(e,t){let n=Pt(t);return`${kt}${n?` ${n}`:``} - ${Mt(e)}`}var q=n(),It={...ge,...ce};function Lt({children:e,sideDockManager:t}){let{isOpen:n,mode:r}=xt();se();let{pathname:i}=m(),a=l(),o=Oe(),{language:s}=yt(),{isMobile:c}=F(),u=ye(),d=N(e=>e.isVisible);N(e=>e.pinnedItems);let f={getDockState:t.getDockState,pinTab:t.pinTab,unpinTab:t.unpinTab},p=(0,K.useCallback)(e=>{let t=Ae(e);if(t)return[{key:`chat`,items:[{key:`add-to-chat`,icon:(0,q.jsx)(Ne,{className:`h-4 w-4`}),label:P(`docBrowserAddToChat`),restoreFocus:!1,onSelect:()=>{let e=i===`/chat`||i.startsWith(`/chat/`),n=i===`/chat`?null:Re(i.slice(6));o.chatComposerIntentManager.requestUiResourceReference({targetSessionKey:e?n:null,reference:t}),e||a(je)}}]}]},[a,i,o]);return(0,K.useEffect)(()=>{document.title=Ft(i,window.location)},[i,s]),c&&u!==`win32`?(0,q.jsx)(Ee,{pathname:i,isDocBrowserOpen:n,docBrowserDockControls:f,docBrowserRenderers:It,docBrowserTabMenuGroups:p,topbarLeadingInset:u===`darwin`?`4.75rem`:void 0,children:e}):(0,q.jsx)(we,{pathname:i,isMobileLayout:c,isDocBrowserOpen:n,docBrowserMode:r,docBrowserDockControls:f,docBrowserRenderers:It,docBrowserTabMenuGroups:p,sideDock:d?(0,q.jsx)(be,{manager:t}):null,children:e})}function Rt({children:e}){let t=Oe();return(0,q.jsx)(St,{manager:t.docBrowserManager,children:(0,q.jsx)(Lt,{sideDockManager:t.sideDockManager,children:e})})}function zt(){let{isMobile:e}=F();return e?(0,q.jsx)(Me,{}):(0,q.jsx)(p,{to:`/model`,replace:!0})}var Bt=new Intl.NumberFormat;function Vt({agent:e,defaults:t,runtimeOptions:n,defaultRuntime:r,defaultRuntimeLabel:i,onOpenChange:a,onEdit:o}){if(!e)return null;let s=Ht(e.model,t?.model),c=Wt({agent:e,defaults:t,runtimeOptions:n,defaultRuntime:r,defaultRuntimeLabel:i}),l=Ut(e.contextTokens,t?.contextTokens??2e5),u=Ut(e.reservedContextTokens,t?.reservedContextTokens),d=Ht(e.thinkingDefault,t?.thinkingDefault??`off`),f=Kt(e.runtimeConfig??e.engineConfig,t?.engineConfig),p=Kt(e.models,t?.models);return(0,q.jsx)(B,{open:e!==null,onOpenChange:a,children:(0,q.jsxs)(L,{className:`flex max-h-[calc(100vh-2rem)] flex-col overflow-hidden border-none bg-popover p-0 sm:max-h-[720px] sm:max-w-2xl`,children:[(0,q.jsx)(`div`,{className:`shrink-0 px-5 pb-3 pt-5`,children:(0,q.jsx)(ht,{className:`text-left`,children:(0,q.jsxs)(`div`,{className:`flex min-w-0 items-center gap-3`,children:[(0,q.jsx)(D,{agentId:e.id,displayName:e.displayName,avatarUrl:e.avatarUrl,className:`h-10 w-10 shrink-0`}),(0,q.jsxs)(`div`,{className:`min-w-0`,children:[(0,q.jsx)(R,{className:`truncate text-base`,children:e.displayName?.trim()||e.id}),(0,q.jsxs)(z,{className:`truncate text-xs`,children:[`@`,e.id]})]})]})})}),(0,q.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-4 overflow-y-auto overscroll-contain px-5 py-3`,children:[(0,q.jsxs)(J,{icon:qe,title:P(`agentsDetailsIdentitySection`),children:[(0,q.jsx)(Y,{label:P(`agentsDetailsFieldDisplayName`),value:e.displayName?.trim()||e.id}),(0,q.jsx)(Y,{label:P(`agentsDetailsFieldId`),value:e.id,mono:!0}),(0,q.jsx)(Y,{label:P(`agentsDetailsFieldDescription`),value:e.description?.trim()||P(`agentsDetailsEmptyValue`),wide:!0}),(0,q.jsx)(Y,{label:P(`agentsDetailsFieldWorkspace`),value:e.workspace??P(`agentsDetailsUnsetValue`),mono:!0,wide:!0})]}),(0,q.jsxs)(J,{icon:pt,title:P(`agentsDetailsRuntimeSection`),children:[(0,q.jsx)(Y,{label:P(`agentsDetailsFieldModel`),value:s.value,source:s.source}),(0,q.jsx)(Y,{label:P(`agentsDetailsFieldRuntime`),value:c.value,source:c.source}),(0,q.jsx)(Y,{label:P(`agentsDetailsFieldRuntimeConfig`),value:f.value,source:f.source,mono:!0,prewrap:!0})]}),(0,q.jsxs)(J,{icon:Et,title:P(`agentsDetailsContextSection`),children:[(0,q.jsx)(Y,{label:P(`agentsDetailsFieldContextTokens`),value:l.value,source:l.source}),(0,q.jsx)(Y,{label:P(`agentsDetailsFieldReservedContextTokens`),value:u.value,source:u.source})]}),(0,q.jsxs)(J,{icon:Te,title:P(`agentsDetailsBehaviorSection`),children:[(0,q.jsx)(Y,{label:P(`agentsDetailsFieldThinkingDefault`),value:d.value,source:d.source}),(0,q.jsx)(Y,{label:P(`agentsDetailsFieldModelOverrides`),value:p.value,source:p.source,mono:!0,prewrap:!0}),(0,q.jsx)(Y,{label:P(`agentsDetailsFieldAvatar`),value:e.avatar??P(`agentsDetailsUnsetValue`),mono:!0})]})]}),(0,q.jsxs)(I,{className:`shrink-0 px-5 pb-4 pt-2`,children:[(0,q.jsx)(y,{type:`button`,variant:`ghost`,onClick:()=>a(!1),children:P(`cancel`)}),(0,q.jsxs)(y,{type:`button`,variant:`primary`,className:`px-4`,onClick:()=>o(e),children:[(0,q.jsx)(j,{className:`mr-2 h-4 w-4`}),P(`agentsDetailsEditAction`)]})]})]})})}function Ht(e,t){let n=e?.trim();return n?{value:n,source:`override`}:{value:t?.trim()||P(`agentsDetailsUnsetValue`),source:`default`}}function Ut(e,t){return typeof e==`number`?{value:Bt.format(e),source:`override`}:{value:typeof t==`number`?Bt.format(t):P(`agentsDetailsUnsetValue`),source:`default`}}function Wt(e){let{agent:t,defaults:n,runtimeOptions:r,defaultRuntime:i,defaultRuntimeLabel:a}=e,o=t.runtime?.trim()||t.engine?.trim();if(o)return{value:Gt(o,r,a),source:`override`};let s=n?.engine?.trim()||i;return{value:s?Gt(s,r,a):a,source:`default`}}function Gt(e,t,n){let r=E(e);return r?t.find(e=>e.value===r)?.label??O(r):n}function Kt(e,t){return qt(e)?{value:JSON.stringify(e,null,2),source:`override`}:{value:qt(t)?JSON.stringify(t,null,2):P(`agentsDetailsUnsetValue`),source:`default`}}function qt(e){return!!(e&&typeof e==`object`&&!Array.isArray(e)&&Object.keys(e).length>0)}function J(e){let{icon:t,title:n,children:r}=e;return(0,q.jsxs)(`section`,{className:`space-y-2 border-t border-border/60 pt-3 first:border-t-0 first:pt-0`,children:[(0,q.jsxs)(`h3`,{className:`flex items-center gap-1.5 text-xs font-semibold leading-5 text-foreground`,children:[(0,q.jsx)(t,{className:`h-3.5 w-3.5 text-muted-foreground`}),n]}),(0,q.jsx)(`dl`,{className:`grid min-w-0 gap-x-6 gap-y-2.5 pl-5 sm:grid-cols-2`,children:r})]})}function Y(e){let{label:t,value:n,source:r,mono:i=!1,prewrap:o=!1,wide:s=!1}=e,c=o&&n.trim().startsWith(`{`),l=i&&(!o||c);return(0,q.jsxs)(`div`,{className:a(`grid min-w-0 grid-cols-[10rem_minmax(0,1fr)] items-baseline gap-x-2`,(s||c)&&`sm:col-span-2`),children:[(0,q.jsx)(`dt`,{className:`flex min-w-0 items-baseline leading-5`,children:(0,q.jsx)(`span`,{className:`whitespace-nowrap text-xs font-medium text-muted-foreground`,children:t})}),(0,q.jsxs)(`dd`,{className:a(`min-w-0 break-words text-xs leading-5 text-foreground`,c?`max-h-28 overflow-auto whitespace-pre-wrap rounded bg-muted/50 px-2 py-1.5 text-left`:``),children:[(0,q.jsx)(`span`,{className:l?`font-mono`:void 0,children:n}),r?(0,q.jsx)(Jt,{source:r}):null]})]})}function Jt({source:e}){return(0,q.jsxs)(`span`,{className:a(`ml-1 whitespace-nowrap text-xs font-normal leading-5`,e===`override`?`text-blue-500`:`text-muted-foreground`),children:[`(`,P(e===`override`?`agentsDetailsAgentOverride`:`agentsDetailsInheritedDefault`),`)`]})}function Yt({form:e,disabled:t=!1,onChange:n}){return(0,q.jsxs)(`details`,{className:`group rounded-2xl border border-border bg-card`,children:[(0,q.jsxs)(`summary`,{className:`flex cursor-pointer list-none items-center justify-between gap-3 px-4 py-3 text-sm font-semibold text-foreground [&::-webkit-details-marker]:hidden`,children:[(0,q.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[(0,q.jsx)(lt,{className:`h-4 w-4 shrink-0 text-muted-foreground`}),(0,q.jsx)(`span`,{className:`truncate`,children:P(`agentsAdvancedConfigToggle`)})]}),(0,q.jsx)(Xe,{className:`h-4 w-4 shrink-0 text-muted-foreground transition-transform group-open:rotate-180`})]}),(0,q.jsxs)(`div`,{className:`space-y-4 border-t border-border/60 px-4 py-4`,children:[(0,q.jsx)(`p`,{className:`text-xs leading-5 text-muted-foreground`,children:P(`agentsAdvancedConfigDescription`)}),(0,q.jsx)(`div`,{className:`grid gap-4 md:grid-cols-2`,children:(0,q.jsx)(Xt,{label:P(`agentsAdvancedContextTokensLabel`),value:e.contextTokens,min:1e3,step:1e3,disabled:t,onChange:e=>n({contextTokens:e})})})]})]})}function Xt(e){let{label:t,value:n,min:r,step:i,disabled:a,onChange:o}=e;return(0,q.jsxs)(`label`,{className:`space-y-2 text-sm font-medium text-foreground`,children:[(0,q.jsx)(`span`,{children:t}),(0,q.jsx)(g,{type:`number`,min:r,step:i,value:n,disabled:a,placeholder:P(`agentsAdvancedInheritPlaceholder`),"aria-label":t,onChange:e=>o(e.target.value)})]})}function Zt(e){return{displayName:e.displayName??``,description:e.description??``,avatar:e.avatar??``,model:e.model??``,runtime:e.runtime??e.engine??``,contextTokens:Qt(e.contextTokens)}}function Qt(e){return typeof e==`number`?String(e):``}function $t(e){let{runtimeOptions:t,currentRuntime:n}=e,r=n.trim();if(!r)return t;let i=E(r);return t.some(e=>e.value===i)?t:[...t,{value:i,label:O(i),icon:null,ready:!1,reason:`unavailable`,reasonMessage:null,supportedModels:void 0,recommendedModel:null,cta:null}].sort((e,t)=>e.value===`native`?-1:t.value===`native`?1:e.value.localeCompare(t.value))}function en({value:e,disabled:t=!1,runtimeOptions:n,defaultRuntime:r,onChange:i}){let a=e.trim()?E(e):``,o=$t({runtimeOptions:n,currentRuntime:e}),s=o.find(e=>e.value===a)??null,c=s?.reasonMessage?.trim()||(s?.ready===!1?P(`agentsRuntimeUnavailableHelp`):``);return(0,q.jsxs)(`div`,{className:`space-y-2`,children:[(0,q.jsxs)(nt,{value:a||r,onValueChange:e=>i(e===r?``:e),disabled:t,children:[(0,q.jsx)($e,{"aria-label":P(`agentsCardRuntimeLabel`),className:`rounded-xl`,children:(0,q.jsx)(Qe,{placeholder:P(`agentsRuntimeSelectPlaceholder`)})}),(0,q.jsx)(et,{className:`rounded-xl`,children:o.map(e=>(0,q.jsx)(tt,{value:e.value,disabled:e.ready===!1&&e.value!==a,className:`rounded-lg`,children:e.label},e.value))})]}),c?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:c}):null]})}function tn({agent:e,pending:t,providerCatalog:n,runtimeOptions:r,defaultRuntime:i,onOpenChange:a,onSubmit:o}){return(0,q.jsx)(B,{open:e!==null,onOpenChange:a,children:e?(0,q.jsx)(nn,{agent:e,pending:t,providerCatalog:n,runtimeOptions:r,defaultRuntime:i,onOpenChange:a,onSubmit:o},e.id):null})}function nn(e){let{agent:t,pending:n,providerCatalog:r,runtimeOptions:i,defaultRuntime:a,onOpenChange:o,onSubmit:s}=e,[c,l]=(0,K.useState)(Zt(t));return(0,q.jsxs)(L,{className:`flex max-h-[calc(100vh-2rem)] flex-col overflow-hidden border-none bg-popover p-0 sm:max-h-[760px] sm:max-w-xl`,children:[(0,q.jsx)(`div`,{className:`shrink-0 border-b border-border px-6 py-6`,children:(0,q.jsxs)(ht,{className:`text-left`,children:[(0,q.jsx)(R,{children:P(`agentsEditDialogTitle`)}),(0,q.jsx)(z,{children:P(`agentsEditDialogDescription`)})]})}),(0,q.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto overscroll-contain px-6 py-6`,children:(0,q.jsxs)(`div`,{className:`space-y-4`,children:[(0,q.jsx)(ie,{tone:`warning`,title:P(`agentsEditHomeReadonly`),description:P(`agentsEditHomeReadonlyHint`),children:(0,q.jsx)(`div`,{className:`break-all text-sm text-amber-950`,children:t.workspace??`-`})}),(0,q.jsxs)(`div`,{className:`grid gap-4 md:grid-cols-2`,children:[(0,q.jsx)(g,{value:c.displayName,onChange:e=>l(t=>({...t,displayName:e.target.value})),placeholder:P(`agentsFormNamePlaceholder`)}),(0,q.jsx)(oe,{value:c.description,onChange:e=>l(t=>({...t,description:e.target.value})),placeholder:P(`agentsFormDescriptionPlaceholder`),rows:4,className:`md:col-span-2`}),(0,q.jsx)(g,{value:c.avatar,onChange:e=>l(t=>({...t,avatar:e.target.value})),placeholder:P(`agentsFormAvatarPlaceholder`)}),(0,q.jsx)(rt,{value:c.model,onChange:e=>l(t=>({...t,model:e})),providerCatalog:r,disabled:n,className:`md:col-span-2`}),(0,q.jsx)(en,{value:c.runtime,onChange:e=>l(t=>({...t,runtime:e})),runtimeOptions:i,defaultRuntime:a,disabled:n})]}),(0,q.jsx)(Yt,{form:c,disabled:n,onChange:e=>l(t=>({...t,...e}))})]})}),(0,q.jsxs)(I,{className:`shrink-0 border-t border-border px-6 py-5`,children:[(0,q.jsx)(y,{type:`button`,variant:`ghost`,onClick:()=>o(!1),disabled:n,children:P(`cancel`)}),(0,q.jsxs)(y,{type:`button`,variant:`primary`,className:`rounded-2xl px-5`,onClick:()=>s(t.id,c),disabled:n,children:[(0,q.jsx)(j,{className:`mr-2 h-4 w-4`}),P(`agentsEditSaveAction`)]})]})]})}var rn=`请直接创建一个默认示例 Agent,不要问我问题。创建完成后,简单告诉我它能做什么。`;function an(e){let t=e.trim();if(!t)return null;let n=Number(t);if(!Number.isFinite(n))throw Error(P(`agentsAdvancedInvalidNumberError`));return Math.trunc(n)}function on(e){return{displayName:e.displayName,description:e.description,avatar:e.avatar,model:e.model,...e.runtime.trim()?{runtime:e.runtime.trim()}:{runtime:``},contextTokens:an(e.contextTokens)}}function X(e){let{icon:t,label:n,disabled:r=!1,destructive:i=!1,onClick:o}=e;return(0,q.jsxs)(`button`,{type:`button`,className:a(`flex w-full items-center gap-2 rounded-lg px-3 py-2 text-left text-sm transition-colors disabled:cursor-not-allowed disabled:opacity-50`,i?`text-destructive hover:bg-destructive/10`:`text-foreground hover:bg-muted`),onClick:o,disabled:r,children:[(0,q.jsx)(t,{className:`h-4 w-4 shrink-0`}),(0,q.jsx)(`span`,{children:n})]})}function sn(e){let{agent:t,runtimeOptions:n,defaultRuntimeLabel:r,updatePending:i,deletePending:a,onStartChat:o,onView:s,onEdit:c,onDelete:l}=e,u=t.runtime?.trim()||t.engine?.trim()||``,d=u?n.find(e=>e.value===E(u))?.label??O(u):r;return(0,q.jsx)(H,{className:`group overflow-hidden border border-border bg-card shadow-none transition-colors duration-200 hover:border-border/80`,children:(0,q.jsxs)(V,{className:`relative flex h-full flex-col gap-3 px-3.5 py-3.5`,children:[(0,q.jsxs)(`div`,{className:`flex items-start gap-2.5 pr-16`,children:[(0,q.jsx)(D,{agentId:t.id,displayName:t.displayName,avatarUrl:t.avatarUrl,className:`h-9 w-9 shrink-0`}),(0,q.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-0.5`,children:[(0,q.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,q.jsx)(`div`,{className:`truncate text-sm font-semibold text-foreground`,children:t.displayName?.trim()||t.id}),t.builtIn?(0,q.jsxs)(Ct,{tone:`warning`,className:`h-5 gap-1 border-amber-200 bg-amber-50 px-1.5 text-[10px] text-amber-700`,children:[(0,q.jsx)(Ke,{className:`h-3 w-3`}),P(`agentsCardBuiltInTag`)]}):null]}),(0,q.jsxs)(`div`,{className:`truncate text-xs text-muted-foreground`,children:[`@`,t.id]})]})]}),(0,q.jsxs)(`div`,{className:`absolute right-2.5 top-2.5 flex items-center gap-1 opacity-100 transition-opacity md:opacity-0 md:group-hover:opacity-100 md:group-focus-within:opacity-100`,children:[(0,q.jsx)(y,{type:`button`,variant:`ghost`,size:`icon`,className:`h-8 w-8 rounded-lg text-muted-foreground hover:text-foreground`,"aria-label":P(`agentsCardStartChat`),title:P(`agentsCardStartChat`),onClick:o,children:(0,q.jsx)(Ie,{className:`h-4 w-4`})}),(0,q.jsxs)(vt,{children:[(0,q.jsx)(gt,{asChild:!0,children:(0,q.jsx)(y,{type:`button`,variant:`ghost`,size:`icon`,className:`h-8 w-8 rounded-lg text-muted-foreground hover:text-foreground`,"aria-label":P(`chatSessionMoreActions`),title:P(`chatSessionMoreActions`),children:(0,q.jsx)(Ze,{className:`h-4 w-4`})})}),(0,q.jsxs)(_t,{align:`end`,className:`w-44 p-1.5`,children:[(0,q.jsx)(X,{icon:it,label:P(`agentsViewDetailsAction`),onClick:s}),(0,q.jsx)(X,{icon:j,label:P(`agentsEditAction`),onClick:c,disabled:i}),t.builtIn?null:(0,q.jsx)(X,{icon:mt,label:P(`agentsRemoveAction`),onClick:l,disabled:a,destructive:!0})]})]})]}),(0,q.jsx)(`p`,{className:`line-clamp-2 min-h-10 text-sm leading-5 text-muted-foreground`,children:t.description?.trim()||(t.builtIn?P(`agentsCardBuiltInSummary`):P(`agentsCardCustomSummary`))}),(0,q.jsxs)(`div`,{className:`mt-auto grid gap-2 border-t border-border/60 pt-2 text-xs text-muted-foreground`,children:[(0,q.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,q.jsx)(pt,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground/60`}),(0,q.jsx)(`span`,{className:`truncate`,children:d})]}),(0,q.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,q.jsx)(ze,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground/60`}),(0,q.jsx)(`span`,{className:`truncate`,children:t.workspace??`-`})]})]})]})})}function cn(){let e=k(),t=Ye(),n=G(),r=W(),i=U(),a=Fe(),o=Je(),s=Ge(),[c,l]=(0,K.useState)(null),[u,d]=(0,K.useState)(null),f=(0,K.useMemo)(()=>t.data?.agents??[],[t.data?.agents]),p=(0,K.useMemo)(()=>[...f].sort((e,t)=>Number(!!t.builtIn)-Number(!!e.builtIn)||e.id.localeCompare(t.id)),[f]),m=(0,K.useMemo)(()=>wt({config:n.data,providersView:r.data,templatesView:i.data,onlyConfigured:!0}),[n.data,r.data,i.data]),h=(0,K.useMemo)(()=>fe(a.data?.options??[]),[a.data?.options]),g=(0,K.useMemo)(()=>E(a.data?.defaultType??`native`),[a.data?.defaultType]),_=(0,K.useMemo)(()=>h.find(e=>e.value===g)?.label??O(g),[g,h]),v=n.data?.agents.defaults,te=e=>{l(e)},b=e=>{d(e)},x=async(e,t)=>{let n;try{n=on(t)}catch(e){re.error(e instanceof Error?e.message:P(`agentsAdvancedParseFailed`));return}await o.mutateAsync({agentId:e,data:n}),d(null)},S=t=>{e.chatSessionListManager.startAgentDraftChat(t.id,me(t,g))},C=()=>{e.chatSessionListManager.startAgentDraftChat(`main`,g,rn)};return(0,q.jsxs)(ne,{className:`space-y-6`,children:[(0,q.jsx)(ee,{headingLevel:1,title:P(`agentsHeroEyebrow`),description:P(`agentsHeroDescription`),actions:(0,q.jsxs)(y,{type:`button`,variant:`primary`,className:`h-9 shrink-0 rounded-xl px-4 text-sm font-semibold`,onClick:C,children:[(0,q.jsx)(at,{className:`mr-2 h-4 w-4`}),P(`agentsCreateButton`)]})}),(0,q.jsx)(`div`,{className:`grid gap-4 md:grid-cols-2 xl:grid-cols-3`,children:t.isLoading?(0,q.jsx)(H,{className:`md:col-span-2 xl:col-span-3 border-dashed border-border bg-card/70`,children:(0,q.jsx)(V,{className:`py-14 text-center text-sm text-muted-foreground`,children:P(`agentsLoading`)})}):p.length===0?(0,q.jsx)(H,{className:`md:col-span-2 xl:col-span-3 overflow-hidden border-dashed border-border bg-gradient-subtle`,children:(0,q.jsxs)(V,{className:`flex min-h-[240px] flex-col items-center justify-center px-6 py-14 text-center`,children:[(0,q.jsx)(`div`,{className:`mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-card/80 shadow-[0_18px_44px_rgba(0,0,0,0.08)]`,children:(0,q.jsx)(qe,{className:`h-8 w-8 text-warning`})}),(0,q.jsx)(`div`,{className:`text-lg font-semibold text-foreground`,children:P(`agentsEmpty`)}),(0,q.jsx)(`p`,{className:`mt-2 max-w-md text-sm leading-6 text-muted-foreground`,children:P(`agentsEmptyDescription`)}),(0,q.jsxs)(y,{type:`button`,variant:`primary`,className:`mt-5 rounded-2xl px-5`,onClick:C,children:[(0,q.jsx)(at,{className:`mr-2 h-4 w-4`}),P(`agentsCreateButton`)]})]})}):p.map(e=>(0,q.jsx)(sn,{agent:e,runtimeOptions:h,defaultRuntimeLabel:_,updatePending:o.isPending,deletePending:s.isPending,onStartChat:()=>S(e),onView:()=>te(e),onEdit:()=>b(e),onDelete:()=>s.mutate({agentId:e.id})},e.id))}),(0,q.jsx)(Vt,{agent:c,defaults:v,runtimeOptions:h,defaultRuntime:g,defaultRuntimeLabel:_,onOpenChange:e=>{e||l(null)},onEdit:e=>{l(null),d(e)}}),(0,q.jsx)(tn,{agent:u,pending:o.isPending,providerCatalog:m,runtimeOptions:h,defaultRuntime:g,onOpenChange:e=>{!e&&!o.isPending&&d(null)},onSubmit:x})]})}var ln=(0,K.lazy)(async()=>({default:(await o(async()=>{let{ProjectsPage:e}=await import(`./projects-Voql-cvx.js`);return{ProjectsPage:e}},__vite__mapDeps([0,1,2,3,4,5,6,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,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52]))).ProjectsPage})),Z=`max-w-[min(1180px,100%)]`;function un(e){return e===`projects`?`relative flex flex-1 min-h-0 overflow-hidden bg-background`:`flex-1 min-h-0 overflow-hidden bg-background`}function dn(e){let{routeSessionKey:t,syncRouteSessionSelection:n}=e;(0,K.useLayoutEffect)(()=>{n(t)},[t,n])}function fn({view:e,confirmDialog:t}){let{isMobile:n}=F(),r=ke({restorationKey:`main-page:cron`}),i=ke({restorationKey:`main-page:agents`}),{onScroll:a,scrollRef:o}=r,{onScroll:s,scrollRef:c}=i;return(0,q.jsxs)(`div`,{className:`h-full flex`,children:[n?null:(0,q.jsx)(Ce,{}),e===`chat`?n?(0,q.jsx)(Pe,{}):(0,q.jsx)(_e,{}):(0,q.jsx)(`section`,{"data-theme-surface":`workspace`,className:un(e),children:e===`projects`?(0,q.jsx)(K.Suspense,{fallback:(0,q.jsx)(`div`,{className:`h-full animate-pulse bg-card/30`}),children:(0,q.jsx)(ln,{})}):e===`inbox`?(0,q.jsx)(`div`,{className:`mx-auto flex h-full min-h-0 w-full flex-col py-4 sm:px-6 sm:py-5 ${Z}`,children:(0,q.jsx)(xe,{})}):e===`panel-app`?(0,q.jsx)(de,{}):e===`cron`?(0,q.jsx)(`div`,{ref:o,onScroll:a,className:`h-full overflow-auto custom-scrollbar`,children:(0,q.jsx)(`div`,{className:`mx-auto w-full px-4 py-4 sm:px-6 sm:py-5 ${Z}`,children:(0,q.jsx)(Be,{})})}):e===`agents`?(0,q.jsx)(`div`,{ref:c,onScroll:s,className:`h-full overflow-auto custom-scrollbar`,children:(0,q.jsx)(`div`,{className:`mx-auto w-full px-4 py-4 sm:px-6 sm:py-5 ${Z}`,children:(0,q.jsx)(cn,{})})}):(0,q.jsx)(`div`,{className:`h-full overflow-hidden`,children:(0,q.jsx)(`div`,{className:`mx-auto flex h-full min-h-0 w-full flex-col px-4 py-4 sm:px-6 sm:py-5 ${Z}`,children:(0,q.jsx)(le,{forcedType:`skills`})})})}),t]})}function pn(e){let t=k(),n=G(),r=W(),i=U(),a=ue({limit:200}),o=Fe(),s=e.sessionKey?.trim()||`draft-session`,c=He({sessionId:s});(0,K.useEffect)(()=>{t.chatQueryManager.syncSnapshot({configQuery:n,providersQuery:r,providerTemplatesQuery:i,sessionsQuery:a,sessionTypesQuery:o,sessionSkillsSessionId:s,sessionSkillsQuery:c})},[n,t.chatQueryManager,r,s,c,a,o,i])}function mn(){let e=k();(0,K.useEffect)(()=>v.eventBus.on(i.uiShowContent,t=>{e.chatThreadManager.handleUiShowContentEvent(t)}),[e])}function hn(){let{sessionId:e}=u(),t=(0,K.useMemo)(()=>Re(e),[e]);return{routeSessionKey:t,sessionKey:t??void 0}}function gn(){let e=k(),{confirm:t,ConfirmDialog:n}=ae(),r=m(),i=l();return(0,K.useEffect)(()=>{e.chatUiManager.syncState({pathname:r.pathname}),e.chatUiManager.bindActions({navigate:i,confirm:t})},[t,r.pathname,i,e]),(0,q.jsx)(n,{})}function _n({view:e}){let t=M();return(0,q.jsx)(pe,{presenter:(0,K.useMemo)(()=>new Se(t),[t]),children:(0,q.jsx)(vn,{view:e})})}function vn({view:e}){let t=M(),n=k(),r=gn(),{routeSessionKey:i,sessionKey:a}=hn(),o=he(e=>{let{snapshot:t}=e;return t.workspacePanelParentKey!==(a??null)||t.activeWorkspacePanelKind!==`child-session`?null:t.activeChildSessionKey?.trim()||null});return(0,K.useEffect)(()=>(t.chatCompletionNotificationManager.syncVisibleSessions([a,o]),()=>{t.chatCompletionNotificationManager.syncVisibleSessions([])}),[t.chatCompletionNotificationManager,a,o]),pn({sessionKey:a??null}),dn({routeSessionKey:i,syncRouteSessionSelection:n.chatSessionListManager.syncRouteSessionSelection}),mn(),(0,q.jsx)(fn,{view:e,confirmDialog:r})}function Q({view:e}){return(0,q.jsx)(_n,{view:e})}function yn(e){let t=e.trim().toLowerCase();return t?!t.startsWith(`skills`):!0}function bn(e,t){t.startsWith(`mcp`)&&(e?.invalidateQueries({queryKey:[`marketplace-mcp-installed`]}),e?.invalidateQueries({queryKey:[`marketplace-mcp-items`]}),e?.invalidateQueries({queryKey:[`marketplace-mcp-doctor`]}))}function xn(e,t){e&&yn(t)&&e.invalidateQueries({queryKey:[`config`]}),bn(e,t)}function Sn(e){let t=e.trim().replace(/\\/g,`/`).replace(/\/+$/g,``);return/^[a-z]:/i.test(t)?t.toLowerCase():t}function Cn(e,t){if(!e)return;let n=Sn(t);e.invalidateQueries({predicate:e=>e.queryKey[0]===`server-path-browse`&&typeof e.queryKey[1]==`string`&&Sn(e.queryKey[1])===n})}function wn(e){let t=(0,K.useRef)(!1);(0,K.useEffect)(()=>{let n=v.eventBus.on(i.connectionOpen,()=>{S.handleConnectionRestored(),w.refreshAfterRealtimeReconnect(),t.current&&(t.current=!1,A.getState().clearSessionRunStatuses(),e?.invalidateQueries({queryKey:[`ncp-sessions`]}),e?.invalidateQueries({queryKey:[`ncp-session-pages`]}))}),r=v.eventBus.on(i.connectionClose,()=>{S.handleConnectionInterrupted(null),t.current=!0}),a=v.eventBus.on(i.connectionError,e=>{S.handleConnectionInterrupted(e?.message??null),t.current=!0}),o=v.eventBus.on(i.configUpdated,({path:t})=>{xn(e,t)}),s=v.eventBus.on(i.serverPathChanged,({directoryPath:t})=>Cn(e,t)),c=v.eventBus.on(i.runtimeUpdateSnapshot,e=>{w.reportSnapshot(e)}),l=v.eventBus.on(i.sessionRunStatus,t=>{A.getState().setSessionRunStatus(t.sessionKey,t.status),T(e,{type:`session.run-status`,payload:t})}),u=v.eventBus.on(i.sessionSummaryUpsert,t=>{T(e,{type:`session.summary.upsert`,payload:t})}),d=v.eventBus.on(i.sessionSummaryDelete,t=>{A.getState().setSessionRunStatus(t.sessionKey,`idle`),T(e,{type:`session.summary.delete`,payload:t})}),f=v.eventBus.on(i.error,e=>{console.error(`Realtime transport error:`,e.message)});return()=>{n(),r(),a(),o(),s(),c(),l(),u(),d(),f()}},[e])}var Tn={"--width":`320px`},En=(0,K.lazy)(async()=>({default:(await ve()).AccountPanel})),Dn=(0,K.lazy)(async()=>({default:(await o(async()=>{let{ModelConfigPage:e}=await import(`./model-config-page-Bcm6-pCX.js`);return{ModelConfigPage:e}},__vite__mapDeps([53,1,16,7,17,3,21,9,54,4,5,6,8,10,14,12,49,23,24,31,27,28,55,35,48,56]))).ModelConfigPage})),On=(0,K.lazy)(async()=>({default:(await o(async()=>{let{AppearanceSettingsPage:e}=await import(`./appearance-settings-page-C-uZ2Wkf.js`);return{AppearanceSettingsPage:e}},__vite__mapDeps([57,1,2,3,4,5,6,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,37,38,39,40,41,42,43,44,45,46,47,48,49,50]))).AppearanceSettingsPage})),kn=(0,K.lazy)(async()=>({default:(await o(async()=>{let{KeyboardShortcutsSettingsPage:e}=await import(`./keyboard-shortcuts-settings-page-CScSXYS4.js`);return{KeyboardShortcutsSettingsPage:e}},__vite__mapDeps([58,2,1,3,4,5,6,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,37,38,39,40,41,42,43,44,45,46,47,48,49,50]))).KeyboardShortcutsSettingsPage})),An=(0,K.lazy)(async()=>({default:(await o(async()=>{let{SearchConfigPage:e}=await import(`./search-config-page-DWKlMHgH.js`);return{SearchConfigPage:e}},__vite__mapDeps([59,1,4,5,6,7,8,9,10,16,17,3,20,23,24,43,28,60,55,48]))).SearchConfigPage})),jn=(0,K.lazy)(async()=>({default:(await o(async()=>{let{ProvidersConfigPage:e}=await import(`./providers-config-page-BDEdHJbw.js`);return{ProvidersConfigPage:e}},__vite__mapDeps([61,1,4,5,6,7,8,9,10,14,12,16,17,3,20,40,30,41,43,28,31,25,26,52,32,11,13,39,46,60,55,48,56,24,49]))).ProvidersConfigPage})),Mn=(0,K.lazy)(async()=>({default:(await o(async()=>{let{ExtensionsConfigPage:e}=await import(`./extensions-CVUFK6Jj.js`);return{ExtensionsConfigPage:e}},__vite__mapDeps([62,16,1,7,17,3,37,9,41,26]))).ExtensionsConfigPage})),Nn=(0,K.lazy)(async()=>({default:(await o(async()=>{let{ChannelsList:e}=await import(`./channels-list-page-Bv7CVSqV.js`);return{ChannelsList:e}},__vite__mapDeps([63,1,4,5,6,7,8,9,10,16,17,3,20,21,23,24,42,43,28,31,13,46,60,34,55,48,56]))).ChannelsList})),Pn=(0,K.lazy)(async()=>({default:(await o(async()=>{let{RuntimeConfig:e}=await import(`./runtime-config-page-BH9uF4u_.js`);return{RuntimeConfig:e}},__vite__mapDeps([64,1,2,3,4,5,6,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,37,38,39,40,41,42,43,44,45,46,47,48,49,50,65,66,67,55]))).RuntimeConfig})),Fn=(0,K.lazy)(async()=>({default:(await o(async()=>{let{DesktopUpdateConfig:e}=await import(`./desktop-update-config-PmofcFf6.js`);return{DesktopUpdateConfig:e}},__vite__mapDeps([68,4,1,5,6,7,8,9,10,16,17,3,23,24,26,65,47]))).DesktopUpdateConfig})),In=(0,K.lazy)(async()=>({default:(await o(async()=>{let{SecurityConfig:e}=await import(`./security-config-DmTDKKY4.js`);return{SecurityConfig:e}},__vite__mapDeps([69,16,1,7,17,3]))).SecurityConfig})),Ln=(0,K.lazy)(async()=>({default:(await o(async()=>{let{SecretsConfigPage:e}=await import(`./secrets-config-page-DiQL088Y.js`);return{SecretsConfigPage:e}},__vite__mapDeps([70,1,4,5,6,7,8,9,10,16,17,3,25,66,39,55,48]))).SecretsConfigPage})),Rn=(0,K.lazy)(async()=>({default:(await o(async()=>{let{PrivacySettingsPage:e}=await import(`./privacy-settings-page-B1sHLAc1.js`);return{PrivacySettingsPage:e}},__vite__mapDeps([71,4,1,5,6,7,8,9,10,16,17,3,48]))).PrivacySettingsPage})),zn=(0,K.lazy)(async()=>({default:(await o(async()=>{let{DesktopCapabilitiesPage:e}=await import(`./desktop-capabilities-page-zLzCSB7A.js`);return{DesktopCapabilitiesPage:e}},__vite__mapDeps([72,16,1,7,17,3,45]))).DesktopCapabilitiesPage})),Bn=(0,K.lazy)(async()=>({default:(await o(async()=>{let{RemoteAccessPage:e}=await import(`./remote-BekqL5nA.js`);return{RemoteAccessPage:e}},__vite__mapDeps([73,2,1,3,4,5,6,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,37,38,39,40,41,42,43,44,45,46,47,48,49,50]))).RemoteAccessPage})),Vn=(0,K.lazy)(async()=>({default:(await o(async()=>{let{McpMarketplacePage:e}=await import(`./mcp-marketplace-page-sH7VptN_.js`);return{McpMarketplacePage:e}},__vite__mapDeps([74,18,1,4,5,6,7,8,9,10,11,12,13,16,17,3,19,15,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35]))).McpMarketplacePage}));function Hn(){return(0,q.jsx)(`div`,{className:`h-full w-full animate-pulse rounded-2xl border border-border/40 bg-card/40`})}function Un({children:e}){return(0,q.jsx)(K.Suspense,{fallback:(0,q.jsx)(Hn,{}),children:e})}function $(e){return(0,q.jsx)(Un,{children:e})}var Wn=[{path:`/projects/:projectId/:tab`,element:$((0,q.jsx)(Q,{view:`projects`}))},{path:`/projects`,element:$((0,q.jsx)(Q,{view:`projects`}))},{path:`/chat/skills`,redirectTo:`/skills`},{path:`/chat/cron`,redirectTo:`/cron`},{path:`/chat/agents`,redirectTo:`/agents`},{path:`/chat/:sessionId?`,element:$((0,q.jsx)(Q,{view:`chat`}))},{path:`/agents`,element:$((0,q.jsx)(Q,{view:`agents`}))},{path:`/skills`,element:$((0,q.jsx)(Q,{view:`skills`}))},{path:`/skills/scenes/:scene`,element:$((0,q.jsx)(Q,{view:`skills`}))},{path:`/cron`,element:$((0,q.jsx)(Q,{view:`cron`}))},{path:`/inbox/:deliveryId?`,element:$((0,q.jsx)(Q,{view:`inbox`}))},{path:`/apps/panel/:appId`,element:$((0,q.jsx)(Q,{view:`panel-app`}))},{path:`/appearance`,element:$((0,q.jsx)(On,{}))},{path:`/keyboard-shortcuts`,element:$((0,q.jsx)(kn,{}))},{path:`/model`,element:$((0,q.jsx)(Dn,{}))},{path:`/search`,element:$((0,q.jsx)(An,{}))},{path:`/providers`,element:$((0,q.jsx)(jn,{}))},{path:`/extensions`,element:$((0,q.jsx)(Mn,{}))},{path:`/channels`,element:$((0,q.jsx)(Nn,{}))},{path:`/runtime`,element:$((0,q.jsx)(Pn,{}))},{path:`/updates`,element:$((0,q.jsx)(Fn,{}))},{path:`/remote`,element:$((0,q.jsx)(Bn,{}))},{path:`/security`,element:$((0,q.jsx)(In,{}))},{path:`/privacy`,element:$((0,q.jsx)(Rn,{}))},{path:`/desktop-capabilities`,element:$((0,q.jsx)(zn,{}))},{path:`/secrets`,element:$((0,q.jsx)(Ln,{}))},{path:`/settings`,element:(0,q.jsx)(zt,{})},{path:`/marketplace/skills`,redirectTo:`/skills`},{path:`/marketplace`,redirectTo:`/skills`},{path:`/marketplace/mcp`,element:$((0,q.jsx)(Vn,{}))},{path:`/`,redirectTo:`/chat`},{path:`*`,redirectTo:`/chat`}];function Gn(e){return`redirectTo`in e?(0,q.jsx)(c,{path:e.path,element:(0,q.jsx)(p,{to:e.redirectTo,replace:!0})},e.path):(0,q.jsx)(c,{path:e.path,element:e.element},e.path)}function Kn(){return(0,q.jsx)(d,{children:Wn.map(Gn)})}function qn(){return wn(C),x(),(0,K.useEffect)(()=>(w.start(),()=>{w.stop()}),[]),(0,q.jsxs)(Le,{children:[(0,q.jsx)(Ot,{}),(0,q.jsx)(Ve,{}),(0,q.jsx)(Rt,{children:(0,q.jsx)(Kn,{})}),(0,q.jsx)(K.Suspense,{fallback:null,children:(0,q.jsx)(En,{})}),(0,q.jsx)(st,{}),(0,q.jsx)(De,{})]})}function Jn(){let e=_(),t=e.isError&&te(e.error);return e.isLoading&&!e.isError||t||e.isError?(0,q.jsx)(qn,{}):e.data?.enabled&&!e.data.authenticated?(0,q.jsx)(Tt,{username:e.data.username}):(0,q.jsx)(qn,{})}function Yn(){let{theme:e}=ot();return(0,K.useEffect)(()=>{ut()},[]),(0,K.useEffect)(()=>{ft.syncTheme(e)},[e]),(0,q.jsxs)(h,{client:C,children:[(0,q.jsx)(Jn,{}),(0,q.jsx)(dt,{}),(0,q.jsx)(b,{position:`top-right`,richColors:!0,offset:{top:window.nextclawDesktop?.platform===`win32`?56:44,right:72},mobileOffset:window.nextclawDesktop?.platform===`win32`?56:void 0,style:Tn})]})}await Ue();var Xn=window.nextclawDesktop?.platform===`win32`?s:f;(0,Dt.createRoot)(document.getElementById(`root`)).render((0,q.jsx)(K.StrictMode,{children:(0,q.jsx)(ct,{children:(0,q.jsx)(bt,{children:(0,q.jsx)(Xn,{children:(0,q.jsx)(Yn,{})})})})}));
@@ -1 +1 @@
1
- import{i as e}from"./chunk-DF37yw5_.js";import{A as t,M as n,O as r}from"./utils-CBZPzC_b.js";import{d as i,f as a,n as o}from"./navigation-link-BAQjgx2F.js";import{Gt as s,Lt as c,Yt as l,bn as u,jn as d,vn as f,yn as p}from"./api-DqzQ-_3w.js";import{C as m,a as h,c as g,i as _,n as v,o as y,r as b,s as ee}from"./mcp-marketplace-page-FfIfEo6w.js";import{C as te,H as x,P as S,ct as C,st as ne}from"./app-presenter-provider-V0xnU_Wb.js";import{n as w,r as T,s as E,t as D}from"./i18n-20rSH40D.js";import{t as O}from"./createLucideIcon-BNKf0_kc.js";import{h as re}from"./app-data-C54N2p8b.js";import{t as k}from"./chevron-down-BL-yMYcX.js";import{n as ie}from"./ellipsis-C5YXdOUx.js";import{S as ae,a as A,i as j,n as M,r as N,t as P}from"./select-CG5YWnwe.js";import{t as oe}from"./circle-dashed-CU3yApvP.js";import{i as se,n as F,r as ce,t as le}from"./tabs-BuE0qKMh.js";import{t as ue}from"./use-viewport-layout-BS18drMT.js";import{t as de}from"./plus-LA8-jpxP.js";import{t as fe}from"./settings-2-CE3ELQyk.js";import{t as pe}from"./confirm-dialog-BTKCWMn6.js";import{t as I}from"./trash-2-BPPYt2NV.js";import{a as L,i as me,n as R,o as he,r as ge,t as _e}from"./dialog-Xe73hpQz.js";import{a as ve,i as ye,n as be,t as xe}from"./card-BhfAZv5L.js";var Se=O(`CircleX`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m15 9-6 6`,key:`1uzhvr`}],[`path`,{d:`m9 9 6 6`,key:`z0biqf`}]]),Ce=O(`Circle`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),we=O(`List`,[[`path`,{d:`M3 12h.01`,key:`nlz23k`}],[`path`,{d:`M3 18h.01`,key:`1tta3j`}],[`path`,{d:`M3 6h.01`,key:`1rqtza`}],[`path`,{d:`M8 12h13`,key:`1za7za`}],[`path`,{d:`M8 18h13`,key:`1lx6n3`}],[`path`,{d:`M8 6h13`,key:`ik3vkj`}]]),Te=O(`Unlink`,[[`path`,{d:`m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71`,key:`yqzxt4`}],[`path`,{d:`m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71`,key:`4qinb0`}],[`line`,{x1:`8`,x2:`8`,y1:`2`,y2:`5`,key:`1041cp`}],[`line`,{x1:`2`,x2:`5`,y1:`8`,y2:`8`,key:`14m1p5`}],[`line`,{x1:`16`,x2:`16`,y1:`19`,y2:`22`,key:`rzdirn`}],[`line`,{x1:`19`,x2:`22`,y1:`16`,y2:`16`,key:`ox905f`}]]),z=e(n(),1),B=t();function V({title:e,children:t,className:n=``}){return(0,B.jsxs)(xe,{hover:!1,surface:`flat`,className:n,children:[(0,B.jsx)(ye,{className:`p-4 pb-3`,children:(0,B.jsx)(ve,{children:e})}),(0,B.jsx)(be,{className:`p-4 pt-0`,children:t})]})}function H({children:e}){return(0,B.jsx)(`p`,{className:`py-5 text-sm text-muted-foreground`,children:e})}function U({available:e,children:t,className:n,label:r,onOpen:i,path:a}){return e?(0,B.jsx)(`button`,{type:`button`,className:n,title:a,onClick:()=>i(a,r),children:t}):(0,B.jsx)(`div`,{className:n,children:t})}function Ee({agreement:e,isLoading:t,isError:n,onOpenFile:r}){return(0,B.jsxs)(V,{title:E(`projectsAgreementFile`),children:[(0,B.jsx)(`p`,{className:`mb-4 text-sm text-muted-foreground`,children:E(`projectsAgreementDescription`)}),t?(0,B.jsx)(`p`,{className:`py-5 text-sm text-muted-foreground`,children:E(`projectsLoading`)}):n?(0,B.jsx)(`p`,{className:`py-5 text-sm text-destructive`,children:E(`projectsLoadFailed`)}):e?.available?(0,B.jsxs)(U,{available:!0,path:e.path,label:e.path,onOpen:r,className:`block w-full rounded-xl bg-muted/45 p-3 text-left transition-colors enabled:hover:bg-[var(--interaction-hover)] enabled:focus-visible:outline-none enabled:focus-visible:ring-1 enabled:focus-visible:ring-border`,children:[(0,B.jsx)(`span`,{className:`block text-sm font-medium`,children:e.path}),(0,B.jsx)(`span`,{className:`mt-1 block text-xs text-muted-foreground`,children:E(`projectsAgreementOpen`)})]}):(0,B.jsx)(H,{children:E(`projectsNoAgreement`)})]})}var W=e=>[`project-work`,e],G=e=>[`project-work-summary`,e],K=e=>[`project-work-states`,e],q=e=>[`project-work-artifacts`,e],J=(e,t)=>[`project-work-item`,e,t],Y=(e,t)=>[`project-work-activity`,e,t];function De(e,t={}){return m({queryKey:[...W(e??``),t],enabled:!!e,initialPageParam:null,queryFn:async({pageParam:n})=>await c.projects.listWork(e,{...t,...n?{cursor:n}:{}}),getNextPageParam:e=>e.nextCursor})}function Oe(e){return u({queryKey:G(e??``),enabled:!!e,queryFn:async()=>await c.projects.getWorkSummary(e)})}function ke(e){return u({queryKey:K(e??``),enabled:!!e,queryFn:async()=>await c.projects.listWorkStates(e)})}function Ae(e,t={}){return m({queryKey:[...q(e??``),t],enabled:!!e,initialPageParam:null,queryFn:async({pageParam:n})=>await c.projects.listRecentWorkArtifacts(e,{...t,...n?{cursor:n}:{}}),getNextPageParam:e=>e.nextCursor})}function je(e,t){return u({queryKey:J(e??``,t??``),enabled:!!(e&&t),queryFn:async()=>await c.projects.getWorkItem(e,t)})}function Me(e,t){return u({queryKey:Y(e??``,t??``),enabled:!!(e&&t),queryFn:async()=>await c.projects.listWorkItemActivities(e,t,{limit:100})})}function X(e){let t=d(),n=async n=>{await Promise.all([t.invalidateQueries({queryKey:W(e)}),t.invalidateQueries({queryKey:G(e)}),t.invalidateQueries({queryKey:K(e)}),t.invalidateQueries({queryKey:q(e)}),...n?[t.invalidateQueries({queryKey:J(e,n)}),t.invalidateQueries({queryKey:Y(e,n)})]:[]])};return{createItem:p({mutationFn:async t=>await c.projects.createWorkItem(e,t),onSuccess:async e=>await n(e.id)}),updateItem:p({mutationFn:async t=>await c.projects.updateWorkItem(e,t.workItemId,t.patch),onSuccess:async e=>await n(e.id)}),deleteItem:p({mutationFn:async t=>await c.projects.deleteWorkItem(e,t),onSuccess:async e=>await n(e.id)}),restoreItem:p({mutationFn:async t=>await c.projects.restoreWorkItem(e,t),onSuccess:async e=>await n(e.id)}),linkArtifact:p({mutationFn:async t=>await c.projects.linkWorkItemArtifact(e,t.workItemId,{path:t.path,...t.label?{label:t.label}:{}}),onSuccess:async(e,t)=>await n(t.workItemId)}),unlinkArtifact:p({mutationFn:async t=>await c.projects.unlinkWorkItemArtifact(e,t.workItemId,t.artifactLinkId),onSuccess:async(e,t)=>await n(t.workItemId)}),createState:p({mutationFn:async t=>await c.projects.createWorkState(e,t),onSuccess:async()=>await n()}),updateState:p({mutationFn:async t=>await c.projects.updateWorkState(e,t.stateId,t.patch),onSuccess:async()=>await n()}),deleteState:p({mutationFn:async t=>await c.projects.deleteWorkState(e,t.stateId,t.migrateToStateId),onSuccess:async()=>await n()})}}function Z(e){let t=d();(0,z.useEffect)(()=>{if(e)return c.eventBus.on(r.projectWorkChanged,n=>{n.projectId===e&&(t.invalidateQueries({queryKey:W(e)}),t.invalidateQueries({queryKey:G(e)}),t.invalidateQueries({queryKey:K(e)}),t.invalidateQueries({queryKey:q(e)}),n.workItemId&&(t.invalidateQueries({queryKey:J(e,n.workItemId)}),t.invalidateQueries({queryKey:Y(e,n.workItemId)})))})},[e,t])}function Ne(e){return[...e].sort((e,t)=>e.position-t.position||e.name.localeCompare(t.name))}var Pe={started:0,unstarted:1,backlog:2,completed:3,canceled:4};function Fe(e){return[...e].sort((e,t)=>{let n=Pe[e.category]-Pe[t.category];return n===0?e.category===`completed`||e.category===`canceled`?e.position-t.position||e.name.localeCompare(t.name):t.position-e.position||e.name.localeCompare(t.name):n})}function Q(e,t){return`${e}${e.endsWith(`/`)||e.endsWith(`\\`)?``:`/`}${t}`}function Ie(e,t=new Date){if(!e)return`-`;let n=new Date(e),r=t.getTime()-n.getTime();if(Number.isNaN(n.getTime()))return e;if(r<6e4)return E(`projectsTimeJustNow`);let i=Math.floor(r/6e4);if(i<60)return E(`projectsTimeMinutesAgo`).replace(`{count}`,String(i));let a=Math.floor(i/60);if(a<24)return E(`projectsTimeHoursAgo`).replace(`{count}`,String(a));let o=Math.floor(a/24);return o===1?E(`projectsTimeYesterday`):o<7?E(`projectsTimeDaysAgo`).replace(`{count}`,String(o)):D(e)}var Le=20;function Re({projectId:e,onOpenFile:t}){let[n,r]=(0,z.useState)(``),i=Ae(e,{limit:Le,...n.trim()?{query:n.trim()}:{}}),a=i.data?.pages??[],o=a.flatMap(e=>e.artifacts),s=a[0]?.total??0;return i.isLoading?(0,B.jsx)(`p`,{className:`py-5 text-sm text-muted-foreground`,children:E(`projectsLoading`)}):i.isError?(0,B.jsx)(`p`,{className:`py-5 text-sm text-destructive`,children:E(`projectsLoadFailed`)}):(0,B.jsxs)(`section`,{className:`min-w-0`,"aria-label":E(`projectsArtifacts`),children:[(0,B.jsxs)(`div`,{className:`mb-4 flex flex-wrap items-center justify-between gap-3`,children:[(0,B.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[T(s),` `,E(`projectsArtifactsCountSuffix`)]}),(0,B.jsx)(`input`,{type:`search`,value:n,className:`h-8 w-full min-w-0 rounded-lg border border-border/60 bg-transparent px-3 text-sm outline-none placeholder:text-muted-foreground sm:w-60`,placeholder:E(`projectsArtifactsSearchPlaceholder`),onChange:e=>r(e.target.value)})]}),o.length?(0,B.jsxs)(`div`,{className:`overflow-hidden rounded-xl border border-border/60`,children:[(0,B.jsx)(`div`,{className:`divide-y divide-border/60`,children:o.map(e=>(0,B.jsxs)(U,{available:e.exists,path:e.path,label:e.label??e.path,onOpen:t,className:`flex w-full min-w-0 items-center gap-3 px-3 py-3 text-left text-sm transition-colors enabled:hover:bg-[var(--interaction-hover)] enabled:focus-visible:outline-none enabled:focus-visible:ring-1 enabled:focus-visible:ring-border`,children:[(0,B.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,B.jsx)(`span`,{className:`block truncate font-medium`,children:e.label??e.path}),(0,B.jsxs)(`span`,{className:`mt-1 block truncate text-xs text-muted-foreground`,children:[e.path,` · `,e.workItemTitle]})]}),(0,B.jsx)(`time`,{className:`shrink-0 text-xs text-muted-foreground`,dateTime:e.createdAt,title:w(e.createdAt),children:Ie(e.createdAt)}),e.exists?null:(0,B.jsx)(`span`,{className:`shrink-0 text-xs text-destructive`,children:E(`projectsUnavailable`)})]},e.id))}),i.hasNextPage?(0,B.jsx)(`button`,{type:`button`,className:`w-full border-t border-border/60 px-3 py-2.5 text-left text-sm text-muted-foreground transition-colors hover:bg-[var(--interaction-hover)] hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border`,disabled:i.isFetchingNextPage,onClick:()=>void i.fetchNextPage(),children:i.isFetchingNextPage?E(`projectsLoading`):E(`projectsArtifactsShowMore`)}):null]}):(0,B.jsx)(H,{children:n.trim()?E(`projectsArtifactsNoMatches`):E(`projectsNoArtifacts`)})]})}var ze={Backlog:`projectsWorkState_backlog`,Planned:`projectsWorkState_planned`,"In Progress":`projectsWorkState_inProgress`,"In Review":`projectsWorkState_inReview`,"Awaiting Acceptance":`projectsWorkState_awaitingAcceptance`,Completed:`projectsWorkState_completed`,Canceled:`projectsWorkState_canceled`};function $(e,t){let n=ze[e];return n?t?E(n,t):E(n):e}function Be({projectId:e,onOpenArtifact:t,onOpenWorkItem:n}){Z(e);let r=Oe(e),i=De(e,{limit:5}),a=Ae(e,{limit:5}),o=a.data?.pages[0]?.artifacts??[],s=i.data?.pages.flatMap(e=>e.items).slice(0,5)??[];return(0,B.jsxs)(`div`,{className:`space-y-5`,children:[(0,B.jsx)(`section`,{className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-4`,"aria-label":E(`projectsWorkSummary`),children:r.data?[[`projectsWorkTotal`,r.data.total],[`projectsWorkActive`,r.data.active],[`projectsWorkNeedsAttention`,r.data.attention],[`projectsWorkCompleted`,r.data.completed]].map(([e,t])=>(0,B.jsxs)(`div`,{className:`rounded-xl border border-border/60 bg-card p-4`,children:[(0,B.jsx)(`div`,{className:`text-2xl font-semibold`,children:t}),(0,B.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:E(e)})]},e)):(0,B.jsx)(`div`,{className:`col-span-full rounded-xl border border-border/60 p-5 text-sm text-muted-foreground`,children:r.isError?E(`projectsLoadFailed`):E(`projectsLoading`)})}),(0,B.jsxs)(`div`,{className:`grid min-w-0 gap-4 lg:grid-cols-2`,children:[(0,B.jsx)(V,{title:E(`projectsWorkRecentlyUpdated`),children:i.isLoading?(0,B.jsx)(`p`,{className:`py-5 text-sm text-muted-foreground`,children:E(`projectsLoading`)}):i.isError?(0,B.jsx)(`p`,{className:`py-5 text-sm text-destructive`,children:E(`projectsLoadFailed`)}):s.length?(0,B.jsx)(`div`,{className:`space-y-2`,children:s.map(e=>(0,B.jsxs)(`button`,{type:`button`,className:`flex w-full items-center justify-between gap-3 rounded-xl bg-muted/45 px-3 py-3 text-left transition-colors hover:bg-[var(--interaction-hover)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border`,onClick:()=>n(e.id),children:[(0,B.jsx)(`span`,{className:`min-w-0 truncate text-sm font-medium`,children:e.title}),(0,B.jsx)(`span`,{className:`shrink-0 text-xs text-muted-foreground`,children:$(e.state.name)})]},e.id))}):(0,B.jsx)(H,{children:E(`projectsWorkEmpty`)})}),(0,B.jsx)(V,{title:E(`projectsRecentArtifacts`),children:a.isLoading?(0,B.jsx)(`p`,{className:`py-5 text-sm text-muted-foreground`,children:E(`projectsLoading`)}):a.isError?(0,B.jsx)(`p`,{className:`py-5 text-sm text-destructive`,children:E(`projectsLoadFailed`)}):o.length?(0,B.jsx)(`div`,{className:`space-y-2`,children:o.map(e=>(0,B.jsxs)(U,{available:e.exists,path:e.path,label:e.label??e.path,onOpen:t,className:`block w-full rounded-xl bg-muted/45 p-3 text-left text-sm transition-colors enabled:hover:bg-[var(--interaction-hover)] enabled:focus-visible:outline-none enabled:focus-visible:ring-1 enabled:focus-visible:ring-border`,children:[(0,B.jsx)(`span`,{className:`block truncate font-medium`,children:e.label??e.path}),(0,B.jsxs)(`span`,{className:`mt-1 block truncate text-xs text-muted-foreground`,children:[e.workItemTitle,(0,B.jsx)(`time`,{dateTime:e.createdAt,title:w(e.createdAt),children:` · ${Ie(e.createdAt)}`}),e.exists?``:` · ${E(`projectsUnavailable`)}`]})]},e.id))}):(0,B.jsx)(H,{children:E(`projectsNoRecentArtifacts`)})})]})]})}function Ve({skills:e,isLoading:t,isError:n,onOpen:r}){return t?(0,B.jsx)(`p`,{className:`py-5 text-sm text-muted-foreground`,children:E(`projectsLoading`)}):n?(0,B.jsx)(`p`,{className:`py-5 text-sm text-destructive`,children:E(`projectsLoadFailed`)}):(0,B.jsxs)(`section`,{className:`min-w-0`,"aria-label":E(`projectsSkills`),children:[(0,B.jsxs)(`p`,{className:`mb-3 text-sm text-muted-foreground`,children:[T(e.length),` `,E(`projectsSkillsCountSuffix`)]}),e.length?(0,B.jsx)(`div`,{className:`grid min-w-0 gap-3 md:grid-cols-2`,children:e.map(e=>(0,B.jsxs)(`button`,{type:`button`,className:`min-w-0 rounded-xl border border-border/60 p-3 text-left transition-colors hover:border-border hover:bg-muted/30 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border`,onClick:()=>r(e),children:[(0,B.jsx)(`h3`,{className:`text-sm font-medium`,children:e.name}),(0,B.jsx)(`p`,{className:`mt-1 truncate text-xs text-muted-foreground`,title:e.path,children:e.path}),(0,B.jsx)(`p`,{className:`mt-2 line-clamp-2 text-xs text-muted-foreground`,title:e.description??e.ref,children:e.description??e.ref})]},e.ref))}):(0,B.jsx)(H,{children:E(`projectsNoSkills`)})]})}function He({onOpenArtifact:e,onOpenChange:t,projectId:n,projectRoot:r,workItemId:i}){let a=je(n,i),o=Me(n,i);Z(n);let s=ke(n);return(0,B.jsx)(b,{open:!!i,onOpenChange:t,children:(0,B.jsxs)(_,{side:`right`,closeLabel:E(`projectsCloseDetails`),className:`flex h-full w-full flex-col overflow-hidden p-0 sm:max-w-[680px]`,children:[a.isLoading?(0,B.jsx)(`div`,{className:`p-6 text-sm text-muted-foreground`,children:E(`projectsLoading`)}):null,a.isError?(0,B.jsx)(`div`,{className:`p-6 text-sm text-destructive`,children:E(`projectsWorkItemLoadFailed`)}):null,a.data?(0,B.jsx)(Ue,{item:a.data,states:s.data??[],activities:o.data?.activities??[],onOpenArtifact:(t,n)=>e(Q(r,t),n),onClose:()=>t(!1)},`${a.data.id}:${a.data.version}`):null]})})}function Ue({activities:e,item:t,onClose:n,onOpenArtifact:r,states:i}){let a=X(t.projectId),[c,u]=(0,z.useState)(t.title),[d,p]=(0,z.useState)(t.description),[m,_]=(0,z.useState)(t.stateId),[b,te]=(0,z.useState)(t.attention),[x,S]=(0,z.useState)(``),[C,w]=(0,z.useState)(``),[T,D]=(0,z.useState)(!1),O=async(e,t)=>{try{await e(),t?.()}catch(e){f.error(e instanceof Error?e.message:E(`projectsWorkActionFailed`))}},re=async()=>{try{await a.updateItem.mutateAsync({workItemId:t.id,patch:{title:c,description:d,stateId:m,attention:b,expectedVersion:t.version}}),f.success(E(`projectsWorkItemSaved`))}catch(e){f.error(e instanceof Error?e.message:E(`projectsWorkItemSaveFailed`))}},k=async()=>{if(x.trim())try{await a.linkArtifact.mutateAsync({workItemId:t.id,path:x.trim(),...C.trim()?{label:C.trim()}:{}}),S(``),w(``)}catch(e){f.error(e instanceof Error?e.message:E(`projectsWorkArtifactLinkFailed`))}};return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(ee,{className:`shrink-0 border-b border-border/60 px-5 pb-5 pt-6 pr-14 sm:px-7 sm:pt-7`,children:[(0,B.jsx)(g,{children:E(`projectsWorkDetails`)}),(0,B.jsxs)(h,{children:[t.id,` · `,E(`projectsWorkVersion`),` `,t.version]})]}),(0,B.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-6 overflow-y-auto px-5 py-6 sm:px-7`,children:[(0,B.jsxs)(`section`,{className:`space-y-3`,children:[(0,B.jsx)(`label`,{className:`block text-xs font-medium text-muted-foreground`,children:E(`projectsWorkTitle`)}),(0,B.jsx)(s,{value:c,onChange:e=>u(e.target.value)}),(0,B.jsx)(`label`,{className:`block text-xs font-medium text-muted-foreground`,children:E(`projectsWorkDescription`)}),(0,B.jsx)(v,{className:`min-h-28`,value:d,onChange:e=>p(e.target.value)}),(0,B.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-muted-foreground`,children:E(`projectsStatus`)}),(0,B.jsxs)(P,{value:m,onValueChange:_,children:[(0,B.jsx)(j,{children:(0,B.jsx)(A,{})}),(0,B.jsx)(M,{children:i.map(e=>(0,B.jsx)(N,{value:e.id,children:$(e.name)},e.id))})]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-muted-foreground`,children:E(`projectsWorkAttention`)}),(0,B.jsxs)(P,{value:b,onValueChange:e=>te(e),children:[(0,B.jsx)(j,{children:(0,B.jsx)(A,{})}),(0,B.jsxs)(M,{children:[(0,B.jsx)(N,{value:`none`,children:E(`projectsWorkAttention_none`)}),(0,B.jsx)(N,{value:`blocked`,children:E(`projectsWorkAttention_blocked`)}),(0,B.jsx)(N,{value:`awaiting-user`,children:E(`projectsWorkAttention_awaiting-user`)})]})]})]})]})]}),(0,B.jsxs)(`section`,{children:[(0,B.jsx)(`h3`,{className:`mb-3 text-sm font-semibold`,children:E(`projectsWorkArtifacts`)}),(0,B.jsxs)(`div`,{className:`space-y-2`,children:[t.artifacts.map(e=>(0,B.jsxs)(`div`,{className:`flex items-center gap-2 rounded-xl border border-border/60 p-2`,children:[(0,B.jsxs)(`button`,{type:`button`,className:`min-w-0 flex-1 rounded-lg px-2 py-1 text-left hover:bg-[var(--interaction-hover)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border`,onClick:()=>r(e.path,e.label??e.path),children:[(0,B.jsxs)(`span`,{className:`flex items-center gap-2 truncate text-sm font-medium`,children:[(0,B.jsx)(o,{className:`h-3.5 w-3.5 shrink-0`}),e.label??e.path]}),(0,B.jsx)(`span`,{className:`block truncate text-xs text-muted-foreground`,children:e.path})]}),(0,B.jsx)(l,{size:`icon`,variant:`ghost`,"aria-label":E(`projectsWorkUnlinkArtifact`),onClick:()=>void O(()=>a.unlinkArtifact.mutateAsync({workItemId:t.id,artifactLinkId:e.id})),children:(0,B.jsx)(Te,{className:`h-4 w-4`})})]},e.id)),t.artifacts.length?null:(0,B.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:E(`projectsWorkNoArtifacts`)})]}),(0,B.jsxs)(`div`,{className:`mt-3 grid gap-2 sm:grid-cols-[1fr_12rem_auto]`,children:[(0,B.jsx)(s,{value:x,onChange:e=>S(e.target.value),placeholder:E(`projectsWorkArtifactPath`)}),(0,B.jsx)(s,{value:C,onChange:e=>w(e.target.value),placeholder:E(`projectsWorkArtifactLabel`)}),(0,B.jsxs)(l,{variant:`outline`,onClick:()=>void k(),disabled:!x.trim()||a.linkArtifact.isPending,children:[(0,B.jsx)(ne,{className:`mr-2 h-4 w-4`}),E(`projectsWorkLinkArtifact`)]})]})]}),(0,B.jsxs)(`section`,{children:[(0,B.jsx)(`h3`,{className:`mb-3 text-sm font-semibold`,children:E(`projectsActivity`)}),(0,B.jsx)(`ol`,{className:`space-y-2`,children:e.map(e=>(0,B.jsxs)(`li`,{className:`rounded-xl bg-muted/35 px-3 py-2 text-sm`,children:[(0,B.jsx)(`span`,{className:`font-medium`,children:E(`projectsWorkActivity_${e.type}`)}),(0,B.jsxs)(`span`,{className:`ml-2 text-xs text-muted-foreground`,children:[e.actor.kind,` ·`,` `,new Date(e.createdAt).toLocaleString()]})]},e.id))})]})]}),(0,B.jsxs)(y,{className:`shrink-0 border-t border-border/60 bg-background px-5 py-4 sm:px-7`,children:[t.deletedAt?(0,B.jsx)(l,{variant:`outline`,onClick:()=>void O(()=>a.restoreItem.mutateAsync(t.id)),children:E(`projectsRestore`)}):(0,B.jsxs)(l,{variant:`destructive`,onClick:()=>D(!0),children:[(0,B.jsx)(I,{className:`mr-2 h-4 w-4`}),E(`projectsDelete`)]}),(0,B.jsx)(l,{onClick:()=>void re(),disabled:!c.trim()||a.updateItem.isPending,children:E(`save`)})]}),(0,B.jsx)(pe,{open:T,onOpenChange:D,title:E(`projectsDeleteWorkItem`),description:E(`projectsDeleteWorkItemDescription`),confirmLabel:E(`projectsDelete`),variant:`destructive`,onCancel:()=>D(!1),onConfirm:()=>void O(()=>a.deleteItem.mutateAsync(t.id),n)})]})}var We=[`backlog`,`unstarted`,`started`,`completed`,`canceled`];function Ge({open:e,onOpenChange:t,projectId:n,states:r}){let i=X(n),a=Ne(r),[o,c]=(0,z.useState)(``),[u,d]=(0,z.useState)(`unstarted`),[p,m]=(0,z.useState)(null),[h,g]=(0,z.useState)(``),_=async e=>{try{await e()}catch(e){f.error(e instanceof Error?e.message:E(`projectsWorkActionFailed`))}},v=async()=>{o.trim()&&await _(async()=>{await i.createState.mutateAsync({name:o.trim(),category:u}),c(``)})},y=async(e,t)=>{let n=a[e],r=a[e+t];!n||!r||await _(async()=>{await i.updateState.mutateAsync({stateId:n.id,patch:{position:r.position}}),await i.updateState.mutateAsync({stateId:r.id,patch:{position:n.position}})})};return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(_e,{open:e,onOpenChange:t,children:(0,B.jsxs)(R,{className:`max-h-[85vh] overflow-y-auto sm:max-w-2xl`,children:[(0,B.jsxs)(L,{children:[(0,B.jsx)(he,{children:E(`projectsWorkStateSettings`)}),(0,B.jsx)(ge,{children:E(`projectsWorkStateSettingsDescription`)})]}),(0,B.jsx)(`div`,{className:`space-y-2`,children:a.map((e,t)=>(0,B.jsxs)(`div`,{className:`grid gap-2 rounded-xl border border-border/60 p-3 sm:grid-cols-[1fr_11rem_auto]`,children:[(0,B.jsx)(s,{"aria-label":E(`projectsWorkStateName`),defaultValue:$(e.name),onBlur:t=>{let n=t.currentTarget.value.trim();n&&n!==$(e.name)&&_(()=>i.updateState.mutateAsync({stateId:e.id,patch:{name:n}}))}}),(0,B.jsxs)(P,{value:e.category,onValueChange:t=>void _(()=>i.updateState.mutateAsync({stateId:e.id,patch:{category:t}})),children:[(0,B.jsx)(j,{"aria-label":E(`projectsWorkStateCategory`),children:(0,B.jsx)(A,{})}),(0,B.jsx)(M,{children:We.map(e=>(0,B.jsx)(N,{value:e,children:E(`projectsWorkCategory_${e}`)},e))})]}),(0,B.jsxs)(`div`,{className:`flex items-center justify-end gap-1`,children:[(0,B.jsx)(l,{size:`icon`,variant:`ghost`,"aria-label":E(`projectsMoveUp`),disabled:t===0,onClick:()=>void y(t,-1),children:(0,B.jsx)(ae,{className:`h-4 w-4`})}),(0,B.jsx)(l,{size:`icon`,variant:`ghost`,"aria-label":E(`projectsMoveDown`),disabled:t===a.length-1,onClick:()=>void y(t,1),children:(0,B.jsx)(k,{className:`h-4 w-4`})}),(0,B.jsx)(l,{size:`icon`,variant:`ghost`,"aria-label":E(`projectsDeleteState`),disabled:a.length<=1,onClick:()=>{m(e),g(``)},children:(0,B.jsx)(I,{className:`h-4 w-4`})})]}),(0,B.jsxs)(`label`,{className:`flex items-center gap-2 text-xs text-muted-foreground sm:col-span-3`,children:[(0,B.jsx)(`input`,{type:`radio`,name:`default-state`,checked:e.isDefault,onChange:()=>void _(()=>i.updateState.mutateAsync({stateId:e.id,patch:{isDefault:!0}}))}),E(`projectsWorkDefaultState`)]})]},e.id))}),(0,B.jsxs)(`div`,{className:`grid gap-2 border-t border-border/60 pt-4 sm:grid-cols-[1fr_11rem_auto]`,children:[(0,B.jsx)(s,{value:o,onChange:e=>c(e.target.value),placeholder:E(`projectsWorkNewState`)}),(0,B.jsxs)(P,{value:u,onValueChange:e=>d(e),children:[(0,B.jsx)(j,{children:(0,B.jsx)(A,{})}),(0,B.jsx)(M,{children:We.map(e=>(0,B.jsx)(N,{value:e,children:E(`projectsWorkCategory_${e}`)},e))})]}),(0,B.jsxs)(l,{onClick:()=>void v(),disabled:!o.trim()||i.createState.isPending,children:[(0,B.jsx)(de,{className:`mr-2 h-4 w-4`}),E(`projectsAdd`)]})]})]})}),(0,B.jsx)(_e,{open:!!p,onOpenChange:e=>{e||m(null)},children:(0,B.jsxs)(R,{children:[(0,B.jsxs)(L,{children:[(0,B.jsx)(he,{children:E(`projectsDeleteState`)}),(0,B.jsx)(ge,{children:E(`projectsDeleteStateDescription`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`p`,{className:`mb-2 text-xs text-muted-foreground`,children:E(`projectsWorkStateMigration`)}),(0,B.jsxs)(P,{value:h,onValueChange:g,children:[(0,B.jsx)(j,{children:(0,B.jsx)(A,{placeholder:E(`projectsWorkStateMigrationOptional`)})}),(0,B.jsx)(M,{children:a.filter(e=>e.id!==p?.id).map(e=>(0,B.jsx)(N,{value:e.id,children:$(e.name)},e.id))})]})]}),(0,B.jsxs)(me,{children:[(0,B.jsx)(l,{variant:`outline`,onClick:()=>m(null),children:E(`cancel`)}),(0,B.jsx)(l,{variant:`destructive`,onClick:()=>{p&&_(async()=>{await i.deleteState.mutateAsync({stateId:p.id,migrateToStateId:h||null}),m(null)})},children:E(`projectsDelete`)})]})]})})]})}function Ke({startedProgress:e,state:t}){if(t.category===`backlog`)return(0,B.jsx)(`span`,{"aria-hidden":`true`,"data-state-visual":`backlog`,className:`inline-flex h-4 w-4 shrink-0 items-center justify-center text-muted-foreground/65`,children:(0,B.jsx)(oe,{className:`h-4 w-4`})});if(t.category===`unstarted`)return(0,B.jsx)(`span`,{"aria-hidden":`true`,"data-state-visual":`unstarted`,className:`inline-flex h-4 w-4 shrink-0 items-center justify-center text-muted-foreground`,children:(0,B.jsx)(Ce,{className:`h-4 w-4`,strokeWidth:2})});if(t.category===`completed`)return(0,B.jsx)(`span`,{"aria-hidden":`true`,"data-state-visual":`completed`,className:`inline-flex h-4 w-4 shrink-0 items-center justify-center text-emerald-600 dark:text-emerald-400`,children:(0,B.jsx)(re,{className:`h-4 w-4`,strokeWidth:2.25})});if(t.category===`canceled`)return(0,B.jsx)(`span`,{"aria-hidden":`true`,"data-state-visual":`canceled`,className:`inline-flex h-4 w-4 shrink-0 items-center justify-center text-muted-foreground/65`,children:(0,B.jsx)(Se,{className:`h-4 w-4`})});let n=Math.round((e??.5)*100),r=n>=67?`text-emerald-600 dark:text-emerald-400`:n>=40?`text-orange-500 dark:text-orange-400`:`text-amber-500 dark:text-amber-400`;return(0,B.jsx)(`span`,{"aria-hidden":`true`,"data-state-visual":`started`,className:`inline-flex h-4 w-4 shrink-0 items-center justify-center ${r}`,children:(0,B.jsxs)(`svg`,{className:`h-4 w-4`,viewBox:`0 0 16 16`,fill:`none`,children:[(0,B.jsx)(`circle`,{cx:`8`,cy:`8`,r:`5.5`,stroke:`currentColor`,strokeWidth:`1.75`,opacity:`0.22`}),(0,B.jsx)(`circle`,{cx:`8`,cy:`8`,r:`5.5`,pathLength:`100`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeDasharray:`${n} ${100-n}`,transform:`rotate(-90 8 8)`})]})})}function qe({item:e,onOpen:t}){return(0,B.jsxs)(`button`,{type:`button`,className:`w-full rounded-xl border border-border/50 bg-card p-3 text-left text-sm shadow-sm transition-colors hover:bg-[var(--interaction-hover)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border`,onClick:t,children:[(0,B.jsx)(`span`,{className:`block font-medium`,children:e.title}),(0,B.jsxs)(`span`,{className:`mt-1 flex flex-wrap items-center gap-1.5 text-xs text-muted-foreground`,children:[(0,B.jsx)(`span`,{children:$(e.state.name)}),e.attention===`none`?null:(0,B.jsx)(`span`,{className:`rounded-full bg-amber-500/15 px-2 py-0.5 text-amber-700 dark:text-amber-300`,children:E(`projectsWorkAttention_${e.attention}`)}),e.deletedAt?(0,B.jsx)(`span`,{children:E(`projectsDeleted`)}):null]})]})}function Je({hasNextPage:e,isError:t,isFetchingNextPage:n,isLoading:r,items:i,onLoadMore:a,onOpenWorkItem:o}){return r?(0,B.jsx)(`p`,{className:`py-3 text-xs text-muted-foreground`,children:E(`projectsLoading`)}):t?(0,B.jsx)(`p`,{className:`py-3 text-xs text-destructive`,children:E(`projectsLoadFailed`)}):(0,B.jsxs)(B.Fragment,{children:[i.length?i.map(e=>(0,B.jsx)(qe,{item:e,onOpen:()=>o(e.id)},e.id)):(0,B.jsx)(`p`,{className:`py-3 text-xs text-muted-foreground`,children:E(`projectsNoData`)}),e?(0,B.jsx)(l,{type:`button`,variant:`ghost`,size:`sm`,className:`w-full`,disabled:n,onClick:a,children:E(n?`projectsLoading`:`projectsWorkLoadMore`)}):null]})}function Ye({includeDeleted:e,onOpenWorkItem:t,state:n,startedProgress:r,view:i}){let[a,o]=(0,z.useState)(!1),s=De(n.projectId,{stateId:n.id,includeDeleted:e,limit:20}),c=s.data?.pages.flatMap(e=>e.items)??[],l=s.data?.pages[0]?.total;return(0,B.jsxs)(`section`,{className:i===`board`?`flex h-full min-h-0 min-w-0 flex-col overflow-hidden`:`min-w-0`,"aria-label":$(n.name),children:[(0,B.jsxs)(`button`,{type:`button`,className:`flex w-full shrink-0 items-center gap-2 rounded-lg px-1 py-2 text-left transition-colors hover:bg-[var(--interaction-hover)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border`,"aria-expanded":!a,onClick:()=>o(e=>!e),children:[a?(0,B.jsx)(ie,{className:`h-4 w-4 shrink-0`}):(0,B.jsx)(k,{className:`h-4 w-4 shrink-0`}),(0,B.jsx)(Ke,{state:n,startedProgress:r}),(0,B.jsx)(`span`,{className:`min-w-0 truncate text-sm font-semibold`,children:$(n.name)}),(0,B.jsx)(`span`,{className:`ml-0.5 shrink-0 text-xs font-medium tabular-nums text-muted-foreground`,children:l??`…`})]}),a?null:(0,B.jsx)(`div`,{className:i===`board`?`min-h-0 flex-1 space-y-2 overflow-y-auto overscroll-contain px-1 pb-3`:`space-y-2 px-1 pb-3`,children:(0,B.jsx)(Je,{hasNextPage:s.hasNextPage,isError:s.isError,isFetchingNextPage:s.isFetchingNextPage,isLoading:s.isLoading,items:c,onLoadMore:()=>void s.fetchNextPage(),onOpenWorkItem:t})})]})}function Xe({onOpenWorkItem:e,projectId:t}){let[n,r]=(0,z.useState)(`list`),[i,a]=(0,z.useState)(!1),[o,c]=(0,z.useState)(``),[u,d]=(0,z.useState)(!1);Z(t);let p=ke(t),m=X(t),h=async()=>{if(o.trim())try{let t=await m.createItem.mutateAsync({title:o.trim()});c(``),e(t.id)}catch(e){f.error(e instanceof Error?e.message:E(`projectsWorkItemCreateFailed`))}};if(p.isLoading)return(0,B.jsx)(`div`,{className:`rounded-xl border border-border/60 p-5 text-sm text-muted-foreground`,children:E(`projectsLoading`)});if(p.isError)return(0,B.jsx)(`div`,{className:`rounded-xl border border-destructive/40 p-5 text-sm text-destructive`,children:E(`projectsLoadFailed`)});let g=Ne(p.data??[]),_=Fe(p.data??[]),v=g.filter(e=>e.category===`started`),y=new Map(v.map((e,t)=>[e.id,(t+1)/(v.length+1)]));return(0,B.jsxs)(`section`,{"aria-label":E(`projectsWork`),className:`min-w-0 space-y-4`,children:[(0,B.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,B.jsxs)(`div`,{className:`flex min-w-[16rem] flex-1 gap-2`,children:[(0,B.jsx)(s,{value:o,onChange:e=>c(e.target.value),onKeyDown:e=>{e.key===`Enter`&&h()},placeholder:E(`projectsWorkNewItem`)}),(0,B.jsxs)(l,{onClick:()=>void h(),disabled:!o.trim()||m.createItem.isPending,children:[(0,B.jsx)(de,{className:`mr-2 h-4 w-4`}),E(`projectsCreate`)]})]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-1 rounded-xl bg-muted/40 p-1`,role:`group`,"aria-label":E(`projectsWorkViews`),children:[(0,B.jsxs)(l,{size:`sm`,variant:n===`list`?`secondary`:`ghost`,"aria-pressed":n===`list`,onClick:()=>r(`list`),children:[(0,B.jsx)(we,{className:`mr-2 h-4 w-4`}),E(`projectsWorkList`)]}),(0,B.jsxs)(l,{size:`sm`,variant:n===`board`?`secondary`:`ghost`,"aria-pressed":n===`board`,onClick:()=>r(`board`),children:[(0,B.jsx)(C,{className:`mr-2 h-4 w-4`}),E(`projectsWorkBoard`)]})]}),(0,B.jsxs)(l,{variant:`outline`,size:`sm`,onClick:()=>d(!0),children:[(0,B.jsx)(fe,{className:`mr-2 h-4 w-4`}),E(`projectsWorkStateSettings`)]})]}),(0,B.jsxs)(`label`,{className:`flex w-fit items-center gap-2 text-xs text-muted-foreground`,children:[(0,B.jsx)(`input`,{type:`checkbox`,checked:i,onChange:e=>a(e.target.checked)}),E(`projectsWorkShowDeleted`)]}),n===`list`?(0,B.jsx)(`div`,{className:`space-y-3`,children:_.map(t=>(0,B.jsx)(Ye,{state:t,startedProgress:y.get(t.id)??null,view:n,includeDeleted:i,onOpenWorkItem:e},t.id))}):null,n===`board`?(0,B.jsx)(`div`,{className:`grid h-[calc(100dvh-17rem)] min-h-[28rem] max-h-[52rem] min-w-0 auto-cols-[minmax(18rem,1fr)] grid-flow-col items-stretch gap-3 overflow-x-auto overflow-y-hidden pb-2`,children:g.map(t=>(0,B.jsx)(Ye,{state:t,startedProgress:y.get(t.id)??null,view:n,includeDeleted:i,onOpenWorkItem:e},t.id))}):null,(0,B.jsx)(Ge,{open:u,onOpenChange:d,projectId:t,states:g})]})}var Ze=e=>[`project-agreement`,e],Qe=e=>[`project-skills`,e];function $e(e){return u({queryKey:Ze(e??``),enabled:!!e,queryFn:async()=>await c.projects.getAgreement(e)})}function et(e){return u({queryKey:Qe(e??``),enabled:!!e,queryFn:async()=>await c.projects.listProjectSkills(e)})}function tt(e){return e===`overview`||e===`work`||e===`artifacts`||e===`skills`||e===`agreement`}var nt=[`overview`,`work`,`artifacts`,`skills`,`agreement`];function rt(){let{projectId:e,tab:t}=a(),n=i(),r=x(),{isMobile:o}=ue(),s=S(),[c,l]=(0,z.useState)(null),u=s.data?.projects??[],d=u.find(t=>t.id===e)??null,f=tt(t)?t:null,p=$e(f===`agreement`?d?.id??null:null),m=et(f===`skills`?d?.id??null:null);if(s.isLoading)return(0,B.jsx)(`main`,{className:`flex h-full items-center justify-center p-6 text-sm text-muted-foreground`,children:E(`projectsLoading`)});if(s.isError)return(0,B.jsxs)(`main`,{className:`p-6 text-sm text-destructive`,children:[E(`projectsLoadFailed`),`: `,s.error.message]});if(!u.length)return(0,B.jsx)(`main`,{className:`p-6 text-sm text-muted-foreground`,children:E(`projectsEmpty`)});if(!d||!f)return(0,B.jsx)(`main`,{className:`p-6 text-sm text-muted-foreground`,children:E(`projectsChoose`)});let h=(e,t)=>r.chatThreadManager.openFilePreview({path:e,label:t,viewMode:`preview`,previewViewer:`rendered`});return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`main`,{className:`h-full min-w-0 flex-1 overflow-y-auto p-3 sm:p-4 md:p-6`,children:(0,B.jsxs)(`div`,{className:`mx-auto max-w-6xl space-y-4`,children:[(0,B.jsxs)(`header`,{className:`rounded-2xl border border-border/60 bg-card p-3 sm:p-4`,children:[(0,B.jsx)(`h1`,{className:`text-lg font-semibold`,children:d.name}),(0,B.jsx)(`p`,{className:`mt-1 break-all text-xs text-muted-foreground`,children:d.rootPath})]}),(0,B.jsxs)(le,{value:f,onValueChange:e=>n(`/projects/${encodeURIComponent(d.id)}/${e}`),children:[(0,B.jsx)(`div`,{className:`min-w-0 overflow-x-auto pb-1`,children:(0,B.jsx)(ce,{className:`w-max`,children:nt.map(e=>(0,B.jsx)(se,{value:e,children:E(`projects${e[0].toUpperCase()}${e.slice(1)}`)},e))})}),(0,B.jsx)(F,{value:`overview`,className:`mt-4`,children:(0,B.jsx)(Be,{projectId:d.id,onOpenArtifact:(e,t)=>h(Q(d.rootPath,e),t),onOpenWorkItem:l})}),(0,B.jsx)(F,{value:`work`,className:`mt-4`,children:(0,B.jsx)(Xe,{projectId:d.id,onOpenWorkItem:l})}),(0,B.jsx)(F,{value:`artifacts`,className:`mt-4`,children:(0,B.jsx)(Re,{projectId:d.id,onOpenFile:(e,t)=>h(Q(d.rootPath,e),t)})}),(0,B.jsx)(F,{value:`skills`,className:`mt-4`,children:(0,B.jsx)(Ve,{skills:m.data??[],isLoading:m.isLoading,isError:m.isError,onOpen:e=>h(Q(d.rootPath,e.path),e.name)})}),(0,B.jsx)(F,{value:`agreement`,className:`mt-4`,children:(0,B.jsx)(Ee,{agreement:p.data,isLoading:p.isLoading,isError:p.isError,onOpenFile:(e,t)=>h(Q(d.rootPath,e),t)})})]})]})}),(0,B.jsx)(He,{projectId:d.id,projectRoot:d.rootPath,workItemId:c,onOpenChange:e=>{e||l(null)},onOpenArtifact:h}),(0,B.jsx)(te,{layoutMode:o?`mobile`:`desktop`,sessionKey:null,projectRoot:d.rootPath})]})}export{rt as ProjectsPage};
1
+ import{i as e}from"./chunk-DF37yw5_.js";import{A as t,M as n,O as r}from"./utils-CBZPzC_b.js";import{d as i,f as a,n as o}from"./navigation-link-BAQjgx2F.js";import{Gt as s,Lt as c,Yt as l,bn as u,jn as d,vn as f,yn as p}from"./api-DqzQ-_3w.js";import{C as m,a as h,c as g,i as _,n as v,o as y,r as b,s as ee}from"./mcp-marketplace-page-FfIfEo6w.js";import{C as te,P as x,U as S,ct as ne,lt as C}from"./app-presenter-provider-CBZ_-ewx.js";import{n as w,r as T,s as E,t as D}from"./i18n-20rSH40D.js";import{t as O}from"./createLucideIcon-BNKf0_kc.js";import{h as re}from"./app-data-C54N2p8b.js";import{t as k}from"./chevron-down-BL-yMYcX.js";import{n as ie}from"./ellipsis-C5YXdOUx.js";import{S as ae,a as A,i as j,n as M,r as N,t as P}from"./select-CG5YWnwe.js";import{t as oe}from"./circle-dashed-CU3yApvP.js";import{i as se,n as F,r as ce,t as le}from"./tabs-BuE0qKMh.js";import{t as ue}from"./use-viewport-layout-BS18drMT.js";import{t as de}from"./plus-LA8-jpxP.js";import{t as fe}from"./settings-2-CE3ELQyk.js";import{t as pe}from"./confirm-dialog-BTKCWMn6.js";import{t as I}from"./trash-2-BPPYt2NV.js";import{a as L,i as me,n as R,o as he,r as ge,t as _e}from"./dialog-Xe73hpQz.js";import{a as ve,i as ye,n as be,t as xe}from"./card-BhfAZv5L.js";var Se=O(`CircleX`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m15 9-6 6`,key:`1uzhvr`}],[`path`,{d:`m9 9 6 6`,key:`z0biqf`}]]),Ce=O(`Circle`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),we=O(`List`,[[`path`,{d:`M3 12h.01`,key:`nlz23k`}],[`path`,{d:`M3 18h.01`,key:`1tta3j`}],[`path`,{d:`M3 6h.01`,key:`1rqtza`}],[`path`,{d:`M8 12h13`,key:`1za7za`}],[`path`,{d:`M8 18h13`,key:`1lx6n3`}],[`path`,{d:`M8 6h13`,key:`ik3vkj`}]]),Te=O(`Unlink`,[[`path`,{d:`m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71`,key:`yqzxt4`}],[`path`,{d:`m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71`,key:`4qinb0`}],[`line`,{x1:`8`,x2:`8`,y1:`2`,y2:`5`,key:`1041cp`}],[`line`,{x1:`2`,x2:`5`,y1:`8`,y2:`8`,key:`14m1p5`}],[`line`,{x1:`16`,x2:`16`,y1:`19`,y2:`22`,key:`rzdirn`}],[`line`,{x1:`19`,x2:`22`,y1:`16`,y2:`16`,key:`ox905f`}]]),z=e(n(),1),B=t();function V({title:e,children:t,className:n=``}){return(0,B.jsxs)(xe,{hover:!1,surface:`flat`,className:n,children:[(0,B.jsx)(ye,{className:`p-4 pb-3`,children:(0,B.jsx)(ve,{children:e})}),(0,B.jsx)(be,{className:`p-4 pt-0`,children:t})]})}function H({children:e}){return(0,B.jsx)(`p`,{className:`py-5 text-sm text-muted-foreground`,children:e})}function U({available:e,children:t,className:n,label:r,onOpen:i,path:a}){return e?(0,B.jsx)(`button`,{type:`button`,className:n,title:a,onClick:()=>i(a,r),children:t}):(0,B.jsx)(`div`,{className:n,children:t})}function Ee({agreement:e,isLoading:t,isError:n,onOpenFile:r}){return(0,B.jsxs)(V,{title:E(`projectsAgreementFile`),children:[(0,B.jsx)(`p`,{className:`mb-4 text-sm text-muted-foreground`,children:E(`projectsAgreementDescription`)}),t?(0,B.jsx)(`p`,{className:`py-5 text-sm text-muted-foreground`,children:E(`projectsLoading`)}):n?(0,B.jsx)(`p`,{className:`py-5 text-sm text-destructive`,children:E(`projectsLoadFailed`)}):e?.available?(0,B.jsxs)(U,{available:!0,path:e.path,label:e.path,onOpen:r,className:`block w-full rounded-xl bg-muted/45 p-3 text-left transition-colors enabled:hover:bg-[var(--interaction-hover)] enabled:focus-visible:outline-none enabled:focus-visible:ring-1 enabled:focus-visible:ring-border`,children:[(0,B.jsx)(`span`,{className:`block text-sm font-medium`,children:e.path}),(0,B.jsx)(`span`,{className:`mt-1 block text-xs text-muted-foreground`,children:E(`projectsAgreementOpen`)})]}):(0,B.jsx)(H,{children:E(`projectsNoAgreement`)})]})}var W=e=>[`project-work`,e],G=e=>[`project-work-summary`,e],K=e=>[`project-work-states`,e],q=e=>[`project-work-artifacts`,e],J=(e,t)=>[`project-work-item`,e,t],Y=(e,t)=>[`project-work-activity`,e,t];function De(e,t={}){return m({queryKey:[...W(e??``),t],enabled:!!e,initialPageParam:null,queryFn:async({pageParam:n})=>await c.projects.listWork(e,{...t,...n?{cursor:n}:{}}),getNextPageParam:e=>e.nextCursor})}function Oe(e){return u({queryKey:G(e??``),enabled:!!e,queryFn:async()=>await c.projects.getWorkSummary(e)})}function ke(e){return u({queryKey:K(e??``),enabled:!!e,queryFn:async()=>await c.projects.listWorkStates(e)})}function Ae(e,t={}){return m({queryKey:[...q(e??``),t],enabled:!!e,initialPageParam:null,queryFn:async({pageParam:n})=>await c.projects.listRecentWorkArtifacts(e,{...t,...n?{cursor:n}:{}}),getNextPageParam:e=>e.nextCursor})}function je(e,t){return u({queryKey:J(e??``,t??``),enabled:!!(e&&t),queryFn:async()=>await c.projects.getWorkItem(e,t)})}function Me(e,t){return u({queryKey:Y(e??``,t??``),enabled:!!(e&&t),queryFn:async()=>await c.projects.listWorkItemActivities(e,t,{limit:100})})}function X(e){let t=d(),n=async n=>{await Promise.all([t.invalidateQueries({queryKey:W(e)}),t.invalidateQueries({queryKey:G(e)}),t.invalidateQueries({queryKey:K(e)}),t.invalidateQueries({queryKey:q(e)}),...n?[t.invalidateQueries({queryKey:J(e,n)}),t.invalidateQueries({queryKey:Y(e,n)})]:[]])};return{createItem:p({mutationFn:async t=>await c.projects.createWorkItem(e,t),onSuccess:async e=>await n(e.id)}),updateItem:p({mutationFn:async t=>await c.projects.updateWorkItem(e,t.workItemId,t.patch),onSuccess:async e=>await n(e.id)}),deleteItem:p({mutationFn:async t=>await c.projects.deleteWorkItem(e,t),onSuccess:async e=>await n(e.id)}),restoreItem:p({mutationFn:async t=>await c.projects.restoreWorkItem(e,t),onSuccess:async e=>await n(e.id)}),linkArtifact:p({mutationFn:async t=>await c.projects.linkWorkItemArtifact(e,t.workItemId,{path:t.path,...t.label?{label:t.label}:{}}),onSuccess:async(e,t)=>await n(t.workItemId)}),unlinkArtifact:p({mutationFn:async t=>await c.projects.unlinkWorkItemArtifact(e,t.workItemId,t.artifactLinkId),onSuccess:async(e,t)=>await n(t.workItemId)}),createState:p({mutationFn:async t=>await c.projects.createWorkState(e,t),onSuccess:async()=>await n()}),updateState:p({mutationFn:async t=>await c.projects.updateWorkState(e,t.stateId,t.patch),onSuccess:async()=>await n()}),deleteState:p({mutationFn:async t=>await c.projects.deleteWorkState(e,t.stateId,t.migrateToStateId),onSuccess:async()=>await n()})}}function Z(e){let t=d();(0,z.useEffect)(()=>{if(e)return c.eventBus.on(r.projectWorkChanged,n=>{n.projectId===e&&(t.invalidateQueries({queryKey:W(e)}),t.invalidateQueries({queryKey:G(e)}),t.invalidateQueries({queryKey:K(e)}),t.invalidateQueries({queryKey:q(e)}),n.workItemId&&(t.invalidateQueries({queryKey:J(e,n.workItemId)}),t.invalidateQueries({queryKey:Y(e,n.workItemId)})))})},[e,t])}function Ne(e){return[...e].sort((e,t)=>e.position-t.position||e.name.localeCompare(t.name))}var Pe={started:0,unstarted:1,backlog:2,completed:3,canceled:4};function Fe(e){return[...e].sort((e,t)=>{let n=Pe[e.category]-Pe[t.category];return n===0?e.category===`completed`||e.category===`canceled`?e.position-t.position||e.name.localeCompare(t.name):t.position-e.position||e.name.localeCompare(t.name):n})}function Q(e,t){return`${e}${e.endsWith(`/`)||e.endsWith(`\\`)?``:`/`}${t}`}function Ie(e,t=new Date){if(!e)return`-`;let n=new Date(e),r=t.getTime()-n.getTime();if(Number.isNaN(n.getTime()))return e;if(r<6e4)return E(`projectsTimeJustNow`);let i=Math.floor(r/6e4);if(i<60)return E(`projectsTimeMinutesAgo`).replace(`{count}`,String(i));let a=Math.floor(i/60);if(a<24)return E(`projectsTimeHoursAgo`).replace(`{count}`,String(a));let o=Math.floor(a/24);return o===1?E(`projectsTimeYesterday`):o<7?E(`projectsTimeDaysAgo`).replace(`{count}`,String(o)):D(e)}var Le=20;function Re({projectId:e,onOpenFile:t}){let[n,r]=(0,z.useState)(``),i=Ae(e,{limit:Le,...n.trim()?{query:n.trim()}:{}}),a=i.data?.pages??[],o=a.flatMap(e=>e.artifacts),s=a[0]?.total??0;return i.isLoading?(0,B.jsx)(`p`,{className:`py-5 text-sm text-muted-foreground`,children:E(`projectsLoading`)}):i.isError?(0,B.jsx)(`p`,{className:`py-5 text-sm text-destructive`,children:E(`projectsLoadFailed`)}):(0,B.jsxs)(`section`,{className:`min-w-0`,"aria-label":E(`projectsArtifacts`),children:[(0,B.jsxs)(`div`,{className:`mb-4 flex flex-wrap items-center justify-between gap-3`,children:[(0,B.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[T(s),` `,E(`projectsArtifactsCountSuffix`)]}),(0,B.jsx)(`input`,{type:`search`,value:n,className:`h-8 w-full min-w-0 rounded-lg border border-border/60 bg-transparent px-3 text-sm outline-none placeholder:text-muted-foreground sm:w-60`,placeholder:E(`projectsArtifactsSearchPlaceholder`),onChange:e=>r(e.target.value)})]}),o.length?(0,B.jsxs)(`div`,{className:`overflow-hidden rounded-xl border border-border/60`,children:[(0,B.jsx)(`div`,{className:`divide-y divide-border/60`,children:o.map(e=>(0,B.jsxs)(U,{available:e.exists,path:e.path,label:e.label??e.path,onOpen:t,className:`flex w-full min-w-0 items-center gap-3 px-3 py-3 text-left text-sm transition-colors enabled:hover:bg-[var(--interaction-hover)] enabled:focus-visible:outline-none enabled:focus-visible:ring-1 enabled:focus-visible:ring-border`,children:[(0,B.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,B.jsx)(`span`,{className:`block truncate font-medium`,children:e.label??e.path}),(0,B.jsxs)(`span`,{className:`mt-1 block truncate text-xs text-muted-foreground`,children:[e.path,` · `,e.workItemTitle]})]}),(0,B.jsx)(`time`,{className:`shrink-0 text-xs text-muted-foreground`,dateTime:e.createdAt,title:w(e.createdAt),children:Ie(e.createdAt)}),e.exists?null:(0,B.jsx)(`span`,{className:`shrink-0 text-xs text-destructive`,children:E(`projectsUnavailable`)})]},e.id))}),i.hasNextPage?(0,B.jsx)(`button`,{type:`button`,className:`w-full border-t border-border/60 px-3 py-2.5 text-left text-sm text-muted-foreground transition-colors hover:bg-[var(--interaction-hover)] hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border`,disabled:i.isFetchingNextPage,onClick:()=>void i.fetchNextPage(),children:i.isFetchingNextPage?E(`projectsLoading`):E(`projectsArtifactsShowMore`)}):null]}):(0,B.jsx)(H,{children:n.trim()?E(`projectsArtifactsNoMatches`):E(`projectsNoArtifacts`)})]})}var ze={Backlog:`projectsWorkState_backlog`,Planned:`projectsWorkState_planned`,"In Progress":`projectsWorkState_inProgress`,"In Review":`projectsWorkState_inReview`,"Awaiting Acceptance":`projectsWorkState_awaitingAcceptance`,Completed:`projectsWorkState_completed`,Canceled:`projectsWorkState_canceled`};function $(e,t){let n=ze[e];return n?t?E(n,t):E(n):e}function Be({projectId:e,onOpenArtifact:t,onOpenWorkItem:n}){Z(e);let r=Oe(e),i=De(e,{limit:5}),a=Ae(e,{limit:5}),o=a.data?.pages[0]?.artifacts??[],s=i.data?.pages.flatMap(e=>e.items).slice(0,5)??[];return(0,B.jsxs)(`div`,{className:`space-y-5`,children:[(0,B.jsx)(`section`,{className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-4`,"aria-label":E(`projectsWorkSummary`),children:r.data?[[`projectsWorkTotal`,r.data.total],[`projectsWorkActive`,r.data.active],[`projectsWorkNeedsAttention`,r.data.attention],[`projectsWorkCompleted`,r.data.completed]].map(([e,t])=>(0,B.jsxs)(`div`,{className:`rounded-xl border border-border/60 bg-card p-4`,children:[(0,B.jsx)(`div`,{className:`text-2xl font-semibold`,children:t}),(0,B.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:E(e)})]},e)):(0,B.jsx)(`div`,{className:`col-span-full rounded-xl border border-border/60 p-5 text-sm text-muted-foreground`,children:r.isError?E(`projectsLoadFailed`):E(`projectsLoading`)})}),(0,B.jsxs)(`div`,{className:`grid min-w-0 gap-4 lg:grid-cols-2`,children:[(0,B.jsx)(V,{title:E(`projectsWorkRecentlyUpdated`),children:i.isLoading?(0,B.jsx)(`p`,{className:`py-5 text-sm text-muted-foreground`,children:E(`projectsLoading`)}):i.isError?(0,B.jsx)(`p`,{className:`py-5 text-sm text-destructive`,children:E(`projectsLoadFailed`)}):s.length?(0,B.jsx)(`div`,{className:`space-y-2`,children:s.map(e=>(0,B.jsxs)(`button`,{type:`button`,className:`flex w-full items-center justify-between gap-3 rounded-xl bg-muted/45 px-3 py-3 text-left transition-colors hover:bg-[var(--interaction-hover)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border`,onClick:()=>n(e.id),children:[(0,B.jsx)(`span`,{className:`min-w-0 truncate text-sm font-medium`,children:e.title}),(0,B.jsx)(`span`,{className:`shrink-0 text-xs text-muted-foreground`,children:$(e.state.name)})]},e.id))}):(0,B.jsx)(H,{children:E(`projectsWorkEmpty`)})}),(0,B.jsx)(V,{title:E(`projectsRecentArtifacts`),children:a.isLoading?(0,B.jsx)(`p`,{className:`py-5 text-sm text-muted-foreground`,children:E(`projectsLoading`)}):a.isError?(0,B.jsx)(`p`,{className:`py-5 text-sm text-destructive`,children:E(`projectsLoadFailed`)}):o.length?(0,B.jsx)(`div`,{className:`space-y-2`,children:o.map(e=>(0,B.jsxs)(U,{available:e.exists,path:e.path,label:e.label??e.path,onOpen:t,className:`block w-full rounded-xl bg-muted/45 p-3 text-left text-sm transition-colors enabled:hover:bg-[var(--interaction-hover)] enabled:focus-visible:outline-none enabled:focus-visible:ring-1 enabled:focus-visible:ring-border`,children:[(0,B.jsx)(`span`,{className:`block truncate font-medium`,children:e.label??e.path}),(0,B.jsxs)(`span`,{className:`mt-1 block truncate text-xs text-muted-foreground`,children:[e.workItemTitle,(0,B.jsx)(`time`,{dateTime:e.createdAt,title:w(e.createdAt),children:` · ${Ie(e.createdAt)}`}),e.exists?``:` · ${E(`projectsUnavailable`)}`]})]},e.id))}):(0,B.jsx)(H,{children:E(`projectsNoRecentArtifacts`)})})]})]})}function Ve({skills:e,isLoading:t,isError:n,onOpen:r}){return t?(0,B.jsx)(`p`,{className:`py-5 text-sm text-muted-foreground`,children:E(`projectsLoading`)}):n?(0,B.jsx)(`p`,{className:`py-5 text-sm text-destructive`,children:E(`projectsLoadFailed`)}):(0,B.jsxs)(`section`,{className:`min-w-0`,"aria-label":E(`projectsSkills`),children:[(0,B.jsxs)(`p`,{className:`mb-3 text-sm text-muted-foreground`,children:[T(e.length),` `,E(`projectsSkillsCountSuffix`)]}),e.length?(0,B.jsx)(`div`,{className:`grid min-w-0 gap-3 md:grid-cols-2`,children:e.map(e=>(0,B.jsxs)(`button`,{type:`button`,className:`min-w-0 rounded-xl border border-border/60 p-3 text-left transition-colors hover:border-border hover:bg-muted/30 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border`,onClick:()=>r(e),children:[(0,B.jsx)(`h3`,{className:`text-sm font-medium`,children:e.name}),(0,B.jsx)(`p`,{className:`mt-1 truncate text-xs text-muted-foreground`,title:e.path,children:e.path}),(0,B.jsx)(`p`,{className:`mt-2 line-clamp-2 text-xs text-muted-foreground`,title:e.description??e.ref,children:e.description??e.ref})]},e.ref))}):(0,B.jsx)(H,{children:E(`projectsNoSkills`)})]})}function He({onOpenArtifact:e,onOpenChange:t,projectId:n,projectRoot:r,workItemId:i}){let a=je(n,i),o=Me(n,i);Z(n);let s=ke(n);return(0,B.jsx)(b,{open:!!i,onOpenChange:t,children:(0,B.jsxs)(_,{side:`right`,closeLabel:E(`projectsCloseDetails`),className:`flex h-full w-full flex-col overflow-hidden p-0 sm:max-w-[680px]`,children:[a.isLoading?(0,B.jsx)(`div`,{className:`p-6 text-sm text-muted-foreground`,children:E(`projectsLoading`)}):null,a.isError?(0,B.jsx)(`div`,{className:`p-6 text-sm text-destructive`,children:E(`projectsWorkItemLoadFailed`)}):null,a.data?(0,B.jsx)(Ue,{item:a.data,states:s.data??[],activities:o.data?.activities??[],onOpenArtifact:(t,n)=>e(Q(r,t),n),onClose:()=>t(!1)},`${a.data.id}:${a.data.version}`):null]})})}function Ue({activities:e,item:t,onClose:n,onOpenArtifact:r,states:i}){let a=X(t.projectId),[c,u]=(0,z.useState)(t.title),[d,p]=(0,z.useState)(t.description),[m,_]=(0,z.useState)(t.stateId),[b,te]=(0,z.useState)(t.attention),[x,S]=(0,z.useState)(``),[C,w]=(0,z.useState)(``),[T,D]=(0,z.useState)(!1),O=async(e,t)=>{try{await e(),t?.()}catch(e){f.error(e instanceof Error?e.message:E(`projectsWorkActionFailed`))}},re=async()=>{try{await a.updateItem.mutateAsync({workItemId:t.id,patch:{title:c,description:d,stateId:m,attention:b,expectedVersion:t.version}}),f.success(E(`projectsWorkItemSaved`))}catch(e){f.error(e instanceof Error?e.message:E(`projectsWorkItemSaveFailed`))}},k=async()=>{if(x.trim())try{await a.linkArtifact.mutateAsync({workItemId:t.id,path:x.trim(),...C.trim()?{label:C.trim()}:{}}),S(``),w(``)}catch(e){f.error(e instanceof Error?e.message:E(`projectsWorkArtifactLinkFailed`))}};return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(ee,{className:`shrink-0 border-b border-border/60 px-5 pb-5 pt-6 pr-14 sm:px-7 sm:pt-7`,children:[(0,B.jsx)(g,{children:E(`projectsWorkDetails`)}),(0,B.jsxs)(h,{children:[t.id,` · `,E(`projectsWorkVersion`),` `,t.version]})]}),(0,B.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-6 overflow-y-auto px-5 py-6 sm:px-7`,children:[(0,B.jsxs)(`section`,{className:`space-y-3`,children:[(0,B.jsx)(`label`,{className:`block text-xs font-medium text-muted-foreground`,children:E(`projectsWorkTitle`)}),(0,B.jsx)(s,{value:c,onChange:e=>u(e.target.value)}),(0,B.jsx)(`label`,{className:`block text-xs font-medium text-muted-foreground`,children:E(`projectsWorkDescription`)}),(0,B.jsx)(v,{className:`min-h-28`,value:d,onChange:e=>p(e.target.value)}),(0,B.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-muted-foreground`,children:E(`projectsStatus`)}),(0,B.jsxs)(P,{value:m,onValueChange:_,children:[(0,B.jsx)(j,{children:(0,B.jsx)(A,{})}),(0,B.jsx)(M,{children:i.map(e=>(0,B.jsx)(N,{value:e.id,children:$(e.name)},e.id))})]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-muted-foreground`,children:E(`projectsWorkAttention`)}),(0,B.jsxs)(P,{value:b,onValueChange:e=>te(e),children:[(0,B.jsx)(j,{children:(0,B.jsx)(A,{})}),(0,B.jsxs)(M,{children:[(0,B.jsx)(N,{value:`none`,children:E(`projectsWorkAttention_none`)}),(0,B.jsx)(N,{value:`blocked`,children:E(`projectsWorkAttention_blocked`)}),(0,B.jsx)(N,{value:`awaiting-user`,children:E(`projectsWorkAttention_awaiting-user`)})]})]})]})]})]}),(0,B.jsxs)(`section`,{children:[(0,B.jsx)(`h3`,{className:`mb-3 text-sm font-semibold`,children:E(`projectsWorkArtifacts`)}),(0,B.jsxs)(`div`,{className:`space-y-2`,children:[t.artifacts.map(e=>(0,B.jsxs)(`div`,{className:`flex items-center gap-2 rounded-xl border border-border/60 p-2`,children:[(0,B.jsxs)(`button`,{type:`button`,className:`min-w-0 flex-1 rounded-lg px-2 py-1 text-left hover:bg-[var(--interaction-hover)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border`,onClick:()=>r(e.path,e.label??e.path),children:[(0,B.jsxs)(`span`,{className:`flex items-center gap-2 truncate text-sm font-medium`,children:[(0,B.jsx)(o,{className:`h-3.5 w-3.5 shrink-0`}),e.label??e.path]}),(0,B.jsx)(`span`,{className:`block truncate text-xs text-muted-foreground`,children:e.path})]}),(0,B.jsx)(l,{size:`icon`,variant:`ghost`,"aria-label":E(`projectsWorkUnlinkArtifact`),onClick:()=>void O(()=>a.unlinkArtifact.mutateAsync({workItemId:t.id,artifactLinkId:e.id})),children:(0,B.jsx)(Te,{className:`h-4 w-4`})})]},e.id)),t.artifacts.length?null:(0,B.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:E(`projectsWorkNoArtifacts`)})]}),(0,B.jsxs)(`div`,{className:`mt-3 grid gap-2 sm:grid-cols-[1fr_12rem_auto]`,children:[(0,B.jsx)(s,{value:x,onChange:e=>S(e.target.value),placeholder:E(`projectsWorkArtifactPath`)}),(0,B.jsx)(s,{value:C,onChange:e=>w(e.target.value),placeholder:E(`projectsWorkArtifactLabel`)}),(0,B.jsxs)(l,{variant:`outline`,onClick:()=>void k(),disabled:!x.trim()||a.linkArtifact.isPending,children:[(0,B.jsx)(ne,{className:`mr-2 h-4 w-4`}),E(`projectsWorkLinkArtifact`)]})]})]}),(0,B.jsxs)(`section`,{children:[(0,B.jsx)(`h3`,{className:`mb-3 text-sm font-semibold`,children:E(`projectsActivity`)}),(0,B.jsx)(`ol`,{className:`space-y-2`,children:e.map(e=>(0,B.jsxs)(`li`,{className:`rounded-xl bg-muted/35 px-3 py-2 text-sm`,children:[(0,B.jsx)(`span`,{className:`font-medium`,children:E(`projectsWorkActivity_${e.type}`)}),(0,B.jsxs)(`span`,{className:`ml-2 text-xs text-muted-foreground`,children:[e.actor.kind,` ·`,` `,new Date(e.createdAt).toLocaleString()]})]},e.id))})]})]}),(0,B.jsxs)(y,{className:`shrink-0 border-t border-border/60 bg-background px-5 py-4 sm:px-7`,children:[t.deletedAt?(0,B.jsx)(l,{variant:`outline`,onClick:()=>void O(()=>a.restoreItem.mutateAsync(t.id)),children:E(`projectsRestore`)}):(0,B.jsxs)(l,{variant:`destructive`,onClick:()=>D(!0),children:[(0,B.jsx)(I,{className:`mr-2 h-4 w-4`}),E(`projectsDelete`)]}),(0,B.jsx)(l,{onClick:()=>void re(),disabled:!c.trim()||a.updateItem.isPending,children:E(`save`)})]}),(0,B.jsx)(pe,{open:T,onOpenChange:D,title:E(`projectsDeleteWorkItem`),description:E(`projectsDeleteWorkItemDescription`),confirmLabel:E(`projectsDelete`),variant:`destructive`,onCancel:()=>D(!1),onConfirm:()=>void O(()=>a.deleteItem.mutateAsync(t.id),n)})]})}var We=[`backlog`,`unstarted`,`started`,`completed`,`canceled`];function Ge({open:e,onOpenChange:t,projectId:n,states:r}){let i=X(n),a=Ne(r),[o,c]=(0,z.useState)(``),[u,d]=(0,z.useState)(`unstarted`),[p,m]=(0,z.useState)(null),[h,g]=(0,z.useState)(``),_=async e=>{try{await e()}catch(e){f.error(e instanceof Error?e.message:E(`projectsWorkActionFailed`))}},v=async()=>{o.trim()&&await _(async()=>{await i.createState.mutateAsync({name:o.trim(),category:u}),c(``)})},y=async(e,t)=>{let n=a[e],r=a[e+t];!n||!r||await _(async()=>{await i.updateState.mutateAsync({stateId:n.id,patch:{position:r.position}}),await i.updateState.mutateAsync({stateId:r.id,patch:{position:n.position}})})};return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(_e,{open:e,onOpenChange:t,children:(0,B.jsxs)(R,{className:`max-h-[85vh] overflow-y-auto sm:max-w-2xl`,children:[(0,B.jsxs)(L,{children:[(0,B.jsx)(he,{children:E(`projectsWorkStateSettings`)}),(0,B.jsx)(ge,{children:E(`projectsWorkStateSettingsDescription`)})]}),(0,B.jsx)(`div`,{className:`space-y-2`,children:a.map((e,t)=>(0,B.jsxs)(`div`,{className:`grid gap-2 rounded-xl border border-border/60 p-3 sm:grid-cols-[1fr_11rem_auto]`,children:[(0,B.jsx)(s,{"aria-label":E(`projectsWorkStateName`),defaultValue:$(e.name),onBlur:t=>{let n=t.currentTarget.value.trim();n&&n!==$(e.name)&&_(()=>i.updateState.mutateAsync({stateId:e.id,patch:{name:n}}))}}),(0,B.jsxs)(P,{value:e.category,onValueChange:t=>void _(()=>i.updateState.mutateAsync({stateId:e.id,patch:{category:t}})),children:[(0,B.jsx)(j,{"aria-label":E(`projectsWorkStateCategory`),children:(0,B.jsx)(A,{})}),(0,B.jsx)(M,{children:We.map(e=>(0,B.jsx)(N,{value:e,children:E(`projectsWorkCategory_${e}`)},e))})]}),(0,B.jsxs)(`div`,{className:`flex items-center justify-end gap-1`,children:[(0,B.jsx)(l,{size:`icon`,variant:`ghost`,"aria-label":E(`projectsMoveUp`),disabled:t===0,onClick:()=>void y(t,-1),children:(0,B.jsx)(ae,{className:`h-4 w-4`})}),(0,B.jsx)(l,{size:`icon`,variant:`ghost`,"aria-label":E(`projectsMoveDown`),disabled:t===a.length-1,onClick:()=>void y(t,1),children:(0,B.jsx)(k,{className:`h-4 w-4`})}),(0,B.jsx)(l,{size:`icon`,variant:`ghost`,"aria-label":E(`projectsDeleteState`),disabled:a.length<=1,onClick:()=>{m(e),g(``)},children:(0,B.jsx)(I,{className:`h-4 w-4`})})]}),(0,B.jsxs)(`label`,{className:`flex items-center gap-2 text-xs text-muted-foreground sm:col-span-3`,children:[(0,B.jsx)(`input`,{type:`radio`,name:`default-state`,checked:e.isDefault,onChange:()=>void _(()=>i.updateState.mutateAsync({stateId:e.id,patch:{isDefault:!0}}))}),E(`projectsWorkDefaultState`)]})]},e.id))}),(0,B.jsxs)(`div`,{className:`grid gap-2 border-t border-border/60 pt-4 sm:grid-cols-[1fr_11rem_auto]`,children:[(0,B.jsx)(s,{value:o,onChange:e=>c(e.target.value),placeholder:E(`projectsWorkNewState`)}),(0,B.jsxs)(P,{value:u,onValueChange:e=>d(e),children:[(0,B.jsx)(j,{children:(0,B.jsx)(A,{})}),(0,B.jsx)(M,{children:We.map(e=>(0,B.jsx)(N,{value:e,children:E(`projectsWorkCategory_${e}`)},e))})]}),(0,B.jsxs)(l,{onClick:()=>void v(),disabled:!o.trim()||i.createState.isPending,children:[(0,B.jsx)(de,{className:`mr-2 h-4 w-4`}),E(`projectsAdd`)]})]})]})}),(0,B.jsx)(_e,{open:!!p,onOpenChange:e=>{e||m(null)},children:(0,B.jsxs)(R,{children:[(0,B.jsxs)(L,{children:[(0,B.jsx)(he,{children:E(`projectsDeleteState`)}),(0,B.jsx)(ge,{children:E(`projectsDeleteStateDescription`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`p`,{className:`mb-2 text-xs text-muted-foreground`,children:E(`projectsWorkStateMigration`)}),(0,B.jsxs)(P,{value:h,onValueChange:g,children:[(0,B.jsx)(j,{children:(0,B.jsx)(A,{placeholder:E(`projectsWorkStateMigrationOptional`)})}),(0,B.jsx)(M,{children:a.filter(e=>e.id!==p?.id).map(e=>(0,B.jsx)(N,{value:e.id,children:$(e.name)},e.id))})]})]}),(0,B.jsxs)(me,{children:[(0,B.jsx)(l,{variant:`outline`,onClick:()=>m(null),children:E(`cancel`)}),(0,B.jsx)(l,{variant:`destructive`,onClick:()=>{p&&_(async()=>{await i.deleteState.mutateAsync({stateId:p.id,migrateToStateId:h||null}),m(null)})},children:E(`projectsDelete`)})]})]})})]})}function Ke({startedProgress:e,state:t}){if(t.category===`backlog`)return(0,B.jsx)(`span`,{"aria-hidden":`true`,"data-state-visual":`backlog`,className:`inline-flex h-4 w-4 shrink-0 items-center justify-center text-muted-foreground/65`,children:(0,B.jsx)(oe,{className:`h-4 w-4`})});if(t.category===`unstarted`)return(0,B.jsx)(`span`,{"aria-hidden":`true`,"data-state-visual":`unstarted`,className:`inline-flex h-4 w-4 shrink-0 items-center justify-center text-muted-foreground`,children:(0,B.jsx)(Ce,{className:`h-4 w-4`,strokeWidth:2})});if(t.category===`completed`)return(0,B.jsx)(`span`,{"aria-hidden":`true`,"data-state-visual":`completed`,className:`inline-flex h-4 w-4 shrink-0 items-center justify-center text-emerald-600 dark:text-emerald-400`,children:(0,B.jsx)(re,{className:`h-4 w-4`,strokeWidth:2.25})});if(t.category===`canceled`)return(0,B.jsx)(`span`,{"aria-hidden":`true`,"data-state-visual":`canceled`,className:`inline-flex h-4 w-4 shrink-0 items-center justify-center text-muted-foreground/65`,children:(0,B.jsx)(Se,{className:`h-4 w-4`})});let n=Math.round((e??.5)*100),r=n>=67?`text-emerald-600 dark:text-emerald-400`:n>=40?`text-orange-500 dark:text-orange-400`:`text-amber-500 dark:text-amber-400`;return(0,B.jsx)(`span`,{"aria-hidden":`true`,"data-state-visual":`started`,className:`inline-flex h-4 w-4 shrink-0 items-center justify-center ${r}`,children:(0,B.jsxs)(`svg`,{className:`h-4 w-4`,viewBox:`0 0 16 16`,fill:`none`,children:[(0,B.jsx)(`circle`,{cx:`8`,cy:`8`,r:`5.5`,stroke:`currentColor`,strokeWidth:`1.75`,opacity:`0.22`}),(0,B.jsx)(`circle`,{cx:`8`,cy:`8`,r:`5.5`,pathLength:`100`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeDasharray:`${n} ${100-n}`,transform:`rotate(-90 8 8)`})]})})}function qe({item:e,onOpen:t}){return(0,B.jsxs)(`button`,{type:`button`,className:`w-full rounded-xl border border-border/50 bg-card p-3 text-left text-sm shadow-sm transition-colors hover:bg-[var(--interaction-hover)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border`,onClick:t,children:[(0,B.jsx)(`span`,{className:`block font-medium`,children:e.title}),(0,B.jsxs)(`span`,{className:`mt-1 flex flex-wrap items-center gap-1.5 text-xs text-muted-foreground`,children:[(0,B.jsx)(`span`,{children:$(e.state.name)}),e.attention===`none`?null:(0,B.jsx)(`span`,{className:`rounded-full bg-amber-500/15 px-2 py-0.5 text-amber-700 dark:text-amber-300`,children:E(`projectsWorkAttention_${e.attention}`)}),e.deletedAt?(0,B.jsx)(`span`,{children:E(`projectsDeleted`)}):null]})]})}function Je({hasNextPage:e,isError:t,isFetchingNextPage:n,isLoading:r,items:i,onLoadMore:a,onOpenWorkItem:o}){return r?(0,B.jsx)(`p`,{className:`py-3 text-xs text-muted-foreground`,children:E(`projectsLoading`)}):t?(0,B.jsx)(`p`,{className:`py-3 text-xs text-destructive`,children:E(`projectsLoadFailed`)}):(0,B.jsxs)(B.Fragment,{children:[i.length?i.map(e=>(0,B.jsx)(qe,{item:e,onOpen:()=>o(e.id)},e.id)):(0,B.jsx)(`p`,{className:`py-3 text-xs text-muted-foreground`,children:E(`projectsNoData`)}),e?(0,B.jsx)(l,{type:`button`,variant:`ghost`,size:`sm`,className:`w-full`,disabled:n,onClick:a,children:E(n?`projectsLoading`:`projectsWorkLoadMore`)}):null]})}function Ye({includeDeleted:e,onOpenWorkItem:t,state:n,startedProgress:r,view:i}){let[a,o]=(0,z.useState)(!1),s=De(n.projectId,{stateId:n.id,includeDeleted:e,limit:20}),c=s.data?.pages.flatMap(e=>e.items)??[],l=s.data?.pages[0]?.total;return(0,B.jsxs)(`section`,{className:i===`board`?`flex h-full min-h-0 min-w-0 flex-col overflow-hidden`:`min-w-0`,"aria-label":$(n.name),children:[(0,B.jsxs)(`button`,{type:`button`,className:`flex w-full shrink-0 items-center gap-2 rounded-lg px-1 py-2 text-left transition-colors hover:bg-[var(--interaction-hover)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border`,"aria-expanded":!a,onClick:()=>o(e=>!e),children:[a?(0,B.jsx)(ie,{className:`h-4 w-4 shrink-0`}):(0,B.jsx)(k,{className:`h-4 w-4 shrink-0`}),(0,B.jsx)(Ke,{state:n,startedProgress:r}),(0,B.jsx)(`span`,{className:`min-w-0 truncate text-sm font-semibold`,children:$(n.name)}),(0,B.jsx)(`span`,{className:`ml-0.5 shrink-0 text-xs font-medium tabular-nums text-muted-foreground`,children:l??`…`})]}),a?null:(0,B.jsx)(`div`,{className:i===`board`?`min-h-0 flex-1 space-y-2 overflow-y-auto overscroll-contain px-1 pb-3`:`space-y-2 px-1 pb-3`,children:(0,B.jsx)(Je,{hasNextPage:s.hasNextPage,isError:s.isError,isFetchingNextPage:s.isFetchingNextPage,isLoading:s.isLoading,items:c,onLoadMore:()=>void s.fetchNextPage(),onOpenWorkItem:t})})]})}function Xe({onOpenWorkItem:e,projectId:t}){let[n,r]=(0,z.useState)(`list`),[i,a]=(0,z.useState)(!1),[o,c]=(0,z.useState)(``),[u,d]=(0,z.useState)(!1);Z(t);let p=ke(t),m=X(t),h=async()=>{if(o.trim())try{let t=await m.createItem.mutateAsync({title:o.trim()});c(``),e(t.id)}catch(e){f.error(e instanceof Error?e.message:E(`projectsWorkItemCreateFailed`))}};if(p.isLoading)return(0,B.jsx)(`div`,{className:`rounded-xl border border-border/60 p-5 text-sm text-muted-foreground`,children:E(`projectsLoading`)});if(p.isError)return(0,B.jsx)(`div`,{className:`rounded-xl border border-destructive/40 p-5 text-sm text-destructive`,children:E(`projectsLoadFailed`)});let g=Ne(p.data??[]),_=Fe(p.data??[]),v=g.filter(e=>e.category===`started`),y=new Map(v.map((e,t)=>[e.id,(t+1)/(v.length+1)]));return(0,B.jsxs)(`section`,{"aria-label":E(`projectsWork`),className:`min-w-0 space-y-4`,children:[(0,B.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,B.jsxs)(`div`,{className:`flex min-w-[16rem] flex-1 gap-2`,children:[(0,B.jsx)(s,{value:o,onChange:e=>c(e.target.value),onKeyDown:e=>{e.key===`Enter`&&h()},placeholder:E(`projectsWorkNewItem`)}),(0,B.jsxs)(l,{onClick:()=>void h(),disabled:!o.trim()||m.createItem.isPending,children:[(0,B.jsx)(de,{className:`mr-2 h-4 w-4`}),E(`projectsCreate`)]})]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-1 rounded-xl bg-muted/40 p-1`,role:`group`,"aria-label":E(`projectsWorkViews`),children:[(0,B.jsxs)(l,{size:`sm`,variant:n===`list`?`secondary`:`ghost`,"aria-pressed":n===`list`,onClick:()=>r(`list`),children:[(0,B.jsx)(we,{className:`mr-2 h-4 w-4`}),E(`projectsWorkList`)]}),(0,B.jsxs)(l,{size:`sm`,variant:n===`board`?`secondary`:`ghost`,"aria-pressed":n===`board`,onClick:()=>r(`board`),children:[(0,B.jsx)(C,{className:`mr-2 h-4 w-4`}),E(`projectsWorkBoard`)]})]}),(0,B.jsxs)(l,{variant:`outline`,size:`sm`,onClick:()=>d(!0),children:[(0,B.jsx)(fe,{className:`mr-2 h-4 w-4`}),E(`projectsWorkStateSettings`)]})]}),(0,B.jsxs)(`label`,{className:`flex w-fit items-center gap-2 text-xs text-muted-foreground`,children:[(0,B.jsx)(`input`,{type:`checkbox`,checked:i,onChange:e=>a(e.target.checked)}),E(`projectsWorkShowDeleted`)]}),n===`list`?(0,B.jsx)(`div`,{className:`space-y-3`,children:_.map(t=>(0,B.jsx)(Ye,{state:t,startedProgress:y.get(t.id)??null,view:n,includeDeleted:i,onOpenWorkItem:e},t.id))}):null,n===`board`?(0,B.jsx)(`div`,{className:`grid h-[calc(100dvh-17rem)] min-h-[28rem] max-h-[52rem] min-w-0 auto-cols-[minmax(18rem,1fr)] grid-flow-col items-stretch gap-3 overflow-x-auto overflow-y-hidden pb-2`,children:g.map(t=>(0,B.jsx)(Ye,{state:t,startedProgress:y.get(t.id)??null,view:n,includeDeleted:i,onOpenWorkItem:e},t.id))}):null,(0,B.jsx)(Ge,{open:u,onOpenChange:d,projectId:t,states:g})]})}var Ze=e=>[`project-agreement`,e],Qe=e=>[`project-skills`,e];function $e(e){return u({queryKey:Ze(e??``),enabled:!!e,queryFn:async()=>await c.projects.getAgreement(e)})}function et(e){return u({queryKey:Qe(e??``),enabled:!!e,queryFn:async()=>await c.projects.listProjectSkills(e)})}function tt(e){return e===`overview`||e===`work`||e===`artifacts`||e===`skills`||e===`agreement`}var nt=[`overview`,`work`,`artifacts`,`skills`,`agreement`];function rt(){let{projectId:e,tab:t}=a(),n=i(),r=S(),{isMobile:o}=ue(),s=x(),[c,l]=(0,z.useState)(null),u=s.data?.projects??[],d=u.find(t=>t.id===e)??null,f=tt(t)?t:null,p=$e(f===`agreement`?d?.id??null:null),m=et(f===`skills`?d?.id??null:null);if(s.isLoading)return(0,B.jsx)(`main`,{className:`flex h-full items-center justify-center p-6 text-sm text-muted-foreground`,children:E(`projectsLoading`)});if(s.isError)return(0,B.jsxs)(`main`,{className:`p-6 text-sm text-destructive`,children:[E(`projectsLoadFailed`),`: `,s.error.message]});if(!u.length)return(0,B.jsx)(`main`,{className:`p-6 text-sm text-muted-foreground`,children:E(`projectsEmpty`)});if(!d||!f)return(0,B.jsx)(`main`,{className:`p-6 text-sm text-muted-foreground`,children:E(`projectsChoose`)});let h=(e,t)=>r.chatThreadManager.openFilePreview({path:e,label:t,viewMode:`preview`,previewViewer:`rendered`});return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`main`,{className:`h-full min-w-0 flex-1 overflow-y-auto p-3 sm:p-4 md:p-6`,children:(0,B.jsxs)(`div`,{className:`mx-auto max-w-6xl space-y-4`,children:[(0,B.jsxs)(`header`,{className:`rounded-2xl border border-border/60 bg-card p-3 sm:p-4`,children:[(0,B.jsx)(`h1`,{className:`text-lg font-semibold`,children:d.name}),(0,B.jsx)(`p`,{className:`mt-1 break-all text-xs text-muted-foreground`,children:d.rootPath})]}),(0,B.jsxs)(le,{value:f,onValueChange:e=>n(`/projects/${encodeURIComponent(d.id)}/${e}`),children:[(0,B.jsx)(`div`,{className:`min-w-0 overflow-x-auto pb-1`,children:(0,B.jsx)(ce,{className:`w-max`,children:nt.map(e=>(0,B.jsx)(se,{value:e,children:E(`projects${e[0].toUpperCase()}${e.slice(1)}`)},e))})}),(0,B.jsx)(F,{value:`overview`,className:`mt-4`,children:(0,B.jsx)(Be,{projectId:d.id,onOpenArtifact:(e,t)=>h(Q(d.rootPath,e),t),onOpenWorkItem:l})}),(0,B.jsx)(F,{value:`work`,className:`mt-4`,children:(0,B.jsx)(Xe,{projectId:d.id,onOpenWorkItem:l})}),(0,B.jsx)(F,{value:`artifacts`,className:`mt-4`,children:(0,B.jsx)(Re,{projectId:d.id,onOpenFile:(e,t)=>h(Q(d.rootPath,e),t)})}),(0,B.jsx)(F,{value:`skills`,className:`mt-4`,children:(0,B.jsx)(Ve,{skills:m.data??[],isLoading:m.isLoading,isError:m.isError,onOpen:e=>h(Q(d.rootPath,e.path),e.name)})}),(0,B.jsx)(F,{value:`agreement`,className:`mt-4`,children:(0,B.jsx)(Ee,{agreement:p.data,isLoading:p.isLoading,isError:p.isError,onOpenFile:(e,t)=>h(Q(d.rootPath,e),t)})})]})]})}),(0,B.jsx)(He,{projectId:d.id,projectRoot:d.rootPath,workItemId:c,onOpenChange:e=>{e||l(null)},onOpenArtifact:h}),(0,B.jsx)(te,{layoutMode:o?`mobile`:`desktop`,sessionKey:null,projectRoot:d.rootPath})]})}export{rt as ProjectsPage};
@@ -1 +1 @@
1
- import{A as e,i as t,t as n}from"./utils-CBZPzC_b.js";import{Jt as r,Yt as i,qt as a,vn as o}from"./api-DqzQ-_3w.js";import{ut as s}from"./app-presenter-provider-V0xnU_Wb.js";import{s as c}from"./i18n-20rSH40D.js";import{t as l}from"./createLucideIcon-BNKf0_kc.js";import{a as u,o as d}from"./theme-provider-DzvAi3pe.js";import{t as f}from"./x-DdXOqLnX.js";var p=l(`Smartphone`,[[`rect`,{width:`14`,height:`20`,x:`5`,y:`2`,rx:`2`,ry:`2`,key:`1yt0o3`}],[`path`,{d:`M12 18h.01`,key:`mhygvu`}]]),m=`nextclaw-pwa-install-banner-dismissed`,h=`nextclaw-pwa-install-banner-dismissed-until`;function g(){let e=y();return e?e.getItem(`nextclaw-pwa-install-banner-dismissed`)===`1`?!0:b(e):!1}function _(){let e=y();e?.setItem(m,`1`),e?.removeItem(h)}function v(){let e=y();e?.removeItem(m),e?.removeItem(h)}function y(){if(typeof window>`u`)return null;try{return window.localStorage}catch{return null}}function b(e){let t=e.getItem(h);if(!t)return!1;let n=Number.parseInt(t,10);return e.removeItem(h),!Number.isFinite(n)||n<=Date.now()?!1:(e.setItem(m,`1`),!0)}function x(){return{initialized:!1,installability:`unsupported`,installMethod:`none`,blockedReason:`missing-browser-support`,dismissedInstallPrompt:g()}}var S=t(()=>x()),C=new class{constructor(){this.started=!1,this.deferredPrompt=null,this.displayModeMediaQuery=null,this.start=()=>{this.started||typeof window>`u`||(this.started=!0,window.addEventListener(`beforeinstallprompt`,this.handleBeforeInstallPrompt),window.addEventListener(`appinstalled`,this.handleAppInstalled),typeof window.matchMedia==`function`&&(this.displayModeMediaQuery=window.matchMedia(`(display-mode: standalone)`),this.bindDisplayModeListener(this.displayModeMediaQuery,this.handleDisplayModeChanged)),this.refreshState())},this.stop=()=>{!this.started||typeof window>`u`||(window.removeEventListener(`beforeinstallprompt`,this.handleBeforeInstallPrompt),window.removeEventListener(`appinstalled`,this.handleAppInstalled),this.displayModeMediaQuery&&=(this.unbindDisplayModeListener(this.displayModeMediaQuery,this.handleDisplayModeChanged),null),this.deferredPrompt=null,this.started=!1)},this.resetForTests=()=>{this.stop(),S.setState(x())},this.refreshState=()=>{let e=this.resolveInstallability();S.setState(t=>({...t,initialized:!0,installability:e.installability,installMethod:e.installMethod,blockedReason:e.blockedReason,dismissedInstallPrompt:g()}))},this.dismissInstallPrompt=()=>{_(),S.setState({dismissedInstallPrompt:!0})},this.promptInstall=async()=>{let e=this.resolveInstallability();if(e.installability!==`available`)return`unavailable`;if(e.installMethod===`manual`||!this.deferredPrompt)return`manual`;this.deferredPrompt.prompt();let t=await this.deferredPrompt.userChoice;return this.deferredPrompt=null,t.outcome===`accepted`?(v(),this.refreshState(),o.success(c(`pwaInstallAccepted`)),`accepted`):(this.dismissInstallPrompt(),this.refreshState(),`dismissed`)},this.handleBeforeInstallPrompt=e=>{e.preventDefault(),this.deferredPrompt=e,this.refreshState()},this.handleAppInstalled=()=>{this.deferredPrompt=null,v(),S.setState({dismissedInstallPrompt:!0}),o.success(c(`pwaInstalledToast`)),this.refreshState()},this.handleDisplayModeChanged=()=>{this.refreshState()},this.resolveInstallability=()=>this.isDevelopmentServer()?{installability:`unsupported`,installMethod:`none`,blockedReason:`dev-server`}:this.hasDesktopHost()?{installability:`suppressed`,installMethod:`none`,blockedReason:`desktop-host`}:this.isStandalone()?{installability:`installed`,installMethod:`none`,blockedReason:null}:this.hasInstallSurfaceSupport()?this.isEligibleInstallContext()?{installability:`available`,installMethod:this.deferredPrompt?`prompt`:`manual`,blockedReason:null}:{installability:`unsupported`,installMethod:`none`,blockedReason:`insecure-context`}:{installability:`unsupported`,installMethod:`none`,blockedReason:`missing-browser-support`},this.hasDesktopHost=()=>typeof window<`u`&&!!window.nextclawDesktop,this.hasInstallSurfaceSupport=()=>typeof window<`u`&&typeof window.matchMedia==`function`&&`serviceWorker`in navigator,this.isEligibleInstallContext=()=>typeof window>`u`?!1:window.isSecureContext||this.isTrustedLocalhost(window.location.hostname),this.isTrustedLocalhost=e=>e===`localhost`||e===`127.0.0.1`||e===`::1`||e===`[::1]`,this.isDevelopmentServer=()=>typeof window<`u`&&!1,this.isStandalone=()=>{if(typeof window>`u`)return!1;let e=window.navigator;return typeof window.matchMedia==`function`&&window.matchMedia(`(display-mode: standalone)`).matches||e.standalone===!0},this.bindDisplayModeListener=(e,t)=>{if(`addEventListener`in e){e.addEventListener(`change`,t);return}e.addListener?.(t)},this.unbindDisplayModeListener=(e,t)=>{if(`removeEventListener`in e){e.removeEventListener(`change`,t);return}e.removeListener?.(t)}}},w=e();function T(){let e=S(e=>e.installability);return(0,w.jsx)(`span`,{className:n(`inline-flex items-center rounded-full border px-3 py-1 text-xs font-medium`,e===`installed`?`bg-emerald-50 text-emerald-700 border-emerald-200`:e===`available`?`bg-amber-50 text-amber-700 border-amber-200`:`bg-gray-100 text-gray-600 border-gray-200`),children:E(e)})}function E(e){return c(e===`available`?`pwaInstallStatusAvailable`:e===`installed`?`pwaInstallStatusInstalled`:e===`suppressed`?`pwaInstallStatusDesktopHost`:`pwaInstallStatusUnavailable`)}function D(e,t,n){return c(e===`installed`?`pwaInstallCardInstalled`:e===`suppressed`?`pwaInstallCardSuppressed`:e===`available`&&t===`prompt`?`pwaInstallCardPrompt`:e===`available`?`pwaInstallCardManual`:n===`insecure-context`?`pwaInstallCardInsecureContext`:n===`dev-server`?`pwaInstallCardDevServer`:`pwaInstallCardUnsupported`)}function O(){let e=S(e=>e.installability),t=S(e=>e.installMethod),n=S(e=>e.blockedReason);return(0,w.jsx)(r,{title:c(`pwaInstallTitle`),description:c(`pwaInstallDescription`),actions:(0,w.jsx)(T,{}),children:(0,w.jsx)(a,{children:(0,w.jsxs)(`div`,{className:`space-y-4 p-4`,children:[(0,w.jsx)(`p`,{className:`text-sm leading-6 text-muted-foreground`,children:D(e,t,n)}),e===`available`&&t===`prompt`?(0,w.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,w.jsxs)(i,{type:`button`,className:`gap-2`,onClick:()=>void C.promptInstall(),children:[(0,w.jsx)(s,{className:`h-4 w-4`}),c(`pwaInstallAction`)]}),(0,w.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:c(`pwaInstallPromptHint`)})]}):null,e===`available`&&t===`manual`?(0,w.jsxs)(`div`,{className:`flex items-start gap-3 rounded-xl bg-background/65 p-4`,children:[(0,w.jsx)(p,{className:`mt-0.5 h-4 w-4 text-muted-foreground`}),(0,w.jsx)(`p`,{className:`text-sm leading-6 text-muted-foreground`,children:c(`pwaInstallManualHint`)})]}):null]})})})}function k(){let e=S(e=>e.installability),t=S(e=>e.installMethod),n=S(e=>e.dismissedInstallPrompt);return e!==`available`||t!==`prompt`||n?null:(0,w.jsxs)(`div`,{className:`fixed bottom-5 right-5 z-50 w-[min(420px,calc(100vw-2rem))] rounded-[26px] border border-gray-200 bg-white/95 p-5 shadow-2xl backdrop-blur-xl`,children:[(0,w.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,w.jsxs)(`div`,{className:`space-y-1`,children:[(0,w.jsx)(`p`,{className:`text-sm font-semibold text-gray-900`,children:c(`pwaInstallBannerTitle`)}),(0,w.jsx)(`p`,{className:`text-sm leading-6 text-gray-600`,children:c(`pwaInstallBannerDescription`)})]}),(0,w.jsx)(`button`,{type:`button`,"aria-label":c(`pwaInstallDismiss`),className:`rounded-full p-1 text-gray-400 transition hover:bg-gray-100 hover:text-gray-600`,onClick:()=>{C.dismissInstallPrompt()},children:(0,w.jsx)(f,{className:`h-4 w-4`})})]}),(0,w.jsxs)(`div`,{className:`mt-4 flex items-center gap-3`,children:[(0,w.jsxs)(i,{type:`button`,size:`sm`,className:`gap-2`,onClick:()=>{C.promptInstall()},children:[(0,w.jsx)(s,{className:`h-4 w-4`}),c(`pwaInstallAction`)]}),(0,w.jsx)(i,{type:`button`,size:`sm`,variant:`ghost`,onClick:()=>{C.dismissInstallPrompt()},children:c(`pwaInstallDismiss`)})]})]})}var A=new class{constructor(){this.started=!1,this.registration=null,this.start=async()=>{if(!(this.started||typeof window>`u`)&&(this.started=!0,!(!(`serviceWorker`in navigator)||!this.isEligibleInstallContext()))){if(this.isDevelopmentServer()){await this.cleanupDevelopmentRegistrations();return}try{this.registration=await navigator.serviceWorker.register(`/sw.js`)}catch{return}}},this.stop=()=>{!this.started||typeof window>`u`||!(`serviceWorker`in navigator)||(this.started=!1,this.registration=null)},this.isEligibleInstallContext=()=>window.isSecureContext||this.isTrustedLocalhost(window.location.hostname),this.isTrustedLocalhost=e=>e===`localhost`||e===`127.0.0.1`||e===`::1`||e===`[::1]`,this.isDevelopmentServer=()=>!1,this.cleanupDevelopmentRegistrations=async()=>{if(typeof navigator.serviceWorker.getRegistrations!=`function`)return;let e=(await navigator.serviceWorker.getRegistrations()).filter(e=>[e.active?.scriptURL,e.installing?.scriptURL,e.waiting?.scriptURL].filter(e=>!!e).some(e=>e.endsWith(`/sw.js`)));await Promise.all(e.map(async e=>await e.unregister())),e.length>0&&await this.clearNextClawCaches()},this.clearNextClawCaches=async()=>{if(typeof window>`u`||!(`caches`in window)||typeof caches.keys!=`function`)return;let e=await caches.keys();await Promise.all(e.filter(e=>e.startsWith(`nextclaw-ui-`)).map(async e=>await caches.delete(e)))}}},j=!1;function M(){j||typeof window>`u`||(j=!0,C.start(),A.start())}var N={natural:`#FAF9F7`,work:`#FFFFFF`,minimal:`#FFFFFF`,warm:`#FAF8F4`,cool:`#F8FAFC`,dawn:`#FAF7F4`,graphite:`#F8F8F7`,night:`#101318`,charcoal:`#1C1C1C`,island:`#FBF8ED`,probe:`#FEFCF6`},P=new class{constructor(){this.syncTheme=e=>{if(typeof document>`u`)return;let t=N[e];this.updateThemeMeta(t),this.updateSurfaceBackgrounds(t),document.documentElement.style.colorScheme=u(e)},this.syncCurrentTheme=()=>{if(typeof document>`u`)return;let e=document.documentElement.getAttribute(`data-theme`);this.syncTheme(d(e)??`work`)},this.updateThemeMeta=e=>{let t=document.querySelector(`meta[name="theme-color"]`);t instanceof HTMLMetaElement&&(t.content=e)},this.updateSurfaceBackgrounds=e=>{document.documentElement.style.backgroundColor=e,document.body.style.backgroundColor=e;let t=document.getElementById(`root`);t&&(t.style.backgroundColor=e)}}};export{O as i,M as n,k as r,P as t};
1
+ import{A as e,i as t,t as n}from"./utils-CBZPzC_b.js";import{Jt as r,Yt as i,qt as a,vn as o}from"./api-DqzQ-_3w.js";import{dt as s}from"./app-presenter-provider-CBZ_-ewx.js";import{s as c}from"./i18n-20rSH40D.js";import{t as l}from"./createLucideIcon-BNKf0_kc.js";import{a as u,o as d}from"./theme-provider-DzvAi3pe.js";import{t as f}from"./x-DdXOqLnX.js";var p=l(`Smartphone`,[[`rect`,{width:`14`,height:`20`,x:`5`,y:`2`,rx:`2`,ry:`2`,key:`1yt0o3`}],[`path`,{d:`M12 18h.01`,key:`mhygvu`}]]),m=`nextclaw-pwa-install-banner-dismissed`,h=`nextclaw-pwa-install-banner-dismissed-until`;function g(){let e=y();return e?e.getItem(`nextclaw-pwa-install-banner-dismissed`)===`1`?!0:b(e):!1}function _(){let e=y();e?.setItem(m,`1`),e?.removeItem(h)}function v(){let e=y();e?.removeItem(m),e?.removeItem(h)}function y(){if(typeof window>`u`)return null;try{return window.localStorage}catch{return null}}function b(e){let t=e.getItem(h);if(!t)return!1;let n=Number.parseInt(t,10);return e.removeItem(h),!Number.isFinite(n)||n<=Date.now()?!1:(e.setItem(m,`1`),!0)}function x(){return{initialized:!1,installability:`unsupported`,installMethod:`none`,blockedReason:`missing-browser-support`,dismissedInstallPrompt:g()}}var S=t(()=>x()),C=new class{constructor(){this.started=!1,this.deferredPrompt=null,this.displayModeMediaQuery=null,this.start=()=>{this.started||typeof window>`u`||(this.started=!0,window.addEventListener(`beforeinstallprompt`,this.handleBeforeInstallPrompt),window.addEventListener(`appinstalled`,this.handleAppInstalled),typeof window.matchMedia==`function`&&(this.displayModeMediaQuery=window.matchMedia(`(display-mode: standalone)`),this.bindDisplayModeListener(this.displayModeMediaQuery,this.handleDisplayModeChanged)),this.refreshState())},this.stop=()=>{!this.started||typeof window>`u`||(window.removeEventListener(`beforeinstallprompt`,this.handleBeforeInstallPrompt),window.removeEventListener(`appinstalled`,this.handleAppInstalled),this.displayModeMediaQuery&&=(this.unbindDisplayModeListener(this.displayModeMediaQuery,this.handleDisplayModeChanged),null),this.deferredPrompt=null,this.started=!1)},this.resetForTests=()=>{this.stop(),S.setState(x())},this.refreshState=()=>{let e=this.resolveInstallability();S.setState(t=>({...t,initialized:!0,installability:e.installability,installMethod:e.installMethod,blockedReason:e.blockedReason,dismissedInstallPrompt:g()}))},this.dismissInstallPrompt=()=>{_(),S.setState({dismissedInstallPrompt:!0})},this.promptInstall=async()=>{let e=this.resolveInstallability();if(e.installability!==`available`)return`unavailable`;if(e.installMethod===`manual`||!this.deferredPrompt)return`manual`;this.deferredPrompt.prompt();let t=await this.deferredPrompt.userChoice;return this.deferredPrompt=null,t.outcome===`accepted`?(v(),this.refreshState(),o.success(c(`pwaInstallAccepted`)),`accepted`):(this.dismissInstallPrompt(),this.refreshState(),`dismissed`)},this.handleBeforeInstallPrompt=e=>{e.preventDefault(),this.deferredPrompt=e,this.refreshState()},this.handleAppInstalled=()=>{this.deferredPrompt=null,v(),S.setState({dismissedInstallPrompt:!0}),o.success(c(`pwaInstalledToast`)),this.refreshState()},this.handleDisplayModeChanged=()=>{this.refreshState()},this.resolveInstallability=()=>this.isDevelopmentServer()?{installability:`unsupported`,installMethod:`none`,blockedReason:`dev-server`}:this.hasDesktopHost()?{installability:`suppressed`,installMethod:`none`,blockedReason:`desktop-host`}:this.isStandalone()?{installability:`installed`,installMethod:`none`,blockedReason:null}:this.hasInstallSurfaceSupport()?this.isEligibleInstallContext()?{installability:`available`,installMethod:this.deferredPrompt?`prompt`:`manual`,blockedReason:null}:{installability:`unsupported`,installMethod:`none`,blockedReason:`insecure-context`}:{installability:`unsupported`,installMethod:`none`,blockedReason:`missing-browser-support`},this.hasDesktopHost=()=>typeof window<`u`&&!!window.nextclawDesktop,this.hasInstallSurfaceSupport=()=>typeof window<`u`&&typeof window.matchMedia==`function`&&`serviceWorker`in navigator,this.isEligibleInstallContext=()=>typeof window>`u`?!1:window.isSecureContext||this.isTrustedLocalhost(window.location.hostname),this.isTrustedLocalhost=e=>e===`localhost`||e===`127.0.0.1`||e===`::1`||e===`[::1]`,this.isDevelopmentServer=()=>typeof window<`u`&&!1,this.isStandalone=()=>{if(typeof window>`u`)return!1;let e=window.navigator;return typeof window.matchMedia==`function`&&window.matchMedia(`(display-mode: standalone)`).matches||e.standalone===!0},this.bindDisplayModeListener=(e,t)=>{if(`addEventListener`in e){e.addEventListener(`change`,t);return}e.addListener?.(t)},this.unbindDisplayModeListener=(e,t)=>{if(`removeEventListener`in e){e.removeEventListener(`change`,t);return}e.removeListener?.(t)}}},w=e();function T(){let e=S(e=>e.installability);return(0,w.jsx)(`span`,{className:n(`inline-flex items-center rounded-full border px-3 py-1 text-xs font-medium`,e===`installed`?`bg-emerald-50 text-emerald-700 border-emerald-200`:e===`available`?`bg-amber-50 text-amber-700 border-amber-200`:`bg-gray-100 text-gray-600 border-gray-200`),children:E(e)})}function E(e){return c(e===`available`?`pwaInstallStatusAvailable`:e===`installed`?`pwaInstallStatusInstalled`:e===`suppressed`?`pwaInstallStatusDesktopHost`:`pwaInstallStatusUnavailable`)}function D(e,t,n){return c(e===`installed`?`pwaInstallCardInstalled`:e===`suppressed`?`pwaInstallCardSuppressed`:e===`available`&&t===`prompt`?`pwaInstallCardPrompt`:e===`available`?`pwaInstallCardManual`:n===`insecure-context`?`pwaInstallCardInsecureContext`:n===`dev-server`?`pwaInstallCardDevServer`:`pwaInstallCardUnsupported`)}function O(){let e=S(e=>e.installability),t=S(e=>e.installMethod),n=S(e=>e.blockedReason);return(0,w.jsx)(r,{title:c(`pwaInstallTitle`),description:c(`pwaInstallDescription`),actions:(0,w.jsx)(T,{}),children:(0,w.jsx)(a,{children:(0,w.jsxs)(`div`,{className:`space-y-4 p-4`,children:[(0,w.jsx)(`p`,{className:`text-sm leading-6 text-muted-foreground`,children:D(e,t,n)}),e===`available`&&t===`prompt`?(0,w.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,w.jsxs)(i,{type:`button`,className:`gap-2`,onClick:()=>void C.promptInstall(),children:[(0,w.jsx)(s,{className:`h-4 w-4`}),c(`pwaInstallAction`)]}),(0,w.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:c(`pwaInstallPromptHint`)})]}):null,e===`available`&&t===`manual`?(0,w.jsxs)(`div`,{className:`flex items-start gap-3 rounded-xl bg-background/65 p-4`,children:[(0,w.jsx)(p,{className:`mt-0.5 h-4 w-4 text-muted-foreground`}),(0,w.jsx)(`p`,{className:`text-sm leading-6 text-muted-foreground`,children:c(`pwaInstallManualHint`)})]}):null]})})})}function k(){let e=S(e=>e.installability),t=S(e=>e.installMethod),n=S(e=>e.dismissedInstallPrompt);return e!==`available`||t!==`prompt`||n?null:(0,w.jsxs)(`div`,{className:`fixed bottom-5 right-5 z-50 w-[min(420px,calc(100vw-2rem))] rounded-[26px] border border-gray-200 bg-white/95 p-5 shadow-2xl backdrop-blur-xl`,children:[(0,w.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,w.jsxs)(`div`,{className:`space-y-1`,children:[(0,w.jsx)(`p`,{className:`text-sm font-semibold text-gray-900`,children:c(`pwaInstallBannerTitle`)}),(0,w.jsx)(`p`,{className:`text-sm leading-6 text-gray-600`,children:c(`pwaInstallBannerDescription`)})]}),(0,w.jsx)(`button`,{type:`button`,"aria-label":c(`pwaInstallDismiss`),className:`rounded-full p-1 text-gray-400 transition hover:bg-gray-100 hover:text-gray-600`,onClick:()=>{C.dismissInstallPrompt()},children:(0,w.jsx)(f,{className:`h-4 w-4`})})]}),(0,w.jsxs)(`div`,{className:`mt-4 flex items-center gap-3`,children:[(0,w.jsxs)(i,{type:`button`,size:`sm`,className:`gap-2`,onClick:()=>{C.promptInstall()},children:[(0,w.jsx)(s,{className:`h-4 w-4`}),c(`pwaInstallAction`)]}),(0,w.jsx)(i,{type:`button`,size:`sm`,variant:`ghost`,onClick:()=>{C.dismissInstallPrompt()},children:c(`pwaInstallDismiss`)})]})]})}var A=new class{constructor(){this.started=!1,this.registration=null,this.start=async()=>{if(!(this.started||typeof window>`u`)&&(this.started=!0,!(!(`serviceWorker`in navigator)||!this.isEligibleInstallContext()))){if(this.isDevelopmentServer()){await this.cleanupDevelopmentRegistrations();return}try{this.registration=await navigator.serviceWorker.register(`/sw.js`)}catch{return}}},this.stop=()=>{!this.started||typeof window>`u`||!(`serviceWorker`in navigator)||(this.started=!1,this.registration=null)},this.isEligibleInstallContext=()=>window.isSecureContext||this.isTrustedLocalhost(window.location.hostname),this.isTrustedLocalhost=e=>e===`localhost`||e===`127.0.0.1`||e===`::1`||e===`[::1]`,this.isDevelopmentServer=()=>!1,this.cleanupDevelopmentRegistrations=async()=>{if(typeof navigator.serviceWorker.getRegistrations!=`function`)return;let e=(await navigator.serviceWorker.getRegistrations()).filter(e=>[e.active?.scriptURL,e.installing?.scriptURL,e.waiting?.scriptURL].filter(e=>!!e).some(e=>e.endsWith(`/sw.js`)));await Promise.all(e.map(async e=>await e.unregister())),e.length>0&&await this.clearNextClawCaches()},this.clearNextClawCaches=async()=>{if(typeof window>`u`||!(`caches`in window)||typeof caches.keys!=`function`)return;let e=await caches.keys();await Promise.all(e.filter(e=>e.startsWith(`nextclaw-ui-`)).map(async e=>await caches.delete(e)))}}},j=!1;function M(){j||typeof window>`u`||(j=!0,C.start(),A.start())}var N={natural:`#FAF9F7`,work:`#FFFFFF`,minimal:`#FFFFFF`,warm:`#FAF8F4`,cool:`#F8FAFC`,dawn:`#FAF7F4`,graphite:`#F8F8F7`,night:`#101318`,charcoal:`#1C1C1C`,island:`#FBF8ED`,probe:`#FEFCF6`},P=new class{constructor(){this.syncTheme=e=>{if(typeof document>`u`)return;let t=N[e];this.updateThemeMeta(t),this.updateSurfaceBackgrounds(t),document.documentElement.style.colorScheme=u(e)},this.syncCurrentTheme=()=>{if(typeof document>`u`)return;let e=document.documentElement.getAttribute(`data-theme`);this.syncTheme(d(e)??`work`)},this.updateThemeMeta=e=>{let t=document.querySelector(`meta[name="theme-color"]`);t instanceof HTMLMetaElement&&(t.content=e)},this.updateSurfaceBackgrounds=e=>{document.documentElement.style.backgroundColor=e,document.body.style.backgroundColor=e;let t=document.getElementById(`root`);t&&(t.style.backgroundColor=e)}}};export{O as i,M as n,k as r,P as t};
@@ -0,0 +1 @@
1
+ import{tt as e}from"./app-presenter-provider-CBZ_-ewx.js";export{e as RemoteAccessPage};
@@ -1 +1 @@
1
- import{i as e}from"./chunk-DF37yw5_.js";import{A as t,M as n}from"./utils-CBZPzC_b.js";import{Gt as r,Jt as i,Kt as a,Qt as o,Ut as s,Yt as c,cn as l,fn as u,pn as d,qt as f,un as p,vn as m}from"./api-DqzQ-_3w.js";import{S as h}from"./mcp-marketplace-page-FfIfEo6w.js";import{rt as g,tt as _,v,y}from"./app-presenter-provider-V0xnU_Wb.js";import{s as b}from"./i18n-20rSH40D.js";import{a as x,i as S,n as C,r as w,t as T}from"./select-CG5YWnwe.js";import{t as E}from"./loader-circle-K1BDdHR5.js";import{t as D}from"./plus-LA8-jpxP.js";import{t as O}from"./rotate-cw-B6xm41Wn.js";import{t as k}from"./save-fff_WpY2.js";import{i as A}from"./pwa-D_nZUwG0.js";import{t as j}from"./trash-2-BPPYt2NV.js";import{b as M,t as ee}from"./use-config-BEdbtpD4.js";import{t as N}from"./form-actions-BRESe-m_.js";var P=e(n(),1),F=t(),I={healthy:`runtimeControlHealthy`,"starting-service":`runtimeControlStartingService`,"restarting-service":`runtimeControlRestartingService`,"stopping-service":`runtimeControlStoppingService`,"restarting-app":`runtimeControlRestartingApp`,recovering:`runtimeControlRecovering`,failed:`runtimeControlFailed`},L={running:`runtimeControlServiceRunning`,stopped:`runtimeControlServiceStopped`,starting:`runtimeControlServiceStarting`,stopping:`runtimeControlServiceStopping`,restarting:`runtimeControlServiceRestarting`},R={"desktop-embedded":`runtimeControlEnvironmentDesktop`,"managed-local-service":`runtimeControlEnvironmentManagedService`,"self-hosted-web":`runtimeControlEnvironmentSelfHosted`,"shared-web":`runtimeControlEnvironmentSharedWeb`};function z(e){return b(I[e]??`runtimeControlUnavailable`)}function B(e){return b(L[e]??`runtimeControlServiceUnknown`)}function V(e){return b(R[e.environment])}function H(e,t){return t===`start-service`?e?.canStartService:t===`stop-service`?e?.canStopService:e?.canRestartService}function U(e){return e?[{action:`start-service`,capability:e.canStartService,label:b(`runtimeControlStartService`),icon:`play`},{action:`restart-service`,capability:e.canRestartService,label:b(`runtimeControlRestartService`),icon:`rotate`},{action:`stop-service`,capability:e.canStopService,label:b(`runtimeControlStopService`),icon:`square`,variant:`destructive`},{action:`restart-app`,capability:e.canRestartApp,label:b(`runtimeControlRestartApp`),icon:`rotate`,variant:`secondary`}].filter(e=>e.capability.available||!!e.capability.reasonIfUnavailable):[]}function W(e){let{busy:t,icon:n}=e;return t?(0,F.jsx)(E,{className:`mr-2 h-4 w-4 animate-spin`}):n===`play`?(0,F.jsx)(g,{className:`mr-2 h-4 w-4`}):n===`square`?(0,F.jsx)(_,{className:`mr-2 h-4 w-4`}):(0,F.jsx)(O,{className:`mr-2 h-4 w-4`})}function G(){let{busy:e,busyAction:t,controlView:n,errorMessage:r,pendingRestart:a,visibleLifecycle:o,visibleMessage:s,visibleServiceState:p}=l(),h=U(n??void 0),g=async e=>{let t=H(n,e);if(!t?.available){m.error(d(t?.reasonIfUnavailable)??b(`runtimeControlLoadFailed`));return}if(!(e===`stop-service`&&t.requiresConfirmation&&!window.confirm(b(`runtimeControlStopServiceConfirm`))))try{let t=await u.runRuntimeControlAction(e);m.success(d(t.message)??t.message)}catch(e){let t=e instanceof Error?e.message:b(`runtimeControlActionFailed`);m.error(`${b(`runtimeControlActionFailed`)}: ${t}`)}},_=async()=>{if(!n?.canRestartApp.available){m.error(d(n?.canRestartApp.reasonIfUnavailable)??b(`runtimeRestartAppUnavailable`));return}if(window.confirm(b(`runtimeControlRestartAppConfirm`)))try{let e=await u.runRuntimeControlAction(`restart-app`);m.success(d(e.message)??e.message)}catch(e){let t=e instanceof Error?e.message:b(`runtimeControlActionFailed`);m.error(`${b(`runtimeControlActionFailed`)}: ${t}`)}};return(0,F.jsx)(i,{title:b(`runtimeControlTitle`),description:b(`runtimeControlDescription`),children:(0,F.jsxs)(f,{children:[(0,F.jsxs)(`div`,{className:`space-y-3 p-4`,children:[(0,F.jsxs)(`div`,{className:`flex flex-col gap-1 md:flex-row md:items-center md:justify-between`,children:[(0,F.jsx)(`div`,{className:`text-sm font-medium text-foreground`,children:B(p)}),(0,F.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:n?V(n):b(`runtimeControlLoading`)})]}),(0,F.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:s}),(0,F.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:z(o)}),n?.managementHint?(0,F.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:d(n.managementHint)}):null,r&&!e?(0,F.jsx)(`p`,{className:`text-sm text-amber-700`,children:r}):null]}),a?(0,F.jsxs)(`div`,{className:`space-y-3 bg-amber-50/75 p-4 dark:bg-amber-950/20`,children:[(0,F.jsx)(`div`,{className:`text-sm font-medium text-amber-900`,children:b(`runtimeControlPendingRestartTitle`)}),(0,F.jsx)(`p`,{className:`text-sm text-amber-800`,children:b(`runtimeControlPendingRestartDescription`)}),a.changedPaths.length>0?(0,F.jsxs)(`div`,{className:`space-y-2`,children:[(0,F.jsx)(`div`,{className:`text-xs font-medium uppercase tracking-[0.08em] text-amber-700`,children:b(`runtimeControlPendingRestartPaths`)}),(0,F.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:a.changedPaths.map(e=>(0,F.jsx)(`span`,{className:`rounded-full bg-background/80 px-2.5 py-1 text-xs text-amber-800 dark:text-amber-300`,children:e},e))})]}):null]}):null,(0,F.jsxs)(`div`,{className:`space-y-3 p-4`,children:[(0,F.jsx)(`div`,{className:`flex flex-col gap-3 md:flex-row md:flex-wrap`,children:h.map(n=>(0,F.jsxs)(c,{type:`button`,variant:n.variant??`default`,onClick:()=>{if(n.action===`restart-app`){_();return}g(n.action)},disabled:!n.capability.available||e,children:[(0,F.jsx)(W,{icon:n.icon,busy:t===n.action}),n.label]},n.action))}),h.filter(e=>!e.capability.available&&e.capability.reasonIfUnavailable).map(e=>(0,F.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:d(e.capability.reasonIfUnavailable)},`${e.action}-reason`))]})]})})}function K(e){let{description:t,title:n}=e;return(0,F.jsx)(h,{tone:`neutral`,title:n,description:t})}function q(e){let{children:t}=e;return(0,F.jsx)(i,{title:b(`runtimePresenceTitle`),description:b(`runtimePresenceDescription`),children:(0,F.jsx)(f,{children:t})})}function J(){let e=p().runtimeControlView?.environment,t=y(e=>e.supported),n=y(e=>e.initialized),r=y(e=>e.busyAction),i=y(e=>e.snapshot);return(0,P.useEffect)(()=>{if(e===`desktop-embedded`){v.start();return}v.markUnsupported()},[e]),e===`desktop-embedded`?(0,F.jsxs)(q,{children:[(0,F.jsx)(`div`,{className:`p-4`,children:(0,F.jsx)(h,{tone:`neutral`,title:b(`runtimePresenceBehaviorLabel`),description:i?.closeToBackground?b(`runtimePresenceBehaviorBackground`):b(`runtimePresenceBehaviorQuit`),className:`rounded-xl`})}),!n||t&&!i?(0,F.jsx)(`p`,{className:`p-4 text-sm text-muted-foreground`,children:b(`runtimePresenceLoading`)}):null,i?(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(a,{title:b(`runtimePresenceCloseToBackground`),description:b(`runtimePresenceCloseToBackgroundHelp`),control:(0,F.jsx)(s,{id:`runtime-presence-close-background`,"aria-label":b(`runtimePresenceCloseToBackground`),checked:i.closeToBackground,disabled:r===`saving-preferences`,onCheckedChange:e=>{v.updatePreferences({closeToBackground:e})}})}),(0,F.jsx)(a,{title:b(`runtimePresenceLaunchAtLogin`),description:i.supportsLaunchAtLogin?b(`runtimePresenceLaunchAtLoginHelp`):i.launchAtLoginReason??b(`runtimePresenceLaunchAtLoginUnavailable`),control:(0,F.jsx)(s,{id:`runtime-presence-launch-login`,"aria-label":b(`runtimePresenceLaunchAtLogin`),checked:i.launchAtLogin,disabled:!i.supportsLaunchAtLogin||r===`saving-preferences`,onCheckedChange:e=>{v.updatePreferences({launchAtLogin:e})}})})]}):null]}):e===`managed-local-service`?(0,F.jsx)(q,{children:(0,F.jsx)(`div`,{className:`p-4`,children:(0,F.jsx)(K,{title:b(`runtimePresenceManagedLocalTitle`),description:b(`runtimePresenceManagedLocalDescription`)})})}):e===`self-hosted-web`?(0,F.jsx)(q,{children:(0,F.jsx)(`div`,{className:`p-4`,children:(0,F.jsx)(K,{title:b(`runtimePresenceSelfHostedTitle`),description:b(`runtimePresenceSelfHostedDescription`)})})}):e===`shared-web`?(0,F.jsx)(q,{children:(0,F.jsx)(`div`,{className:`p-4`,children:(0,F.jsx)(K,{title:b(`runtimePresenceSharedTitle`),description:b(`runtimePresenceSharedDescription`)})})}):(0,F.jsx)(q,{children:(0,F.jsx)(`p`,{className:`p-4 text-sm text-muted-foreground`,children:b(`runtimePresenceLoading`)})})}function te(){return(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(G,{}),(0,F.jsx)(J,{}),(0,F.jsx)(A,{})]})}var Y={wireDialect:`acp`,processScope:`per-session`,command:``,args:[`acp`],env:{},cwd:``,startupTimeoutMs:8e3,probeTimeoutMs:3e3,requestTimeoutMs:12e4};function X(){return{id:``,default:!1,workspace:``,model:``,runtime:``,contextTokens:void 0}}function Z(){return{agentId:``,match:{channel:``,accountId:``}}}function Q(){return{id:``,enabled:!0,label:``,type:`narp-stdio`,config:Y,configText:JSON.stringify(Y,null,2)}}function ne(e){return{id:e.id??``,default:!!e.default,displayName:e.displayName??``,description:e.description??``,avatar:e.avatar??``,workspace:e.workspace??``,model:e.model??``,runtime:e.runtime??e.engine??``,contextTokens:e.contextTokens}}function re(e){return{agentId:e.agentId??``,match:{channel:e.match?.channel??``,accountId:e.match?.accountId??``,peer:e.match?.peer?{kind:e.match.peer.kind,id:e.match.peer.id}:void 0}}}function ie(e){let t=e.trim();if(!t)return;let n=Number.parseInt(t,10);return Number.isFinite(n)?n:void 0}function ae(e){return{companionEnabled:e.companion?.enabled===!0,agents:(e.agents.list??[]).map(ne),bindings:(e.bindings??[]).map(re),runtimeEntries:Object.entries(e.agents.runtimes?.entries??{}).map(([e,t])=>({id:e,enabled:t.enabled!==!1,label:t.label??``,type:t.type,config:t.config??{},configText:JSON.stringify(t.config??{},null,2)})),dmScope:e.session?.dmScope??`per-channel-peer`,defaultContextTokens:e.agents.defaults.contextTokens??2e5,defaultEngine:e.agents.defaults.engine??`native`}}function oe(e){let t={id:e.id.trim()};e.default&&(t.default=!0),e.displayName?.trim()&&(t.displayName=e.displayName.trim()),e.description?.trim()&&(t.description=e.description.trim()),e.avatar?.trim()&&(t.avatar=e.avatar.trim()),e.workspace?.trim()&&(t.workspace=e.workspace.trim()),e.model?.trim()&&(t.model=e.model.trim());let n=e.runtime?.trim()??e.engine?.trim();return n&&(t.engine=n),typeof e.contextTokens==`number`&&(t.contextTokens=Math.max(1e3,e.contextTokens)),t}function $(e){let t=e.agents.map((e,t)=>{if(!e.id.trim())throw Error(b(`agentIdRequiredError`).replace(`{index}`,String(t)));return oe(e)}),n=t.map(e=>e.id).filter((e,t,n)=>n.indexOf(e)!==t);if(n.length>0)throw Error(`${b(`duplicateAgentId`)}: ${n[0]}`);let r=e.bindings.map((t,n)=>{let r=t.agentId.trim(),i=t.match.channel.trim(),a=t.match.accountId?.trim()??``,o=t.match.peer?.kind,s=t.match.peer?.id?.trim()??``;if(!r)throw Error(b(`bindingAgentIdRequired`).replace(`{index}`,String(n)));if(!e.knownAgentIds.has(r))throw Error(`${b(`bindingAgentIdNotFound`).replace(`{index}`,String(n))}: ${r}`);if(!i)throw Error(b(`bindingChannelRequired`).replace(`{index}`,String(n)));let c={agentId:r,match:{channel:i}};if(a&&(c.match.accountId=a),o){if(!s)throw Error(b(`bindingPeerIdRequired`).replace(`{index}`,String(n)));c.match.peer={kind:o,id:s}}return c}),i=e.runtimeEntries.reduce((e,t,n)=>{let r=t.id.trim(),i=t.type.trim();if(!r)throw Error(b(`runtimeEntryIdRequired`).replace(`{index}`,String(n)));if(!i)throw Error(b(`runtimeEntryTypeRequired`).replace(`{id}`,r));if(e[r])throw Error(`${b(`runtimeEntryDuplicate`)}: ${r}`);let a=t.configText.trim()?JSON.parse(t.configText):{};if(a&&(typeof a!=`object`||Array.isArray(a)))throw Error(b(`runtimeEntryConfigObjectRequired`).replace(`{id}`,r));return e[r]={enabled:t.enabled!==!1,...t.label?.trim()?{label:t.label.trim()}:{},type:i,config:a??{}},e},{});return{companion:{enabled:e.companionEnabled},agents:{defaults:{contextTokens:Math.max(1e3,e.defaultContextTokens),engine:e.defaultEngine.trim()||`native`},list:t,runtimes:{entries:i}},bindings:r,session:{dmScope:e.dmScope}}}function se({agents:e,onAddAgent:t,onRemoveAgent:n,onSetDefaultAgent:a,onUpdateAgent:o}){return(0,F.jsx)(i,{title:b(`agentList`),description:b(`agentListHelp`),actions:(0,F.jsxs)(c,{type:`button`,variant:`ghost`,size:`sm`,onClick:t,children:[(0,F.jsx)(D,{className:`mr-2 h-4 w-4`}),b(`addAgent`)]}),children:(0,F.jsx)(f,{children:e.map((e,t)=>(0,F.jsxs)(`div`,{className:`space-y-3 p-4`,children:[(0,F.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 gap-3`,children:[(0,F.jsx)(r,{value:e.id,onChange:e=>o(t,{id:e.target.value}),placeholder:b(`agentIdPlaceholder`)}),(0,F.jsx)(r,{value:e.workspace??``,onChange:e=>o(t,{workspace:e.target.value}),placeholder:b(`workspaceOverridePlaceholder`)}),(0,F.jsx)(r,{value:e.model??``,onChange:e=>o(t,{model:e.target.value}),placeholder:b(`modelOverridePlaceholder`)}),(0,F.jsx)(r,{value:e.runtime??e.engine??``,onChange:e=>o(t,{runtime:e.target.value}),placeholder:b(`engineOverridePlaceholder`)}),(0,F.jsx)(r,{type:`number`,min:1e3,step:1e3,value:e.contextTokens??``,onChange:e=>o(t,{contextTokens:ie(e.target.value)}),placeholder:b(`contextTokensPlaceholder`)})]}),(0,F.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,F.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,F.jsx)(s,{checked:!!e.default,onCheckedChange:e=>a(t,e)}),(0,F.jsx)(`span`,{children:b(`defaultAgent`)})]}),(0,F.jsxs)(c,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>n(t),children:[(0,F.jsx)(j,{className:`h-4 w-4 mr-1`}),b(`remove`)]})]})]},`${t}-${e.id}`))})})}function ce({bindings:e,onAddBinding:t,onRemoveBinding:n,onUpdateBinding:a}){return(0,F.jsx)(i,{title:b(`bindings`),description:b(`bindingsHelp`),actions:(0,F.jsxs)(c,{type:`button`,variant:`ghost`,size:`sm`,onClick:t,children:[(0,F.jsx)(D,{className:`mr-2 h-4 w-4`}),b(`addBinding`)]}),children:(0,F.jsx)(f,{children:e.map((e,t)=>{let i=e.match.peer?.kind??``;return(0,F.jsxs)(`div`,{className:`space-y-3 p-4`,children:[(0,F.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3`,children:[(0,F.jsx)(r,{value:e.agentId,onChange:n=>a(t,{...e,agentId:n.target.value}),placeholder:b(`targetAgentIdPlaceholder`)}),(0,F.jsx)(r,{value:e.match.channel,onChange:n=>a(t,{...e,match:{...e.match,channel:n.target.value}}),placeholder:b(`channelPlaceholder`)}),(0,F.jsx)(r,{value:e.match.accountId??``,onChange:n=>a(t,{...e,match:{...e.match,accountId:n.target.value}}),placeholder:b(`accountIdOptionalPlaceholder`)}),(0,F.jsxs)(T,{value:i||`__none__`,onValueChange:n=>{let r=n===`__none__`?``:n;a(t,r?{...e,match:{...e.match,peer:{kind:r,id:e.match.peer?.id??``}}}:{...e,match:{...e.match,peer:void 0}})},children:[(0,F.jsx)(S,{children:(0,F.jsx)(x,{})}),(0,F.jsxs)(C,{children:[(0,F.jsx)(w,{value:`__none__`,children:b(`peerKindOptional`)}),(0,F.jsx)(w,{value:`direct`,children:b(`peerKindDirect`)}),(0,F.jsx)(w,{value:`group`,children:b(`peerKindGroup`)}),(0,F.jsx)(w,{value:`channel`,children:b(`peerKindChannel`)})]})]}),(0,F.jsx)(r,{value:e.match.peer?.id??``,onChange:n=>a(t,{...e,match:{...e.match,peer:i?{kind:i,id:n.target.value}:void 0}}),placeholder:b(`peerIdPlaceholder`)})]}),(0,F.jsx)(`div`,{className:`flex justify-end`,children:(0,F.jsxs)(c,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>n(t),children:[(0,F.jsx)(j,{className:`h-4 w-4 mr-1`}),b(`remove`)]})})]},`${t}-${e.agentId}`)})})})}function le({entries:e,onAddEntry:t,onRemoveEntry:n,onUpdateEntry:a}){return(0,F.jsx)(i,{title:b(`runtimeEntries`),description:b(`runtimeEntriesHelp`),actions:(0,F.jsxs)(c,{type:`button`,variant:`ghost`,size:`sm`,onClick:t,children:[(0,F.jsx)(D,{className:`mr-2 h-4 w-4`}),b(`addRuntimeEntry`)]}),children:(0,F.jsx)(f,{children:e.map((e,t)=>(0,F.jsxs)(`div`,{className:`space-y-3 p-4`,children:[(0,F.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 gap-3`,children:[(0,F.jsx)(r,{value:e.id,onChange:e=>a(t,{id:e.target.value}),placeholder:b(`runtimeEntryIdPlaceholder`)}),(0,F.jsx)(r,{value:e.label??``,onChange:e=>a(t,{label:e.target.value}),placeholder:b(`runtimeEntryLabelPlaceholder`)}),(0,F.jsx)(r,{value:e.type,onChange:e=>a(t,{type:e.target.value}),placeholder:b(`runtimeEntryTypePlaceholder`)}),(0,F.jsxs)(`div`,{className:`flex items-center justify-between rounded-lg bg-background/65 px-3 py-2`,children:[(0,F.jsx)(`span`,{className:`text-sm text-foreground`,children:b(`enabled`)}),(0,F.jsx)(s,{checked:e.enabled!==!1,onCheckedChange:e=>a(t,{enabled:e})})]})]}),(0,F.jsxs)(`div`,{className:`space-y-2`,children:[(0,F.jsx)(`label`,{className:`text-sm font-medium text-foreground`,children:b(`runtimeEntryConfigJson`)}),(0,F.jsx)(`textarea`,{className:`min-h-32 w-full rounded-md border border-input bg-background px-3 py-2 font-mono text-sm`,value:e.configText,onChange:e=>a(t,{configText:e.target.value}),spellCheck:!1})]}),(0,F.jsx)(`div`,{className:`flex justify-end`,children:(0,F.jsxs)(c,{type:`button`,variant:`outline`,onClick:()=>n(t),children:[(0,F.jsx)(j,{className:`mr-2 h-4 w-4`}),b(`delete`)]})})]},`${t}-${e.id||`runtime-entry`}`))})})}var ue=[{value:`main`,labelKey:`dmScopeMain`},{value:`per-peer`,labelKey:`dmScopePerPeer`},{value:`per-channel-peer`,labelKey:`dmScopePerChannelPeer`},{value:`per-account-channel-peer`,labelKey:`dmScopePerAccountChannelPeer`}];function de({companionEnabled:e,defaultContextTokens:t,defaultEngine:n,dmScope:o,onCompanionEnabledChange:c,onDefaultContextTokensChange:l,onDefaultEngineChange:u,onDmScopeChange:d}){return(0,F.jsx)(i,{title:b(`dmScope`),description:b(`dmScopeHelp`),children:(0,F.jsxs)(f,{children:[(0,F.jsx)(a,{title:b(`runtimeCompanionEnabled`),description:b(`runtimeCompanionEnabledHelp`),control:(0,F.jsx)(s,{checked:e,onCheckedChange:c})}),(0,F.jsx)(a,{title:b(`defaultContextTokens`),description:b(`defaultContextTokensHelp`),control:(0,F.jsx)(r,{type:`number`,min:1e3,step:1e3,value:t,onChange:e=>l(Math.max(1e3,Number.parseInt(e.target.value,10)||1e3)),className:`w-36`})}),(0,F.jsx)(a,{title:b(`defaultEngine`),description:b(`defaultEngineHelp`),control:(0,F.jsx)(r,{value:n,onChange:e=>u(e.target.value),placeholder:b(`defaultEnginePlaceholder`),className:`w-56`})}),(0,F.jsx)(a,{title:b(`dmScope`),control:(0,F.jsxs)(T,{value:o,onValueChange:e=>d(e),children:[(0,F.jsx)(S,{className:`w-56`,children:(0,F.jsx)(x,{})}),(0,F.jsx)(C,{children:ue.map(e=>(0,F.jsx)(w,{value:e.value,children:b(e.labelKey)},e.value))})]})})]})})}function fe({config:e,updateRuntime:t}){let n=(0,P.useMemo)(()=>ae(e),[e]),[r,i]=(0,P.useState)(n.agents),[a,s]=(0,P.useState)(n.bindings),[l,u]=(0,P.useState)(n.runtimeEntries),[d,f]=(0,P.useState)(n.dmScope),[p,h]=(0,P.useState)(n.companionEnabled),[g,_]=(0,P.useState)(n.defaultContextTokens),[v,y]=(0,P.useState)(n.defaultEngine),x=(0,P.useMemo)(()=>{let e=new Set([`main`]);return r.forEach(t=>{let n=t.id.trim();n&&e.add(n)}),e},[r]);return(0,F.jsxs)(o,{title:b(`runtimePageTitle`),description:b(`runtimePageDescription`),children:[(0,F.jsx)(te,{}),(0,F.jsx)(de,{companionEnabled:p,dmScope:d,defaultContextTokens:g,defaultEngine:v,onCompanionEnabledChange:h,onDmScopeChange:f,onDefaultContextTokensChange:_,onDefaultEngineChange:y}),(0,F.jsx)(le,{entries:l,onUpdateEntry:(e,t)=>u(n=>n.map((n,r)=>r===e?{...n,...t}:n)),onRemoveEntry:e=>u(t=>t.filter((t,n)=>n!==e)),onAddEntry:()=>u(e=>[...e,Q()])}),(0,F.jsx)(se,{agents:r,onUpdateAgent:(e,t)=>{i(n=>n.map((n,r)=>r===e?{...n,...t}:n))},onRemoveAgent:e=>i(t=>t.filter((t,n)=>n!==e)),onAddAgent:()=>i(e=>[...e,X()]),onSetDefaultAgent:(e,t)=>i(n=>t?n.map((t,n)=>({...t,default:n===e})):n.map((t,n)=>n===e?{...t,default:!1}:t))}),(0,F.jsx)(ce,{bindings:a,onUpdateBinding:(e,t)=>{s(n=>n.map((n,r)=>r===e?t:n))},onRemoveBinding:e=>s(t=>t.filter((t,n)=>n!==e)),onAddBinding:()=>s(e=>[...e,Z()])}),(0,F.jsx)(N,{children:(0,F.jsxs)(c,{type:`button`,size:`sm`,onClick:()=>{try{let e=$({companionEnabled:p,agents:r,bindings:a,runtimeEntries:l,dmScope:d,defaultContextTokens:g,defaultEngine:v,knownAgentIds:x});t.mutate({data:e})}catch(e){m.error(e instanceof Error?e.message:String(e))}},disabled:t.isPending,children:[(0,F.jsx)(k,{className:`mr-1.5 h-3.5 w-3.5`}),t.isPending?b(`saving`):b(`saveRuntimeSettings`)]})})]})}function pe(){let{data:e,isLoading:t}=ee(),n=M();return t||!e?(0,F.jsx)(o,{title:b(`runtimePageTitle`),description:b(`runtimePageDescription`),children:(0,F.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:b(`runtimeLoading`)})}):(0,F.jsx)(fe,{config:e,updateRuntime:n})}export{pe as RuntimeConfig};
1
+ import{i as e}from"./chunk-DF37yw5_.js";import{A as t,M as n}from"./utils-CBZPzC_b.js";import{Gt as r,Jt as i,Kt as a,Qt as o,Ut as s,Yt as c,cn as l,fn as u,pn as d,qt as f,un as p,vn as m}from"./api-DqzQ-_3w.js";import{S as h}from"./mcp-marketplace-page-FfIfEo6w.js";import{it as g,nt as _,v,y}from"./app-presenter-provider-CBZ_-ewx.js";import{s as b}from"./i18n-20rSH40D.js";import{a as x,i as S,n as C,r as w,t as T}from"./select-CG5YWnwe.js";import{t as E}from"./loader-circle-K1BDdHR5.js";import{t as D}from"./plus-LA8-jpxP.js";import{t as O}from"./rotate-cw-B6xm41Wn.js";import{t as k}from"./save-fff_WpY2.js";import{i as A}from"./pwa-CzqfYjFx.js";import{t as j}from"./trash-2-BPPYt2NV.js";import{b as M,t as ee}from"./use-config-BEdbtpD4.js";import{t as N}from"./form-actions-BRESe-m_.js";var P=e(n(),1),F=t(),I={healthy:`runtimeControlHealthy`,"starting-service":`runtimeControlStartingService`,"restarting-service":`runtimeControlRestartingService`,"stopping-service":`runtimeControlStoppingService`,"restarting-app":`runtimeControlRestartingApp`,recovering:`runtimeControlRecovering`,failed:`runtimeControlFailed`},L={running:`runtimeControlServiceRunning`,stopped:`runtimeControlServiceStopped`,starting:`runtimeControlServiceStarting`,stopping:`runtimeControlServiceStopping`,restarting:`runtimeControlServiceRestarting`},R={"desktop-embedded":`runtimeControlEnvironmentDesktop`,"managed-local-service":`runtimeControlEnvironmentManagedService`,"self-hosted-web":`runtimeControlEnvironmentSelfHosted`,"shared-web":`runtimeControlEnvironmentSharedWeb`};function z(e){return b(I[e]??`runtimeControlUnavailable`)}function B(e){return b(L[e]??`runtimeControlServiceUnknown`)}function V(e){return b(R[e.environment])}function H(e,t){return t===`start-service`?e?.canStartService:t===`stop-service`?e?.canStopService:e?.canRestartService}function U(e){return e?[{action:`start-service`,capability:e.canStartService,label:b(`runtimeControlStartService`),icon:`play`},{action:`restart-service`,capability:e.canRestartService,label:b(`runtimeControlRestartService`),icon:`rotate`},{action:`stop-service`,capability:e.canStopService,label:b(`runtimeControlStopService`),icon:`square`,variant:`destructive`},{action:`restart-app`,capability:e.canRestartApp,label:b(`runtimeControlRestartApp`),icon:`rotate`,variant:`secondary`}].filter(e=>e.capability.available||!!e.capability.reasonIfUnavailable):[]}function W(e){let{busy:t,icon:n}=e;return t?(0,F.jsx)(E,{className:`mr-2 h-4 w-4 animate-spin`}):n===`play`?(0,F.jsx)(g,{className:`mr-2 h-4 w-4`}):n===`square`?(0,F.jsx)(_,{className:`mr-2 h-4 w-4`}):(0,F.jsx)(O,{className:`mr-2 h-4 w-4`})}function G(){let{busy:e,busyAction:t,controlView:n,errorMessage:r,pendingRestart:a,visibleLifecycle:o,visibleMessage:s,visibleServiceState:p}=l(),h=U(n??void 0),g=async e=>{let t=H(n,e);if(!t?.available){m.error(d(t?.reasonIfUnavailable)??b(`runtimeControlLoadFailed`));return}if(!(e===`stop-service`&&t.requiresConfirmation&&!window.confirm(b(`runtimeControlStopServiceConfirm`))))try{let t=await u.runRuntimeControlAction(e);m.success(d(t.message)??t.message)}catch(e){let t=e instanceof Error?e.message:b(`runtimeControlActionFailed`);m.error(`${b(`runtimeControlActionFailed`)}: ${t}`)}},_=async()=>{if(!n?.canRestartApp.available){m.error(d(n?.canRestartApp.reasonIfUnavailable)??b(`runtimeRestartAppUnavailable`));return}if(window.confirm(b(`runtimeControlRestartAppConfirm`)))try{let e=await u.runRuntimeControlAction(`restart-app`);m.success(d(e.message)??e.message)}catch(e){let t=e instanceof Error?e.message:b(`runtimeControlActionFailed`);m.error(`${b(`runtimeControlActionFailed`)}: ${t}`)}};return(0,F.jsx)(i,{title:b(`runtimeControlTitle`),description:b(`runtimeControlDescription`),children:(0,F.jsxs)(f,{children:[(0,F.jsxs)(`div`,{className:`space-y-3 p-4`,children:[(0,F.jsxs)(`div`,{className:`flex flex-col gap-1 md:flex-row md:items-center md:justify-between`,children:[(0,F.jsx)(`div`,{className:`text-sm font-medium text-foreground`,children:B(p)}),(0,F.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:n?V(n):b(`runtimeControlLoading`)})]}),(0,F.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:s}),(0,F.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:z(o)}),n?.managementHint?(0,F.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:d(n.managementHint)}):null,r&&!e?(0,F.jsx)(`p`,{className:`text-sm text-amber-700`,children:r}):null]}),a?(0,F.jsxs)(`div`,{className:`space-y-3 bg-amber-50/75 p-4 dark:bg-amber-950/20`,children:[(0,F.jsx)(`div`,{className:`text-sm font-medium text-amber-900`,children:b(`runtimeControlPendingRestartTitle`)}),(0,F.jsx)(`p`,{className:`text-sm text-amber-800`,children:b(`runtimeControlPendingRestartDescription`)}),a.changedPaths.length>0?(0,F.jsxs)(`div`,{className:`space-y-2`,children:[(0,F.jsx)(`div`,{className:`text-xs font-medium uppercase tracking-[0.08em] text-amber-700`,children:b(`runtimeControlPendingRestartPaths`)}),(0,F.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:a.changedPaths.map(e=>(0,F.jsx)(`span`,{className:`rounded-full bg-background/80 px-2.5 py-1 text-xs text-amber-800 dark:text-amber-300`,children:e},e))})]}):null]}):null,(0,F.jsxs)(`div`,{className:`space-y-3 p-4`,children:[(0,F.jsx)(`div`,{className:`flex flex-col gap-3 md:flex-row md:flex-wrap`,children:h.map(n=>(0,F.jsxs)(c,{type:`button`,variant:n.variant??`default`,onClick:()=>{if(n.action===`restart-app`){_();return}g(n.action)},disabled:!n.capability.available||e,children:[(0,F.jsx)(W,{icon:n.icon,busy:t===n.action}),n.label]},n.action))}),h.filter(e=>!e.capability.available&&e.capability.reasonIfUnavailable).map(e=>(0,F.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:d(e.capability.reasonIfUnavailable)},`${e.action}-reason`))]})]})})}function K(e){let{description:t,title:n}=e;return(0,F.jsx)(h,{tone:`neutral`,title:n,description:t})}function q(e){let{children:t}=e;return(0,F.jsx)(i,{title:b(`runtimePresenceTitle`),description:b(`runtimePresenceDescription`),children:(0,F.jsx)(f,{children:t})})}function J(){let e=p().runtimeControlView?.environment,t=y(e=>e.supported),n=y(e=>e.initialized),r=y(e=>e.busyAction),i=y(e=>e.snapshot);return(0,P.useEffect)(()=>{if(e===`desktop-embedded`){v.start();return}v.markUnsupported()},[e]),e===`desktop-embedded`?(0,F.jsxs)(q,{children:[(0,F.jsx)(`div`,{className:`p-4`,children:(0,F.jsx)(h,{tone:`neutral`,title:b(`runtimePresenceBehaviorLabel`),description:i?.closeToBackground?b(`runtimePresenceBehaviorBackground`):b(`runtimePresenceBehaviorQuit`),className:`rounded-xl`})}),!n||t&&!i?(0,F.jsx)(`p`,{className:`p-4 text-sm text-muted-foreground`,children:b(`runtimePresenceLoading`)}):null,i?(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(a,{title:b(`runtimePresenceCloseToBackground`),description:b(`runtimePresenceCloseToBackgroundHelp`),control:(0,F.jsx)(s,{id:`runtime-presence-close-background`,"aria-label":b(`runtimePresenceCloseToBackground`),checked:i.closeToBackground,disabled:r===`saving-preferences`,onCheckedChange:e=>{v.updatePreferences({closeToBackground:e})}})}),(0,F.jsx)(a,{title:b(`runtimePresenceLaunchAtLogin`),description:i.supportsLaunchAtLogin?b(`runtimePresenceLaunchAtLoginHelp`):i.launchAtLoginReason??b(`runtimePresenceLaunchAtLoginUnavailable`),control:(0,F.jsx)(s,{id:`runtime-presence-launch-login`,"aria-label":b(`runtimePresenceLaunchAtLogin`),checked:i.launchAtLogin,disabled:!i.supportsLaunchAtLogin||r===`saving-preferences`,onCheckedChange:e=>{v.updatePreferences({launchAtLogin:e})}})})]}):null]}):e===`managed-local-service`?(0,F.jsx)(q,{children:(0,F.jsx)(`div`,{className:`p-4`,children:(0,F.jsx)(K,{title:b(`runtimePresenceManagedLocalTitle`),description:b(`runtimePresenceManagedLocalDescription`)})})}):e===`self-hosted-web`?(0,F.jsx)(q,{children:(0,F.jsx)(`div`,{className:`p-4`,children:(0,F.jsx)(K,{title:b(`runtimePresenceSelfHostedTitle`),description:b(`runtimePresenceSelfHostedDescription`)})})}):e===`shared-web`?(0,F.jsx)(q,{children:(0,F.jsx)(`div`,{className:`p-4`,children:(0,F.jsx)(K,{title:b(`runtimePresenceSharedTitle`),description:b(`runtimePresenceSharedDescription`)})})}):(0,F.jsx)(q,{children:(0,F.jsx)(`p`,{className:`p-4 text-sm text-muted-foreground`,children:b(`runtimePresenceLoading`)})})}function te(){return(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(G,{}),(0,F.jsx)(J,{}),(0,F.jsx)(A,{})]})}var Y={wireDialect:`acp`,processScope:`per-session`,command:``,args:[`acp`],env:{},cwd:``,startupTimeoutMs:8e3,probeTimeoutMs:3e3,requestTimeoutMs:12e4};function X(){return{id:``,default:!1,workspace:``,model:``,runtime:``,contextTokens:void 0}}function Z(){return{agentId:``,match:{channel:``,accountId:``}}}function Q(){return{id:``,enabled:!0,label:``,type:`narp-stdio`,config:Y,configText:JSON.stringify(Y,null,2)}}function ne(e){return{id:e.id??``,default:!!e.default,displayName:e.displayName??``,description:e.description??``,avatar:e.avatar??``,workspace:e.workspace??``,model:e.model??``,runtime:e.runtime??e.engine??``,contextTokens:e.contextTokens}}function re(e){return{agentId:e.agentId??``,match:{channel:e.match?.channel??``,accountId:e.match?.accountId??``,peer:e.match?.peer?{kind:e.match.peer.kind,id:e.match.peer.id}:void 0}}}function ie(e){let t=e.trim();if(!t)return;let n=Number.parseInt(t,10);return Number.isFinite(n)?n:void 0}function ae(e){return{companionEnabled:e.companion?.enabled===!0,agents:(e.agents.list??[]).map(ne),bindings:(e.bindings??[]).map(re),runtimeEntries:Object.entries(e.agents.runtimes?.entries??{}).map(([e,t])=>({id:e,enabled:t.enabled!==!1,label:t.label??``,type:t.type,config:t.config??{},configText:JSON.stringify(t.config??{},null,2)})),dmScope:e.session?.dmScope??`per-channel-peer`,defaultContextTokens:e.agents.defaults.contextTokens??2e5,defaultEngine:e.agents.defaults.engine??`native`}}function oe(e){let t={id:e.id.trim()};e.default&&(t.default=!0),e.displayName?.trim()&&(t.displayName=e.displayName.trim()),e.description?.trim()&&(t.description=e.description.trim()),e.avatar?.trim()&&(t.avatar=e.avatar.trim()),e.workspace?.trim()&&(t.workspace=e.workspace.trim()),e.model?.trim()&&(t.model=e.model.trim());let n=e.runtime?.trim()??e.engine?.trim();return n&&(t.engine=n),typeof e.contextTokens==`number`&&(t.contextTokens=Math.max(1e3,e.contextTokens)),t}function $(e){let t=e.agents.map((e,t)=>{if(!e.id.trim())throw Error(b(`agentIdRequiredError`).replace(`{index}`,String(t)));return oe(e)}),n=t.map(e=>e.id).filter((e,t,n)=>n.indexOf(e)!==t);if(n.length>0)throw Error(`${b(`duplicateAgentId`)}: ${n[0]}`);let r=e.bindings.map((t,n)=>{let r=t.agentId.trim(),i=t.match.channel.trim(),a=t.match.accountId?.trim()??``,o=t.match.peer?.kind,s=t.match.peer?.id?.trim()??``;if(!r)throw Error(b(`bindingAgentIdRequired`).replace(`{index}`,String(n)));if(!e.knownAgentIds.has(r))throw Error(`${b(`bindingAgentIdNotFound`).replace(`{index}`,String(n))}: ${r}`);if(!i)throw Error(b(`bindingChannelRequired`).replace(`{index}`,String(n)));let c={agentId:r,match:{channel:i}};if(a&&(c.match.accountId=a),o){if(!s)throw Error(b(`bindingPeerIdRequired`).replace(`{index}`,String(n)));c.match.peer={kind:o,id:s}}return c}),i=e.runtimeEntries.reduce((e,t,n)=>{let r=t.id.trim(),i=t.type.trim();if(!r)throw Error(b(`runtimeEntryIdRequired`).replace(`{index}`,String(n)));if(!i)throw Error(b(`runtimeEntryTypeRequired`).replace(`{id}`,r));if(e[r])throw Error(`${b(`runtimeEntryDuplicate`)}: ${r}`);let a=t.configText.trim()?JSON.parse(t.configText):{};if(a&&(typeof a!=`object`||Array.isArray(a)))throw Error(b(`runtimeEntryConfigObjectRequired`).replace(`{id}`,r));return e[r]={enabled:t.enabled!==!1,...t.label?.trim()?{label:t.label.trim()}:{},type:i,config:a??{}},e},{});return{companion:{enabled:e.companionEnabled},agents:{defaults:{contextTokens:Math.max(1e3,e.defaultContextTokens),engine:e.defaultEngine.trim()||`native`},list:t,runtimes:{entries:i}},bindings:r,session:{dmScope:e.dmScope}}}function se({agents:e,onAddAgent:t,onRemoveAgent:n,onSetDefaultAgent:a,onUpdateAgent:o}){return(0,F.jsx)(i,{title:b(`agentList`),description:b(`agentListHelp`),actions:(0,F.jsxs)(c,{type:`button`,variant:`ghost`,size:`sm`,onClick:t,children:[(0,F.jsx)(D,{className:`mr-2 h-4 w-4`}),b(`addAgent`)]}),children:(0,F.jsx)(f,{children:e.map((e,t)=>(0,F.jsxs)(`div`,{className:`space-y-3 p-4`,children:[(0,F.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 gap-3`,children:[(0,F.jsx)(r,{value:e.id,onChange:e=>o(t,{id:e.target.value}),placeholder:b(`agentIdPlaceholder`)}),(0,F.jsx)(r,{value:e.workspace??``,onChange:e=>o(t,{workspace:e.target.value}),placeholder:b(`workspaceOverridePlaceholder`)}),(0,F.jsx)(r,{value:e.model??``,onChange:e=>o(t,{model:e.target.value}),placeholder:b(`modelOverridePlaceholder`)}),(0,F.jsx)(r,{value:e.runtime??e.engine??``,onChange:e=>o(t,{runtime:e.target.value}),placeholder:b(`engineOverridePlaceholder`)}),(0,F.jsx)(r,{type:`number`,min:1e3,step:1e3,value:e.contextTokens??``,onChange:e=>o(t,{contextTokens:ie(e.target.value)}),placeholder:b(`contextTokensPlaceholder`)})]}),(0,F.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,F.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,F.jsx)(s,{checked:!!e.default,onCheckedChange:e=>a(t,e)}),(0,F.jsx)(`span`,{children:b(`defaultAgent`)})]}),(0,F.jsxs)(c,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>n(t),children:[(0,F.jsx)(j,{className:`h-4 w-4 mr-1`}),b(`remove`)]})]})]},`${t}-${e.id}`))})})}function ce({bindings:e,onAddBinding:t,onRemoveBinding:n,onUpdateBinding:a}){return(0,F.jsx)(i,{title:b(`bindings`),description:b(`bindingsHelp`),actions:(0,F.jsxs)(c,{type:`button`,variant:`ghost`,size:`sm`,onClick:t,children:[(0,F.jsx)(D,{className:`mr-2 h-4 w-4`}),b(`addBinding`)]}),children:(0,F.jsx)(f,{children:e.map((e,t)=>{let i=e.match.peer?.kind??``;return(0,F.jsxs)(`div`,{className:`space-y-3 p-4`,children:[(0,F.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3`,children:[(0,F.jsx)(r,{value:e.agentId,onChange:n=>a(t,{...e,agentId:n.target.value}),placeholder:b(`targetAgentIdPlaceholder`)}),(0,F.jsx)(r,{value:e.match.channel,onChange:n=>a(t,{...e,match:{...e.match,channel:n.target.value}}),placeholder:b(`channelPlaceholder`)}),(0,F.jsx)(r,{value:e.match.accountId??``,onChange:n=>a(t,{...e,match:{...e.match,accountId:n.target.value}}),placeholder:b(`accountIdOptionalPlaceholder`)}),(0,F.jsxs)(T,{value:i||`__none__`,onValueChange:n=>{let r=n===`__none__`?``:n;a(t,r?{...e,match:{...e.match,peer:{kind:r,id:e.match.peer?.id??``}}}:{...e,match:{...e.match,peer:void 0}})},children:[(0,F.jsx)(S,{children:(0,F.jsx)(x,{})}),(0,F.jsxs)(C,{children:[(0,F.jsx)(w,{value:`__none__`,children:b(`peerKindOptional`)}),(0,F.jsx)(w,{value:`direct`,children:b(`peerKindDirect`)}),(0,F.jsx)(w,{value:`group`,children:b(`peerKindGroup`)}),(0,F.jsx)(w,{value:`channel`,children:b(`peerKindChannel`)})]})]}),(0,F.jsx)(r,{value:e.match.peer?.id??``,onChange:n=>a(t,{...e,match:{...e.match,peer:i?{kind:i,id:n.target.value}:void 0}}),placeholder:b(`peerIdPlaceholder`)})]}),(0,F.jsx)(`div`,{className:`flex justify-end`,children:(0,F.jsxs)(c,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>n(t),children:[(0,F.jsx)(j,{className:`h-4 w-4 mr-1`}),b(`remove`)]})})]},`${t}-${e.agentId}`)})})})}function le({entries:e,onAddEntry:t,onRemoveEntry:n,onUpdateEntry:a}){return(0,F.jsx)(i,{title:b(`runtimeEntries`),description:b(`runtimeEntriesHelp`),actions:(0,F.jsxs)(c,{type:`button`,variant:`ghost`,size:`sm`,onClick:t,children:[(0,F.jsx)(D,{className:`mr-2 h-4 w-4`}),b(`addRuntimeEntry`)]}),children:(0,F.jsx)(f,{children:e.map((e,t)=>(0,F.jsxs)(`div`,{className:`space-y-3 p-4`,children:[(0,F.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 gap-3`,children:[(0,F.jsx)(r,{value:e.id,onChange:e=>a(t,{id:e.target.value}),placeholder:b(`runtimeEntryIdPlaceholder`)}),(0,F.jsx)(r,{value:e.label??``,onChange:e=>a(t,{label:e.target.value}),placeholder:b(`runtimeEntryLabelPlaceholder`)}),(0,F.jsx)(r,{value:e.type,onChange:e=>a(t,{type:e.target.value}),placeholder:b(`runtimeEntryTypePlaceholder`)}),(0,F.jsxs)(`div`,{className:`flex items-center justify-between rounded-lg bg-background/65 px-3 py-2`,children:[(0,F.jsx)(`span`,{className:`text-sm text-foreground`,children:b(`enabled`)}),(0,F.jsx)(s,{checked:e.enabled!==!1,onCheckedChange:e=>a(t,{enabled:e})})]})]}),(0,F.jsxs)(`div`,{className:`space-y-2`,children:[(0,F.jsx)(`label`,{className:`text-sm font-medium text-foreground`,children:b(`runtimeEntryConfigJson`)}),(0,F.jsx)(`textarea`,{className:`min-h-32 w-full rounded-md border border-input bg-background px-3 py-2 font-mono text-sm`,value:e.configText,onChange:e=>a(t,{configText:e.target.value}),spellCheck:!1})]}),(0,F.jsx)(`div`,{className:`flex justify-end`,children:(0,F.jsxs)(c,{type:`button`,variant:`outline`,onClick:()=>n(t),children:[(0,F.jsx)(j,{className:`mr-2 h-4 w-4`}),b(`delete`)]})})]},`${t}-${e.id||`runtime-entry`}`))})})}var ue=[{value:`main`,labelKey:`dmScopeMain`},{value:`per-peer`,labelKey:`dmScopePerPeer`},{value:`per-channel-peer`,labelKey:`dmScopePerChannelPeer`},{value:`per-account-channel-peer`,labelKey:`dmScopePerAccountChannelPeer`}];function de({companionEnabled:e,defaultContextTokens:t,defaultEngine:n,dmScope:o,onCompanionEnabledChange:c,onDefaultContextTokensChange:l,onDefaultEngineChange:u,onDmScopeChange:d}){return(0,F.jsx)(i,{title:b(`dmScope`),description:b(`dmScopeHelp`),children:(0,F.jsxs)(f,{children:[(0,F.jsx)(a,{title:b(`runtimeCompanionEnabled`),description:b(`runtimeCompanionEnabledHelp`),control:(0,F.jsx)(s,{checked:e,onCheckedChange:c})}),(0,F.jsx)(a,{title:b(`defaultContextTokens`),description:b(`defaultContextTokensHelp`),control:(0,F.jsx)(r,{type:`number`,min:1e3,step:1e3,value:t,onChange:e=>l(Math.max(1e3,Number.parseInt(e.target.value,10)||1e3)),className:`w-36`})}),(0,F.jsx)(a,{title:b(`defaultEngine`),description:b(`defaultEngineHelp`),control:(0,F.jsx)(r,{value:n,onChange:e=>u(e.target.value),placeholder:b(`defaultEnginePlaceholder`),className:`w-56`})}),(0,F.jsx)(a,{title:b(`dmScope`),control:(0,F.jsxs)(T,{value:o,onValueChange:e=>d(e),children:[(0,F.jsx)(S,{className:`w-56`,children:(0,F.jsx)(x,{})}),(0,F.jsx)(C,{children:ue.map(e=>(0,F.jsx)(w,{value:e.value,children:b(e.labelKey)},e.value))})]})})]})})}function fe({config:e,updateRuntime:t}){let n=(0,P.useMemo)(()=>ae(e),[e]),[r,i]=(0,P.useState)(n.agents),[a,s]=(0,P.useState)(n.bindings),[l,u]=(0,P.useState)(n.runtimeEntries),[d,f]=(0,P.useState)(n.dmScope),[p,h]=(0,P.useState)(n.companionEnabled),[g,_]=(0,P.useState)(n.defaultContextTokens),[v,y]=(0,P.useState)(n.defaultEngine),x=(0,P.useMemo)(()=>{let e=new Set([`main`]);return r.forEach(t=>{let n=t.id.trim();n&&e.add(n)}),e},[r]);return(0,F.jsxs)(o,{title:b(`runtimePageTitle`),description:b(`runtimePageDescription`),children:[(0,F.jsx)(te,{}),(0,F.jsx)(de,{companionEnabled:p,dmScope:d,defaultContextTokens:g,defaultEngine:v,onCompanionEnabledChange:h,onDmScopeChange:f,onDefaultContextTokensChange:_,onDefaultEngineChange:y}),(0,F.jsx)(le,{entries:l,onUpdateEntry:(e,t)=>u(n=>n.map((n,r)=>r===e?{...n,...t}:n)),onRemoveEntry:e=>u(t=>t.filter((t,n)=>n!==e)),onAddEntry:()=>u(e=>[...e,Q()])}),(0,F.jsx)(se,{agents:r,onUpdateAgent:(e,t)=>{i(n=>n.map((n,r)=>r===e?{...n,...t}:n))},onRemoveAgent:e=>i(t=>t.filter((t,n)=>n!==e)),onAddAgent:()=>i(e=>[...e,X()]),onSetDefaultAgent:(e,t)=>i(n=>t?n.map((t,n)=>({...t,default:n===e})):n.map((t,n)=>n===e?{...t,default:!1}:t))}),(0,F.jsx)(ce,{bindings:a,onUpdateBinding:(e,t)=>{s(n=>n.map((n,r)=>r===e?t:n))},onRemoveBinding:e=>s(t=>t.filter((t,n)=>n!==e)),onAddBinding:()=>s(e=>[...e,Z()])}),(0,F.jsx)(N,{children:(0,F.jsxs)(c,{type:`button`,size:`sm`,onClick:()=>{try{let e=$({companionEnabled:p,agents:r,bindings:a,runtimeEntries:l,dmScope:d,defaultContextTokens:g,defaultEngine:v,knownAgentIds:x});t.mutate({data:e})}catch(e){m.error(e instanceof Error?e.message:String(e))}},disabled:t.isPending,children:[(0,F.jsx)(k,{className:`mr-1.5 h-3.5 w-3.5`}),t.isPending?b(`saving`):b(`saveRuntimeSettings`)]})})]})}function pe(){let{data:e,isLoading:t}=ee(),n=M();return t||!e?(0,F.jsx)(o,{title:b(`runtimePageTitle`),description:b(`runtimePageDescription`),children:(0,F.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:b(`runtimeLoading`)})}):(0,F.jsx)(fe,{config:e,updateRuntime:n})}export{pe as RuntimeConfig};
@@ -258,7 +258,7 @@
258
258
  })();
259
259
  </script>
260
260
  <title>NextClaw</title>
261
- <script type="module" crossorigin src="/assets/main-ky5Efhq1.js"></script>
261
+ <script type="module" crossorigin src="/assets/main-DMNmwcJE.js"></script>
262
262
  <link rel="modulepreload" crossorigin href="/assets/chunk-DF37yw5_.js">
263
263
  <link rel="modulepreload" crossorigin href="/assets/utils-CBZPzC_b.js">
264
264
  <link rel="modulepreload" crossorigin href="/assets/client-BtGBwLTs.js">
@@ -308,10 +308,10 @@
308
308
  <link rel="modulepreload" crossorigin href="/assets/card-BhfAZv5L.js">
309
309
  <link rel="modulepreload" crossorigin href="/assets/use-config-BEdbtpD4.js">
310
310
  <link rel="modulepreload" crossorigin href="/assets/provider-models-hrHMcHqg.js">
311
- <link rel="modulepreload" crossorigin href="/assets/app-presenter-provider-V0xnU_Wb.js">
311
+ <link rel="modulepreload" crossorigin href="/assets/app-presenter-provider-CBZ_-ewx.js">
312
312
  <link rel="modulepreload" crossorigin href="/assets/provider-scoped-model-input-BQsugx1v.js">
313
313
  <link rel="modulepreload" crossorigin href="/assets/settings-2-CE3ELQyk.js">
314
- <link rel="modulepreload" crossorigin href="/assets/pwa-D_nZUwG0.js">
314
+ <link rel="modulepreload" crossorigin href="/assets/pwa-CzqfYjFx.js">
315
315
  <link rel="modulepreload" crossorigin href="/assets/login-page-f8qQ4xKY.js">
316
316
  <link rel="stylesheet" crossorigin href="/assets/app-presenter-provider-jNGlmBLe.css">
317
317
  <link rel="stylesheet" crossorigin href="/assets/main-D2dWy8fM.css">
Binary file