nextclaw 0.49.1 → 0.50.0

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 (140) hide show
  1. package/README.md +3 -1
  2. package/dist/cli/app/index.js +2 -2
  3. package/dist/cli/launcher/index.js +1 -1
  4. package/dist/{distribution-BAU3XUQJ.js → distribution-DzRLAMTC.js} +1 -1
  5. package/dist/{distribution-CND3AWXk.js → distribution-kH-YiPGh.js} +1 -1
  6. package/dist/{distribution-CND3AWXk.js.map → distribution-kH-YiPGh.js.map} +1 -1
  7. package/dist/feedback-maintenance-client.service-DIMfY_yr.js +85 -0
  8. package/dist/feedback-maintenance-client.service-DIMfY_yr.js.map +1 -0
  9. package/dist/index.d.ts +36 -1
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +2 -1
  12. package/dist/{nextclaw-cli-app-CjtgVEdo.js → nextclaw-cli-app-Mz2hYz_-.js} +253 -5
  13. package/dist/nextclaw-cli-app-Mz2hYz_-.js.map +1 -0
  14. package/package.json +14 -14
  15. package/resources/USAGE.md +22 -0
  16. package/resources/skills/feedback-maintainer/SKILL.md +21 -0
  17. package/ui-dist/.vite/manifest.json +190 -190
  18. package/ui-dist/.vite/manifest.json.gz +0 -0
  19. package/ui-dist/assets/{account-panel-QhOMbAQP.js → account-panel-BXTCFv7d.js} +1 -1
  20. package/ui-dist/assets/account-panel-BXTCFv7d.js.gz +0 -0
  21. package/ui-dist/assets/{api-BWFOIoUm.js → api-DqzQ-_3w.js} +1 -1
  22. package/ui-dist/assets/api-DqzQ-_3w.js.gz +0 -0
  23. package/ui-dist/assets/{app-data-BnrEdmg2.js → app-data-C54N2p8b.js} +1 -1
  24. package/ui-dist/assets/app-data-C54N2p8b.js.gz +0 -0
  25. package/ui-dist/assets/app-presenter-provider-V0xnU_Wb.js +115 -0
  26. package/ui-dist/assets/app-presenter-provider-V0xnU_Wb.js.gz +0 -0
  27. package/ui-dist/assets/{appearance-settings-page-C5z5sOkC.js → appearance-settings-page-83T2AtVm.js} +1 -1
  28. package/ui-dist/assets/appearance-settings-page-83T2AtVm.js.gz +0 -0
  29. package/ui-dist/assets/{channels-list-page-CzXYZZtK.js → channels-list-page-Bv7CVSqV.js} +1 -1
  30. package/ui-dist/assets/channels-list-page-Bv7CVSqV.js.gz +0 -0
  31. package/ui-dist/assets/{config-split-page-CxLWGwdt.js → config-split-page-DqAXKLmG.js} +1 -1
  32. package/ui-dist/assets/config-split-page-DqAXKLmG.js.gz +0 -0
  33. package/ui-dist/assets/{confirm-dialog-BWS7gA_z.js → confirm-dialog-BTKCWMn6.js} +1 -1
  34. package/ui-dist/assets/confirm-dialog-BTKCWMn6.js.gz +0 -0
  35. package/ui-dist/assets/{desktop-capabilities-page-BJNGkq4q.js → desktop-capabilities-page-zLzCSB7A.js} +1 -1
  36. package/ui-dist/assets/desktop-capabilities-page-zLzCSB7A.js.gz +0 -0
  37. package/ui-dist/assets/{desktop-update-config-7tBum3MA.js → desktop-update-config-PmofcFf6.js} +1 -1
  38. package/ui-dist/assets/desktop-update-config-PmofcFf6.js.gz +0 -0
  39. package/ui-dist/assets/{doc-browser-BNiqa-zm.js → doc-browser-BJrre2S_.js} +1 -1
  40. package/ui-dist/assets/doc-browser-BJrre2S_.js.gz +0 -0
  41. package/ui-dist/assets/doc-browser-BPqA-zQx.js +1 -0
  42. package/ui-dist/assets/{doc-browser-context-Dp0dEMyT.js → doc-browser-context-TILuCY5c.js} +1 -1
  43. package/ui-dist/assets/doc-browser-context-TILuCY5c.js.gz +0 -0
  44. package/ui-dist/assets/{extensions-WWEYpaUh.js → extensions-CVUFK6Jj.js} +1 -1
  45. package/ui-dist/assets/extensions-CVUFK6Jj.js.gz +0 -0
  46. package/ui-dist/assets/{i18n-ClHx6jwj.js → i18n-20rSH40D.js} +2 -2
  47. package/ui-dist/assets/i18n-20rSH40D.js.gz +0 -0
  48. package/ui-dist/assets/{i18n-provider-C1NxogO4.js → i18n-provider-BPRq6S7O.js} +1 -1
  49. package/ui-dist/assets/{keyboard-shortcuts-settings-page-CS9BFOBW.js → keyboard-shortcuts-settings-page-CkQbSKwI.js} +1 -1
  50. package/ui-dist/assets/login-page-Dlyvp-81.js +1 -0
  51. package/ui-dist/assets/{login-page-CL0SrBCf.js → login-page-f8qQ4xKY.js} +1 -1
  52. package/ui-dist/assets/login-page-f8qQ4xKY.js.gz +0 -0
  53. package/ui-dist/assets/main-D2dWy8fM.css +1 -0
  54. package/ui-dist/assets/main-D2dWy8fM.css.gz +0 -0
  55. package/ui-dist/assets/main-i18n-catalog.config-DZ-5ollN.js +1 -0
  56. package/ui-dist/assets/main-i18n-catalog.config-DZ-5ollN.js.gz +0 -0
  57. package/ui-dist/assets/{main-CvVBCOlN.js → main-ky5Efhq1.js} +2 -2
  58. package/ui-dist/assets/main-ky5Efhq1.js.gz +0 -0
  59. package/ui-dist/assets/{mcp-marketplace-page-D75hPmzO.js → mcp-marketplace-page-FfIfEo6w.js} +1 -1
  60. package/ui-dist/assets/mcp-marketplace-page-FfIfEo6w.js.gz +0 -0
  61. package/ui-dist/assets/mcp-marketplace-page-sH7VptN_.js +1 -0
  62. package/ui-dist/assets/{model-config-page-DFfcV9lu.js → model-config-page-Bcm6-pCX.js} +1 -1
  63. package/ui-dist/assets/model-config-page-Bcm6-pCX.js.gz +0 -0
  64. package/ui-dist/assets/panel-app-i18n-catalog.config-p3qAY_Eq.js +1 -0
  65. package/ui-dist/assets/{panelStandalone-D2CqTyi_.js → panelStandalone-By-6dDXS.js} +2 -2
  66. package/ui-dist/assets/panelStandalone-By-6dDXS.js.gz +0 -0
  67. package/ui-dist/assets/{privacy-settings-page-CE-xF9bo.js → privacy-settings-page-B1sHLAc1.js} +1 -1
  68. package/ui-dist/assets/privacy-settings-page-B1sHLAc1.js.gz +0 -0
  69. package/ui-dist/assets/{projects-BF0wpY4X.js → projects-O3GTERwP.js} +1 -1
  70. package/ui-dist/assets/projects-O3GTERwP.js.gz +0 -0
  71. package/ui-dist/assets/{provider-scoped-model-input-BvZitHkT.js → provider-scoped-model-input-BQsugx1v.js} +1 -1
  72. package/ui-dist/assets/provider-scoped-model-input-BQsugx1v.js.gz +0 -0
  73. package/ui-dist/assets/{providers-config-page-cDeyluVG.js → providers-config-page-BDEdHJbw.js} +1 -1
  74. package/ui-dist/assets/providers-config-page-BDEdHJbw.js.gz +0 -0
  75. package/ui-dist/assets/{pwa-dXn0s_lD.js → pwa-D_nZUwG0.js} +1 -1
  76. package/ui-dist/assets/pwa-D_nZUwG0.js.gz +0 -0
  77. package/ui-dist/assets/remote-CFWp4wyH.js +1 -0
  78. package/ui-dist/assets/{runtime-config-page-DNo4dzS1.js → runtime-config-page-BHTKwgDi.js} +1 -1
  79. package/ui-dist/assets/runtime-config-page-BHTKwgDi.js.gz +0 -0
  80. package/ui-dist/assets/{search-config-page-CA0HxVy0.js → search-config-page-DWKlMHgH.js} +1 -1
  81. package/ui-dist/assets/search-config-page-DWKlMHgH.js.gz +0 -0
  82. package/ui-dist/assets/{secrets-config-page-iT1wamQp.js → secrets-config-page-DiQL088Y.js} +1 -1
  83. package/ui-dist/assets/secrets-config-page-DiQL088Y.js.gz +0 -0
  84. package/ui-dist/assets/security-config-DmTDKKY4.js +1 -0
  85. package/ui-dist/assets/{service-apps-panel-CU0tFrqT.js → service-apps-panel-CEnyYsQp.js} +1 -1
  86. package/ui-dist/assets/service-apps-panel-CEnyYsQp.js.gz +0 -0
  87. package/ui-dist/assets/{tag-chip-CY0Hqk_l.js → tag-chip-B1AYPOKL.js} +1 -1
  88. package/ui-dist/assets/{theme-provider-BvpXGXWH.js → theme-provider-DzvAi3pe.js} +1 -1
  89. package/ui-dist/assets/theme-provider-DzvAi3pe.js.gz +0 -0
  90. package/ui-dist/assets/{use-config-C8ZkQiTc.js → use-config-BEdbtpD4.js} +1 -1
  91. package/ui-dist/assets/use-config-BEdbtpD4.js.gz +0 -0
  92. package/ui-dist/assets/{use-desktop-capabilities-DR9snbeo.js → use-desktop-capabilities-BkuRd2cY.js} +1 -1
  93. package/ui-dist/assets/use-desktop-capabilities-BkuRd2cY.js.gz +0 -0
  94. package/ui-dist/index.html +18 -18
  95. package/ui-dist/index.html.gz +0 -0
  96. package/ui-dist/panel-standalone.html +5 -5
  97. package/ui-dist/panel-standalone.html.gz +0 -0
  98. package/dist/nextclaw-cli-app-CjtgVEdo.js.map +0 -1
  99. package/ui-dist/assets/account-panel-QhOMbAQP.js.gz +0 -0
  100. package/ui-dist/assets/api-BWFOIoUm.js.gz +0 -0
  101. package/ui-dist/assets/app-data-BnrEdmg2.js.gz +0 -0
  102. package/ui-dist/assets/app-presenter-provider-CDRBc_lQ.js +0 -115
  103. package/ui-dist/assets/app-presenter-provider-CDRBc_lQ.js.gz +0 -0
  104. package/ui-dist/assets/appearance-settings-page-C5z5sOkC.js.gz +0 -0
  105. package/ui-dist/assets/channels-list-page-CzXYZZtK.js.gz +0 -0
  106. package/ui-dist/assets/config-split-page-CxLWGwdt.js.gz +0 -0
  107. package/ui-dist/assets/confirm-dialog-BWS7gA_z.js.gz +0 -0
  108. package/ui-dist/assets/desktop-capabilities-page-BJNGkq4q.js.gz +0 -0
  109. package/ui-dist/assets/desktop-update-config-7tBum3MA.js.gz +0 -0
  110. package/ui-dist/assets/doc-browser-BNiqa-zm.js.gz +0 -0
  111. package/ui-dist/assets/doc-browser-DZDqghNc.js +0 -1
  112. package/ui-dist/assets/doc-browser-context-Dp0dEMyT.js.gz +0 -0
  113. package/ui-dist/assets/extensions-WWEYpaUh.js.gz +0 -0
  114. package/ui-dist/assets/i18n-ClHx6jwj.js.gz +0 -0
  115. package/ui-dist/assets/login-page-CL0SrBCf.js.gz +0 -0
  116. package/ui-dist/assets/login-page-Dq5nPUCU.js +0 -1
  117. package/ui-dist/assets/main-CLwCjK9U.css +0 -1
  118. package/ui-dist/assets/main-CLwCjK9U.css.gz +0 -0
  119. package/ui-dist/assets/main-CvVBCOlN.js.gz +0 -0
  120. package/ui-dist/assets/main-i18n-catalog.config-D4qFo4OB.js +0 -1
  121. package/ui-dist/assets/main-i18n-catalog.config-D4qFo4OB.js.gz +0 -0
  122. package/ui-dist/assets/mcp-marketplace-page-CATnpZ2Q.js +0 -1
  123. package/ui-dist/assets/mcp-marketplace-page-D75hPmzO.js.gz +0 -0
  124. package/ui-dist/assets/model-config-page-DFfcV9lu.js.gz +0 -0
  125. package/ui-dist/assets/panel-app-i18n-catalog.config-oUwmxoE7.js +0 -1
  126. package/ui-dist/assets/panelStandalone-D2CqTyi_.js.gz +0 -0
  127. package/ui-dist/assets/privacy-settings-page-CE-xF9bo.js.gz +0 -0
  128. package/ui-dist/assets/projects-BF0wpY4X.js.gz +0 -0
  129. package/ui-dist/assets/provider-scoped-model-input-BvZitHkT.js.gz +0 -0
  130. package/ui-dist/assets/providers-config-page-cDeyluVG.js.gz +0 -0
  131. package/ui-dist/assets/pwa-dXn0s_lD.js.gz +0 -0
  132. package/ui-dist/assets/remote-CV5wQVVj.js +0 -1
  133. package/ui-dist/assets/runtime-config-page-DNo4dzS1.js.gz +0 -0
  134. package/ui-dist/assets/search-config-page-CA0HxVy0.js.gz +0 -0
  135. package/ui-dist/assets/secrets-config-page-iT1wamQp.js.gz +0 -0
  136. package/ui-dist/assets/security-config-B38PLI3M.js +0 -1
  137. package/ui-dist/assets/service-apps-panel-CU0tFrqT.js.gz +0 -0
  138. package/ui-dist/assets/theme-provider-BvpXGXWH.js.gz +0 -0
  139. package/ui-dist/assets/use-config-C8ZkQiTc.js.gz +0 -0
  140. package/ui-dist/assets/use-desktop-capabilities-DR9snbeo.js.gz +0 -0
