@xopcai/xopc 0.0.309 → 0.0.312

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 (500) hide show
  1. package/README.md +2 -1
  2. package/README.zh-CN.md +2 -1
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/telegram/xopc.extension.json +1 -1
  5. package/dist/gateway/static/root/assets/{activity-store-XKNYlFUI.js → activity-store-DVUTs1fk.js} +1 -1
  6. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-1S2TFECE.js → agent-avatar-dicebear-BVIJMP8w.js} +1 -1
  7. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-K3hTmu9d.js +1 -0
  8. package/dist/gateway/static/root/assets/{agents-CPqUMtCL.js → agents-D6g_SeWI.js} +1 -1
  9. package/dist/gateway/static/root/assets/{api-BEUEE4f2.js → api-_aHQA8bd.js} +1 -1
  10. package/dist/gateway/static/root/assets/app-link-CKueEVbT.js +1 -0
  11. package/dist/gateway/static/root/assets/{app-management-settings-panel-CgVBSqzu.js → app-management-settings-panel-CLg_aXYG.js} +1 -1
  12. package/dist/gateway/static/root/assets/{appearance-settings-CoWdCokb.js → appearance-settings-CU52MfIT.js} +1 -1
  13. package/dist/gateway/static/root/assets/apps-page-ZpA1-6ad.js +1 -0
  14. package/dist/gateway/static/root/assets/{archive-plugin-C3ZA6LRS.js → archive-plugin-CHO3heHX.js} +1 -1
  15. package/dist/gateway/static/root/assets/{attachment-load-CdgS6_zy.js → attachment-load-BsmsBCI2.js} +1 -1
  16. package/dist/gateway/static/root/assets/{automations-page-BtHL2hpg.js → automations-page-CftigJlf.js} +1 -1
  17. package/dist/gateway/static/root/assets/automations-workspace-IEAxKRME.js +7 -0
  18. package/dist/gateway/static/root/assets/{binary-plugins-CiDhtq_H.js → binary-plugins-CRCLWBo2.js} +1 -1
  19. package/dist/gateway/static/root/assets/{block-editor-Br00T83w.js → block-editor-D0LDiOTT.js} +3 -3
  20. package/dist/gateway/static/root/assets/{browser-automation-inputs-D2tILykA.js → browser-automation-inputs-C611KRBx.js} +1 -1
  21. package/dist/gateway/static/root/assets/{browser-automations-page-BVuEmryB.js → browser-automations-page-Djyv3vy-.js} +2 -2
  22. package/dist/gateway/static/root/assets/browser-settings-page-CU4VWsmX.js +3 -0
  23. package/dist/gateway/static/root/assets/capabilities-settings-panel-C9XQk3HL.js +8 -0
  24. package/dist/gateway/static/root/assets/channels-settings-Bqlhjooi.js +1 -0
  25. package/dist/gateway/static/root/assets/{chat-terminal-dock-JsMtzDao.js → chat-terminal-dock-CIsKqdET.js} +2 -2
  26. package/dist/gateway/static/root/assets/{chunk-KS7C4IRE-Cq1tE_3b.js → chunk-KS7C4IRE-BMYIfy9x.js} +2 -2
  27. package/dist/gateway/static/root/assets/computer-settings-page-C0YL9J7m.js +1 -0
  28. package/dist/gateway/static/root/assets/{connector-service-page-DZFNUTiN.js → connector-service-page-BmH17JnO.js} +1 -1
  29. package/dist/gateway/static/root/assets/connectors-page-zkx8Q-e6.js +2 -0
  30. package/dist/gateway/static/root/assets/date-picker-CDsfv8R0.js +1 -0
  31. package/dist/gateway/static/root/assets/{dependency-picker-B-BcuG1y.js → dependency-picker-DvhPj3CZ.js} +1 -1
  32. package/dist/gateway/static/root/assets/{desktop-pet-CdBBhhdY.js → desktop-pet-Cyg8XMpL.js} +1 -1
  33. package/dist/gateway/static/root/assets/desktop-pet-settings-CE4GOlMM.js +1 -0
  34. package/dist/gateway/static/root/assets/device-pairing-wizard-CdKJqnnw.js +1 -0
  35. package/dist/gateway/static/root/assets/{extension-debug-page-BFp5eKtY.js → extension-debug-page-D-AVJU3q.js} +1 -1
  36. package/dist/gateway/static/root/assets/{extension-page-DL3vyyH6.js → extension-page-DrFoQ9xt.js} +1 -1
  37. package/dist/gateway/static/root/assets/{extension-settings-page-BXtvdAsY.js → extension-settings-page-DxWjESC1.js} +1 -1
  38. package/dist/gateway/static/root/assets/{gateway-config-swr-xAOGtenO.js → gateway-config-swr-DUDX42qY.js} +1 -1
  39. package/dist/gateway/static/root/assets/{gateway-realtime-BuaTsMSi.js → gateway-realtime-CGOW0-b4.js} +1 -1
  40. package/dist/gateway/static/root/assets/gateway-realtime-store-D4um_sV7.js +1 -0
  41. package/dist/gateway/static/root/assets/gateway-settings-CgXp2zq4.js +1 -0
  42. package/dist/gateway/static/root/assets/{gateway-startup-retry-BwDxKHd4.js → gateway-startup-retry-Cf8OxlvY.js} +1 -1
  43. package/dist/gateway/static/root/assets/home-page-D6Idk732.js +1 -0
  44. package/dist/gateway/static/root/assets/{image-generation-api-wGMeI_yW.js → image-generation-api-D2YorS--.js} +1 -1
  45. package/dist/gateway/static/root/assets/{imports-page-zexFT5Rq.js → imports-page-BKucJlXI.js} +1 -1
  46. package/dist/gateway/static/root/assets/index-1wIKA-kM.css +1 -0
  47. package/dist/gateway/static/root/assets/index-PFQHPGgi.js +79 -0
  48. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CutG9zLh.js → keyboard-shortcuts-settings-BxLXD-yU.js} +1 -1
  49. package/dist/gateway/static/root/assets/local-app-workbench-page-BmAqTRb4.js +2 -0
  50. package/dist/gateway/static/root/assets/{local-apps-page-CJy6I7Dt.js → local-apps-page-BAsQJQKJ.js} +1 -1
  51. package/dist/gateway/static/root/assets/{locale-store-DPZ79W1-.js → locale-store-DA0Z5jM_.js} +1 -1
  52. package/dist/gateway/static/root/assets/{logs-page-egGcPHNi.js → logs-page-ZjVYXXyM.js} +2 -2
  53. package/dist/gateway/static/root/assets/{management-settings-BQhIOELc.js → management-settings-CSTkYVOZ.js} +1 -1
  54. package/dist/gateway/static/root/assets/markdown-view-DSjfHfaW.css +1 -0
  55. package/dist/gateway/static/root/assets/{markdown-view-p2P5hP1U.js → markdown-view-DYGPxPee.js} +1 -1
  56. package/dist/gateway/static/root/assets/{media-plugins-CsBylqlN.js → media-plugins-CQtQzLyg.js} +1 -1
  57. package/dist/gateway/static/root/assets/messages-4BtQKYlM.js +3 -0
  58. package/dist/gateway/static/root/assets/note-detail-panel-DuXCt-MM.js +5 -0
  59. package/dist/gateway/static/root/assets/notes-page-BjOgBVq5.js +8 -0
  60. package/dist/gateway/static/root/assets/{page-tabs-ChQ4jJFs.js → page-tabs-B6DjkyMM.js} +1 -1
  61. package/dist/gateway/static/root/assets/{popover-select-9i-ZtHXL.js → popover-select-B-GDnZO9.js} +1 -1
  62. package/dist/gateway/static/root/assets/preview-open-alternatives-Dn57uLhr.js +1 -0
  63. package/dist/gateway/static/root/assets/product-delivery-CrAI8ZEa.js +1 -0
  64. package/dist/gateway/static/root/assets/{product-open-page-BADxWEdP.js → product-open-page-H2YMk8TY.js} +1 -1
  65. package/dist/gateway/static/root/assets/project-detail-page-0zi4-i9X.js +1 -0
  66. package/dist/gateway/static/root/assets/projects-page-B18OxmJj.js +1 -0
  67. package/dist/gateway/static/root/assets/{registry-api-B_e_nZSN.js → registry-api-C0DCx3wv.js} +1 -1
  68. package/dist/gateway/static/root/assets/remote-access-hub-z-DxbuaE.js +1 -0
  69. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-D-pwiIyp.js → runtime-tools-settings-panel-DGsBTbo6.js} +2 -2
  70. package/dist/gateway/static/root/assets/scenes-page-Bgba03B_.js +1 -0
  71. package/dist/gateway/static/root/assets/{schema-form-IWmb05DX.js → schema-form-CblI9WUA.js} +1 -1
  72. package/dist/gateway/static/root/assets/sessions-page-B1t3bMsm.js +1 -0
  73. package/dist/gateway/static/root/assets/settings-advanced-gate-CBX0Ezhf.js +1 -0
  74. package/dist/gateway/static/root/assets/{settings-form-section-B0veRBZs.js → settings-form-section-BAaVyxJH.js} +1 -1
  75. package/dist/gateway/static/root/assets/settings-page-CKNPbm5q.js +1 -0
  76. package/dist/gateway/static/root/assets/settings-page-layout-DqNCGKxQ.js +1 -0
  77. package/dist/gateway/static/root/assets/{settings-shell-layer-context-DCp6ykjQ.js → settings-shell-layer-context-BTQUDoJ2.js} +1 -1
  78. package/dist/gateway/static/root/assets/setup-status-panel-Bw71C2X3.js +1 -0
  79. package/dist/gateway/static/root/assets/{share-preview-page-CirpgkfD.js → share-preview-page-BzMfp_HM.js} +1 -1
  80. package/dist/gateway/static/root/assets/shares-settings-BoVDQolc.js +1 -0
  81. package/dist/gateway/static/root/assets/skill-reload-api-DtTptpAt.js +1 -0
  82. package/dist/gateway/static/root/assets/skills-page-DIht92q6.js +2 -0
  83. package/dist/gateway/static/root/assets/{skills-page.utils-B42mpWKV.js → skills-page.utils-DLYRiEn3.js} +1 -1
  84. package/dist/gateway/static/root/assets/system-settings-panel-yYs4YgYk.js +1 -0
  85. package/dist/gateway/static/root/assets/task-detail-page-vgkiGo-D.js +1 -0
  86. package/dist/gateway/static/root/assets/{theme-store-BFbj_2Tu.js → theme-store-CegIlB8d.js} +1 -1
  87. package/dist/gateway/static/root/assets/tunnel-api-BasDYxvx.js +1 -0
  88. package/dist/gateway/static/root/assets/use-autosave-CWAUHhcb.js +1 -0
  89. package/dist/gateway/static/root/assets/user-model-page-CAGafNfP.js +2 -0
  90. package/dist/gateway/static/root/assets/{voice-api-key-field-BZbKQ8HT.js → voice-api-key-field-Kc4UlxZs.js} +1 -1
  91. package/dist/gateway/static/root/assets/{voice-config-api-SKCeQLrH.js → voice-config-api-DTyMdGOR.js} +1 -1
  92. package/dist/gateway/static/root/assets/{work-discovery-overlay-BRVTTXNG.js → work-discovery-overlay-BPC_c9dO.js} +1 -1
  93. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-D2kuwv5e.js → workflow-run-setup-panel-DBTciOrq.js} +2 -2
  94. package/dist/gateway/static/root/assets/workflows-page-CSxHVs1p.js +6 -0
  95. package/dist/gateway/static/root/connector-icons/SOURCES.md +0 -2
  96. package/dist/gateway/static/root/index.html +18 -21
  97. package/dist/gateway/static/root/notification-sw.js +1 -1
  98. package/dist/package.js +1 -1
  99. package/dist/packages/gateway-contract/src/notifications.js +12 -11
  100. package/dist/packages/gateway-contract/src/proactive.js +6 -6
  101. package/dist/packages/gateway-contract/src/product-delivery.js +1 -0
  102. package/dist/packages/gateway-contract/src/project-monitoring.js +4 -4
  103. package/dist/packages/gateway-contract/src/project-operating.js +1 -4
  104. package/dist/src/agent/agent-manager.d.ts +2 -6
  105. package/dist/src/agent/agent-manager.js +2 -1
  106. package/dist/src/agent/background-review/run-background-review.js +1 -1
  107. package/dist/src/agent/commands/command-registry.js +1 -1
  108. package/dist/src/agent/context/execution-scope.js +1 -1
  109. package/dist/src/agent/external-tools/cliProvider.d.ts +47 -0
  110. package/dist/src/agent/external-tools/cliProvider.js +317 -0
  111. package/dist/src/agent/external-tools/composio-provider.js +3 -3
  112. package/dist/src/agent/external-tools/gateway-tools.js +8 -2
  113. package/dist/src/agent/external-tools/index.js +6 -0
  114. package/dist/src/agent/external-tools/service.js +1 -1
  115. package/dist/src/agent/external-tools/types.d.ts +1 -1
  116. package/dist/src/agent/external-tools/types.js +1 -0
  117. package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
  118. package/dist/src/agent/mcp/oauth/mcp-oauth-manager.js +1 -1
  119. package/dist/src/agent/memory/turn-provenance.js +2 -1
  120. package/dist/src/agent/service/parse-outbound-session-key.js +1 -1
  121. package/dist/src/agent/service.js +1 -0
  122. package/dist/src/agent/service.types.d.ts +2 -0
  123. package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
  124. package/dist/src/agent/tool-manuals/xopc-use.js +43 -16
  125. package/dist/src/agent/tools/factory.d.ts +2 -0
  126. package/dist/src/agent/tools/factory.js +3 -2
  127. package/dist/src/agent/tools/search/providers/xopc-cloud.d.ts +20 -0
  128. package/dist/src/agent/tools/search/providers/xopc-cloud.js +56 -0
  129. package/dist/src/agent/tools/search/registry.d.ts +4 -2
  130. package/dist/src/agent/tools/search/registry.js +5 -3
  131. package/dist/src/agent/tools/xopc-use-tool.d.ts +4 -2
  132. package/dist/src/agent/tools/xopc-use-tool.js +104 -44
  133. package/dist/src/automations/service/automation-service.d.ts +0 -4
  134. package/dist/src/automations/service/automation-service.js +0 -31
  135. package/dist/src/capabilities/store-connector.js +46 -0
  136. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  137. package/dist/src/cli/commands/project.js +1 -1
  138. package/dist/src/config/index.js +2 -2
  139. package/dist/src/config/schema.d.ts +13 -4
  140. package/dist/src/config/schema.js +10 -14
  141. package/dist/src/config/web-patch.js +0 -5
  142. package/dist/src/connectors/account-selection.d.ts +14 -0
  143. package/dist/src/connectors/account-selection.js +26 -0
  144. package/dist/src/connectors/china-catalog.js +93 -226
  145. package/dist/src/connectors/cli/adapterRegistry.d.ts +4 -0
  146. package/dist/src/connectors/cli/adapterRegistry.js +26 -0
  147. package/dist/src/connectors/cli/adapters/lark.d.ts +2 -0
  148. package/dist/src/connectors/cli/adapters/lark.js +143 -0
  149. package/dist/src/connectors/cli/adapters/larkShortcuts.d.ts +3 -0
  150. package/dist/src/connectors/cli/adapters/larkShortcuts.js +64 -0
  151. package/dist/src/connectors/cli/adapters/wecom.d.ts +2 -0
  152. package/dist/src/connectors/cli/adapters/wecom.js +97 -0
  153. package/dist/src/connectors/cli/adapters/wps365/bundle.js +575 -0
  154. package/dist/src/connectors/cli/adapters/wps365.d.ts +2 -0
  155. package/dist/src/connectors/cli/adapters/wps365.js +115 -0
  156. package/dist/src/connectors/cli/assets.d.ts +3 -0
  157. package/dist/src/connectors/cli/assets.js +44 -0
  158. package/dist/src/connectors/cli/authorization.d.ts +16 -0
  159. package/dist/src/connectors/cli/authorization.js +184 -0
  160. package/dist/src/connectors/cli/distributions.d.ts +4 -0
  161. package/dist/src/connectors/cli/distributions.js +69 -0
  162. package/dist/src/connectors/cli/installer.d.ts +5 -0
  163. package/dist/src/connectors/cli/installer.js +102 -0
  164. package/dist/src/connectors/cli/lifecycle.d.ts +1 -0
  165. package/dist/src/connectors/cli/lifecycle.js +19 -0
  166. package/dist/src/connectors/cli/process.d.ts +18 -0
  167. package/dist/src/connectors/cli/process.js +100 -0
  168. package/dist/src/connectors/cli/protocol.d.ts +10 -0
  169. package/dist/src/connectors/cli/protocol.js +63 -0
  170. package/dist/src/connectors/cli/runtime.d.ts +10 -0
  171. package/dist/src/connectors/cli/runtime.js +93 -0
  172. package/dist/src/connectors/cli/store.d.ts +35 -0
  173. package/dist/src/connectors/cli/store.js +121 -0
  174. package/dist/src/connectors/cli/types.d.ts +73 -0
  175. package/dist/src/connectors/composio-backends.js +1 -1
  176. package/dist/src/connectors/composio-sessions.d.ts +1 -0
  177. package/dist/src/connectors/composio-sessions.js +8 -3
  178. package/dist/src/connectors/composio.js +1 -1
  179. package/dist/src/connectors/connection-candidates.js +22 -3
  180. package/dist/src/connectors/connection-recovery-service.d.ts +1 -0
  181. package/dist/src/connectors/connection-recovery-service.js +53 -8
  182. package/dist/src/connectors/health.js +52 -0
  183. package/dist/src/connectors/instances.js +5 -1
  184. package/dist/src/connectors/lifecycle.js +2 -0
  185. package/dist/src/connectors/principal.js +2 -1
  186. package/dist/src/connectors/runtime-adapter-registry.js +31 -0
  187. package/dist/src/connectors/types.d.ts +13 -1
  188. package/dist/src/connectors/usage.js +1 -1
  189. package/dist/src/connectors/workflow-preflight.js +8 -4
  190. package/dist/src/extensions/install.js +1 -1
  191. package/dist/src/gateway/hono/app.d.ts +2 -0
  192. package/dist/src/gateway/hono/app.js +4 -2
  193. package/dist/src/gateway/hono/lib/config-payload.d.ts +3 -15
  194. package/dist/src/gateway/hono/lib/config-payload.js +1 -11
  195. package/dist/src/gateway/hono/routes/cli-connectors.d.ts +3 -0
  196. package/dist/src/gateway/hono/routes/cli-connectors.js +219 -0
  197. package/dist/src/gateway/hono/routes/config-patch/gateway.d.ts +2 -2
  198. package/dist/src/gateway/hono/routes/config-patch/gateway.js +0 -59
  199. package/dist/src/gateway/hono/routes/config.js +0 -16
  200. package/dist/src/gateway/hono/routes/connectors.js +21 -22
  201. package/dist/src/gateway/hono/routes/deps.d.ts +2 -0
  202. package/dist/src/gateway/hono/routes/lazy-bundles.js +4 -17
  203. package/dist/src/gateway/hono/routes/projects.js +1 -1
  204. package/dist/src/gateway/hono/routes/public-gateway.js +0 -1
  205. package/dist/src/gateway/hono/routes/scenes.d.ts +3 -0
  206. package/dist/src/gateway/hono/routes/scenes.js +142 -0
  207. package/dist/src/gateway/hono/routes/tasks.js +0 -46
  208. package/dist/src/gateway/hono/routes/user-model.js +54 -1
  209. package/dist/src/gateway/scenes/browserNotifications.d.ts +4 -0
  210. package/dist/src/gateway/scenes/browserNotifications.js +54 -0
  211. package/dist/src/gateway/scenes/host.d.ts +34 -0
  212. package/dist/src/gateway/scenes/host.js +130 -0
  213. package/dist/src/gateway/scenes/mailContext.d.ts +32 -0
  214. package/dist/src/gateway/scenes/mailContext.js +235 -0
  215. package/dist/src/gateway/security/gateway-scopes.js +0 -4
  216. package/dist/src/gateway/security/index.js +1 -1
  217. package/dist/src/gateway/service/config-coordinator.d.ts +1 -10
  218. package/dist/src/gateway/service/config-coordinator.js +0 -16
  219. package/dist/src/gateway/service/run-gateway-agent.js +1 -1
  220. package/dist/src/gateway/service.d.ts +4 -25
  221. package/dist/src/gateway/service.js +44 -99
  222. package/dist/src/gateway/session-context-summary.js +2 -1
  223. package/dist/src/heartbeat/index.js +1 -1
  224. package/dist/src/infra/unhandled-rejections.js +1 -1
  225. package/dist/src/migrations/runner.js +1 -4
  226. package/dist/src/notifications/browser-endpoint.d.ts +2 -0
  227. package/dist/src/notifications/browser-endpoint.js +13 -0
  228. package/dist/src/notifications/browserSubscriptions.d.ts +20 -0
  229. package/dist/src/notifications/browserSubscriptions.js +59 -0
  230. package/dist/src/notifications/browserTransport.d.ts +9 -0
  231. package/dist/src/notifications/browserTransport.js +64 -0
  232. package/dist/src/notifications/dispatch.d.ts +46 -0
  233. package/dist/src/notifications/dispatch.js +109 -0
  234. package/dist/src/notifications/domain-delivery.d.ts +21 -0
  235. package/dist/src/notifications/planner.js +0 -36
  236. package/dist/src/notifications/quietHours.d.ts +6 -0
  237. package/dist/src/notifications/quietHours.js +23 -0
  238. package/dist/src/notifications/resultOutbox.d.ts +23 -0
  239. package/dist/src/notifications/resultOutbox.js +49 -0
  240. package/dist/src/notifications/service.d.ts +18 -4
  241. package/dist/src/notifications/service.js +42 -61
  242. package/dist/src/notifications/store.d.ts +2 -1
  243. package/dist/src/notifications/store.js +7 -8
  244. package/dist/src/projects/project-service.d.ts +1 -4
  245. package/dist/src/projects/project-service.js +2 -30
  246. package/dist/src/projects/workspace.js +1 -1
  247. package/dist/src/providers/model-catalog-persistence.js +19 -1
  248. package/dist/src/providers/model-catalog-store.js +1 -0
  249. package/dist/src/providers/model-catalog-types.d.ts +17 -0
  250. package/dist/src/providers/xopc-cloud-model-source.js +27 -0
  251. package/dist/src/scenes/agentExecutor.d.ts +8 -0
  252. package/dist/src/scenes/agentExecutor.js +63 -0
  253. package/dist/src/scenes/contracts.d.ts +118 -0
  254. package/dist/src/scenes/contracts.js +145 -0
  255. package/dist/src/scenes/execution.d.ts +56 -0
  256. package/dist/src/scenes/execution.js +168 -0
  257. package/dist/src/scenes/httpServices.d.ts +34 -0
  258. package/dist/src/scenes/inbox.d.ts +16 -0
  259. package/dist/src/scenes/inbox.js +68 -0
  260. package/dist/src/scenes/mailContext.d.ts +20 -0
  261. package/dist/src/scenes/mailContext.js +106 -0
  262. package/dist/src/scenes/mailObservations.d.ts +20 -0
  263. package/dist/src/scenes/mailObservations.js +107 -0
  264. package/dist/src/scenes/maintenance.d.ts +3 -0
  265. package/dist/src/scenes/maintenance.js +24 -0
  266. package/dist/src/scenes/metrics.d.ts +37 -0
  267. package/dist/src/scenes/metrics.js +100 -0
  268. package/dist/src/scenes/model.d.ts +3 -0
  269. package/dist/src/scenes/model.js +10 -0
  270. package/dist/src/scenes/notificationEligibility.d.ts +17 -0
  271. package/dist/src/scenes/notificationEligibility.js +72 -0
  272. package/dist/src/scenes/notificationPublication.d.ts +7 -0
  273. package/dist/src/scenes/notificationPublication.js +43 -0
  274. package/dist/src/scenes/preferences.d.ts +40 -0
  275. package/dist/src/scenes/preferences.js +108 -0
  276. package/dist/src/scenes/readiness.d.ts +7 -0
  277. package/dist/src/scenes/readiness.js +20 -0
  278. package/dist/src/scenes/repository.d.ts +174 -0
  279. package/dist/src/scenes/repository.js +740 -0
  280. package/dist/src/scenes/resultNotifications.d.ts +17 -0
  281. package/dist/src/scenes/resultNotifications.js +204 -0
  282. package/dist/src/scenes/runtime.d.ts +25 -0
  283. package/dist/src/scenes/runtime.js +101 -0
  284. package/dist/src/scenes/schedule.d.ts +9 -0
  285. package/dist/src/scenes/schedule.js +45 -0
  286. package/dist/src/scenes/service.d.ts +29 -0
  287. package/dist/src/scenes/service.js +116 -0
  288. package/dist/src/scenes/templates.d.ts +64 -0
  289. package/dist/src/scenes/templates.js +76 -0
  290. package/dist/src/scenes/userNotes.d.ts +10 -0
  291. package/dist/src/scenes/userNotes.js +34 -0
  292. package/dist/src/session/resolve-session.js +2 -1
  293. package/dist/src/session/store.js +2 -1
  294. package/dist/src/share/share-config.js +0 -5
  295. package/dist/src/share/site-share-config.js +0 -5
  296. package/dist/src/storage/sqlite/connection-wait-repository.js +20 -7
  297. package/dist/src/storage/sqlite/connection.js +1 -1
  298. package/dist/src/storage/sqlite/connector-account-repository.js +1 -0
  299. package/dist/src/storage/sqlite/connector-sync-policy-repository.d.ts +0 -4
  300. package/dist/src/storage/sqlite/connector-sync-policy-repository.js +3 -17
  301. package/dist/src/storage/sqlite/conversation-repository.js +2 -1
  302. package/dist/src/storage/sqlite/index.js +2 -1
  303. package/dist/src/storage/sqlite/migrations/187_cli_connectors.sql +34 -0
  304. package/dist/src/storage/sqlite/migrations/188_scene_storage.sql +2 -0
  305. package/dist/src/storage/sqlite/migrations/189_scene_source_health.sql +8 -0
  306. package/dist/src/storage/sqlite/migrations/conversation-backup.d.ts +2 -0
  307. package/dist/src/storage/sqlite/migrations/conversation-backup.js +7 -3
  308. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  309. package/dist/src/storage/sqlite/migrations/runner.js +20 -44
  310. package/dist/src/storage/sqlite/migrations/scene-reset.d.ts +5 -0
  311. package/dist/src/storage/sqlite/migrations/scene-reset.js +40 -0
  312. package/dist/src/storage/sqlite/scenes-schema.d.ts +8 -0
  313. package/dist/src/storage/sqlite/scenes-schema.js +61 -0
  314. package/dist/src/storage/sqlite/schema.js +4 -10
  315. package/dist/src/storage/sqlite/schemas/notifications.sql +65 -0
  316. package/dist/src/storage/sqlite/schemas/scenes.sql +212 -0
  317. package/dist/src/storage/sqlite/session-read-repository.d.ts +8 -0
  318. package/dist/src/storage/sqlite/session-read-repository.js +35 -0
  319. package/dist/src/storage/sqlite/session-repository.d.ts +1 -1
  320. package/dist/src/storage/sqlite/session-repository.js +2 -25
  321. package/dist/src/storage/sqlite/sql-assets.d.ts +2 -0
  322. package/dist/src/storage/sqlite/sql-assets.js +18 -0
  323. package/dist/src/storage/sqlite/transaction.d.ts +2 -0
  324. package/dist/src/storage/sqlite/transaction.js +20 -1
  325. package/dist/src/tasks/home-query-service.d.ts +0 -2
  326. package/dist/src/tasks/home-query-service.js +13 -43
  327. package/dist/src/tasks/index.d.ts +0 -1
  328. package/dist/src/tasks/index.js +4 -5
  329. package/dist/src/tasks/project-operating-view-service.js +1 -4
  330. package/dist/src/tui/backends/embedded-backend.js +1 -1
  331. package/dist/src/tui/tui-commands.js +1 -1
  332. package/dist/src/user-model/goals.d.ts +10 -0
  333. package/dist/src/user-model/goals.js +29 -1
  334. package/dist/src/user-model/index.js +2 -2
  335. package/dist/src/voice/realtime/memory-context.js +2 -1
  336. package/dist/src/workflows/service/workflow-run-service.js +1 -1
  337. package/package.json +5 -3
  338. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-f0-YFMUz.js +0 -1
  339. package/dist/gateway/static/root/assets/api-CN4id43t.js +0 -1
  340. package/dist/gateway/static/root/assets/app-link-BiBXVEvp.js +0 -1
  341. package/dist/gateway/static/root/assets/apps-page-CexHOcWg.js +0 -1
  342. package/dist/gateway/static/root/assets/automations-workspace-onJPfmO6.js +0 -6
  343. package/dist/gateway/static/root/assets/browser-settings-page-BgVTyPFY.js +0 -3
  344. package/dist/gateway/static/root/assets/capabilities-settings-panel-Dra8wj1S.js +0 -8
  345. package/dist/gateway/static/root/assets/channels-settings-CkxiMDJ4.js +0 -1
  346. package/dist/gateway/static/root/assets/channels-status-swr-Dtder4G_.js +0 -1
  347. package/dist/gateway/static/root/assets/computer-settings-page-DHerePwo.js +0 -1
  348. package/dist/gateway/static/root/assets/connectors-page-cl9ZrV4D.js +0 -2
  349. package/dist/gateway/static/root/assets/cron-expression-DAhdv_Xv.js +0 -2
  350. package/dist/gateway/static/root/assets/date-picker-PacO1m3a.js +0 -1
  351. package/dist/gateway/static/root/assets/desktop-pet-settings-Gy03NgMI.js +0 -1
  352. package/dist/gateway/static/root/assets/device-pairing-wizard-aV25nKag.js +0 -1
  353. package/dist/gateway/static/root/assets/external-link-DjqjBmc3.js +0 -1
  354. package/dist/gateway/static/root/assets/gateway-realtime-store-BG95uGVW.js +0 -1
  355. package/dist/gateway/static/root/assets/gateway-settings-Dcr2Ikeh.js +0 -1
  356. package/dist/gateway/static/root/assets/globe-DSSGFWFn.js +0 -1
  357. package/dist/gateway/static/root/assets/heartbeat-settings-DOy3alvT.js +0 -1
  358. package/dist/gateway/static/root/assets/home-page-CDm3dGVy.js +0 -1
  359. package/dist/gateway/static/root/assets/index-D-vczw_0.css +0 -1
  360. package/dist/gateway/static/root/assets/index-DJo4DimT.js +0 -79
  361. package/dist/gateway/static/root/assets/loader-circle-CifKLtgG.js +0 -1
  362. package/dist/gateway/static/root/assets/local-app-workbench-page-CwLvTwjn.js +0 -2
  363. package/dist/gateway/static/root/assets/markdown-view-Y68dCxuc.css +0 -1
  364. package/dist/gateway/static/root/assets/messages-BiYTyLJr.js +0 -3
  365. package/dist/gateway/static/root/assets/note-detail-panel-c2k5Uz6X.js +0 -5
  366. package/dist/gateway/static/root/assets/notes-page-BLQWJMhf.js +0 -8
  367. package/dist/gateway/static/root/assets/preview-open-alternatives-9B5W7nVE.js +0 -1
  368. package/dist/gateway/static/root/assets/proactive-page-iOjI0d_e.js +0 -1
  369. package/dist/gateway/static/root/assets/product-delivery-CCC4FJ3Y.js +0 -1
  370. package/dist/gateway/static/root/assets/project-detail-page-BcxbQn2M.js +0 -1
  371. package/dist/gateway/static/root/assets/projects-page-BuSvld0O.js +0 -1
  372. package/dist/gateway/static/root/assets/remote-access-hub-CFS8LQKW.js +0 -1
  373. package/dist/gateway/static/root/assets/sessions-page-DZjc__ok.js +0 -1
  374. package/dist/gateway/static/root/assets/settings-advanced-gate-C1SM5B93.js +0 -1
  375. package/dist/gateway/static/root/assets/settings-page-CxRWyWYe.js +0 -1
  376. package/dist/gateway/static/root/assets/settings-page-layout-X1x-2Cp9.js +0 -1
  377. package/dist/gateway/static/root/assets/setup-status-panel-D9Rl7Tec.js +0 -1
  378. package/dist/gateway/static/root/assets/shares-settings-CwCThBs0.js +0 -1
  379. package/dist/gateway/static/root/assets/skill-reload-api-DG6VGbOX.js +0 -1
  380. package/dist/gateway/static/root/assets/skills-page-BdRJ2vnL.js +0 -2
  381. package/dist/gateway/static/root/assets/system-settings-panel-DXIZpAvU.js +0 -1
  382. package/dist/gateway/static/root/assets/task-detail-page-QXo9LJly.js +0 -1
  383. package/dist/gateway/static/root/assets/tunnel-api-Db2guRdW.js +0 -1
  384. package/dist/gateway/static/root/assets/use-autosave-DDY9qoXZ.js +0 -1
  385. package/dist/gateway/static/root/assets/user-model-page-CzPmMkaO.js +0 -2
  386. package/dist/gateway/static/root/assets/workflows-page-CQXtiYtq.js +0 -6
  387. package/dist/gateway/static/root/connector-icons/wps-calendar.svg +0 -14
  388. package/dist/gateway/static/root/connector-icons/wps-mail.svg +0 -7
  389. package/dist/src/connectors/source-change-publisher.d.ts +0 -17
  390. package/dist/src/connectors/source-change-publisher.js +0 -151
  391. package/dist/src/gateway/heartbeat/check-store.d.ts +0 -18
  392. package/dist/src/gateway/heartbeat/check-store.js +0 -74
  393. package/dist/src/gateway/heartbeat/index.d.ts +0 -1
  394. package/dist/src/gateway/heartbeat/index.js +0 -2
  395. package/dist/src/gateway/heartbeat/service.d.ts +0 -55
  396. package/dist/src/gateway/heartbeat/service.js +0 -228
  397. package/dist/src/gateway/hono/routes/proactive-control.d.ts +0 -3
  398. package/dist/src/gateway/hono/routes/proactive-control.js +0 -135
  399. package/dist/src/gateway/hono/routes/proactive.d.ts +0 -4
  400. package/dist/src/gateway/hono/routes/proactive.js +0 -164
  401. package/dist/src/gateway/hono/routes/workspace.d.ts +0 -3
  402. package/dist/src/gateway/hono/routes/workspace.js +0 -62
  403. package/dist/src/gateway/workspace-heartbeat-path.d.ts +0 -3
  404. package/dist/src/gateway/workspace-heartbeat-path.js +0 -14
  405. package/dist/src/migrations/conversation-routing-config.d.ts +0 -2
  406. package/dist/src/migrations/conversation-routing-config.js +0 -42
  407. package/dist/src/notifications/proactive-channel.d.ts +0 -8
  408. package/dist/src/notifications/proactive-channel.js +0 -60
  409. package/dist/src/notifications/proactive-policy.d.ts +0 -3
  410. package/dist/src/notifications/proactive-policy.js +0 -35
  411. package/dist/src/notifications/web-push.d.ts +0 -19
  412. package/dist/src/notifications/web-push.js +0 -185
  413. package/dist/src/proactive/actions/service.d.ts +0 -1
  414. package/dist/src/proactive/actions/service.js +0 -82
  415. package/dist/src/proactive/events/envelope.d.ts +0 -2
  416. package/dist/src/proactive/events/envelope.js +0 -54
  417. package/dist/src/proactive/events/product-event-bridge.d.ts +0 -7
  418. package/dist/src/proactive/events/product-event-bridge.js +0 -87
  419. package/dist/src/proactive/events/publisher.d.ts +0 -4
  420. package/dist/src/proactive/events/repository.d.ts +0 -9
  421. package/dist/src/proactive/events/repository.js +0 -63
  422. package/dist/src/proactive/events/types.d.ts +0 -44
  423. package/dist/src/proactive/events/types.js +0 -15
  424. package/dist/src/proactive/execution/agent-executor.d.ts +0 -21
  425. package/dist/src/proactive/execution/agent-executor.js +0 -125
  426. package/dist/src/proactive/execution/authorization.d.ts +0 -7
  427. package/dist/src/proactive/execution/authorization.js +0 -71
  428. package/dist/src/proactive/execution/context.d.ts +0 -49
  429. package/dist/src/proactive/execution/context.js +0 -408
  430. package/dist/src/proactive/execution/insight.d.ts +0 -14
  431. package/dist/src/proactive/execution/insight.js +0 -132
  432. package/dist/src/proactive/execution/repository.d.ts +0 -28
  433. package/dist/src/proactive/execution/repository.js +0 -211
  434. package/dist/src/proactive/execution/types.d.ts +0 -80
  435. package/dist/src/proactive/execution/worker.d.ts +0 -15
  436. package/dist/src/proactive/execution/worker.js +0 -146
  437. package/dist/src/proactive/experience.d.ts +0 -89
  438. package/dist/src/proactive/experience.js +0 -195
  439. package/dist/src/proactive/follow-ups.d.ts +0 -128
  440. package/dist/src/proactive/follow-ups.js +0 -182
  441. package/dist/src/proactive/inbox/cards.d.ts +0 -21
  442. package/dist/src/proactive/inbox/cards.js +0 -276
  443. package/dist/src/proactive/inbox/delivery.d.ts +0 -6
  444. package/dist/src/proactive/inbox/delivery.js +0 -54
  445. package/dist/src/proactive/inbox/digest.d.ts +0 -8
  446. package/dist/src/proactive/inbox/digest.js +0 -123
  447. package/dist/src/proactive/inbox/lifecycle.d.ts +0 -4
  448. package/dist/src/proactive/inbox/lifecycle.js +0 -62
  449. package/dist/src/proactive/inbox/notification-policy.d.ts +0 -1
  450. package/dist/src/proactive/inbox/notification-policy.js +0 -25
  451. package/dist/src/proactive/inbox/repository.d.ts +0 -25
  452. package/dist/src/proactive/inbox/repository.js +0 -244
  453. package/dist/src/proactive/inbox/service.d.ts +0 -23
  454. package/dist/src/proactive/inbox/service.js +0 -46
  455. package/dist/src/proactive/inbox/types.d.ts +0 -64
  456. package/dist/src/proactive/inbox/worker.d.ts +0 -13
  457. package/dist/src/proactive/inbox/worker.js +0 -71
  458. package/dist/src/proactive/index.d.ts +0 -20
  459. package/dist/src/proactive/index.js +0 -14
  460. package/dist/src/proactive/mail-thread.d.ts +0 -13
  461. package/dist/src/proactive/mail-thread.js +0 -55
  462. package/dist/src/proactive/maintenance.d.ts +0 -4
  463. package/dist/src/proactive/maintenance.js +0 -28
  464. package/dist/src/proactive/metrics.d.ts +0 -10
  465. package/dist/src/proactive/metrics.js +0 -28
  466. package/dist/src/proactive/policy/presence.d.ts +0 -2
  467. package/dist/src/proactive/policy/presence.js +0 -30
  468. package/dist/src/proactive/policy/service.d.ts +0 -54
  469. package/dist/src/proactive/policy/service.js +0 -123
  470. package/dist/src/proactive/routing/batch-repository.d.ts +0 -27
  471. package/dist/src/proactive/routing/batch-repository.js +0 -57
  472. package/dist/src/proactive/routing/matcher.d.ts +0 -5
  473. package/dist/src/proactive/routing/matcher.js +0 -57
  474. package/dist/src/proactive/routing/types.d.ts +0 -44
  475. package/dist/src/proactive/routing/types.js +0 -1
  476. package/dist/src/proactive/scenarios/control.d.ts +0 -52
  477. package/dist/src/proactive/scenarios/control.js +0 -75
  478. package/dist/src/proactive/scenarios/prompt-composer.d.ts +0 -14
  479. package/dist/src/proactive/scenarios/prompt-composer.js +0 -26
  480. package/dist/src/proactive/scenarios/repository.d.ts +0 -23
  481. package/dist/src/proactive/scenarios/repository.js +0 -174
  482. package/dist/src/proactive/scenarios/service.d.ts +0 -15
  483. package/dist/src/proactive/scenarios/service.js +0 -26
  484. package/dist/src/proactive/scenarios/types.d.ts +0 -43
  485. package/dist/src/proactive/scenarios/types.js +0 -1
  486. package/dist/src/proactive/service.d.ts +0 -25
  487. package/dist/src/proactive/service.js +0 -78
  488. package/dist/src/proactive/source-freshness.d.ts +0 -8
  489. package/dist/src/proactive/source-freshness.js +0 -28
  490. package/dist/src/proactive/status.d.ts +0 -2
  491. package/dist/src/proactive/status.js +0 -22
  492. package/dist/src/proactive/temporal/schedule.d.ts +0 -3
  493. package/dist/src/proactive/temporal/schedule.js +0 -68
  494. package/dist/src/proactive/temporal/worker.d.ts +0 -17
  495. package/dist/src/proactive/temporal/worker.js +0 -129
  496. package/dist/src/tasks/project-monitoring-service.d.ts +0 -32
  497. package/dist/src/tasks/project-monitoring-service.js +0 -118
  498. /package/dist/src/{proactive/execution → connectors/cli}/types.js +0 -0
  499. /package/dist/src/{proactive/events/publisher.js → notifications/domain-delivery.js} +0 -0
  500. /package/dist/src/{proactive/inbox/types.js → scenes/httpServices.js} +0 -0
