@nextclaw/ui 0.26.3 → 0.26.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/dist/.vite/manifest.json +329 -329
- package/dist/assets/{account-panel-DIdHjKG-.js → account-panel-DVi_jhkG.js} +1 -1
- package/dist/assets/{api-DkLJrSCd.js → api-BZvNpFOS.js} +1 -1
- package/dist/assets/app-presenter-provider-BcYL-VNe.js +124 -0
- package/dist/assets/{appearance-settings-page-DI8aDY2G.js → appearance-settings-page-AZNBzLmT.js} +1 -1
- package/dist/assets/{book-open-BPMkKSci.js → book-open-CmRdT3N1.js} +1 -1
- package/dist/assets/card-CdRBL1E0.js +1 -0
- package/dist/assets/{channels-list-page-CCIaTQu7.js → channels-list-page-eZN74FN3.js} +2 -2
- package/dist/assets/{circle-dashed-B48a0t6p.js → circle-dashed-HOgt3gIJ.js} +1 -1
- package/dist/assets/{client-imrVphQb.js → client-DKKbdJ6Q.js} +1 -1
- package/dist/assets/config-split-page-BA3V6b3Q.js +1 -0
- package/dist/assets/{confirm-dialog-10Qb3dpZ.js → confirm-dialog-8vqYZ0wy.js} +1 -1
- package/dist/assets/{context-menu-CRqH2SEk.js → context-menu-DHVVdHzN.js} +1 -1
- package/dist/assets/{createLucideIcon-B4xj2I2g.js → createLucideIcon-DE0sB9Nu.js} +1 -1
- package/dist/assets/{desktop-capabilities-page-CFcT2g8-.js → desktop-capabilities-page-B9-B9k1A.js} +1 -1
- package/dist/assets/{desktop-update-config-CRJd_An1.js → desktop-update-config-Cfr3IRUe.js} +1 -1
- package/dist/assets/{dialog-BgL3vKJQ.js → dialog-BUfWO8hr.js} +1 -1
- package/dist/assets/{doc-browser-context-DH4aWvkS.js → doc-browser-context-ClLgMbxd.js} +1 -1
- package/dist/assets/doc-browser-w8q1j0jL.js +1 -0
- package/dist/assets/{download-Cr337h4W.js → download-CKqS1Ksj.js} +1 -1
- package/dist/assets/{es2015-D-CRf3_Z.js → es2015-BiB05Sav.js} +1 -1
- package/dist/assets/{extensions-CsmJPz7g.js → extensions-vPD4dGqt.js} +1 -1
- package/dist/assets/{eye-DrQRSAfJ.js → eye-bKzylu3p.js} +1 -1
- package/dist/assets/{form-actions-BEeWTGUZ.js → form-actions-CCoxz33Q.js} +1 -1
- package/dist/assets/{keyboard-shortcuts-settings-page-DQU56SrW.js → keyboard-shortcuts-settings-page-D8rosOVh.js} +1 -1
- package/dist/assets/loader-circle-Clq1Gtb1.js +1 -0
- package/dist/assets/{login-page-sgivRYG1.js → login-page-BT3GV3Sb.js} +1 -1
- package/dist/assets/login-page-DKId3By8.js +1 -0
- package/dist/assets/{main-B-oxUq-o.js → main-bEWCGDHr.js} +2 -2
- package/dist/assets/main-kqMRTwOs.css +1 -0
- package/dist/assets/mcp-marketplace-page-CZIP6j3L.js +1 -0
- package/dist/assets/{model-config-page-CDQBhmVr.js → model-config-page-D21a-BO0.js} +1 -1
- package/dist/assets/{navigation-link-D3pzNHeA.js → navigation-link-DC-Pku0Y.js} +1 -1
- package/dist/assets/panelStandalone-BRg7B1EI.css +1 -0
- package/dist/assets/{panelStandalone-CGkYeMK5.js → panelStandalone-CX8X2hjh.js} +2 -2
- package/dist/assets/{privacy-settings-page-CjoAkoDt.js → privacy-settings-page-e0LFHZJm.js} +1 -1
- package/dist/assets/{projects-C7Zxpcoi.js → projects-Rki7Fmth.js} +1 -1
- package/dist/assets/provider-models-DFQgF4hS.js +1 -0
- package/dist/assets/provider-scoped-model-input-DaONL0j_.js +1 -0
- package/dist/assets/providers-config-page-CEOhQlMe.js +1 -0
- package/dist/assets/{puzzle--RLCeYML.js → puzzle-D_TiFXOv.js} +1 -1
- package/dist/assets/{pwa-DcizGowz.js → pwa-C9ac_1dg.js} +1 -1
- package/dist/assets/{refresh-cw-syCVj_nw.js → refresh-cw-BG8VfcdA.js} +1 -1
- package/dist/assets/remote-DkSx5x4R.js +1 -0
- package/dist/assets/{rotate-cw-BlH9El3x.js → rotate-cw-DPEegUU2.js} +1 -1
- package/dist/assets/{runtime-config-page-Cco9dS73.js → runtime-config-page-DDT1dVLt.js} +1 -1
- package/dist/assets/{save-BWynuRQ2.js → save-CPlctBjT.js} +1 -1
- package/dist/assets/{search-config-page-Cc74_SAU.js → search-config-page-CDwmd6eX.js} +1 -1
- package/dist/assets/{secrets-config-page-raYDzlFC.js → secrets-config-page-1OvgmwPv.js} +1 -1
- package/dist/assets/security-config-Pv4CM-kw.js +1 -0
- package/dist/assets/{select-6Uq4chZW.js → select-Y9IEbx9x.js} +1 -1
- package/dist/assets/service-apps-panel-DPrLeF3N.js +1 -0
- package/dist/assets/{settings-2-COvVf1XX.js → settings-2-CrGx9_De.js} +1 -1
- package/dist/assets/{status-dot-DZlxa5zW.js → status-dot-Cb8ewlUr.js} +1 -1
- package/dist/assets/{tag-chip-DXHtZ8AS.js → tag-chip-D-6aPuuh.js} +1 -1
- package/dist/assets/{theme-provider-C5PCDBPB.js → theme-provider-BjF1Eowc.js} +1 -1
- package/dist/assets/{trash-2-DazgBvmJ.js → trash-2-DER2EJKK.js} +1 -1
- package/dist/assets/{use-config-DRRGF9Zb.js → use-config-BM5jC65L.js} +1 -1
- package/dist/assets/{use-desktop-capabilities-CdfOUjdE.js → use-desktop-capabilities-ezKJwKqg.js} +1 -1
- package/dist/assets/{use-viewport-layout-DdxVnCYc.js → use-viewport-layout-vmbQUNT6.js} +1 -1
- package/dist/assets/x-DSz9cGhy.js +1 -0
- package/dist/index.html +33 -33
- package/dist/panel-standalone.html +10 -10
- package/package.json +4 -4
- package/src/app/components/layout/__tests__/sidebar.layout.test.tsx +2 -2
- package/src/app/components/layout/sidebar-rail.styles.ts +3 -3
- package/src/app/styles/charcoal-theme.css +0 -3
- package/src/app/styles/design-system.css +12 -6
- package/src/app/styles/island-theme.css +2 -15
- package/src/features/app-data/components/app-data-removal-choice.tsx +1 -1
- package/src/features/channels/pages/channels-list-page.tsx +1 -1
- package/src/features/chat/components/chat-sidebar-list-mode-switch.tsx +1 -1
- package/src/features/chat/components/conversation/__tests__/chat-conversation-header-section.test.tsx +28 -16
- package/src/features/chat/components/conversation/chat-conversation-content.tsx +8 -2
- package/src/features/chat/components/layout/__tests__/chat-sidebar-session-area.test.tsx +6 -4
- package/src/features/chat/components/layout/__tests__/chat-sidebar-toolbar.test.tsx +22 -1
- package/src/features/chat/components/layout/chat-sidebar-desktop-layout.tsx +10 -14
- package/src/features/chat/components/layout/chat-sidebar-toolbar.tsx +38 -7
- package/src/features/chat/components/layout/chat-sidebar-utility-menu.tsx +4 -4
- package/src/features/chat/components/layout/chat-sidebar.tsx +2 -2
- package/src/features/chat/features/conversation/components/session-queued-input-rows.tsx +1 -1
- package/src/features/chat/features/message/components/chat-message-list.container.tsx +12 -1
- package/src/features/chat/features/message/components/chat-tool-call-stress-harness.tsx +32 -2
- package/src/features/chat/features/message/hooks/__tests__/use-chat-message-virtualizer.test.tsx +7 -5
- package/src/features/chat/features/message/hooks/use-chat-message-virtualizer.ts +7 -3
- package/src/features/chat/features/session/components/__tests__/chat-sidebar-project-groups.test.tsx +1 -1
- package/src/features/chat/features/session/components/chat-mobile-session-row.tsx +1 -1
- package/src/features/chat/features/session/components/chat-sidebar-context-card.tsx +1 -1
- package/src/features/chat/features/session/components/chat-sidebar-project-groups.tsx +1 -1
- package/src/features/chat/features/session/components/chat-sidebar-session-item.tsx +7 -5
- package/src/features/chat/features/session/components/chat-sidebar-session-list.tsx +45 -10
- package/src/features/chat/features/session/components/session-header/chat-session-more-actions-menu.tsx +3 -0
- package/src/features/chat/features/session/components/session-header/chat-session-switcher-groups.tsx +6 -6
- package/src/features/chat/features/session/components/session-header/chat-session-title-switcher.tsx +5 -4
- package/src/features/chat/features/session-type/components/chat-session-type-option-item.tsx +1 -1
- package/src/features/chat/features/welcome/components/chat-welcome-agent-picker.tsx +0 -1
- package/src/features/chat/features/welcome/components/chat-welcome-project-picker.tsx +1 -1
- package/src/features/chat/features/welcome/components/chat-welcome-prompt-suggestions.tsx +1 -1
- package/src/features/chat/features/welcome/components/chat-welcome-session-type-picker.tsx +1 -1
- package/src/features/chat/features/workspace/components/chat-session-workspace-file-breadcrumb-browser.tsx +2 -2
- package/src/features/chat/features/workspace/components/chat-session-workspace-file-breadcrumbs.tsx +2 -2
- package/src/features/chat/features/workspace/components/chat-session-workspace-panel-content.tsx +1 -1
- package/src/features/chat/features/workspace/components/child-sessions/chat-session-child-sessions.tsx +2 -2
- package/src/features/chat/features/workspace/components/file-content-preview/workspace-spreadsheet-preview.tsx +2 -2
- package/src/features/chat/features/workspace/components/overview/chat-session-continuous-attention.tsx +3 -3
- package/src/features/chat/features/workspace/components/overview/chat-session-token-usage.tsx +1 -1
- package/src/features/chat/features/workspace/components/project-files/workspace-directory-tree.tsx +4 -3
- package/src/features/chat/features/workspace/components/project-files/workspace-new-folder-tree-item.tsx +2 -1
- package/src/features/chat/features/workspace/components/session-cron-job-content.tsx +3 -3
- package/src/features/chat/features/workspace/components/workspace-file-content-preview.tsx +2 -2
- package/src/features/chat/features/workspace/components/workspace-markdown-outline.tsx +1 -1
- package/src/features/cron/components/cron-config.tsx +2 -2
- package/src/features/cron/components/cron-job-detail-dialog.tsx +1 -1
- package/src/features/cron/components/cron-job-row.tsx +3 -3
- package/src/features/cron/components/cron-task-discovery.tsx +1 -1
- package/src/features/inbox/pages/inbox-page.tsx +1 -1
- package/src/features/marketplace/components/curated-shelves/marketplace-curated-shelves.tsx +2 -2
- package/src/features/marketplace/components/curated-shelves/marketplace-shelf-card.tsx +2 -2
- package/src/features/marketplace/components/marketplace-list-card.tsx +4 -4
- package/src/features/marketplace/components/marketplace-page.tsx +2 -2
- package/src/features/marketplace/components/mcp/mcp-marketplace-card.tsx +2 -2
- package/src/features/marketplace/components/mcp/mcp-marketplace-page.tsx +3 -3
- package/src/features/panel-apps/components/panel-app-list-item.tsx +3 -3
- package/src/features/pwa/components/pwa-install-entry.tsx +1 -1
- package/src/features/right-panel-resources/components/__tests__/page-resource-sidebar-nav.test.tsx +9 -1
- package/src/features/right-panel-resources/components/page-resource-sidebar-nav.tsx +1 -1
- package/src/features/right-panel-resources/components/right-panel-resource-home-page.tsx +1 -1
- package/src/features/service-apps/components/service-action-row.tsx +3 -3
- package/src/features/service-apps/components/service-app-list-item.tsx +4 -4
- package/src/features/service-apps/components/service-apps-panel.tsx +1 -1
- package/src/features/settings/components/config/provider-model-list.tsx +5 -5
- package/src/features/settings/components/config/provider-model-suggestions-panel.tsx +4 -4
- package/src/features/settings/components/config/provider-pill-selector.tsx +1 -1
- package/src/features/settings/pages/appearance-settings-page.tsx +2 -2
- package/src/features/settings/pages/providers-config-page.tsx +6 -6
- package/src/features/side-dock/components/side-dock.tsx +4 -4
- package/src/index.css +4 -0
- package/src/platforms/desktop/components/desktop-window-chrome.tsx +1 -1
- package/src/platforms/mobile/components/mobile-bottom-nav.tsx +3 -3
- package/src/shared/components/common/brand-header.tsx +1 -1
- package/src/shared/components/common/searchable-model-input.tsx +2 -2
- package/src/shared/components/config-split-page.tsx +3 -3
- package/src/shared/components/doc-browser/doc-browser-tab-strip.tsx +2 -2
- package/src/shared/components/path-picker/server-path-picker-locations.tsx +1 -1
- package/src/shared/components/ui/button.tsx +2 -2
- package/src/shared/components/ui/card.tsx +1 -1
- package/src/shared/components/ui/context-menu/context-menu-items.tsx +3 -3
- package/src/shared/components/ui/input.tsx +7 -3
- package/src/shared/components/ui/overlays/sheet.tsx +1 -1
- package/src/shared/components/ui/popover.tsx +1 -1
- package/src/shared/components/ui/select.tsx +2 -2
- package/src/shared/components/ui/tab-strip/compact-tab-strip.tsx +3 -3
- package/src/shared/components/ui/tabs.tsx +1 -1
- package/dist/assets/app-presenter-provider-Co8uKOyW.js +0 -124
- package/dist/assets/card-Bqu8zWLq.js +0 -1
- package/dist/assets/config-split-page-Bd-bGKsw.js +0 -1
- package/dist/assets/doc-browser-52t2_rSF.js +0 -1
- package/dist/assets/loader-circle-DbOQWT9C.js +0 -1
- package/dist/assets/login-page-DW1AZXqX.js +0 -1
- package/dist/assets/main-BpL6OjwM.css +0 -1
- package/dist/assets/mcp-marketplace-page-DSLRpJEB.js +0 -1
- package/dist/assets/panelStandalone-D-mhAGNa.css +0 -1
- package/dist/assets/provider-models-YW7rIeOD.js +0 -1
- package/dist/assets/provider-scoped-model-input-axJ-pTEu.js +0 -1
- package/dist/assets/providers-config-page-_QhBXQ4M.js +0 -1
- package/dist/assets/remote-BLQU7aY5.js +0 -1
- package/dist/assets/security-config-aE_jOwy-.js +0 -1
- package/dist/assets/service-apps-panel-jBWAa4qZ.js +0 -1
- package/dist/assets/x-CQIp_nJT.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./chunk-DF37yw5_.js";import{Gt as t,Wt as n,Yt as r,cr as i,yr as a}from"./api-
|
|
1
|
+
import{i as e}from"./chunk-DF37yw5_.js";import{Gt as t,Wt as n,Yt as r,cr as i,yr as a}from"./api-BZvNpFOS.js";import{I as o,J as s,c,kt as l,r as u}from"./app-presenter-provider-BcYL-VNe.js";import{t as d}from"./createLucideIcon-DE0sB9Nu.js";import{a as f}from"./use-viewport-layout-vmbQUNT6.js";import{n as p,s as m}from"./i18n-OGmF0Ws_.js";import{a as h,n as g,o as _,r as v,t as y}from"./dialog-BUfWO8hr.js";var b=d(`LogOut`,[[`path`,{d:`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,key:`1uf3rs`}],[`polyline`,{points:`16 17 21 12 16 7`,key:`1gabdz`}],[`line`,{x1:`21`,x2:`9`,y1:`12`,y2:`12`,key:`1uyos4`}]]),x=e(a(),1),S=i();function C({label:e,value:t}){return(0,S.jsxs)(`div`,{className:`flex items-start justify-between gap-4 py-2 text-sm`,children:[(0,S.jsx)(`span`,{className:`text-gray-500`,children:e}),(0,S.jsx)(`span`,{className:`text-right text-gray-900`,children:t?.trim()||`-`})]})}function w(e){let{email:i,username:a,role:o,canSubmitUsername:c,savingUsername:u,usernameDraft:d,onUsernameDraftChange:f,onSubmitUsername:p,onOpenDeviceList:h,onLogout:g}=e;return(0,S.jsxs)(`div`,{className:`space-y-4`,children:[(0,S.jsx)(s,{tone:`success`,title:m(`accountPanelSignedInTitle`),description:m(`accountPanelSignedInDescription`)}),(0,S.jsxs)(s,{tone:`neutral`,children:[(0,S.jsx)(C,{label:m(`remoteAccountEmail`),value:i}),(0,S.jsx)(C,{label:m(`remoteAccountUsername`),value:a}),(0,S.jsx)(C,{label:m(`remoteAccountRole`),value:o})]}),a?(0,S.jsx)(`p`,{className:`text-xs text-gray-500`,children:m(`remoteAccountUsernameLockedHelp`)}):(0,S.jsxs)(s,{tone:`warning`,title:m(`remoteAccountUsernameRequiredTitle`),description:m(`remoteAccountUsernameRequiredDescription`),children:[(0,S.jsxs)(`div`,{className:`mt-4 space-y-2`,children:[(0,S.jsx)(n,{htmlFor:`account-panel-username`,children:m(`remoteAccountUsername`)}),(0,S.jsx)(t,{id:`account-panel-username`,value:d,onChange:e=>f(e.target.value),placeholder:m(`remoteAccountUsernamePlaceholder`),autoCapitalize:`none`,autoCorrect:`off`,spellCheck:!1})]}),(0,S.jsx)(`div`,{className:`mt-4 flex flex-wrap gap-3`,children:(0,S.jsx)(r,{disabled:!c,onClick:()=>void p(),children:m(u?`remoteAccountUsernameSaving`:`remoteAccountUsernameSave`)})})]}),(0,S.jsxs)(`div`,{className:`flex flex-wrap gap-3`,children:[(0,S.jsxs)(r,{onClick:()=>void h(),children:[(0,S.jsx)(l,{className:`mr-2 h-4 w-4`}),m(`remoteOpenDeviceList`)]}),(0,S.jsxs)(r,{variant:`outline`,onClick:()=>void g(),children:[(0,S.jsx)(b,{className:`mr-2 h-4 w-4`}),m(`remoteLogout`)]})]})]})}function T(e){let{authSessionId:t,authExpiresAt:n,authStatusMessage:i,authVerificationUri:a,onStartBrowserSignIn:o,onResumeBrowserSignIn:c}=e;return(0,S.jsxs)(`div`,{className:`space-y-4`,children:[(0,S.jsx)(s,{tone:`neutral`,title:m(`accountPanelSignedOutTitle`),description:m(`accountPanelSignedOutDescription`),children:t?(0,S.jsxs)(`div`,{className:`mt-3 border-t border-white/80 pt-3`,children:[(0,S.jsx)(C,{label:m(`remoteBrowserAuthSession`),value:t}),(0,S.jsx)(C,{label:m(`remoteBrowserAuthExpiresAt`),value:n?p(n):`-`})]}):null}),i?(0,S.jsx)(`p`,{className:`text-sm text-gray-600`,children:i}):null,(0,S.jsxs)(`div`,{className:`flex flex-wrap gap-3`,children:[(0,S.jsx)(r,{onClick:()=>void o(),children:m(t?`remoteBrowserAuthActionRetry`:`remoteBrowserAuthAction`)}),a?(0,S.jsx)(r,{variant:`outline`,onClick:()=>void c(),children:m(`remoteBrowserAuthResume`)}):null]})]})}function E(){let e=u(),t=o(),n=c(e=>e.panelOpen),r=c(e=>e.authSessionId),i=c(e=>e.authVerificationUri),a=c(e=>e.authExpiresAt),s=c(e=>e.authStatusMessage),l=t.data,[d,p]=(0,x.useState)(``),[b,C]=(0,x.useState)(!1);(0,x.useEffect)(()=>{e.accountManager.syncRemoteStatus(l)},[e,l]);let E=!b&&d.trim().length>0&&!l?.account.username;return(0,S.jsx)(y,{open:n,onOpenChange:t=>t?e.accountManager.openAccountPanel():e.accountManager.closeAccountPanel(),children:(0,S.jsxs)(g,{className:`max-w-xl`,children:[(0,S.jsxs)(h,{children:[(0,S.jsxs)(_,{className:`flex items-center gap-2`,children:[(0,S.jsx)(f,{className:`h-5 w-5 text-primary`}),m(`accountPanelTitle`)]}),(0,S.jsx)(v,{children:m(`accountPanelDescription`)})]}),l?.account.loggedIn?(0,S.jsx)(w,{email:l.account.email,username:l.account.username,role:l.account.role,canSubmitUsername:E,savingUsername:b,usernameDraft:d,onUsernameDraftChange:p,onSubmitUsername:async()=>{C(!0);try{await e.accountManager.updateUsername(d)}finally{C(!1)}},onOpenDeviceList:()=>e.accountManager.openNextClawWeb(`/account`),onLogout:()=>e.accountManager.logout()}):(0,S.jsx)(T,{authSessionId:r,authExpiresAt:a,authStatusMessage:s,authVerificationUri:i,onStartBrowserSignIn:()=>e.accountManager.startBrowserSignIn(),onResumeBrowserSignIn:()=>e.accountManager.resumeBrowserSignIn()})]})})}export{E as AccountPanel};
|
|
@@ -11,7 +11,7 @@ Error generating stack: `+e.message+`
|
|
|
11
11
|
`,`
|
|
12
12
|
`).split(`
|
|
13
13
|
|
|
14
|
-
`),r=n.pop()??``;for(let e of n){let n=Or(e);if(n?.event!==`ncp-event`)continue;let r=kr(n.data);r&&t(r)}return r}},jr=class{constructor(e,t){this.requestService=e,this.baseUrl=t}list=async()=>(await this.requestService.get(`/api/agents`)).agents;create=async e=>await this.requestService.post(`/api/agents`,e);update=async(e,t)=>await this.requestService.put(`/api/agents/${encodeURIComponent(e)}`,t);delete=async e=>await this.requestService.delete(`/api/agents/${encodeURIComponent(e)}`);resolveAvatarUrl=e=>wr(this.baseUrl,`/api/agents/${encodeURIComponent(e)}/avatar`)},Mr=class{constructor(e){this.requestService=e}fetchMeta=async()=>await this.requestService.get(`/api/app/meta`);fetchBootstrapStatus=async(e={})=>await this.requestService.get(`/api/runtime/bootstrap-status`,e)},Nr=class{constructor(e){this.requestService=e}list=async(e={})=>await this.requestService.get(e.includeStorageUsage===!1?`/api/app-packages?includeStorageUsage=false`:`/api/app-packages`);get=async e=>await this.requestService.get(`/api/app-packages/${encodeURIComponent(e)}`);inspectDocumentAccess=async e=>await this.requestService.get(`/api/app-packages/${encodeURIComponent(e)}/document-access`);grantDocumentAccess=async(e,t)=>await this.requestService.post(`/api/app-packages/${encodeURIComponent(e)}/document-access/grant`,t);revokeDocumentAccess=async(e,t)=>await this.requestService.post(`/api/app-packages/${encodeURIComponent(e)}/document-access/revoke`,{scopeId:t});listOperations=async()=>await this.requestService.get(`/api/app-package-operations`);startInstall=async e=>await this.requestService.post(`/api/app-package-operations/install`,e);startUpdate=async(e,t={})=>await this.requestService.post(`/api/app-package-operations/${encodeURIComponent(e)}/update`,t);startRollback=async(e,t)=>await this.requestService.post(`/api/app-package-operations/${encodeURIComponent(e)}/rollback`,{version:t});startUninstall=async(e,t=!1)=>await this.requestService.post(`/api/app-package-operations/${encodeURIComponent(e)}/uninstall`,{purgeData:t});install=async e=>await this.requestService.post(`/api/app-packages/install`,e);enable=async e=>await this.requestService.post(`/api/app-packages/${encodeURIComponent(e)}/enable`);disable=async e=>await this.requestService.post(`/api/app-packages/${encodeURIComponent(e)}/disable`);update=async(e,t={})=>await this.requestService.post(`/api/app-packages/${encodeURIComponent(e)}/update`,t);rollback=async(e,t)=>await this.requestService.post(`/api/app-packages/${encodeURIComponent(e)}/rollback`,{version:t});uninstall=async(e,t=!1)=>await this.requestService.request(`/api/app-packages/${encodeURIComponent(e)}`,{method:`DELETE`,body:{purgeData:t}})},Pr=class{constructor(e){this.requestService=e}list=async()=>await this.requestService.get(`/api/app-data`);deleteRetained=async(e,t)=>await this.requestService.request(`/api/app-data/${encodeURIComponent(e)}`,{method:`DELETE`,body:{confirmAppId:t}})},Fr=class{constructor(e){this.requestService=e}fetchStatus=async(e={})=>await this.requestService.get(`/api/auth/status`,{...e.timeoutMs===void 0?{}:{timeoutMs:e.timeoutMs}});setup=async e=>await this.requestService.post(`/api/auth/setup`,e);login=async e=>await this.requestService.post(`/api/auth/login`,e);logout=async()=>await this.requestService.post(`/api/auth/logout`,{});updatePassword=async e=>await this.requestService.put(`/api/auth/password`,e);updateEnabled=async e=>await this.requestService.put(`/api/auth/enabled`,e)},Ir=class{constructor(e){this.requestService=e}start=async(e,t={})=>await this.requestService.post(`/api/config/channels/${encodeURIComponent(e)}/auth/start`,t);poll=async(e,t)=>await this.requestService.post(`/api/config/channels/${encodeURIComponent(e)}/auth/poll`,t);connect=async(e,t)=>await this.requestService.post(`/api/config/channels/${encodeURIComponent(e)}/auth/connect`,t)},Lr=class{constructor(e){this.requestService=e}listDesktopGrants=async()=>await this.requestService.get(`/api/capability-grants?resourceType=desktop.application`);grantDesktopAccess=async e=>await this.requestService.post(`/api/capability-grants`,e);revokeDesktopAccess=async e=>await this.requestService.request(`/api/capability-grants`,{method:`DELETE`,body:{subject:e.subject,resourceType:e.resource.type,target:e.resource.target,access:e.access}});getDesktopStatus=async()=>await this.requestService.get(`/api/desktop-host/status`);requestDesktopPermissions=async()=>await this.requestService.post(`/api/desktop-host/permissions/request`,{});openDesktopPermissionSettings=async()=>await this.requestService.post(`/api/desktop-host/permissions/open-settings`,{})},Rr=class{constructor(e){this.requestService=e}get=async()=>await this.requestService.get(`/api/feature-controls`)},zr=class{constructor(e){this.requestService=e}fetch=async()=>await this.requestService.get(`/api/config`);fetchMeta=async()=>await this.requestService.get(`/api/config/meta`);fetchSchema=async()=>await this.requestService.get(`/api/config/schema`);updateModel=async e=>await this.requestService.put(`/api/config/model`,e);updateSearch=async e=>await this.requestService.put(`/api/config/search`,e);updateChannel=async(e,t)=>await this.requestService.put(`/api/config/channels/${encodeURIComponent(e)}`,t);updateRuntime=async e=>await this.requestService.put(`/api/config/runtime`,e);updateSecrets=async e=>await this.requestService.put(`/api/config/secrets`,e);updateProductAnalytics=async e=>await this.requestService.put(`/api/config/product-analytics`,e);fetchProductAnalyticsStatus=async()=>await this.requestService.get(`/api/config/product-analytics/status`);executeAction=async(e,t={})=>await this.requestService.post(`/api/config/actions/${encodeURIComponent(e)}/execute`,t);fetchChatSessionTypes=async()=>await this.requestService.get(`/api/ncp/session-types`);fetchCronJobs=async(e={})=>await this.requestService.get(`/api/cron`,{query:{all:e.all?`1`:void 0,limit:e.limit,offset:e.offset,query:e.query,status:e.status}});deleteCronJob=async e=>await this.requestService.delete(`/api/cron/${encodeURIComponent(e)}`);setCronJobEnabled=async(e,t)=>await this.requestService.put(`/api/cron/${encodeURIComponent(e)}/enable`,t);runCronJob=async(e,t={})=>await this.requestService.post(`/api/cron/${encodeURIComponent(e)}/run`,t)},Br=class{constructor(e){this.requestService=e}fetchItems=async e=>await this.requestService.get(`${Vr(e.type)}/items`,{query:Hr(e)});fetchItem=async(e,t)=>await this.requestService.get(`${Vr(t)}/items/${encodeURIComponent(e)}`);fetchSkillContent=async e=>await this.requestService.get(`/api/marketplace/skills/items/${encodeURIComponent(e)}/content`);fetchRecommendations=async(e,t={})=>await this.requestService.get(`${Vr(e)}/recommendations`,{query:{...t.scene?.trim()?{scene:t.scene.trim()}:{},...typeof t.limit==`number`&&Number.isFinite(t.limit)?{limit:Math.max(1,Math.trunc(t.limit))}:{}}});fetchSkillScenes=async()=>await this.requestService.get(`/api/marketplace/skills/scenes`);install=async e=>await this.requestService.post(`${Vr(Ur(e.type))}/install`,e);fetchInstalled=async e=>await this.requestService.get(`${Vr(e)}/installed`);manage=async e=>await this.requestService.post(`${Vr(Ur(e.type))}/manage`,e)};function Vr(e){return e===`skill`?`/api/marketplace/skills`:`/api/marketplace/mcp`}function Hr(e){let{page:t,pageSize:n,q:r,scene:i,sort:a,tag:o}=e,s={};return r?.trim()&&(s.q=r.trim()),o?.trim()&&(s.tag=o.trim()),i?.trim()&&(s.scene=i.trim()),a&&(s.sort=a),typeof t==`number`&&Number.isFinite(t)&&(s.page=Math.max(1,Math.trunc(t))),typeof n==`number`&&Number.isFinite(n)&&(s.pageSize=Math.max(1,Math.trunc(n))),Object.keys(s).length>0?s:void 0}function Ur(e){if(!e)throw Error(`Marketplace request type is required.`);return e}var Wr=class{constructor(e){this.requestService=e}list=async()=>await this.requestService.get(`/api/inbox/deliveries`);get=async e=>await this.requestService.get(this.deliveryPath(e));updateState=async(e,t)=>await this.requestService.request(this.deliveryPath(e),{method:`PATCH`,body:{action:t}});delete=async e=>(await this.requestService.delete(this.deliveryPath(e))).deleted;deliveryPath=e=>`/api/inbox/deliveries/${encodeURIComponent(e)}`},Gr=class{constructor(e){this.requestService=e}fetchItems=async(e={})=>await this.requestService.get(`/api/marketplace/mcp/items`,{query:Kr(e)});fetchInstalled=async()=>await this.requestService.get(`/api/marketplace/mcp/installed`);fetchItem=async e=>await this.requestService.get(`/api/marketplace/mcp/items/${encodeURIComponent(e)}`);fetchContent=async e=>await this.requestService.get(`/api/marketplace/mcp/items/${encodeURIComponent(e)}/content`);fetchRecommendations=async(e={})=>await this.requestService.get(`/api/marketplace/mcp/recommendations`,{query:{...e.scene?.trim()?{scene:e.scene.trim()}:{},...typeof e.limit==`number`&&Number.isFinite(e.limit)?{limit:Math.max(1,Math.trunc(e.limit))}:{}}});install=async e=>await this.requestService.post(`/api/marketplace/mcp/install`,e);manage=async e=>await this.requestService.post(`/api/marketplace/mcp/manage`,e);doctor=async e=>await this.requestService.post(`/api/marketplace/mcp/doctor`,{name:e})};function Kr(e){let{page:t,pageSize:n,q:r,sort:i,tag:a}=e,o={};return r?.trim()&&(o.q=r.trim()),a?.trim()&&(o.tag=a.trim()),i&&(o.sort=i),typeof t==`number`&&Number.isFinite(t)&&(o.page=Math.max(1,Math.trunc(t))),typeof n==`number`&&Number.isFinite(n)&&(o.pageSize=Math.max(1,Math.trunc(n))),Object.keys(o).length>0?o:void 0}var qr=class{constructor(e){this.requestService=e}testConnection=async e=>await this.requestService.post(`/api/mcp/servers/test`,e);createConnection=async e=>await this.requestService.post(`/api/mcp/servers`,e)},Jr=`x-nextclaw-panel-bridge-session`;function Yr(e){return e?{[Jr]:e}:void 0}var Xr=class{constructor(e){this.requestService=e}listPanelApps=async()=>await this.requestService.get(`/api/panel-apps`);getPanelApp=async e=>await this.requestService.get(`/api/panel-apps/${encodeURIComponent(e)}`);updatePanelAppPreferences=async(e,t)=>await this.requestService.request(`/api/panel-apps/${encodeURIComponent(e)}/preferences`,{method:`PATCH`,body:t});recordPanelAppOpened=async e=>await this.requestService.post(`/api/panel-apps/${encodeURIComponent(e)}/open`);deletePanelApp=async e=>await this.requestService.delete(`/api/panel-apps/${encodeURIComponent(e)}`);createBridgeSession=async e=>await this.requestService.post(`/api/panel-app-bridge-sessions`,e);deleteBridgeSession=async e=>await this.requestService.delete(`/api/panel-app-bridge-sessions/${encodeURIComponent(e)}`);grantClient=async e=>await this.requestService.post(`/api/panel-app-client-grants/${encodeURIComponent(e)}`,{});revokeClient=async e=>await this.requestService.delete(`/api/panel-app-client-grants/${encodeURIComponent(e)}`);sendAgentMessage=async(e,t={})=>await this.requestService.post(`/api/panel-app-agent/send`,e,{headers:Yr(t.bridgeSessionToken)});generateAgentObject=async(e,t={})=>await this.requestService.post(`/api/panel-app-agent/generate-object`,e,{headers:Yr(t.bridgeSessionToken)});grantAgentCapability=async(e,t={})=>await this.requestService.post(`/api/panel-app-agent-capabilities/${encodeURIComponent(e)}/grant`,{},{headers:Yr(t.bridgeSessionToken)})},Zr=class{constructor(e){this.requestService=e}list=async()=>await this.requestService.get(`/api/providers`);listTemplates=async()=>await this.requestService.get(`/api/provider-templates`);listModelCatalog=async()=>await this.requestService.get(`/api/provider-model-catalog`);update=async(e,t)=>await this.requestService.put(`/api/providers/${encodeURIComponent(e)}`,t);create=async(e={})=>await this.requestService.post(`/api/providers`,e);delete=async e=>await this.requestService.delete(`/api/providers/${encodeURIComponent(e)}`);testConnection=async(e,t)=>await this.requestService.post(`/api/providers/${encodeURIComponent(e)}/test`,t);discoverModels=async(e,t)=>await this.requestService.post(`/api/providers/${encodeURIComponent(e)}/models/discover`,t);startAuth=async(e,t={})=>await this.requestService.post(`/api/providers/${encodeURIComponent(e)}/auth/start`,t);pollAuth=async(e,t)=>await this.requestService.post(`/api/providers/${encodeURIComponent(e)}/auth/poll`,t);importAuthFromCli=async e=>await this.requestService.post(`/api/providers/${encodeURIComponent(e)}/auth/import-cli`,{})},Qr=class{constructor(e){this.requestService=e}list=async()=>await this.requestService.get(`/api/projects`);getAgreement=async e=>await this.requestService.get(`/api/projects/${encodeURIComponent(e)}/agreement`);listProjectSkills=async e=>await this.requestService.get(`/api/projects/${encodeURIComponent(e)}/skills`);create=async e=>await this.requestService.post(`/api/projects`,e);addExisting=async e=>await this.requestService.post(`/api/projects/existing`,e);remove=async(e,t)=>await this.requestService.request(`/api/projects/${encodeURIComponent(e)}`,{method:`DELETE`,body:{confirmProjectId:t}});listWork=async(e,t={})=>await this.requestService.get(`/api/projects/${encodeURIComponent(e)}/work`,{query:t});listRecentWorkArtifacts=async(e,t={})=>await this.requestService.get(`/api/projects/${encodeURIComponent(e)}/work/artifacts`,{query:t});getWorkSummary=async e=>await this.requestService.get(`/api/projects/${encodeURIComponent(e)}/work/summary`);getWorkItem=async(e,t)=>await this.requestService.get($r(e,t));createWorkItem=async(e,t)=>await this.requestService.post(`/api/projects/${encodeURIComponent(e)}/work/items`,t);updateWorkItem=async(e,t,n)=>await this.requestService.patch($r(e,t),n);deleteWorkItem=async(e,t)=>await this.requestService.delete($r(e,t));restoreWorkItem=async(e,t)=>await this.requestService.post(`${$r(e,t)}/restore`);listWorkItemActivities=async(e,t,n={})=>await this.requestService.get(`${$r(e,t)}/activities`,{query:n});linkWorkItemArtifact=async(e,t,n)=>await this.requestService.post(`${$r(e,t)}/artifacts`,n);unlinkWorkItemArtifact=async(e,t,n)=>await this.requestService.delete(`${$r(e,t)}/artifacts/${encodeURIComponent(n)}`);listWorkStates=async e=>await this.requestService.get(`/api/projects/${encodeURIComponent(e)}/work/states`);createWorkState=async(e,t)=>await this.requestService.post(`/api/projects/${encodeURIComponent(e)}/work/states`,t);updateWorkState=async(e,t,n)=>await this.requestService.patch(ei(e,t),n);deleteWorkState=async(e,t,n)=>await this.requestService.request(ei(e,t),{method:`DELETE`,body:{migrateToStateId:n??null}})};function $r(e,t){return`/api/projects/${encodeURIComponent(e)}/work/items/${encodeURIComponent(t)}`}function ei(e,t){return`/api/projects/${encodeURIComponent(e)}/work/states/${encodeURIComponent(t)}`}var ti=class{baseUrl;transport;webSocketFactory;constructor(e){this.options=e,this.baseUrl=e.baseUrl,this.transport=e.transport,this.webSocketFactory=e.webSocketFactory}subscribe=(e,t={})=>{if(this.transport?.subscribe){let t=this.transport.subscribe(e);return{close:()=>{t()}}}let n=null,r=null,i=!1,a=Math.max(200,t.reconnectDelayMs??1e3),o=()=>{r!==null&&(clearTimeout(r),r=null)},s=t=>{e(t)},c=()=>{try{n=this.createSocket(Er(this.baseUrl,`/ws`))}catch(e){t.onError?.(e),i||(r=setTimeout(c,a));return}n.onopen=()=>{s({type:`connection.open`})},n.onmessage=e=>{let t=this.parseEvent(e.data);t&&s(t)},n.onerror=e=>{t.onError?.(e),s({type:`connection.error`,payload:{message:`WebSocket error`}})},n.onclose=()=>{s({type:`connection.close`}),n=null,i||(o(),r=setTimeout(c,a))}};return c(),{close:()=>{i=!0,o(),n?.close(),n=null}}};createSocket=e=>{if(this.webSocketFactory)return this.webSocketFactory(e);if(typeof globalThis.WebSocket!=`function`)throw Error(`WebSocket is unavailable. Provide webSocketFactory when creating the client.`);return new globalThis.WebSocket(e)};parseEvent=e=>{if(typeof e!=`string`)return null;try{let t=JSON.parse(e);return t&&typeof t==`object`&&`type`in t?t:null}catch{return null}}},ni=class{constructor(e){this.requestService=e}fetchStatus=async()=>await this.requestService.get(`/api/remote/status`);fetchDoctor=async()=>await this.requestService.get(`/api/remote/doctor`);login=async e=>await this.requestService.post(`/api/remote/login`,e);startBrowserAuth=async(e={})=>await this.requestService.post(`/api/remote/auth/start`,e);pollBrowserAuth=async e=>await this.requestService.post(`/api/remote/auth/poll`,e);logout=async()=>await this.requestService.post(`/api/remote/logout`,{});updateAccountProfile=async e=>await this.requestService.put(`/api/remote/account/profile`,e);updateSettings=async e=>await this.requestService.put(`/api/remote/settings`,e);controlService=async e=>await this.requestService.post(`/api/remote/service/${e}`,{})},B=class extends Error{status;code;details;constructor(e){let{code:t,details:n,message:r,status:i}=e;super(r),this.name=`NextClawClientError`,this.status=i,this.code=t,this.details=n}};function ri(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function ii(e,t){return ri(e)?e[t]:void 0}var ai=class{baseUrl;fetchImpl;requestTimeoutMs;defaultHeaders;transport;constructor(e){this.options=e;let{baseUrl:t,fetchImpl:n,headers:r,requestTimeoutMs:i,token:a}=e;this.baseUrl=t,this.fetchImpl=Dr(n),this.requestTimeoutMs=Math.max(1e3,i??15e3),this.transport=e.transport,this.defaultHeaders={Accept:`application/json`,...r??{},...a?{Authorization:`Bearer ${a}`}:{}}}request=async(e,t={})=>{let{body:n,headers:r,method:i,query:a,signal:o,timeoutMs:s}=t;if(this.transport)return await this.requestWithTransport(e,t);let c=new AbortController,l=Math.max(1e3,s??this.requestTimeoutMs),u=this.bindAbortSignal(c,o),d=setTimeout(()=>c.abort(),l),f={...this.defaultHeaders,...r??{}},p=this.normalizeRequestBody(n,f);try{let t=await this.fetchImpl(wr(this.baseUrl,Tr(e,this.serializeQuery(a))),{method:i??`GET`,headers:f,body:p,signal:c.signal}),n=await t.json();if(!t.ok){let e=this.extractApiError(n);throw new B({message:e.message,status:t.status,code:e.code,details:e.details})}if(!this.isApiResponse(n))throw new B({message:`Unexpected NextClaw API response shape.`,status:t.status});if(!n.ok)throw new B({message:n.error.message,status:t.status,code:n.error.code,details:n.error.details});return n.data}catch(e){throw e instanceof B?e:e instanceof Error&&e.name===`AbortError`?new B({message:`NextClaw API request timed out after ${l}ms.`}):new B({message:e instanceof Error?e.message:`NextClaw API request failed.`})}finally{o?.removeEventListener(`abort`,u),clearTimeout(d)}};bindAbortSignal=(e,t)=>{let n=()=>e.abort(t?.reason);return t?t.aborted?(e.abort(t.reason),n):(t.addEventListener(`abort`,n,{once:!0}),n):n};requestWithTransport=async(e,t)=>{let{body:n,headers:r,method:i,query:a,signal:o,timeoutMs:s}=t,{transport:c}=this;if(!c)throw new B({message:`NextClaw transport is not configured.`});try{return await c.request({method:i??`GET`,path:e,...n===void 0?{}:{body:n},...a?{query:a}:{},...r?{headers:r}:{},...o?{signal:o}:{},...s===void 0?{}:{timeoutMs:s}})}catch(e){if(e instanceof B)throw e;let t=ii(e,`code`),n=ii(e,`details`),r=ii(e,`status`);throw new B({message:e instanceof Error?e.message:`NextClaw API request failed.`,code:typeof t==`string`?t:void 0,details:ri(n)?n:void 0,status:typeof r==`number`?r:void 0})}};get=async(e,t={})=>await this.request(e,{...t,method:`GET`});post=async(e,t,n={})=>await this.request(e,{...n,method:`POST`,...t===void 0?{}:{body:t}});put=async(e,t,n={})=>await this.request(e,{...n,method:`PUT`,...t===void 0?{}:{body:t}});patch=async(e,t,n={})=>await this.request(e,{...n,method:`PATCH`,...t===void 0?{}:{body:t}});delete=async(e,t={})=>await this.request(e,{...t,method:`DELETE`});upload=async(e,t,n={})=>{let{headers:r,signal:i,timeoutMs:a}=n;if(this.transport?.upload)return await this.transport.upload({path:e,formData:t,...r?{headers:r}:{},...i?{signal:i}:{},...a===void 0?{}:{timeoutMs:a}});let o=new AbortController,s=Math.max(1e3,a??this.requestTimeoutMs),c=()=>o.abort(i?.reason);i&&(i.aborted?o.abort(i.reason):i.addEventListener(`abort`,c,{once:!0}));let l=setTimeout(()=>o.abort(),s);try{let n=await this.fetchImpl(wr(this.baseUrl,e),{method:`POST`,headers:{Accept:`application/json`,...oi(this.options.token)??{},...this.options.headers??{},...r??{}},body:t,signal:o.signal}),i=await n.json();if(!n.ok){let e=this.extractApiError(i);throw new B({message:e.message,status:n.status,code:e.code,details:e.details})}if(!this.isApiResponse(i)||!i.ok)throw new B({message:`Unexpected NextClaw upload response shape.`,status:n.status});return i.data}catch(e){throw e instanceof B?e:e instanceof Error&&e.name===`AbortError`?new B({message:`NextClaw API upload timed out after ${s}ms.`}):new B({message:e instanceof Error?e.message:`NextClaw API upload failed.`})}finally{i?.removeEventListener(`abort`,c),clearTimeout(l)}};isApiResponse=e=>typeof e==`object`&&!!e&&`ok`in e;extractApiError=e=>{if(this.isApiResponse(e)&&!e.ok)return e.error;if(typeof e==`object`&&e&&`message`in e){let t=e;return{code:typeof t.code==`string`?t.code:`HTTP_ERROR`,message:typeof t.message==`string`?t.message:`NextClaw API request failed.`,details:t.details!==null&&typeof t.details==`object`?t.details:void 0}}return{code:`HTTP_ERROR`,message:`NextClaw API request failed.`}};normalizeRequestBody=(e,t)=>{if(e!==void 0)return e instanceof FormData||e instanceof URLSearchParams||e instanceof Blob||e instanceof ArrayBuffer?e:typeof e==`string`?(!(`Content-Type`in t)&&!(`content-type`in t)&&(t[`Content-Type`]=`application/json`),e):(!(`Content-Type`in t)&&!(`content-type`in t)&&(t[`Content-Type`]=`application/json`),JSON.stringify(e))};serializeQuery=e=>{if(!e)return;if(e instanceof URLSearchParams)return e;let t=new URLSearchParams;for(let[n,r]of Object.entries(e)){let e=Array.isArray(r)?r:[r];for(let r of e)r!=null&&t.append(n,String(r))}return t}};function oi(e){return e?{Authorization:`Bearer ${e}`}:null}var si=class{constructor(e){this.requestService=e}fetch=async()=>await this.requestService.get(`/api/runtime/control`);startService=async()=>await this.requestService.post(`/api/runtime/control/start-service`,{});restartService=async()=>await this.requestService.post(`/api/runtime/control/restart-service`,{});stopService=async()=>await this.requestService.post(`/api/runtime/control/stop-service`,{})},V=class{constructor(e){this.requestService=e}fetch=async()=>await this.requestService.get(`/api/runtime/update`);check=async()=>await this.requestService.post(`/api/runtime/update/check`,{});download=async()=>await this.requestService.post(`/api/runtime/update/download`,{});apply=async()=>await this.requestService.post(`/api/runtime/update/apply`,{});updateChannel=async e=>await this.requestService.put(`/api/runtime/update/channel`,{channel:e})},ci=class{constructor(e){this.requestService=e}browse=async e=>{let{basePath:t,includeFiles:n,path:r}=e??{},i=typeof r==`string`?r.trim():``,a=typeof t==`string`?t.trim():``;return await this.requestService.get(`/api/server-paths/browse`,{query:{...i?{path:i}:{},...a?{basePath:a}:{},...n?{includeFiles:`1`}:{}}})};watch=async e=>await this.requestService.post(`/api/server-paths/watch`,e);unwatch=async e=>{await this.requestService.delete(`/api/server-paths/watch`,{query:{subscriptionId:e.trim()}})};createDirectory=async e=>await this.requestService.post(`/api/server-paths/directory`,e);createFile=async e=>await this.requestService.post(`/api/server-paths/file`,e);renameEntry=async e=>await this.requestService.request(`/api/server-paths/entry`,{method:`PATCH`,body:e});deleteEntry=async e=>await this.requestService.delete(`/api/server-paths/entry`,{query:{basePath:e.basePath.trim(),path:e.path.trim()}});uploadFiles=async e=>{let{basePath:t,files:n,overwrite:r,targetPath:i}=e,a=new FormData;return a.append(`basePath`,t.trim()),a.append(`targetPath`,i.trim()),a.append(`overwrite`,r?`true`:`false`),n.forEach(e=>a.append(`files`,e)),await this.requestService.upload(`/api/server-paths/files`,a,{timeoutMs:12e4})};read=async e=>{let{basePath:t,line:n,path:r}=e,i=r.trim(),a=typeof t==`string`?t.trim():``,o=Number.isSafeInteger(n)&&(n??0)>0?n:null;return await this.requestService.get(`/api/server-paths/read`,{query:{path:i,...a?{basePath:a}:{},...o?{line:String(o)}:{}}})};search=async e=>{let{basePath:t,limit:n,query:r}=e,i=t.trim(),a=r?.trim()??``,o=Number.isSafeInteger(n)&&(n??0)>0?n:null;return await this.requestService.get(`/api/server-paths/search`,{query:{basePath:i,...a?{query:a}:{},...o?{limit:String(o)}:{}}})}},li=`x-nextclaw-panel-bridge-session`;function ui(e){return e?{[li]:e}:void 0}var di=class{constructor(e){this.requestService=e}listServiceApps=async()=>await this.requestService.get(`/api/service-apps`);getServiceApp=async e=>await this.requestService.get(`/api/service-apps/${encodeURIComponent(e)}`);restartServiceApp=async e=>await this.requestService.post(`/api/service-apps/${encodeURIComponent(e)}/restart`);deleteServiceApp=async(e,t=!1)=>await this.requestService.request(`/api/service-apps/${encodeURIComponent(e)}`,{method:`DELETE`,body:{purgeData:t}});listServiceActions=async(e={})=>{let t=e.appId?`?${new URLSearchParams({appId:e.appId}).toString()}`:``;return await this.requestService.get(`/api/service-actions${t}`,{headers:ui(e.bridgeSessionToken)})};listVerificationRecords=async(e={})=>{let t=new URLSearchParams;e.acceptanceId&&t.set(`acceptanceId`,e.acceptanceId),e.appId&&t.set(`appId`,e.appId),e.limit!==void 0&&t.set(`limit`,String(e.limit));let n=t.size>0?`?${t.toString()}`:``;return await this.requestService.get(`/api/runtime-verification-records${n}`,{headers:ui(e.bridgeSessionToken)})};getPortableRuntimeAcceptanceContract=async(e={})=>{let t=e.locale?`?${new URLSearchParams({locale:e.locale})}`:``;return await this.requestService.get(`/api/portable-runtime/acceptance/contract${t}`,{headers:ui(e.bridgeSessionToken)})};getPortableRuntimeAcceptanceStatus=async(e={})=>{let t=new URLSearchParams;e.appId&&t.set(`appId`,e.appId),e.locale&&t.set(`locale`,e.locale);let n=t.size>0?`?${t.toString()}`:``;return await this.requestService.get(`/api/portable-runtime/acceptance/status${n}`,{headers:ui(e.bridgeSessionToken)})};exportPortableRuntimeAcceptance=async(e={})=>{let t=new URLSearchParams;e.appId&&t.set(`appId`,e.appId),e.locale&&t.set(`locale`,e.locale);let n=t.size>0?`?${t.toString()}`:``;return await this.requestService.get(`/api/portable-runtime/acceptance/export${n}`,{headers:ui(e.bridgeSessionToken)})};discoverServiceAppActions=async e=>await this.requestService.post(`/api/service-apps/${encodeURIComponent(e)}/actions/discover`,{});invokeServiceAction=async(e,t,n={})=>await this.requestService.post(`/api/service-actions/${encodeURIComponent(e)}/invoke`,{input:t??{}},{headers:ui(n.bridgeSessionToken)});grantServiceAction=async(e,t={})=>await this.requestService.post(`/api/service-actions/${encodeURIComponent(e)}/grant`,{},{headers:ui(t.bridgeSessionToken)});grantServiceActions=async(e,t={})=>await this.requestService.post(`/api/service-action-grants`,{actionIds:e},{headers:ui(t.bridgeSessionToken)});grantAgentServiceActions=async(e,t)=>await this.requestService.post(`/api/agents/${encodeURIComponent(e)}/service-action-grants`,{actionIds:t});listServiceActionGrants=async()=>await this.requestService.get(`/api/service-action-grants`);revokeServiceAction=async(e,t={})=>await this.requestService.delete(`/api/service-actions/${encodeURIComponent(e)}/grant`,{headers:ui(t.bridgeSessionToken)});revokeServiceActionGrant=async e=>{let{actionId:t,caller:n}=e,r=new URLSearchParams({surface:n.surface,callerId:n.surface===`panel-app`?n.appId:n.agentId});return await this.requestService.delete(`/api/service-action-grants/${encodeURIComponent(t)}?${r.toString()}`)}},fi=class{constructor(e,t){this.requestService=e,this.eventBus=t}list=async e=>{let{limit:t,page:n,pageSize:r,query:i,peerId:a}=e??{},o=new URLSearchParams;typeof t==`number`&&Number.isFinite(t)&&o.set(`limit`,String(Math.max(1,Math.trunc(t)))),typeof n==`number`&&Number.isFinite(n)&&o.set(`page`,String(Math.max(1,Math.trunc(n)))),typeof r==`number`&&Number.isFinite(r)&&o.set(`pageSize`,String(Math.max(1,Math.trunc(r)))),i?.trim()&&o.set(`query`,i.trim());let s=a?.trim();return s&&o.set(`peerId`,s),await this.requestService.get(`/api/ncp/sessions`,{...o.size>0?{query:o}:{}})};get=async e=>await this.requestService.get(`/api/ncp/sessions/${encodeURIComponent(e)}`);listMessages=async(e,t={})=>{let n=typeof t==`number`?{limit:t}:t,r=new URLSearchParams;return typeof n.limit==`number`&&Number.isFinite(n.limit)&&r.set(`limit`,String(Math.max(1,Math.trunc(n.limit)))),n.cursor?.trim()&&r.set(`cursor`,n.cursor.trim()),n.toolPayload===`summary`&&r.set(`toolPayload`,`summary`),n.initialPayload===`compact`&&r.set(`initialPayload`,`compact`),await this.requestService.get(`/api/ncp/sessions/${encodeURIComponent(e)}/messages`,{...r.size>0?{query:r}:{},...n.signal?{signal:n.signal}:{}})};getUsage=async e=>await this.requestService.get(`/api/ncp/sessions/${encodeURIComponent(e)}/usage`);listSkills=async(e,t)=>await this.requestService.get(`/api/ncp/sessions/${encodeURIComponent(e)}/skills`,{query:t?.projectRoot?.trim()?{projectRoot:t.projectRoot.trim()}:void 0});listQueuedInputs=async e=>await this.requestService.get(`/api/ncp/sessions/${encodeURIComponent(e)}/queued-inputs`);deleteQueuedInput=async(e,t)=>await this.requestService.delete(`/api/ncp/sessions/${encodeURIComponent(e)}/queued-inputs/${encodeURIComponent(t)}`);listPendingInputs=async e=>await this.requestService.get(`/api/ncp/sessions/${encodeURIComponent(e)}/pending-inputs`);steerQueuedInput=async(e,t)=>await this.requestService.post(`/api/ncp/sessions/${encodeURIComponent(e)}/queued-inputs/${encodeURIComponent(t)}/steer`);update=async(e,t)=>await this.requestService.put(`/api/ncp/sessions/${encodeURIComponent(e)}`,t);compactContext=async e=>await this.requestService.post(`/api/ncp/sessions/${encodeURIComponent(e)}/context/compact`);delete=async e=>await this.requestService.delete(`/api/ncp/sessions/${encodeURIComponent(e)}`);uploadAssets=async e=>{let t=new FormData;for(let n of e)t.append(`files`,n);return await this.requestService.upload(`/api/ncp/assets`,t)};subscribe=(e,t={})=>({close:this.eventBus.subscribeAll(t=>{e(t)})})},pi=class{constructor(e){this.requestService=e}list=async(e={})=>await this.requestService.get(`/api/system-object-references`,{query:e});resolve=async e=>await this.requestService.post(`/api/system-object-references/resolve`,{uri:e})},mi=class{baseUrl;agentRuns;app;appPackages;appData;agents;auth;channelAuth;capabilityAccess;featureControls;config;eventBus;marketplace;inboxDeliveries;mcpMarketplace;mcp;panelApps;providers;projects;realtime;remote;runtimeControl;runtimeUpdate;serverPaths;serviceApps;sessions;systemObjectReferences;constructor(e){this.baseUrl=Cr(e.baseUrl);let t={...e,baseUrl:this.baseUrl},n=new ai(t);this.realtime=new ti(t);let r=null;this.eventBus=new Bt({onFirstSubscriber:()=>{r??=this.realtime.subscribe(e=>{this.eventBus.emitEnvelope({type:e.type,payload:`payload`in e?e.payload:void 0,emittedAt:`emittedAt`in e?e.emittedAt:new Date().toISOString(),source:`source`in e?e.source:`realtime`})})},onNoSubscribers:()=>{r?.close(),r=null}}),this.agentRuns=new Ar(n,t),this.app=new Mr(n),this.appPackages=new Nr(n),this.appData=new Pr(n),this.agents=new jr(n,this.baseUrl),this.auth=new Fr(n),this.channelAuth=new Ir(n),this.capabilityAccess=new Lr(n),this.featureControls=new Rr(n),this.config=new zr(n),this.marketplace=new Br(n),this.inboxDeliveries=new Wr(n),this.mcpMarketplace=new Gr(n),this.mcp=new qr(n),this.panelApps=new Xr(n),this.providers=new Zr(n),this.projects=new Qr(n),this.remote=new ni(n),this.runtimeControl=new si(n),this.runtimeUpdate=new V(n),this.serverPaths=new ci(n),this.serviceApps=new di(n),this.sessions=new fi(n,this.eventBus),this.systemObjectReferences=new pi(n)}},hi=`http://127.0.0.1:55667`,gi=(()=>{let e=(void 0)?.trim();return e?e.replace(/\/$/,``):typeof window<`u`&&window.location?.origin?window.location.origin:hi})(),_i={"Use this page to manage the local NextClaw service. Closing the browser does not stop the service.":`runtimeControlManagedLocalMessage`,"This page is served by the running local service. Closing the browser does not stop it.":`runtimeControlManagedLocalHint`,"This page is served by the running local service.":`runtimeControlManagedLocalHintShort`,"This page is already hosted by the running local service.":`runtimeControlStartUnavailableHosted`,"App restart is only available in the desktop shell.":`runtimeControlRestartAppDesktopOnly`,"The local service is not running.":`runtimeControlServiceNotRunning`,"The local service is already stopped.":`runtimeControlServiceAlreadyStopped`,"Managed service started.":`runtimeControlManagedServiceStarted`,"Managed service start scheduled.":`runtimeControlManagedServiceStartScheduled`,"Restart scheduled. This page may disconnect for a few seconds.":`runtimeControlRestartScheduled`,"Stop scheduled. This page will disconnect shortly.":`runtimeControlStopScheduled`,"runtime healthy":`runtimeControlHealthy`};function vi(e){return e.activeSystemAction?`service-transitioning`:e.lifecyclePhase}function yi(e){return e===`ready`?`connected`:e===`startup-failed`||e===`stalled`?`disconnected`:`connecting`}function bi(e){let t=vi(e);return{...e,phase:t,connectionStatus:yi(t)}}function xi(e){return e===`start-service`?`starting-service`:e===`stop-service`?`stopping-service`:e===`restart-service`?`restarting-service`:`restarting-app`}function Si(e){return e===`start-service`?`starting`:e===`stop-service`?`stopping`:e===`restart-service`?`restarting`:null}function Ci(e){if(!e)return null;let t=_i[e.trim()];return t?r(t):e}function wi(e){let{action:t,message:n}=e;return{action:t,lifecycle:xi(t),serviceState:Si(t),message:n}}function Ti(e){if(e.runtimeControlError)return{tone:`inactive`,title:r(`runtimeControlLoadFailed`),description:e.runtimeControlError,reasonLines:[],actionLabel:null,isBusy:!1};if(!e.runtimeControlView)return{tone:`inactive`,title:r(`runtimeStatusLoadingTitle`),description:r(`runtimeStatusLoadingDescription`),reasonLines:[],actionLabel:null,isBusy:!!e.activeSystemAction};if(e.activeSystemAction)return{tone:`attention`,title:r(`runtimeControlTitle`),description:Ci(e.activeSystemAction.message)||Ci(e.runtimeControlView.message)||r(`runtimeControlDescription`),reasonLines:[],actionLabel:null,isBusy:!0};let t=e.runtimeControlView;return t.pendingRestart?{tone:`attention`,title:r(`runtimeStatusPendingRestartTitle`),description:r(`runtimeStatusPendingRestartDescription`),reasonLines:t.pendingRestart.changedPaths.length>0?t.pendingRestart.changedPaths.map(e=>r(`runtimeStatusPendingRestartReasonItem`).replace(`{path}`,e)):[t.pendingRestart.message],actionLabel:t.canRestartService.available?r(`runtimeStatusRestartAction`):null,isBusy:!1}:{tone:t.lifecycle===`healthy`?`healthy`:`inactive`,title:r(`runtimeStatusHealthyTitle`),description:r(`runtimeStatusHealthyDescription`),reasonLines:[],actionLabel:null,isBusy:!1}}function Ei(e){let t=e.activeSystemAction,n=e.runtimeControlView;return{controlView:n,visibleLifecycle:t?.lifecycle??n?.lifecycle??`healthy`,visibleServiceState:t?.serviceState??n?.serviceState??`unknown`,visibleMessage:Ci(t?.message)||Ci(e.lastSystemActionError)||Ci(n?.message)||r(`runtimeControlDescription`),busyAction:t?.action??null,busy:!!t,pendingRestart:n?.pendingRestart??null,errorMessage:Ci(e.lastSystemActionError)||Ci(e.runtimeControlError)||null}}var Di=e=>{let t,n=new Set,r=(e,r)=>{let i=typeof e==`function`?e(t):e;if(!Object.is(i,t)){let e=t;t=r??(typeof i!=`object`||!i)?i:Object.assign({},t,i),n.forEach(n=>n(t,e))}},i=()=>t,a={setState:r,getState:i,getInitialState:()=>o,subscribe:e=>(n.add(e),()=>n.delete(e))},o=t=e(r,i,a);return a},Oi=(e=>e?Di(e):Di),ki=e=>e;function Ai(e,t=ki){let n=N.useSyncExternalStore(e.subscribe,N.useCallback(()=>t(e.getState()),[e,t]),N.useCallback(()=>t(e.getInitialState()),[e,t]));return N.useDebugValue(n),n}var ji=e=>{let t=Oi(e),n=e=>Ai(t,e);return Object.assign(n,t),n},Mi=(e=>e?ji(e):ji),Ni={lifecyclePhase:`cold-starting`,hasReachedReady:!1,lastReadyAt:null,recoveryStartedAt:null,bootstrapStatus:null,lastError:null,lastTransportError:null,runtimeControlView:null,runtimeControlError:null,activeSystemAction:null,lastSystemActionError:null},Pi=Mi(e=>({state:Ni,patchState:t=>e(e=>({state:{...e.state,...t}}))}));function Fi(e){if(e.length===0)throw Error(`AdaptiveCadence requires at least one stage.`);for(let t of e)if(t.delaysMs.length===0)throw Error(`AdaptiveCadence stage requires at least one delay.`)}var Ii=class{constructor(e){this.options=e,this.attempt=0,this.startedAt=null,this.lastFailureAt=null,this.lastSuccessAt=null,this.manualTriggerPending=!1,this.completed=!1,this.recordFailure=()=>{let e=this.clock();this.completed=!1,this.manualTriggerPending=!1,this.startedAt=this.startedAt??e,this.lastFailureAt=e,this.attempt+=1},this.recordSuccess=()=>{this.lastSuccessAt=this.clock(),this.attempt=0,this.startedAt=null,this.lastFailureAt=null,this.manualTriggerPending=!1,this.completed=!0},this.reset=()=>{this.attempt=0,this.startedAt=null,this.lastFailureAt=null,this.lastSuccessAt=null,this.manualTriggerPending=!1,this.completed=!1},this.requestManualTrigger=()=>{this.completed=!1,this.manualTriggerPending=!0},this.hasManualTrigger=()=>this.manualTriggerPending,this.getNextDelay=(e={})=>{if(this.manualTriggerPending)return e.consumeManualTrigger&&(this.manualTriggerPending=!1),this.options.manualTriggerDelayMs;if(this.completed)return this.options.successDelayMs;if(this.startedAt===null)return this.options.idleDelayMs;let t=this.resolveStage(this.clock()-this.startedAt);return t.delaysMs[Math.min(this.attempt-1,t.delaysMs.length-1)]},this.getSnapshot=()=>({attempt:this.attempt,startedAt:this.startedAt,lastFailureAt:this.lastFailureAt,lastSuccessAt:this.lastSuccessAt,manualTriggerPending:this.manualTriggerPending,completed:this.completed}),this.resolveStage=e=>this.options.stages.find(t=>t.untilElapsedMs===void 0||e<t.untilElapsedMs)??this.options.stages[this.options.stages.length-1],Fi(e.stages),this.clock=e.clock??(()=>Date.now())}},Li=3e4,Ri={idleDelayMs:1e3,manualTriggerDelayMs:0,successDelayMs:!1,stages:[{untilElapsedMs:3e4,delaysMs:[500,1e3,2e3,4e3,5e3]},{untilElapsedMs:5*6e4,delaysMs:[1e4,15e3,3e4]},{delaysMs:[6e4]}]};function zi(e){return e instanceof Error?e.message:String(e??``)}function Bi(e){return e&&(e.ncpAgent.error?.trim()||e.lastError?.trim())||null}function Vi(e){return r(e===`start-service`?`runtimeControlStartingServiceHelp`:e===`restart-service`?`runtimeControlRestartingServiceHelp`:e===`stop-service`?`runtimeControlStoppingServiceHelp`:`runtimeControlRestartingAppHelp`)}var Hi=new class{constructor(){this.recoveryTimeoutId=null,this.runtimeBootstrapProbeCadence=new Ii(Ri),this.getRuntimeBootstrapPollInterval=e=>{let{lifecyclePhase:t,activeSystemAction:n}=this.getState(),r=t===`recovering`||t===`stalled`||n?.lifecycle===`recovering`;return this.runtimeBootstrapProbeCadence.hasManualTrigger()?this.runtimeBootstrapProbeCadence.getNextDelay({consumeManualTrigger:!0}):!r&&e?.ncpAgent.state===`ready`?!1:this.runtimeBootstrapProbeCadence.getNextDelay({consumeManualTrigger:!0})},this.getRuntimeControl=async()=>this.decorateForCurrentEnvironment(await uc()),this.reportBootstrapStatus=e=>{let t=this.getState(),n=Bi(e);if(e.ncpAgent.state===`ready`){this.transitionToReady(e);return}if(!t.hasReachedReady){if(e.ncpAgent.state===`error`||e.phase===`error`){this.transitionToStartupFailed(n,e);return}this.transitionToColdStarting(e);return}this.transitionToRecovering(n,e)},this.reportBootstrapQueryError=e=>{let t=zi(e).trim();if(t&&!this.reportTransportFailure(t)){if(this.getState().hasReachedReady){this.transitionToRecovering(t);return}this.transitionToStartupFailed(t)}},this.reportTransportFailure=e=>{let t=zi(e).trim();return go(t)?this.getState().hasReachedReady?(this.transitionToRecovering(t),!0):(this.runtimeBootstrapProbeCadence.recordFailure(),this.patchState({lastTransportError:t}),!0):!1},this.handleConnectionInterrupted=e=>{let t=this.getState(),n=e?.trim()||null;if(!t.hasReachedReady){this.runtimeBootstrapProbeCadence.recordFailure(),n&&this.patchState({lastTransportError:n});return}this.transitionToRecovering(n)},this.handleConnectionRestored=()=>{let e=this.getState();e.bootstrapStatus?.ncpAgent.state===`ready`&&this.transitionToReady(e.bootstrapStatus)},this.reportRuntimeControlView=e=>{this.patchState({runtimeControlView:e,runtimeControlError:null})},this.reportRuntimeControlError=e=>{let t=zi(e).trim();t&&this.patchState({runtimeControlError:t})},this.runRuntimeControlAction=async e=>{this.patchState({activeSystemAction:wi({action:e,message:Vi(e)}),lastSystemActionError:null});try{let t=await this.executeRuntimeControlAction(e);if(e===`restart-app`)return t;if(e===`stop-service`)return await this.refreshRuntimeControlView(),this.clearActiveSystemAction(),t;this.patchState({activeSystemAction:{action:e,lifecycle:`recovering`,serviceState:null,message:r(`runtimeControlRecoveringHelp`)}}),this.runtimeBootstrapProbeCadence.requestManualTrigger();let n=await this.waitForRecovery();return this.syncRuntimeControlQueryCache(n),this.reportRuntimeControlView(n),this.clearActiveSystemAction(),t}catch(t){let n=t instanceof Error?t.message:r(`runtimeControlActionFailed`);throw this.patchState({activeSystemAction:{action:e,lifecycle:`failed`,serviceState:e===`stop-service`?`running`:e===`restart-app`?null:`unknown`,message:n},lastSystemActionError:n}),t}},this.getStatusView=()=>bi(this.getState()),this.requestRuntimeBootstrapProbeNow=()=>{this.runtimeBootstrapProbeCadence.requestManualTrigger(),Lt.refetchQueries({queryKey:[`runtime-bootstrap-status`]})},this.resetForTests=()=>{this.clearRecoveryTimeout(),this.runtimeBootstrapProbeCadence.reset(),Pi.setState({state:Ni})},this.getState=()=>Pi.getState().state,this.patchState=e=>{Pi.getState().patchState(e)},this.transitionToColdStarting=e=>{this.runtimeBootstrapProbeCadence.recordFailure(),this.clearRecoveryTimeout(),this.patchState({lifecyclePhase:`cold-starting`,recoveryStartedAt:null,bootstrapStatus:e,lastError:null})},this.transitionToStartupFailed=(e,t)=>{this.runtimeBootstrapProbeCadence.recordFailure(),this.clearRecoveryTimeout(),this.patchState({lifecyclePhase:`startup-failed`,recoveryStartedAt:null,bootstrapStatus:t??this.getState().bootstrapStatus,lastError:e})},this.transitionToRecovering=(e,t)=>{this.runtimeBootstrapProbeCadence.recordFailure();let n=this.getState();if(!n.hasReachedReady){this.patchState({lastTransportError:e?.trim()||n.lastTransportError});return}n.lifecyclePhase!==`recovering`&&n.lifecyclePhase!==`stalled`&&(this.clearRecoveryTimeout(),this.recoveryTimeoutId=window.setTimeout(()=>{this.recoveryTimeoutId=null,this.getState().lifecyclePhase===`recovering`&&this.patchState({lifecyclePhase:`stalled`})},Li)),this.patchState({lifecyclePhase:n.lifecyclePhase===`stalled`?`stalled`:`recovering`,recoveryStartedAt:n.recoveryStartedAt??Date.now(),bootstrapStatus:t??n.bootstrapStatus,lastError:e?.trim()||n.lastError,lastTransportError:e?.trim()||n.lastTransportError})},this.transitionToReady=e=>{this.runtimeBootstrapProbeCadence.recordSuccess();let t=this.getState(),n=t.lifecyclePhase===`recovering`||t.lifecyclePhase===`stalled`;this.clearRecoveryTimeout(),this.patchState({lifecyclePhase:`ready`,hasReachedReady:!0,lastReadyAt:Date.now(),recoveryStartedAt:null,bootstrapStatus:e,lastError:null,lastTransportError:null}),n&&Lt.refetchQueries({type:`active`})},this.executeRuntimeControlAction=async e=>{let t=this.getDesktopBridge();if(e===`restart-service`&&t&&typeof t.restartService==`function`){let e=await t.restartService();return{accepted:e.accepted,action:`restart-service`,lifecycle:e.lifecycle,message:e.message}}if(e===`start-service`)return await dc();if(e===`stop-service`)return await pc();if(e===`restart-app`){if(!t||typeof t.restartApp!=`function`)throw Error(r(`runtimeRestartAppUnavailable`));let e=await t.restartApp();return{accepted:e.accepted,action:`restart-app`,lifecycle:e.lifecycle,message:e.message}}return await fc()},this.waitForRecovery=async()=>{let e=Date.now()+25e3,t=null;for(;Date.now()<e;)try{return await this.getRuntimeControl()}catch(e){t=e,await new Promise(e=>{window.setTimeout(e,1500)})}throw t instanceof Error?t:Error(r(`runtimeRecoveryTimedOut`))},this.refreshRuntimeControlView=async()=>{try{let e=await this.getRuntimeControl();this.syncRuntimeControlQueryCache(e),this.reportRuntimeControlView(e)}catch(e){this.reportRuntimeControlError(e)}},this.syncRuntimeControlQueryCache=e=>{Lt.setQueryData([`runtime-control`],e)},this.clearActiveSystemAction=()=>{this.patchState({activeSystemAction:null,lastSystemActionError:null})},this.clearRecoveryTimeout=()=>{this.recoveryTimeoutId!==null&&(window.clearTimeout(this.recoveryTimeoutId),this.recoveryTimeoutId=null)},this.decorateForCurrentEnvironment=e=>{let t=this.getDesktopBridge();return!t||typeof t.restartApp!=`function`?e:{...e,environment:`desktop-embedded`,serviceState:`running`,canStartService:{available:!1,requiresConfirmation:!1,impact:`none`},canStopService:{available:!1,requiresConfirmation:!0,impact:`brief-ui-disconnect`},canRestartApp:{available:!0,requiresConfirmation:!0,impact:`full-app-relaunch`},ownerLabel:r(`runtimeControlEnvironmentDesktop`),managementHint:r(`runtimeControlDesktopServiceHint`)}},this.getDesktopBridge=()=>typeof window>`u`?null:window.nextclawDesktop??null}};function Ui(){let e=at({queryKey:[`runtime-bootstrap-status`],queryFn:()=>No({timeoutMs:5e3}),refetchInterval:e=>Hi.getRuntimeBootstrapPollInterval(e.state.data),retry:!1}),t=at({queryKey:[`runtime-control`],queryFn:async()=>await Hi.getRuntimeControl(),staleTime:5e3});(0,N.useEffect)(()=>{e.data&&Hi.reportBootstrapStatus(e.data)},[e.data]),(0,N.useEffect)(()=>{e.error&&Hi.reportBootstrapQueryError(e.error)},[e.error]),(0,N.useEffect)(()=>{t.data&&Hi.reportRuntimeControlView(t.data)},[t.data]),(0,N.useEffect)(()=>{t.error&&Hi.reportRuntimeControlError(t.error)},[t.error])}function Wi(){return bi(Pi(e=>e.state))}function Gi(){return Ti(Pi(e=>e.state))}function Ki(){return Ei(Pi(e=>e.state))}var H=Mi(()=>({supported:!1,initialized:!1,busyAction:null,snapshot:null})),U=class{constructor(e){this.desktopApi=e,this.kind=`desktop-bridge`,this.subscribe=e=>this.desktopApi.onUpdateStateChanged(e),this.getState=async()=>await this.desktopApi.getUpdateState(),this.checkForUpdates=async()=>await this.desktopApi.checkForUpdates(),this.downloadUpdate=async()=>await this.desktopApi.downloadUpdate(),this.applyDownloadedUpdate=async()=>await this.desktopApi.applyDownloadedUpdate(),this.updateChannel=async e=>await this.desktopApi.updateChannel(e)}},qi=class{constructor(){this.kind=`runtime-host`,this.getState=async()=>await mc(),this.checkForUpdates=async()=>await hc(),this.downloadUpdate=async()=>await gc(),this.applyDownloadedUpdate=async()=>await _c(),this.updateChannel=async e=>await vc(e)}},Ji=new class{constructor(){this.unsubscribe=null,this.subscriptionCount=0,this.source=null,this.start=async()=>{this.subscriptionCount+=1;let e=this.resolveSource();if(this.source=e,!e){H.setState({supported:!1,initialized:!0,snapshot:null});return}e.kind===`desktop-bridge`&&!this.unsubscribe&&(this.unsubscribe=e.subscribe(e=>{H.setState({supported:!0,initialized:!0,snapshot:e})})),H.setState({supported:!0,initialized:!1});try{let t=await e.getState();H.setState({supported:!0,initialized:!0,snapshot:t})}catch(t){if(e.kind===`runtime-host`&&this.isUnsupportedError(t)){H.setState({supported:!1,initialized:!0,snapshot:null});return}H.setState({supported:!0,initialized:!0}),F.error(`${r(`runtimeUpdatesLoadFailed`)}: ${this.getErrorMessage(t)}`)}},this.stop=()=>{this.subscriptionCount=Math.max(0,this.subscriptionCount-1),!(this.subscriptionCount>0)&&(this.unsubscribe?.(),this.unsubscribe=null,this.source=null)},this.reportSnapshot=e=>{this.source?.kind!==`desktop-bridge`&&H.setState({supported:!0,initialized:!0,snapshot:e})},this.refreshAfterRealtimeReconnect=async()=>{this.source?.kind===`runtime-host`&&await this.refreshSnapshot()},this.checkForUpdates=async()=>{let e;try{e=await this.runSnapshotCommand(`checking`,r(`runtimeUpdatesCheckFailed`),async e=>await e.checkForUpdates())}catch{return}if(e.status===`up-to-date`){F.success(r(`runtimeUpdatesAlreadyLatest`));return}if(e.status===`update-available`){F.success(r(`runtimeUpdatesAvailable`).replace(`{version}`,e.availableVersion??r(`runtimeUpdatesUnknownVersion`)));return}e.status===`downloaded`&&F.success(r(`runtimeUpdatesReadyToApply`))},this.downloadUpdate=async()=>{try{await this.runSnapshotCommand(`downloading`,r(`runtimeUpdatesDownloadFailed`),async e=>await e.downloadUpdate())}catch{return}},this.applyDownloadedUpdate=async()=>{try{await this.runSnapshotCommand(`applying`,r(`runtimeUpdatesApplyFailed`),async e=>await e.applyDownloadedUpdate())}catch{return}},this.updateNow=async()=>{let e=H.getState().snapshot;if(!(e?.status!==`update-available`&&e?.status!==`downloaded`))try{await this.runSnapshotCommand(`updating`,r(`runtimeUpdatesUpdateFailed`),async t=>{let n=e.status===`downloaded`?e:await t.downloadUpdate();return H.setState({snapshot:n}),n.status===`downloaded`?await t.applyDownloadedUpdate():n})}catch{return}},this.updateChannel=async e=>{if(H.getState().snapshot?.channel===e)return;let t;try{t=await this.runSnapshotCommand(`switching-channel`,r(`runtimeUpdatesChannelChangeFailed`),async t=>await t.updateChannel(e))}catch{return}if(t.status===`update-available`&&t.availableVersion){F.success(r(`runtimeUpdatesChannelChangedWithUpdate`).replace(`{channel}`,this.getChannelLabel(e)).replace(`{version}`,t.availableVersion));return}F.success(r(`runtimeUpdatesChannelChanged`).replace(`{channel}`,this.getChannelLabel(e)))},this.refreshSnapshot=async()=>{if(!(!this.source||this.source.kind!==`runtime-host`))try{let e=await this.source.getState();H.setState({supported:!0,initialized:!0,snapshot:e})}catch{}},this.runSnapshotCommand=async(e,t,n)=>{let i=this.source??this.resolveSource();if(!i)throw Error(r(`runtimeUpdatesUnavailableDescription`));this.source=i,H.setState({busyAction:e});try{let e=await n(i);return H.setState({snapshot:e}),e}catch(e){throw F.error(`${t}: ${this.getErrorMessage(e)}`),e}finally{H.setState({busyAction:null})}},this.resolveSource=()=>{let e=this.getDesktopApi();return e?new U(e):new qi},this.getDesktopApi=()=>typeof window>`u`?null:window.nextclawDesktop??null,this.isUnsupportedError=e=>{let t=this.getErrorMessage(e).toLowerCase();return t.includes(`404`)||t.includes(`not found`)||t.includes(`endpoint not found`)},this.getErrorMessage=e=>e instanceof Error?e.message:r(`error`),this.getChannelLabel=e=>r(e===`beta`?`desktopUpdatesChannelBeta`:`desktopUpdatesChannelStable`)}},Yi=`https://docs.nextclaw.io/`;function Xi(e,t){let n=t===`zh-CN`?`en-US`:`zh-CN`;return e?.[t]?.trim()||e?.[n]?.trim()||null}function Zi(e){let t=e.releaseNotesUrl?.trim(),n=(e.availableVersion??e.downloadedVersion)?.trim();return t?Qi(n,t):null}function Qi(e,t=Yi){let n=e?.trim();if(!n||!/^[0-9A-Za-z.-]+$/.test(n))return null;try{return new URL(`/release-notes/nextclaw-v${n}.json`,t).toString()}catch{return null}}function $i(e,t){return Xi(e?.links?.html,t)}function ea(e){let t=e.releaseNotesUrl?.trim(),n=(e.downloadedVersion??e.availableVersion)?.trim();return!t||!n?null:{url:t,versionLabel:`v${n}`}}function ta(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function na(e){return ta(e)?typeof e[`zh-CN`]==`string`||typeof e[`en-US`]==`string`:!1}function ra(e){return!ta(e)||!na(e.title)?!1:e.body===void 0||na(e.body)}function ia(e){return ta(e)&&typeof e.kind==`string`&&Array.isArray(e.items)&&e.items.every(ra)&&(e.title===void 0||na(e.title))}function aa(e){return ta(e)&&(e.html===void 0||na(e.html))}function oa(e){return ta(e)&&Array.isArray(e.sections)&&e.sections.every(ia)&&(e.title===void 0||na(e.title))&&(e.summary===void 0||na(e.summary))&&(e.links===void 0||aa(e.links))}async function sa(e){let t=await fetch(e,{cache:`no-store`,headers:{accept:`application/json`}});if(!t.ok)throw Error(`Release notes request failed with HTTP ${t.status}.`);let n=await t.json();if(!oa(n))throw Error(`Release notes payload has an unsupported shape.`);return n}function ca(){return n()===`zh`?`zh-CN`:`en-US`}function la(e){let t=Qi(e),n=ca(),r=$i(at({queryKey:[`current-release-notes`,t],queryFn:async()=>await sa(t??``),enabled:!!t,retry:!1,staleTime:300*1e3}).data,n),i=e?.trim();return r&&i?{url:r,versionLabel:`v${i}`}:null}function ua({children:e,fullHeight:t=!1,className:n}){return(0,P.jsx)(`div`,{className:Sr(`animate-fade-in`,t?`h-[calc(100vh-80px)] w-full flex flex-col`:`pb-16`,n),children:e})}function da({title:e,description:t,actions:n,headingLevel:r=2,mobileTitleInShell:i=!1,className:a}){let o=r===1?`h1`:`h2`;return(0,P.jsxs)(`header`,{"data-theme-surface":`header`,className:Sr(`flex shrink-0 flex-col gap-3 sm:flex-row sm:items-start sm:justify-between`,a),children:[(0,P.jsxs)(`div`,{className:Sr(`min-w-0`,i&&!t&&`hidden md:block`),children:[(0,P.jsx)(o,{className:Sr(`text-xl font-semibold tracking-tight text-foreground`,i&&`hidden md:block`),children:e}),t&&(0,P.jsx)(`p`,{className:`mt-1 max-w-2xl text-sm leading-6 text-muted-foreground`,children:t})]}),n&&(0,P.jsx)(`div`,{className:`flex items-center gap-2 shrink-0`,children:n})]})}function fa({actions:e,children:t,className:n,description:r,layout:i=`standard`,title:a}){return(0,P.jsxs)(ua,{className:Sr(`w-full space-y-6`,i===`split`&&`pb-0 md:flex md:h-full md:min-h-0 md:flex-col`,n),children:[(0,P.jsx)(da,{title:a,description:r,actions:e,mobileTitleInShell:!0}),t]})}var pa=e=>typeof e==`boolean`?`${e}`:e===0?`0`:e,ma=Dn,ha=(e,t)=>n=>{if(t?.variants==null)return ma(e,n?.class,n?.className);let{variants:r,defaultVariants:i}=t,a=Object.keys(r).map(e=>{let t=n?.[e],a=i?.[e];if(t===null)return null;let o=pa(t)||pa(a);return r[e][o]}),o=n&&Object.entries(n).reduce((e,t)=>{let[n,r]=t;return r===void 0||(e[n]=r),e},{});return ma(e,a,t?.compoundVariants?.reduce((e,t)=>{let{class:n,className:r,...a}=t;return Object.entries(a).every(e=>{let[t,n]=e;return Array.isArray(n)?n.includes({...i,...o}[t]):{...i,...o}[t]===n})?[...e,n,r]:e},[]),n?.class,n?.className)},ga=ha(`inline-flex items-center justify-center whitespace-nowrap rounded-full text-sm font-medium ring-offset-background transition-colors duration-fast focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border disabled:pointer-events-none disabled:opacity-50`,{variants:{variant:{default:`bg-primary text-primary-foreground hover:bg-primary-600 active:bg-primary-700 shadow-sm`,destructive:`bg-destructive text-destructive-foreground hover:bg-destructive/90`,outline:`border border-border bg-card text-muted-foreground hover:bg-[var(--interaction-hover)] hover:text-accent-foreground`,secondary:`bg-muted text-foreground hover:bg-[var(--interaction-hover)] hover:text-accent-foreground`,ghost:`text-muted-foreground hover:bg-[var(--interaction-hover)] hover:text-accent-foreground`,link:`text-primary underline-offset-4 hover:underline`,primary:`bg-primary text-primary-foreground hover:bg-primary-600 active:bg-primary-700 shadow-sm`,subtle:`bg-muted text-muted-foreground hover:bg-[var(--interaction-hover)] hover:text-accent-foreground`,"primary-outline":`border border-primary/30 text-primary hover:bg-primary hover:text-primary-foreground`},size:{default:`h-9 px-4 py-2`,sm:`h-8 px-3 text-xs`,lg:`h-11 px-5 text-[14px]`,xl:`h-12 px-6 text-[15px]`,icon:`h-9 w-9`}},defaultVariants:{variant:`default`,size:`default`}}),_a=N.forwardRef(({className:e,variant:t,size:n,...r},i)=>(0,P.jsx)(`button`,{className:Sr(ga({variant:t,size:n,className:e}),n!==`icon`&&`max-md:min-h-[var(--control-touch-size)]`),ref:i,...r}));_a.displayName=`Button`;var va=ha(`grid min-h-16 grid-cols-1 gap-3 px-4 py-3.5 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-center sm:gap-6`,{variants:{tone:{default:``,muted:`bg-muted/55`},layout:{responsive:``,stacked:`sm:grid-cols-1 sm:items-start sm:gap-3`}},defaultVariants:{tone:`default`,layout:`responsive`}}),ya=N.forwardRef(({actions:e,children:t,className:n,description:r,title:i,...a},o)=>(0,P.jsxs)(`section`,{ref:o,className:Sr(`space-y-2.5`,n),...a,children:[i||r||e?(0,P.jsxs)(`div`,{className:`flex items-end justify-between gap-4 px-1`,children:[(0,P.jsxs)(`div`,{className:`min-w-0`,children:[i?(0,P.jsx)(`h3`,{className:`text-sm font-semibold text-foreground`,children:i}):null,r?(0,P.jsx)(`p`,{className:`mt-0.5 text-xs leading-5 text-muted-foreground`,children:r}):null]}),e?(0,P.jsx)(`div`,{className:`shrink-0`,children:e}):null]}):null,t]}));ya.displayName=`SettingsSection`;var ba=N.forwardRef(({className:e,...t},n)=>(0,P.jsx)(`div`,{ref:n,className:Sr(`divide-y divide-border/55 overflow-hidden rounded-2xl bg-muted/45 text-foreground`,e),...t}));ba.displayName=`SettingsGroup`;var xa=N.forwardRef(({className:e,layout:t,tone:n,title:r,description:i,control:a,children:o,...s},c)=>(0,P.jsxs)(`div`,{ref:c,className:Sr(va({layout:t,tone:n}),e),...s,children:[(0,P.jsxs)(`div`,{className:`min-w-0`,children:[(0,P.jsx)(`div`,{className:`text-sm font-medium text-foreground`,children:r}),i?(0,P.jsx)(`p`,{className:`mt-0.5 text-xs leading-5 text-muted-foreground`,children:i}):null,o?(0,P.jsx)(`div`,{className:`mt-3`,children:o}):null]}),a?(0,P.jsx)(`div`,{className:`min-w-0 sm:shrink-0`,children:a}):null]}));xa.displayName=`SettingRow`;var Sa=N.forwardRef(({className:e,type:t,...n},r)=>(0,P.jsx)(`input`,{type:t,className:Sr(`flex h-9 w-full rounded-xl border border-border/75 bg-card px-3.5 py-2 text-sm text-foreground file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground/55 placeholder:font-normal transition-colors focus:outline-none focus:ring-0 disabled:cursor-not-allowed disabled:opacity-50`,`max-md:min-h-[var(--control-touch-size)] max-md:text-base`,e),ref:r,...n}));Sa.displayName=`Input`;var W=N.forwardRef(({className:e,...t},n)=>(0,P.jsx)(`label`,{ref:n,className:Sr(`text-sm font-medium leading-none text-foreground peer-disabled:cursor-not-allowed peer-disabled:opacity-70`,e),...t}));W.displayName=`Label`;var Ca=N.forwardRef(({className:e,checked:t=!1,onCheckedChange:n,thumbClassName:r,...i},a)=>(0,P.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":t,"data-state":t?`checked`:`unchecked`,ref:a,className:Sr(`switch-track peer inline-flex h-[22px] w-10 shrink-0 cursor-pointer items-center rounded-full border-2 transition-colors duration-fast focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border disabled:cursor-not-allowed disabled:opacity-50`,t?`border-primary/70 bg-primary`:`border-border/60 bg-muted hover:bg-[var(--interaction-hover)]`,e),onClick:()=>n?.(!t),...i,children:(0,P.jsx)(`span`,{"data-state":t?`checked`:`unchecked`,className:Sr(`switch-thumb pointer-events-none block h-5 w-5 rounded-full bg-card shadow-md ring-1 ring-border/50 transition-transform duration-fast`,t?`translate-x-5`:`translate-x-0`,r)})}));Ca.displayName=`Switch`;var G={maxRetries:8,startupTimeoutMs:2e3,settledTimeoutMs:5e3,retryBaseDelayMs:500,retryMaxDelayMs:3e3};function wa(e){return e instanceof Error&&go(e.message)}function Ta(e,t){return e<G.maxRetries&&wa(t)}function Ea(e){return Math.min(G.retryMaxDelayMs,G.retryBaseDelayMs*2**Math.max(0,e-1))}function Da(){let e=(0,N.useRef)(!1);return at({queryKey:[`auth-status`],queryFn:async()=>{let t=await Eo({timeoutMs:e.current?G.settledTimeoutMs:G.startupTimeoutMs});return e.current=!0,t},staleTime:5e3,retry:Ta,retryDelay:Ea})}function Oa(e){return Promise.all([e.invalidateQueries({queryKey:[`auth-status`]}),e.invalidateQueries({queryKey:[`app-meta`]}),e.invalidateQueries({queryKey:[`config`]}),e.invalidateQueries({queryKey:[`config-meta`]}),e.invalidateQueries({queryKey:[`config-schema`]}),e.invalidateQueries({queryKey:[`sessions`]}),e.invalidateQueries({queryKey:[`session-history`]}),e.invalidateQueries({queryKey:[`chat-runs`]}),e.invalidateQueries({queryKey:[`cron-jobs`]})])}function ka(){let e=We();return ot({mutationFn:Do,onSuccess:async()=>{await Oa(e),F.success(r(`authSetupSuccess`))},onError:e=>{F.error(`${r(`authActionFailed`)}: ${e.message}`)}})}function Aa(){let e=We();return ot({mutationFn:Oo,onSuccess:async()=>{await Oa(e),F.success(r(`authLoginSuccess`))},onError:e=>{F.error(`${r(`authActionFailed`)}: ${e.message}`)}})}function ja(){let e=We();return ot({mutationFn:ko,onSuccess:async()=>{await Oa(e),F.success(r(`authLogoutSuccess`))},onError:e=>{F.error(`${r(`authActionFailed`)}: ${e.message}`)}})}function Ma(){let e=We();return ot({mutationFn:Ao,onSuccess:async()=>{await Oa(e),F.success(r(`authPasswordUpdated`))},onError:e=>{F.error(`${r(`authActionFailed`)}: ${e.message}`)}})}function Na(){let e=We();return ot({mutationFn:jo,onSuccess:async(t,n)=>{await Oa(e),F.success(n.enabled?r(`authEnabledSuccess`):r(`authDisabledSuccess`))},onError:e=>{F.error(`${r(`authActionFailed`)}: ${e.message}`)}})}var Pa=8;function Fa(e){return e.trim().length>=Pa}function Ia(e,t){return e===t?!0:(F.error(r(`authPasswordMismatch`)),!1)}function La({children:e,contentClassName:t=`space-y-6`}){return(0,P.jsx)(ba,{children:(0,P.jsx)(`div`,{className:`${t} p-4`,children:e})})}function Ra({canSubmitSetup:e,isPending:t,onSubmit:n,setSetupConfirmPassword:i,setSetupPassword:a,setSetupUsername:o,setupConfirmPassword:s,setupPassword:c,setupUsername:l}){return(0,P.jsxs)(La,{contentClassName:`space-y-5`,children:[(0,P.jsxs)(`div`,{className:`rounded-xl bg-background/65 p-4`,children:[(0,P.jsx)(`p`,{className:`text-sm font-medium text-foreground`,children:r(`authSetupTitle`)}),(0,P.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:r(`authSetupDescription`)})]}),(0,P.jsxs)(`div`,{className:`grid gap-4 md:grid-cols-2`,children:[(0,P.jsxs)(`div`,{className:`space-y-2`,children:[(0,P.jsx)(W,{htmlFor:`auth-setup-username`,children:r(`authUsername`)}),(0,P.jsx)(Sa,{id:`auth-setup-username`,value:l,onChange:e=>o(e.target.value),placeholder:r(`authUsernamePlaceholder`)})]}),(0,P.jsxs)(`div`,{className:`space-y-2`,children:[(0,P.jsx)(W,{htmlFor:`auth-setup-password`,children:r(`authPassword`)}),(0,P.jsx)(Sa,{id:`auth-setup-password`,type:`password`,value:c,onChange:e=>a(e.target.value),placeholder:r(`authPasswordPlaceholder`)})]})]}),(0,P.jsxs)(`div`,{className:`space-y-2`,children:[(0,P.jsx)(W,{htmlFor:`auth-setup-confirm`,children:r(`authConfirmPassword`)}),(0,P.jsx)(Sa,{id:`auth-setup-confirm`,type:`password`,value:s,onChange:e=>i(e.target.value),placeholder:r(`authConfirmPasswordPlaceholder`)}),(0,P.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:r(`authPasswordMinLengthHint`)})]}),(0,P.jsx)(_a,{type:`button`,disabled:!e,onClick:()=>void n(),children:r(t?`authSettingUp`:`authSetupAction`)})]})}function za({authenticated:e,canUpdatePassword:t,enabled:n,isLoggingOut:i,isUpdatingEnabled:a,isUpdatingPassword:o,nextConfirmPassword:s,nextPassword:c,onEnabledChange:l,onLogout:u,onPasswordUpdate:d,setNextConfirmPassword:f,setNextPassword:p,username:m}){return(0,P.jsxs)(La,{children:[(0,P.jsxs)(`div`,{className:`rounded-xl bg-background/65 p-4`,children:[(0,P.jsxs)(`div`,{className:`flex flex-col gap-4 md:flex-row md:items-start md:justify-between`,children:[(0,P.jsxs)(`div`,{className:`space-y-1`,children:[(0,P.jsx)(`p`,{className:`text-sm font-medium text-foreground`,children:r(`authStatusLabel`)}),(0,P.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:r(`authStatusConfiguredUser`).replace(`{username}`,m??``)}),(0,P.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:r(`authUsernameFixedHelp`)})]}),(0,P.jsx)(`span`,{className:`inline-flex items-center rounded-full bg-muted px-3 py-1 text-xs font-medium text-foreground`,children:r(n?`enabled`:`disabled`)})]}),(0,P.jsxs)(`div`,{className:`mt-4 flex flex-col gap-4 border-t border-border/55 pt-4 md:flex-row md:items-center md:justify-between`,children:[(0,P.jsxs)(`div`,{className:`space-y-1`,children:[(0,P.jsx)(`p`,{className:`text-sm font-medium text-foreground`,children:r(`authEnableLabel`)}),(0,P.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:r(n?`authEnableOnHelp`:`authEnableOffHelp`)})]}),(0,P.jsx)(Ca,{checked:n,disabled:a,onCheckedChange:e=>{l(e)}})]})]}),(0,P.jsxs)(`div`,{className:`space-y-4 rounded-xl bg-background/65 p-4`,children:[(0,P.jsxs)(`div`,{className:`space-y-1`,children:[(0,P.jsx)(`p`,{className:`text-sm font-medium text-foreground`,children:r(`authPasswordSectionTitle`)}),(0,P.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:r(`authPasswordSectionDescription`)})]}),(0,P.jsxs)(`div`,{className:`grid gap-4 md:grid-cols-2`,children:[(0,P.jsxs)(`div`,{className:`space-y-2`,children:[(0,P.jsx)(W,{htmlFor:`auth-password-next`,children:r(`authPassword`)}),(0,P.jsx)(Sa,{id:`auth-password-next`,type:`password`,value:c,onChange:e=>p(e.target.value),placeholder:r(`authPasswordPlaceholder`)})]}),(0,P.jsxs)(`div`,{className:`space-y-2`,children:[(0,P.jsx)(W,{htmlFor:`auth-password-confirm`,children:r(`authConfirmPassword`)}),(0,P.jsx)(Sa,{id:`auth-password-confirm`,type:`password`,value:s,onChange:e=>f(e.target.value),placeholder:r(`authConfirmPasswordPlaceholder`)})]})]}),(0,P.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,P.jsx)(_a,{type:`button`,disabled:!t,onClick:()=>void d(),children:r(o?`authPasswordUpdating`:`authPasswordAction`)}),n&&e?(0,P.jsx)(_a,{type:`button`,variant:`outline`,disabled:i,onClick:()=>void u(),children:r(i?`authLoggingOut`:`authLogoutAction`)}):null]}),(0,P.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:r(`authSessionMemoryNotice`)})]})]})}function Ba(){let e=Da(),t=ka(),n=Na(),i=Ma(),a=ja(),[o,s]=(0,N.useState)(``),[c,l]=(0,N.useState)(``),[u,d]=(0,N.useState)(``),[f,p]=(0,N.useState)(``),[m,h]=(0,N.useState)(``),g=e.data,_=o.trim().length>0&&Fa(c)&&c===u&&!t.isPending,v=Fa(f)&&f===m&&!i.isPending;return e.isLoading&&!g?(0,P.jsx)(La,{contentClassName:`text-sm text-gray-500`,children:r(`loading`)}):e.isError||!g?(0,P.jsxs)(La,{contentClassName:`space-y-4`,children:[(0,P.jsx)(`p`,{className:`text-sm text-gray-500`,children:r(`authStatusLoadFailed`)}),(0,P.jsx)(_a,{variant:`outline`,onClick:()=>void e.refetch(),children:r(`authRetryStatus`)})]}):g.configured?(0,P.jsx)(za,{authenticated:g.authenticated,enabled:g.enabled,username:g.username,nextPassword:f,setNextPassword:p,nextConfirmPassword:m,setNextConfirmPassword:h,canUpdatePassword:v,isUpdatingEnabled:n.isPending,isUpdatingPassword:i.isPending,isLoggingOut:a.isPending,onEnabledChange:async e=>{try{await n.mutateAsync({enabled:e})}catch{}},onPasswordUpdate:async()=>{if(Ia(f,m))try{await i.mutateAsync({password:f}),p(``),h(``)}catch{}},onLogout:async()=>{try{await a.mutateAsync()}catch{}}}):(0,P.jsx)(Ra,{setupUsername:o,setSetupUsername:s,setupPassword:c,setSetupPassword:l,setupConfirmPassword:u,setSetupConfirmPassword:d,canSubmitSetup:_,isPending:t.isPending,onSubmit:async()=>{if(Ia(c,u))try{await t.mutateAsync({username:o.trim(),password:c}),l(``),d(``)}catch{}}})}function Va(){return(0,P.jsx)(fa,{title:r(`authSecurityTitle`),description:r(`authSecurityDescription`),children:(0,P.jsx)(Ba,{})})}var Ha=250,Ua=class{constructor(e){this.requestRecovery=e,this.started=!1,this.recoveryCooldownId=null,this.start=()=>{this.started||(this.started=!0,document.addEventListener(`visibilitychange`,this.handleVisibilityChange),window.addEventListener(`online`,this.handleOnline),window.addEventListener(`pageshow`,this.handlePageShow),window.addEventListener(`focus`,this.handleForegroundSignal))},this.stop=()=>{this.started&&(this.started=!1,document.removeEventListener(`visibilitychange`,this.handleVisibilityChange),window.removeEventListener(`online`,this.handleOnline),window.removeEventListener(`pageshow`,this.handlePageShow),window.removeEventListener(`focus`,this.handleForegroundSignal),this.recoveryCooldownId!==null&&(window.clearTimeout(this.recoveryCooldownId),this.recoveryCooldownId=null))},this.handleVisibilityChange=()=>{this.requestRecoveryIfVisible()},this.handleOnline=()=>{this.requestRecoveryIfVisible()},this.handleForegroundSignal=()=>{this.requestRecoveryIfVisible()},this.handlePageShow=e=>{e.persisted&&this.requestRecoveryIfVisible()},this.requestRecoveryIfVisible=()=>{document.visibilityState!==`visible`||this.recoveryCooldownId!==null||(this.requestRecovery(),this.recoveryCooldownId=window.setTimeout(()=>{this.recoveryCooldownId=null},Ha))}}};function Wa(e){return e.replace(/\s+/g,` `).trim().slice(0,200)}function Ga(e,t){if(t===404&&e.startsWith(`/api/providers/`)&&e.endsWith(`/test`))return`Provider test endpoint is missing. This usually means nextclaw runtime version is outdated.`;if(t===401||t===403)return`Authentication failed. Check apiKey and custom headers.`;if(t===429)return`Rate limited by upstream provider. Retry later or switch model/provider.`;if(t>=500)return`Upstream service error. Retry later and inspect server logs if it persists.`}function Ka(e){if(e instanceof Error){let t=e.name?.trim()||`Error`,n=e.message?.trim()||`Unknown error`;return{summary:`${t}: ${n}`,details:{errorName:t,errorMessage:n,...e.stack?.trim()?{errorStack:e.stack.trim()}:{}}}}return{summary:String(e??`Unknown error`),details:{errorName:`NonError`,errorMessage:String(e??`Unknown error`)}}}async function qa(e,t,n={}){let r=`${e}${t}`,i=(n.method||`GET`).toUpperCase(),a;try{let e=new Headers(n.headers);!(n.body instanceof FormData)&&!e.has(`Content-Type`)&&e.set(`Content-Type`,`application/json`),a=await fetch(r,{credentials:`include`,headers:e,...n})}catch(e){let n=Ka(e);return Hi.reportTransportFailure(n.summary),{ok:!1,error:{code:`NETWORK_ERROR`,message:`Fetch failed on ${i} ${t} | ${n.summary}`,details:{method:i,endpoint:t,url:r,...n.details}}}}let o=await a.text(),s=null;if(o)try{s=JSON.parse(o)}catch{}if(!s){let e=o?Wa(o):``,n=Ga(t,a.status),s=[`Non-JSON response (${a.status} ${a.statusText}) on ${i} ${t}`];return e&&s.push(`body=${e}`),n&&s.push(`hint=${n}`),{ok:!1,error:{code:`INVALID_RESPONSE`,message:s.join(` | `),details:{status:a.status,statusText:a.statusText,method:i,endpoint:t,url:r,bodySnippet:e||void 0,hint:n}}}}return a.ok,s}function Ja(e){let t=e.split(`
|
|
14
|
+
`),r=n.pop()??``;for(let e of n){let n=Or(e);if(n?.event!==`ncp-event`)continue;let r=kr(n.data);r&&t(r)}return r}},jr=class{constructor(e,t){this.requestService=e,this.baseUrl=t}list=async()=>(await this.requestService.get(`/api/agents`)).agents;create=async e=>await this.requestService.post(`/api/agents`,e);update=async(e,t)=>await this.requestService.put(`/api/agents/${encodeURIComponent(e)}`,t);delete=async e=>await this.requestService.delete(`/api/agents/${encodeURIComponent(e)}`);resolveAvatarUrl=e=>wr(this.baseUrl,`/api/agents/${encodeURIComponent(e)}/avatar`)},Mr=class{constructor(e){this.requestService=e}fetchMeta=async()=>await this.requestService.get(`/api/app/meta`);fetchBootstrapStatus=async(e={})=>await this.requestService.get(`/api/runtime/bootstrap-status`,e)},Nr=class{constructor(e){this.requestService=e}list=async(e={})=>await this.requestService.get(e.includeStorageUsage===!1?`/api/app-packages?includeStorageUsage=false`:`/api/app-packages`);get=async e=>await this.requestService.get(`/api/app-packages/${encodeURIComponent(e)}`);inspectDocumentAccess=async e=>await this.requestService.get(`/api/app-packages/${encodeURIComponent(e)}/document-access`);grantDocumentAccess=async(e,t)=>await this.requestService.post(`/api/app-packages/${encodeURIComponent(e)}/document-access/grant`,t);revokeDocumentAccess=async(e,t)=>await this.requestService.post(`/api/app-packages/${encodeURIComponent(e)}/document-access/revoke`,{scopeId:t});listOperations=async()=>await this.requestService.get(`/api/app-package-operations`);startInstall=async e=>await this.requestService.post(`/api/app-package-operations/install`,e);startUpdate=async(e,t={})=>await this.requestService.post(`/api/app-package-operations/${encodeURIComponent(e)}/update`,t);startRollback=async(e,t)=>await this.requestService.post(`/api/app-package-operations/${encodeURIComponent(e)}/rollback`,{version:t});startUninstall=async(e,t=!1)=>await this.requestService.post(`/api/app-package-operations/${encodeURIComponent(e)}/uninstall`,{purgeData:t});install=async e=>await this.requestService.post(`/api/app-packages/install`,e);enable=async e=>await this.requestService.post(`/api/app-packages/${encodeURIComponent(e)}/enable`);disable=async e=>await this.requestService.post(`/api/app-packages/${encodeURIComponent(e)}/disable`);update=async(e,t={})=>await this.requestService.post(`/api/app-packages/${encodeURIComponent(e)}/update`,t);rollback=async(e,t)=>await this.requestService.post(`/api/app-packages/${encodeURIComponent(e)}/rollback`,{version:t});uninstall=async(e,t=!1)=>await this.requestService.request(`/api/app-packages/${encodeURIComponent(e)}`,{method:`DELETE`,body:{purgeData:t}})},Pr=class{constructor(e){this.requestService=e}list=async()=>await this.requestService.get(`/api/app-data`);deleteRetained=async(e,t)=>await this.requestService.request(`/api/app-data/${encodeURIComponent(e)}`,{method:`DELETE`,body:{confirmAppId:t}})},Fr=class{constructor(e){this.requestService=e}fetchStatus=async(e={})=>await this.requestService.get(`/api/auth/status`,{...e.timeoutMs===void 0?{}:{timeoutMs:e.timeoutMs}});setup=async e=>await this.requestService.post(`/api/auth/setup`,e);login=async e=>await this.requestService.post(`/api/auth/login`,e);logout=async()=>await this.requestService.post(`/api/auth/logout`,{});updatePassword=async e=>await this.requestService.put(`/api/auth/password`,e);updateEnabled=async e=>await this.requestService.put(`/api/auth/enabled`,e)},Ir=class{constructor(e){this.requestService=e}start=async(e,t={})=>await this.requestService.post(`/api/config/channels/${encodeURIComponent(e)}/auth/start`,t);poll=async(e,t)=>await this.requestService.post(`/api/config/channels/${encodeURIComponent(e)}/auth/poll`,t);connect=async(e,t)=>await this.requestService.post(`/api/config/channels/${encodeURIComponent(e)}/auth/connect`,t)},Lr=class{constructor(e){this.requestService=e}listDesktopGrants=async()=>await this.requestService.get(`/api/capability-grants?resourceType=desktop.application`);grantDesktopAccess=async e=>await this.requestService.post(`/api/capability-grants`,e);revokeDesktopAccess=async e=>await this.requestService.request(`/api/capability-grants`,{method:`DELETE`,body:{subject:e.subject,resourceType:e.resource.type,target:e.resource.target,access:e.access}});getDesktopStatus=async()=>await this.requestService.get(`/api/desktop-host/status`);requestDesktopPermissions=async()=>await this.requestService.post(`/api/desktop-host/permissions/request`,{});openDesktopPermissionSettings=async()=>await this.requestService.post(`/api/desktop-host/permissions/open-settings`,{})},Rr=class{constructor(e){this.requestService=e}get=async()=>await this.requestService.get(`/api/feature-controls`)},zr=class{constructor(e){this.requestService=e}fetch=async()=>await this.requestService.get(`/api/config`);fetchMeta=async()=>await this.requestService.get(`/api/config/meta`);fetchSchema=async()=>await this.requestService.get(`/api/config/schema`);updateModel=async e=>await this.requestService.put(`/api/config/model`,e);updateSearch=async e=>await this.requestService.put(`/api/config/search`,e);updateChannel=async(e,t)=>await this.requestService.put(`/api/config/channels/${encodeURIComponent(e)}`,t);updateRuntime=async e=>await this.requestService.put(`/api/config/runtime`,e);updateSecrets=async e=>await this.requestService.put(`/api/config/secrets`,e);updateProductAnalytics=async e=>await this.requestService.put(`/api/config/product-analytics`,e);fetchProductAnalyticsStatus=async()=>await this.requestService.get(`/api/config/product-analytics/status`);executeAction=async(e,t={})=>await this.requestService.post(`/api/config/actions/${encodeURIComponent(e)}/execute`,t);fetchChatSessionTypes=async()=>await this.requestService.get(`/api/ncp/session-types`);fetchCronJobs=async(e={})=>await this.requestService.get(`/api/cron`,{query:{all:e.all?`1`:void 0,limit:e.limit,offset:e.offset,query:e.query,status:e.status}});deleteCronJob=async e=>await this.requestService.delete(`/api/cron/${encodeURIComponent(e)}`);setCronJobEnabled=async(e,t)=>await this.requestService.put(`/api/cron/${encodeURIComponent(e)}/enable`,t);runCronJob=async(e,t={})=>await this.requestService.post(`/api/cron/${encodeURIComponent(e)}/run`,t)},Br=class{constructor(e){this.requestService=e}fetchItems=async e=>await this.requestService.get(`${Vr(e.type)}/items`,{query:Hr(e)});fetchItem=async(e,t)=>await this.requestService.get(`${Vr(t)}/items/${encodeURIComponent(e)}`);fetchSkillContent=async e=>await this.requestService.get(`/api/marketplace/skills/items/${encodeURIComponent(e)}/content`);fetchRecommendations=async(e,t={})=>await this.requestService.get(`${Vr(e)}/recommendations`,{query:{...t.scene?.trim()?{scene:t.scene.trim()}:{},...typeof t.limit==`number`&&Number.isFinite(t.limit)?{limit:Math.max(1,Math.trunc(t.limit))}:{}}});fetchSkillScenes=async()=>await this.requestService.get(`/api/marketplace/skills/scenes`);install=async e=>await this.requestService.post(`${Vr(Ur(e.type))}/install`,e);fetchInstalled=async e=>await this.requestService.get(`${Vr(e)}/installed`);manage=async e=>await this.requestService.post(`${Vr(Ur(e.type))}/manage`,e)};function Vr(e){return e===`skill`?`/api/marketplace/skills`:`/api/marketplace/mcp`}function Hr(e){let{page:t,pageSize:n,q:r,scene:i,sort:a,tag:o}=e,s={};return r?.trim()&&(s.q=r.trim()),o?.trim()&&(s.tag=o.trim()),i?.trim()&&(s.scene=i.trim()),a&&(s.sort=a),typeof t==`number`&&Number.isFinite(t)&&(s.page=Math.max(1,Math.trunc(t))),typeof n==`number`&&Number.isFinite(n)&&(s.pageSize=Math.max(1,Math.trunc(n))),Object.keys(s).length>0?s:void 0}function Ur(e){if(!e)throw Error(`Marketplace request type is required.`);return e}var Wr=class{constructor(e){this.requestService=e}list=async()=>await this.requestService.get(`/api/inbox/deliveries`);get=async e=>await this.requestService.get(this.deliveryPath(e));updateState=async(e,t)=>await this.requestService.request(this.deliveryPath(e),{method:`PATCH`,body:{action:t}});delete=async e=>(await this.requestService.delete(this.deliveryPath(e))).deleted;deliveryPath=e=>`/api/inbox/deliveries/${encodeURIComponent(e)}`},Gr=class{constructor(e){this.requestService=e}fetchItems=async(e={})=>await this.requestService.get(`/api/marketplace/mcp/items`,{query:Kr(e)});fetchInstalled=async()=>await this.requestService.get(`/api/marketplace/mcp/installed`);fetchItem=async e=>await this.requestService.get(`/api/marketplace/mcp/items/${encodeURIComponent(e)}`);fetchContent=async e=>await this.requestService.get(`/api/marketplace/mcp/items/${encodeURIComponent(e)}/content`);fetchRecommendations=async(e={})=>await this.requestService.get(`/api/marketplace/mcp/recommendations`,{query:{...e.scene?.trim()?{scene:e.scene.trim()}:{},...typeof e.limit==`number`&&Number.isFinite(e.limit)?{limit:Math.max(1,Math.trunc(e.limit))}:{}}});install=async e=>await this.requestService.post(`/api/marketplace/mcp/install`,e);manage=async e=>await this.requestService.post(`/api/marketplace/mcp/manage`,e);doctor=async e=>await this.requestService.post(`/api/marketplace/mcp/doctor`,{name:e})};function Kr(e){let{page:t,pageSize:n,q:r,sort:i,tag:a}=e,o={};return r?.trim()&&(o.q=r.trim()),a?.trim()&&(o.tag=a.trim()),i&&(o.sort=i),typeof t==`number`&&Number.isFinite(t)&&(o.page=Math.max(1,Math.trunc(t))),typeof n==`number`&&Number.isFinite(n)&&(o.pageSize=Math.max(1,Math.trunc(n))),Object.keys(o).length>0?o:void 0}var qr=class{constructor(e){this.requestService=e}testConnection=async e=>await this.requestService.post(`/api/mcp/servers/test`,e);createConnection=async e=>await this.requestService.post(`/api/mcp/servers`,e)},Jr=`x-nextclaw-panel-bridge-session`;function Yr(e){return e?{[Jr]:e}:void 0}var Xr=class{constructor(e){this.requestService=e}listPanelApps=async()=>await this.requestService.get(`/api/panel-apps`);getPanelApp=async e=>await this.requestService.get(`/api/panel-apps/${encodeURIComponent(e)}`);updatePanelAppPreferences=async(e,t)=>await this.requestService.request(`/api/panel-apps/${encodeURIComponent(e)}/preferences`,{method:`PATCH`,body:t});recordPanelAppOpened=async e=>await this.requestService.post(`/api/panel-apps/${encodeURIComponent(e)}/open`);deletePanelApp=async e=>await this.requestService.delete(`/api/panel-apps/${encodeURIComponent(e)}`);createBridgeSession=async e=>await this.requestService.post(`/api/panel-app-bridge-sessions`,e);deleteBridgeSession=async e=>await this.requestService.delete(`/api/panel-app-bridge-sessions/${encodeURIComponent(e)}`);grantClient=async e=>await this.requestService.post(`/api/panel-app-client-grants/${encodeURIComponent(e)}`,{});revokeClient=async e=>await this.requestService.delete(`/api/panel-app-client-grants/${encodeURIComponent(e)}`);sendAgentMessage=async(e,t={})=>await this.requestService.post(`/api/panel-app-agent/send`,e,{headers:Yr(t.bridgeSessionToken)});generateAgentObject=async(e,t={})=>await this.requestService.post(`/api/panel-app-agent/generate-object`,e,{headers:Yr(t.bridgeSessionToken)});grantAgentCapability=async(e,t={})=>await this.requestService.post(`/api/panel-app-agent-capabilities/${encodeURIComponent(e)}/grant`,{},{headers:Yr(t.bridgeSessionToken)})},Zr=class{constructor(e){this.requestService=e}list=async()=>await this.requestService.get(`/api/providers`);listTemplates=async()=>await this.requestService.get(`/api/provider-templates`);listModelCatalog=async()=>await this.requestService.get(`/api/provider-model-catalog`);update=async(e,t)=>await this.requestService.put(`/api/providers/${encodeURIComponent(e)}`,t);create=async(e={})=>await this.requestService.post(`/api/providers`,e);delete=async e=>await this.requestService.delete(`/api/providers/${encodeURIComponent(e)}`);testConnection=async(e,t)=>await this.requestService.post(`/api/providers/${encodeURIComponent(e)}/test`,t);discoverModels=async(e,t)=>await this.requestService.post(`/api/providers/${encodeURIComponent(e)}/models/discover`,t);startAuth=async(e,t={})=>await this.requestService.post(`/api/providers/${encodeURIComponent(e)}/auth/start`,t);pollAuth=async(e,t)=>await this.requestService.post(`/api/providers/${encodeURIComponent(e)}/auth/poll`,t);importAuthFromCli=async e=>await this.requestService.post(`/api/providers/${encodeURIComponent(e)}/auth/import-cli`,{})},Qr=class{constructor(e){this.requestService=e}list=async()=>await this.requestService.get(`/api/projects`);getAgreement=async e=>await this.requestService.get(`/api/projects/${encodeURIComponent(e)}/agreement`);listProjectSkills=async e=>await this.requestService.get(`/api/projects/${encodeURIComponent(e)}/skills`);create=async e=>await this.requestService.post(`/api/projects`,e);addExisting=async e=>await this.requestService.post(`/api/projects/existing`,e);remove=async(e,t)=>await this.requestService.request(`/api/projects/${encodeURIComponent(e)}`,{method:`DELETE`,body:{confirmProjectId:t}});listWork=async(e,t={})=>await this.requestService.get(`/api/projects/${encodeURIComponent(e)}/work`,{query:t});listRecentWorkArtifacts=async(e,t={})=>await this.requestService.get(`/api/projects/${encodeURIComponent(e)}/work/artifacts`,{query:t});getWorkSummary=async e=>await this.requestService.get(`/api/projects/${encodeURIComponent(e)}/work/summary`);getWorkItem=async(e,t)=>await this.requestService.get($r(e,t));createWorkItem=async(e,t)=>await this.requestService.post(`/api/projects/${encodeURIComponent(e)}/work/items`,t);updateWorkItem=async(e,t,n)=>await this.requestService.patch($r(e,t),n);deleteWorkItem=async(e,t)=>await this.requestService.delete($r(e,t));restoreWorkItem=async(e,t)=>await this.requestService.post(`${$r(e,t)}/restore`);listWorkItemActivities=async(e,t,n={})=>await this.requestService.get(`${$r(e,t)}/activities`,{query:n});linkWorkItemArtifact=async(e,t,n)=>await this.requestService.post(`${$r(e,t)}/artifacts`,n);unlinkWorkItemArtifact=async(e,t,n)=>await this.requestService.delete(`${$r(e,t)}/artifacts/${encodeURIComponent(n)}`);listWorkStates=async e=>await this.requestService.get(`/api/projects/${encodeURIComponent(e)}/work/states`);createWorkState=async(e,t)=>await this.requestService.post(`/api/projects/${encodeURIComponent(e)}/work/states`,t);updateWorkState=async(e,t,n)=>await this.requestService.patch(ei(e,t),n);deleteWorkState=async(e,t,n)=>await this.requestService.request(ei(e,t),{method:`DELETE`,body:{migrateToStateId:n??null}})};function $r(e,t){return`/api/projects/${encodeURIComponent(e)}/work/items/${encodeURIComponent(t)}`}function ei(e,t){return`/api/projects/${encodeURIComponent(e)}/work/states/${encodeURIComponent(t)}`}var ti=class{baseUrl;transport;webSocketFactory;constructor(e){this.options=e,this.baseUrl=e.baseUrl,this.transport=e.transport,this.webSocketFactory=e.webSocketFactory}subscribe=(e,t={})=>{if(this.transport?.subscribe){let t=this.transport.subscribe(e);return{close:()=>{t()}}}let n=null,r=null,i=!1,a=Math.max(200,t.reconnectDelayMs??1e3),o=()=>{r!==null&&(clearTimeout(r),r=null)},s=t=>{e(t)},c=()=>{try{n=this.createSocket(Er(this.baseUrl,`/ws`))}catch(e){t.onError?.(e),i||(r=setTimeout(c,a));return}n.onopen=()=>{s({type:`connection.open`})},n.onmessage=e=>{let t=this.parseEvent(e.data);t&&s(t)},n.onerror=e=>{t.onError?.(e),s({type:`connection.error`,payload:{message:`WebSocket error`}})},n.onclose=()=>{s({type:`connection.close`}),n=null,i||(o(),r=setTimeout(c,a))}};return c(),{close:()=>{i=!0,o(),n?.close(),n=null}}};createSocket=e=>{if(this.webSocketFactory)return this.webSocketFactory(e);if(typeof globalThis.WebSocket!=`function`)throw Error(`WebSocket is unavailable. Provide webSocketFactory when creating the client.`);return new globalThis.WebSocket(e)};parseEvent=e=>{if(typeof e!=`string`)return null;try{let t=JSON.parse(e);return t&&typeof t==`object`&&`type`in t?t:null}catch{return null}}},ni=class{constructor(e){this.requestService=e}fetchStatus=async()=>await this.requestService.get(`/api/remote/status`);fetchDoctor=async()=>await this.requestService.get(`/api/remote/doctor`);login=async e=>await this.requestService.post(`/api/remote/login`,e);startBrowserAuth=async(e={})=>await this.requestService.post(`/api/remote/auth/start`,e);pollBrowserAuth=async e=>await this.requestService.post(`/api/remote/auth/poll`,e);logout=async()=>await this.requestService.post(`/api/remote/logout`,{});updateAccountProfile=async e=>await this.requestService.put(`/api/remote/account/profile`,e);updateSettings=async e=>await this.requestService.put(`/api/remote/settings`,e);controlService=async e=>await this.requestService.post(`/api/remote/service/${e}`,{})},B=class extends Error{status;code;details;constructor(e){let{code:t,details:n,message:r,status:i}=e;super(r),this.name=`NextClawClientError`,this.status=i,this.code=t,this.details=n}};function ri(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function ii(e,t){return ri(e)?e[t]:void 0}var ai=class{baseUrl;fetchImpl;requestTimeoutMs;defaultHeaders;transport;constructor(e){this.options=e;let{baseUrl:t,fetchImpl:n,headers:r,requestTimeoutMs:i,token:a}=e;this.baseUrl=t,this.fetchImpl=Dr(n),this.requestTimeoutMs=Math.max(1e3,i??15e3),this.transport=e.transport,this.defaultHeaders={Accept:`application/json`,...r??{},...a?{Authorization:`Bearer ${a}`}:{}}}request=async(e,t={})=>{let{body:n,headers:r,method:i,query:a,signal:o,timeoutMs:s}=t;if(this.transport)return await this.requestWithTransport(e,t);let c=new AbortController,l=Math.max(1e3,s??this.requestTimeoutMs),u=this.bindAbortSignal(c,o),d=setTimeout(()=>c.abort(),l),f={...this.defaultHeaders,...r??{}},p=this.normalizeRequestBody(n,f);try{let t=await this.fetchImpl(wr(this.baseUrl,Tr(e,this.serializeQuery(a))),{method:i??`GET`,headers:f,body:p,signal:c.signal}),n=await t.json();if(!t.ok){let e=this.extractApiError(n);throw new B({message:e.message,status:t.status,code:e.code,details:e.details})}if(!this.isApiResponse(n))throw new B({message:`Unexpected NextClaw API response shape.`,status:t.status});if(!n.ok)throw new B({message:n.error.message,status:t.status,code:n.error.code,details:n.error.details});return n.data}catch(e){throw e instanceof B?e:e instanceof Error&&e.name===`AbortError`?new B({message:`NextClaw API request timed out after ${l}ms.`}):new B({message:e instanceof Error?e.message:`NextClaw API request failed.`})}finally{o?.removeEventListener(`abort`,u),clearTimeout(d)}};bindAbortSignal=(e,t)=>{let n=()=>e.abort(t?.reason);return t?t.aborted?(e.abort(t.reason),n):(t.addEventListener(`abort`,n,{once:!0}),n):n};requestWithTransport=async(e,t)=>{let{body:n,headers:r,method:i,query:a,signal:o,timeoutMs:s}=t,{transport:c}=this;if(!c)throw new B({message:`NextClaw transport is not configured.`});try{return await c.request({method:i??`GET`,path:e,...n===void 0?{}:{body:n},...a?{query:a}:{},...r?{headers:r}:{},...o?{signal:o}:{},...s===void 0?{}:{timeoutMs:s}})}catch(e){if(e instanceof B)throw e;let t=ii(e,`code`),n=ii(e,`details`),r=ii(e,`status`);throw new B({message:e instanceof Error?e.message:`NextClaw API request failed.`,code:typeof t==`string`?t:void 0,details:ri(n)?n:void 0,status:typeof r==`number`?r:void 0})}};get=async(e,t={})=>await this.request(e,{...t,method:`GET`});post=async(e,t,n={})=>await this.request(e,{...n,method:`POST`,...t===void 0?{}:{body:t}});put=async(e,t,n={})=>await this.request(e,{...n,method:`PUT`,...t===void 0?{}:{body:t}});patch=async(e,t,n={})=>await this.request(e,{...n,method:`PATCH`,...t===void 0?{}:{body:t}});delete=async(e,t={})=>await this.request(e,{...t,method:`DELETE`});upload=async(e,t,n={})=>{let{headers:r,signal:i,timeoutMs:a}=n;if(this.transport?.upload)return await this.transport.upload({path:e,formData:t,...r?{headers:r}:{},...i?{signal:i}:{},...a===void 0?{}:{timeoutMs:a}});let o=new AbortController,s=Math.max(1e3,a??this.requestTimeoutMs),c=()=>o.abort(i?.reason);i&&(i.aborted?o.abort(i.reason):i.addEventListener(`abort`,c,{once:!0}));let l=setTimeout(()=>o.abort(),s);try{let n=await this.fetchImpl(wr(this.baseUrl,e),{method:`POST`,headers:{Accept:`application/json`,...oi(this.options.token)??{},...this.options.headers??{},...r??{}},body:t,signal:o.signal}),i=await n.json();if(!n.ok){let e=this.extractApiError(i);throw new B({message:e.message,status:n.status,code:e.code,details:e.details})}if(!this.isApiResponse(i)||!i.ok)throw new B({message:`Unexpected NextClaw upload response shape.`,status:n.status});return i.data}catch(e){throw e instanceof B?e:e instanceof Error&&e.name===`AbortError`?new B({message:`NextClaw API upload timed out after ${s}ms.`}):new B({message:e instanceof Error?e.message:`NextClaw API upload failed.`})}finally{i?.removeEventListener(`abort`,c),clearTimeout(l)}};isApiResponse=e=>typeof e==`object`&&!!e&&`ok`in e;extractApiError=e=>{if(this.isApiResponse(e)&&!e.ok)return e.error;if(typeof e==`object`&&e&&`message`in e){let t=e;return{code:typeof t.code==`string`?t.code:`HTTP_ERROR`,message:typeof t.message==`string`?t.message:`NextClaw API request failed.`,details:t.details!==null&&typeof t.details==`object`?t.details:void 0}}return{code:`HTTP_ERROR`,message:`NextClaw API request failed.`}};normalizeRequestBody=(e,t)=>{if(e!==void 0)return e instanceof FormData||e instanceof URLSearchParams||e instanceof Blob||e instanceof ArrayBuffer?e:typeof e==`string`?(!(`Content-Type`in t)&&!(`content-type`in t)&&(t[`Content-Type`]=`application/json`),e):(!(`Content-Type`in t)&&!(`content-type`in t)&&(t[`Content-Type`]=`application/json`),JSON.stringify(e))};serializeQuery=e=>{if(!e)return;if(e instanceof URLSearchParams)return e;let t=new URLSearchParams;for(let[n,r]of Object.entries(e)){let e=Array.isArray(r)?r:[r];for(let r of e)r!=null&&t.append(n,String(r))}return t}};function oi(e){return e?{Authorization:`Bearer ${e}`}:null}var si=class{constructor(e){this.requestService=e}fetch=async()=>await this.requestService.get(`/api/runtime/control`);startService=async()=>await this.requestService.post(`/api/runtime/control/start-service`,{});restartService=async()=>await this.requestService.post(`/api/runtime/control/restart-service`,{});stopService=async()=>await this.requestService.post(`/api/runtime/control/stop-service`,{})},V=class{constructor(e){this.requestService=e}fetch=async()=>await this.requestService.get(`/api/runtime/update`);check=async()=>await this.requestService.post(`/api/runtime/update/check`,{});download=async()=>await this.requestService.post(`/api/runtime/update/download`,{});apply=async()=>await this.requestService.post(`/api/runtime/update/apply`,{});updateChannel=async e=>await this.requestService.put(`/api/runtime/update/channel`,{channel:e})},ci=class{constructor(e){this.requestService=e}browse=async e=>{let{basePath:t,includeFiles:n,path:r}=e??{},i=typeof r==`string`?r.trim():``,a=typeof t==`string`?t.trim():``;return await this.requestService.get(`/api/server-paths/browse`,{query:{...i?{path:i}:{},...a?{basePath:a}:{},...n?{includeFiles:`1`}:{}}})};watch=async e=>await this.requestService.post(`/api/server-paths/watch`,e);unwatch=async e=>{await this.requestService.delete(`/api/server-paths/watch`,{query:{subscriptionId:e.trim()}})};createDirectory=async e=>await this.requestService.post(`/api/server-paths/directory`,e);createFile=async e=>await this.requestService.post(`/api/server-paths/file`,e);renameEntry=async e=>await this.requestService.request(`/api/server-paths/entry`,{method:`PATCH`,body:e});deleteEntry=async e=>await this.requestService.delete(`/api/server-paths/entry`,{query:{basePath:e.basePath.trim(),path:e.path.trim()}});uploadFiles=async e=>{let{basePath:t,files:n,overwrite:r,targetPath:i}=e,a=new FormData;return a.append(`basePath`,t.trim()),a.append(`targetPath`,i.trim()),a.append(`overwrite`,r?`true`:`false`),n.forEach(e=>a.append(`files`,e)),await this.requestService.upload(`/api/server-paths/files`,a,{timeoutMs:12e4})};read=async e=>{let{basePath:t,line:n,path:r}=e,i=r.trim(),a=typeof t==`string`?t.trim():``,o=Number.isSafeInteger(n)&&(n??0)>0?n:null;return await this.requestService.get(`/api/server-paths/read`,{query:{path:i,...a?{basePath:a}:{},...o?{line:String(o)}:{}}})};search=async e=>{let{basePath:t,limit:n,query:r}=e,i=t.trim(),a=r?.trim()??``,o=Number.isSafeInteger(n)&&(n??0)>0?n:null;return await this.requestService.get(`/api/server-paths/search`,{query:{basePath:i,...a?{query:a}:{},...o?{limit:String(o)}:{}}})}},li=`x-nextclaw-panel-bridge-session`;function ui(e){return e?{[li]:e}:void 0}var di=class{constructor(e){this.requestService=e}listServiceApps=async()=>await this.requestService.get(`/api/service-apps`);getServiceApp=async e=>await this.requestService.get(`/api/service-apps/${encodeURIComponent(e)}`);restartServiceApp=async e=>await this.requestService.post(`/api/service-apps/${encodeURIComponent(e)}/restart`);deleteServiceApp=async(e,t=!1)=>await this.requestService.request(`/api/service-apps/${encodeURIComponent(e)}`,{method:`DELETE`,body:{purgeData:t}});listServiceActions=async(e={})=>{let t=e.appId?`?${new URLSearchParams({appId:e.appId}).toString()}`:``;return await this.requestService.get(`/api/service-actions${t}`,{headers:ui(e.bridgeSessionToken)})};listVerificationRecords=async(e={})=>{let t=new URLSearchParams;e.acceptanceId&&t.set(`acceptanceId`,e.acceptanceId),e.appId&&t.set(`appId`,e.appId),e.limit!==void 0&&t.set(`limit`,String(e.limit));let n=t.size>0?`?${t.toString()}`:``;return await this.requestService.get(`/api/runtime-verification-records${n}`,{headers:ui(e.bridgeSessionToken)})};getPortableRuntimeAcceptanceContract=async(e={})=>{let t=e.locale?`?${new URLSearchParams({locale:e.locale})}`:``;return await this.requestService.get(`/api/portable-runtime/acceptance/contract${t}`,{headers:ui(e.bridgeSessionToken)})};getPortableRuntimeAcceptanceStatus=async(e={})=>{let t=new URLSearchParams;e.appId&&t.set(`appId`,e.appId),e.locale&&t.set(`locale`,e.locale);let n=t.size>0?`?${t.toString()}`:``;return await this.requestService.get(`/api/portable-runtime/acceptance/status${n}`,{headers:ui(e.bridgeSessionToken)})};exportPortableRuntimeAcceptance=async(e={})=>{let t=new URLSearchParams;e.appId&&t.set(`appId`,e.appId),e.locale&&t.set(`locale`,e.locale);let n=t.size>0?`?${t.toString()}`:``;return await this.requestService.get(`/api/portable-runtime/acceptance/export${n}`,{headers:ui(e.bridgeSessionToken)})};discoverServiceAppActions=async e=>await this.requestService.post(`/api/service-apps/${encodeURIComponent(e)}/actions/discover`,{});invokeServiceAction=async(e,t,n={})=>await this.requestService.post(`/api/service-actions/${encodeURIComponent(e)}/invoke`,{input:t??{}},{headers:ui(n.bridgeSessionToken)});grantServiceAction=async(e,t={})=>await this.requestService.post(`/api/service-actions/${encodeURIComponent(e)}/grant`,{},{headers:ui(t.bridgeSessionToken)});grantServiceActions=async(e,t={})=>await this.requestService.post(`/api/service-action-grants`,{actionIds:e},{headers:ui(t.bridgeSessionToken)});grantAgentServiceActions=async(e,t)=>await this.requestService.post(`/api/agents/${encodeURIComponent(e)}/service-action-grants`,{actionIds:t});listServiceActionGrants=async()=>await this.requestService.get(`/api/service-action-grants`);revokeServiceAction=async(e,t={})=>await this.requestService.delete(`/api/service-actions/${encodeURIComponent(e)}/grant`,{headers:ui(t.bridgeSessionToken)});revokeServiceActionGrant=async e=>{let{actionId:t,caller:n}=e,r=new URLSearchParams({surface:n.surface,callerId:n.surface===`panel-app`?n.appId:n.agentId});return await this.requestService.delete(`/api/service-action-grants/${encodeURIComponent(t)}?${r.toString()}`)}},fi=class{constructor(e,t){this.requestService=e,this.eventBus=t}list=async e=>{let{limit:t,page:n,pageSize:r,query:i,peerId:a}=e??{},o=new URLSearchParams;typeof t==`number`&&Number.isFinite(t)&&o.set(`limit`,String(Math.max(1,Math.trunc(t)))),typeof n==`number`&&Number.isFinite(n)&&o.set(`page`,String(Math.max(1,Math.trunc(n)))),typeof r==`number`&&Number.isFinite(r)&&o.set(`pageSize`,String(Math.max(1,Math.trunc(r)))),i?.trim()&&o.set(`query`,i.trim());let s=a?.trim();return s&&o.set(`peerId`,s),await this.requestService.get(`/api/ncp/sessions`,{...o.size>0?{query:o}:{}})};get=async e=>await this.requestService.get(`/api/ncp/sessions/${encodeURIComponent(e)}`);listMessages=async(e,t={})=>{let n=typeof t==`number`?{limit:t}:t,r=new URLSearchParams;return typeof n.limit==`number`&&Number.isFinite(n.limit)&&r.set(`limit`,String(Math.max(1,Math.trunc(n.limit)))),n.cursor?.trim()&&r.set(`cursor`,n.cursor.trim()),n.toolPayload===`summary`&&r.set(`toolPayload`,`summary`),n.initialPayload===`compact`&&r.set(`initialPayload`,`compact`),await this.requestService.get(`/api/ncp/sessions/${encodeURIComponent(e)}/messages`,{...r.size>0?{query:r}:{},...n.signal?{signal:n.signal}:{}})};getUsage=async e=>await this.requestService.get(`/api/ncp/sessions/${encodeURIComponent(e)}/usage`);listSkills=async(e,t)=>await this.requestService.get(`/api/ncp/sessions/${encodeURIComponent(e)}/skills`,{query:t?.projectRoot?.trim()?{projectRoot:t.projectRoot.trim()}:void 0});listQueuedInputs=async e=>await this.requestService.get(`/api/ncp/sessions/${encodeURIComponent(e)}/queued-inputs`);deleteQueuedInput=async(e,t)=>await this.requestService.delete(`/api/ncp/sessions/${encodeURIComponent(e)}/queued-inputs/${encodeURIComponent(t)}`);listPendingInputs=async e=>await this.requestService.get(`/api/ncp/sessions/${encodeURIComponent(e)}/pending-inputs`);steerQueuedInput=async(e,t)=>await this.requestService.post(`/api/ncp/sessions/${encodeURIComponent(e)}/queued-inputs/${encodeURIComponent(t)}/steer`);update=async(e,t)=>await this.requestService.put(`/api/ncp/sessions/${encodeURIComponent(e)}`,t);compactContext=async e=>await this.requestService.post(`/api/ncp/sessions/${encodeURIComponent(e)}/context/compact`);delete=async e=>await this.requestService.delete(`/api/ncp/sessions/${encodeURIComponent(e)}`);uploadAssets=async e=>{let t=new FormData;for(let n of e)t.append(`files`,n);return await this.requestService.upload(`/api/ncp/assets`,t)};subscribe=(e,t={})=>({close:this.eventBus.subscribeAll(t=>{e(t)})})},pi=class{constructor(e){this.requestService=e}list=async(e={})=>await this.requestService.get(`/api/system-object-references`,{query:e});resolve=async e=>await this.requestService.post(`/api/system-object-references/resolve`,{uri:e})},mi=class{baseUrl;agentRuns;app;appPackages;appData;agents;auth;channelAuth;capabilityAccess;featureControls;config;eventBus;marketplace;inboxDeliveries;mcpMarketplace;mcp;panelApps;providers;projects;realtime;remote;runtimeControl;runtimeUpdate;serverPaths;serviceApps;sessions;systemObjectReferences;constructor(e){this.baseUrl=Cr(e.baseUrl);let t={...e,baseUrl:this.baseUrl},n=new ai(t);this.realtime=new ti(t);let r=null;this.eventBus=new Bt({onFirstSubscriber:()=>{r??=this.realtime.subscribe(e=>{this.eventBus.emitEnvelope({type:e.type,payload:`payload`in e?e.payload:void 0,emittedAt:`emittedAt`in e?e.emittedAt:new Date().toISOString(),source:`source`in e?e.source:`realtime`})})},onNoSubscribers:()=>{r?.close(),r=null}}),this.agentRuns=new Ar(n,t),this.app=new Mr(n),this.appPackages=new Nr(n),this.appData=new Pr(n),this.agents=new jr(n,this.baseUrl),this.auth=new Fr(n),this.channelAuth=new Ir(n),this.capabilityAccess=new Lr(n),this.featureControls=new Rr(n),this.config=new zr(n),this.marketplace=new Br(n),this.inboxDeliveries=new Wr(n),this.mcpMarketplace=new Gr(n),this.mcp=new qr(n),this.panelApps=new Xr(n),this.providers=new Zr(n),this.projects=new Qr(n),this.remote=new ni(n),this.runtimeControl=new si(n),this.runtimeUpdate=new V(n),this.serverPaths=new ci(n),this.serviceApps=new di(n),this.sessions=new fi(n,this.eventBus),this.systemObjectReferences=new pi(n)}},hi=`http://127.0.0.1:55667`,gi=(()=>{let e=(void 0)?.trim();return e?e.replace(/\/$/,``):typeof window<`u`&&window.location?.origin?window.location.origin:hi})(),_i={"Use this page to manage the local NextClaw service. Closing the browser does not stop the service.":`runtimeControlManagedLocalMessage`,"This page is served by the running local service. Closing the browser does not stop it.":`runtimeControlManagedLocalHint`,"This page is served by the running local service.":`runtimeControlManagedLocalHintShort`,"This page is already hosted by the running local service.":`runtimeControlStartUnavailableHosted`,"App restart is only available in the desktop shell.":`runtimeControlRestartAppDesktopOnly`,"The local service is not running.":`runtimeControlServiceNotRunning`,"The local service is already stopped.":`runtimeControlServiceAlreadyStopped`,"Managed service started.":`runtimeControlManagedServiceStarted`,"Managed service start scheduled.":`runtimeControlManagedServiceStartScheduled`,"Restart scheduled. This page may disconnect for a few seconds.":`runtimeControlRestartScheduled`,"Stop scheduled. This page will disconnect shortly.":`runtimeControlStopScheduled`,"runtime healthy":`runtimeControlHealthy`};function vi(e){return e.activeSystemAction?`service-transitioning`:e.lifecyclePhase}function yi(e){return e===`ready`?`connected`:e===`startup-failed`||e===`stalled`?`disconnected`:`connecting`}function bi(e){let t=vi(e);return{...e,phase:t,connectionStatus:yi(t)}}function xi(e){return e===`start-service`?`starting-service`:e===`stop-service`?`stopping-service`:e===`restart-service`?`restarting-service`:`restarting-app`}function Si(e){return e===`start-service`?`starting`:e===`stop-service`?`stopping`:e===`restart-service`?`restarting`:null}function Ci(e){if(!e)return null;let t=_i[e.trim()];return t?r(t):e}function wi(e){let{action:t,message:n}=e;return{action:t,lifecycle:xi(t),serviceState:Si(t),message:n}}function Ti(e){if(e.runtimeControlError)return{tone:`inactive`,title:r(`runtimeControlLoadFailed`),description:e.runtimeControlError,reasonLines:[],actionLabel:null,isBusy:!1};if(!e.runtimeControlView)return{tone:`inactive`,title:r(`runtimeStatusLoadingTitle`),description:r(`runtimeStatusLoadingDescription`),reasonLines:[],actionLabel:null,isBusy:!!e.activeSystemAction};if(e.activeSystemAction)return{tone:`attention`,title:r(`runtimeControlTitle`),description:Ci(e.activeSystemAction.message)||Ci(e.runtimeControlView.message)||r(`runtimeControlDescription`),reasonLines:[],actionLabel:null,isBusy:!0};let t=e.runtimeControlView;return t.pendingRestart?{tone:`attention`,title:r(`runtimeStatusPendingRestartTitle`),description:r(`runtimeStatusPendingRestartDescription`),reasonLines:t.pendingRestart.changedPaths.length>0?t.pendingRestart.changedPaths.map(e=>r(`runtimeStatusPendingRestartReasonItem`).replace(`{path}`,e)):[t.pendingRestart.message],actionLabel:t.canRestartService.available?r(`runtimeStatusRestartAction`):null,isBusy:!1}:{tone:t.lifecycle===`healthy`?`healthy`:`inactive`,title:r(`runtimeStatusHealthyTitle`),description:r(`runtimeStatusHealthyDescription`),reasonLines:[],actionLabel:null,isBusy:!1}}function Ei(e){let t=e.activeSystemAction,n=e.runtimeControlView;return{controlView:n,visibleLifecycle:t?.lifecycle??n?.lifecycle??`healthy`,visibleServiceState:t?.serviceState??n?.serviceState??`unknown`,visibleMessage:Ci(t?.message)||Ci(e.lastSystemActionError)||Ci(n?.message)||r(`runtimeControlDescription`),busyAction:t?.action??null,busy:!!t,pendingRestart:n?.pendingRestart??null,errorMessage:Ci(e.lastSystemActionError)||Ci(e.runtimeControlError)||null}}var Di=e=>{let t,n=new Set,r=(e,r)=>{let i=typeof e==`function`?e(t):e;if(!Object.is(i,t)){let e=t;t=r??(typeof i!=`object`||!i)?i:Object.assign({},t,i),n.forEach(n=>n(t,e))}},i=()=>t,a={setState:r,getState:i,getInitialState:()=>o,subscribe:e=>(n.add(e),()=>n.delete(e))},o=t=e(r,i,a);return a},Oi=(e=>e?Di(e):Di),ki=e=>e;function Ai(e,t=ki){let n=N.useSyncExternalStore(e.subscribe,N.useCallback(()=>t(e.getState()),[e,t]),N.useCallback(()=>t(e.getInitialState()),[e,t]));return N.useDebugValue(n),n}var ji=e=>{let t=Oi(e),n=e=>Ai(t,e);return Object.assign(n,t),n},Mi=(e=>e?ji(e):ji),Ni={lifecyclePhase:`cold-starting`,hasReachedReady:!1,lastReadyAt:null,recoveryStartedAt:null,bootstrapStatus:null,lastError:null,lastTransportError:null,runtimeControlView:null,runtimeControlError:null,activeSystemAction:null,lastSystemActionError:null},Pi=Mi(e=>({state:Ni,patchState:t=>e(e=>({state:{...e.state,...t}}))}));function Fi(e){if(e.length===0)throw Error(`AdaptiveCadence requires at least one stage.`);for(let t of e)if(t.delaysMs.length===0)throw Error(`AdaptiveCadence stage requires at least one delay.`)}var Ii=class{constructor(e){this.options=e,this.attempt=0,this.startedAt=null,this.lastFailureAt=null,this.lastSuccessAt=null,this.manualTriggerPending=!1,this.completed=!1,this.recordFailure=()=>{let e=this.clock();this.completed=!1,this.manualTriggerPending=!1,this.startedAt=this.startedAt??e,this.lastFailureAt=e,this.attempt+=1},this.recordSuccess=()=>{this.lastSuccessAt=this.clock(),this.attempt=0,this.startedAt=null,this.lastFailureAt=null,this.manualTriggerPending=!1,this.completed=!0},this.reset=()=>{this.attempt=0,this.startedAt=null,this.lastFailureAt=null,this.lastSuccessAt=null,this.manualTriggerPending=!1,this.completed=!1},this.requestManualTrigger=()=>{this.completed=!1,this.manualTriggerPending=!0},this.hasManualTrigger=()=>this.manualTriggerPending,this.getNextDelay=(e={})=>{if(this.manualTriggerPending)return e.consumeManualTrigger&&(this.manualTriggerPending=!1),this.options.manualTriggerDelayMs;if(this.completed)return this.options.successDelayMs;if(this.startedAt===null)return this.options.idleDelayMs;let t=this.resolveStage(this.clock()-this.startedAt);return t.delaysMs[Math.min(this.attempt-1,t.delaysMs.length-1)]},this.getSnapshot=()=>({attempt:this.attempt,startedAt:this.startedAt,lastFailureAt:this.lastFailureAt,lastSuccessAt:this.lastSuccessAt,manualTriggerPending:this.manualTriggerPending,completed:this.completed}),this.resolveStage=e=>this.options.stages.find(t=>t.untilElapsedMs===void 0||e<t.untilElapsedMs)??this.options.stages[this.options.stages.length-1],Fi(e.stages),this.clock=e.clock??(()=>Date.now())}},Li=3e4,Ri={idleDelayMs:1e3,manualTriggerDelayMs:0,successDelayMs:!1,stages:[{untilElapsedMs:3e4,delaysMs:[500,1e3,2e3,4e3,5e3]},{untilElapsedMs:5*6e4,delaysMs:[1e4,15e3,3e4]},{delaysMs:[6e4]}]};function zi(e){return e instanceof Error?e.message:String(e??``)}function Bi(e){return e&&(e.ncpAgent.error?.trim()||e.lastError?.trim())||null}function Vi(e){return r(e===`start-service`?`runtimeControlStartingServiceHelp`:e===`restart-service`?`runtimeControlRestartingServiceHelp`:e===`stop-service`?`runtimeControlStoppingServiceHelp`:`runtimeControlRestartingAppHelp`)}var Hi=new class{constructor(){this.recoveryTimeoutId=null,this.runtimeBootstrapProbeCadence=new Ii(Ri),this.getRuntimeBootstrapPollInterval=e=>{let{lifecyclePhase:t,activeSystemAction:n}=this.getState(),r=t===`recovering`||t===`stalled`||n?.lifecycle===`recovering`;return this.runtimeBootstrapProbeCadence.hasManualTrigger()?this.runtimeBootstrapProbeCadence.getNextDelay({consumeManualTrigger:!0}):!r&&e?.ncpAgent.state===`ready`?!1:this.runtimeBootstrapProbeCadence.getNextDelay({consumeManualTrigger:!0})},this.getRuntimeControl=async()=>this.decorateForCurrentEnvironment(await uc()),this.reportBootstrapStatus=e=>{let t=this.getState(),n=Bi(e);if(e.ncpAgent.state===`ready`){this.transitionToReady(e);return}if(!t.hasReachedReady){if(e.ncpAgent.state===`error`||e.phase===`error`){this.transitionToStartupFailed(n,e);return}this.transitionToColdStarting(e);return}this.transitionToRecovering(n,e)},this.reportBootstrapQueryError=e=>{let t=zi(e).trim();if(t&&!this.reportTransportFailure(t)){if(this.getState().hasReachedReady){this.transitionToRecovering(t);return}this.transitionToStartupFailed(t)}},this.reportTransportFailure=e=>{let t=zi(e).trim();return go(t)?this.getState().hasReachedReady?(this.transitionToRecovering(t),!0):(this.runtimeBootstrapProbeCadence.recordFailure(),this.patchState({lastTransportError:t}),!0):!1},this.handleConnectionInterrupted=e=>{let t=this.getState(),n=e?.trim()||null;if(!t.hasReachedReady){this.runtimeBootstrapProbeCadence.recordFailure(),n&&this.patchState({lastTransportError:n});return}this.transitionToRecovering(n)},this.handleConnectionRestored=()=>{let e=this.getState();e.bootstrapStatus?.ncpAgent.state===`ready`&&this.transitionToReady(e.bootstrapStatus)},this.reportRuntimeControlView=e=>{this.patchState({runtimeControlView:e,runtimeControlError:null})},this.reportRuntimeControlError=e=>{let t=zi(e).trim();t&&this.patchState({runtimeControlError:t})},this.runRuntimeControlAction=async e=>{this.patchState({activeSystemAction:wi({action:e,message:Vi(e)}),lastSystemActionError:null});try{let t=await this.executeRuntimeControlAction(e);if(e===`restart-app`)return t;if(e===`stop-service`)return await this.refreshRuntimeControlView(),this.clearActiveSystemAction(),t;this.patchState({activeSystemAction:{action:e,lifecycle:`recovering`,serviceState:null,message:r(`runtimeControlRecoveringHelp`)}}),this.runtimeBootstrapProbeCadence.requestManualTrigger();let n=await this.waitForRecovery();return this.syncRuntimeControlQueryCache(n),this.reportRuntimeControlView(n),this.clearActiveSystemAction(),t}catch(t){let n=t instanceof Error?t.message:r(`runtimeControlActionFailed`);throw this.patchState({activeSystemAction:{action:e,lifecycle:`failed`,serviceState:e===`stop-service`?`running`:e===`restart-app`?null:`unknown`,message:n},lastSystemActionError:n}),t}},this.getStatusView=()=>bi(this.getState()),this.requestRuntimeBootstrapProbeNow=()=>{this.runtimeBootstrapProbeCadence.requestManualTrigger(),Lt.refetchQueries({queryKey:[`runtime-bootstrap-status`]})},this.resetForTests=()=>{this.clearRecoveryTimeout(),this.runtimeBootstrapProbeCadence.reset(),Pi.setState({state:Ni})},this.getState=()=>Pi.getState().state,this.patchState=e=>{Pi.getState().patchState(e)},this.transitionToColdStarting=e=>{this.runtimeBootstrapProbeCadence.recordFailure(),this.clearRecoveryTimeout(),this.patchState({lifecyclePhase:`cold-starting`,recoveryStartedAt:null,bootstrapStatus:e,lastError:null})},this.transitionToStartupFailed=(e,t)=>{this.runtimeBootstrapProbeCadence.recordFailure(),this.clearRecoveryTimeout(),this.patchState({lifecyclePhase:`startup-failed`,recoveryStartedAt:null,bootstrapStatus:t??this.getState().bootstrapStatus,lastError:e})},this.transitionToRecovering=(e,t)=>{this.runtimeBootstrapProbeCadence.recordFailure();let n=this.getState();if(!n.hasReachedReady){this.patchState({lastTransportError:e?.trim()||n.lastTransportError});return}n.lifecyclePhase!==`recovering`&&n.lifecyclePhase!==`stalled`&&(this.clearRecoveryTimeout(),this.recoveryTimeoutId=window.setTimeout(()=>{this.recoveryTimeoutId=null,this.getState().lifecyclePhase===`recovering`&&this.patchState({lifecyclePhase:`stalled`})},Li)),this.patchState({lifecyclePhase:n.lifecyclePhase===`stalled`?`stalled`:`recovering`,recoveryStartedAt:n.recoveryStartedAt??Date.now(),bootstrapStatus:t??n.bootstrapStatus,lastError:e?.trim()||n.lastError,lastTransportError:e?.trim()||n.lastTransportError})},this.transitionToReady=e=>{this.runtimeBootstrapProbeCadence.recordSuccess();let t=this.getState(),n=t.lifecyclePhase===`recovering`||t.lifecyclePhase===`stalled`;this.clearRecoveryTimeout(),this.patchState({lifecyclePhase:`ready`,hasReachedReady:!0,lastReadyAt:Date.now(),recoveryStartedAt:null,bootstrapStatus:e,lastError:null,lastTransportError:null}),n&&Lt.refetchQueries({type:`active`})},this.executeRuntimeControlAction=async e=>{let t=this.getDesktopBridge();if(e===`restart-service`&&t&&typeof t.restartService==`function`){let e=await t.restartService();return{accepted:e.accepted,action:`restart-service`,lifecycle:e.lifecycle,message:e.message}}if(e===`start-service`)return await dc();if(e===`stop-service`)return await pc();if(e===`restart-app`){if(!t||typeof t.restartApp!=`function`)throw Error(r(`runtimeRestartAppUnavailable`));let e=await t.restartApp();return{accepted:e.accepted,action:`restart-app`,lifecycle:e.lifecycle,message:e.message}}return await fc()},this.waitForRecovery=async()=>{let e=Date.now()+25e3,t=null;for(;Date.now()<e;)try{return await this.getRuntimeControl()}catch(e){t=e,await new Promise(e=>{window.setTimeout(e,1500)})}throw t instanceof Error?t:Error(r(`runtimeRecoveryTimedOut`))},this.refreshRuntimeControlView=async()=>{try{let e=await this.getRuntimeControl();this.syncRuntimeControlQueryCache(e),this.reportRuntimeControlView(e)}catch(e){this.reportRuntimeControlError(e)}},this.syncRuntimeControlQueryCache=e=>{Lt.setQueryData([`runtime-control`],e)},this.clearActiveSystemAction=()=>{this.patchState({activeSystemAction:null,lastSystemActionError:null})},this.clearRecoveryTimeout=()=>{this.recoveryTimeoutId!==null&&(window.clearTimeout(this.recoveryTimeoutId),this.recoveryTimeoutId=null)},this.decorateForCurrentEnvironment=e=>{let t=this.getDesktopBridge();return!t||typeof t.restartApp!=`function`?e:{...e,environment:`desktop-embedded`,serviceState:`running`,canStartService:{available:!1,requiresConfirmation:!1,impact:`none`},canStopService:{available:!1,requiresConfirmation:!0,impact:`brief-ui-disconnect`},canRestartApp:{available:!0,requiresConfirmation:!0,impact:`full-app-relaunch`},ownerLabel:r(`runtimeControlEnvironmentDesktop`),managementHint:r(`runtimeControlDesktopServiceHint`)}},this.getDesktopBridge=()=>typeof window>`u`?null:window.nextclawDesktop??null}};function Ui(){let e=at({queryKey:[`runtime-bootstrap-status`],queryFn:()=>No({timeoutMs:5e3}),refetchInterval:e=>Hi.getRuntimeBootstrapPollInterval(e.state.data),retry:!1}),t=at({queryKey:[`runtime-control`],queryFn:async()=>await Hi.getRuntimeControl(),staleTime:5e3});(0,N.useEffect)(()=>{e.data&&Hi.reportBootstrapStatus(e.data)},[e.data]),(0,N.useEffect)(()=>{e.error&&Hi.reportBootstrapQueryError(e.error)},[e.error]),(0,N.useEffect)(()=>{t.data&&Hi.reportRuntimeControlView(t.data)},[t.data]),(0,N.useEffect)(()=>{t.error&&Hi.reportRuntimeControlError(t.error)},[t.error])}function Wi(){return bi(Pi(e=>e.state))}function Gi(){return Ti(Pi(e=>e.state))}function Ki(){return Ei(Pi(e=>e.state))}var H=Mi(()=>({supported:!1,initialized:!1,busyAction:null,snapshot:null})),U=class{constructor(e){this.desktopApi=e,this.kind=`desktop-bridge`,this.subscribe=e=>this.desktopApi.onUpdateStateChanged(e),this.getState=async()=>await this.desktopApi.getUpdateState(),this.checkForUpdates=async()=>await this.desktopApi.checkForUpdates(),this.downloadUpdate=async()=>await this.desktopApi.downloadUpdate(),this.applyDownloadedUpdate=async()=>await this.desktopApi.applyDownloadedUpdate(),this.updateChannel=async e=>await this.desktopApi.updateChannel(e)}},qi=class{constructor(){this.kind=`runtime-host`,this.getState=async()=>await mc(),this.checkForUpdates=async()=>await hc(),this.downloadUpdate=async()=>await gc(),this.applyDownloadedUpdate=async()=>await _c(),this.updateChannel=async e=>await vc(e)}},Ji=new class{constructor(){this.unsubscribe=null,this.subscriptionCount=0,this.source=null,this.start=async()=>{this.subscriptionCount+=1;let e=this.resolveSource();if(this.source=e,!e){H.setState({supported:!1,initialized:!0,snapshot:null});return}e.kind===`desktop-bridge`&&!this.unsubscribe&&(this.unsubscribe=e.subscribe(e=>{H.setState({supported:!0,initialized:!0,snapshot:e})})),H.setState({supported:!0,initialized:!1});try{let t=await e.getState();H.setState({supported:!0,initialized:!0,snapshot:t})}catch(t){if(e.kind===`runtime-host`&&this.isUnsupportedError(t)){H.setState({supported:!1,initialized:!0,snapshot:null});return}H.setState({supported:!0,initialized:!0}),F.error(`${r(`runtimeUpdatesLoadFailed`)}: ${this.getErrorMessage(t)}`)}},this.stop=()=>{this.subscriptionCount=Math.max(0,this.subscriptionCount-1),!(this.subscriptionCount>0)&&(this.unsubscribe?.(),this.unsubscribe=null,this.source=null)},this.reportSnapshot=e=>{this.source?.kind!==`desktop-bridge`&&H.setState({supported:!0,initialized:!0,snapshot:e})},this.refreshAfterRealtimeReconnect=async()=>{this.source?.kind===`runtime-host`&&await this.refreshSnapshot()},this.checkForUpdates=async()=>{let e;try{e=await this.runSnapshotCommand(`checking`,r(`runtimeUpdatesCheckFailed`),async e=>await e.checkForUpdates())}catch{return}if(e.status===`up-to-date`){F.success(r(`runtimeUpdatesAlreadyLatest`));return}if(e.status===`update-available`){F.success(r(`runtimeUpdatesAvailable`).replace(`{version}`,e.availableVersion??r(`runtimeUpdatesUnknownVersion`)));return}e.status===`downloaded`&&F.success(r(`runtimeUpdatesReadyToApply`))},this.downloadUpdate=async()=>{try{await this.runSnapshotCommand(`downloading`,r(`runtimeUpdatesDownloadFailed`),async e=>await e.downloadUpdate())}catch{return}},this.applyDownloadedUpdate=async()=>{try{await this.runSnapshotCommand(`applying`,r(`runtimeUpdatesApplyFailed`),async e=>await e.applyDownloadedUpdate())}catch{return}},this.updateNow=async()=>{let e=H.getState().snapshot;if(!(e?.status!==`update-available`&&e?.status!==`downloaded`))try{await this.runSnapshotCommand(`updating`,r(`runtimeUpdatesUpdateFailed`),async t=>{let n=e.status===`downloaded`?e:await t.downloadUpdate();return H.setState({snapshot:n}),n.status===`downloaded`?await t.applyDownloadedUpdate():n})}catch{return}},this.updateChannel=async e=>{if(H.getState().snapshot?.channel===e)return;let t;try{t=await this.runSnapshotCommand(`switching-channel`,r(`runtimeUpdatesChannelChangeFailed`),async t=>await t.updateChannel(e))}catch{return}if(t.status===`update-available`&&t.availableVersion){F.success(r(`runtimeUpdatesChannelChangedWithUpdate`).replace(`{channel}`,this.getChannelLabel(e)).replace(`{version}`,t.availableVersion));return}F.success(r(`runtimeUpdatesChannelChanged`).replace(`{channel}`,this.getChannelLabel(e)))},this.refreshSnapshot=async()=>{if(!(!this.source||this.source.kind!==`runtime-host`))try{let e=await this.source.getState();H.setState({supported:!0,initialized:!0,snapshot:e})}catch{}},this.runSnapshotCommand=async(e,t,n)=>{let i=this.source??this.resolveSource();if(!i)throw Error(r(`runtimeUpdatesUnavailableDescription`));this.source=i,H.setState({busyAction:e});try{let e=await n(i);return H.setState({snapshot:e}),e}catch(e){throw F.error(`${t}: ${this.getErrorMessage(e)}`),e}finally{H.setState({busyAction:null})}},this.resolveSource=()=>{let e=this.getDesktopApi();return e?new U(e):new qi},this.getDesktopApi=()=>typeof window>`u`?null:window.nextclawDesktop??null,this.isUnsupportedError=e=>{let t=this.getErrorMessage(e).toLowerCase();return t.includes(`404`)||t.includes(`not found`)||t.includes(`endpoint not found`)},this.getErrorMessage=e=>e instanceof Error?e.message:r(`error`),this.getChannelLabel=e=>r(e===`beta`?`desktopUpdatesChannelBeta`:`desktopUpdatesChannelStable`)}},Yi=`https://docs.nextclaw.io/`;function Xi(e,t){let n=t===`zh-CN`?`en-US`:`zh-CN`;return e?.[t]?.trim()||e?.[n]?.trim()||null}function Zi(e){let t=e.releaseNotesUrl?.trim(),n=(e.availableVersion??e.downloadedVersion)?.trim();return t?Qi(n,t):null}function Qi(e,t=Yi){let n=e?.trim();if(!n||!/^[0-9A-Za-z.-]+$/.test(n))return null;try{return new URL(`/release-notes/nextclaw-v${n}.json`,t).toString()}catch{return null}}function $i(e,t){return Xi(e?.links?.html,t)}function ea(e){let t=e.releaseNotesUrl?.trim(),n=(e.downloadedVersion??e.availableVersion)?.trim();return!t||!n?null:{url:t,versionLabel:`v${n}`}}function ta(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function na(e){return ta(e)?typeof e[`zh-CN`]==`string`||typeof e[`en-US`]==`string`:!1}function ra(e){return!ta(e)||!na(e.title)?!1:e.body===void 0||na(e.body)}function ia(e){return ta(e)&&typeof e.kind==`string`&&Array.isArray(e.items)&&e.items.every(ra)&&(e.title===void 0||na(e.title))}function aa(e){return ta(e)&&(e.html===void 0||na(e.html))}function oa(e){return ta(e)&&Array.isArray(e.sections)&&e.sections.every(ia)&&(e.title===void 0||na(e.title))&&(e.summary===void 0||na(e.summary))&&(e.links===void 0||aa(e.links))}async function sa(e){let t=await fetch(e,{cache:`no-store`,headers:{accept:`application/json`}});if(!t.ok)throw Error(`Release notes request failed with HTTP ${t.status}.`);let n=await t.json();if(!oa(n))throw Error(`Release notes payload has an unsupported shape.`);return n}function ca(){return n()===`zh`?`zh-CN`:`en-US`}function la(e){let t=Qi(e),n=ca(),r=$i(at({queryKey:[`current-release-notes`,t],queryFn:async()=>await sa(t??``),enabled:!!t,retry:!1,staleTime:300*1e3}).data,n),i=e?.trim();return r&&i?{url:r,versionLabel:`v${i}`}:null}function ua({children:e,fullHeight:t=!1,className:n}){return(0,P.jsx)(`div`,{className:Sr(`animate-fade-in`,t?`h-[calc(100vh-80px)] w-full flex flex-col`:`pb-16`,n),children:e})}function da({title:e,description:t,actions:n,headingLevel:r=2,mobileTitleInShell:i=!1,className:a}){let o=r===1?`h1`:`h2`;return(0,P.jsxs)(`header`,{"data-theme-surface":`header`,className:Sr(`flex shrink-0 flex-col gap-3 sm:flex-row sm:items-start sm:justify-between`,a),children:[(0,P.jsxs)(`div`,{className:Sr(`min-w-0`,i&&!t&&`hidden md:block`),children:[(0,P.jsx)(o,{className:Sr(`text-xl font-semibold tracking-tight text-foreground`,i&&`hidden md:block`),children:e}),t&&(0,P.jsx)(`p`,{className:`mt-1 max-w-2xl text-sm leading-6 text-muted-foreground`,children:t})]}),n&&(0,P.jsx)(`div`,{className:`flex items-center gap-2 shrink-0`,children:n})]})}function fa({actions:e,children:t,className:n,description:r,layout:i=`standard`,title:a}){return(0,P.jsxs)(ua,{className:Sr(`w-full space-y-6`,i===`split`&&`pb-0 md:flex md:h-full md:min-h-0 md:flex-col`,n),children:[(0,P.jsx)(da,{title:a,description:r,actions:e,mobileTitleInShell:!0}),t]})}var pa=e=>typeof e==`boolean`?`${e}`:e===0?`0`:e,ma=Dn,ha=(e,t)=>n=>{if(t?.variants==null)return ma(e,n?.class,n?.className);let{variants:r,defaultVariants:i}=t,a=Object.keys(r).map(e=>{let t=n?.[e],a=i?.[e];if(t===null)return null;let o=pa(t)||pa(a);return r[e][o]}),o=n&&Object.entries(n).reduce((e,t)=>{let[n,r]=t;return r===void 0||(e[n]=r),e},{});return ma(e,a,t?.compoundVariants?.reduce((e,t)=>{let{class:n,className:r,...a}=t;return Object.entries(a).every(e=>{let[t,n]=e;return Array.isArray(n)?n.includes({...i,...o}[t]):{...i,...o}[t]===n})?[...e,n,r]:e},[]),n?.class,n?.className)},ga=ha(`inline-flex items-center justify-center whitespace-nowrap rounded-full text-sm font-medium ring-offset-background transition-colors duration-fast focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border disabled:pointer-events-none disabled:opacity-50`,{variants:{variant:{default:`bg-primary text-primary-foreground hover:bg-[hsl(var(--primary-hover))] active:bg-[hsl(var(--primary-active))] shadow-sm`,destructive:`bg-destructive text-destructive-foreground hover:bg-destructive/90`,outline:`border border-border bg-card text-muted-foreground hover:bg-[var(--interaction-hover)] hover:text-accent-foreground`,secondary:`bg-muted text-foreground hover:bg-[var(--interaction-hover)] hover:text-accent-foreground`,ghost:`text-muted-foreground hover:bg-[var(--interaction-hover)] hover:text-accent-foreground`,link:`text-primary underline-offset-4 hover:underline`,primary:`bg-primary text-primary-foreground hover:bg-[hsl(var(--primary-hover))] active:bg-[hsl(var(--primary-active))] shadow-sm`,subtle:`bg-muted text-muted-foreground hover:bg-[var(--interaction-hover)] hover:text-accent-foreground`,"primary-outline":`border border-primary/30 text-primary hover:bg-primary hover:text-primary-foreground`},size:{default:`h-9 px-4 py-2`,sm:`h-8 px-3 text-xs`,lg:`h-11 px-5 text-[14px]`,xl:`h-12 px-6 text-[15px]`,icon:`h-9 w-9`}},defaultVariants:{variant:`default`,size:`default`}}),_a=N.forwardRef(({className:e,variant:t,size:n,...r},i)=>(0,P.jsx)(`button`,{className:Sr(ga({variant:t,size:n,className:e}),n!==`icon`&&`max-md:min-h-[var(--control-touch-size)]`),ref:i,...r}));_a.displayName=`Button`;var va=ha(`grid min-h-16 grid-cols-1 gap-3 px-4 py-3.5 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-center sm:gap-6`,{variants:{tone:{default:``,muted:`bg-muted/55`},layout:{responsive:``,stacked:`sm:grid-cols-1 sm:items-start sm:gap-3`}},defaultVariants:{tone:`default`,layout:`responsive`}}),ya=N.forwardRef(({actions:e,children:t,className:n,description:r,title:i,...a},o)=>(0,P.jsxs)(`section`,{ref:o,className:Sr(`space-y-2.5`,n),...a,children:[i||r||e?(0,P.jsxs)(`div`,{className:`flex items-end justify-between gap-4 px-1`,children:[(0,P.jsxs)(`div`,{className:`min-w-0`,children:[i?(0,P.jsx)(`h3`,{className:`text-sm font-semibold text-foreground`,children:i}):null,r?(0,P.jsx)(`p`,{className:`mt-0.5 text-xs leading-5 text-muted-foreground`,children:r}):null]}),e?(0,P.jsx)(`div`,{className:`shrink-0`,children:e}):null]}):null,t]}));ya.displayName=`SettingsSection`;var ba=N.forwardRef(({className:e,...t},n)=>(0,P.jsx)(`div`,{ref:n,className:Sr(`divide-y divide-border/55 overflow-hidden rounded-2xl bg-muted/45 text-foreground`,e),...t}));ba.displayName=`SettingsGroup`;var xa=N.forwardRef(({className:e,layout:t,tone:n,title:r,description:i,control:a,children:o,...s},c)=>(0,P.jsxs)(`div`,{ref:c,className:Sr(va({layout:t,tone:n}),e),...s,children:[(0,P.jsxs)(`div`,{className:`min-w-0`,children:[(0,P.jsx)(`div`,{className:`text-sm font-medium text-foreground`,children:r}),i?(0,P.jsx)(`p`,{className:`mt-0.5 text-xs leading-5 text-muted-foreground`,children:i}):null,o?(0,P.jsx)(`div`,{className:`mt-3`,children:o}):null]}),a?(0,P.jsx)(`div`,{className:`min-w-0 sm:shrink-0`,children:a}):null]}));xa.displayName=`SettingRow`;var Sa=N.forwardRef(({className:e,density:t=`default`,type:n,...r},i)=>(0,P.jsx)(`input`,{type:n,className:Sr(`flex h-9 w-full rounded-xl border border-border/75 bg-card px-3.5 py-2 text-sm text-foreground file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground/55 placeholder:font-normal transition-colors focus:outline-none focus:ring-0 disabled:cursor-not-allowed disabled:opacity-50`,t===`default`?`max-md:min-h-[var(--control-touch-size)] max-md:text-base`:`text-[13px] max-md:min-h-0 max-md:text-[13px]`,e),ref:i,...r}));Sa.displayName=`Input`;var W=N.forwardRef(({className:e,...t},n)=>(0,P.jsx)(`label`,{ref:n,className:Sr(`text-sm font-medium leading-none text-foreground peer-disabled:cursor-not-allowed peer-disabled:opacity-70`,e),...t}));W.displayName=`Label`;var Ca=N.forwardRef(({className:e,checked:t=!1,onCheckedChange:n,thumbClassName:r,...i},a)=>(0,P.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":t,"data-state":t?`checked`:`unchecked`,ref:a,className:Sr(`switch-track peer inline-flex h-[22px] w-10 shrink-0 cursor-pointer items-center rounded-full border-2 transition-colors duration-fast focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border disabled:cursor-not-allowed disabled:opacity-50`,t?`border-primary/70 bg-primary`:`border-border/60 bg-muted hover:bg-[var(--interaction-hover)]`,e),onClick:()=>n?.(!t),...i,children:(0,P.jsx)(`span`,{"data-state":t?`checked`:`unchecked`,className:Sr(`switch-thumb pointer-events-none block h-5 w-5 rounded-full bg-card shadow-md ring-1 ring-border/50 transition-transform duration-fast`,t?`translate-x-5`:`translate-x-0`,r)})}));Ca.displayName=`Switch`;var G={maxRetries:8,startupTimeoutMs:2e3,settledTimeoutMs:5e3,retryBaseDelayMs:500,retryMaxDelayMs:3e3};function wa(e){return e instanceof Error&&go(e.message)}function Ta(e,t){return e<G.maxRetries&&wa(t)}function Ea(e){return Math.min(G.retryMaxDelayMs,G.retryBaseDelayMs*2**Math.max(0,e-1))}function Da(){let e=(0,N.useRef)(!1);return at({queryKey:[`auth-status`],queryFn:async()=>{let t=await Eo({timeoutMs:e.current?G.settledTimeoutMs:G.startupTimeoutMs});return e.current=!0,t},staleTime:5e3,retry:Ta,retryDelay:Ea})}function Oa(e){return Promise.all([e.invalidateQueries({queryKey:[`auth-status`]}),e.invalidateQueries({queryKey:[`app-meta`]}),e.invalidateQueries({queryKey:[`config`]}),e.invalidateQueries({queryKey:[`config-meta`]}),e.invalidateQueries({queryKey:[`config-schema`]}),e.invalidateQueries({queryKey:[`sessions`]}),e.invalidateQueries({queryKey:[`session-history`]}),e.invalidateQueries({queryKey:[`chat-runs`]}),e.invalidateQueries({queryKey:[`cron-jobs`]})])}function ka(){let e=We();return ot({mutationFn:Do,onSuccess:async()=>{await Oa(e),F.success(r(`authSetupSuccess`))},onError:e=>{F.error(`${r(`authActionFailed`)}: ${e.message}`)}})}function Aa(){let e=We();return ot({mutationFn:Oo,onSuccess:async()=>{await Oa(e),F.success(r(`authLoginSuccess`))},onError:e=>{F.error(`${r(`authActionFailed`)}: ${e.message}`)}})}function ja(){let e=We();return ot({mutationFn:ko,onSuccess:async()=>{await Oa(e),F.success(r(`authLogoutSuccess`))},onError:e=>{F.error(`${r(`authActionFailed`)}: ${e.message}`)}})}function Ma(){let e=We();return ot({mutationFn:Ao,onSuccess:async()=>{await Oa(e),F.success(r(`authPasswordUpdated`))},onError:e=>{F.error(`${r(`authActionFailed`)}: ${e.message}`)}})}function Na(){let e=We();return ot({mutationFn:jo,onSuccess:async(t,n)=>{await Oa(e),F.success(n.enabled?r(`authEnabledSuccess`):r(`authDisabledSuccess`))},onError:e=>{F.error(`${r(`authActionFailed`)}: ${e.message}`)}})}var Pa=8;function Fa(e){return e.trim().length>=Pa}function Ia(e,t){return e===t?!0:(F.error(r(`authPasswordMismatch`)),!1)}function La({children:e,contentClassName:t=`space-y-6`}){return(0,P.jsx)(ba,{children:(0,P.jsx)(`div`,{className:`${t} p-4`,children:e})})}function Ra({canSubmitSetup:e,isPending:t,onSubmit:n,setSetupConfirmPassword:i,setSetupPassword:a,setSetupUsername:o,setupConfirmPassword:s,setupPassword:c,setupUsername:l}){return(0,P.jsxs)(La,{contentClassName:`space-y-5`,children:[(0,P.jsxs)(`div`,{className:`rounded-xl bg-background/65 p-4`,children:[(0,P.jsx)(`p`,{className:`text-sm font-medium text-foreground`,children:r(`authSetupTitle`)}),(0,P.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:r(`authSetupDescription`)})]}),(0,P.jsxs)(`div`,{className:`grid gap-4 md:grid-cols-2`,children:[(0,P.jsxs)(`div`,{className:`space-y-2`,children:[(0,P.jsx)(W,{htmlFor:`auth-setup-username`,children:r(`authUsername`)}),(0,P.jsx)(Sa,{id:`auth-setup-username`,value:l,onChange:e=>o(e.target.value),placeholder:r(`authUsernamePlaceholder`)})]}),(0,P.jsxs)(`div`,{className:`space-y-2`,children:[(0,P.jsx)(W,{htmlFor:`auth-setup-password`,children:r(`authPassword`)}),(0,P.jsx)(Sa,{id:`auth-setup-password`,type:`password`,value:c,onChange:e=>a(e.target.value),placeholder:r(`authPasswordPlaceholder`)})]})]}),(0,P.jsxs)(`div`,{className:`space-y-2`,children:[(0,P.jsx)(W,{htmlFor:`auth-setup-confirm`,children:r(`authConfirmPassword`)}),(0,P.jsx)(Sa,{id:`auth-setup-confirm`,type:`password`,value:s,onChange:e=>i(e.target.value),placeholder:r(`authConfirmPasswordPlaceholder`)}),(0,P.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:r(`authPasswordMinLengthHint`)})]}),(0,P.jsx)(_a,{type:`button`,disabled:!e,onClick:()=>void n(),children:r(t?`authSettingUp`:`authSetupAction`)})]})}function za({authenticated:e,canUpdatePassword:t,enabled:n,isLoggingOut:i,isUpdatingEnabled:a,isUpdatingPassword:o,nextConfirmPassword:s,nextPassword:c,onEnabledChange:l,onLogout:u,onPasswordUpdate:d,setNextConfirmPassword:f,setNextPassword:p,username:m}){return(0,P.jsxs)(La,{children:[(0,P.jsxs)(`div`,{className:`rounded-xl bg-background/65 p-4`,children:[(0,P.jsxs)(`div`,{className:`flex flex-col gap-4 md:flex-row md:items-start md:justify-between`,children:[(0,P.jsxs)(`div`,{className:`space-y-1`,children:[(0,P.jsx)(`p`,{className:`text-sm font-medium text-foreground`,children:r(`authStatusLabel`)}),(0,P.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:r(`authStatusConfiguredUser`).replace(`{username}`,m??``)}),(0,P.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:r(`authUsernameFixedHelp`)})]}),(0,P.jsx)(`span`,{className:`inline-flex items-center rounded-full bg-muted px-3 py-1 text-xs font-medium text-foreground`,children:r(n?`enabled`:`disabled`)})]}),(0,P.jsxs)(`div`,{className:`mt-4 flex flex-col gap-4 border-t border-border/55 pt-4 md:flex-row md:items-center md:justify-between`,children:[(0,P.jsxs)(`div`,{className:`space-y-1`,children:[(0,P.jsx)(`p`,{className:`text-sm font-medium text-foreground`,children:r(`authEnableLabel`)}),(0,P.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:r(n?`authEnableOnHelp`:`authEnableOffHelp`)})]}),(0,P.jsx)(Ca,{checked:n,disabled:a,onCheckedChange:e=>{l(e)}})]})]}),(0,P.jsxs)(`div`,{className:`space-y-4 rounded-xl bg-background/65 p-4`,children:[(0,P.jsxs)(`div`,{className:`space-y-1`,children:[(0,P.jsx)(`p`,{className:`text-sm font-medium text-foreground`,children:r(`authPasswordSectionTitle`)}),(0,P.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:r(`authPasswordSectionDescription`)})]}),(0,P.jsxs)(`div`,{className:`grid gap-4 md:grid-cols-2`,children:[(0,P.jsxs)(`div`,{className:`space-y-2`,children:[(0,P.jsx)(W,{htmlFor:`auth-password-next`,children:r(`authPassword`)}),(0,P.jsx)(Sa,{id:`auth-password-next`,type:`password`,value:c,onChange:e=>p(e.target.value),placeholder:r(`authPasswordPlaceholder`)})]}),(0,P.jsxs)(`div`,{className:`space-y-2`,children:[(0,P.jsx)(W,{htmlFor:`auth-password-confirm`,children:r(`authConfirmPassword`)}),(0,P.jsx)(Sa,{id:`auth-password-confirm`,type:`password`,value:s,onChange:e=>f(e.target.value),placeholder:r(`authConfirmPasswordPlaceholder`)})]})]}),(0,P.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,P.jsx)(_a,{type:`button`,disabled:!t,onClick:()=>void d(),children:r(o?`authPasswordUpdating`:`authPasswordAction`)}),n&&e?(0,P.jsx)(_a,{type:`button`,variant:`outline`,disabled:i,onClick:()=>void u(),children:r(i?`authLoggingOut`:`authLogoutAction`)}):null]}),(0,P.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:r(`authSessionMemoryNotice`)})]})]})}function Ba(){let e=Da(),t=ka(),n=Na(),i=Ma(),a=ja(),[o,s]=(0,N.useState)(``),[c,l]=(0,N.useState)(``),[u,d]=(0,N.useState)(``),[f,p]=(0,N.useState)(``),[m,h]=(0,N.useState)(``),g=e.data,_=o.trim().length>0&&Fa(c)&&c===u&&!t.isPending,v=Fa(f)&&f===m&&!i.isPending;return e.isLoading&&!g?(0,P.jsx)(La,{contentClassName:`text-sm text-gray-500`,children:r(`loading`)}):e.isError||!g?(0,P.jsxs)(La,{contentClassName:`space-y-4`,children:[(0,P.jsx)(`p`,{className:`text-sm text-gray-500`,children:r(`authStatusLoadFailed`)}),(0,P.jsx)(_a,{variant:`outline`,onClick:()=>void e.refetch(),children:r(`authRetryStatus`)})]}):g.configured?(0,P.jsx)(za,{authenticated:g.authenticated,enabled:g.enabled,username:g.username,nextPassword:f,setNextPassword:p,nextConfirmPassword:m,setNextConfirmPassword:h,canUpdatePassword:v,isUpdatingEnabled:n.isPending,isUpdatingPassword:i.isPending,isLoggingOut:a.isPending,onEnabledChange:async e=>{try{await n.mutateAsync({enabled:e})}catch{}},onPasswordUpdate:async()=>{if(Ia(f,m))try{await i.mutateAsync({password:f}),p(``),h(``)}catch{}},onLogout:async()=>{try{await a.mutateAsync()}catch{}}}):(0,P.jsx)(Ra,{setupUsername:o,setSetupUsername:s,setupPassword:c,setSetupPassword:l,setupConfirmPassword:u,setSetupConfirmPassword:d,canSubmitSetup:_,isPending:t.isPending,onSubmit:async()=>{if(Ia(c,u))try{await t.mutateAsync({username:o.trim(),password:c}),l(``),d(``)}catch{}}})}function Va(){return(0,P.jsx)(fa,{title:r(`authSecurityTitle`),description:r(`authSecurityDescription`),children:(0,P.jsx)(Ba,{})})}var Ha=250,Ua=class{constructor(e){this.requestRecovery=e,this.started=!1,this.recoveryCooldownId=null,this.start=()=>{this.started||(this.started=!0,document.addEventListener(`visibilitychange`,this.handleVisibilityChange),window.addEventListener(`online`,this.handleOnline),window.addEventListener(`pageshow`,this.handlePageShow),window.addEventListener(`focus`,this.handleForegroundSignal))},this.stop=()=>{this.started&&(this.started=!1,document.removeEventListener(`visibilitychange`,this.handleVisibilityChange),window.removeEventListener(`online`,this.handleOnline),window.removeEventListener(`pageshow`,this.handlePageShow),window.removeEventListener(`focus`,this.handleForegroundSignal),this.recoveryCooldownId!==null&&(window.clearTimeout(this.recoveryCooldownId),this.recoveryCooldownId=null))},this.handleVisibilityChange=()=>{this.requestRecoveryIfVisible()},this.handleOnline=()=>{this.requestRecoveryIfVisible()},this.handleForegroundSignal=()=>{this.requestRecoveryIfVisible()},this.handlePageShow=e=>{e.persisted&&this.requestRecoveryIfVisible()},this.requestRecoveryIfVisible=()=>{document.visibilityState!==`visible`||this.recoveryCooldownId!==null||(this.requestRecovery(),this.recoveryCooldownId=window.setTimeout(()=>{this.recoveryCooldownId=null},Ha))}}};function Wa(e){return e.replace(/\s+/g,` `).trim().slice(0,200)}function Ga(e,t){if(t===404&&e.startsWith(`/api/providers/`)&&e.endsWith(`/test`))return`Provider test endpoint is missing. This usually means nextclaw runtime version is outdated.`;if(t===401||t===403)return`Authentication failed. Check apiKey and custom headers.`;if(t===429)return`Rate limited by upstream provider. Retry later or switch model/provider.`;if(t>=500)return`Upstream service error. Retry later and inspect server logs if it persists.`}function Ka(e){if(e instanceof Error){let t=e.name?.trim()||`Error`,n=e.message?.trim()||`Unknown error`;return{summary:`${t}: ${n}`,details:{errorName:t,errorMessage:n,...e.stack?.trim()?{errorStack:e.stack.trim()}:{}}}}return{summary:String(e??`Unknown error`),details:{errorName:`NonError`,errorMessage:String(e??`Unknown error`)}}}async function qa(e,t,n={}){let r=`${e}${t}`,i=(n.method||`GET`).toUpperCase(),a;try{let e=new Headers(n.headers);!(n.body instanceof FormData)&&!e.has(`Content-Type`)&&e.set(`Content-Type`,`application/json`),a=await fetch(r,{credentials:`include`,headers:e,...n})}catch(e){let n=Ka(e);return Hi.reportTransportFailure(n.summary),{ok:!1,error:{code:`NETWORK_ERROR`,message:`Fetch failed on ${i} ${t} | ${n.summary}`,details:{method:i,endpoint:t,url:r,...n.details}}}}let o=await a.text(),s=null;if(o)try{s=JSON.parse(o)}catch{}if(!s){let e=o?Wa(o):``,n=Ga(t,a.status),s=[`Non-JSON response (${a.status} ${a.statusText}) on ${i} ${t}`];return e&&s.push(`body=${e}`),n&&s.push(`hint=${n}`),{ok:!1,error:{code:`INVALID_RESPONSE`,message:s.join(` | `),details:{status:a.status,statusText:a.statusText,method:i,endpoint:t,url:r,bodySnippet:e||void 0,hint:n}}}}return a.ok,s}function Ja(e){let t=e.split(`
|
|
15
15
|
`),n=``,r=[];for(let e of t){let t=e.trimEnd();if(!(!t||t.startsWith(`:`))){if(t.startsWith(`event:`)){n=t.slice(6).trim();continue}t.startsWith(`data:`)&&r.push(t.slice(5).trimStart())}}if(!n)return null;let i,a=r.join(`
|
|
16
16
|
`);if(a)try{i=JSON.parse(a)}catch{i=a}return{name:n,payload:i}}function Ya(e,t,n){let r=Ja(e);r&&(r.name===`final`&&n(r.payload),t(r))}function Xa(e,t,n){let r=e,i=r.indexOf(`
|
|
17
17
|
|