@nextclaw/ui 0.12.8 → 0.12.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/dist/assets/ChannelsList-Ita2Zm1_.js +8 -0
  3. package/dist/assets/{DocBrowser-BMxf9CIK.js → DocBrowser-6ReNjvzF.js} +1 -1
  4. package/dist/assets/DocBrowser-BNwbPHf4.js +1 -0
  5. package/dist/assets/{DocBrowserContext-Ce28gRXt.js → DocBrowserContext-B6SpA7Qs.js} +1 -1
  6. package/dist/assets/{LogoBadge-o92MOA2L.js → LogoBadge-ByNLYg65.js} +1 -1
  7. package/dist/assets/MarketplacePage-CjX2MWww.js +1 -0
  8. package/dist/assets/{MarketplacePage-BySqkYDh.js → MarketplacePage-D0sDlYX4.js} +1 -1
  9. package/dist/assets/McpMarketplacePage-BGKJm1sJ.js +40 -0
  10. package/dist/assets/{ModelConfig-IrmzoslW.js → ModelConfig-BzZenCH-.js} +1 -1
  11. package/dist/assets/{ProviderScopedModelInput-CmTIzgI7.js → ProviderScopedModelInput-Da7khnBA.js} +1 -1
  12. package/dist/assets/{ProvidersList-8_Kalfwl.js → ProvidersList-BbVzRxjY.js} +1 -1
  13. package/dist/assets/RemoteAccessPage-BaDH_X1Q.js +1 -0
  14. package/dist/assets/RuntimeConfig-F_XKGgLm.js +1 -0
  15. package/dist/assets/{SearchConfig-DNBR-UbE.js → SearchConfig-BGkzXQP-.js} +1 -1
  16. package/dist/assets/{SecretsConfig-Ba1RPJaG.js → SecretsConfig-D281Rotl.js} +2 -2
  17. package/dist/assets/{SessionsConfig-Doqp5ghH.js → SessionsConfig-ChHQ7M5c.js} +2 -2
  18. package/dist/assets/{app-query-client-DniXoIN5.js → app-query-client-VnFElj4E.js} +1 -1
  19. package/dist/assets/{book-open-DocgeQtR.js → book-open-BdcxxoQu.js} +1 -1
  20. package/dist/assets/chat-page-Doe0yTtB.js +58 -0
  21. package/dist/assets/chat-session-display-cw78aiI_.js +1 -0
  22. package/dist/assets/{chunk-JZWAC4HX-BvKvh1R8.js → chunk-JZWAC4HX-DK5HPmIK.js} +1 -1
  23. package/dist/assets/{client-CVqPF5ie.js → client-_i4MU2bB.js} +1 -1
  24. package/dist/assets/{config-Bop2oB18.js → config-DtIQwrHF.js} +1 -1
  25. package/dist/assets/{createLucideIcon-DVv8taGY.js → createLucideIcon-BSeTgkZW.js} +1 -1
  26. package/dist/assets/desktop-update-config-Dpcf4BKG.js +1 -0
  27. package/dist/assets/{dist-Da5Gm_pO.js → dist-6TrrnPCR.js} +1 -1
  28. package/dist/assets/{dist-DmAlInRu.js → dist-ccBFUi-o.js} +1 -1
  29. package/dist/assets/download-BhDxnyvU.js +1 -0
  30. package/dist/assets/{external-link-DFjw3x1B.js → external-link-BgErLCNT.js} +1 -1
  31. package/dist/assets/{hash-DJtaCejM.js → hash-Bl7dr_UG.js} +1 -1
  32. package/dist/assets/i18n-eDHeDY0n.js +1 -0
  33. package/dist/assets/index-CF9xve0E.js +6 -0
  34. package/dist/assets/index-FgA52VBt.css +1 -0
  35. package/dist/assets/{infiniteQueryBehavior-DHSEQ3OH.js → infiniteQueryBehavior-ZDS92Qpp.js} +1 -1
  36. package/dist/assets/loader-circle-ACM1s51e.js +1 -0
  37. package/dist/assets/{logos-DEFUIR12.js → logos-x89HbrZ4.js} +1 -1
  38. package/dist/assets/{page-layout-Da3i3r6G.js → page-layout-vZnghcFy.js} +1 -1
  39. package/dist/assets/play-CFUwCA2E.js +1 -0
  40. package/dist/assets/plus-rYsv72JG.js +1 -0
  41. package/dist/assets/{popover-C_mWOFzI.js → popover-Bg1VoTZ6.js} +1 -1
  42. package/dist/assets/{refresh-ccw-D6HkNtfz.js → refresh-ccw-DT98i__E.js} +1 -1
  43. package/dist/assets/{refresh-cw-DRcvRrnc.js → refresh-cw-C47QSEwg.js} +1 -1
  44. package/dist/assets/{rotate-cw-BmDKfXtH.js → rotate-cw-JtFzpNn6.js} +1 -1
  45. package/dist/assets/{save-DHGmi2e9.js → save-3S6-H3Xw.js} +1 -1
  46. package/dist/assets/search-3kFR_zh9.js +1 -0
  47. package/dist/assets/{security-config-CbXfPZzr.js → security-config-BWaiARNk.js} +1 -1
  48. package/dist/assets/{select-Caud8QvU.js → select-DJ2MUjBB.js} +1 -1
  49. package/dist/assets/skeleton-ByQepn0M.js +1 -0
  50. package/dist/assets/{status-dot-DurKKSwA.js → status-dot-vbanNPFU.js} +1 -1
  51. package/dist/assets/{switch-0rmPBRKI.js → switch-BsLtHOH-.js} +1 -1
  52. package/dist/assets/{tabs-custom-5JLVL6v8.js → tabs-custom-D3HYMt6k.js} +1 -1
  53. package/dist/assets/{trash-2-C6caKPoz.js → trash-2-G48scll7.js} +1 -1
  54. package/dist/assets/{use-infinite-scroll-loader-dwnaa_qi.js → use-infinite-scroll-loader-DkNhD-42.js} +1 -1
  55. package/dist/assets/{useConfirmDialog-mMeWD_yo.js → useConfirmDialog-BkvTN-vd.js} +1 -1
  56. package/dist/assets/{useMutation-BmxxvCNf.js → useMutation-CBWjE2uj.js} +1 -1
  57. package/dist/assets/x-ByDbItbq.js +1 -0
  58. package/dist/index.html +95 -21
  59. package/dist/manifest.webmanifest +30 -0
  60. package/dist/offline.html +102 -0
  61. package/dist/pwa-192.png +0 -0
  62. package/dist/pwa-512.png +0 -0
  63. package/dist/sw.js +80 -0
  64. package/index.html +73 -1
  65. package/package.json +6 -6
  66. package/public/manifest.webmanifest +30 -0
  67. package/public/offline.html +102 -0
  68. package/public/pwa-192.png +0 -0
  69. package/public/pwa-512.png +0 -0
  70. package/public/sw.js +80 -0
  71. package/src/api/server-path.ts +27 -4
  72. package/src/api/types.ts +17 -10
  73. package/src/app.tsx +9 -0
  74. package/src/components/chat/ChatSidebar.test.tsx +43 -1
  75. package/src/components/chat/ChatSidebar.tsx +24 -0
  76. package/src/components/chat/adapters/chat-message.summary-truncation.test.ts +66 -0
  77. package/src/components/chat/adapters/file-operation/card.ts +9 -0
  78. package/src/components/chat/adapters/file-operation/diff.ts +14 -0
  79. package/src/components/chat/{ChatConversationPanel.test.tsx → chat-conversation-panel.test.tsx} +107 -206
  80. package/src/components/chat/chat-conversation-panel.tsx +412 -0
  81. package/src/components/chat/chat-page-shell.tsx +1 -1
  82. package/src/components/chat/chat-session-workspace-file-preview.test.tsx +91 -0
  83. package/src/components/chat/chat-session-workspace-file-preview.tsx +307 -0
  84. package/src/components/chat/chat-session-workspace-panel-nav.tsx +197 -0
  85. package/src/components/chat/chat-session-workspace-panel.tsx +318 -0
  86. package/src/components/chat/chat-sidebar-session-item.tsx +32 -2
  87. package/src/components/chat/containers/chat-message-list.container.test.tsx +49 -0
  88. package/src/components/chat/containers/chat-message-list.container.tsx +4 -0
  89. package/src/components/chat/managers/chat-session-list.manager.test.ts +12 -0
  90. package/src/components/chat/managers/chat-session-list.manager.ts +7 -0
  91. package/src/components/chat/ncp/ncp-chat-page.tsx +7 -7
  92. package/src/components/chat/ncp/ncp-chat-thread.manager.ts +179 -41
  93. package/src/components/chat/ncp/ncp-session-adapter.test.ts +35 -1
  94. package/src/components/chat/ncp/ncp-session-adapter.ts +17 -0
  95. package/src/components/chat/ncp/page/ncp-chat-derived-state.ts +54 -11
  96. package/src/components/chat/ncp/tests/ncp-chat-thread.manager.test.ts +189 -0
  97. package/src/components/chat/presenter/chat-presenter-context.tsx +13 -2
  98. package/src/components/chat/session-header/chat-session-header-actions.test.tsx +26 -0
  99. package/src/components/chat/session-header/chat-session-header-actions.tsx +19 -1
  100. package/src/components/chat/stores/chat-thread.store.ts +24 -0
  101. package/src/components/config/RuntimeConfig.tsx +141 -2
  102. package/src/components/layout/AppLayout.tsx +1 -1
  103. package/src/components/providers/ThemeProvider.tsx +5 -0
  104. package/src/hooks/server-path/use-server-path-read.ts +20 -0
  105. package/src/lib/chat-message.ts +14 -3
  106. package/src/lib/i18n.chat.ts +12 -1
  107. package/src/lib/i18n.pwa.ts +62 -0
  108. package/src/lib/i18n.ts +2 -2
  109. package/src/pwa/components/pwa-install-entry.test.tsx +110 -0
  110. package/src/pwa/components/pwa-install-entry.tsx +205 -0
  111. package/src/pwa/managers/pwa-install.manager.test.ts +160 -0
  112. package/src/pwa/managers/pwa-install.manager.ts +232 -0
  113. package/src/pwa/managers/pwa-runtime.manager.ts +196 -0
  114. package/src/pwa/managers/pwa-shell-theme.manager.test.ts +30 -0
  115. package/src/pwa/managers/pwa-shell-theme.manager.ts +46 -0
  116. package/src/pwa/pwa-install-banner.storage.ts +55 -0
  117. package/src/pwa/pwa.types.ts +22 -0
  118. package/src/pwa/register-pwa.ts +14 -0
  119. package/src/pwa/stores/pwa.store.ts +17 -0
  120. package/src/vite-env.d.ts +9 -0
  121. package/dist/assets/ChannelsList-KIQIxluX.js +0 -8
  122. package/dist/assets/DocBrowser-CyDgAtO9.js +0 -1
  123. package/dist/assets/MarketplacePage-C0olZaek.js +0 -1
  124. package/dist/assets/McpMarketplacePage-DqKaiXO9.js +0 -40
  125. package/dist/assets/RemoteAccessPage-CyQlSjPf.js +0 -1
  126. package/dist/assets/RuntimeConfig-Bk0uYBhf.js +0 -1
  127. package/dist/assets/chat-page-Bph8M5zo.js +0 -58
  128. package/dist/assets/chat-session-display-CoN3Wmn-.js +0 -1
  129. package/dist/assets/desktop-update-config-1KBrqLBC.js +0 -1
  130. package/dist/assets/i18n-CwHZ-9vt.js +0 -1
  131. package/dist/assets/index-DafCdM4F.css +0 -1
  132. package/dist/assets/index-DdksE6U3.js +0 -6
  133. package/dist/assets/loader-circle-PsSP0H9n.js +0 -1
  134. package/dist/assets/play-DBQbBxTA.js +0 -1
  135. package/dist/assets/plus-DUOVbsyQ.js +0 -1
  136. package/dist/assets/search-MChQRYR1.js +0 -1
  137. package/dist/assets/skeleton-B-4vRq_Z.js +0 -1
  138. package/dist/assets/x-DuMhMATD.js +0 -1
  139. package/src/components/chat/ChatConversationPanel.tsx +0 -256
  140. package/src/components/chat/chat-child-session-panel.tsx +0 -270
  141. /package/dist/assets/{config-hints-BZoDjXye.js → config-hints-BhTmc9P1.js} +0 -0
  142. /package/dist/assets/{config-layout-DmlGaay2.js → config-layout-CHs0mAaR.js} +0 -0