@@ -3,13 +3,12 @@ import { TaskRunRepository, init_task_run_repository } from "./task-run-reposito
3
3
  import { TaskRepository } from "./task-repository.js";
4
4
  import { TaskConversationConflictError, TaskConversationRepository } from "./task-conversation-repository.js";
5
5
  import { TaskReadModelProjector } from "./task-read-model-projector.js";
6
- import { TaskContextRepository } from "./task-context-repository.js";
7
- import { TaskDependencyError, TaskDependencyService } from "./task-dependency-service.js";
8
- import { TaskApplicationService } from "./task-application-service.js";
9
- import { ProjectMonitoringService, decideProactiveDisposition, isInQuietHours, nextQuietHoursEnd, proactiveDispositionReason } from "./project-monitoring-service.js";
10
6
  import { resolveExecutionContext } from "./execution-context.js";
11
7
  import { AttentionGovernor } from "./attention-governor.js";
12
8
  import { HomeQueryService, buildHomeWorkbench, decisionFromTask } from "./home-query-service.js";
9
+ import { TaskContextRepository } from "./task-context-repository.js";
10
+ import { TaskDependencyError, TaskDependencyService } from "./task-dependency-service.js";
11
+ import { TaskApplicationService } from "./task-application-service.js";
13
12
  import { TaskWorkflowCoordinator } from "./task-workflow-coordinator.js";
14
13
  import { defineTaskContract } from "./task-contract-definition.js";
15
14
  import { ModelTaskContractPlanner, parseTaskContractResponse } from "./task-contract-planner.js";
@@ -26,4 +25,4 @@ import { TaskSignalService } from "./task-signal-service.js";
26
25
  init_task_change_events();
27
26
  init_task_run_repository();
28
27
  //#endregion
29
- export { AttentionGovernor, HomeQueryService, ModelTaskContractPlanner, ProjectMonitoringService, ProjectOperatingViewService, TaskApplicationService, TaskContextRepository, TaskConversationConflictError, TaskConversationRepository, TaskDeletionService, TaskDependencyError, TaskDependencyService, TaskHandoffService, TaskOutboxDispatcher, TaskReadModelProjector, TaskRepository, TaskRunCoordinator, TaskRunDispatcher, TaskRunRepository, TaskSignalService, TaskValueMetricsService, TaskWorkflowCoordinator, assembleTaskContext, buildHomeWorkbench, buildTaskExecutionDirective, decideProactiveDisposition, decisionFromTask, defineTaskContract, enqueueTaskAttentionRequiredEvent, enqueueTaskChanged, enqueueTaskChangedEvent, getTaskContextManifest, getTaskExecutionBrief, isInQuietHours, nextQuietHoursEnd, parseTaskContractResponse, proactiveDispositionReason, resolveExecutionContext, summarizeProjectOperatingView };
28
+ export { AttentionGovernor, HomeQueryService, ModelTaskContractPlanner, ProjectOperatingViewService, TaskApplicationService, TaskContextRepository, TaskConversationConflictError, TaskConversationRepository, TaskDeletionService, TaskDependencyError, TaskDependencyService, TaskHandoffService, TaskOutboxDispatcher, TaskReadModelProjector, TaskRepository, TaskRunCoordinator, TaskRunDispatcher, TaskRunRepository, TaskSignalService, TaskValueMetricsService, TaskWorkflowCoordinator, assembleTaskContext, buildHomeWorkbench, buildTaskExecutionDirective, decisionFromTask, defineTaskContract, enqueueTaskAttentionRequiredEvent, enqueueTaskChanged, enqueueTaskChangedEvent, getTaskContextManifest, getTaskExecutionBrief, parseTaskContractResponse, resolveExecutionContext, summarizeProjectOperatingView };
@@ -2,7 +2,6 @@ import { TaskRunRepository, init_task_run_repository } from "./task-run-reposito
2
2
  import { TaskRepository } from "./task-repository.js";