@@ -1 +1 @@
1
- import{i as e}from"./chunk-DF37yw5_.js";import{A as t,M as n,i as r}from"./utils-CBZPzC_b.js";import{Lt as i,Yt as a,bn as o,hn as s,jn as c,vn as l,yn as u}from"./api-BWFOIoUm.js";import{s as d}from"./i18n-ClHx6jwj.js";import{t as f}from"./createLucideIcon-BNKf0_kc.js";import{t as ee}from"./boxes-D6uPnkGo.js";import{a as p,i as te,n as ne,o as re,r as ie,t as m}from"./dialog-Xe73hpQz.js";import{t as h}from"./use-panel-app-scroll-restoration-ZnicIfo3.js";var g=f(`RotateCcw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]),_=f(`ShieldAlert`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`M12 8v4`,key:`1got3b`}],[`path`,{d:`M12 16h.01`,key:`1drbdi`}]]),v=[`panel-apps`],y=[`panel-app`];function b(e,t){return e.id===t||e.appId===t}function x(e,t,n){return e&&{...e,entries:e.entries.map(e=>b(e,t)?n(e):e)}}function S(e,t){return x(e,t.id,()=>t)}function C(e,t){let n=e?.entries.reduce((e,t)=>Math.max(e,t.mainSidebarOrder??-1),-1)??-1;return x(e,t.id,e=>({...e,...typeof t.preferences.favorite==`boolean`?{favorite:t.preferences.favorite}:{},...typeof t.preferences.mainSidebar==`boolean`?t.preferences.mainSidebar?{mainSidebar:!0,mainSidebarOrder:e.mainSidebar?e.mainSidebarOrder:n+1}:{mainSidebar:!1,mainSidebarOrder:void 0}:{}}))}function ae(e={}){return o({queryKey:v,queryFn:()=>i.panelApps.listPanelApps(),enabled:e.enabled??!0,staleTime:0})}function w(e,t={}){return o({queryKey:[...y,e],queryFn:()=>i.panelApps.getPanelApp(e),enabled:!!e&&(t.enabled??!0),staleTime:5e3})}function T(){let e=c();return u({mutationFn:({id:e,preferences:t})=>i.panelApps.updatePanelAppPreferences(e,t),onMutate:async t=>{await e.cancelQueries({queryKey:v});let n=e.getQueryData(v)?.entries.find(e=>b(e,t.id));return e.setQueryData(v,e=>C(e,t)),{previousEntry:n}},onSuccess:t=>{e.setQueryData(v,e=>S(e,t)),e.setQueryData([...y,t.appId],t)},onError:(t,n,r)=>{let i=r?.previousEntry;i&&e.setQueryData(v,e=>x(e,n.id,()=>i));let a=t instanceof Error?t.message:String(t);l.error(`${d(`panelAppsPreferenceUpdateFailed`)}: ${a}`)}})}function E(){let e=c();return u({mutationFn:e=>i.panelApps.recordPanelAppOpened(e),onSuccess:t=>{e.setQueryData(v,e=>S(e,t)),e.setQueryData([...y,t.appId],t)}})}function D(){let e=c();return u({mutationFn:e=>i.panelApps.grantClient(e),onSuccess:()=>{e.invalidateQueries({queryKey:v}),e.invalidateQueries({queryKey:y})}})}function O(){let e=c();return u({mutationFn:e=>i.panelApps.deletePanelApp(e),onSuccess:()=>{e.invalidateQueries({queryKey:v}),e.invalidateQueries({queryKey:y})}})}var k=class{constructor(e){this.authorizationManager=e,this.handleIframeMessage=({event:e,iframe:t})=>{this.isBridgeRequest(e.data)&&(!t?.contentWindow||e.source!==t.contentWindow||this.handleBridgeRequest({event:e,iframe:t},e.data))},this.handleBridgeRequest=async(e,t)=>{try{let n=this.getBridgeContext(t),r=await this.dispatchRequest(n,t);this.postResponse(e,{type:`nextclaw:panel-app-service-actions:response`,requestId:t.requestId,ok:!0,data:r})}catch(n){this.postResponse(e,{type:`nextclaw:panel-app-service-actions:response`,requestId:t.requestId,ok:!1,error:this.toBridgeError(n)})}},this.dispatchRequest=async(e,t)=>{switch(t.method){case`list`:return await i.serviceApps.listServiceActions({bridgeSessionToken:e.token});case`requestGrant`:return await this.confirmAndGrant(e,this.requireActionId(t));case`revokeGrant`:return await i.serviceApps.revokeServiceAction(this.requireActionId(t),{bridgeSessionToken:e.token});case`invoke`:return await this.invokeWithAuthorization(e,t);case`agent.send`:return await this.sendAgentMessageWithAuthorization(e,t);case`agent.generateObject`:return await this.generateAgentObjectWithAuthorization(e,t);case`verification.list`:return await i.serviceApps.listVerificationRecords({acceptanceId:t.payload?.acceptanceId,appId:t.payload?.appId,limit:t.payload?.limit,bridgeSessionToken:e.token});case`acceptance.status`:return await i.serviceApps.getPortableRuntimeAcceptanceStatus({appId:t.payload?.appId,locale:t.payload?.locale,bridgeSessionToken:e.token});case`acceptance.export`:return await i.serviceApps.exportPortableRuntimeAcceptance({appId:t.payload?.appId,locale:t.payload?.locale,bridgeSessionToken:e.token});default:throw Error(`Unsupported panel bridge method: ${String(t.method)}`)}},this.invokeWithAuthorization=async(e,t)=>{let n=this.requireActionId(t);try{return await i.serviceApps.invokeServiceAction(n,this.readOptionalRecord(t.payload?.input),{bridgeSessionToken:e.token})}catch(r){if(!(r instanceof s)||r.code!==`AUTHORIZATION_REQUIRED`)throw r;return await this.confirmAndGrant(e,n,this.readOptionalRecord(t.payload?.input)),await i.serviceApps.invokeServiceAction(n,this.readOptionalRecord(t.payload?.input),{bridgeSessionToken:e.token})}},this.sendAgentMessageWithAuthorization=async(e,t)=>{try{return await i.panelApps.sendAgentMessage(this.readAgentSendRequest(t),{bridgeSessionToken:e.token})}catch(n){if(!(n instanceof s)||n.code!==`AUTHORIZATION_REQUIRED`)throw n;return await this.confirmAndGrantAgentCapability(e,`agent:send`),await i.panelApps.sendAgentMessage(this.readAgentSendRequest(t),{bridgeSessionToken:e.token})}},this.generateAgentObjectWithAuthorization=async(e,t)=>{try{return await i.panelApps.generateAgentObject(this.readGenerateObjectRequest(t),{bridgeSessionToken:e.token})}catch(n){if(!(n instanceof s)||n.code!==`AUTHORIZATION_REQUIRED`)throw n;return await this.confirmAndGrantAgentCapability(e,`agent:generateObject`),await i.panelApps.generateAgentObject(this.readGenerateObjectRequest(t),{bridgeSessionToken:e.token})}},this.confirmAndGrantAgentCapability=async(e,t)=>{if(!await this.authorizationManager.requestAuthorization({panelAppId:e.appId,actions:[{actionId:t,actionTitle:t===`agent:send`?`Send agent message`:`Generate object`,actionDescription:t===`agent:send`?`Send a message to a NextClaw Agent session.`:`Send context to a NextClaw Agent session and receive a structured object.`,risk:`write`}]}))throw new s({code:`AUTHORIZATION_REJECTED`,message:`Permission rejected for ${t}.`});return await i.panelApps.grantAgentCapability(t,{bridgeSessionToken:e.token})},this.confirmAndGrant=async(e,t,n)=>{let r=await this.listGrantCandidateActions(e,t);if(!await this.authorizationManager.requestAuthorization({panelAppId:e.appId,actions:r.map(e=>({actionId:e.id,actionTitle:e.title,actionDescription:e.description,risk:e.risk})),inputPreview:this.createInputPreview(n)}))throw new s({code:`AUTHORIZATION_REJECTED`,message:`Permission rejected for ${t}.`});let a=await i.serviceApps.grantServiceActions(r.map(e=>e.id),{bridgeSessionToken:e.token}),o=a.grants.find(e=>e.actionId===t)??a.grants[0];if(!o)throw Error(`No permission grant returned for ${t}.`);return o},this.listGrantCandidateActions=async(e,t)=>{let n=await i.serviceApps.listServiceActions({bridgeSessionToken:e.token}),r=n.actions.find(e=>e.id===t);if(r&&r.grantState!==`not-granted`)return[r];let a=n.actions.filter(e=>e.grantState===`not-granted`),o=[...a.filter(e=>e.id===t),...a.filter(e=>e.id!==t)];return o.length>0?o:[{appId:r?.appId??t.split(`.`)[0]??t,description:r?.description,id:t,name:r?.name??t,risk:r?.risk??`dangerous`,title:r?.title}]},this.createInputPreview=e=>{if(!(!e||Object.keys(e).length===0))try{let t=JSON.stringify(e,null,2);return t.length>500?`${t.slice(0,500)}...`:t}catch{return`[unserializable input]`}},this.getBridgeContext=e=>({appId:e.appId,token:e.runtimeToken}),this.requireActionId=e=>{let t=e.payload?.actionId?.trim();if(!t)throw Error(`Panel bridge actionId is required.`);return t},this.readOptionalRecord=e=>{if(e!==void 0)return this.requireRecord(e,`input`)},this.readAgentSendRequest=e=>({payload:this.requireRecord(e.payload?.request,`agent.send request`)}),this.readGenerateObjectRequest=e=>({input:this.requireRecord(e.payload?.input,`generateObject input`)}),this.requireRecord=(e,t)=>{if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`${t} is required.`);return e},this.postResponse=(e,t)=>{e.iframe?.contentWindow?.postMessage(t,`*`)},this.toBridgeError=e=>e instanceof s?{code:e.code,message:e.message,details:e.details}:{message:e instanceof Error?e.message:String(e)},this.isBridgeRequest=e=>{if(!e||typeof e!=`object`)return!1;let t=e;return t.type===`nextclaw:panel-app-service-actions:request`&&typeof t.requestId==`string`&&typeof t.runtimeToken==`string`&&typeof t.appId==`string`&&(t.method===`invoke`||t.method===`agent.send`||t.method===`agent.generateObject`||t.method===`acceptance.export`||t.method===`acceptance.status`||t.method===`list`||t.method===`requestGrant`||t.method===`revokeGrant`||t.method===`verification.list`)}}};function oe(){return`service-action-auth-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}var A=r((e,t)=>({pending:null,requestAuthorization:async n=>await new Promise(r=>{t().pending?.resolve(!1),e({pending:{id:oe(),...n,resolve:r}})}),resolveAuthorization:n=>{let{pending:r}=t();r&&(r.resolve(n),e({pending:null}))}})),se=class{constructor(){this.requestAuthorization=async e=>await A.getState().requestAuthorization(e)}},j=class{constructor(){this.serviceActionAuthorizationManager=new se,this.panelAppBridgeManager=new k(this.serviceActionAuthorizationManager)}},M=e(n(),1),N=t(),P=globalThis,F=P.__NEXTCLAW_PANEL_APP_HOST_CONTEXT__??(0,M.createContext)(null);P.__NEXTCLAW_PANEL_APP_HOST_CONTEXT__=F;function I({children:e,presenter:t}){let n=(0,M.useMemo)(()=>t??new j,[t]);return(0,N.jsx)(F.Provider,{value:n,children:e})}function L(){let e=(0,M.useContext)(F);if(!e)throw Error(`usePanelAppHostPresenter must be used inside PanelAppHostProvider`);return e}function R(){let e=L(),{isPending:t,mutateAsync:n}=D(),r=(0,M.useRef)(new Map);return{ensurePanelAppClientGrant:(0,M.useCallback)(async t=>{if(!t.clientDeclared||t.clientGranted)return!0;let i=r.current.get(t.appId);if(i)return await i;let a=(async()=>await e.serviceActionAuthorizationManager.requestAuthorization({panelAppId:t.appId,actions:[{actionId:`nextclaw.client`,actionTitle:d(`panelAppsClientGrantTitle`),actionDescription:d(`panelAppsClientGrantDescription`),risk:`dangerous`}]})?(await n(t.appId),!0):!1)();r.current.set(t.appId,a);try{return await a}finally{r.current.delete(t.appId)}},[n,e]),isPending:t}}function z(e){let t=c(),n=(0,M.useId)(),{ensurePanelAppClientGrant:r}=R(),a=!!(e?.clientDeclared&&!e.clientGranted),s=o({queryKey:[`panel-app-client-grant`,e?.appId??`none`,e?.clientGranted??!1],queryFn:async()=>await r(e),enabled:a,gcTime:0,retry:!1,staleTime:1/0}),l=e?a?s.isError?`error`:s.isPending?`checking`:s.data?`allowed`:`denied`:`allowed`:`idle`;return o({queryKey:[`panel-app-open`,n,e?.appId??`none`],queryFn:async()=>{let n=await i.panelApps.recordPanelAppOpened(e.id);return t.setQueryData(v,e=>S(e,n)),t.setQueryData([...y,n.appId],n),n},enabled:!!(e&&l===`allowed`),retry:!1,staleTime:1/0}),{retryClientGrant:s.refetch,state:l}}var B=`allow-scripts allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-downloads allow-pointer-lock allow-presentation`;function V(e){e?.focus({preventScroll:!0}),e?.contentWindow?.focus()}function H({appId:e,restorationScope:t,unavailableAction:n}){let r=L(),i=w(e),a=(0,M.useRef)(null),o=(0,M.useMemo)(()=>i.data,[i.data]),s=z(o),c=h({currentUrl:o?.contentPath??null,iframeRef:a,isEnabled:!!o,restorationKey:o?`panel-app:${t}:${o.appId}`:null});return(0,M.useEffect)(()=>{let e=e=>{r.panelAppBridgeManager.handleIframeMessage({event:e,iframe:a.current})};return window.addEventListener(`message`,e),()=>window.removeEventListener(`message`,e)},[r]),i.isLoading?(0,N.jsx)(U,{message:d(`panelAppsLoading`)}):i.isError?(0,N.jsx)(U,{message:i.error instanceof Error?i.error.message:d(`panelAppsLoadFailed`),actionLabel:d(`panelAppsTryAgain`),onAction:()=>void i.refetch()}):o?s.state===`checking`||s.state===`idle`?(0,N.jsx)(U,{message:d(`panelAppsCheckingPermission`)}):s.state===`denied`||s.state===`error`?(0,N.jsx)(U,{message:s.state===`denied`?d(`panelAppsPermissionDenied`):d(`panelAppsPermissionFailed`),actionLabel:d(`panelAppsTryAgain`),onAction:()=>void s.retryClientGrant()}):(0,N.jsx)(`div`,{className:`h-full min-h-0 bg-background`,children:(0,N.jsx)(`iframe`,{ref:a,src:o.contentPath,title:o.title,sandbox:B,className:`block h-full w-full border-0 bg-background`,onLoad:c,onPointerOver:e=>V(e.currentTarget)},o.appId)}):(0,N.jsx)(U,{message:d(`panelAppsMainUnavailable`),actionLabel:n?.label,onAction:n?.onAction})}function U({actionLabel:e,message:t,onAction:n}){return(0,N.jsx)(`div`,{className:`flex h-full min-h-0 items-center justify-center bg-background px-6 text-center`,children:(0,N.jsxs)(`div`,{className:`max-w-sm`,children:[(0,N.jsx)(`div`,{className:`mx-auto flex h-10 w-10 items-center justify-center rounded-lg bg-muted text-muted-foreground`,children:n?(0,N.jsx)(g,{className:`h-5 w-5`}):(0,N.jsx)(ee,{className:`h-5 w-5`})}),(0,N.jsx)(`p`,{className:`mt-3 text-sm leading-6 text-muted-foreground`,children:t}),e&&n?(0,N.jsx)(`button`,{type:`button`,className:`mt-4 rounded-md border border-border px-3 py-1.5 text-xs font-medium text-foreground transition-colors hover:bg-[var(--interaction-hover)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border`,onClick:n,children:e}):null]})})}function W({appId:e}){let t=w(e),n=(0,M.useMemo)(()=>t.data,[t.data]);return(0,M.useEffect)(()=>{let e=document.title;return document.title=`${n?.title??d(`panelAppsTitle`)} · NextClaw`,()=>{document.title=e}},[n?.title]),(0,N.jsx)(`main`,{className:`h-dvh min-h-0 w-full overflow-hidden bg-background`,children:(0,N.jsx)(H,{appId:e,restorationScope:`standalone`})})}function G(){let e=A(e=>e.pending),t=A(e=>e.resolveAuthorization);return(0,N.jsx)(m,{open:!!e,onOpenChange:e=>{e||t(!1)},children:(0,N.jsxs)(ne,{className:`[&>:last-child]:hidden`,children:[(0,N.jsxs)(p,{children:[(0,N.jsxs)(re,{className:`flex items-center gap-2`,children:[(0,N.jsx)(_,{className:`h-4 w-4 text-amber-600`}),d(`serviceActionAuthorizationTitle`)]}),(0,N.jsx)(ie,{children:d(`serviceActionAuthorizationDescription`)})]}),e?(0,N.jsxs)(`div`,{className:`space-y-3 rounded-md border border-border bg-muted/60 p-3 text-sm`,children:[(0,N.jsx)(K,{label:d(`serviceActionAuthorizationSource`),value:e.panelAppId}),(0,N.jsxs)(`div`,{className:`space-y-2`,children:[(0,N.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground`,children:d(`serviceActionAuthorizationActions`)}),(0,N.jsx)(`div`,{className:`max-h-64 space-y-2 overflow-auto`,children:e.actions.map(e=>(0,N.jsx)(ce,{action:e},e.actionId))})]}),e.inputPreview?(0,N.jsx)(K,{label:d(`serviceActionAuthorizationInput`),value:e.inputPreview}):null]}):null,(0,N.jsxs)(te,{className:`gap-2 sm:gap-0`,children:[(0,N.jsx)(a,{type:`button`,variant:`outline`,onClick:()=>t(!1),children:d(`serviceActionAuthorizationReject`)}),(0,N.jsx)(a,{type:`button`,onClick:()=>t(!0),children:d(`serviceActionAuthorizationAllow`)})]})]})})}function ce({action:e}){return(0,N.jsxs)(`div`,{className:`space-y-1 rounded border border-border bg-card px-3 py-2`,children:[(0,N.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,N.jsx)(`div`,{className:`min-w-0 break-words text-xs font-medium text-foreground`,children:e.actionTitle??e.actionId}),(0,N.jsx)(`div`,{className:`shrink-0 rounded bg-amber-50 px-1.5 py-0.5 text-[11px] font-medium text-amber-700`,children:e.risk??`dangerous`})]}),(0,N.jsx)(`div`,{className:`break-words text-[11px] text-muted-foreground`,children:e.actionId}),e.actionDescription?(0,N.jsx)(`div`,{className:`break-words text-xs text-muted-foreground`,children:e.actionDescription}):null]})}function K({label:e,value:t}){return(0,N.jsxs)(`div`,{className:`grid grid-cols-[5rem_minmax(0,1fr)] gap-3`,children:[(0,N.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground`,children:e}),(0,N.jsx)(`div`,{className:`min-w-0 break-words text-xs text-foreground`,children:t})]})}var q=`nextclaw.ui.theme`,J=`work`,Y=[{value:`work`,labelKey:`themeWork`,appearance:`light`},{value:`night`,labelKey:`themeNight`,appearance:`dark`},{value:`charcoal`,labelKey:`themeCharcoal`,appearance:`dark`},{value:`island`,labelKey:`themeIsland`,appearance:`light`},{value:`natural`,labelKey:`themeNatural`,appearance:`light`},{value:`minimal`,labelKey:`themeMinimal`,appearance:`light`},{value:`warm`,labelKey:`themeWarm`,appearance:`light`},{value:`cool`,labelKey:`themeCool`,appearance:`light`},{value:`dawn`,labelKey:`themeDawn`,appearance:`light`},{value:`graphite`,labelKey:`themeGraphite`,appearance:`light`},{value:`probe`,labelKey:`themeProbe`,appearance:`light`}],le=Y.map(({value:e})=>e),ue=Y.map(({value:e,labelKey:t})=>({value:e,labelKey:t}));function X(e){return typeof e==`string`?le.includes(e)?e:e===`leaf`?`warm`:null:null}function Z(e){return Y.find(t=>t.value===e)?.appearance??`light`}var Q=new class{constructor(){this.activeTheme=J,this.initialized=!1,this.listeners=new Set,this.resolveInitialTheme=()=>{if(typeof window>`u`)return J;try{let e=X(window.localStorage.getItem(q));if(e)return e}catch{}return J},this.initializeTheme=()=>(this.initialized||=(this.activeTheme=this.resolveInitialTheme(),this.applyThemeAttribute(this.activeTheme),!0),this.activeTheme),this.getTheme=()=>this.initialized?this.activeTheme:this.initializeTheme(),this.setTheme=e=>{this.initializeTheme(),e!==this.activeTheme&&(this.activeTheme=e,this.applyThemeAttribute(this.activeTheme),this.saveTheme(this.activeTheme),this.listeners.forEach(e=>e(this.activeTheme)))},this.subscribeThemeChange=e=>(this.listeners.add(e),()=>{this.listeners.delete(e)}),this.applyThemeAttribute=e=>{if(typeof document>`u`)return;let t=Z(e);document.documentElement.setAttribute(`data-theme`,e),document.documentElement.setAttribute(`data-theme-appearance`,t),document.documentElement.style.colorScheme=t},this.saveTheme=e=>{if(!(typeof window>`u`))try{window.localStorage.setItem(q,e)}catch{}}}};function de(){return Q.initializeTheme()}function fe(){return Q.getTheme()}function pe(e){Q.setTheme(e)}function me(e){return Q.subscribeThemeChange(e)}var $=(0,M.createContext)(null);function he({children:e}){let[t,n]=(0,M.useState)(()=>de());(0,M.useEffect)(()=>me(e=>{n(e)}),[]);let r=(0,M.useCallback)(e=>{pe(e),n(fe())},[]),i=(0,M.useMemo)(()=>({theme:t,setTheme:r}),[t,r]);return(0,N.jsx)($.Provider,{value:i,children:e})}function ge(){let e=(0,M.useContext)($);if(!e)throw Error(`useTheme must be used within ThemeProvider`);return e}export{ae as _,Z as a,_ as b,W as c,V as d,R as f,D as g,O as h,ue as i,H as l,j as m,ge as n,X as o,I as p,J as r,G as s,he as t,B as u,E as v,g as x,T as y};
1
+ import{i as e}from"./chunk-DF37yw5_.js";import{A as t,M as n,i as r}from"./utils-CBZPzC_b.js";import{Lt as i,Yt as a,bn as o,hn as s,jn as c,vn as l,yn as u}from"./api-DqzQ-_3w.js";import{s as d}from"./i18n-20rSH40D.js";import{t as f}from"./createLucideIcon-BNKf0_kc.js";import{t as ee}from"./boxes-D6uPnkGo.js";import{a as p,i as te,n as ne,o as re,r as ie,t as m}from"./dialog-Xe73hpQz.js";import{t as h}from"./use-panel-app-scroll-restoration-ZnicIfo3.js";var g=f(`RotateCcw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]),_=f(`ShieldAlert`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`M12 8v4`,key:`1got3b`}],[`path`,{d:`M12 16h.01`,key:`1drbdi`}]]),v=[`panel-apps`],y=[`panel-app`];function b(e,t){return e.id===t||e.appId===t}function x(e,t,n){return e&&{...e,entries:e.entries.map(e=>b(e,t)?n(e):e)}}function S(e,t){return x(e,t.id,()=>t)}function C(e,t){let n=e?.entries.reduce((e,t)=>Math.max(e,t.mainSidebarOrder??-1),-1)??-1;return x(e,t.id,e=>({...e,...typeof t.preferences.favorite==`boolean`?{favorite:t.preferences.favorite}:{},...typeof t.preferences.mainSidebar==`boolean`?t.preferences.mainSidebar?{mainSidebar:!0,mainSidebarOrder:e.mainSidebar?e.mainSidebarOrder:n+1}:{mainSidebar:!1,mainSidebarOrder:void 0}:{}}))}function ae(e={}){return o({queryKey:v,queryFn:()=>i.panelApps.listPanelApps(),enabled:e.enabled??!0,staleTime:0})}function w(e,t={}){return o({queryKey:[...y,e],queryFn:()=>i.panelApps.getPanelApp(e),enabled:!!e&&(t.enabled??!0),staleTime:5e3})}function T(){let e=c();return u({mutationFn:({id:e,preferences:t})=>i.panelApps.updatePanelAppPreferences(e,t),onMutate:async t=>{await e.cancelQueries({queryKey:v});let n=e.getQueryData(v)?.entries.find(e=>b(e,t.id));return e.setQueryData(v,e=>C(e,t)),{previousEntry:n}},onSuccess:t=>{e.setQueryData(v,e=>S(e,t)),e.setQueryData([...y,t.appId],t)},onError:(t,n,r)=>{let i=r?.previousEntry;i&&e.setQueryData(v,e=>x(e,n.id,()=>i));let a=t instanceof Error?t.message:String(t);l.error(`${d(`panelAppsPreferenceUpdateFailed`)}: ${a}`)}})}function E(){let e=c();return u({mutationFn:e=>i.panelApps.recordPanelAppOpened(e),onSuccess:t=>{e.setQueryData(v,e=>S(e,t)),e.setQueryData([...y,t.appId],t)}})}function D(){let e=c();return u({mutationFn:e=>i.panelApps.grantClient(e),onSuccess:()=>{e.invalidateQueries({queryKey:v}),e.invalidateQueries({queryKey:y})}})}function O(){let e=c();return u({mutationFn:e=>i.panelApps.deletePanelApp(e),onSuccess:()=>{e.invalidateQueries({queryKey:v}),e.invalidateQueries({queryKey:y})}})}var k=class{constructor(e){this.authorizationManager=e,this.handleIframeMessage=({event:e,iframe:t})=>{this.isBridgeRequest(e.data)&&(!t?.contentWindow||e.source!==t.contentWindow||this.handleBridgeRequest({event:e,iframe:t},e.data))},this.handleBridgeRequest=async(e,t)=>{try{let n=this.getBridgeContext(t),r=await this.dispatchRequest(n,t);this.postResponse(e,{type:`nextclaw:panel-app-service-actions:response`,requestId:t.requestId,ok:!0,data:r})}catch(n){this.postResponse(e,{type:`nextclaw:panel-app-service-actions:response`,requestId:t.requestId,ok:!1,error:this.toBridgeError(n)})}},this.dispatchRequest=async(e,t)=>{switch(t.method){case`list`:return await i.serviceApps.listServiceActions({bridgeSessionToken:e.token});case`requestGrant`:return await this.confirmAndGrant(e,this.requireActionId(t));case`revokeGrant`:return await i.serviceApps.revokeServiceAction(this.requireActionId(t),{bridgeSessionToken:e.token});case`invoke`:return await this.invokeWithAuthorization(e,t);case`agent.send`:return await this.sendAgentMessageWithAuthorization(e,t);case`agent.generateObject`:return await this.generateAgentObjectWithAuthorization(e,t);case`verification.list`:return await i.serviceApps.listVerificationRecords({acceptanceId:t.payload?.acceptanceId,appId:t.payload?.appId,limit:t.payload?.limit,bridgeSessionToken:e.token});case`acceptance.status`:return await i.serviceApps.getPortableRuntimeAcceptanceStatus({appId:t.payload?.appId,locale:t.payload?.locale,bridgeSessionToken:e.token});case`acceptance.export`:return await i.serviceApps.exportPortableRuntimeAcceptance({appId:t.payload?.appId,locale:t.payload?.locale,bridgeSessionToken:e.token});default:throw Error(`Unsupported panel bridge method: ${String(t.method)}`)}},this.invokeWithAuthorization=async(e,t)=>{let n=this.requireActionId(t);try{return await i.serviceApps.invokeServiceAction(n,this.readOptionalRecord(t.payload?.input),{bridgeSessionToken:e.token})}catch(r){if(!(r instanceof s)||r.code!==`AUTHORIZATION_REQUIRED`)throw r;return await this.confirmAndGrant(e,n,this.readOptionalRecord(t.payload?.input)),await i.serviceApps.invokeServiceAction(n,this.readOptionalRecord(t.payload?.input),{bridgeSessionToken:e.token})}},this.sendAgentMessageWithAuthorization=async(e,t)=>{try{return await i.panelApps.sendAgentMessage(this.readAgentSendRequest(t),{bridgeSessionToken:e.token})}catch(n){if(!(n instanceof s)||n.code!==`AUTHORIZATION_REQUIRED`)throw n;return await this.confirmAndGrantAgentCapability(e,`agent:send`),await i.panelApps.sendAgentMessage(this.readAgentSendRequest(t),{bridgeSessionToken:e.token})}},this.generateAgentObjectWithAuthorization=async(e,t)=>{try{return await i.panelApps.generateAgentObject(this.readGenerateObjectRequest(t),{bridgeSessionToken:e.token})}catch(n){if(!(n instanceof s)||n.code!==`AUTHORIZATION_REQUIRED`)throw n;return await this.confirmAndGrantAgentCapability(e,`agent:generateObject`),await i.panelApps.generateAgentObject(this.readGenerateObjectRequest(t),{bridgeSessionToken:e.token})}},this.confirmAndGrantAgentCapability=async(e,t)=>{if(!await this.authorizationManager.requestAuthorization({panelAppId:e.appId,actions:[{actionId:t,actionTitle:t===`agent:send`?`Send agent message`:`Generate object`,actionDescription:t===`agent:send`?`Send a message to a NextClaw Agent session.`:`Send context to a NextClaw Agent session and receive a structured object.`,risk:`write`}]}))throw new s({code:`AUTHORIZATION_REJECTED`,message:`Permission rejected for ${t}.`});return await i.panelApps.grantAgentCapability(t,{bridgeSessionToken:e.token})},this.confirmAndGrant=async(e,t,n)=>{let r=await this.listGrantCandidateActions(e,t);if(!await this.authorizationManager.requestAuthorization({panelAppId:e.appId,actions:r.map(e=>({actionId:e.id,actionTitle:e.title,actionDescription:e.description,risk:e.risk})),inputPreview:this.createInputPreview(n)}))throw new s({code:`AUTHORIZATION_REJECTED`,message:`Permission rejected for ${t}.`});let a=await i.serviceApps.grantServiceActions(r.map(e=>e.id),{bridgeSessionToken:e.token}),o=a.grants.find(e=>e.actionId===t)??a.grants[0];if(!o)throw Error(`No permission grant returned for ${t}.`);return o},this.listGrantCandidateActions=async(e,t)=>{let n=await i.serviceApps.listServiceActions({bridgeSessionToken:e.token}),r=n.actions.find(e=>e.id===t);if(r&&r.grantState!==`not-granted`)return[r];let a=n.actions.filter(e=>e.grantState===`not-granted`),o=[...a.filter(e=>e.id===t),...a.filter(e=>e.id!==t)];return o.length>0?o:[{appId:r?.appId??t.split(`.`)[0]??t,description:r?.description,id:t,name:r?.name??t,risk:r?.risk??`dangerous`,title:r?.title}]},this.createInputPreview=e=>{if(!(!e||Object.keys(e).length===0))try{let t=JSON.stringify(e,null,2);return t.length>500?`${t.slice(0,500)}...`:t}catch{return`[unserializable input]`}},this.getBridgeContext=e=>({appId:e.appId,token:e.runtimeToken}),this.requireActionId=e=>{let t=e.payload?.actionId?.trim();if(!t)throw Error(`Panel bridge actionId is required.`);return t},this.readOptionalRecord=e=>{if(e!==void 0)return this.requireRecord(e,`input`)},this.readAgentSendRequest=e=>({payload:this.requireRecord(e.payload?.request,`agent.send request`)}),this.readGenerateObjectRequest=e=>({input:this.requireRecord(e.payload?.input,`generateObject input`)}),this.requireRecord=(e,t)=>{if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`${t} is required.`);return e},this.postResponse=(e,t)=>{e.iframe?.contentWindow?.postMessage(t,`*`)},this.toBridgeError=e=>e instanceof s?{code:e.code,message:e.message,details:e.details}:{message:e instanceof Error?e.message:String(e)},this.isBridgeRequest=e=>{if(!e||typeof e!=`object`)return!1;let t=e;return t.type===`nextclaw:panel-app-service-actions:request`&&typeof t.requestId==`string`&&typeof t.runtimeToken==`string`&&typeof t.appId==`string`&&(t.method===`invoke`||t.method===`agent.send`||t.method===`agent.generateObject`||t.method===`acceptance.export`||t.method===`acceptance.status`||t.method===`list`||t.method===`requestGrant`||t.method===`revokeGrant`||t.method===`verification.list`)}}};function oe(){return`service-action-auth-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}var A=r((e,t)=>({pending:null,requestAuthorization:async n=>await new Promise(r=>{t().pending?.resolve(!1),e({pending:{id:oe(),...n,resolve:r}})}),resolveAuthorization:n=>{let{pending:r}=t();r&&(r.resolve(n),e({pending:null}))}})),se=class{constructor(){this.requestAuthorization=async e=>await A.getState().requestAuthorization(e)}},j=class{constructor(){this.serviceActionAuthorizationManager=new se,this.panelAppBridgeManager=new k(this.serviceActionAuthorizationManager)}},M=e(n(),1),N=t(),P=globalThis,F=P.__NEXTCLAW_PANEL_APP_HOST_CONTEXT__??(0,M.createContext)(null);P.__NEXTCLAW_PANEL_APP_HOST_CONTEXT__=F;function I({children:e,presenter:t}){let n=(0,M.useMemo)(()=>t??new j,[t]);return(0,N.jsx)(F.Provider,{value:n,children:e})}function L(){let e=(0,M.useContext)(F);if(!e)throw Error(`usePanelAppHostPresenter must be used inside PanelAppHostProvider`);return e}function R(){let e=L(),{isPending:t,mutateAsync:n}=D(),r=(0,M.useRef)(new Map);return{ensurePanelAppClientGrant:(0,M.useCallback)(async t=>{if(!t.clientDeclared||t.clientGranted)return!0;let i=r.current.get(t.appId);if(i)return await i;let a=(async()=>await e.serviceActionAuthorizationManager.requestAuthorization({panelAppId:t.appId,actions:[{actionId:`nextclaw.client`,actionTitle:d(`panelAppsClientGrantTitle`),actionDescription:d(`panelAppsClientGrantDescription`),risk:`dangerous`}]})?(await n(t.appId),!0):!1)();r.current.set(t.appId,a);try{return await a}finally{r.current.delete(t.appId)}},[n,e]),isPending:t}}function z(e){let t=c(),n=(0,M.useId)(),{ensurePanelAppClientGrant:r}=R(),a=!!(e?.clientDeclared&&!e.clientGranted),s=o({queryKey:[`panel-app-client-grant`,e?.appId??`none`,e?.clientGranted??!1],queryFn:async()=>await r(e),enabled:a,gcTime:0,retry:!1,staleTime:1/0}),l=e?a?s.isError?`error`:s.isPending?`checking`:s.data?`allowed`:`denied`:`allowed`:`idle`;return o({queryKey:[`panel-app-open`,n,e?.appId??`none`],queryFn:async()=>{let n=await i.panelApps.recordPanelAppOpened(e.id);return t.setQueryData(v,e=>S(e,n)),t.setQueryData([...y,n.appId],n),n},enabled:!!(e&&l===`allowed`),retry:!1,staleTime:1/0}),{retryClientGrant:s.refetch,state:l}}var B=`allow-scripts allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-downloads allow-pointer-lock allow-presentation`;function V(e){e?.focus({preventScroll:!0}),e?.contentWindow?.focus()}function H({appId:e,restorationScope:t,unavailableAction:n}){let r=L(),i=w(e),a=(0,M.useRef)(null),o=(0,M.useMemo)(()=>i.data,[i.data]),s=z(o),c=h({currentUrl:o?.contentPath??null,iframeRef:a,isEnabled:!!o,restorationKey:o?`panel-app:${t}:${o.appId}`:null});return(0,M.useEffect)(()=>{let e=e=>{r.panelAppBridgeManager.handleIframeMessage({event:e,iframe:a.current})};return window.addEventListener(`message`,e),()=>window.removeEventListener(`message`,e)},[r]),i.isLoading?(0,N.jsx)(U,{message:d(`panelAppsLoading`)}):i.isError?(0,N.jsx)(U,{message:i.error instanceof Error?i.error.message:d(`panelAppsLoadFailed`),actionLabel:d(`panelAppsTryAgain`),onAction:()=>void i.refetch()}):o?s.state===`checking`||s.state===`idle`?(0,N.jsx)(U,{message:d(`panelAppsCheckingPermission`)}):s.state===`denied`||s.state===`error`?(0,N.jsx)(U,{message:s.state===`denied`?d(`panelAppsPermissionDenied`):d(`panelAppsPermissionFailed`),actionLabel:d(`panelAppsTryAgain`),onAction:()=>void s.retryClientGrant()}):(0,N.jsx)(`div`,{className:`h-full min-h-0 bg-background`,children:(0,N.jsx)(`iframe`,{ref:a,src:o.contentPath,title:o.title,sandbox:B,className:`block h-full w-full border-0 bg-background`,onLoad:c,onPointerOver:e=>V(e.currentTarget)},o.appId)}):(0,N.jsx)(U,{message:d(`panelAppsMainUnavailable`),actionLabel:n?.label,onAction:n?.onAction})}function U({actionLabel:e,message:t,onAction:n}){return(0,N.jsx)(`div`,{className:`flex h-full min-h-0 items-center justify-center bg-background px-6 text-center`,children:(0,N.jsxs)(`div`,{className:`max-w-sm`,children:[(0,N.jsx)(`div`,{className:`mx-auto flex h-10 w-10 items-center justify-center rounded-lg bg-muted text-muted-foreground`,children:n?(0,N.jsx)(g,{className:`h-5 w-5`}):(0,N.jsx)(ee,{className:`h-5 w-5`})}),(0,N.jsx)(`p`,{className:`mt-3 text-sm leading-6 text-muted-foreground`,children:t}),e&&n?(0,N.jsx)(`button`,{type:`button`,className:`mt-4 rounded-md border border-border px-3 py-1.5 text-xs font-medium text-foreground transition-colors hover:bg-[var(--interaction-hover)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border`,onClick:n,children:e}):null]})})}function W({appId:e}){let t=w(e),n=(0,M.useMemo)(()=>t.data,[t.data]);return(0,M.useEffect)(()=>{let e=document.title;return document.title=`${n?.title??d(`panelAppsTitle`)} · NextClaw`,()=>{document.title=e}},[n?.title]),(0,N.jsx)(`main`,{className:`h-dvh min-h-0 w-full overflow-hidden bg-background`,children:(0,N.jsx)(H,{appId:e,restorationScope:`standalone`})})}function G(){let e=A(e=>e.pending),t=A(e=>e.resolveAuthorization);return(0,N.jsx)(m,{open:!!e,onOpenChange:e=>{e||t(!1)},children:(0,N.jsxs)(ne,{className:`[&>:last-child]:hidden`,children:[(0,N.jsxs)(p,{children:[(0,N.jsxs)(re,{className:`flex items-center gap-2`,children:[(0,N.jsx)(_,{className:`h-4 w-4 text-amber-600`}),d(`serviceActionAuthorizationTitle`)]}),(0,N.jsx)(ie,{children:d(`serviceActionAuthorizationDescription`)})]}),e?(0,N.jsxs)(`div`,{className:`space-y-3 rounded-md border border-border bg-muted/60 p-3 text-sm`,children:[(0,N.jsx)(K,{label:d(`serviceActionAuthorizationSource`),value:e.panelAppId}),(0,N.jsxs)(`div`,{className:`space-y-2`,children:[(0,N.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground`,children:d(`serviceActionAuthorizationActions`)}),(0,N.jsx)(`div`,{className:`max-h-64 space-y-2 overflow-auto`,children:e.actions.map(e=>(0,N.jsx)(ce,{action:e},e.actionId))})]}),e.inputPreview?(0,N.jsx)(K,{label:d(`serviceActionAuthorizationInput`),value:e.inputPreview}):null]}):null,(0,N.jsxs)(te,{className:`gap-2 sm:gap-0`,children:[(0,N.jsx)(a,{type:`button`,variant:`outline`,onClick:()=>t(!1),children:d(`serviceActionAuthorizationReject`)}),(0,N.jsx)(a,{type:`button`,onClick:()=>t(!0),children:d(`serviceActionAuthorizationAllow`)})]})]})})}function ce({action:e}){return(0,N.jsxs)(`div`,{className:`space-y-1 rounded border border-border bg-card px-3 py-2`,children:[(0,N.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,N.jsx)(`div`,{className:`min-w-0 break-words text-xs font-medium text-foreground`,children:e.actionTitle??e.actionId}),(0,N.jsx)(`div`,{className:`shrink-0 rounded bg-amber-50 px-1.5 py-0.5 text-[11px] font-medium text-amber-700`,children:e.risk??`dangerous`})]}),(0,N.jsx)(`div`,{className:`break-words text-[11px] text-muted-foreground`,children:e.actionId}),e.actionDescription?(0,N.jsx)(`div`,{className:`break-words text-xs text-muted-foreground`,children:e.actionDescription}):null]})}function K({label:e,value:t}){return(0,N.jsxs)(`div`,{className:`grid grid-cols-[5rem_minmax(0,1fr)] gap-3`,children:[(0,N.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground`,children:e}),(0,N.jsx)(`div`,{className:`min-w-0 break-words text-xs text-foreground`,children:t})]})}var q=`nextclaw.ui.theme`,J=`work`,Y=[{value:`work`,labelKey:`themeWork`,appearance:`light`},{value:`night`,labelKey:`themeNight`,appearance:`dark`},{value:`charcoal`,labelKey:`themeCharcoal`,appearance:`dark`},{value:`island`,labelKey:`themeIsland`,appearance:`light`},{value:`natural`,labelKey:`themeNatural`,appearance:`light`},{value:`minimal`,labelKey:`themeMinimal`,appearance:`light`},{value:`warm`,labelKey:`themeWarm`,appearance:`light`},{value:`cool`,labelKey:`themeCool`,appearance:`light`},{value:`dawn`,labelKey:`themeDawn`,appearance:`light`},{value:`graphite`,labelKey:`themeGraphite`,appearance:`light`},{value:`probe`,labelKey:`themeProbe`,appearance:`light`}],le=Y.map(({value:e})=>e),ue=Y.map(({value:e,labelKey:t})=>({value:e,labelKey:t}));function X(e){return typeof e==`string`?le.includes(e)?e:e===`leaf`?`warm`:null:null}function Z(e){return Y.find(t=>t.value===e)?.appearance??`light`}var Q=new class{constructor(){this.activeTheme=J,this.initialized=!1,this.listeners=new Set,this.resolveInitialTheme=()=>{if(typeof window>`u`)return J;try{let e=X(window.localStorage.getItem(q));if(e)return e}catch{}return J},this.initializeTheme=()=>(this.initialized||=(this.activeTheme=this.resolveInitialTheme(),this.applyThemeAttribute(this.activeTheme),!0),this.activeTheme),this.getTheme=()=>this.initialized?this.activeTheme:this.initializeTheme(),this.setTheme=e=>{this.initializeTheme(),e!==this.activeTheme&&(this.activeTheme=e,this.applyThemeAttribute(this.activeTheme),this.saveTheme(this.activeTheme),this.listeners.forEach(e=>e(this.activeTheme)))},this.subscribeThemeChange=e=>(this.listeners.add(e),()=>{this.listeners.delete(e)}),this.applyThemeAttribute=e=>{if(typeof document>`u`)return;let t=Z(e);document.documentElement.setAttribute(`data-theme`,e),document.documentElement.setAttribute(`data-theme-appearance`,t),document.documentElement.style.colorScheme=t},this.saveTheme=e=>{if(!(typeof window>`u`))try{window.localStorage.setItem(q,e)}catch{}}}};function de(){return Q.initializeTheme()}function fe(){return Q.getTheme()}function pe(e){Q.setTheme(e)}function me(e){return Q.subscribeThemeChange(e)}var $=(0,M.createContext)(null);function he({children:e}){let[t,n]=(0,M.useState)(()=>de());(0,M.useEffect)(()=>me(e=>{n(e)}),[]);let r=(0,M.useCallback)(e=>{pe(e),n(fe())},[]),i=(0,M.useMemo)(()=>({theme:t,setTheme:r}),[t,r]);return(0,N.jsx)($.Provider,{value:i,children:e})}function ge(){let e=(0,M.useContext)($);if(!e)throw Error(`useTheme must be used within ThemeProvider`);return e}export{ae as _,Z as a,_ as b,W as c,V as d,R as f,D as g,O as h,ue as i,H as l,j as m,ge as n,X as o,I as p,J as r,G as s,he as t,B as u,E as v,g as x,T as y};
@@ -1 +1 @@
1
- import{At as e,Ct as t,Dt as n,Et as r,Ot as i,St as a,Tt as o,_t as s,at as c,bn as l,dt as u,gt as d,ht as f,jn as p,kt as m,lt as h,mt as g,ot as _,rt as v,st as y,ut as b,vn as x,vt as S,wt as C,yn as w,yt as T}from"./api-BWFOIoUm.js";import{s as E}from"./i18n-ClHx6jwj.js";function D(){return l({queryKey:[`config`],queryFn:h,staleTime:3e4,refetchOnWindowFocus:!0})}function O(){return l({queryKey:[`config-meta`],queryFn:b,staleTime:1/0})}function k(){return l({queryKey:[`product-analytics-status`],queryFn:g,staleTime:15e3,refetchOnWindowFocus:!0})}function A(){return l({queryKey:[`providers`],queryFn:s,staleTime:3e4,refetchOnWindowFocus:!0})}function j(){return l({queryKey:[`provider-templates`],queryFn:d,staleTime:1/0})}function M(e={}){return l({queryKey:[`provider-model-catalog`],queryFn:f,staleTime:3e4,refetchInterval:t=>e.pollWhileRefreshing&&t.state.data?.refreshing?1e3:!1,refetchOnMount:e.refreshOnMount?`always`:!0,refetchOnWindowFocus:!0})}function N(){return l({queryKey:[`config-schema`],queryFn:u,staleTime:1/0})}function P(){let e=p();return w({mutationFn:o,onSuccess:()=>{e.invalidateQueries({queryKey:[`config`]}),x.success(E(`configSaved`))},onError:e=>{x.error(E(`configSaveFailed`)+`: `+e.message)}})}function F(){let e=p();return w({mutationFn:({data:e})=>r(e),onSuccess:t=>{e.setQueryData([`config`],e=>e&&{...e,productAnalytics:t}),e.invalidateQueries({queryKey:[`product-analytics-status`]}),x.success(E(`configSavedApplied`))},onError:e=>{x.error(`${E(`configSaveFailed`)}: ${e.message}`)}})}function I(){let e=p();return w({mutationFn:({data:e})=>m(e),onSuccess:()=>{e.invalidateQueries({queryKey:[`config`]}),e.invalidateQueries({queryKey:[`config-meta`]}),x.success(E(`configSavedApplied`))},onError:e=>{x.error(E(`configSaveFailed`)+`: `+e.message)}})}function L(){let e=p();return w({mutationFn:({provider:e,data:t})=>n(e,t),onSuccess:(t,n)=>{e.setQueryData([`providers`],e=>e&&{providers:{...e.providers,[n.provider]:t}}),e.invalidateQueries({queryKey:[`providers`]}),e.invalidateQueries({queryKey:[`config`]}),n.silentSuccess||x.success(E(`configSaved`))},onError:e=>{x.error(E(`configSaveFailed`)+`: `+e.message)}})}function R(){let e=p();return w({mutationFn:({data:e})=>v(e??{}),onSuccess:()=>{e.invalidateQueries({queryKey:[`providers`]}),e.invalidateQueries({queryKey:[`config`]}),x.success(E(`configSaved`))},onError:e=>{x.error(E(`configSaveFailed`)+`: `+e.message)}})}function z(){let e=p();return w({mutationFn:({provider:e})=>c(e),onSuccess:()=>{e.invalidateQueries({queryKey:[`providers`]}),e.invalidateQueries({queryKey:[`config`]}),x.success(E(`configSaved`))},onError:e=>{x.error(E(`configSaveFailed`)+`: `+e.message)}})}function B(){return w({mutationFn:({provider:e,data:n})=>t(e,n)})}function V(){return w({mutationFn:({provider:e,data:t})=>_(e,t)})}function H(){return w({mutationFn:({provider:e,data:t})=>a(e,t)})}function U(){return w({mutationFn:({provider:e,data:t})=>T(e,t)})}function W(){return w({mutationFn:({provider:e})=>S(e)})}function G(){let e=p();return w({mutationFn:({channel:e,data:t})=>C(e,t),onSuccess:()=>{e.invalidateQueries({queryKey:[`config`]}),e.invalidateQueries({queryKey:[`config-meta`]}),x.success(E(`configSavedApplying`))},onError:e=>{x.error(E(`configSaveFailed`)+`: `+e.message)}})}function K(){let e=p();return w({mutationFn:({data:e})=>i(e),onSuccess:()=>{e.invalidateQueries({queryKey:[`config`]}),x.success(E(`configSavedApplied`))},onError:e=>{x.error(E(`configSaveFailed`)+`: `+e.message)}})}function q(){let t=p();return w({mutationFn:({data:t})=>e(t),onSuccess:()=>{t.invalidateQueries({queryKey:[`config`]}),x.success(E(`configSavedApplied`))},onError:e=>{x.error(E(`configSaveFailed`)+`: `+e.message)}})}function J(){return w({mutationFn:({actionId:e,data:t})=>y(e,t),onError:e=>{x.error(E(`error`)+`: `+e.message)}})}export{q as S,P as _,z as a,K as b,W as c,M as d,j as f,G as g,B as h,R as i,U as l,H as m,O as n,V as o,A as p,N as r,J as s,D as t,k as u,F as v,I as x,L as y};
1
+ import{At as e,Ct as t,Dt as n,Et as r,Ot as i,St as a,Tt as o,_t as s,at as c,bn as l,dt as u,gt as d,ht as f,jn as p,kt as m,lt as h,mt as g,ot as _,rt as v,st as y,ut as b,vn as x,vt as S,wt as C,yn as w,yt as T}from"./api-DqzQ-_3w.js";import{s as E}from"./i18n-20rSH40D.js";function D(){return l({queryKey:[`config`],queryFn:h,staleTime:3e4,refetchOnWindowFocus:!0})}function O(){return l({queryKey:[`config-meta`],queryFn:b,staleTime:1/0})}function k(){return l({queryKey:[`product-analytics-status`],queryFn:g,staleTime:15e3,refetchOnWindowFocus:!0})}function A(){return l({queryKey:[`providers`],queryFn:s,staleTime:3e4,refetchOnWindowFocus:!0})}function j(){return l({queryKey:[`provider-templates`],queryFn:d,staleTime:1/0})}function M(e={}){return l({queryKey:[`provider-model-catalog`],queryFn:f,staleTime:3e4,refetchInterval:t=>e.pollWhileRefreshing&&t.state.data?.refreshing?1e3:!1,refetchOnMount:e.refreshOnMount?`always`:!0,refetchOnWindowFocus:!0})}function N(){return l({queryKey:[`config-schema`],queryFn:u,staleTime:1/0})}function P(){let e=p();return w({mutationFn:o,onSuccess:()=>{e.invalidateQueries({queryKey:[`config`]}),x.success(E(`configSaved`))},onError:e=>{x.error(E(`configSaveFailed`)+`: `+e.message)}})}function F(){let e=p();return w({mutationFn:({data:e})=>r(e),onSuccess:t=>{e.setQueryData([`config`],e=>e&&{...e,productAnalytics:t}),e.invalidateQueries({queryKey:[`product-analytics-status`]}),x.success(E(`configSavedApplied`))},onError:e=>{x.error(`${E(`configSaveFailed`)}: ${e.message}`)}})}function I(){let e=p();return w({mutationFn:({data:e})=>m(e),onSuccess:()=>{e.invalidateQueries({queryKey:[`config`]}),e.invalidateQueries({queryKey:[`config-meta`]}),x.success(E(`configSavedApplied`))},onError:e=>{x.error(E(`configSaveFailed`)+`: `+e.message)}})}function L(){let e=p();return w({mutationFn:({provider:e,data:t})=>n(e,t),onSuccess:(t,n)=>{e.setQueryData([`providers`],e=>e&&{providers:{...e.providers,[n.provider]:t}}),e.invalidateQueries({queryKey:[`providers`]}),e.invalidateQueries({queryKey:[`config`]}),n.silentSuccess||x.success(E(`configSaved`))},onError:e=>{x.error(E(`configSaveFailed`)+`: `+e.message)}})}function R(){let e=p();return w({mutationFn:({data:e})=>v(e??{}),onSuccess:()=>{e.invalidateQueries({queryKey:[`providers`]}),e.invalidateQueries({queryKey:[`config`]}),x.success(E(`configSaved`))},onError:e=>{x.error(E(`configSaveFailed`)+`: `+e.message)}})}function z(){let e=p();return w({mutationFn:({provider:e})=>c(e),onSuccess:()=>{e.invalidateQueries({queryKey:[`providers`]}),e.invalidateQueries({queryKey:[`config`]}),x.success(E(`configSaved`))},onError:e=>{x.error(E(`configSaveFailed`)+`: `+e.message)}})}function B(){return w({mutationFn:({provider:e,data:n})=>t(e,n)})}function V(){return w({mutationFn:({provider:e,data:t})=>_(e,t)})}function H(){return w({mutationFn:({provider:e,data:t})=>a(e,t)})}function U(){return w({mutationFn:({provider:e,data:t})=>T(e,t)})}function W(){return w({mutationFn:({provider:e})=>S(e)})}function G(){let e=p();return w({mutationFn:({channel:e,data:t})=>C(e,t),onSuccess:()=>{e.invalidateQueries({queryKey:[`config`]}),e.invalidateQueries({queryKey:[`config-meta`]}),x.success(E(`configSavedApplying`))},onError:e=>{x.error(E(`configSaveFailed`)+`: `+e.message)}})}function K(){let e=p();return w({mutationFn:({data:e})=>i(e),onSuccess:()=>{e.invalidateQueries({queryKey:[`config`]}),x.success(E(`configSavedApplied`))},onError:e=>{x.error(E(`configSaveFailed`)+`: `+e.message)}})}function q(){let t=p();return w({mutationFn:({data:t})=>e(t),onSuccess:()=>{t.invalidateQueries({queryKey:[`config`]}),x.success(E(`configSavedApplied`))},onError:e=>{x.error(E(`configSaveFailed`)+`: `+e.message)}})}function J(){return w({mutationFn:({actionId:e,data:t})=>y(e,t),onError:e=>{x.error(E(`error`)+`: `+e.message)}})}export{q as S,P as _,z as a,K as b,W as c,M as d,j as f,G as g,B as h,R as i,U as l,H as m,O as n,V as o,A as p,N as r,J as s,D as t,k as u,F as v,I as x,L as y};
@@ -1 +1 @@
1
- import{Lt as e,bn as t,jn as n,yn as r}from"./api-BWFOIoUm.js";var i=[`feature-controls`];function a(){return t({queryKey:i,queryFn:e.featureControls.get})}var o=new class{constructor(){this.getStatus=async()=>await e.capabilityAccess.getDesktopStatus(),this.listGrants=async()=>await e.capabilityAccess.listDesktopGrants(),this.grantAccess=async t=>await e.capabilityAccess.grantDesktopAccess(t),this.requestSystemPermission=async()=>await e.capabilityAccess.requestDesktopPermissions(),this.openSystemSettings=async()=>await e.capabilityAccess.openDesktopPermissionSettings(),this.revokeGrant=async t=>await e.capabilityAccess.revokeDesktopAccess(t)}},s=[`desktop-capability`,`status`],c=[`desktop-capability`,`grants`];function l(){return t({queryKey:s,queryFn:o.getStatus})}function u(){return d(a().data)}function d(e){return e?.desktopAutomation.available===!0}function f(){return t({queryKey:c,queryFn:o.listGrants})}function p(){let e=n();return r({mutationFn:o.requestSystemPermission,onSuccess:async()=>{await e.invalidateQueries({queryKey:s})}})}function m(){return r({mutationFn:o.openSystemSettings})}function h(){let e=n();return r({mutationFn:async e=>await o.revokeGrant(e),onSuccess:async()=>{await e.invalidateQueries({queryKey:c})}})}export{p as a,m as i,f as n,h as o,l as r,o as s,u as t};
1
+ import{Lt as e,bn as t,jn as n,yn as r}from"./api-DqzQ-_3w.js";var i=[`feature-controls`];function a(){return t({queryKey:i,queryFn:e.featureControls.get})}var o=new class{constructor(){this.getStatus=async()=>await e.capabilityAccess.getDesktopStatus(),this.listGrants=async()=>await e.capabilityAccess.listDesktopGrants(),this.grantAccess=async t=>await e.capabilityAccess.grantDesktopAccess(t),this.requestSystemPermission=async()=>await e.capabilityAccess.requestDesktopPermissions(),this.openSystemSettings=async()=>await e.capabilityAccess.openDesktopPermissionSettings(),this.revokeGrant=async t=>await e.capabilityAccess.revokeDesktopAccess(t)}},s=[`desktop-capability`,`status`],c=[`desktop-capability`,`grants`];function l(){return t({queryKey:s,queryFn:o.getStatus})}function u(){return d(a().data)}function d(e){return e?.desktopAutomation.available===!0}function f(){return t({queryKey:c,queryFn:o.listGrants})}function p(){let e=n();return r({mutationFn:o.requestSystemPermission,onSuccess:async()=>{await e.invalidateQueries({queryKey:s})}})}function m(){return r({mutationFn:o.openSystemSettings})}function h(){let e=n();return r({mutationFn:async e=>await o.revokeGrant(e),onSuccess:async()=>{await e.invalidateQueries({queryKey:c})}})}export{p as a,m as i,f as n,h as o,l as r,o as s,u as t};
@@ -258,7 +258,7 @@
258
258
  })();
259
259
  </script>
260
260
  <title>NextClaw</title>
261
- <script type="module" crossorigin src="/assets/main-CvVBCOlN.js"></script>
261
+ <script type="module" crossorigin src="/assets/main-ky5Efhq1.js"></script>
262
262
  <link rel="modulepreload" crossorigin href="/assets/chunk-DF37yw5_.js">
263
263
  <link rel="modulepreload" crossorigin href="/assets/utils-CBZPzC_b.js">
264
264
  <link rel="modulepreload" crossorigin href="/assets/client-BtGBwLTs.js">
@@ -274,8 +274,8 @@
274
274
  <link rel="modulepreload" crossorigin href="/assets/dialog-Xe73hpQz.js">
275
275
  <link rel="modulepreload" crossorigin href="/assets/popover-NkrFlWHp.js">
276
276
  <link rel="modulepreload" crossorigin href="/assets/tooltip-DYcuWhuP.js">
277
- <link rel="modulepreload" crossorigin href="/assets/i18n-ClHx6jwj.js">
278
- <link rel="modulepreload" crossorigin href="/assets/api-BWFOIoUm.js">
277
+ <link rel="modulepreload" crossorigin href="/assets/i18n-20rSH40D.js">
278
+ <link rel="modulepreload" crossorigin href="/assets/api-DqzQ-_3w.js">
279
279
  <link rel="modulepreload" crossorigin href="/assets/search-CUe41wjm.js">
280
280
  <link rel="modulepreload" crossorigin href="/assets/book-open-xqEj1OLE.js">
281
281
  <link rel="modulepreload" crossorigin href="/assets/boxes-D6uPnkGo.js">
@@ -284,37 +284,37 @@
284
284
  <link rel="modulepreload" crossorigin href="/assets/plus-LA8-jpxP.js">
285
285
  <link rel="modulepreload" crossorigin href="/assets/refresh-cw-h9Xq3LY3.js">
286
286
  <link rel="modulepreload" crossorigin href="/assets/middleware-0o3JF3tS.js">
287
- <link rel="modulepreload" crossorigin href="/assets/doc-browser-context-Dp0dEMyT.js">
287
+ <link rel="modulepreload" crossorigin href="/assets/doc-browser-context-TILuCY5c.js">
288
288
  <link rel="modulepreload" crossorigin href="/assets/use-panel-app-scroll-restoration-ZnicIfo3.js">
289
- <link rel="modulepreload" crossorigin href="/assets/doc-browser-BNiqa-zm.js">
289
+ <link rel="modulepreload" crossorigin href="/assets/doc-browser-BJrre2S_.js">
290
290
  <link rel="modulepreload" crossorigin href="/assets/circle-alert-lSa3LRvS.js">
291
291
  <link rel="modulepreload" crossorigin href="/assets/loader-circle-K1BDdHR5.js">
292
- <link rel="modulepreload" crossorigin href="/assets/confirm-dialog-BWS7gA_z.js">
293
- <link rel="modulepreload" crossorigin href="/assets/i18n-provider-C1NxogO4.js">
294
- <link rel="modulepreload" crossorigin href="/assets/tag-chip-CY0Hqk_l.js">
292
+ <link rel="modulepreload" crossorigin href="/assets/confirm-dialog-BTKCWMn6.js">
293
+ <link rel="modulepreload" crossorigin href="/assets/i18n-provider-BPRq6S7O.js">
294
+ <link rel="modulepreload" crossorigin href="/assets/tag-chip-B1AYPOKL.js">
295
295
  <link rel="modulepreload" crossorigin href="/assets/skeleton-Drvn83YW.js">
296
- <link rel="modulepreload" crossorigin href="/assets/mcp-marketplace-page-D75hPmzO.js">
296
+ <link rel="modulepreload" crossorigin href="/assets/mcp-marketplace-page-FfIfEo6w.js">
297
297
  <link rel="modulepreload" crossorigin href="/assets/katex-B26hhTOT.js">
298
298
  <link rel="modulepreload" crossorigin href="/assets/puzzle-D6gulz7u.js">
299
299
  <link rel="modulepreload" crossorigin href="/assets/trash-2-BPPYt2NV.js">
300
- <link rel="modulepreload" crossorigin href="/assets/app-data-BnrEdmg2.js">
300
+ <link rel="modulepreload" crossorigin href="/assets/app-data-C54N2p8b.js">
301
301
  <link rel="modulepreload" crossorigin href="/assets/ellipsis-C5YXdOUx.js">
302
302
  <link rel="modulepreload" crossorigin href="/assets/eye-C84inPcV.js">
303
303
  <link rel="modulepreload" crossorigin href="/assets/tabs-BuE0qKMh.js">
304
304
  <link rel="modulepreload" crossorigin href="/assets/use-viewport-layout-BS18drMT.js">
305
- <link rel="modulepreload" crossorigin href="/assets/theme-provider-BvpXGXWH.js">
306
- <link rel="modulepreload" crossorigin href="/assets/use-desktop-capabilities-DR9snbeo.js">
305
+ <link rel="modulepreload" crossorigin href="/assets/theme-provider-DzvAi3pe.js">
306
+ <link rel="modulepreload" crossorigin href="/assets/use-desktop-capabilities-BkuRd2cY.js">
307
307
  <link rel="modulepreload" crossorigin href="/assets/logo-badge-C-5-zim6.js">
308
308
  <link rel="modulepreload" crossorigin href="/assets/card-BhfAZv5L.js">
309
- <link rel="modulepreload" crossorigin href="/assets/use-config-C8ZkQiTc.js">
309
+ <link rel="modulepreload" crossorigin href="/assets/use-config-BEdbtpD4.js">
310
310
  <link rel="modulepreload" crossorigin href="/assets/provider-models-hrHMcHqg.js">
311
- <link rel="modulepreload" crossorigin href="/assets/app-presenter-provider-CDRBc_lQ.js">
312
- <link rel="modulepreload" crossorigin href="/assets/provider-scoped-model-input-BvZitHkT.js">
311
+ <link rel="modulepreload" crossorigin href="/assets/app-presenter-provider-V0xnU_Wb.js">
312
+ <link rel="modulepreload" crossorigin href="/assets/provider-scoped-model-input-BQsugx1v.js">
313
313
  <link rel="modulepreload" crossorigin href="/assets/settings-2-CE3ELQyk.js">
314
- <link rel="modulepreload" crossorigin href="/assets/pwa-dXn0s_lD.js">
315
- <link rel="modulepreload" crossorigin href="/assets/login-page-CL0SrBCf.js">
314
+ <link rel="modulepreload" crossorigin href="/assets/pwa-D_nZUwG0.js">
315
+ <link rel="modulepreload" crossorigin href="/assets/login-page-f8qQ4xKY.js">
316
316
  <link rel="stylesheet" crossorigin href="/assets/app-presenter-provider-jNGlmBLe.css">
317
- <link rel="stylesheet" crossorigin href="/assets/main-CLwCjK9U.css">
317
+ <link rel="stylesheet" crossorigin href="/assets/main-D2dWy8fM.css">
318
318
  </head>
319
319
 
320
320
  <body>
Binary file
@@ -5,13 +5,13 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <meta name="theme-color" content="#ffffff" />
7
7
  <title>Panel App · NextClaw</title>
8
- <script type="module" crossorigin src="/assets/panelStandalone-D2CqTyi_.js"></script>
8
+ <script type="module" crossorigin src="/assets/panelStandalone-By-6dDXS.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-DF37yw5_.js">
10
10
  <link rel="modulepreload" crossorigin href="/assets/utils-CBZPzC_b.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/client-BtGBwLTs.js">
12
12
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-ca-nBW7U.js">
13
- <link rel="modulepreload" crossorigin href="/assets/i18n-ClHx6jwj.js">
14
- <link rel="modulepreload" crossorigin href="/assets/api-BWFOIoUm.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/i18n-20rSH40D.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/api-DqzQ-_3w.js">
15
15
  <link rel="modulepreload" crossorigin href="/assets/dist-BiIcnf9j.js">
16
16
  <link rel="modulepreload" crossorigin href="/assets/es2015-cuwbYI-l.js">
17
17
  <link rel="modulepreload" crossorigin href="/assets/dist-czPa8xFO.js">
@@ -20,8 +20,8 @@
20
20
  <link rel="modulepreload" crossorigin href="/assets/dialog-Xe73hpQz.js">
21
21
  <link rel="modulepreload" crossorigin href="/assets/boxes-D6uPnkGo.js">
22
22
  <link rel="modulepreload" crossorigin href="/assets/use-panel-app-scroll-restoration-ZnicIfo3.js">
23
- <link rel="modulepreload" crossorigin href="/assets/theme-provider-BvpXGXWH.js">
24
- <link rel="modulepreload" crossorigin href="/assets/i18n-provider-C1NxogO4.js">
23
+ <link rel="modulepreload" crossorigin href="/assets/theme-provider-DzvAi3pe.js">
24
+ <link rel="modulepreload" crossorigin href="/assets/i18n-provider-BPRq6S7O.js">
25
25
  <link rel="stylesheet" crossorigin href="/assets/panelStandalone-Y91OJkgV.css">
26
26
  </head>
27
27
  <body>
Binary file