@@ -1 +0,0 @@
1
- import{_ as e,i as t,m as n,p as r}from"./i18n-CwHZ-9vt.js";import{n as i,r as a}from"./dist-DmAlInRu.js";import{i as o,s,t as c}from"./client-CVqPF5ie.js";import{t as l}from"./useMutation-BmxxvCNf.js";import{a as u,i as d,n as f,r as p,t as m}from"./select-Caud8QvU.js";import{t as h}from"./createLucideIcon-DVv8taGY.js";import{t as g}from"./loader-circle-PsSP0H9n.js";import{t as _}from"./play-DBQbBxTA.js";import{t as v}from"./plus-DUOVbsyQ.js";import{t as y}from"./rotate-cw-BmDKfXtH.js";import{t as b}from"./save-DHGmi2e9.js";import{t as x}from"./trash-2-C6caKPoz.js";import{A as S,G as C,J as w,K as T,W as E,Z as D,c as ee,et as O,q as k,tt as A,u as j}from"./index-DdksE6U3.js";import{n as M,t as N}from"./page-layout-Da3i3r6G.js";import{t as P}from"./config-hints-BZoDjXye.js";import{t as F}from"./switch-0rmPBRKI.js";var I=h(`Square`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}]]),L=e(n(),1);async function R(){let e=await c.get(`/api/runtime/control`);if(!e.ok)throw Error(e.error.message);return e.data}async function z(){let e=await c.post(`/api/runtime/control/start-service`,{});if(!e.ok)throw Error(e.error.message);return e.data}async function B(){let e=await c.post(`/api/runtime/control/restart-service`,{});if(!e.ok)throw Error(e.error.message);return e.data}async function V(){let e=await c.post(`/api/runtime/control/stop-service`,{});if(!e.ok)throw Error(e.error.message);return e.data}var H=new class{constructor(){this.getControl=async()=>this.decorateForCurrentEnvironment(await R()),this.controlService=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}}return e===`start-service`?await z():e===`stop-service`?await V():await B()},this.restartApp=async()=>{let e=this.getDesktopBridge();if(!e||typeof e.restartApp!=`function`)throw Error(t(`runtimeRestartAppUnavailable`));let n=await e.restartApp();return{accepted:n.accepted,action:`restart-app`,lifecycle:n.lifecycle,message:n.message}},this.waitForRecovery=async(e={})=>{let n=e.timeoutMs??25e3,r=e.pollIntervalMs??1500,i=Date.now()+n,a=null;for(;Date.now()<i;)try{return await this.getControl()}catch(e){a=e,await this.sleep(r)}throw a instanceof Error?a:Error(t(`runtimeRecoveryTimedOut`))},this.decorateForCurrentEnvironment=e=>{let n=this.getDesktopBridge();return!n||typeof n.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:t(`runtimeControlEnvironmentDesktop`),managementHint:t(`runtimeControlDesktopServiceHint`)}},this.getDesktopBridge=()=>typeof window>`u`?null:window.nextclawDesktop??null,this.sleep=async e=>{await new Promise(t=>{window.setTimeout(t,e)})}}};function U(){return o({queryKey:[`runtime-control`],queryFn:async()=>await H.getControl(),staleTime:5e3,refetchOnWindowFocus:!0})}function W(){let e=s();return l({mutationFn:async e=>await H.controlService(e),onSuccess:async()=>{await e.invalidateQueries({queryKey:[`runtime-control`]})}})}var G=r();function K(e){return t(e===`healthy`?`runtimeControlHealthy`:e===`starting-service`?`runtimeControlStartingService`:e===`restarting-service`?`runtimeControlRestartingService`:e===`stopping-service`?`runtimeControlStoppingService`:e===`restarting-app`?`runtimeControlRestartingApp`:e===`recovering`?`runtimeControlRecovering`:e===`failed`?`runtimeControlFailed`:`runtimeControlUnavailable`)}function q(e){return t(e===`running`?`runtimeControlServiceRunning`:e===`stopped`?`runtimeControlServiceStopped`:e===`starting`?`runtimeControlServiceStarting`:e===`stopping`?`runtimeControlServiceStopping`:e===`restarting`?`runtimeControlServiceRestarting`:`runtimeControlServiceUnknown`)}function J(e){return e.environment===`desktop-embedded`?t(`runtimeControlEnvironmentDesktop`):e.environment===`managed-local-service`?t(`runtimeControlEnvironmentManagedService`):e.environment===`self-hosted-web`?t(`runtimeControlEnvironmentSelfHosted`):t(`runtimeControlEnvironmentSharedWeb`)}function Y(e){return e?[{action:`start-service`,capability:e.canStartService,label:t(`runtimeControlStartService`),icon:`play`},{action:`restart-service`,capability:e.canRestartService,label:t(`runtimeControlRestartService`),icon:`rotate`},{action:`stop-service`,capability:e.canStopService,label:t(`runtimeControlStopService`),icon:`square`,variant:`destructive`},{action:`restart-app`,capability:e.canRestartApp,label:t(`runtimeControlRestartApp`),icon:`rotate`,variant:`secondary`}].filter(e=>e.capability.available||!!e.capability.reasonIfUnavailable):[]}function te(e){return t(e===`start-service`?`runtimeControlStartingServiceHelp`:e===`restart-service`?`runtimeControlRestartingServiceHelp`:e===`stop-service`?`runtimeControlStoppingServiceHelp`:`runtimeControlRestartingAppHelp`)}function ne(e){let{busy:t,icon:n}=e;return t?(0,G.jsx)(g,{className:`mr-2 h-4 w-4 animate-spin`}):n===`play`?(0,G.jsx)(_,{className:`mr-2 h-4 w-4`}):n===`square`?(0,G.jsx)(I,{className:`mr-2 h-4 w-4`}):(0,G.jsx)(y,{className:`mr-2 h-4 w-4`})}function re(){let e=s(),n=U(),r=W(),[o,c]=(0,L.useState)(null),[l,u]=(0,L.useState)(null),[d,f]=(0,L.useState)(null),[p,m]=(0,L.useState)(null),h=n.data,g=o??h?.lifecycle??`healthy`,_=l??h?.serviceState??`unknown`,v=d??h?.message??t(`runtimeControlDescription`),y=r.isPending||p!==null||g===`recovering`,b=Y(h),x=()=>{c(null),u(null),f(null),m(null)},S=async n=>{let a=n===`start-service`?h?.canStartService:n===`stop-service`?h?.canStopService:h?.canRestartService;if(!a?.available){i.error(a?.reasonIfUnavailable??t(`runtimeControlLoadFailed`));return}if(!(n===`stop-service`&&a.requiresConfirmation&&!window.confirm(t(`runtimeControlStopServiceConfirm`)))){m(n),c(n===`start-service`?`starting-service`:n===`stop-service`?`stopping-service`:`restarting-service`),u(n===`start-service`?`starting`:n===`stop-service`?`stopping`:`restarting`),f(te(n));try{let a=await r.mutateAsync(n);if(i.success(a.message),n===`stop-service`)return;c(`recovering`),f(t(`runtimeControlRecoveringHelp`));let o=await H.waitForRecovery();e.setQueryData([`runtime-control`],o),await e.invalidateQueries({queryKey:[`runtime-control`]}),x(),i.success(t(`runtimeControlRecovered`))}catch(e){let r=e instanceof Error?e.message:t(`runtimeControlActionFailed`);c(`failed`),u(n===`stop-service`?`running`:`unknown`),f(r),m(null),i.error(`${t(`runtimeControlActionFailed`)}: ${r}`)}}},D=async()=>{if(!h?.canRestartApp.available){i.error(h?.canRestartApp.reasonIfUnavailable??t(`runtimeRestartAppUnavailable`));return}if(window.confirm(t(`runtimeControlRestartAppConfirm`))){m(`restart-app`),c(`restarting-app`),f(t(`runtimeControlRestartingAppHelp`));try{let e=await H.restartApp();i.success(e.message)}catch(e){let n=e instanceof Error?e.message:t(`runtimeControlActionFailed`);c(`failed`),f(n),m(null),i.error(`${t(`runtimeControlActionFailed`)}: ${n}`)}}};return(0,G.jsxs)(E,{children:[(0,G.jsxs)(k,{children:[(0,G.jsx)(w,{children:t(`runtimeControlTitle`)}),(0,G.jsx)(T,{children:t(`runtimeControlDescription`)})]}),(0,G.jsxs)(C,{className:`space-y-4`,children:[(0,G.jsxs)(`div`,{className:`rounded-xl border border-gray-200 bg-gray-50 p-4 space-y-3`,children:[(0,G.jsxs)(`div`,{className:`flex flex-col gap-1 md:flex-row md:items-center md:justify-between`,children:[(0,G.jsx)(`div`,{className:`text-sm font-medium text-gray-900`,children:q(_)}),(0,G.jsx)(`div`,{className:`text-xs text-gray-500`,children:h?J(h):t(`runtimeControlLoading`)})]}),(0,G.jsx)(`p`,{className:`text-sm text-gray-600`,children:v}),(0,G.jsx)(`div`,{className:`text-xs text-gray-500`,children:K(g)}),h?.managementHint?(0,G.jsx)(`p`,{className:`text-xs text-gray-500`,children:h.managementHint}):null,n.isError&&!y?(0,G.jsx)(`p`,{className:`text-sm text-amber-700`,children:n.error instanceof Error?n.error.message:t(`runtimeControlLoadFailed`)}):null]}),(0,G.jsx)(`div`,{className:`flex flex-col gap-3 md:flex-row md:flex-wrap`,children:b.map(e=>{let t=p===e.action,n=!e.capability.available||y;return(0,G.jsxs)(a,{type:`button`,variant:e.variant??`default`,onClick:()=>{if(e.action===`restart-app`){D();return}S(e.action)},disabled:n,children:[(0,G.jsx)(ne,{icon:e.icon,busy:t}),e.label]},e.action)})}),b.filter(e=>!e.capability.available&&e.capability.reasonIfUnavailable).map(e=>(0,G.jsx)(`p`,{className:`text-xs text-gray-500`,children:e.capability.reasonIfUnavailable},`${e.action}-reason`))]})]})}var X=D(()=>({supported:!1,initialized:!1,busyAction:null,snapshot:null})),Z=new class{constructor(){this.start=async()=>{let e=this.getDesktopApi();if(!e){this.markUnsupported();return}X.setState({supported:!0,initialized:!1,busyAction:`loading`});try{let t=await e.getPresenceState();X.setState({supported:!0,initialized:!0,busyAction:null,snapshot:t})}catch(e){X.setState({supported:!0,initialized:!0,busyAction:null}),i.error(`${t(`runtimePresenceLoadFailed`)}: ${this.getErrorMessage(e)}`)}},this.markUnsupported=()=>{X.setState({supported:!1,initialized:!0,busyAction:null,snapshot:null})},this.updatePreferences=async e=>{let n=this.getDesktopApi();if(!n)throw Error(t(`runtimePresenceLaunchAtLoginUnavailable`));X.setState({busyAction:`saving-preferences`});try{let r=await n.updatePresencePreferences(e);return X.setState({supported:!0,initialized:!0,snapshot:r}),i.success(t(`runtimePresenceSaved`)),r}catch(e){throw i.error(`${t(`runtimePresenceSaveFailed`)}: ${this.getErrorMessage(e)}`),e}finally{X.setState({busyAction:null})}},this.getDesktopApi=()=>typeof window>`u`?null:window.nextclawDesktop??null,this.getErrorMessage=e=>e instanceof Error?e.message:t(`error`)}};function Q(e){let{description:t,title:n}=e;return(0,G.jsxs)(`div`,{className:`rounded-xl border border-gray-200 bg-gray-50 p-4`,children:[(0,G.jsx)(`p`,{className:`text-sm font-medium text-gray-900`,children:n}),(0,G.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-gray-600`,children:t})]})}function ie(){let e=U().data?.environment,n=X(e=>e.supported),r=X(e=>e.initialized),i=X(e=>e.busyAction),a=X(e=>e.snapshot);return(0,L.useEffect)(()=>{if(e===`desktop-embedded`){Z.start();return}Z.markUnsupported()},[e]),e===`desktop-embedded`?(0,G.jsxs)(E,{children:[(0,G.jsxs)(k,{children:[(0,G.jsx)(w,{children:t(`runtimePresenceTitle`)}),(0,G.jsx)(T,{children:t(`runtimePresenceDescription`)})]}),(0,G.jsxs)(C,{className:`space-y-4`,children:[(0,G.jsxs)(`div`,{className:`rounded-xl border border-gray-200 bg-gray-50 p-4`,children:[(0,G.jsx)(`p`,{className:`text-xs font-medium uppercase tracking-[0.08em] text-gray-500`,children:t(`runtimePresenceBehaviorLabel`)}),(0,G.jsx)(`p`,{className:`mt-2 text-sm font-medium text-gray-900`,children:a?.closeToBackground?t(`runtimePresenceBehaviorBackground`):t(`runtimePresenceBehaviorQuit`)})]}),!r||n&&!a?(0,G.jsx)(`p`,{className:`text-sm text-gray-500`,children:t(`runtimePresenceLoading`)}):null,a?(0,G.jsxs)(`div`,{className:`space-y-4`,children:[(0,G.jsxs)(`div`,{className:`flex items-start justify-between gap-4 rounded-xl border border-gray-200 p-4`,children:[(0,G.jsxs)(`div`,{className:`space-y-2`,children:[(0,G.jsx)(O,{htmlFor:`runtime-presence-close-background`,children:t(`runtimePresenceCloseToBackground`)}),(0,G.jsx)(`p`,{className:`text-sm text-gray-500`,children:t(`runtimePresenceCloseToBackgroundHelp`)})]}),(0,G.jsx)(F,{id:`runtime-presence-close-background`,"aria-label":t(`runtimePresenceCloseToBackground`),checked:a.closeToBackground,disabled:i===`saving-preferences`,onCheckedChange:e=>{Z.updatePreferences({closeToBackground:e})}})]}),(0,G.jsxs)(`div`,{className:`flex items-start justify-between gap-4 rounded-xl border border-gray-200 p-4`,children:[(0,G.jsxs)(`div`,{className:`space-y-2`,children:[(0,G.jsx)(O,{htmlFor:`runtime-presence-launch-login`,children:t(`runtimePresenceLaunchAtLogin`)}),(0,G.jsx)(`p`,{className:`text-sm text-gray-500`,children:a.supportsLaunchAtLogin?t(`runtimePresenceLaunchAtLoginHelp`):a.launchAtLoginReason??t(`runtimePresenceLaunchAtLoginUnavailable`)})]}),(0,G.jsx)(F,{id:`runtime-presence-launch-login`,"aria-label":t(`runtimePresenceLaunchAtLogin`),checked:a.launchAtLogin,disabled:!a.supportsLaunchAtLogin||i===`saving-preferences`,onCheckedChange:e=>{Z.updatePreferences({launchAtLogin:e})}})]})]}):null]})]}):e===`managed-local-service`?(0,G.jsxs)(E,{children:[(0,G.jsxs)(k,{children:[(0,G.jsx)(w,{children:t(`runtimePresenceTitle`)}),(0,G.jsx)(T,{children:t(`runtimePresenceDescription`)})]}),(0,G.jsx)(C,{children:(0,G.jsx)(Q,{title:t(`runtimePresenceManagedLocalTitle`),description:t(`runtimePresenceManagedLocalDescription`)})})]}):e===`self-hosted-web`?(0,G.jsxs)(E,{children:[(0,G.jsxs)(k,{children:[(0,G.jsx)(w,{children:t(`runtimePresenceTitle`)}),(0,G.jsx)(T,{children:t(`runtimePresenceDescription`)})]}),(0,G.jsx)(C,{children:(0,G.jsx)(Q,{title:t(`runtimePresenceSelfHostedTitle`),description:t(`runtimePresenceSelfHostedDescription`)})})]}):e===`shared-web`?(0,G.jsxs)(E,{children:[(0,G.jsxs)(k,{children:[(0,G.jsx)(w,{children:t(`runtimePresenceTitle`)}),(0,G.jsx)(T,{children:t(`runtimePresenceDescription`)})]}),(0,G.jsx)(C,{children:(0,G.jsx)(Q,{title:t(`runtimePresenceSharedTitle`),description:t(`runtimePresenceSharedDescription`)})})]}):(0,G.jsxs)(E,{children:[(0,G.jsxs)(k,{children:[(0,G.jsx)(w,{children:t(`runtimePresenceTitle`)}),(0,G.jsx)(T,{children:t(`runtimePresenceDescription`)})]}),(0,G.jsx)(C,{children:(0,G.jsx)(`p`,{className:`text-sm text-gray-500`,children:t(`runtimePresenceLoading`)})})]})}function ae(){return{id:``,default:!1,workspace:``,model:``,runtime:``,contextTokens:void 0,maxToolIterations:void 0}}function oe(){return{agentId:``,match:{channel:``,accountId:``}}}function se(e){return{id:e.id??``,default:!!e.default,displayName:e.displayName??``,description:e.description??``,avatar:e.avatar??``,workspace:e.workspace??``,model:e.model??``,runtime:e.runtime??e.engine??``,contextTokens:e.contextTokens,maxToolIterations:e.maxToolIterations}}function ce(e){return{agentId:e.agentId??``,match:{channel:e.match?.channel??``,accountId:e.match?.accountId??``,peer:e.match?.peer?{kind:e.match.peer.kind,id:e.match.peer.id}:void 0}}}function $(e){let t=e.trim();if(!t)return;let n=Number.parseInt(t,10);return Number.isFinite(n)?n:void 0}function le(e){let t={id:e.id.trim()};e.default&&(t.default=!0),e.displayName?.trim()&&(t.displayName=e.displayName.trim()),e.description?.trim()&&(t.description=e.description.trim()),e.avatar?.trim()&&(t.avatar=e.avatar.trim()),e.workspace?.trim()&&(t.workspace=e.workspace.trim()),e.model?.trim()&&(t.model=e.model.trim());let n=e.runtime?.trim()??e.engine?.trim();return n&&(t.engine=n),typeof e.contextTokens==`number`&&(t.contextTokens=Math.max(1e3,e.contextTokens)),typeof e.maxToolIterations==`number`&&(t.maxToolIterations=e.maxToolIterations),t}var ue=[{value:`main`,label:`main`},{value:`per-peer`,label:`per-peer`},{value:`per-channel-peer`,label:`per-channel-peer`},{value:`per-account-channel-peer`,label:`per-account-channel-peer`}];function de(){return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(N,{title:t(`runtimePageTitle`),description:t(`runtimePageDescription`)}),(0,G.jsx)(re,{}),(0,G.jsx)(ie,{})]})}function fe(){let{data:e,isLoading:n}=ee(),{data:r}=j(),o=S(),[s,c]=(0,L.useState)([]),[l,h]=(0,L.useState)([]),[g,_]=(0,L.useState)(`per-channel-peer`),[y,D]=(0,L.useState)(2e5),[O,N]=(0,L.useState)(`native`);(0,L.useEffect)(()=>{e&&(c((e.agents.list??[]).map(se)),h((e.bindings??[]).map(ce)),_(e.session?.dmScope??`per-channel-peer`),D(e.agents.defaults.contextTokens??2e5),N(e.agents.defaults.engine??`native`))},[e]);let I=r?.uiHints,R=P(`session.dmScope`,I),z=P(`agents.defaults.contextTokens`,I),B=P(`agents.defaults.engine`,I),V=P(`agents.list.*.contextTokens`,I),H=P(`agents.list.*.engine`,I),U=P(`agents.list`,I),W=P(`bindings`,I),K=(0,L.useMemo)(()=>{let e=new Set([`main`]);return s.forEach(t=>{let n=t.id.trim();n&&e.add(n)}),e},[s]),q=(e,t)=>{c(n=>n.map((n,r)=>r===e?{...n,...t}:n))},J=(e,t)=>{h(n=>n.map((n,r)=>r===e?t:n))};return n||!e?(0,G.jsx)(`div`,{className:`p-8 text-gray-400`,children:t(`runtimeLoading`)}):(0,G.jsxs)(M,{className:`space-y-6`,children:[(0,G.jsx)(de,{}),(0,G.jsxs)(E,{children:[(0,G.jsxs)(k,{children:[(0,G.jsx)(w,{children:R?.label??t(`dmScope`)}),(0,G.jsx)(T,{children:R?.help??t(`dmScopeHelp`)})]}),(0,G.jsxs)(C,{className:`space-y-4`,children:[(0,G.jsxs)(`div`,{className:`space-y-2`,children:[(0,G.jsx)(`label`,{className:`text-sm font-medium text-gray-800`,children:z?.label??t(`defaultContextTokens`)}),(0,G.jsx)(A,{type:`number`,min:1e3,step:1e3,value:y,onChange:e=>D(Math.max(1e3,Number.parseInt(e.target.value,10)||1e3))}),(0,G.jsx)(`p`,{className:`text-xs text-gray-500`,children:z?.help??t(`defaultContextTokensHelp`)})]}),(0,G.jsxs)(`div`,{className:`space-y-2`,children:[(0,G.jsx)(`label`,{className:`text-sm font-medium text-gray-800`,children:B?.label??t(`defaultEngine`)}),(0,G.jsx)(A,{value:O,onChange:e=>N(e.target.value),placeholder:t(`defaultEnginePlaceholder`)}),(0,G.jsx)(`p`,{className:`text-xs text-gray-500`,children:B?.help??t(`defaultEngineHelp`)})]}),(0,G.jsxs)(`div`,{className:`space-y-2`,children:[(0,G.jsx)(`label`,{className:`text-sm font-medium text-gray-800`,children:R?.label??t(`dmScope`)}),(0,G.jsxs)(m,{value:g,onValueChange:e=>_(e),children:[(0,G.jsx)(d,{children:(0,G.jsx)(u,{})}),(0,G.jsx)(f,{children:ue.map(e=>(0,G.jsx)(p,{value:e.value,children:e.label},e.value))})]})]})]})]}),(0,G.jsxs)(E,{children:[(0,G.jsxs)(k,{children:[(0,G.jsx)(w,{children:U?.label??t(`agentList`)}),(0,G.jsx)(T,{children:U?.help??t(`agentListHelp`)})]}),(0,G.jsxs)(C,{className:`space-y-3`,children:[s.map((e,n)=>(0,G.jsxs)(`div`,{className:`rounded-xl border border-gray-200 p-3 space-y-3`,children:[(0,G.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 gap-3`,children:[(0,G.jsx)(A,{value:e.id,onChange:e=>q(n,{id:e.target.value}),placeholder:t(`agentIdPlaceholder`)}),(0,G.jsx)(A,{value:e.workspace??``,onChange:e=>q(n,{workspace:e.target.value}),placeholder:t(`workspaceOverridePlaceholder`)}),(0,G.jsx)(A,{value:e.model??``,onChange:e=>q(n,{model:e.target.value}),placeholder:t(`modelOverridePlaceholder`)}),(0,G.jsx)(A,{value:e.runtime??e.engine??``,onChange:e=>q(n,{runtime:e.target.value}),placeholder:H?.label??t(`engineOverridePlaceholder`)}),(0,G.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 gap-2`,children:[(0,G.jsx)(A,{type:`number`,min:1e3,step:1e3,value:e.contextTokens??``,onChange:e=>q(n,{contextTokens:$(e.target.value)}),placeholder:V?.label??t(`contextTokensPlaceholder`)}),(0,G.jsx)(A,{type:`number`,min:1,value:e.maxToolIterations??``,onChange:e=>q(n,{maxToolIterations:$(e.target.value)}),placeholder:t(`maxToolsPlaceholder`)})]})]}),(0,G.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-gray-600`,children:[(0,G.jsx)(F,{checked:!!e.default,onCheckedChange:e=>{if(!e){q(n,{default:!1});return}c(e=>e.map((e,t)=>({...e,default:t===n})))}}),(0,G.jsx)(`span`,{children:t(`defaultAgent`)})]}),(0,G.jsxs)(a,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>c(e=>e.filter((e,t)=>t!==n)),children:[(0,G.jsx)(x,{className:`h-4 w-4 mr-1`}),t(`remove`)]})]})]},`${n}-${e.id}`)),(0,G.jsxs)(a,{type:`button`,variant:`outline`,onClick:()=>c(e=>[...e,ae()]),children:[(0,G.jsx)(v,{className:`h-4 w-4 mr-2`}),t(`addAgent`)]})]})]}),(0,G.jsxs)(E,{children:[(0,G.jsxs)(k,{children:[(0,G.jsx)(w,{children:W?.label??t(`bindings`)}),(0,G.jsx)(T,{children:W?.help??t(`bindingsHelp`)})]}),(0,G.jsxs)(C,{className:`space-y-3`,children:[l.map((e,n)=>{let r=e.match.peer?.kind??``;return(0,G.jsxs)(`div`,{className:`rounded-xl border border-gray-200 p-3 space-y-3`,children:[(0,G.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3`,children:[(0,G.jsx)(A,{value:e.agentId,onChange:t=>J(n,{...e,agentId:t.target.value}),placeholder:t(`targetAgentIdPlaceholder`)}),(0,G.jsx)(A,{value:e.match.channel,onChange:t=>J(n,{...e,match:{...e.match,channel:t.target.value}}),placeholder:t(`channelPlaceholder`)}),(0,G.jsx)(A,{value:e.match.accountId??``,onChange:t=>J(n,{...e,match:{...e.match,accountId:t.target.value}}),placeholder:t(`accountIdOptionalPlaceholder`)}),(0,G.jsxs)(m,{value:r||`__none__`,onValueChange:t=>{let r=t===`__none__`?``:t;if(!r){J(n,{...e,match:{...e.match,peer:void 0}});return}J(n,{...e,match:{...e.match,peer:{kind:r,id:e.match.peer?.id??``}}})},children:[(0,G.jsx)(d,{children:(0,G.jsx)(u,{})}),(0,G.jsxs)(f,{children:[(0,G.jsx)(p,{value:`__none__`,children:t(`peerKindOptional`)}),(0,G.jsx)(p,{value:`direct`,children:`direct`}),(0,G.jsx)(p,{value:`group`,children:`group`}),(0,G.jsx)(p,{value:`channel`,children:`channel`})]})]}),(0,G.jsx)(A,{value:e.match.peer?.id??``,onChange:t=>J(n,{...e,match:{...e.match,peer:r?{kind:r,id:t.target.value}:void 0}}),placeholder:t(`peerIdPlaceholder`)})]}),(0,G.jsx)(`div`,{className:`flex justify-end`,children:(0,G.jsxs)(a,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>h(e=>e.filter((e,t)=>t!==n)),children:[(0,G.jsx)(x,{className:`h-4 w-4 mr-1`}),t(`remove`)]})})]},`${n}-${e.agentId}`)}),(0,G.jsxs)(a,{type:`button`,variant:`outline`,onClick:()=>h(e=>[...e,oe()]),children:[(0,G.jsx)(v,{className:`h-4 w-4 mr-2`}),t(`addBinding`)]})]})]}),(0,G.jsx)(`div`,{className:`flex justify-end`,children:(0,G.jsxs)(a,{type:`button`,onClick:()=>{try{let e=s.map((e,n)=>{if(!e.id.trim())throw Error(t(`agentIdRequiredError`).replace(`{index}`,String(n)));return le(e)}),n=e.map(e=>e.id).filter((e,t,n)=>n.indexOf(e)!==t);if(n.length>0){i.error(`${t(`duplicateAgentId`)}: ${n[0]}`);return}let r=l.map((e,n)=>{let r=e.agentId.trim(),i=e.match.channel.trim(),a=e.match.accountId?.trim()??``,o=e.match.peer?.kind,s=e.match.peer?.id?.trim()??``;if(!r)throw Error(t(`bindingAgentIdRequired`).replace(`{index}`,String(n)));if(!K.has(r))throw Error(`${t(`bindingAgentIdNotFound`).replace(`{index}`,String(n))}: ${r}`);if(!i)throw Error(t(`bindingChannelRequired`).replace(`{index}`,String(n)));let c={agentId:r,match:{channel:i}};if(a&&(c.match.accountId=a),o){if(!s)throw Error(t(`bindingPeerIdRequired`).replace(`{index}`,String(n)));c.match.peer={kind:o,id:s}}return c});o.mutate({data:{agents:{defaults:{contextTokens:Math.max(1e3,y),engine:O.trim()||`native`},list:e},bindings:r,session:{dmScope:g}}})}catch(e){let t=e instanceof Error?e.message:String(e);i.error(t)}},disabled:o.isPending,children:[(0,G.jsx)(b,{className:`h-4 w-4 mr-2`}),o.isPending?t(`saving`):t(`saveRuntimeSettings`)]})})]})}export{fe as RuntimeConfig};