3
3
  import { TaskReadModelProjector } from "./task-read-model-projector.js";
4
4
  import { TaskDependencyService } from "./task-dependency-service.js";
5
- import { ProjectMonitoringService } from "./project-monitoring-service.js";
6
5
  //#region src/tasks/project-operating-view-service.ts
7
6
  init_task_run_repository();
8
7
  function summarizeProjectOperatingView(view) {
@@ -37,7 +36,6 @@ function summarizeProjectOperatingView(view) {
37
36
  var ProjectOperatingViewService = class {
38
37
  #tasks = new TaskRepository();
39
38
  #runs = new TaskRunRepository();
40
- #monitoring = new ProjectMonitoringService();
41
39
  #projector = new TaskReadModelProjector();
42
40
  #dependencies = new TaskDependencyService();
43
41
  constructor(projects) {
@@ -100,8 +98,7 @@ var ProjectOperatingViewService = class {
100
98
  health: cards.length === 0 ? "empty" : attentionCount > 0 ? "attention" : "healthy",
101
99
  summary: cards.length === 0 ? "No tasks yet" : `${cards.filter(moving).length} moving, ${attentionCount} need attention`,
102
100
  recommendedAction: cards.find(needsUser)?.attention[0]?.summary ?? cards.find((card) => card.attention.length > 0)?.attention[0]?.summary ?? cards.find(moving)?.title ?? cards.find((card) => card.phase === "ready" && card.allowedCommands.includes("start"))?.title ?? cards.find((card) => card.phase === "backlog" && card.operationalState === "idle")?.title
103
- },
104
- monitoring: this.#monitoring.get(project.id)
101
+ }
105
102
  };
106
103
  }
107
104
  };
@@ -2,7 +2,7 @@ import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
3
  import { openXopcDatabase } from "../../storage/sqlite/connection.js";
4
4
  import { appendComposerInputHistory, listComposerInputHistory } from "../../storage/sqlite/composer-input-history-repository.js";
5
- import { getSessionMetadata } from "../../storage/sqlite/session-repository.js";
5
+ import { getSessionMetadata } from "../../storage/sqlite/session-read-repository.js";
6
6
  import "../../storage/sqlite/index.js";
7
7
  import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
8
8
  import { init_agent_scope, listAgentEntries, normalizeAgentId } from "../../agent/agent-scope.js";
@@ -1,5 +1,5 @@
1
1
  import { closeXopcDatabase, isXopcDatabaseOpen, openXopcDatabase } from "../storage/sqlite/connection.js";
2
- import { getSessionMetadata } from "../storage/sqlite/session-repository.js";
2
+ import { getSessionMetadata } from "../storage/sqlite/session-read-repository.js";
3
3
  import "../storage/sqlite/index.js";
4
4
  import { init_agent_session_key, isValidAgentId, normalizeAgentId } from "../routing/agent-session-key.js";
5
5
  import { resolveConfigPath } from "../config/paths.js";
@@ -47,6 +47,11 @@ export declare function createUserGoal(input: {
47
47
  now?: number;
48
48
  }): UserGoal;
49
49
  export declare function setUserGoalStatus(id: string, status: UserGoalStatus, now?: number): UserGoal | undefined;
50
+ export declare function updateUserGoal(id: string, input: {
51
+ title: string;
52
+ desiredOutcome: string;
53
+ targetAt?: number;
54
+ }, now?: number): UserGoal | undefined;
50
55
  export declare function listPriorityWindows(principalId?: string): UserPriorityWindow[];
51
56
  export declare function createPriorityWindow(input: {
52
57
  targetType: UserPriorityWindow['targetType'];
@@ -60,3 +65,8 @@ export declare function createPriorityWindow(input: {
60
65
  declaredImportance?: number;
61
66
  now?: number;
62
67
  }): UserPriorityWindow;
68
+ export declare function updatePriorityWindow(id: string, input: {
69
+ targetId?: string;
70
+ validTo?: number;
71
+ status?: UserPriorityWindow['status'];
72
+ }, now?: number): UserPriorityWindow | undefined;
@@ -53,6 +53,22 @@ function createUserGoal(input) {
53
53
  function setUserGoalStatus(id, status, now = Date.now()) {
54
54
  return getSqliteDatabase().prepare(`UPDATE user_goals SET status = ?, updated_at = ? WHERE goal_id = ?`).run(status, now, id).changes ? listUserGoals().find((goal) => goal.id === id) : void 0;
55
55
  }
56
+ function updateUserGoal(id, input, now = Date.now()) {
57
+ const current = listUserGoals().find((goal) => goal.id === id);
58
+ if (!current) return void 0;
59
+ const title = input.title.trim();
60
+ const desiredOutcome = input.desiredOutcome.trim();
61
+ if (!title || !desiredOutcome) throw new Error("Goal title and desired outcome are required.");
62
+ const revisionId = randomUUID();
63
+ runSqliteWriteTransaction((db) => {
64
+ db.prepare(`INSERT INTO user_goal_revisions (
65
+ revision_id, goal_id, title, desired_outcome, created_by, change_reason, created_at
66
+ ) VALUES (?, ?, ?, ?, 'user', 'Goal edited by user.', ?)`).run(revisionId, id, title, desiredOutcome, now);
67
+ db.prepare(`UPDATE user_goals SET current_revision_id = ?, target_at = ?, updated_at = ?
68
+ WHERE goal_id = ?`).run(revisionId, input.targetAt ?? current.targetAt ?? null, now, id);
69
+ });
70
+ return listUserGoals().find((goal) => goal.id === id);
71
+ }
56
72
  function listPriorityWindows(principalId = USER_MODEL_PRINCIPAL_ID) {
57
73
  return getSqliteDatabase().prepare(`SELECT * FROM user_priority_windows
58
74
  WHERE principal_id = ? ORDER BY valid_from DESC`).all(principalId).map((row) => ({
@@ -88,5 +104,17 @@ function createPriorityWindow(input) {
88
104
  ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'active', ?, ?)`).run(id, USER_MODEL_PRINCIPAL_ID, input.targetType, input.targetId.trim(), input.rank, input.declaredImportance ?? null, input.urgency, input.scope.type, input.scope.id ?? null, input.validFrom, input.validTo, input.reviewAt ?? input.validTo, now, now);
89
105
  return listPriorityWindows().find((item) => item.id === id);
90
106
  }
107
+ function updatePriorityWindow(id, input, now = Date.now()) {
108
+ const current = listPriorityWindows().find((item) => item.id === id);
109
+ if (!current) return void 0;
110
+ const targetId = input.targetId?.trim() || current.targetId;
111
+ const validTo = input.validTo ?? current.validTo;
112
+ if (!targetId) throw new Error("Priority target id is required.");
113
+ if (validTo < current.validFrom) throw new Error("Priority validTo must be after validFrom.");
114
+ const status = input.status ?? current.status;
115
+ return getSqliteDatabase().prepare(`UPDATE user_priority_windows
116
+ SET target_id = ?, valid_to = ?, review_at = MIN(review_at, ?), status = ?, updated_at = ?
117
+ WHERE priority_id = ?`).run(targetId, validTo, validTo, status, now, id).changes ? listPriorityWindows().find((item) => item.id === id) : void 0;
118
+ }
91
119
  //#endregion
92
- export { createPriorityWindow, createUserGoal, listPriorityWindows, listUserGoals, setUserGoalStatus };
120
+ export { createPriorityWindow, createUserGoal, listPriorityWindows, listUserGoals, setUserGoalStatus, updatePriorityWindow, updateUserGoal };
@@ -1,9 +1,9 @@
1
1
  import { USER_MODEL_PRINCIPAL_ID, validateCandidate, validateScope } from "./domain.js";
2
2
  import { calculateExecutionValue } from "./importance.js";
3
- import { createPriorityWindow, createUserGoal, listPriorityWindows, listUserGoals, setUserGoalStatus } from "./goals.js";
3
+ import { createPriorityWindow, createUserGoal, listPriorityWindows, listUserGoals, setUserGoalStatus, updatePriorityWindow, updateUserGoal } from "./goals.js";
4
4
  import { defaultReviewAt, isAssertionValidAt, requiresBoundedValidity, resolveCurrentAssertion } from "./temporal.js";
5
5
  import { deleteUserAssertion, getActiveAssertionByPredicate, getActiveAssertionForSlot, getAssertionSlot, getUserAssertion, getUserTimezone, linkAssertionEvidence, listSlotAssertions, listUserAssertionSources, listUserAssertions, reconcileAssertion, setAssertionStatus } from "./repository.js";
6
6
  import { applyUserProfilePatch, getUserProfileSnapshot } from "./profile.js";
7
7
  import { bootstrapUserModel } from "./bootstrap.js";
8
8
  import { canUseAssertion, isWorkingAssumption } from "./usage-policy.js";
9
- export { USER_MODEL_PRINCIPAL_ID, applyUserProfilePatch, bootstrapUserModel, calculateExecutionValue, canUseAssertion, createPriorityWindow, createUserGoal, defaultReviewAt, deleteUserAssertion, getActiveAssertionByPredicate, getActiveAssertionForSlot, getAssertionSlot, getUserAssertion, getUserProfileSnapshot, getUserTimezone, isAssertionValidAt, isWorkingAssumption, linkAssertionEvidence, listPriorityWindows, listSlotAssertions, listUserAssertionSources, listUserAssertions, listUserGoals, reconcileAssertion, requiresBoundedValidity, resolveCurrentAssertion, setAssertionStatus, setUserGoalStatus, validateCandidate, validateScope };
9
+ export { USER_MODEL_PRINCIPAL_ID, applyUserProfilePatch, bootstrapUserModel, calculateExecutionValue, canUseAssertion, createPriorityWindow, createUserGoal, defaultReviewAt, deleteUserAssertion, getActiveAssertionByPredicate, getActiveAssertionForSlot, getAssertionSlot, getUserAssertion, getUserProfileSnapshot, getUserTimezone, isAssertionValidAt, isWorkingAssumption, linkAssertionEvidence, listPriorityWindows, listSlotAssertions, listUserAssertionSources, listUserAssertions, listUserGoals, reconcileAssertion, requiresBoundedValidity, resolveCurrentAssertion, setAssertionStatus, setUserGoalStatus, updatePriorityWindow, updateUserGoal, validateCandidate, validateScope };
@@ -1,6 +1,7 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
- import { getSessionMetadata, init_session_repository } from "../../storage/sqlite/session-repository.js";
3
+ import { getSessionMetadata } from "../../storage/sqlite/session-read-repository.js";
4
+ import { init_session_repository } from "../../storage/sqlite/session-repository.js";
4
5
  import { getSessionConfig } from "../../storage/sqlite/config-repository.js";
5
6
  import { getConversationRouting } from "../../storage/sqlite/conversation-repository.js";
6
7
  import { getConversation } from "../../routing/agent-session-key.js";
@@ -6,9 +6,9 @@ import { init_providers, resolveModel } from "../../providers/index.js";
6
6
  import { TaskRepository } from "../../tasks/task-repository.js";
7
7
  import { TaskConversationRepository } from "../../tasks/task-conversation-repository.js";
8
8
  import { getProjectWorkspacePathForSession } from "../../projects/workspace.js";
9
+ import { publishAutomationProductEvent } from "../../automations/product-events.js";
9
10
  import { TaskContextRepository } from "../../tasks/task-context-repository.js";
10
11
  import { TaskApplicationService } from "../../tasks/task-application-service.js";
11
- import { publishAutomationProductEvent } from "../../automations/product-events.js";
12
12
  import { resolveModelSelector } from "../../config/agent-model-intents.js";
13
13
  import { DelegateSubagentRunner } from "../../agent/workflow/subagent-runner.js";
14
14
  import { preflightWorkflowConnectors } from "../../connectors/workflow-preflight.js";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@xopcai/xopc",
3
- "version": "0.0.309",
4
- "description": "Local-first personal AI assistant with reviewable user understanding, durable tasks, workflows, automations, and local or cloud models.",
3
+ "version": "0.0.312",
4
+ "description": "Local-first personal AI for the one-person company, with durable context, tasks, workflows, automations, and local or cloud models.",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
7
7
  "types": "dist/src/index.d.ts",
@@ -92,6 +92,7 @@
92
92
  "jiti": "^2.7.0",
93
93
  "js-yaml": "^4.3.2",
94
94
  "linkedom": "0.18.13",
95
+ "luxon": "3.7.2",
95
96
  "markdown-it": "^14.2.0",
96
97
  "node-edge-tts": "^1.2.10",
97
98
  "openai": "^6.48.0",
@@ -137,6 +138,7 @@
137
138
  "@types/adm-zip": "^0.5.8",
138
139
  "@types/js-yaml": "^4.0.9",
139
140
  "@types/jsdom": "^28.0.3",
141
+ "@types/luxon": "^3.7.5",
140
142
  "@types/markdown-it": "^14.1.2",
141
143
  "@types/node": "^25.9.1",
142
144
  "@types/qrcode-terminal": "^0.12.2",
@@ -167,8 +169,8 @@
167
169
  "vitest": "4.1.5",
168
170
  "vue": "^3.5.35",
169
171
  "@xopcai/browser-control-contract": "0.1.0",
170
- "@xopcai/computer-control-contract": "0.1.0",
171
172
  "@xopcai/endpoint-tools-client": "0.0.0",
173
+ "@xopcai/computer-control-contract": "0.1.0",
172
174
  "@xopcai/endpoint-tools-protocol": "0.0.0",
173
175
  "@xopcai/gateway-contract": "0.0.0",
174
176
  "@xopcai/realtime-client": "0.0.0",
@@ -1 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{t as i}from"./chunk-KS7C4IRE-Cq1tE_3b.js";import{t as a}from"./popover-select-9i-ZtHXL.js";import{t as o}from"./circle-check-C23XjkUj.js";import{t as s}from"./x-B_N4OPjy.js";import{t as c}from"./cn-JdwAhgNB.js";import{c as l,n as u}from"./locale-store-DPZ79W1-.js";import{i as d}from"./vendor-swr-BIWyz7Rc.js";import{t as f}from"./button-CS04eWY9.js";import{r as p}from"./gateway-config-swr-xAOGtenO.js";import{t as m}from"./skeleton-BwbyijEw.js";import{n as h,t as g}from"./registry-api-B_e_nZSN.js";import{Dc as _,Gl as v,Gu as y,Ic as b,ai as x,bl as ee,gc as S,il as C,in as w,li as T,qu as E,rn as D,vc as te,xc as O,y as ne}from"./index-DJo4DimT.js";import{n as k,r as A}from"./settings-page-layout-X1x-2Cp9.js";import{n as j,t as re}from"./use-autosave-DDY9qoXZ.js";import{u as M}from"./voice-config-api-SKCeQLrH.js";import{r as ie}from"./image-generation-api-wGMeI_yW.js";var N=e(t(),1),ae=n(),P=r(),F={"xopc-cloud":`XOPC Cloud`,"xopc-local":`XOPC Local`,alibaba:`Alibaba Cloud`,edge:`Microsoft Edge`,groq:`Groq`,minimax:`MiniMax`,openai:`OpenAI`,"tts-local-cli":`Local TTS`};function I(e,t,n){let r=e?.[t]?.[n];return typeof r==`string`&&r.trim()?r.trim():void 0}function L(e){return F[e]??e}function R(e){let t=(0,ae.c)(17),{icon:n,label:r,enabled:i,details:a,zh:o}=e,s;t[0]===n?s=t[1]:(s=(0,P.jsx)(`div`,{className:`rounded-lg bg-accent/10 p-2 text-accent`,children:(0,P.jsx)(n,{className:`size-4`,"aria-hidden":!0})}),t[0]=n,t[1]=s);let c;t[2]===r?c=t[3]:(c=(0,P.jsx)(`h3`,{className:`text-sm font-medium text-fg`,children:r}),t[2]=r,t[3]=c);let l=i?o?`已启用`:`On`:o?`已关闭`:`Off`,u;t[4]===l?u=t[5]:(u=(0,P.jsx)(`span`,{className:`rounded-full bg-surface-hover px-2 py-0.5 text-[10px] font-medium text-fg-muted`,children:l}),t[4]=l,t[5]=u);let d;t[6]!==c||t[7]!==u?(d=(0,P.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[c,u]}),t[6]=c,t[7]=u,t[8]=d):d=t[8];let f=i?a:o?`不处理语音`:`Voice processing is disabled`,p;t[9]===f?p=t[10]:(p=(0,P.jsx)(`p`,{className:`mt-1 truncate text-xs text-fg-muted`,children:f}),t[9]=f,t[10]=p);let m;t[11]!==d||t[12]!==p?(m=(0,P.jsxs)(`div`,{className:`min-w-0`,children:[d,p]}),t[11]=d,t[12]=p,t[13]=m):m=t[13];let h;return t[14]!==s||t[15]!==m?(h=(0,P.jsxs)(`div`,{className:`flex items-start gap-3 rounded-xl bg-surface-base/55 p-4`,children:[s,m]}),t[14]=s,t[15]=m,t[16]=h):h=t[16],h}function z(e){let t=(0,ae.c)(27),{zh:n}=e,{data:r,error:a,isLoading:o}=p(!0),s=r?.payload?.config,c,l,u;if(t[0]!==s){u=s===void 0?void 0:M(s);let e=u?I(u.stt.providers,u.stt.provider,`model`):void 0,n=u?I(u.tts.providers,u.tts.provider,`model`):void 0,r=u?I(u.tts.providers,u.tts.provider,`voice`):void 0;c=u?[L(u.stt.provider),e].filter(Boolean).join(` · `):void 0,l=u?[L(u.tts.provider),n,r].filter(Boolean).join(` · `):void 0,t[0]=s,t[1]=c,t[2]=l,t[3]=u}else c=t[1],l=t[2],u=t[3];let d=l,h=n?`语音能力`:`Voice capabilities`,g;t[4]===h?g=t[5]:(g=(0,P.jsx)(`h2`,{className:`text-base font-semibold text-fg`,children:h}),t[4]=h,t[5]=g);let _=n?`语音识别和朗读由所有智能体共用,在语音设置中统一管理。`:`STT and TTS are shared by every agent and managed in global voice settings.`,v;t[6]===_?v=t[7]:(v=(0,P.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:_}),t[6]=_,t[7]=v);let b;t[8]!==g||t[9]!==v?(b=(0,P.jsxs)(`div`,{children:[g,v]}),t[8]=g,t[9]=v,t[10]=b):b=t[10];let x=n?`管理语音设置`:`Manage voice settings`,ee;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(ee=(0,P.jsx)(E,{className:`size-4`,"aria-hidden":!0}),t[11]=ee):ee=t[11];let S;t[12]===x?S=t[13]:(S=(0,P.jsx)(f,{asChild:!0,variant:`secondary`,className:`shrink-0`,children:(0,P.jsxs)(i,{to:`/settings/capabilities/voice`,children:[x,ee]})}),t[12]=x,t[13]=S);let w;t[14]!==b||t[15]!==S?(w=(0,P.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-3`,children:[b,S]}),t[14]=b,t[15]=S,t[16]=w):w=t[16];let T;t[17]!==a||t[18]!==o||t[19]!==c||t[20]!==d||t[21]!==u||t[22]!==n?(T=o||!u?a?(0,P.jsx)(`p`,{className:`mt-4 rounded-xl bg-red-500/10 px-3 py-2 text-sm text-red-600`,children:n?`暂时无法读取语音配置。`:`Voice settings could not be loaded.`}):(0,P.jsxs)(`div`,{className:`mt-4 grid gap-3 sm:grid-cols-2`,children:[(0,P.jsx)(m,{className:`h-20 rounded-xl`}),(0,P.jsx)(m,{className:`h-20 rounded-xl`})]}):(0,P.jsxs)(`div`,{className:`mt-4 grid gap-3 sm:grid-cols-2`,children:[(0,P.jsx)(R,{icon:C,label:n?`语音转文字(STT)`:`Speech to text (STT)`,enabled:u.stt.enabled,details:c,zh:n}),(0,P.jsx)(R,{icon:y,label:n?`文字转语音(TTS)`:`Text to speech (TTS)`,enabled:u.tts.enabled,details:d,zh:n})]}),t[17]=a,t[18]=o,t[19]=c,t[20]=d,t[21]=u,t[22]=n,t[23]=T):T=t[23];let D;return t[24]!==w||t[25]!==T?(D=(0,P.jsxs)(`section`,{className:`rounded-xl bg-surface-hover/20 p-5`,children:[w,T]}),t[24]=w,t[25]=T,t[26]=D):D=t[26],D}var B=[`fast`,`reasoning`,`coding`,`review`,`vision`,`understanding`],V=`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg outline-none focus:border-accent focus:ring-2 focus:ring-accent/15`,H={en:{fast:[`Fast tasks`,`Short, low-latency work`],reasoning:[`Complex reasoning`,`Planning and multi-step analysis`],coding:[`Coding`,`Implementation and debugging`],review:[`Review`,`Critique and verification`],vision:[`Vision`,`Image and visual analysis`],understanding:[`Understanding`,`Long-form content comprehension`]},zh:{fast:[`快速任务`,`简短、低延迟的工作`],reasoning:[`复杂推理`,`规划和多步骤分析`],coding:[`编程`,`实现、调试和代码修改`],review:[`审查`,`检查、批评和验证`],vision:[`视觉任务`,`图片和视觉内容分析`],understanding:[`内容理解`,`长内容阅读和理解`]}};function U(e,t){return{primary:t,fallbacks:e?.fallbacks??[]}}function oe(e){let t=(0,ae.c)(35),{primary:n,value:r,models:i,loading:a,error:o,zh:c,onChange:l}=e,u;if(t[0]!==i||t[1]!==n||t[2]!==r){let e;t[4]!==n||t[5]!==r?(e=e=>e.id!==n&&!r.includes(e.id),t[4]=n,t[5]=r,t[6]=e):e=t[6],u=i.filter(e),t[0]=i,t[1]=n,t[2]=r,t[3]=u}else u=t[3];let d=u,f=c?`回退顺序`:`Fallback order`,p;t[7]===f?p=t[8]:(p=(0,P.jsx)(`h4`,{className:`text-sm font-medium text-fg`,children:f}),t[7]=f,t[8]=p);let m=c?`主模型不可用时,按从左到右的顺序尝试。`:`Tried from left to right when the primary model is unavailable.`,h;t[9]===m?h=t[10]:(h=(0,P.jsx)(`p`,{className:`mt-1 text-xs text-fg-muted`,children:m}),t[9]=m,t[10]=h);let g;t[11]!==p||t[12]!==h?(g=(0,P.jsx)(`div`,{className:`flex items-center justify-between gap-3`,children:(0,P.jsxs)(`div`,{children:[p,h]})}),t[11]=p,t[12]=h,t[13]=g):g=t[13];let _;t[14]!==i||t[15]!==l||t[16]!==r||t[17]!==c?(_=r.length>0?(0,P.jsx)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:r.map((e,t)=>(0,P.jsxs)(`span`,{className:`inline-flex items-center gap-2 rounded-full bg-surface-base/70 py-1 pl-2.5 pr-1 text-xs text-fg`,children:[(0,P.jsx)(`span`,{className:`text-fg-subtle`,children:t+1}),(0,P.jsx)(`span`,{children:i.find(t=>t.id===e)?.name??e}),(0,P.jsx)(`button`,{type:`button`,"aria-label":c?`移除 ${e}`:`Remove ${e}`,className:`rounded-full p-1 text-fg-muted hover:bg-surface-hover hover:text-fg`,onClick:()=>l(r.filter(t=>t!==e)),children:(0,P.jsx)(s,{className:`size-3`})})]},e))}):(0,P.jsx)(`p`,{className:`mt-3 text-xs text-fg-subtle`,children:c?`未设置回退模型。`:`No fallback models configured.`}),t[14]=i,t[15]=l,t[16]=r,t[17]=c,t[18]=_):_=t[18];let v=c?`添加回退模型`:`Add fallback model`,y=c?`搜索模型或服务商`:`Search models or providers`,b=c?`没有可添加的模型`:`No models available to add`,ee=c?`添加回退模型`:`Add fallback model`,S;t[19]!==l||t[20]!==r?(S=e=>{e&&l([...r,e])},t[19]=l,t[20]=r,t[21]=S):S=t[21];let C;t[22]!==d||t[23]!==o||t[24]!==a||t[25]!==b||t[26]!==ee||t[27]!==S||t[28]!==v||t[29]!==y?(C=(0,P.jsx)(x,{value:``,models:d,modelsLoading:a,modelsError:o,placeholder:v,searchPlaceholder:y,noMatches:b,showProviderInTrigger:!1,contentAlign:`start`,className:`mt-3 w-full max-w-md`,ariaLabel:ee,onChange:S}),t[22]=d,t[23]=o,t[24]=a,t[25]=b,t[26]=ee,t[27]=S,t[28]=v,t[29]=y,t[30]=C):C=t[30];let w;return t[31]!==C||t[32]!==g||t[33]!==_?(w=(0,P.jsxs)(`div`,{children:[g,_,C]}),t[31]=C,t[32]=g,t[33]=_,t[34]=w):w=t[34],w}function W(e){let t=(0,ae.c)(121),{draft:n,setDraft:r,zh:i}=e,a;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(a={revalidateOnFocus:!1},t[0]=a):a=t[0];let o=d(g,h,a),s;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(s={revalidateOnFocus:!1},t[1]=s):s=t[1];let c=d(`agent-defaults-image-models`,ie,s),l;t[2]===o.data?l=t[3]:(l=o.data??[],t[2]=o.data,t[3]=l);let u=l,p;t[4]===c.data?p=t[5]:(p=c.data??[],t[4]=c.data,t[5]=p);let m;t[6]===p?m=t[7]:(m=p.flatMap(G),t[6]=p,t[7]=m);let _=m,v=i?H.zh:H.en,y;t[8]!==n||t[9]!==r?(y=(e,t)=>{let i={...n.models.intents};t?i[e]=U(i[e],t):delete i[e],r({...n,models:{...n.models,intents:i}})},t[8]=n,t[9]=r,t[10]=y):y=t[10];let b=y,ee=i?`默认对话模型`:`Default conversation model`,S;t[11]===ee?S=t[12]:(S=(0,P.jsx)(`h2`,{className:`text-base font-semibold text-fg`,children:ee}),t[11]=ee,t[12]=S);let C=i?`大多数对话和没有专用路由的任务都会使用它。`:`Used for most conversations and every task without a dedicated route.`,w;t[13]===C?w=t[14]:(w=(0,P.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:C}),t[13]=C,t[14]=w);let T;t[15]!==w||t[16]!==S?(T=(0,P.jsxs)(`div`,{children:[S,w]}),t[15]=w,t[16]=S,t[17]=T):T=t[17];let E=i?`主模型`:`Primary model`,D;t[18]===E?D=t[19]:(D=(0,P.jsx)(`label`,{className:`block text-xs font-medium text-fg-muted`,children:E}),t[18]=E,t[19]=D);let te=i?`选择模型`:`Select a model`,O=i?`搜索模型或服务商`:`Search models or providers`,ne=i?`没有匹配的模型`:`No matching models`,k=i?`默认对话模型`:`Default conversation model`,A;t[20]!==n||t[21]!==r?(A=e=>r({...n,models:{...n.models,chat:{...n.models.chat,primary:e}}}),t[20]=n,t[21]=r,t[22]=A):A=t[22];let j;t[23]!==n.models.chat.primary||t[24]!==te||t[25]!==O||t[26]!==ne||t[27]!==k||t[28]!==A?(j=(0,P.jsx)(x,{value:n.models.chat.primary,placeholder:te,searchPlaceholder:O,noMatches:ne,showProviderSettingsFooter:!0,contentAlign:`start`,className:`mt-2 w-full`,ariaLabel:k,onChange:A}),t[23]=n.models.chat.primary,t[24]=te,t[25]=O,t[26]=ne,t[27]=k,t[28]=A,t[29]=j):j=t[29];let re;t[30]!==D||t[31]!==j?(re=(0,P.jsxs)(`div`,{className:`mt-5 max-w-xl`,children:[D,j]}),t[30]=D,t[31]=j,t[32]=re):re=t[32];let M;t[33]!==n||t[34]!==r?(M=e=>r({...n,models:{...n.models,chat:{...n.models.chat,fallbacks:e}}}),t[33]=n,t[34]=r,t[35]=M):M=t[35];let N;t[36]!==n.models.chat.fallbacks||t[37]!==n.models.chat.primary||t[38]!==u||t[39]!==o.error||t[40]!==o.isLoading||t[41]!==M||t[42]!==i?(N=(0,P.jsx)(`div`,{className:`mt-6 rounded-xl bg-surface-base/45 p-4`,children:(0,P.jsx)(oe,{primary:n.models.chat.primary,value:n.models.chat.fallbacks,models:u,loading:o.isLoading,error:o.error,zh:i,onChange:M})}),t[36]=n.models.chat.fallbacks,t[37]=n.models.chat.primary,t[38]=u,t[39]=o.error,t[40]=o.isLoading,t[41]=M,t[42]=i,t[43]=N):N=t[43];let F;t[44]!==T||t[45]!==re||t[46]!==N?(F=(0,P.jsxs)(`section`,{className:`rounded-xl bg-surface-hover/20 p-5`,children:[T,re,N]}),t[44]=T,t[45]=re,t[46]=N,t[47]=F):F=t[47];let I=i?`图片能力`:`Image capabilities`,L;t[48]===I?L=t[49]:(L=(0,P.jsx)(`h2`,{className:`text-base font-semibold text-fg`,children:I}),t[48]=I,t[49]=L);let R=i?`没有图片任务时可以保持关闭。`:`Leave these off when the agents do not work with images.`,W;t[50]===R?W=t[51]:(W=(0,P.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:R}),t[50]=R,t[51]=W);let K=i?`图片理解模型`:`Image understanding model`,q;t[52]===K?q=t[53]:(q=(0,P.jsx)(`label`,{className:`block text-xs font-medium text-fg-muted`,children:K}),t[52]=K,t[53]=q);let J=n.models.imageUnderstanding?.primary??``,Y=i?`关闭图片理解`:`Image understanding off`,X=i?`搜索视觉模型`:`Search vision models`,Z=i?`没有可用的视觉模型`:`No vision models available`,se=i?`关闭图片理解`:`Image understanding off`,ce=i?`图片理解模型`:`Image understanding model`,le;t[54]!==n||t[55]!==r?(le=e=>{let t={...n.models};e?t.imageUnderstanding=U(t.imageUnderstanding,e):delete t.imageUnderstanding,r({...n,models:t})},t[54]=n,t[55]=r,t[56]=le):le=t[56];let ue;t[57]!==J||t[58]!==Y||t[59]!==X||t[60]!==Z||t[61]!==se||t[62]!==ce||t[63]!==le?(ue=(0,P.jsx)(x,{value:J,placeholder:Y,searchPlaceholder:X,noMatches:Z,capabilitiesFilter:`vision`,allowEmpty:!0,emptyLabel:se,contentAlign:`start`,className:`mt-2 w-full`,ariaLabel:ce,onChange:le}),t[57]=J,t[58]=Y,t[59]=X,t[60]=Z,t[61]=se,t[62]=ce,t[63]=le,t[64]=ue):ue=t[64];let de;t[65]!==q||t[66]!==ue?(de=(0,P.jsxs)(`div`,{children:[q,ue]}),t[65]=q,t[66]=ue,t[67]=de):de=t[67];let fe=i?`图片生成模型`:`Image generation model`,pe;t[68]===fe?pe=t[69]:(pe=(0,P.jsx)(`label`,{className:`block text-xs font-medium text-fg-muted`,children:fe}),t[68]=fe,t[69]=pe);let me=n.models.imageGeneration?.primary??``,he=i?`关闭图片生成`:`Image generation off`,ge=i?`搜索图片模型或服务商`:`Search image models or providers`,_e=i?`没有可用的图片生成模型`:`No image generation models available`,ve=i?`关闭图片生成`:`Image generation off`,ye=i?`图片生成模型`:`Image generation model`,Q;t[70]!==n||t[71]!==r?(Q=e=>{let t={...n.models};e?t.imageGeneration={primary:e,fallbacks:t.imageGeneration?.fallbacks??[],timeoutMs:t.imageGeneration?.timeoutMs,autoProviderFallback:t.imageGeneration?.autoProviderFallback??!0}:delete t.imageGeneration,r({...n,models:t})},t[70]=n,t[71]=r,t[72]=Q):Q=t[72];let be;t[73]!==_||t[74]!==c.error||t[75]!==c.isLoading||t[76]!==me||t[77]!==he||t[78]!==ge||t[79]!==_e||t[80]!==ve||t[81]!==ye||t[82]!==Q?(be=(0,P.jsx)(x,{value:me,models:_,modelsLoading:c.isLoading,modelsError:c.error,placeholder:he,searchPlaceholder:ge,noMatches:_e,allowEmpty:!0,emptyLabel:ve,contentAlign:`start`,className:`mt-2 w-full`,ariaLabel:ye,onChange:Q}),t[73]=_,t[74]=c.error,t[75]=c.isLoading,t[76]=me,t[77]=he,t[78]=ge,t[79]=_e,t[80]=ve,t[81]=ye,t[82]=Q,t[83]=be):be=t[83];let xe;t[84]!==pe||t[85]!==be?(xe=(0,P.jsxs)(`div`,{children:[pe,be]}),t[84]=pe,t[85]=be,t[86]=xe):xe=t[86];let $;t[87]!==de||t[88]!==xe?($=(0,P.jsxs)(`div`,{className:`mt-5 grid gap-5 lg:grid-cols-2`,children:[de,xe]}),t[87]=de,t[88]=xe,t[89]=$):$=t[89];let Se;t[90]!==n||t[91]!==r||t[92]!==i?(Se=n.models.imageGeneration?(0,P.jsxs)(`div`,{className:`mt-5 grid gap-4 rounded-xl bg-surface-base/45 p-4 sm:grid-cols-2`,children:[(0,P.jsxs)(`label`,{className:`block text-xs font-medium text-fg-muted`,children:[i?`生成超时(毫秒)`:`Generation timeout (ms)`,(0,P.jsx)(`input`,{type:`number`,min:1,className:`${V} mt-2`,value:n.models.imageGeneration.timeoutMs??``,onChange:e=>r({...n,models:{...n.models,imageGeneration:{...n.models.imageGeneration,timeoutMs:e.target.value?Number(e.target.value):void 0}}})})]}),(0,P.jsxs)(`div`,{className:`text-xs font-medium text-fg-muted`,children:[(0,P.jsx)(`span`,{children:i?`服务商自动回退`:`Automatic provider fallback`}),(0,P.jsx)(`div`,{className:`mt-1.5 flex rounded-lg bg-surface-panel p-1`,children:[!0,!1].map(e=>(0,P.jsx)(f,{variant:n.models.imageGeneration?.autoProviderFallback===e?`secondary`:`ghost`,className:`flex-1 py-1.5 text-xs`,onClick:()=>r({...n,models:{...n.models,imageGeneration:{...n.models.imageGeneration,autoProviderFallback:e}}}),children:e?i?`开启`:`On`:i?`关闭`:`Off`},String(e)))})]})]}):null,t[90]=n,t[91]=r,t[92]=i,t[93]=Se):Se=t[93];let Ce;t[94]!==L||t[95]!==W||t[96]!==$||t[97]!==Se?(Ce=(0,P.jsxs)(`section`,{className:`rounded-xl bg-surface-hover/20 p-5`,children:[L,W,$,Se]}),t[94]=L,t[95]=W,t[96]=$,t[97]=Se,t[98]=Ce):Ce=t[98];let we;t[99]===i?we=t[100]:(we=(0,P.jsx)(z,{zh:i}),t[99]=i,t[100]=we);let Te=i?`按任务选择模型`:`Route by task`,Ee;t[101]===Te?Ee=t[102]:(Ee=(0,P.jsx)(`h2`,{className:`text-base font-semibold text-fg`,children:Te}),t[101]=Te,t[102]=Ee);let De=i?`仅在确实需要不同模型时设置;否则保持“使用默认对话模型”。`:`Set a route only when a task genuinely needs another model; otherwise keep the default.`,Oe;t[103]===De?Oe=t[104]:(Oe=(0,P.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:De}),t[103]=De,t[104]=Oe);let ke;t[105]!==v||t[106]!==n.models.intents||t[107]!==b||t[108]!==i?(ke=B.map(e=>(0,P.jsxs)(`div`,{className:`rounded-xl bg-surface-base/55 p-4`,children:[(0,P.jsxs)(`div`,{className:`mb-3`,children:[(0,P.jsx)(`h3`,{className:`text-sm font-medium text-fg`,children:v[e][0]}),(0,P.jsx)(`p`,{className:`mt-0.5 text-xs text-fg-muted`,children:v[e][1]})]}),(0,P.jsx)(x,{value:n.models.intents[e]?.primary??``,placeholder:i?`使用默认对话模型`:`Use default conversation model`,searchPlaceholder:i?`搜索模型或服务商`:`Search models or providers`,noMatches:i?`没有匹配的模型`:`No matching models`,allowEmpty:!0,emptyLabel:i?`使用默认对话模型`:`Use default conversation model`,showProviderInTrigger:!1,contentAlign:`start`,className:`w-full`,ariaLabel:i?`${v[e][0]}模型`:`${v[e][0]} model`,onChange:t=>b(e,t)})]},e)),t[105]=v,t[106]=n.models.intents,t[107]=b,t[108]=i,t[109]=ke):ke=t[109];let Ae;t[110]===ke?Ae=t[111]:(Ae=(0,P.jsx)(`div`,{className:`mt-5 grid gap-3 lg:grid-cols-2`,children:ke}),t[110]=ke,t[111]=Ae);let je;t[112]!==Ee||t[113]!==Oe||t[114]!==Ae?(je=(0,P.jsxs)(`section`,{className:`rounded-xl bg-surface-hover/20 p-5`,children:[Ee,Oe,Ae]}),t[112]=Ee,t[113]=Oe,t[114]=Ae,t[115]=je):je=t[115];let Me;return t[116]!==F||t[117]!==Ce||t[118]!==we||t[119]!==je?(Me=(0,P.jsxs)(`div`,{className:`space-y-5`,children:[F,Ce,we,je]}),t[116]=F,t[117]=Ce,t[118]=we,t[119]=je,t[120]=Me):Me=t[120],Me}function G(e){return e.models.map(t=>({id:`${e.id}/${t}`,name:t,provider:e.label}))}var K=`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg outline-none focus:border-accent focus:ring-2 focus:ring-accent/15`;function q(e){let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}function J(e){let t=(0,ae.c)(151),{draft:n,setDraft:r,zh:i}=e,o;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(o={revalidateOnFocus:!1},t[0]=o):o=t[0];let s=d(`agent-defaults-workflows`,ne,o),l;t[1]===s.data?l=t[2]:(l=s.data??[],t[1]=s.data,t[2]=l);let u;t[3]===l?u=t[4]:(u=l.map(Y),t[3]=l,t[4]=u);let p=u,m=n.workflows.allowed===void 0,h;t[5]!==n||t[6]!==r?(h=(e,t)=>{let i=n.workflows.allowed??[],a=t?[...new Set([...i,e])]:i.filter(t=>t!==e);r({...n,workflows:{...n.workflows,allowed:a}})},t[5]=n,t[6]=r,t[7]=h):h=t[7];let g=h,_=i?`执行限制`:`Execution limits`,v;t[8]===_?v=t[9]:(v=(0,P.jsx)(`h2`,{className:`text-base font-semibold text-fg`,children:_}),t[8]=_,t[9]=v);let y=i?`为所有智能体设置安全上限;留空时使用系统默认值。`:`Set safe upper bounds for every agent. Empty fields use system defaults.`,b;t[10]===y?b=t[11]:(b=(0,P.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:y}),t[10]=y,t[11]=b);let x=i?`每次运行最多轮数`:`Maximum turns per run`,ee=n.runtime.maxTurns??``,S=i?`系统默认`:`System default`,C;t[12]!==n||t[13]!==r?(C=e=>r({...n,runtime:{...n.runtime,maxTurns:q(e.target.value)}}),t[12]=n,t[13]=r,t[14]=C):C=t[14];let w;t[15]!==ee||t[16]!==S||t[17]!==C?(w=(0,P.jsx)(`input`,{type:`number`,min:1,value:ee,placeholder:S,onChange:C,className:`${K} mt-2`}),t[15]=ee,t[16]=S,t[17]=C,t[18]=w):w=t[18];let T;t[19]!==w||t[20]!==x?(T=(0,P.jsxs)(`label`,{className:`block text-xs font-medium text-fg-muted`,children:[x,w]}),t[19]=w,t[20]=x,t[21]=T):T=t[21];let E=i?`单轮超时(毫秒)`:`Turn timeout (ms)`,D=n.runtime.timeoutMs??``,te=i?`系统默认`:`System default`,O;t[22]!==n||t[23]!==r?(O=e=>r({...n,runtime:{...n.runtime,timeoutMs:q(e.target.value)}}),t[22]=n,t[23]=r,t[24]=O):O=t[24];let k;t[25]!==D||t[26]!==te||t[27]!==O?(k=(0,P.jsx)(`input`,{type:`number`,min:1,value:D,placeholder:te,onChange:O,className:`${K} mt-2`}),t[25]=D,t[26]=te,t[27]=O,t[28]=k):k=t[28];let A;t[29]!==E||t[30]!==k?(A=(0,P.jsxs)(`label`,{className:`block text-xs font-medium text-fg-muted`,children:[E,k]}),t[29]=E,t[30]=k,t[31]=A):A=t[31];let j=i?`每轮最多工具失败次数`:`Maximum tool failures per turn`,re=n.runtime.maxToolFailuresPerTurn??``,M=i?`系统默认`:`System default`,ie;t[32]!==n||t[33]!==r?(ie=e=>r({...n,runtime:{...n.runtime,maxToolFailuresPerTurn:q(e.target.value)}}),t[32]=n,t[33]=r,t[34]=ie):ie=t[34];let N;t[35]!==re||t[36]!==M||t[37]!==ie?(N=(0,P.jsx)(`input`,{type:`number`,min:1,value:re,placeholder:M,onChange:ie,className:`${K} mt-2`}),t[35]=re,t[36]=M,t[37]=ie,t[38]=N):N=t[38];let F;t[39]!==j||t[40]!==N?(F=(0,P.jsxs)(`label`,{className:`block text-xs font-medium text-fg-muted`,children:[j,N]}),t[39]=j,t[40]=N,t[41]=F):F=t[41];let I;t[42]!==T||t[43]!==A||t[44]!==F?(I=(0,P.jsxs)(`div`,{className:`mt-5 grid gap-4 md:grid-cols-3`,children:[T,A,F]}),t[42]=T,t[43]=A,t[44]=F,t[45]=I):I=t[45];let L;t[46]!==I||t[47]!==v||t[48]!==b?(L=(0,P.jsxs)(`section`,{className:`rounded-xl bg-surface-hover/20 p-5`,children:[v,b,I]}),t[46]=I,t[47]=v,t[48]=b,t[49]=L):L=t[49];let R=i?`提示词缓存`:`Prompt cache`,z;t[50]===R?z=t[51]:(z=(0,P.jsx)(`h2`,{className:`text-base font-semibold text-fg`,children:R}),t[50]=R,t[51]=z);let B=i?`复用稳定的上下文以降低响应延迟和模型费用。`:`Reuse stable context to reduce latency and model cost.`,V;t[52]===B?V=t[53]:(V=(0,P.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:B}),t[52]=B,t[53]=V);let H=i?`缓存模式`:`Cache mode`,U;t[54]===H?U=t[55]:(U=(0,P.jsx)(`span`,{children:H}),t[54]=H,t[55]=U);let oe;t[56]===Symbol.for(`react.memo_cache_sentinel`)?(oe=[`auto`,`off`],t[56]=oe):oe=t[56];let W;t[57]!==n||t[58]!==r||t[59]!==i?(W=(0,P.jsx)(`div`,{className:`mt-1.5 flex rounded-lg bg-surface-panel p-1`,children:oe.map(e=>(0,P.jsx)(f,{variant:n.runtime.promptCache?.mode===e?`secondary`:`ghost`,className:`flex-1 py-1.5 text-xs`,onClick:()=>r({...n,runtime:{...n.runtime,promptCache:{mode:e,lifetime:n.runtime.promptCache?.lifetime??`short`}}}),children:e===`auto`?i?`自动`:`Automatic`:i?`关闭`:`Off`},e))}),t[57]=n,t[58]=r,t[59]=i,t[60]=W):W=t[60];let G;t[61]!==U||t[62]!==W?(G=(0,P.jsxs)(`div`,{className:`text-xs font-medium text-fg-muted`,children:[U,W]}),t[61]=U,t[62]=W,t[63]=G):G=t[63];let J;t[64]!==n||t[65]!==r||t[66]!==i?(J=n.runtime.promptCache?.mode===`auto`?(0,P.jsxs)(`div`,{className:`text-xs font-medium text-fg-muted`,children:[(0,P.jsx)(`span`,{children:i?`缓存周期`:`Cache lifetime`}),(0,P.jsx)(`div`,{className:`mt-1.5 flex rounded-lg bg-surface-panel p-1`,children:[`short`,`long`].map(e=>(0,P.jsx)(f,{variant:n.runtime.promptCache?.lifetime===e?`secondary`:`ghost`,className:`flex-1 py-1.5 text-xs`,onClick:()=>r({...n,runtime:{...n.runtime,promptCache:{mode:`auto`,lifetime:e}}}),children:e===`short`?i?`短期`:`Short`:i?`长期`:`Long`},e))})]}):null,t[64]=n,t[65]=r,t[66]=i,t[67]=J):J=t[67];let X;t[68]!==G||t[69]!==J?(X=(0,P.jsxs)(`div`,{className:`mt-5 grid gap-4 sm:grid-cols-2`,children:[G,J]}),t[68]=G,t[69]=J,t[70]=X):X=t[70];let Z;t[71]!==z||t[72]!==V||t[73]!==X?(Z=(0,P.jsxs)(`section`,{className:`rounded-xl bg-surface-hover/20 p-5`,children:[z,V,X]}),t[71]=z,t[72]=V,t[73]=X,t[74]=Z):Z=t[74];let se=i?`工作流`:`Workflows`,ce;t[75]===se?ce=t[76]:(ce=(0,P.jsx)(`h2`,{className:`text-base font-semibold text-fg`,children:se}),t[75]=se,t[76]=ce);let le=i?`设置默认工作流,并决定智能体可以调用哪些工作流。`:`Set a default workflow and control which workflows agents may invoke.`,ue;t[77]===le?ue=t[78]:(ue=(0,P.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:le}),t[77]=le,t[78]=ue);let de=i?`默认工作流`:`Default workflow`,fe;t[79]===de?fe=t[80]:(fe=(0,P.jsx)(`label`,{className:`block text-xs font-medium text-fg-muted`,children:de}),t[79]=de,t[80]=fe);let pe=n.workflows.default??``,me=s.isLoading?i?`正在加载…`:`Loading…`:i?`不设置默认工作流`:`No default workflow`,he=i?`不设置默认工作流`:`No default workflow`,ge=i?`默认工作流`:`Default workflow`,_e;t[81]!==n||t[82]!==r?(_e=e=>r({...n,workflows:{...n.workflows,default:e||void 0}}),t[81]=n,t[82]=r,t[83]=_e):_e=t[83];let ve;t[84]!==pe||t[85]!==me||t[86]!==he||t[87]!==ge||t[88]!==_e||t[89]!==p||t[90]!==s.isLoading?(ve=(0,P.jsx)(a,{value:pe,options:p,placeholder:me,emptyLabel:he,disabled:s.isLoading,ariaLabel:ge,onChange:_e,triggerClassName:`mt-2`}),t[84]=pe,t[85]=me,t[86]=he,t[87]=ge,t[88]=_e,t[89]=p,t[90]=s.isLoading,t[91]=ve):ve=t[91];let ye;t[92]!==fe||t[93]!==ve?(ye=(0,P.jsxs)(`div`,{className:`mt-5 max-w-xl`,children:[fe,ve]}),t[92]=fe,t[93]=ve,t[94]=ye):ye=t[94];let Q;t[95]===s.error?Q=t[96]:(Q=s.error?(0,P.jsx)(`p`,{className:`mt-3 text-sm text-red-600`,children:s.error instanceof Error?s.error.message:String(s.error)}):null,t[95]=s.error,t[96]=Q);let be=i?`允许调用的工作流`:`Allowed workflows`,xe;t[97]===be?xe=t[98]:(xe=(0,P.jsx)(`h3`,{className:`text-sm font-medium text-fg`,children:be}),t[97]=be,t[98]=xe);let $;t[99]!==n||t[100]!==r?($=()=>r({...n,workflows:{...n.workflows,allowed:void 0}}),t[99]=n,t[100]=r,t[101]=$):$=t[101];let Se=m?`bg-accent-soft shadow-surface`:`hover:bg-surface-hover`,Ce;t[102]===Se?Ce=t[103]:(Ce=c(`rounded-xl bg-surface-base/55 p-4 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,Se),t[102]=Se,t[103]=Ce);let we=i?`允许全部工作流`:`Allow every workflow`,Te;t[104]===we?Te=t[105]:(Te=(0,P.jsx)(`span`,{className:`block text-sm font-medium text-fg`,children:we}),t[104]=we,t[105]=Te);let Ee=i?`新增工作流也会自动可用。`:`New workflows become available automatically.`,De;t[106]===Ee?De=t[107]:(De=(0,P.jsx)(`span`,{className:`mt-1 block text-xs text-fg-muted`,children:Ee}),t[106]=Ee,t[107]=De);let Oe;t[108]!==$||t[109]!==Ce||t[110]!==Te||t[111]!==De?(Oe=(0,P.jsxs)(`button`,{type:`button`,onClick:$,className:Ce,children:[Te,De]}),t[108]=$,t[109]=Ce,t[110]=Te,t[111]=De,t[112]=Oe):Oe=t[112];let ke;t[113]!==n||t[114]!==r?(ke=()=>r({...n,workflows:{...n.workflows,allowed:[]}}),t[113]=n,t[114]=r,t[115]=ke):ke=t[115];let Ae=m?`hover:bg-surface-hover`:`bg-accent-soft shadow-surface`,je;t[116]===Ae?je=t[117]:(je=c(`rounded-xl bg-surface-base/55 p-4 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,Ae),t[116]=Ae,t[117]=je);let Me=i?`只允许选中的工作流`:`Allow selected workflows only`,Ne;t[118]===Me?Ne=t[119]:(Ne=(0,P.jsx)(`span`,{className:`block text-sm font-medium text-fg`,children:Me}),t[118]=Me,t[119]=Ne);let Pe=i?`未选中的工作流不能被调用。`:`Unselected workflows cannot be invoked.`,Fe;t[120]===Pe?Fe=t[121]:(Fe=(0,P.jsx)(`span`,{className:`mt-1 block text-xs text-fg-muted`,children:Pe}),t[120]=Pe,t[121]=Fe);let Ie;t[122]!==ke||t[123]!==je||t[124]!==Ne||t[125]!==Fe?(Ie=(0,P.jsxs)(`button`,{type:`button`,onClick:ke,className:je,children:[Ne,Fe]}),t[122]=ke,t[123]=je,t[124]=Ne,t[125]=Fe,t[126]=Ie):Ie=t[126];let Le;t[127]!==Oe||t[128]!==Ie?(Le=(0,P.jsxs)(`div`,{className:`mt-3 grid gap-3 sm:grid-cols-2`,children:[Oe,Ie]}),t[127]=Oe,t[128]=Ie,t[129]=Le):Le=t[129];let Re;t[130]!==m||t[131]!==n.workflows.allowed||t[132]!==g||t[133]!==s.data||t[134]!==s.isLoading||t[135]!==i?(Re=m?null:(0,P.jsxs)(`div`,{className:`mt-3 flex flex-col gap-1 rounded-xl bg-surface-base/45 p-1 [&>label]:rounded-lg [&>label]:bg-surface-panel/55`,children:[(s.data??[]).map(e=>(0,P.jsxs)(`label`,{className:`flex cursor-pointer items-start gap-3 px-4 py-3 hover:bg-surface-hover/60`,children:[(0,P.jsx)(`input`,{type:`checkbox`,checked:n.workflows.allowed?.includes(e.id)??!1,onChange:t=>g(e.id,t.target.checked),className:`mt-0.5 size-4 accent-[var(--color-accent)]`}),(0,P.jsxs)(`span`,{children:[(0,P.jsx)(`span`,{className:`block text-sm font-medium text-fg`,children:e.title||e.name}),e.description?(0,P.jsx)(`span`,{className:`mt-1 block text-xs text-fg-muted`,children:e.description}):null]})]},e.id)),(s.data??[]).length===0&&!s.isLoading?(0,P.jsx)(`p`,{className:`px-4 py-8 text-center text-sm text-fg-muted`,children:i?`还没有工作流。`:`No workflows yet.`}):null]}),t[130]=m,t[131]=n.workflows.allowed,t[132]=g,t[133]=s.data,t[134]=s.isLoading,t[135]=i,t[136]=Re):Re=t[136];let ze;t[137]!==xe||t[138]!==Le||t[139]!==Re?(ze=(0,P.jsxs)(`div`,{className:`mt-6 rounded-xl bg-surface-base/45 p-4`,children:[xe,Le,Re]}),t[137]=xe,t[138]=Le,t[139]=Re,t[140]=ze):ze=t[140];let Be;t[141]!==ce||t[142]!==ue||t[143]!==ye||t[144]!==Q||t[145]!==ze?(Be=(0,P.jsxs)(`section`,{className:`rounded-xl bg-surface-hover/20 p-5`,children:[ce,ue,ye,Q,ze]}),t[141]=ce,t[142]=ue,t[143]=ye,t[144]=Q,t[145]=ze,t[146]=Be):Be=t[146];let Ve;return t[147]!==L||t[148]!==Z||t[149]!==Be?(Ve=(0,P.jsxs)(`div`,{className:`space-y-5`,children:[L,Z,Be]}),t[147]=L,t[148]=Z,t[149]=Be,t[150]=Ve):Ve=t[150],Ve}function Y(e){return{value:e.id,label:e.title||e.name}}function X(e){return[...new Set(e)].sort()}function Z(e){let t=(0,ae.c)(99),{draft:n,setDraft:r,zh:i}=e,a;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(a={revalidateOnFocus:!1},t[0]=a):a=t[0];let{data:s,error:l,isLoading:u}=d(`agent-defaults-skills-catalog`,T,a),[f,p]=(0,N.useState)(``),m=n.skills.mode===`selected`?n.skills.include:n.skills.exclude;s?.catalog;let h;if(t[1]!==m||t[2]!==s?.catalog||t[3]!==f){let e=[...s?.catalog??[]],n=new Set(e.map(le));for(let t of m)n.has(t)||e.push({name:t,description:``,enabled:!0});let r=f.trim().toLowerCase();h=e.filter(e=>!r||`${e.name} ${e.description}`.toLowerCase().includes(r)).sort(ce),t[1]=m,t[2]=s?.catalog,t[3]=f,t[4]=h}else h=t[4];let g=h,v;t[5]!==n.skills.exclude||t[6]!==n.skills.include||t[7]!==n.skills.mode?(v=e=>n.skills.mode===`selected`?n.skills.include.includes(e):!n.skills.exclude.includes(e),t[5]=n.skills.exclude,t[6]=n.skills.include,t[7]=n.skills.mode,t[8]=v):v=t[8];let y=v,b;t[9]!==n||t[10]!==r?(b=e=>{if(n.skills.mode===`selected`){let t=n.skills.include.includes(e)?n.skills.include.filter(t=>t!==e):X([...n.skills.include,e]);r({...n,skills:{mode:`selected`,include:t}});return}let t=n.skills.exclude.includes(e)?n.skills.exclude.filter(t=>t!==e):X([...n.skills.exclude,e]);r({...n,skills:{mode:`all-enabled`,exclude:t}})},t[9]=n,t[10]=r,t[11]=b):b=t[11];let x=b,S;t[12]===s?.catalog?S=t[13]:(S=s?.catalog??[],t[12]=s?.catalog,t[13]=S);let C;if(t[14]!==y||t[15]!==S){let e;t[17]===y?e=t[18]:(e=e=>e.enabled&&y(e.name),t[17]=y,t[18]=e),C=S.filter(e),t[14]=y,t[15]=S,t[16]=C}else C=t[16];let w=C.length,E=i?`技能策略`:`Skill policy`,D;t[19]===E?D=t[20]:(D=(0,P.jsx)(`h2`,{className:`text-base font-semibold text-fg`,children:E}),t[19]=E,t[20]=D);let te=i?`决定所有智能体默认可以使用哪些技能。`:`Choose which skills every agent can discover and use by default.`,O;t[21]===te?O=t[22]:(O=(0,P.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:te}),t[21]=te,t[22]=O);let ne;t[23]!==n||t[24]!==r?(ne=()=>r({...n,skills:{mode:`all-enabled`,exclude:[]}}),t[23]=n,t[24]=r,t[25]=ne):ne=t[25];let k=n.skills.mode===`all-enabled`?`bg-accent-soft shadow-surface`:`hover:bg-surface-hover`,A;t[26]===k?A=t[27]:(A=c(`flex items-start gap-3 rounded-xl bg-surface-base/55 p-4 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,k),t[26]=k,t[27]=A);let j;t[28]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,P.jsx)(o,{className:`mt-0.5 size-5 shrink-0 text-accent`}),t[28]=j):j=t[28];let re=i?`使用所有已启用技能`:`Use every enabled skill`,M;t[29]===re?M=t[30]:(M=(0,P.jsx)(`span`,{className:`block text-sm font-medium text-fg`,children:re}),t[29]=re,t[30]=M);let ie=i?`推荐。以后启用的新技能也会自动可用,可单独排除。`:`Recommended. Newly enabled skills become available automatically; exclude exceptions below.`,F;t[31]===ie?F=t[32]:(F=(0,P.jsx)(`span`,{className:`mt-1 block text-xs leading-5 text-fg-muted`,children:ie}),t[31]=ie,t[32]=F);let I;t[33]!==M||t[34]!==F?(I=(0,P.jsxs)(`span`,{children:[M,F]}),t[33]=M,t[34]=F,t[35]=I):I=t[35];let L;t[36]!==ne||t[37]!==A||t[38]!==I?(L=(0,P.jsxs)(`button`,{type:`button`,onClick:ne,className:A,children:[j,I]}),t[36]=ne,t[37]=A,t[38]=I,t[39]=L):L=t[39];let R;t[40]!==n||t[41]!==r?(R=()=>r({...n,skills:{mode:`selected`,include:[]}}),t[40]=n,t[41]=r,t[42]=R):R=t[42];let z=n.skills.mode===`selected`?`bg-accent-soft shadow-surface`:`hover:bg-surface-hover`,B;t[43]===z?B=t[44]:(B=c(`flex items-start gap-3 rounded-xl bg-surface-base/55 p-4 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,z),t[43]=z,t[44]=B);let V;t[45]===Symbol.for(`react.memo_cache_sentinel`)?(V=(0,P.jsx)(ee,{className:`mt-0.5 size-5 shrink-0 text-accent`}),t[45]=V):V=t[45];let H=i?`只使用选中的技能`:`Use selected skills only`,U;t[46]===H?U=t[47]:(U=(0,P.jsx)(`span`,{className:`block text-sm font-medium text-fg`,children:H}),t[46]=H,t[47]=U);let oe=i?`适合严格受控的环境;新增技能不会自动加入。`:`For tightly controlled environments; new skills are not added automatically.`,W;t[48]===oe?W=t[49]:(W=(0,P.jsx)(`span`,{className:`mt-1 block text-xs leading-5 text-fg-muted`,children:oe}),t[48]=oe,t[49]=W);let G;t[50]!==U||t[51]!==W?(G=(0,P.jsxs)(`span`,{children:[U,W]}),t[50]=U,t[51]=W,t[52]=G):G=t[52];let K;t[53]!==R||t[54]!==B||t[55]!==G?(K=(0,P.jsxs)(`button`,{type:`button`,onClick:R,className:B,children:[V,G]}),t[53]=R,t[54]=B,t[55]=G,t[56]=K):K=t[56];let q;t[57]!==L||t[58]!==K?(q=(0,P.jsxs)(`div`,{className:`mt-5 grid gap-3 sm:grid-cols-2`,children:[L,K]}),t[57]=L,t[58]=K,t[59]=q):q=t[59];let J;t[60]!==O||t[61]!==q||t[62]!==D?(J=(0,P.jsxs)(`section`,{className:`rounded-xl bg-surface-hover/20 p-5`,children:[D,O,q]}),t[60]=O,t[61]=q,t[62]=D,t[63]=J):J=t[63];let Y=n.skills.mode===`selected`?i?`选择可用技能`:`Select available skills`:i?`管理例外`:`Manage exceptions`,Z;t[64]===Y?Z=t[65]:(Z=(0,P.jsx)(`h2`,{className:`text-base font-semibold text-fg`,children:Y}),t[64]=Y,t[65]=Z);let ue=i?`当前默认可用 ${w} 个技能。`:`${w} skills are available by default.`,de;t[66]===ue?de=t[67]:(de=(0,P.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:ue}),t[66]=ue,t[67]=de);let fe;t[68]!==Z||t[69]!==de?(fe=(0,P.jsxs)(`div`,{children:[Z,de]}),t[68]=Z,t[69]=de,t[70]=fe):fe=t[70];let pe=i?`搜索技能`:`Search skills`,me;t[71]===pe?me=t[72]:(me=(0,P.jsx)(`span`,{className:`sr-only`,children:pe}),t[71]=pe,t[72]=me);let he;t[73]===Symbol.for(`react.memo_cache_sentinel`)?(he=(0,P.jsx)(_,{className:`pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-fg-subtle`}),t[73]=he):he=t[73];let ge;t[74]===Symbol.for(`react.memo_cache_sentinel`)?(ge=e=>p(e.target.value),t[74]=ge):ge=t[74];let _e=i?`搜索技能`:`Search skills`,ve;t[75]!==f||t[76]!==_e?(ve=(0,P.jsx)(`input`,{type:`search`,value:f,onChange:ge,placeholder:_e,className:`w-full rounded-lg border border-edge bg-surface-panel py-2 pl-9 pr-3 text-sm text-fg outline-none focus:border-accent`}),t[75]=f,t[76]=_e,t[77]=ve):ve=t[77];let ye;t[78]!==me||t[79]!==ve?(ye=(0,P.jsxs)(`label`,{className:`relative block w-full sm:w-72`,children:[me,he,ve]}),t[78]=me,t[79]=ve,t[80]=ye):ye=t[80];let Q;t[81]!==fe||t[82]!==ye?(Q=(0,P.jsxs)(`div`,{className:`flex flex-wrap items-end justify-between gap-3`,children:[fe,ye]}),t[81]=fe,t[82]=ye,t[83]=Q):Q=t[83];let be;t[84]===l?be=t[85]:(be=l?(0,P.jsx)(`p`,{className:`mt-4 rounded-lg bg-red-500/10 px-3 py-2 text-sm text-red-600`,children:l instanceof Error?l.message:String(l)}):null,t[84]=l,t[85]=be);let xe;t[86]!==y||t[87]!==u||t[88]!==g||t[89]!==x||t[90]!==i?(xe=u?(0,P.jsx)(`div`,{className:`mt-4 space-y-2`,children:[0,1,2,3].map(se)}):(0,P.jsxs)(`div`,{className:`mt-4 flex max-h-[32rem] flex-col gap-1 overflow-y-auto rounded-xl bg-surface-base/45 p-1 [&>label]:rounded-lg [&>label]:bg-surface-panel/55`,children:[g.map(e=>{let t=y(e.name);return(0,P.jsxs)(`label`,{className:c(`flex cursor-pointer items-start gap-3 px-4 py-3 hover:bg-surface-hover/60`,!e.enabled&&`cursor-not-allowed opacity-55`),children:[(0,P.jsx)(`input`,{type:`checkbox`,checked:t,disabled:!e.enabled,onChange:()=>x(e.name),className:`mt-0.5 size-4 rounded border-edge accent-[var(--color-accent)]`}),(0,P.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,P.jsxs)(`span`,{className:`flex flex-wrap items-center gap-2`,children:[(0,P.jsx)(`span`,{className:`text-sm font-medium text-fg`,children:e.name}),e.enabled?null:(0,P.jsx)(`span`,{className:`rounded-full bg-surface-hover px-2 py-0.5 text-[10px] text-fg-muted`,children:i?`全局未启用`:`Disabled globally`})]}),e.description?(0,P.jsx)(`span`,{className:`mt-1 block line-clamp-2 text-xs leading-5 text-fg-muted`,children:e.description}):null]})]},e.name)}),g.length===0?(0,P.jsx)(`p`,{className:`px-4 py-8 text-center text-sm text-fg-muted`,children:i?`没有匹配的技能。`:`No matching skills.`}):null]}),t[86]=y,t[87]=u,t[88]=g,t[89]=x,t[90]=i,t[91]=xe):xe=t[91];let $;t[92]!==Q||t[93]!==be||t[94]!==xe?($=(0,P.jsxs)(`section`,{className:`rounded-xl bg-surface-hover/20 p-5`,children:[Q,be,xe]}),t[92]=Q,t[93]=be,t[94]=xe,t[95]=$):$=t[95];let Se;return t[96]!==J||t[97]!==$?(Se=(0,P.jsxs)(`div`,{className:`space-y-5`,children:[J,$]}),t[96]=J,t[97]=$,t[98]=Se):Se=t[98],Se}function se(e){return(0,P.jsx)(m,{className:`h-14 rounded-xl`},e)}function ce(e,t){return e.name.localeCompare(t.name)}function le(e){return e.name}function ue(e){let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}function de(e){let t=(0,ae.c)(92),{draft:n,setDraft:r,builtinTools:i,zh:a}=e,[o,s]=(0,N.useState)(``),[l,u]=(0,N.useState)(`all`),[d,p]=(0,N.useState)(),m;t[0]===i?m=t[1]:(m=new Map(i.map(pe)),t[0]=i,t[1]=m);let h=m,g;t[2]!==i||t[3]!==n.tools?(g=[...new Set([...i.map(fe),...Object.keys(n.tools)])].sort(),t[2]=i,t[3]=n.tools,t[4]=g):g=t[4];let v=g,y;if(t[5]!==v||t[6]!==n.tools){let e;t[8]===n.tools?e=t[9]:(e=e=>(n.tools[e]?.mode??`allow`)===`allow`,t[8]=n.tools,t[9]=e),y=v.filter(e),t[5]=v,t[6]=n.tools,t[7]=y}else y=t[7];let b=y.length,x;if(t[10]!==v||t[11]!==n.tools){let e;t[13]===n.tools?e=t[14]:(e=e=>n.tools[e]?.mode===`ask`,t[13]=n.tools,t[14]=e),x=v.filter(e),t[10]=v,t[11]=n.tools,t[12]=x}else x=t[12];let ee=x.length,S;if(t[15]!==v||t[16]!==n.tools){let e;t[18]===n.tools?e=t[19]:(e=e=>n.tools[e]?.mode===`deny`,t[18]=n.tools,t[19]=e),S=v.filter(e),t[15]=v,t[16]=n.tools,t[17]=S}else S=t[17];let C;t[20]!==y.length||t[21]!==x.length||t[22]!==S.length?(C={allow:b,ask:ee,deny:S.length},t[20]=y.length,t[21]=x.length,t[22]=S.length,t[23]=C):C=t[23];let w=C,T;if(t[24]!==v||t[25]!==h||t[26]!==n.tools||t[27]!==l||t[28]!==o){let e=o.trim().toLowerCase();T=v.filter(t=>{let r=n.tools[t]?.mode??`allow`,i=h.get(t),a=`${t} ${i?.en??``} ${i?.zh??``}`.toLowerCase();return(!e||a.includes(e))&&(l===`all`||r===l)}),t[24]=v,t[25]=h,t[26]=n.tools,t[27]=l,t[28]=o,t[29]=T}else T=t[29];let E=T,D;t[30]!==n||t[31]!==r?(D=(e,t)=>{let i=n.tools[e]??{mode:`allow`};r({...n,tools:{...n.tools,[e]:{...i,...t}}})},t[30]=n,t[31]=r,t[32]=D):D=t[32];let O=D,ne=a?`全部 ${v.length}`:`All ${v.length}`,k;t[33]===ne?k=t[34]:(k={id:`all`,label:ne},t[33]=ne,t[34]=k);let A=a?`允许 ${w.allow}`:`Allow ${w.allow}`,j;t[35]===A?j=t[36]:(j={id:`allow`,label:A},t[35]=A,t[36]=j);let re=a?`询问 ${w.ask}`:`Ask ${w.ask}`,M;t[37]===re?M=t[38]:(M={id:`ask`,label:re},t[37]=re,t[38]=M);let ie=a?`禁用 ${w.deny}`:`Deny ${w.deny}`,F;t[39]===ie?F=t[40]:(F={id:`deny`,label:ie},t[39]=ie,t[40]=F);let I;t[41]!==k||t[42]!==j||t[43]!==M||t[44]!==F?(I=[k,j,M,F],t[41]=k,t[42]=j,t[43]=M,t[44]=F,t[45]=I):I=t[45];let L=I,R=a?`默认工具权限`:`Default tool permissions`,z;t[46]===R?z=t[47]:(z=(0,P.jsx)(`h2`,{className:`text-base font-semibold text-fg`,children:R}),t[46]=R,t[47]=z);let B=a?`允许:直接执行;询问:执行前确认;禁用:智能体无法使用。`:`Allow runs directly, Ask requires confirmation, and Deny makes the tool unavailable.`,V;t[48]===B?V=t[49]:(V=(0,P.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:B}),t[48]=B,t[49]=V);let H;t[50]!==z||t[51]!==V?(H=(0,P.jsxs)(`div`,{children:[z,V]}),t[50]=z,t[51]=V,t[52]=H):H=t[52];let U;t[53]!==l||t[54]!==L?(U=(0,P.jsx)(`div`,{className:`flex flex-wrap gap-1 rounded-xl bg-surface-panel p-1`,children:L.map(e=>(0,P.jsx)(`button`,{type:`button`,onClick:()=>u(e.id),className:c(`rounded-lg px-3 py-1.5 text-xs font-medium`,l===e.id?`bg-surface-base text-fg shadow-surface`:`text-fg-muted hover:text-fg`),children:e.label},e.id))}),t[53]=l,t[54]=L,t[55]=U):U=t[55];let oe=a?`搜索工具`:`Search tools`,W;t[56]===oe?W=t[57]:(W=(0,P.jsx)(`span`,{className:`sr-only`,children:oe}),t[56]=oe,t[57]=W);let G;t[58]===Symbol.for(`react.memo_cache_sentinel`)?(G=(0,P.jsx)(_,{className:`pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-fg-subtle`}),t[58]=G):G=t[58];let K;t[59]===Symbol.for(`react.memo_cache_sentinel`)?(K=e=>s(e.target.value),t[59]=K):K=t[59];let q=a?`搜索工具`:`Search tools`,J;t[60]!==o||t[61]!==q?(J=(0,P.jsx)(`input`,{type:`search`,value:o,onChange:K,placeholder:q,className:`w-full rounded-lg border border-edge bg-surface-panel py-2 pl-9 pr-3 text-sm text-fg outline-none focus:border-accent`}),t[60]=o,t[61]=q,t[62]=J):J=t[62];let Y;t[63]!==W||t[64]!==J?(Y=(0,P.jsxs)(`label`,{className:`relative block w-full sm:w-72`,children:[W,G,J]}),t[63]=W,t[64]=J,t[65]=Y):Y=t[65];let X;t[66]!==U||t[67]!==Y?(X=(0,P.jsxs)(`div`,{className:`mt-5 flex flex-wrap items-center justify-between gap-3`,children:[U,Y]}),t[66]=U,t[67]=Y,t[68]=X):X=t[68];let Z;if(t[69]!==h||t[70]!==n.tools||t[71]!==d||t[72]!==O||t[73]!==E||t[74]!==a){let e;t[76]!==h||t[77]!==n.tools||t[78]!==d||t[79]!==O||t[80]!==a?(e=e=>{let t=n.tools[e]??{mode:`allow`},r=h.get(e),i=d===e;return(0,P.jsxs)(`div`,{className:`px-4 py-3`,children:[(0,P.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,P.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,P.jsx)(`code`,{className:`text-xs font-medium text-fg`,children:e}),r?(0,P.jsx)(`p`,{className:`mt-1 text-xs leading-5 text-fg-muted`,children:a?r.zh:r.en}):null]}),(0,P.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,P.jsx)(`div`,{className:`flex rounded-lg bg-surface-base p-1`,children:[`allow`,`ask`,`deny`].map(n=>(0,P.jsx)(`button`,{type:`button`,onClick:()=>O(e,{mode:n}),className:c(`rounded-md px-2.5 py-1 text-xs font-medium capitalize`,t.mode===n?`bg-accent text-on-accent`:`text-fg-muted hover:text-fg`),children:n===`allow`?a?`允许`:`Allow`:n===`ask`?a?`询问`:`Ask`:a?`禁用`:`Deny`},n))}),(0,P.jsx)(f,{variant:`ghost`,className:`px-2 py-1`,"aria-label":a?`${e} 调用限制`:`${e} call limits`,onClick:()=>p(i?void 0:e),children:(0,P.jsx)(te,{className:`size-4`})})]})]}),i?(0,P.jsxs)(`div`,{className:`mt-3 grid gap-3 rounded-lg bg-surface-base p-3 sm:grid-cols-2`,children:[(0,P.jsxs)(`label`,{className:`block text-xs font-medium text-fg-muted`,children:[a?`每轮最多调用次数`:`Maximum calls per turn`,(0,P.jsx)(`input`,{type:`number`,min:1,value:t.maxCallsPerTurn??``,placeholder:a?`不限制`:`Unlimited`,onChange:t=>O(e,{maxCallsPerTurn:ue(t.target.value)}),className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg outline-none focus:border-accent`})]}),(0,P.jsxs)(`label`,{className:`block text-xs font-medium text-fg-muted`,children:[a?`单次超时(毫秒)`:`Call timeout (ms)`,(0,P.jsx)(`input`,{type:`number`,min:1,value:t.timeoutMs??``,placeholder:a?`使用系统默认值`:`Use system default`,onChange:t=>O(e,{timeoutMs:ue(t.target.value)}),className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg outline-none focus:border-accent`})]})]}):null]},e)},t[76]=h,t[77]=n.tools,t[78]=d,t[79]=O,t[80]=a,t[81]=e):e=t[81],Z=E.map(e),t[69]=h,t[70]=n.tools,t[71]=d,t[72]=O,t[73]=E,t[74]=a,t[75]=Z}else Z=t[75];let se;t[82]!==E.length||t[83]!==a?(se=E.length===0?(0,P.jsx)(`p`,{className:`px-4 py-10 text-center text-sm text-fg-muted`,children:a?`没有匹配的工具。`:`No matching tools.`}):null,t[82]=E.length,t[83]=a,t[84]=se):se=t[84];let ce;t[85]!==Z||t[86]!==se?(ce=(0,P.jsxs)(`div`,{className:`mt-4 flex max-h-[38rem] flex-col gap-1 overflow-y-auto rounded-xl bg-surface-base/45 p-1 [&>*]:rounded-lg [&>*]:bg-surface-panel/55`,children:[Z,se]}),t[85]=Z,t[86]=se,t[87]=ce):ce=t[87];let le;return t[88]!==H||t[89]!==X||t[90]!==ce?(le=(0,P.jsxs)(`section`,{className:`rounded-xl bg-surface-hover/20 p-5`,children:[H,X,ce]}),t[88]=H,t[89]=X,t[90]=ce,t[91]=le):le=t[91],le}function fe(e){return e.id}function pe(e){return[e.id,e.description]}function me(){let e=(0,ae.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,P.jsxs)(A,{gap:`gap-5`,children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,P.jsxs)(`div`,{className:`space-y-2`,children:[(0,P.jsx)(m,{className:`h-7 w-56`}),(0,P.jsx)(m,{className:`h-4 w-96 max-w-full`})]}),(0,P.jsx)(m,{className:`h-9 w-28`})]}),(0,P.jsx)(m,{className:`h-20 rounded-2xl`}),(0,P.jsx)(m,{className:`h-12 rounded-xl`}),(0,P.jsx)(m,{className:`h-72 rounded-2xl`})]}),e[0]=t):t=e[0],t}function he(e){let t=(0,ae.c)(67),{initial:n,builtinTools:r,zh:i}=e,[a,o]=(0,N.useState)(`models`),s;t[0]===n?s=t[1]:(s=()=>structuredClone(n),t[0]=n,t[1]=s);let[l,u]=(0,N.useState)(s),d;t[2]===n?d=t[3]:(d=()=>structuredClone(n),t[2]=n,t[3]=d);let[p,m]=(0,N.useState)(d),h;t[4]===l?h=t[5]:(h=JSON.stringify(l),t[4]=l,t[5]=h);let g;t[6]===p?g=t[7]:(g=JSON.stringify(p),t[6]=p,t[7]=g);let _=h!==g,y=i?`模型`:`Models`,x;t[8]===y?x=t[9]:(x={id:`models`,label:y,icon:S},t[8]=y,t[9]=x);let ee=i?`技能`:`Skills`,C;t[10]===ee?C=t[11]:(C={id:`skills`,label:ee,icon:b},t[10]=ee,t[11]=C);let T=i?`工具`:`Tools`,E;t[12]===T?E=t[13]:(E={id:`tools`,label:T,icon:O},t[12]=T,t[13]=E);let D=i?`运行`:`Runtime`,te;t[14]===D?te=t[15]:(te={id:`runtime`,label:D,icon:v},t[14]=D,t[15]=te);let ne;t[16]!==E||t[17]!==te||t[18]!==x||t[19]!==C?(ne=[x,C,E,te],t[16]=E,t[17]=te,t[18]=x,t[19]=C,t[20]=ne):ne=t[20];let M=ne,ie;t[21]===Symbol.for(`react.memo_cache_sentinel`)?(ie=async e=>{let t=structuredClone(e),n=await w(t),r=structuredClone(n.defaults);u(e=>JSON.stringify(e)===JSON.stringify(t)?r:e),m(structuredClone(r))},t[21]=ie):ie=t[21];let F=ie,I;t[22]!==_||t[23]!==l?(I={value:l,dirty:_,onSave:F,delayMs:0},t[22]=_,t[23]=l,t[24]=I):I=t[24];let L=re(I),R=L.onBlurCapture,z=i?`智能体设置`:`Agent settings`,B;t[25]!==L.error||t[26]!==L.status?(B=(0,P.jsx)(j,{status:L.status,error:L.error}),t[25]=L.error,t[26]=L.status,t[27]=B):B=t[27];let V;t[28]!==z||t[29]!==B?(V=(0,P.jsx)(k,{title:z,actions:B}),t[28]=z,t[29]=B,t[30]=V):V=t[30];let H;t[31]!==L.error||t[32]!==L.retry||t[33]!==i?(H=L.error?(0,P.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2 rounded-xl bg-red-500/10 px-3 py-2 text-sm text-red-600`,children:[(0,P.jsx)(`span`,{children:L.error}),(0,P.jsx)(f,{type:`button`,variant:`ghost`,className:`h-8 text-red-600`,onClick:L.retry,children:i?`重试`:`Retry`})]}):null,t[31]=L.error,t[32]=L.retry,t[33]=i,t[34]=H):H=t[34];let U=i?`默认配置分区`:`Default configuration sections`,oe;t[35]!==a||t[36]!==M?(oe=M.map(e=>{let{id:t,label:n,icon:r}=e;return(0,P.jsxs)(`button`,{type:`button`,"aria-pressed":a===t,onClick:()=>o(t),className:c(`flex min-w-0 items-center justify-center gap-2 rounded-lg px-3 py-2.5 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,a===t?`bg-surface-base text-fg shadow-surface`:`text-fg-muted hover:bg-surface-hover hover:text-fg`),children:[(0,P.jsx)(r,{className:c(`size-4 shrink-0`,a===t?`text-accent`:`text-fg-subtle`)}),(0,P.jsx)(`span`,{className:`text-sm font-medium`,children:n})]},t)}),t[35]=a,t[36]=M,t[37]=oe):oe=t[37];let G;t[38]!==U||t[39]!==oe?(G=(0,P.jsx)(`nav`,{className:`grid grid-cols-2 gap-1 rounded-xl bg-surface-hover/20 p-1 lg:grid-cols-4`,"aria-label":U,children:oe}),t[38]=U,t[39]=oe,t[40]=G):G=t[40];let K;t[41]!==a||t[42]!==l||t[43]!==i?(K=a===`models`?(0,P.jsx)(W,{draft:l,setDraft:u,zh:i}):null,t[41]=a,t[42]=l,t[43]=i,t[44]=K):K=t[44];let q;t[45]!==a||t[46]!==l||t[47]!==i?(q=a===`skills`?(0,P.jsx)(Z,{draft:l,setDraft:u,zh:i}):null,t[45]=a,t[46]=l,t[47]=i,t[48]=q):q=t[48];let Y;t[49]!==a||t[50]!==r||t[51]!==l||t[52]!==i?(Y=a===`tools`?(0,P.jsx)(de,{draft:l,setDraft:u,builtinTools:r,zh:i}):null,t[49]=a,t[50]=r,t[51]=l,t[52]=i,t[53]=Y):Y=t[53];let X;t[54]!==a||t[55]!==l||t[56]!==i?(X=a===`runtime`?(0,P.jsx)(J,{draft:l,setDraft:u,zh:i}):null,t[54]=a,t[55]=l,t[56]=i,t[57]=X):X=t[57];let se;return t[58]!==L.onBlurCapture||t[59]!==V||t[60]!==H||t[61]!==G||t[62]!==K||t[63]!==q||t[64]!==Y||t[65]!==X?(se=(0,P.jsxs)(A,{gap:`gap-5`,onBlurCapture:R,children:[V,H,G,K,q,Y,X]}),t[58]=L.onBlurCapture,t[59]=V,t[60]=H,t[61]=G,t[62]=K,t[63]=q,t[64]=Y,t[65]=X,t[66]=se):se=t[66],se}function ge(){let e=(0,ae.c)(17),t=l(ve),n=u(_e)===`zh`,{data:r,error:i,isLoading:a,mutate:o}=d(t?`settings-agent-defaults`:null,D);if(!t){let t=n?`需要本机服务令牌。`:`Local service token required.`,r;return e[0]===t?r=e[1]:(r=(0,P.jsx)(A,{children:(0,P.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t})}),e[0]=t,e[1]=r),r}if(i&&!r){let t=String(i),r;e[2]===t?r=e[3]:(r=(0,P.jsx)(`p`,{className:`rounded-xl bg-red-500/10 px-3 py-2 text-sm text-red-600`,children:t}),e[2]=t,e[3]=r);let a;e[4]===o?a=e[5]:(a=()=>void o(),e[4]=o,e[5]=a);let s=n?`重试`:`Retry`,c;e[6]!==a||e[7]!==s?(c=(0,P.jsx)(f,{onClick:a,children:s}),e[6]=a,e[7]=s,e[8]=c):c=e[8];let l;return e[9]!==r||e[10]!==c?(l=(0,P.jsxs)(A,{children:[r,c]}),e[9]=r,e[10]=c,e[11]=l):l=e[11],l}if(a||!r){let t;return e[12]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,P.jsx)(me,{}),e[12]=t):t=e[12],t}let s;return e[13]!==r.builtinTools||e[14]!==r.defaults||e[15]!==n?(s=(0,P.jsx)(he,{initial:r.defaults,builtinTools:r.builtinTools,zh:n}),e[13]=r.builtinTools,e[14]=r.defaults,e[15]=n,e[16]=s):s=e[16],s}function _e(e){return e.language}function ve(e){return e.conversationId}export{ge as AgentDefaultsSettingsPanel};
@@ -1 +0,0 @@
1
- import{a as e,r as t}from"./locale-store-DPZ79W1-.js";var n=n=>e(t(n)),r=(n,r,i)=>e(t(n),{method:r,headers:{"content-type":`application/json`},body:JSON.stringify(i)});export{r as n,n as t};
@@ -1 +0,0 @@
1
- import{i as e,r as t}from"./product-delivery-CCC4FJ3Y.js";var n=new Set([`agents`,`automations`,`browser-automations`,`channels`,`chat`,`connectors`,`extensions`,`local-apps`,`notes`,`onboarding`,`open`,`projects`,`settings`,`skills`,`tasks`,`workflows`,`you`]);function r(e){if(!e.startsWith(`/`)||e.startsWith(`//`)||e.includes(`\\`))return null;let t=e.slice(1).split(/[/?#]/,1)[0]??``;return t&&n.has(t)?e:null}function i(e){try{let t=new URL(e);return t.protocol!==`xopc:`||t.hostname!==`settings`?null:r(`/settings${t.pathname===`/`?``:t.pathname}${t.search}${t.hash}`)}catch{return null}}function a(n,a=window.location.href){let o=n.trim();if(!o)return{kind:`blocked`};let s=t(o);if(s){let t=e({...s,title:s.id,capabilities:[`open`]});return t?{kind:`internal-route`,route:t}:{kind:`blocked`}}let c=i(o);if(c)return{kind:`internal-route`,route:c};if(o.startsWith(`#/`)){let e=r(o.slice(1));return e?{kind:`internal-route`,route:e}:{kind:`blocked`}}if(o.startsWith(`/`)){let e=r(o);return e?{kind:`internal-route`,route:e}:{kind:`blocked`}}try{let e=new URL(o,a);if(e.protocol!==`http:`&&e.protocol!==`https:`||e.username||e.password)return{kind:`blocked`};let t=new URL(a);if(e.origin===t.origin&&e.hash.startsWith(`#/`)){let t=r(e.hash.slice(1));if(t)return{kind:`internal-route`,route:t}}return{kind:`external-http`,url:e.toString()}}catch{return{kind:`blocked`}}}function o(e,t,n){for(let r of e.querySelectorAll(`a`)){if(n?.(r))continue;let e=a(r.getAttribute(`href`)??``);if(r.dataset.xopcLinkKind=e.kind,e.kind===`blocked`){r.removeAttribute(`href`),r.removeAttribute(`target`),r.setAttribute(`aria-disabled`,`true`),t&&(r.title=t.unavailable,r.dataset.xopcLinkHint=t.unavailable);continue}if(e.kind===`internal-route`){if(r.setAttribute(`href`,`#${e.route}`),r.removeAttribute(`target`),t){let n=e.route.slice(1).split(/[/?#]/,1)[0]??``,i=t.destinations[n]??t.open,a=r.dataset.xopcLinkLabel??r.textContent?.trim()??``;r.dataset.xopcLinkLabel=a,(/^(?:xopc:\/\/|#\/)/i.test(a)||/^(?:Open(?: in xopc)?|打开)$/i.test(a))&&(r.textContent=i),r.title||=i}continue}r.target=`_blank`;let i=new Set(r.rel.split(/\s+/).filter(Boolean));i.add(`noopener`),i.add(`noreferrer`),r.rel=[...i].join(` `)}}async function s(e){let t=a(e);if(t.kind!==`external-http`)return{ok:!1,error:`Only external HTTP(S) links can be opened`};let n=window.electronAPI?.shell?.openExternalUrl;return n?n(t.url):(window.open(t.url,`_blank`,`noopener,noreferrer`),{ok:!0})}export{s as n,a as r,o as t};
@@ -1 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{h as i,t as a}from"./chunk-KS7C4IRE-Cq1tE_3b.js";import{t as o}from"./check-DUBLcKHA.js";import{t as s}from"./external-link-DjqjBmc3.js";import{t as c}from"./markdown-view-p2P5hP1U.js";import{t as l}from"./loader-circle-CifKLtgG.js";import{t as u}from"./plus-Q2yW6OE7.js";import{t as d}from"./x-B_N4OPjy.js";import{t as f}from"./cn-JdwAhgNB.js";import{a as p,c as m,i as h,n as g,r as _}from"./locale-store-DPZ79W1-.js";import{t as v}from"./messages-BiYTyLJr.js";import{a as y,i as b,o as x,r as S,s as C,t as w}from"./dist-BGTk37IG.js";import{a as T,i as E}from"./vendor-swr-BIWyz7Rc.js";import{t as D}from"./button-CS04eWY9.js";import{t as O}from"./skeleton-BwbyijEw.js";import{o as k}from"./gateway-realtime-BuaTsMSi.js";import{Cc as A,Dc as j,Ja as M,Ka as N,Ou as P,Ru as F,Wa as I,Xc as L,Ya as R,Yu as ee,do as z,ea as B,nc as te,qa as V,tc as ne,xc as re}from"./index-DJo4DimT.js";import{t as H}from"./page-tabs-ChQ4jJFs.js";var U=e(t(),1),W=n();function G(e){return e===`builtin`||e===`user`?e:`marketplace`}async function K(e){try{let t=await e.json();if(typeof t.error==`string`)return t.error;if(t.error&&typeof t.error==`object`&&typeof t.error.message==`string`)return t.error.message;if(typeof t.message==`string`)return t.message}catch{}return e.statusText||`HTTP ${e.status}`}async function ie(e){let t=await h(_(`/api/marketplace/packages/${encodeURIComponent(e.trim())}`),{cache:`no-store`});if(!t.ok)throw Error(await K(t));let n=await t.json();if(!n.ok||!n.payload?.id)throw Error(n.error??`Invalid response`);return n.payload}async function q(e){let t=await h(_(`/api/marketplace/install`),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});if(!t.ok)throw Error(await K(t));let n=await t.json();if(!n.ok||!n.payload?.extensionId)throw Error(n.error??`Invalid response`);return n.payload}async function J(e){let t=await h(_(`/api/extensions/bundled/activation`),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({extensionId:e.extensionId.trim(),enabled:e.enabled})});if(!t.ok)throw Error(await K(t));let n=await t.json();if(!n.ok||!n.payload)throw Error(n.error?.message??`Invalid response`);return n.payload}async function Y(e){let t=await h(_(`/api/marketplace/uninstall`),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({extensionId:e})});if(!t.ok)throw Error(await K(t));let n=await t.json();if(!n.ok||!n.payload)throw Error(n.error??`Invalid response`);return n.payload}var X=r();function ae(e,t){let n=e.find(e=>e.id===t);return n?n.source===`bundled`?`bundled`:`user`:`absent`}var Z={q:``,debounced:``,detailPkg:null,rowBusy:null,actionError:null,restartHint:null};function Q({className:e}){let t=v(g(e=>e.language)).extensionsPage,n=m(e=>!!e.conversationId),r=N(),{mutate:i}=T(),[a,o]=(0,U.useReducer)(B,Z),{q:s,debounced:c,detailPkg:u,rowBusy:d,actionError:h,restartHint:y}=a,b=n?`marketplace-${c}`:null;(0,U.useEffect)(()=>{let e=window.setTimeout(()=>o({type:`patch`,patch:{debounced:s.trim()}}),300);return()=>window.clearTimeout(e)},[s]);let{data:x,isLoading:S,error:C}=E(b,async()=>p(c.length>0?_(`/api/marketplace?q=${encodeURIComponent(c)}`):_(`/api/marketplace`)),{revalidateOnFocus:!1}),w=(0,U.useCallback)(()=>{i(`gateway-extensions-list`),k()},[i]),D=(0,U.useCallback)(async(e,n)=>{o({type:`patch`,patch:{actionError:null,restartHint:null,rowBusy:e}});try{let r=await q({name:e,overwrite:n});w(),r.requiresGatewayRestart&&o({type:`patch`,patch:{restartHint:t.marketplaceRestartHint}})}catch(e){throw o({type:`patch`,patch:{actionError:e instanceof Error?e.message:t.marketplaceInstallFailed}}),e}finally{o({type:`patch`,patch:{rowBusy:null}})}},[t.marketplaceInstallFailed,t.marketplaceRestartHint,w]),A=(0,U.useCallback)(async e=>{o({type:`patch`,patch:{actionError:null,restartHint:null,rowBusy:e}});try{let n=await Y(e);w(),n.requiresGatewayRestart&&o({type:`patch`,patch:{restartHint:t.marketplaceRestartHint}})}catch(e){throw o({type:`patch`,patch:{actionError:e instanceof Error?e.message:t.marketplaceUninstallFailed}}),e}finally{o({type:`patch`,patch:{rowBusy:null}})}},[t.marketplaceRestartHint,t.marketplaceUninstallFailed,w]),M=x?.extensions??[];return(0,X.jsxs)(`div`,{className:f(`flex flex-col gap-4`,e),children:[(0,X.jsxs)(`div`,{className:`relative`,children:[(0,X.jsx)(j,{className:`pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-fg-muted`,strokeWidth:1.75,"aria-hidden":!0}),(0,X.jsx)(`input`,{type:`search`,value:s,onChange:e=>o({type:`patch`,patch:{q:e.target.value}}),placeholder:t.marketplaceSearchPlaceholder,className:`ui-input h-10 w-full rounded-lg border border-edge bg-surface-base pl-9 pr-3 text-sm text-fg placeholder:text-fg-muted`})]}),C?(0,X.jsx)(`p`,{className:`text-sm text-fg-muted`,children:C instanceof Error?C.message:t.marketplaceLoadFailed}):null,h?(0,X.jsx)(`p`,{className:`text-sm text-red-600 dark:text-red-400`,children:h}):null,y?(0,X.jsx)(`p`,{className:`text-sm text-fg-muted`,children:y}):null,S&&!x?(0,X.jsx)(`ul`,{className:`flex flex-col gap-3`,"aria-label":t.marketplaceLoading,children:[0,1,2].map(e=>(0,X.jsx)(`li`,{className:`rounded-xl bg-surface-panel p-4 shadow-surface`,children:(0,X.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,X.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-2.5`,children:[(0,X.jsx)(O,{className:`h-5 w-40`}),(0,X.jsx)(O,{className:`h-4 w-full max-w-xl`}),(0,X.jsx)(O,{className:`h-4 w-2/3 max-w-md`})]}),(0,X.jsx)(O,{className:`h-8 w-20`})]})},e))}):(0,X.jsx)(`ul`,{className:`flex flex-col gap-3`,children:M.length===0?(0,X.jsx)(`li`,{className:`text-sm text-fg-muted`,children:t.marketplaceEmpty}):M.map(e=>{let n=ae(r,e.id),i=d===e.id;return(0,X.jsx)(`li`,{className:`list-none`,children:(0,X.jsxs)(`div`,{role:`button`,tabIndex:0,"aria-label":`${e.name}, ${t.marketplaceDetailTitle}`,onClick:()=>o({type:`patch`,patch:{detailPkg:e.id}}),onKeyDown:t=>{(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),o({type:`patch`,patch:{detailPkg:e.id}}))},className:f(`flex w-full cursor-pointer flex-wrap items-start gap-3 rounded-xl bg-surface-panel p-4 text-left shadow-surface`,`transition-[transform,background-color,box-shadow] duration-150 ease-out`,`hover:bg-surface-hover/40`,`active:scale-[0.992] active:bg-surface-hover/55`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel`,`dark:hover:bg-surface-hover/25 dark:active:bg-surface-hover/35`),children:[(0,X.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,X.jsx)(`h3`,{className:`font-semibold text-fg`,children:e.name}),e.verified?(0,X.jsx)(P,{className:`size-4 shrink-0 text-emerald-600 dark:text-emerald-400`,strokeWidth:1.75,"aria-label":`Verified`}):null,e.version?(0,X.jsx)(`span`,{className:`text-xs text-fg-muted`,children:e.version}):null]}),e.description?(0,X.jsx)(`p`,{className:`mt-1 line-clamp-2 text-sm text-fg-muted`,children:e.description}):null,(0,X.jsx)(`div`,{className:`mt-2 flex flex-wrap gap-1.5`,children:(e.categories??[]).map(e=>(0,X.jsx)(`span`,{className:`rounded-md border border-edge bg-surface-panel px-2 py-0.5 text-[11px] text-fg-muted`,children:e},e))}),(0,X.jsxs)(`p`,{className:`mt-2 flex items-center gap-1.5 text-xs text-fg-muted`,children:[(0,X.jsx)(L,{className:`size-3.5 shrink-0`,strokeWidth:1.75,"aria-hidden":!0}),(0,X.jsx)(`code`,{className:`rounded bg-surface-panel px-1 py-0.5`,children:e.npmPackage})]})]}),(0,X.jsx)(`div`,{role:`group`,className:`flex shrink-0 flex-col items-end gap-2 sm:min-w-[9rem]`,onClick:e=>e.stopPropagation(),onKeyDown:e=>e.stopPropagation(),children:n===`bundled`?(0,X.jsx)(`span`,{className:`rounded-md bg-surface-hover px-2 py-1 text-[11px] font-medium text-fg-muted`,children:t.marketplaceBuiltin}):n===`user`?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`span`,{className:`text-[11px] font-medium text-fg-muted`,children:t.marketplaceInstalled}),(0,X.jsxs)(`button`,{type:`button`,disabled:i,onClick:()=>{window.confirm(t.marketplaceUninstallConfirm)&&A(e.id).catch(()=>{})},className:f(`inline-flex items-center justify-center gap-1.5 rounded-lg border border-edge px-3 py-2 text-xs font-medium text-fg`,`transition-colors active:scale-[0.98] active:bg-surface-hover/80`,`hover:bg-surface-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,`disabled:pointer-events-none disabled:opacity-50`),children:[i?(0,X.jsx)(l,{className:`size-3.5 animate-spin`,"aria-hidden":!0}):(0,X.jsx)(te,{className:`size-3.5`,strokeWidth:2,"aria-hidden":!0}),t.marketplaceUninstall]})]}):(0,X.jsx)(`button`,{type:`button`,onClick:()=>o({type:`patch`,patch:{detailPkg:e.id}}),className:f(`inline-flex w-full items-center justify-center rounded-lg border border-edge px-3 py-2 text-xs font-medium text-fg`,`transition-[transform,background-color] active:scale-[0.98]`,`hover:bg-surface-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`),children:t.marketplaceReview})})]})},e.id)})}),u?(0,X.jsx)($,{packageName:u,copy:t,extensions:r,onClose:()=>o({type:`patch`,patch:{detailPkg:null}}),onInstall:D,onUninstall:A}):null]})}function $(e){let t=(0,W.c)(102),{packageName:n,copy:r,extensions:i,onClose:o,onInstall:s,onUninstall:u}=e,[p,h]=(0,U.useState)(!1),[g,_]=(0,U.useState)(!1),v=m(ue)?`ext-mp-detail-${n}`:null,b;t[0]===n?b=t[1]:(b=async()=>ie(n),t[0]=n,t[1]=b);let T;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(T={revalidateOnFocus:!1},t[2]=T):T=t[2];let{data:D,error:k,isLoading:A}=E(v,b,T),j;t[3]!==i||t[4]!==n?(j=ae(i,n),t[3]=i,t[4]=n,t[5]=j):j=t[5];let M=j,N=M===`user`,P=D?.manifest?.permissions,F,I,L,R,z,B,V,H,G,K,q;if(t[6]!==r.detailBack||t[7]!==r.detailClose||t[8]!==r.marketplaceAuthor||t[9]!==r.marketplaceCodeRisk||t[10]!==r.marketplaceDependencies||t[11]!==r.marketplaceDetailLoadFailed||t[12]!==r.marketplaceDetailReadmeHeading||t[13]!==r.marketplaceDetailTitle||t[14]!==r.marketplaceDownloads||t[15]!==r.marketplaceIntegrity||t[16]!==r.marketplaceIntegrityVerified||t[17]!==r.marketplaceLifecycleScripts||t[18]!==r.marketplaceLoadFailed||t[19]!==r.marketplaceLoading||t[20]!==r.marketplaceNoReadme||t[21]!==r.marketplacePermissions||t[22]!==r.marketplacePermissionsNone||t[23]!==r.marketplaceRiskConfirm||t[24]!==r.marketplaceRiskTitle||t[25]!==r.marketplaceUnavailableBody||t[26]!==r.marketplaceUnavailableTitle||t[27]!==r.marketplaceVersion||t[28]!==D||t[29]!==k||t[30]!==M||t[31]!==A||t[32]!==o||t[33]!==P||t[34]!==g){let e=P&&typeof P==`object`&&!Array.isArray(P)?Object.entries(P):[],n;t[46]!==r.marketplaceNoReadme||t[47]!==D?(n=D?.readme?.trim()||(D?.description?.trim()?`### ${D.name}\n\n${D.description}`:`*${r.marketplaceNoReadme}*`),t[46]=r.marketplaceNoReadme,t[47]=D,t[48]=n):n=t[48];let i=n;L=w,R=!0,t[49]===o?z=t[50]:(z=e=>!e&&o(),t[49]=o,t[50]=z),I=x,t[51]===Symbol.for(`react.memo_cache_sentinel`)?(q=(0,X.jsx)(y,{className:`xopc-dialog-overlay fixed inset-0 z-[130] bg-scrim`}),t[51]=q):q=t[51],F=S,H=`xopc-dialog-content fixed left-1/2 top-1/2 z-[131] flex h-[min(44rem,calc(100vh-1.5rem))] w-[min(42rem,calc(100vw-1.5rem))] -translate-x-1/2 -translate-y-1/2 flex-col overflow-hidden rounded-xl border border-edge bg-surface-overlay`,G=le;let a;t[52]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,X.jsx)(ee,{className:`size-5`}),t[52]=a):a=t[52];let s;t[53]!==r.detailBack||t[54]!==o?(s=(0,X.jsx)(`button`,{type:`button`,onClick:o,className:`inline-flex size-9 items-center justify-center rounded-lg text-fg-muted hover:bg-surface-hover hover:text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,"aria-label":r.detailBack,children:a}),t[53]=r.detailBack,t[54]=o,t[55]=s):s=t[55];let l;t[56]===r.marketplaceDetailTitle?l=t[57]:(l=(0,X.jsx)(C,{className:`min-w-0 flex-1 truncate text-center text-sm font-semibold text-fg`,children:r.marketplaceDetailTitle}),t[56]=r.marketplaceDetailTitle,t[57]=l);let u;t[58]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,X.jsx)(d,{className:`size-5`}),t[58]=u):u=t[58];let f;t[59]!==r.detailClose||t[60]!==o?(f=(0,X.jsx)(`button`,{type:`button`,onClick:o,className:`inline-flex size-9 items-center justify-center rounded-lg text-fg-muted hover:bg-surface-hover hover:text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,"aria-label":r.detailClose,children:u}),t[59]=r.detailClose,t[60]=o,t[61]=f):f=t[61],t[62]!==s||t[63]!==l||t[64]!==f?(K=(0,X.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-2 border-b border-edge px-4 py-3`,children:[s,l,f]}),t[62]=s,t[63]=l,t[64]=f,t[65]=K):K=t[65],B=`min-h-0 flex-1 overflow-y-auto p-5`,V=A&&!D?(0,X.jsxs)(`div`,{className:`space-y-4`,"aria-label":r.marketplaceLoading,children:[(0,X.jsx)(O,{className:`h-6 w-48`}),(0,X.jsx)(O,{className:`h-4 w-28`}),(0,X.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,X.jsx)(O,{className:`h-12`}),(0,X.jsx)(O,{className:`h-12`})]}),(0,X.jsx)(O,{className:`h-28 w-full`}),(0,X.jsx)(O,{className:`h-36 w-full`})]}):k?(0,X.jsxs)(`div`,{className:`rounded-lg border border-red-300/70 bg-red-50 p-4 text-sm dark:border-red-900 dark:bg-red-950/30`,children:[(0,X.jsx)(`p`,{className:`font-medium text-red-700 dark:text-red-300`,children:r.marketplaceDetailLoadFailed}),(0,X.jsx)(`p`,{className:`mt-1 break-words text-red-600 dark:text-red-400`,children:k instanceof Error?k.message:r.marketplaceLoadFailed})]}):D?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`h3`,{className:`text-lg font-semibold text-fg`,children:D.name}),(0,X.jsx)(`p`,{className:`mt-1 text-xs text-fg-muted`,children:(0,X.jsx)(`code`,{className:`rounded bg-surface-panel px-1 py-0.5`,children:D.id})}),(0,X.jsxs)(`dl`,{className:`mt-3 grid gap-2 text-xs text-fg-muted sm:grid-cols-2`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`dt`,{className:`font-medium text-fg`,children:r.marketplaceAuthor}),(0,X.jsx)(`dd`,{children:D.author.username})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`dt`,{className:`font-medium text-fg`,children:r.marketplaceVersion}),(0,X.jsx)(`dd`,{children:D.latestVersion.version})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`dt`,{className:`font-medium text-fg`,children:r.marketplaceDownloads}),(0,X.jsx)(`dd`,{children:D.downloads})]})]}),M===`bundled`?null:(0,X.jsxs)(`section`,{className:`mt-5 space-y-3 rounded-lg border border-edge bg-surface-base p-4`,children:[(0,X.jsxs)(`div`,{className:`flex items-start gap-2.5`,children:[D.installability.available?(0,X.jsx)(re,{className:`mt-0.5 size-5 shrink-0 text-emerald-600 dark:text-emerald-400`,"aria-hidden":!0}):(0,X.jsx)(ne,{className:`mt-0.5 size-5 shrink-0 text-amber-600 dark:text-amber-400`,"aria-hidden":!0}),(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`h4`,{className:`text-sm font-semibold text-fg`,children:D.installability.available?r.marketplaceRiskTitle:r.marketplaceUnavailableTitle}),(0,X.jsx)(`p`,{className:`mt-1 text-xs leading-relaxed text-fg-muted`,children:D.installability.available?r.marketplaceCodeRisk:D.installability.reason??r.marketplaceUnavailableBody})]})]}),D.installability.available?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`dl`,{className:`grid gap-2 text-xs text-fg-muted sm:grid-cols-2`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`dt`,{className:`font-medium text-fg`,children:r.marketplaceIntegrity}),(0,X.jsx)(`dd`,{children:r.marketplaceIntegrityVerified})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`dt`,{className:`font-medium text-fg`,children:r.marketplaceDependencies}),(0,X.jsx)(`dd`,{children:D.packageSummary?.dependencyCount??0})]})]}),(0,X.jsxs)(`div`,{className:`text-xs text-fg-muted`,children:[(0,X.jsx)(`p`,{className:`font-medium text-fg`,children:r.marketplacePermissions}),e.length>0?(0,X.jsx)(`ul`,{className:`mt-1 space-y-1`,children:e.map(ce)}):(0,X.jsx)(`p`,{className:`mt-1`,children:r.marketplacePermissionsNone})]}),(D.packageSummary?.lifecycleScripts.length??0)>0?(0,X.jsxs)(`p`,{className:`text-xs leading-relaxed text-amber-700 dark:text-amber-300`,children:[r.marketplaceLifecycleScripts,`: `,D.packageSummary?.lifecycleScripts.join(`, `)]}):null,(0,X.jsxs)(`label`,{className:`flex cursor-pointer items-start gap-2 text-sm text-fg`,children:[(0,X.jsx)(`input`,{type:`checkbox`,checked:g,onChange:e=>_(e.target.checked),className:`mt-0.5 size-4 rounded border-edge accent-[var(--color-accent)]`}),(0,X.jsx)(`span`,{children:r.marketplaceRiskConfirm})]})]}):null]}),D.readme?.trim()?(0,X.jsx)(`h4`,{className:`mb-2 mt-6 text-sm font-semibold text-fg`,children:r.marketplaceDetailReadmeHeading}):null,(0,X.jsx)(`div`,{className:`markdown-content min-w-0 break-words text-sm`,children:(0,X.jsx)(c,{content:i})})]}):null,t[6]=r.detailBack,t[7]=r.detailClose,t[8]=r.marketplaceAuthor,t[9]=r.marketplaceCodeRisk,t[10]=r.marketplaceDependencies,t[11]=r.marketplaceDetailLoadFailed,t[12]=r.marketplaceDetailReadmeHeading,t[13]=r.marketplaceDetailTitle,t[14]=r.marketplaceDownloads,t[15]=r.marketplaceIntegrity,t[16]=r.marketplaceIntegrityVerified,t[17]=r.marketplaceLifecycleScripts,t[18]=r.marketplaceLoadFailed,t[19]=r.marketplaceLoading,t[20]=r.marketplaceNoReadme,t[21]=r.marketplacePermissions,t[22]=r.marketplacePermissionsNone,t[23]=r.marketplaceRiskConfirm,t[24]=r.marketplaceRiskTitle,t[25]=r.marketplaceUnavailableBody,t[26]=r.marketplaceUnavailableTitle,t[27]=r.marketplaceVersion,t[28]=D,t[29]=k,t[30]=M,t[31]=A,t[32]=o,t[33]=P,t[34]=g,t[35]=F,t[36]=I,t[37]=L,t[38]=R,t[39]=z,t[40]=B,t[41]=V,t[42]=H,t[43]=G,t[44]=K,t[45]=q}else F=t[35],I=t[36],L=t[37],R=t[38],z=t[39],B=t[40],V=t[41],H=t[42],G=t[43],K=t[44],q=t[45];let J;t[66]!==B||t[67]!==V?(J=(0,X.jsx)(`div`,{className:B,children:V}),t[66]=B,t[67]=V,t[68]=J):J=t[68];let Y;t[69]!==p||t[70]!==r.marketplaceBuiltinGoBuiltin||t[71]!==r.marketplaceBuiltinManageHint||t[72]!==r.marketplaceInstall||t[73]!==r.marketplaceReinstall||t[74]!==r.marketplaceReinstallConfirm||t[75]!==r.marketplaceUninstall||t[76]!==r.marketplaceUninstallConfirm||t[77]!==D||t[78]!==M||t[79]!==o||t[80]!==s||t[81]!==u||t[82]!==n||t[83]!==g||t[84]!==N?(Y=D?(0,X.jsx)(`div`,{className:`flex shrink-0 flex-wrap items-center justify-end gap-2 border-t border-edge-subtle px-5 py-4`,children:M===`bundled`?(0,X.jsxs)(`div`,{className:`flex w-full flex-col items-stretch gap-2`,children:[(0,X.jsx)(`p`,{className:`text-sm leading-relaxed text-fg-muted`,children:r.marketplaceBuiltinManageHint}),(0,X.jsx)(a,{to:`/extensions?tab=builtin`,onClick:o,className:`inline-flex w-fit items-center justify-center rounded-lg border border-edge px-3 py-2 text-sm font-medium text-fg hover:bg-surface-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,children:r.marketplaceBuiltinGoBuiltin})]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`button`,{type:`button`,disabled:p||!D.installability.available||!g,onClick:()=>{N&&!window.confirm(r.marketplaceReinstallConfirm)||(h(!0),s(n,N).catch(se).finally(()=>h(!1)))},className:f(`inline-flex items-center justify-center gap-1.5 rounded-lg px-3 py-2 text-sm font-medium`,`bg-accent text-on-accent shadow-surface hover:bg-accent-hover`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel`,`disabled:pointer-events-none disabled:opacity-50`),children:[p?(0,X.jsx)(l,{className:`size-4 animate-spin`,"aria-hidden":!0}):null,N?r.marketplaceReinstall:r.marketplaceInstall]}),N?(0,X.jsxs)(`button`,{type:`button`,disabled:p,onClick:()=>{window.confirm(r.marketplaceUninstallConfirm)&&(h(!0),u(n).then(()=>o()).catch(oe).finally(()=>h(!1)))},className:f(`inline-flex items-center justify-center gap-1.5 rounded-lg border border-edge px-3 py-2 text-sm font-medium text-fg`,`hover:bg-surface-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,`disabled:pointer-events-none disabled:opacity-50`),children:[(0,X.jsx)(te,{className:`size-4 shrink-0`,"aria-hidden":!0}),r.marketplaceUninstall]}):null]})}):null,t[69]=p,t[70]=r.marketplaceBuiltinGoBuiltin,t[71]=r.marketplaceBuiltinManageHint,t[72]=r.marketplaceInstall,t[73]=r.marketplaceReinstall,t[74]=r.marketplaceReinstallConfirm,t[75]=r.marketplaceUninstall,t[76]=r.marketplaceUninstallConfirm,t[77]=D,t[78]=M,t[79]=o,t[80]=s,t[81]=u,t[82]=n,t[83]=g,t[84]=N,t[85]=Y):Y=t[85];let Z;t[86]!==F||t[87]!==J||t[88]!==Y||t[89]!==H||t[90]!==G||t[91]!==K?(Z=(0,X.jsxs)(F,{className:H,onOpenAutoFocus:G,children:[K,J,Y]}),t[86]=F,t[87]=J,t[88]=Y,t[89]=H,t[90]=G,t[91]=K,t[92]=Z):Z=t[92];let Q;t[93]!==I||t[94]!==Z||t[95]!==q?(Q=(0,X.jsxs)(I,{children:[q,Z]}),t[93]=I,t[94]=Z,t[95]=q,t[96]=Q):Q=t[96];let $;return t[97]!==L||t[98]!==R||t[99]!==z||t[100]!==Q?($=(0,X.jsx)(L,{defaultOpen:R,onOpenChange:z,children:Q}),t[97]=L,t[98]=R,t[99]=z,t[100]=Q,t[101]=$):$=t[101],$}function oe(){}function se(){}function ce(e){let[t,n]=e;return(0,X.jsxs)(`li`,{className:`break-words`,children:[(0,X.jsx)(`code`,{children:t}),`: `,Array.isArray(n)?n.join(`, `):String(n)]},t)}function le(e){return e.preventDefault()}function ue(e){return!!e.conversationId}function de(){let e=g(e=>e.language),t=v(e),n=z(e=>e.setPageHeader),r=z(e=>e.clearPageHeader),o=N(),s=V(),[c,l]=i(),d=G(c.get(`tab`)),f=c.get(`q`)??``,[p,m]=(0,U.useState)(d),[h,_]=(0,U.useState)(f),[y,b]=(0,U.useState)(null),x=c.toString(),S=(0,U.useRef)(x);if(S.current!==x){S.current=x;let e=G(c.get(`tab`)),t=c.get(`q`)??``;m(t=>t===e?t:e),_(e=>e===t?e:t)}(0,U.useEffect)(()=>{l(e=>{let t=new URLSearchParams(e),n=h.trim();return n?t.set(`q`,n):t.delete(`q`),p===`marketplace`?t.delete(`tab`):t.set(`tab`,p),t.toString()===e.toString()?e:t},{replace:!0})},[p,h,l]);let C=(0,U.useMemo)(()=>o.filter(e=>e.source===`bundled`),[o]),w=(0,U.useMemo)(()=>o.filter(e=>e.source!==`bundled`),[o]),T=p===`builtin`?C:w,E=(0,U.useMemo)(()=>{let t=h.trim().toLowerCase(),n=T;return t&&(n=n.filter(e=>(e.name??``).toLowerCase().includes(t)||e.id.toLowerCase().includes(t)||(e.description??``).toLowerCase().includes(t))),n.toSorted((t,n)=>t.hasUi===n.hasUi?(t.name||t.id).localeCompare(n.name||n.id,e):t.hasUi?-1:1)},[T,h,e]);if((0,U.useEffect)(()=>{b(e=>{if(!e)return e;let t=o.find(t=>t.id===e.id);return t?fe(e)===fe(t)&&e.active===t.active?e:t:null})},[o]),(0,U.useLayoutEffect)(()=>(n({startExtra:null,main:(0,X.jsx)(`div`,{className:`min-w-0`,children:(0,X.jsx)(`h1`,{className:`truncate text-base font-semibold tracking-tight text-fg`,children:t.extensionsPage.title})}),end:(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(D,{asChild:!0,variant:`secondary`,className:`h-9`,children:(0,X.jsxs)(a,{to:`/local-apps`,"aria-label":t.extensionsPage.openLocalApps,title:t.extensionsPage.openLocalApps,children:[(0,X.jsx)(F,{className:`size-4`}),(0,X.jsx)(`span`,{className:`hidden sm:inline`,children:t.extensionsPage.openLocalApps})]})}),(0,X.jsx)(D,{asChild:!0,variant:`primary`,className:`h-9`,children:(0,X.jsxs)(a,{to:`/local-apps/new`,children:[(0,X.jsx)(u,{className:`size-4`}),t.extensionsPage.createLocalApp]})})]})}),()=>r()),[r,t.extensionsPage.createLocalApp,t.extensionsPage.openLocalApps,t.extensionsPage.title,n]),s&&p!==`marketplace`)return(0,X.jsx)(ye,{});let O=p!==`marketplace`&&T.length>0;return(0,X.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col bg-surface-panel`,children:[(0,X.jsxs)(`div`,{className:`mx-auto w-full max-w-7xl px-4 py-7 sm:px-6 lg:px-8 lg:py-9`,children:[(0,X.jsxs)(`div`,{className:`mb-6 flex flex-col gap-3 border-b border-edge-subtle pb-4 sm:flex-row sm:items-center sm:justify-between`,children:[(0,X.jsx)(H,{items:[{id:`marketplace`,label:t.extensionsPage.tabMarketplace},{id:`builtin`,label:t.extensionsPage.tabBuiltin,count:C.length},{id:`user`,label:t.extensionsPage.tabUser,count:w.length}],activeTab:p,onChange:m,ariaLabel:t.extensionsPage.extensionsNavAria,tabIdPrefix:`extensions-tab`,panelIdPrefix:`extensions-panel`,className:`flex-wrap`}),O?(0,X.jsxs)(`div`,{className:`relative w-full min-w-0 sm:max-w-xs`,children:[(0,X.jsx)(j,{className:`pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-fg-muted`,"aria-hidden":!0}),(0,X.jsx)(`input`,{type:`search`,value:h,onChange:e=>_(e.target.value),placeholder:t.extensionsPage.searchPlaceholder,className:`w-full rounded-lg border border-edge bg-surface-base py-2 pl-9 pr-3 text-sm text-fg placeholder:text-fg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,autoComplete:`off`})]}):null]}),p===`marketplace`?(0,X.jsx)(Q,{}):p===`builtin`&&C.length===0?(0,X.jsx)(xe,{message:t.extensionsPage.emptyBuiltin}):p===`user`&&w.length===0?(0,X.jsx)(xe,{message:t.extensionsPage.emptyUser}):E.length===0?(0,X.jsx)(`p`,{className:`px-3 py-14 text-center text-sm text-fg-muted sm:px-5 xl:px-6`,children:t.extensionsPage.noSearchResults}):(0,X.jsx)(`div`,{className:`grid gap-4 sm:grid-cols-2 lg:grid-cols-3`,children:E.map(e=>(0,X.jsx)(ge,{extension:e,copy:t.extensionsPage,showSourceBadge:p===`user`,onOpen:()=>b(e)},e.id))})]}),y?(0,X.jsx)(_e,{extension:y,copy:t.extensionsPage,onClose:()=>b(null)},y.id):null]})}function fe(e){return e.activationEligible??e.active}function pe(e,t){return e.source===`bundled`?t.providerBundled:e.source===`global`?t.providerGlobal:e.source===`workspace`?t.providerWorkspace:t.providerOther}function me(e,t){return e.source===`global`?t.badgeSourceGlobal:e.source===`workspace`?t.badgeSourceWorkspace:t.badgeSourceOther}function he(e,t){let n=fe(e);return n&&e.active?t.runStateLive:n&&!e.active?t.runStatePendingOn:!n&&e.active?t.runStatePendingOff:t.runStateOff}function ge(e){let t=(0,W.c)(45),{extension:n,copy:r,showSourceBadge:i,onOpen:a}=e,s;t[0]===n?s=t[1]:(s=fe(n),t[0]=n,t[1]=s);let c=s,l=n.hasUi?r.cardTooltipHasUi:r.cardTooltipNoUi,d;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(d=f(`group flex w-full flex-col rounded-xl border border-edge-subtle bg-surface-base p-4 text-left shadow-surface transition-colors`,`hover:bg-surface-hover/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,`dark:hover:bg-surface-hover/25`),t[2]=d):d=t[2];let p=n.name||n.id,m;t[3]===p?m=t[4]:(m=p.charAt(0).toUpperCase(),t[3]=p,t[4]=m);let h;t[5]===m?h=t[6]:(h=(0,X.jsx)(`div`,{className:`flex size-12 shrink-0 items-center justify-center rounded-xl bg-accent-soft text-base font-semibold text-accent-fg`,"aria-hidden":!0,children:m}),t[5]=m,t[6]=h);let g;t[7]===n.name?g=t[8]:(g=(0,X.jsx)(`h2`,{className:`truncate text-sm font-semibold text-fg`,children:n.name}),t[7]=n.name,t[8]=g);let _;t[9]===n.version?_=t[10]:(_=n.version?(0,X.jsxs)(`span`,{className:`text-[11px] text-fg-muted`,children:[`v`,n.version]}):null,t[9]=n.version,t[10]=_);let v;t[11]!==g||t[12]!==_?(v=(0,X.jsxs)(`div`,{className:`min-w-0`,children:[g,_]}),t[11]=g,t[12]=_,t[13]=v):v=t[13];let y;t[14]!==r.statusEnabled||t[15]!==c?(y=c?(0,X.jsxs)(`span`,{className:`inline-flex shrink-0 items-center gap-1 rounded-full bg-surface-hover px-2 py-0.5 text-[11px] font-medium text-fg-muted`,children:[(0,X.jsx)(o,{className:`size-3`,strokeWidth:2.5,"aria-hidden":!0}),r.statusEnabled]}):(0,X.jsx)(`span`,{className:`flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-accent text-accent`,"aria-hidden":!0,children:(0,X.jsx)(u,{className:`size-4`,strokeWidth:2.5})}),t[14]=r.statusEnabled,t[15]=c,t[16]=y):y=t[16];let b;t[17]!==v||t[18]!==y?(b=(0,X.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[v,y]}),t[17]=v,t[18]=y,t[19]=b):b=t[19];let x;t[20]!==r.cardNoDescription||t[21]!==n.description?(x=n.description?.trim()||r.cardNoDescription,t[20]=r.cardNoDescription,t[21]=n.description,t[22]=x):x=t[22];let S;t[23]===x?S=t[24]:(S=(0,X.jsx)(`p`,{className:`mt-2 line-clamp-2 text-xs leading-relaxed text-fg-muted`,children:x}),t[23]=x,t[24]=S);let C=n.hasUi?r.badgeKindUi:r.badgeKindBackend,w;t[25]!==C||t[26]!==l?(w=(0,X.jsx)(`span`,{title:l,className:`rounded-md bg-surface-hover px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-fg-muted`,children:C}),t[25]=C,t[26]=l,t[27]=w):w=t[27];let T;t[28]!==r||t[29]!==n||t[30]!==i?(T=n.source===`bundled`?(0,X.jsx)(`span`,{className:`rounded-md bg-surface-hover px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-fg-muted`,children:r.badgeBundled}):i?(0,X.jsx)(`span`,{title:pe(n,r),className:`rounded-md bg-surface-hover px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-fg-muted`,children:me(n,r)}):null,t[28]=r,t[29]=n,t[30]=i,t[31]=T):T=t[31];let E;t[32]!==w||t[33]!==T?(E=(0,X.jsxs)(`div`,{className:`mt-2 flex flex-wrap gap-1.5`,children:[w,T]}),t[32]=w,t[33]=T,t[34]=E):E=t[34];let D;t[35]!==b||t[36]!==S||t[37]!==E?(D=(0,X.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[b,S,E]}),t[35]=b,t[36]=S,t[37]=E,t[38]=D):D=t[38];let O;t[39]!==D||t[40]!==h?(O=(0,X.jsxs)(`div`,{className:`flex gap-3`,children:[h,D]}),t[39]=D,t[40]=h,t[41]=O):O=t[41];let k;return t[42]!==a||t[43]!==O?(k=(0,X.jsx)(`button`,{type:`button`,onClick:a,className:d,children:O}),t[42]=a,t[43]=O,t[44]=k):k=t[44],k}function _e({extension:e,copy:t,onClose:n}){let{mutate:r}=T(),[i,o]=(0,U.useState)(!1),[c,u]=(0,U.useState)(null),[p,m]=(0,U.useState)(!1),h=e.activationEligible===!0,g=(0,U.useCallback)(async()=>{if(e.source===`bundled`){u(null),m(!1),o(!0);try{let{requiresGatewayRestart:t}=await J({extensionId:e.id,enabled:!h});await r(`gateway-extensions-list`),k(),m(t)}catch(e){u(e instanceof Error?e.message:t.builtinToggleFailed)}finally{o(!1)}}},[h,t.builtinToggleFailed,e.id,e.source,r]),_=e.ui?.contributions?.pages??[],v=e.ui?.contributions?.settingsPanels??[],E=e.ui?.contributions?.chatWidgets??[],O=_.find(e=>e.showInNav)??_[0],j=v[0],N=O?I(e.id,O):null,P=j?`/settings/ext/${e.id}/${j.id}`:e.hasConfigSchema||M(e)?`/settings/ext/${e.id}`:null;return(0,X.jsx)(w,{defaultOpen:!0,onOpenChange:e=>!e&&n(),children:(0,X.jsxs)(x,{children:[(0,X.jsx)(y,{className:`xopc-dialog-overlay fixed inset-0 z-[130] bg-scrim`}),(0,X.jsxs)(S,{className:`xopc-dialog-content fixed left-1/2 top-1/2 z-[131] flex max-h-[min(90vh,44rem)] w-[min(42rem,calc(100vw-1.5rem))] -translate-x-1/2 -translate-y-1/2 flex-col overflow-hidden rounded-xl border border-edge bg-surface-overlay`,onOpenAutoFocus:e=>e.preventDefault(),children:[(0,X.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-2 border-b border-edge px-4 py-3`,children:[(0,X.jsx)(`button`,{type:`button`,onClick:n,className:`inline-flex size-9 items-center justify-center rounded-lg text-fg-muted hover:bg-surface-hover hover:text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,"aria-label":t.detailBack,children:(0,X.jsx)(ee,{className:`size-5`})}),(0,X.jsx)(C,{className:`min-w-0 flex-1 truncate text-center text-sm font-semibold text-fg`,children:t.detailTitle}),(0,X.jsxs)(b,{className:`sr-only`,children:[e.name,` (`,e.id,`)`]}),(0,X.jsx)(`button`,{type:`button`,onClick:n,className:`inline-flex size-9 items-center justify-center rounded-lg text-fg-muted hover:bg-surface-hover hover:text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,"aria-label":t.detailClose,children:(0,X.jsx)(d,{className:`size-5`})})]}),(0,X.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto p-5`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-start gap-4`,children:[(0,X.jsx)(`div`,{className:`flex size-16 shrink-0 items-center justify-center rounded-2xl bg-accent-soft text-xl font-semibold text-accent-fg`,"aria-hidden":!0,children:(e.name||e.id).charAt(0).toUpperCase()}),(0,X.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,X.jsx)(`h3`,{className:`text-lg font-semibold text-fg`,children:e.name}),(0,X.jsxs)(`p`,{className:`mt-0.5 text-sm text-fg-muted`,children:[t.detailProviderPrefix,` `,pe(e,t)]}),e.version?(0,X.jsxs)(`p`,{className:`mt-1 text-xs text-fg-muted`,children:[`v`,e.version]}):null]})]}),(0,X.jsx)(`p`,{className:`mt-5 text-sm leading-relaxed text-fg`,children:e.description?.trim()||t.detailNoDescription}),e.hasUi?null:(0,X.jsx)(`p`,{className:`mt-3 text-xs text-fg-muted`,children:t.backendOnlyHint}),(0,X.jsx)(`p`,{className:`mt-2 text-xs text-fg-muted`,children:he(e,t)}),e.source===`bundled`?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`p`,{className:`mt-4 rounded-lg bg-surface-hover/40 px-3 py-2 text-xs text-fg-muted shadow-surface dark:bg-surface-hover/20`,children:t.builtinConfigHint}),(0,X.jsxs)(`div`,{className:`mt-3 rounded-lg bg-surface-hover/40 p-3 shadow-surface dark:bg-surface-hover/20`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,X.jsx)(`span`,{className:`text-xs font-medium text-fg`,children:t.builtinRuntimeToggle}),(0,X.jsx)(D,{type:`button`,variant:`secondary`,disabled:i,onClick:()=>void g(),className:`shrink-0 py-1.5 text-xs`,children:i?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(l,{className:`mr-1.5 size-3.5 shrink-0 animate-spin`,"aria-hidden":!0}),t.builtinToggleBusy]}):h?t.builtinToggleDisable:t.builtinToggleEnable})]}),c?(0,X.jsx)(`p`,{className:`mt-2 text-xs text-rose-600 dark:text-rose-400`,children:c}):null,p?(0,X.jsx)(`p`,{className:`mt-2 text-xs text-fg-muted`,children:t.builtinToggleRestartHint}):null]})]}):(0,X.jsx)(`p`,{className:`mt-4 rounded-lg bg-surface-hover/40 px-3 py-2 text-xs text-fg-muted shadow-surface dark:bg-surface-hover/20`,children:t.cliManageHint}),e.hasUi&&(_.length>0||v.length>0||E.length>0)?(0,X.jsxs)(`section`,{className:`mt-8`,children:[(0,X.jsx)(`h4`,{className:`mb-3 text-sm font-semibold text-fg`,children:t.detailSectionFeatures}),(0,X.jsxs)(`div`,{className:`flex flex-wrap gap-1.5`,children:[(0,X.jsx)(ve,{template:t.badgePages,count:_.length,hidden:_.length===0}),(0,X.jsx)(ve,{template:t.badgeSettings,count:v.length,hidden:v.length===0}),(0,X.jsx)(ve,{template:t.badgeWidgets,count:E.length,hidden:E.length===0})]})]}):null,R(e)&&(N||P)?(0,X.jsxs)(`div`,{className:`mt-6 flex flex-wrap gap-2 border-t border-edge-subtle pt-4`,children:[N?(0,X.jsxs)(a,{to:N,onClick:n,className:f(`inline-flex items-center gap-1.5 rounded-lg border border-edge px-3 py-2 text-sm font-medium text-fg`,`hover:bg-surface-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`),children:[(0,X.jsx)(s,{className:`size-4 shrink-0 opacity-80`,"aria-hidden":!0}),t.open]}):null,P?(0,X.jsxs)(a,{to:P,onClick:n,className:f(`inline-flex items-center gap-1.5 rounded-lg border border-edge px-3 py-2 text-sm font-medium text-fg`,`hover:bg-surface-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`),children:[(0,X.jsx)(A,{className:`size-4 shrink-0 opacity-80`,"aria-hidden":!0}),t.openSettings]}):null]}):null,(0,X.jsx)(`p`,{className:`mt-6 text-[11px] leading-relaxed text-fg-muted`,children:t.restartNote})]})]})]})})}function ve(e){let t=(0,W.c)(6),{template:n,count:r,hidden:i}=e;if(i||r===0)return null;let a;if(t[0]!==r||t[1]!==n){let e;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(e=/\{\{count\}\}/g,t[3]=e):e=t[3],a=n.replace(e,String(r)),t[0]=r,t[1]=n,t[2]=a}else a=t[2];let o;return t[4]===a?o=t[5]:(o=(0,X.jsx)(`span`,{className:`inline-flex items-center rounded-md bg-surface-hover px-2 py-0.5 text-[11px] font-medium text-fg-muted`,children:a}),t[4]=a,t[5]=o),o}function ye(){let e=(0,W.c)(5),t,n,r;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,X.jsx)(`div`,{className:`mb-6 h-8 w-40 max-w-full animate-pulse rounded-md bg-surface-hover`}),n=(0,X.jsx)(`div`,{className:`mb-2 h-4 w-full max-w-md animate-pulse rounded bg-surface-hover`}),r=(0,X.jsx)(`div`,{className:`mb-5 h-9 w-full max-w-lg animate-pulse rounded-full bg-surface-hover`}),e[0]=t,e[1]=n,e[2]=r):(t=e[0],n=e[1],r=e[2]);let i;e[3]===Symbol.for(`react.memo_cache_sentinel`)?(i=[`ap0`,`ap1`,`ap2`,`ap3`,`ap4`,`ap5`],e[3]=i):i=e[3];let a;return e[4]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,X.jsx)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col bg-surface-panel`,children:(0,X.jsxs)(`div`,{className:`w-full px-3 py-8 sm:px-5 xl:px-6`,children:[t,n,r,(0,X.jsx)(`div`,{className:`mt-6 grid gap-4 sm:grid-cols-2 lg:grid-cols-3`,children:i.map(be)})]})}),e[4]=a):a=e[4],a}function be(e){return(0,X.jsx)(`div`,{className:`h-36 animate-pulse rounded-xl border border-edge-subtle bg-surface-base shadow-surface`},e)}function xe(e){let t=(0,W.c)(2),{message:n}=e,r;return t[0]===n?r=t[1]:(r=(0,X.jsx)(`div`,{className:`flex min-h-[min(40vh,16rem)] flex-col items-center justify-center rounded-xl border border-edge-subtle bg-surface-base px-4 py-12 text-center shadow-surface`,children:(0,X.jsx)(`p`,{className:`text-sm text-fg-muted`,children:n})}),t[0]=n,t[1]=r),r}export{de as ExtensionsPage};