@agent-native/core 0.117.0 → 0.117.2

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 (357) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +16 -0
  3. package/corpus/core/package.json +2 -1
  4. package/corpus/core/src/cli/context-xray-local.ts +1 -1
  5. package/corpus/core/src/client/extensions/ExtensionViewer.tsx +4 -4
  6. package/corpus/core/src/client/extensions/ExtensionsSidebarSection.tsx +11 -11
  7. package/corpus/core/src/client/extensions/agent-native-extension-runtime.ts +1 -1
  8. package/corpus/core/src/client/extensions/delete-extension.ts +2 -2
  9. package/corpus/core/src/client/org/OrgSwitcher.tsx +25 -1
  10. package/corpus/core/src/client/settings/SettingsPanel.tsx +102 -10
  11. package/corpus/core/src/client/sharing/ShareButton.tsx +7 -6
  12. package/corpus/core/src/db/client.ts +13 -10
  13. package/corpus/core/src/deploy/workspace-deploy.ts +14 -4
  14. package/corpus/core/src/extensions/actions.ts +13 -5
  15. package/corpus/core/src/extensions/local.ts +1 -0
  16. package/corpus/core/src/extensions/routes.ts +10 -5
  17. package/corpus/core/src/extensions/schema.ts +5 -0
  18. package/corpus/core/src/extensions/slots/store.ts +14 -4
  19. package/corpus/core/src/extensions/store.ts +55 -19
  20. package/corpus/core/src/extensions/theme.ts +1 -1
  21. package/corpus/core/src/file-upload/registry.ts +9 -0
  22. package/corpus/core/src/index.browser.ts +5 -0
  23. package/corpus/core/src/index.ts +1 -0
  24. package/corpus/core/src/localization/default-messages.ts +23 -6
  25. package/corpus/core/src/server/action-discovery.ts +8 -0
  26. package/corpus/core/src/server/better-auth-instance.ts +7 -2
  27. package/corpus/core/src/server/email-template.ts +18 -0
  28. package/corpus/core/src/server/email-templates.ts +3 -0
  29. package/corpus/core/src/server/email.ts +40 -4
  30. package/corpus/core/src/sharing/actions/share-resource.ts +1 -0
  31. package/corpus/core/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  32. package/corpus/core/src/templates/default/app/global.css +1 -1
  33. package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +6 -6
  34. package/corpus/core/src/templates/default/app/i18n/de-DE.ts +6 -6
  35. package/corpus/core/src/templates/default/app/i18n/en-US.ts +6 -6
  36. package/corpus/core/src/templates/default/app/i18n/es-ES.ts +6 -6
  37. package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +6 -6
  38. package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +6 -6
  39. package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +6 -6
  40. package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +6 -6
  41. package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +6 -6
  42. package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +7 -7
  43. package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +7 -7
  44. package/corpus/core/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  45. package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  46. package/corpus/core/src/user-profile/actions/get-user-profile.ts +16 -0
  47. package/corpus/core/src/user-profile/actions/update-user-profile.ts +24 -0
  48. package/corpus/core/src/user-profile/index.ts +5 -0
  49. package/corpus/core/src/user-profile/shared.ts +14 -0
  50. package/corpus/core/src/user-profile/store.ts +50 -0
  51. package/corpus/templates/analytics/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  52. package/corpus/templates/assets/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  53. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +2 -2
  54. package/corpus/templates/assets/app/global.css +1 -1
  55. package/corpus/templates/assets/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  56. package/corpus/templates/brain/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  57. package/corpus/templates/brain/app/global.css +2 -2
  58. package/corpus/templates/brain/app/lib/brain.ts +2 -2
  59. package/corpus/templates/brain/app/root.tsx +2 -2
  60. package/corpus/templates/brain/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  61. package/corpus/templates/calendar/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  62. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +6 -2
  63. package/corpus/templates/calendar/app/global.css +1 -1
  64. package/corpus/templates/calendar/app/root.tsx +2 -2
  65. package/corpus/templates/calendar/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  66. package/corpus/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  67. package/corpus/templates/chat/app/components/layout/Sidebar.tsx +2 -2
  68. package/corpus/templates/chat/app/global.css +1 -1
  69. package/corpus/templates/chat/app/root.tsx +2 -2
  70. package/corpus/templates/chat/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  71. package/corpus/templates/clips/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  72. package/corpus/templates/clips/actions/export-to-brain.ts +1 -1
  73. package/corpus/templates/clips/actions/invite-member.ts +1 -0
  74. package/corpus/templates/clips/app/components/library/library-layout.tsx +2 -2
  75. package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +20 -11
  76. package/corpus/templates/clips/app/global.css +1 -1
  77. package/corpus/templates/clips/app/root.tsx +7 -2
  78. package/corpus/templates/clips/app/routes/record.tsx +2 -88
  79. package/corpus/templates/clips/changelog/2026-07-22-builder-connected-recordings-start-resumable-upload-sessions.md +6 -0
  80. package/corpus/templates/clips/changelog/2026-07-22-clip-thumbnails-now-come-from-the-recording-instead-of-the-p.md +6 -0
  81. package/corpus/templates/clips/changelog/2026-07-22-clips-emails-now-render-the-agent-native-logo-in-gmail-and-o.md +6 -0
  82. package/corpus/templates/clips/changelog/2026-07-22-dismissed-zoom-and-teams-meeting-note-prompts-now-stay-dismi.md +6 -0
  83. package/corpus/templates/clips/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  84. package/corpus/templates/clips/changelog/2026-07-22-quieter-permissions-and-rewind-controls.md +6 -0
  85. package/corpus/templates/clips/desktop/src/app.tsx +86 -52
  86. package/corpus/templates/clips/desktop/src/lib/meeting-notification-dismissal.ts +31 -0
  87. package/corpus/templates/clips/desktop/src/lib/recorder.ts +4 -167
  88. package/corpus/templates/clips/desktop/src/overlays/meeting-notification.tsx +10 -1
  89. package/corpus/templates/clips/desktop/src/styles.css +98 -36
  90. package/corpus/templates/clips/desktop/src-tauri/src/adhoc_meetings_watcher.rs +67 -4
  91. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +1 -1
  92. package/corpus/templates/clips/desktop/src-tauri/src/meetings_watcher.rs +51 -0
  93. package/corpus/templates/clips/desktop/src-tauri/src/native_screen/custom_capture.rs +5 -1
  94. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +0 -189
  95. package/corpus/templates/clips/desktop/src-tauri/src/notifications.rs +62 -0
  96. package/corpus/templates/clips/server/plugins/db.ts +6 -2
  97. package/corpus/templates/content/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  98. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +3 -3
  99. package/corpus/templates/content/app/global.css +1 -1
  100. package/corpus/templates/content/app/root.tsx +2 -2
  101. package/corpus/templates/content/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  102. package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  103. package/corpus/templates/crm/app/global.css +1 -1
  104. package/corpus/templates/design/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  105. package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +19 -1
  106. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +12 -1
  107. package/corpus/templates/design/app/components/design/EditPanel.tsx +177 -52
  108. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +179 -59
  109. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +74 -27
  110. package/corpus/templates/design/app/components/design/multi-screen/types.ts +2 -0
  111. package/corpus/templates/design/app/components/layout/Sidebar.tsx +2 -2
  112. package/corpus/templates/design/app/global.css +1 -1
  113. package/corpus/templates/design/app/hooks/use-navigation-state.ts +6 -5
  114. package/corpus/templates/design/app/root.tsx +2 -2
  115. package/corpus/templates/design/changelog/2026-07-22-design-owners-can-keep-editing-their-designs-after-switching.md +6 -0
  116. package/corpus/templates/design/changelog/2026-07-22-inspector-tabs-keep-their-text-labels-at-narrow-widths.md +6 -0
  117. package/corpus/templates/design/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  118. package/corpus/templates/design/changelog/2026-07-22-narrow-breakpoint-previews-keep-their-device-labels-readable.md +6 -0
  119. package/corpus/templates/design/changelog/2026-07-22-removed-the-draft-status-chip-from-the-design-editor.md +6 -0
  120. package/corpus/templates/design/changelog/2026-07-22-responsive-breakpoint-controls-stay-within-narrow-sidebars.md +6 -0
  121. package/corpus/templates/design/changelog/2026-07-22-responsive-peers-now-use-a-softer-selection-highlight-withou.md +6 -0
  122. package/corpus/templates/design/changelog/2026-07-22-rotate-from-context-menu.md +6 -0
  123. package/corpus/templates/design/changelog/2026-07-22-the-selection-outline-now-stays-attached-while-moving-screen.md +6 -0
  124. package/corpus/templates/design/changelog/2026-07-22-view-only-designs-now-support-figma-style-layer-inspection-w.md +6 -0
  125. package/corpus/templates/design/server/db/index.ts +4 -0
  126. package/corpus/templates/dispatch/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  127. package/corpus/templates/dispatch/app/dispatch-extensions.tsx +2 -2
  128. package/corpus/templates/dispatch/app/global.css +1 -1
  129. package/corpus/templates/dispatch/app/root.tsx +2 -2
  130. package/corpus/templates/dispatch/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  131. package/corpus/templates/forms/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  132. package/corpus/templates/forms/app/components/layout/Layout.tsx +1 -1
  133. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +3 -3
  134. package/corpus/templates/forms/app/global.css +1 -1
  135. package/corpus/templates/forms/app/hooks/use-forms.ts +55 -2
  136. package/corpus/templates/forms/app/i18n/en-US.ts +2 -0
  137. package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +3 -3
  138. package/corpus/templates/forms/app/pages/FormsListPage.tsx +23 -6
  139. package/corpus/templates/forms/app/root.tsx +2 -2
  140. package/corpus/templates/forms/changelog/2026-07-22-forms-now-archive-with-optimistic-feedback.md +6 -0
  141. package/corpus/templates/forms/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  142. package/corpus/templates/forms/server/plugins/agent-chat.ts +1 -1
  143. package/corpus/templates/macros/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  144. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +2 -2
  145. package/corpus/templates/macros/app/root.tsx +2 -2
  146. package/corpus/templates/macros/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  147. package/corpus/templates/mail/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  148. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +3 -3
  149. package/corpus/templates/mail/app/components/layout/CommandPalette.tsx +2 -2
  150. package/corpus/templates/mail/app/global.css +1 -1
  151. package/corpus/templates/mail/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  152. package/corpus/templates/plan/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  153. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +2 -2
  154. package/corpus/templates/plan/app/global.css +1 -1
  155. package/corpus/templates/plan/app/root.tsx +2 -2
  156. package/corpus/templates/plan/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  157. package/corpus/templates/slides/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  158. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +2 -2
  159. package/corpus/templates/slides/app/root.tsx +2 -2
  160. package/corpus/templates/slides/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  161. package/corpus/templates/slides/changelog/2026-07-22-slides-no-longer-fail-intermittently-on-fresh-server-instances.md +6 -0
  162. package/corpus/templates/slides/changelog/2026-07-22-uploaded-screenshots-can-now-be-analyzed-and-recreated-as-ed.md +6 -0
  163. package/corpus/templates/slides/server/lib/chat-attachments.ts +7 -3
  164. package/corpus/templates/slides/server/plugins/db.ts +44 -17
  165. package/corpus/templates/tasks/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  166. package/corpus/templates/tasks/app/global.css +1 -1
  167. package/dist/cli/context-xray-local.js +1 -1
  168. package/dist/cli/context-xray-local.js.map +1 -1
  169. package/dist/client/extensions/ExtensionViewer.js +2 -2
  170. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  171. package/dist/client/extensions/ExtensionsSidebarSection.js +11 -11
  172. package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
  173. package/dist/client/extensions/agent-native-extension-runtime.js +1 -1
  174. package/dist/client/extensions/agent-native-extension-runtime.js.map +1 -1
  175. package/dist/client/extensions/delete-extension.d.ts +1 -1
  176. package/dist/client/extensions/delete-extension.d.ts.map +1 -1
  177. package/dist/client/extensions/delete-extension.js +1 -1
  178. package/dist/client/extensions/delete-extension.js.map +1 -1
  179. package/dist/client/org/OrgSwitcher.d.ts +3 -1
  180. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  181. package/dist/client/org/OrgSwitcher.js +12 -4
  182. package/dist/client/org/OrgSwitcher.js.map +1 -1
  183. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  184. package/dist/client/settings/SettingsPanel.js +37 -4
  185. package/dist/client/settings/SettingsPanel.js.map +1 -1
  186. package/dist/client/sharing/ShareButton.d.ts +3 -4
  187. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  188. package/dist/client/sharing/ShareButton.js +3 -2
  189. package/dist/client/sharing/ShareButton.js.map +1 -1
  190. package/dist/collab/awareness.d.ts +2 -2
  191. package/dist/collab/awareness.d.ts.map +1 -1
  192. package/dist/collab/routes.d.ts +1 -1
  193. package/dist/collab/struct-routes.d.ts +1 -1
  194. package/dist/db/client.d.ts +7 -7
  195. package/dist/db/client.d.ts.map +1 -1
  196. package/dist/db/client.js +13 -10
  197. package/dist/db/client.js.map +1 -1
  198. package/dist/deploy/workspace-deploy.js +14 -4
  199. package/dist/deploy/workspace-deploy.js.map +1 -1
  200. package/dist/extensions/actions.d.ts.map +1 -1
  201. package/dist/extensions/actions.js +8 -5
  202. package/dist/extensions/actions.js.map +1 -1
  203. package/dist/extensions/local.d.ts.map +1 -1
  204. package/dist/extensions/local.js +1 -0
  205. package/dist/extensions/local.js.map +1 -1
  206. package/dist/extensions/routes.d.ts.map +1 -1
  207. package/dist/extensions/routes.js +9 -4
  208. package/dist/extensions/routes.js.map +1 -1
  209. package/dist/extensions/schema.d.ts +23 -2
  210. package/dist/extensions/schema.d.ts.map +1 -1
  211. package/dist/extensions/schema.js +5 -0
  212. package/dist/extensions/schema.js.map +1 -1
  213. package/dist/extensions/slots/store.d.ts +1 -1
  214. package/dist/extensions/slots/store.d.ts.map +1 -1
  215. package/dist/extensions/slots/store.js +4 -4
  216. package/dist/extensions/slots/store.js.map +1 -1
  217. package/dist/extensions/store.d.ts +1 -0
  218. package/dist/extensions/store.d.ts.map +1 -1
  219. package/dist/extensions/store.js +38 -21
  220. package/dist/extensions/store.js.map +1 -1
  221. package/dist/extensions/theme.js +1 -1
  222. package/dist/extensions/theme.js.map +1 -1
  223. package/dist/file-upload/registry.d.ts.map +1 -1
  224. package/dist/file-upload/registry.js +9 -0
  225. package/dist/file-upload/registry.js.map +1 -1
  226. package/dist/index.browser.d.ts +1 -0
  227. package/dist/index.browser.d.ts.map +1 -1
  228. package/dist/index.browser.js +1 -0
  229. package/dist/index.browser.js.map +1 -1
  230. package/dist/index.d.ts +1 -0
  231. package/dist/index.d.ts.map +1 -1
  232. package/dist/index.js +1 -0
  233. package/dist/index.js.map +1 -1
  234. package/dist/localization/default-messages.d.ts +16 -0
  235. package/dist/localization/default-messages.d.ts.map +1 -1
  236. package/dist/localization/default-messages.js +22 -6
  237. package/dist/localization/default-messages.js.map +1 -1
  238. package/dist/notifications/routes.d.ts +2 -2
  239. package/dist/observability/routes.d.ts +5 -5
  240. package/dist/progress/routes.d.ts +1 -1
  241. package/dist/provider-api/actions/custom-provider-registration.d.ts +7 -7
  242. package/dist/provider-api/actions/provider-api.d.ts +11 -11
  243. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  244. package/dist/secrets/routes.d.ts +6 -6
  245. package/dist/server/action-discovery.d.ts.map +1 -1
  246. package/dist/server/action-discovery.js +8 -0
  247. package/dist/server/action-discovery.js.map +1 -1
  248. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  249. package/dist/server/better-auth-instance.d.ts +7 -2
  250. package/dist/server/better-auth-instance.d.ts.map +1 -1
  251. package/dist/server/better-auth-instance.js.map +1 -1
  252. package/dist/server/email-template.d.ts +3 -0
  253. package/dist/server/email-template.d.ts.map +1 -1
  254. package/dist/server/email-template.js +13 -0
  255. package/dist/server/email-template.js.map +1 -1
  256. package/dist/server/email-templates.d.ts.map +1 -1
  257. package/dist/server/email-templates.js +3 -0
  258. package/dist/server/email-templates.js.map +1 -1
  259. package/dist/server/email.d.ts.map +1 -1
  260. package/dist/server/email.js +27 -4
  261. package/dist/server/email.js.map +1 -1
  262. package/dist/server/transcribe-voice.d.ts +1 -1
  263. package/dist/sharing/actions/share-resource.js +1 -0
  264. package/dist/sharing/actions/share-resource.js.map +1 -1
  265. package/dist/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  266. package/dist/templates/chat/app/components/layout/Sidebar.tsx +2 -2
  267. package/dist/templates/chat/app/global.css +1 -1
  268. package/dist/templates/chat/app/root.tsx +2 -2
  269. package/dist/templates/chat/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  270. package/dist/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  271. package/dist/templates/default/app/global.css +1 -1
  272. package/dist/templates/default/app/i18n/ar-SA.ts +6 -6
  273. package/dist/templates/default/app/i18n/de-DE.ts +6 -6
  274. package/dist/templates/default/app/i18n/en-US.ts +6 -6
  275. package/dist/templates/default/app/i18n/es-ES.ts +6 -6
  276. package/dist/templates/default/app/i18n/fr-FR.ts +6 -6
  277. package/dist/templates/default/app/i18n/hi-IN.ts +6 -6
  278. package/dist/templates/default/app/i18n/ja-JP.ts +6 -6
  279. package/dist/templates/default/app/i18n/ko-KR.ts +6 -6
  280. package/dist/templates/default/app/i18n/pt-BR.ts +6 -6
  281. package/dist/templates/default/app/i18n/zh-CN.ts +7 -7
  282. package/dist/templates/default/app/i18n/zh-TW.ts +7 -7
  283. package/dist/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  284. package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  285. package/dist/user-profile/actions/get-user-profile.d.ts +4 -0
  286. package/dist/user-profile/actions/get-user-profile.d.ts.map +1 -0
  287. package/dist/user-profile/actions/get-user-profile.js +14 -0
  288. package/dist/user-profile/actions/get-user-profile.js.map +1 -0
  289. package/dist/user-profile/actions/update-user-profile.d.ts +6 -0
  290. package/dist/user-profile/actions/update-user-profile.d.ts.map +1 -0
  291. package/dist/user-profile/actions/update-user-profile.js +20 -0
  292. package/dist/user-profile/actions/update-user-profile.js.map +1 -0
  293. package/dist/user-profile/index.d.ts +2 -0
  294. package/dist/user-profile/index.d.ts.map +1 -0
  295. package/dist/user-profile/index.js +2 -0
  296. package/dist/user-profile/index.js.map +1 -0
  297. package/dist/user-profile/shared.d.ts +7 -0
  298. package/dist/user-profile/shared.d.ts.map +1 -0
  299. package/dist/user-profile/shared.js +6 -0
  300. package/dist/user-profile/shared.js.map +1 -0
  301. package/dist/user-profile/store.d.ts +4 -0
  302. package/dist/user-profile/store.d.ts.map +1 -0
  303. package/dist/user-profile/store.js +38 -0
  304. package/dist/user-profile/store.js.map +1 -0
  305. package/package.json +2 -1
  306. package/src/cli/context-xray-local.ts +1 -1
  307. package/src/client/extensions/ExtensionViewer.tsx +4 -4
  308. package/src/client/extensions/ExtensionsSidebarSection.tsx +11 -11
  309. package/src/client/extensions/agent-native-extension-runtime.ts +1 -1
  310. package/src/client/extensions/delete-extension.ts +2 -2
  311. package/src/client/org/OrgSwitcher.tsx +25 -1
  312. package/src/client/settings/SettingsPanel.tsx +102 -10
  313. package/src/client/sharing/ShareButton.tsx +7 -6
  314. package/src/db/client.ts +13 -10
  315. package/src/deploy/workspace-deploy.ts +14 -4
  316. package/src/extensions/actions.ts +13 -5
  317. package/src/extensions/local.ts +1 -0
  318. package/src/extensions/routes.ts +10 -5
  319. package/src/extensions/schema.ts +5 -0
  320. package/src/extensions/slots/store.ts +14 -4
  321. package/src/extensions/store.ts +55 -19
  322. package/src/extensions/theme.ts +1 -1
  323. package/src/file-upload/registry.ts +9 -0
  324. package/src/index.browser.ts +5 -0
  325. package/src/index.ts +1 -0
  326. package/src/localization/default-messages.ts +23 -6
  327. package/src/server/action-discovery.ts +8 -0
  328. package/src/server/better-auth-instance.ts +7 -2
  329. package/src/server/email-template.ts +18 -0
  330. package/src/server/email-templates.ts +3 -0
  331. package/src/server/email.ts +40 -4
  332. package/src/sharing/actions/share-resource.ts +1 -0
  333. package/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  334. package/src/templates/chat/app/components/layout/Sidebar.tsx +2 -2
  335. package/src/templates/chat/app/global.css +1 -1
  336. package/src/templates/chat/app/root.tsx +2 -2
  337. package/src/templates/chat/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  338. package/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  339. package/src/templates/default/app/global.css +1 -1
  340. package/src/templates/default/app/i18n/ar-SA.ts +6 -6
  341. package/src/templates/default/app/i18n/de-DE.ts +6 -6
  342. package/src/templates/default/app/i18n/en-US.ts +6 -6
  343. package/src/templates/default/app/i18n/es-ES.ts +6 -6
  344. package/src/templates/default/app/i18n/fr-FR.ts +6 -6
  345. package/src/templates/default/app/i18n/hi-IN.ts +6 -6
  346. package/src/templates/default/app/i18n/ja-JP.ts +6 -6
  347. package/src/templates/default/app/i18n/ko-KR.ts +6 -6
  348. package/src/templates/default/app/i18n/pt-BR.ts +6 -6
  349. package/src/templates/default/app/i18n/zh-CN.ts +7 -7
  350. package/src/templates/default/app/i18n/zh-TW.ts +7 -7
  351. package/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  352. package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  353. package/src/user-profile/actions/get-user-profile.ts +16 -0
  354. package/src/user-profile/actions/update-user-profile.ts +24 -0
  355. package/src/user-profile/index.ts +5 -0
  356. package/src/user-profile/shared.ts +14 -0
  357. package/src/user-profile/store.ts +50 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ExtensionsSidebarSection.js","sourceRoot":"","sources":["../../../src/client/extensions/ExtensionsSidebarSection.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n IconChevronDown,\n IconPlus,\n IconFilter,\n IconStar,\n IconStarFilled,\n IconTrash,\n IconDots,\n IconPencil,\n IconGripVertical,\n IconTool,\n IconEye,\n IconEyeOff,\n IconHelpCircle,\n} from \"@tabler/icons-react\";\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { useState, useCallback, useMemo } from \"react\";\nimport { Link, useLocation, useNavigate } from \"react-router\";\n\nimport { extensionPath, isExtensionPathname } from \"../../extensions/path.js\";\nimport { sendToAgentChat } from \"../agent-chat.js\";\nimport { agentNativePath } from \"../api-path.js\";\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../components/ui/dropdown-menu.js\";\nimport {\n HoverCard,\n HoverCardContent,\n HoverCardTrigger,\n} from \"../components/ui/hover-card.js\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../components/ui/popover.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\nimport { PromptComposer } from \"../composer/index.js\";\nimport { DEFAULT_LOCALE, useOptionalLocale, type LocaleCode } from \"../i18n.js\";\nimport { cn } from \"../utils.js\";\nimport {\n deleteOrHideExtension,\n invalidateExtensionRemoval,\n} from \"./delete-extension.js\";\nimport {\n applyToolsOrder,\n getToolsOrder,\n setToolsOrder,\n} from \"./extension-order.js\";\nimport {\n extensionPopularityOf,\n useExtensionPopularity,\n} from \"./extension-popularity.js\";\nimport { ExtensionQueryErrorState } from \"./ExtensionQueryErrorState.js\";\n\ninterface Extension {\n id: string;\n name: string;\n description?: string;\n icon?: string;\n canDelete?: boolean;\n globallyHidden?: boolean;\n source?: {\n mode?: \"database\" | \"local-files\";\n entryPath?: string;\n };\n}\n\nconst FAVORITES_KEY = \"extensions-favorites\";\nconst COLLAPSED_EXTENSION_COUNT = 3;\nconst EXTENSIONS_OPEN_KEY = \"extensions-sidebar-open\";\nconst EXTENSIONS_SORT_MODE_KEY = \"extensions-sort-mode\";\n\ntype ExtensionSortMode = \"most-used\" | \"alphabetical\" | \"manual\";\n\ntype ExtensionsCopy = {\n title: string;\n description: string;\n open: string;\n learnMore: string;\n sortOptions: string;\n sortTooltip: string;\n sortBy: string;\n mostUsed: string;\n alphabetical: string;\n manualOrder: string;\n showHidden: string;\n newExtension: string;\n createPlaceholder: string;\n collapse: string;\n expand: string;\n reorder: (name: string) => string;\n dragToReorder: string;\n hiddenFromEveryone: string;\n file: string;\n unfavorite: string;\n favorite: string;\n actions: string;\n editInFiles: string;\n rename: string;\n unhideForEveryone: string;\n hideFromEveryone: string;\n removeFromMyList: string;\n delete: string;\n showLess: string;\n showMore: string;\n loadError: string;\n};\n\nconst EXTENSIONS_COPY: Record<LocaleCode, ExtensionsCopy> = {\n \"en-US\": {\n title: \"Extensions\",\n description:\n \"Build small sandboxed apps that can read app data, call actions, and save their own state.\",\n open: \"Open extensions\",\n learnMore: \"Learn more\",\n sortOptions: \"Extensions sort options\",\n sortTooltip: \"Extensions sort\",\n sortBy: \"Sort by\",\n mostUsed: \"Most used\",\n alphabetical: \"Alphabetical\",\n manualOrder: \"Manual order\",\n showHidden: \"Show hidden\",\n newExtension: \"New extension\",\n createPlaceholder: \"Describe what you'd like to build...\",\n collapse: \"Collapse extensions\",\n expand: \"Expand extensions\",\n reorder: (name) => `Reorder ${name}`,\n dragToReorder: \"Drag to reorder\",\n hiddenFromEveryone: \"Hidden from everyone\",\n file: \"File\",\n unfavorite: \"Unfavorite\",\n favorite: \"Favorite\",\n actions: \"Extension actions\",\n editInFiles: \"Edit in files\",\n rename: \"Rename\",\n unhideForEveryone: \"Unhide for everyone\",\n hideFromEveryone: \"Hide from everyone\",\n removeFromMyList: \"Remove from my list\",\n delete: \"Delete\",\n showLess: \"show less\",\n showMore: \"show more\",\n loadError: \"Couldn't load extensions.\",\n },\n \"zh-CN\": {\n title: \"扩展\",\n description: \"构建可读取应用数据、调用操作并保存自身状态的小型沙盒应用。\",\n open: \"打开扩展\",\n learnMore: \"了解更多\",\n sortOptions: \"扩展排序选项\",\n sortTooltip: \"扩展排序\",\n sortBy: \"排序方式\",\n mostUsed: \"最常用\",\n alphabetical: \"按字母顺序\",\n manualOrder: \"手动排序\",\n showHidden: \"显示隐藏项\",\n newExtension: \"新建扩展\",\n createPlaceholder: \"描述你想构建的内容...\",\n collapse: \"收起扩展\",\n expand: \"展开扩展\",\n reorder: (name) => `重新排序 ${name}`,\n dragToReorder: \"拖动以重新排序\",\n hiddenFromEveryone: \"已对所有人隐藏\",\n file: \"文件\",\n unfavorite: \"取消收藏\",\n favorite: \"收藏\",\n actions: \"扩展操作\",\n editInFiles: \"在文件中编辑\",\n rename: \"重命名\",\n unhideForEveryone: \"对所有人取消隐藏\",\n hideFromEveryone: \"对所有人隐藏\",\n removeFromMyList: \"从我的列表中移除\",\n delete: \"删除\",\n showLess: \"收起\",\n showMore: \"显示更多\",\n loadError: \"无法加载扩展。\",\n },\n \"zh-TW\": {\n title: \"擴充功能\",\n description:\n \"建立可讀取應用程式資料、呼叫動作並儲存自身狀態的小型沙盒應用程式。\",\n open: \"開啟擴充功能\",\n learnMore: \"了解更多\",\n sortOptions: \"擴充功能排序選項\",\n sortTooltip: \"擴充功能排序\",\n sortBy: \"排序方式\",\n mostUsed: \"最常用\",\n alphabetical: \"依字母排序\",\n manualOrder: \"手動排序\",\n showHidden: \"顯示隱藏項目\",\n newExtension: \"新增擴充功能\",\n createPlaceholder: \"描述你想建立的內容...\",\n collapse: \"收合擴充功能\",\n expand: \"展開擴充功能\",\n reorder: (name) => `重新排序 ${name}`,\n dragToReorder: \"拖曳以重新排序\",\n hiddenFromEveryone: \"已對所有人隱藏\",\n file: \"檔案\",\n unfavorite: \"取消最愛\",\n favorite: \"加入最愛\",\n actions: \"擴充功能動作\",\n editInFiles: \"在檔案中編輯\",\n rename: \"重新命名\",\n unhideForEveryone: \"對所有人取消隱藏\",\n hideFromEveryone: \"對所有人隱藏\",\n removeFromMyList: \"從我的清單移除\",\n delete: \"刪除\",\n showLess: \"顯示較少\",\n showMore: \"顯示更多\",\n loadError: \"無法載入擴充功能。\",\n },\n \"es-ES\": {\n title: \"Extensiones\",\n description:\n \"Crea pequeñas apps aisladas que pueden leer datos de la app, llamar acciones y guardar su propio estado.\",\n open: \"Abrir extensiones\",\n learnMore: \"Más información\",\n sortOptions: \"Opciones de orden de extensiones\",\n sortTooltip: \"Orden de extensiones\",\n sortBy: \"Ordenar por\",\n mostUsed: \"Más usadas\",\n alphabetical: \"Alfabético\",\n manualOrder: \"Orden manual\",\n showHidden: \"Mostrar ocultas\",\n newExtension: \"Nueva extensión\",\n createPlaceholder: \"Describe lo que quieres crear...\",\n collapse: \"Contraer extensiones\",\n expand: \"Expandir extensiones\",\n reorder: (name) => `Reordenar ${name}`,\n dragToReorder: \"Arrastra para reordenar\",\n hiddenFromEveryone: \"Oculta para todos\",\n file: \"Archivo\",\n unfavorite: \"Quitar de favoritos\",\n favorite: \"Favorito\",\n actions: \"Acciones de extensión\",\n editInFiles: \"Editar en archivos\",\n rename: \"Renombrar\",\n unhideForEveryone: \"Mostrar para todos\",\n hideFromEveryone: \"Ocultar para todos\",\n removeFromMyList: \"Quitar de mi lista\",\n delete: \"Eliminar\",\n showLess: \"mostrar menos\",\n showMore: \"mostrar más\",\n loadError: \"No se pudieron cargar las extensiones.\",\n },\n \"fr-FR\": {\n title: \"Extensions\",\n description:\n \"Créez de petites apps sandboxées capables de lire les données de l'app, d'appeler des actions et d'enregistrer leur propre état.\",\n open: \"Ouvrir les extensions\",\n learnMore: \"En savoir plus\",\n sortOptions: \"Options de tri des extensions\",\n sortTooltip: \"Tri des extensions\",\n sortBy: \"Trier par\",\n mostUsed: \"Les plus utilisées\",\n alphabetical: \"Alphabétique\",\n manualOrder: \"Ordre manuel\",\n showHidden: \"Afficher les masquées\",\n newExtension: \"Nouvelle extension\",\n createPlaceholder: \"Décrivez ce que vous voulez créer...\",\n collapse: \"Replier les extensions\",\n expand: \"Déplier les extensions\",\n reorder: (name) => `Réordonner ${name}`,\n dragToReorder: \"Faire glisser pour réordonner\",\n hiddenFromEveryone: \"Masquée pour tout le monde\",\n file: \"Fichier\",\n unfavorite: \"Retirer des favoris\",\n favorite: \"Favori\",\n actions: \"Actions de l'extension\",\n editInFiles: \"Modifier dans les fichiers\",\n rename: \"Renommer\",\n unhideForEveryone: \"Afficher pour tout le monde\",\n hideFromEveryone: \"Masquer pour tout le monde\",\n removeFromMyList: \"Retirer de ma liste\",\n delete: \"Supprimer\",\n showLess: \"afficher moins\",\n showMore: \"afficher plus\",\n loadError: \"Impossible de charger les extensions.\",\n },\n \"de-DE\": {\n title: \"Erweiterungen\",\n description:\n \"Erstelle kleine Sandbox-Apps, die App-Daten lesen, Aktionen aufrufen und ihren eigenen Zustand speichern können.\",\n open: \"Erweiterungen öffnen\",\n learnMore: \"Mehr erfahren\",\n sortOptions: \"Sortieroptionen für Erweiterungen\",\n sortTooltip: \"Erweiterungen sortieren\",\n sortBy: \"Sortieren nach\",\n mostUsed: \"Am häufigsten genutzt\",\n alphabetical: \"Alphabetisch\",\n manualOrder: \"Manuelle Reihenfolge\",\n showHidden: \"Ausgeblendete anzeigen\",\n newExtension: \"Neue Erweiterung\",\n createPlaceholder: \"Beschreibe, was du erstellen möchtest...\",\n collapse: \"Erweiterungen einklappen\",\n expand: \"Erweiterungen ausklappen\",\n reorder: (name) => `${name} neu anordnen`,\n dragToReorder: \"Zum Neuordnen ziehen\",\n hiddenFromEveryone: \"Für alle ausgeblendet\",\n file: \"Datei\",\n unfavorite: \"Aus Favoriten entfernen\",\n favorite: \"Favorisieren\",\n actions: \"Erweiterungsaktionen\",\n editInFiles: \"In Dateien bearbeiten\",\n rename: \"Umbenennen\",\n unhideForEveryone: \"Für alle einblenden\",\n hideFromEveryone: \"Für alle ausblenden\",\n removeFromMyList: \"Aus meiner Liste entfernen\",\n delete: \"Löschen\",\n showLess: \"weniger anzeigen\",\n showMore: \"mehr anzeigen\",\n loadError: \"Erweiterungen konnten nicht geladen werden.\",\n },\n \"ja-JP\": {\n title: \"拡張機能\",\n description:\n \"アプリデータを読み取り、アクションを呼び出し、独自の状態を保存できる小さなサンドボックスアプリを作成します。\",\n open: \"拡張機能を開く\",\n learnMore: \"詳しく見る\",\n sortOptions: \"拡張機能の並べ替えオプション\",\n sortTooltip: \"拡張機能の並べ替え\",\n sortBy: \"並べ替え\",\n mostUsed: \"よく使う順\",\n alphabetical: \"アルファベット順\",\n manualOrder: \"手動順\",\n showHidden: \"非表示を表示\",\n newExtension: \"新しい拡張機能\",\n createPlaceholder: \"作りたいものを説明してください...\",\n collapse: \"拡張機能を折りたたむ\",\n expand: \"拡張機能を展開\",\n reorder: (name) => `${name} を並べ替え`,\n dragToReorder: \"ドラッグして並べ替え\",\n hiddenFromEveryone: \"全員に非表示\",\n file: \"ファイル\",\n unfavorite: \"お気に入り解除\",\n favorite: \"お気に入り\",\n actions: \"拡張機能の操作\",\n editInFiles: \"ファイルで編集\",\n rename: \"名前を変更\",\n unhideForEveryone: \"全員に表示\",\n hideFromEveryone: \"全員に非表示\",\n removeFromMyList: \"自分のリストから削除\",\n delete: \"削除\",\n showLess: \"少なく表示\",\n showMore: \"さらに表示\",\n loadError: \"拡張機能を読み込めませんでした。\",\n },\n \"ko-KR\": {\n title: \"확장\",\n description:\n \"앱 데이터를 읽고, 액션을 호출하고, 자체 상태를 저장할 수 있는 작은 샌드박스 앱을 만듭니다.\",\n open: \"확장 열기\",\n learnMore: \"자세히 알아보기\",\n sortOptions: \"확장 정렬 옵션\",\n sortTooltip: \"확장 정렬\",\n sortBy: \"정렬 기준\",\n mostUsed: \"가장 많이 사용\",\n alphabetical: \"가나다순\",\n manualOrder: \"수동 순서\",\n showHidden: \"숨김 항목 표시\",\n newExtension: \"새 확장\",\n createPlaceholder: \"만들고 싶은 것을 설명하세요...\",\n collapse: \"확장 접기\",\n expand: \"확장 펼치기\",\n reorder: (name) => `${name} 순서 변경`,\n dragToReorder: \"드래그하여 순서 변경\",\n hiddenFromEveryone: \"모두에게 숨김\",\n file: \"파일\",\n unfavorite: \"즐겨찾기 해제\",\n favorite: \"즐겨찾기\",\n actions: \"확장 작업\",\n editInFiles: \"파일에서 편집\",\n rename: \"이름 변경\",\n unhideForEveryone: \"모두에게 표시\",\n hideFromEveryone: \"모두에게 숨기기\",\n removeFromMyList: \"내 목록에서 제거\",\n delete: \"삭제\",\n showLess: \"덜 보기\",\n showMore: \"더 보기\",\n loadError: \"확장 프로그램을 불러올 수 없습니다.\",\n },\n \"pt-BR\": {\n title: \"Extensões\",\n description:\n \"Crie pequenos apps isolados que podem ler dados do app, chamar ações e salvar o próprio estado.\",\n open: \"Abrir extensões\",\n learnMore: \"Saiba mais\",\n sortOptions: \"Opções de ordenação das extensões\",\n sortTooltip: \"Ordenação das extensões\",\n sortBy: \"Ordenar por\",\n mostUsed: \"Mais usadas\",\n alphabetical: \"Alfabética\",\n manualOrder: \"Ordem manual\",\n showHidden: \"Mostrar ocultas\",\n newExtension: \"Nova extensão\",\n createPlaceholder: \"Descreva o que você quer criar...\",\n collapse: \"Recolher extensões\",\n expand: \"Expandir extensões\",\n reorder: (name) => `Reordenar ${name}`,\n dragToReorder: \"Arraste para reordenar\",\n hiddenFromEveryone: \"Oculta para todos\",\n file: \"Arquivo\",\n unfavorite: \"Remover dos favoritos\",\n favorite: \"Favoritar\",\n actions: \"Ações da extensão\",\n editInFiles: \"Editar em arquivos\",\n rename: \"Renomear\",\n unhideForEveryone: \"Mostrar para todos\",\n hideFromEveryone: \"Ocultar para todos\",\n removeFromMyList: \"Remover da minha lista\",\n delete: \"Excluir\",\n showLess: \"mostrar menos\",\n showMore: \"mostrar mais\",\n loadError: \"Não foi possível carregar as extensões.\",\n },\n \"hi-IN\": {\n title: \"एक्सटेंशन\",\n description:\n \"छोटे सैंडबॉक्स ऐप बनाएं जो ऐप डेटा पढ़ सकते हैं, कार्रवाइयां चला सकते हैं और अपना स्टेट सहेज सकते हैं।\",\n open: \"एक्सटेंशन खोलें\",\n learnMore: \"और जानें\",\n sortOptions: \"एक्सटेंशन क्रम विकल्प\",\n sortTooltip: \"एक्सटेंशन क्रम\",\n sortBy: \"इसके अनुसार क्रमबद्ध करें\",\n mostUsed: \"सबसे अधिक उपयोग\",\n alphabetical: \"वर्णानुक्रम\",\n manualOrder: \"मैन्युअल क्रम\",\n showHidden: \"छिपे हुए दिखाएं\",\n newExtension: \"नया एक्सटेंशन\",\n createPlaceholder: \"बताएं कि आप क्या बनाना चाहते हैं...\",\n collapse: \"एक्सटेंशन समेटें\",\n expand: \"एक्सटेंशन फैलाएं\",\n reorder: (name) => `${name} का क्रम बदलें`,\n dragToReorder: \"क्रम बदलने के लिए खींचें\",\n hiddenFromEveryone: \"सभी से छिपा हुआ\",\n file: \"फ़ाइल\",\n unfavorite: \"पसंदीदा से हटाएं\",\n favorite: \"पसंदीदा\",\n actions: \"एक्सटेंशन कार्रवाइयां\",\n editInFiles: \"फ़ाइलों में संपादित करें\",\n rename: \"नाम बदलें\",\n unhideForEveryone: \"सभी के लिए दिखाएं\",\n hideFromEveryone: \"सभी से छिपाएं\",\n removeFromMyList: \"मेरी सूची से हटाएं\",\n delete: \"हटाएं\",\n showLess: \"कम दिखाएं\",\n showMore: \"और दिखाएं\",\n loadError: \"एक्सटेंशन लोड नहीं हो सके।\",\n },\n \"ar-SA\": {\n title: \"الإضافات\",\n description:\n \"أنشئ تطبيقات صغيرة معزولة يمكنها قراءة بيانات التطبيق واستدعاء الإجراءات وحفظ حالتها الخاصة.\",\n open: \"فتح الإضافات\",\n learnMore: \"معرفة المزيد\",\n sortOptions: \"خيارات ترتيب الإضافات\",\n sortTooltip: \"ترتيب الإضافات\",\n sortBy: \"ترتيب حسب\",\n mostUsed: \"الأكثر استخدامًا\",\n alphabetical: \"أبجديًا\",\n manualOrder: \"ترتيب يدوي\",\n showHidden: \"إظهار المخفية\",\n newExtension: \"إضافة جديدة\",\n createPlaceholder: \"صف ما تريد إنشاءه...\",\n collapse: \"طي الإضافات\",\n expand: \"توسيع الإضافات\",\n reorder: (name) => `إعادة ترتيب ${name}`,\n dragToReorder: \"اسحب لإعادة الترتيب\",\n hiddenFromEveryone: \"مخفية عن الجميع\",\n file: \"ملف\",\n unfavorite: \"إزالة من المفضلة\",\n favorite: \"إضافة إلى المفضلة\",\n actions: \"إجراءات الإضافة\",\n editInFiles: \"تحرير في الملفات\",\n rename: \"إعادة تسمية\",\n unhideForEveryone: \"إظهار للجميع\",\n hideFromEveryone: \"إخفاء عن الجميع\",\n removeFromMyList: \"إزالة من قائمتي\",\n delete: \"حذف\",\n showLess: \"إظهار أقل\",\n showMore: \"إظهار المزيد\",\n loadError: \"تعذر تحميل الإضافات.\",\n },\n};\n\nfunction useExtensionsCopy() {\n const locale = useOptionalLocale()?.locale ?? DEFAULT_LOCALE;\n return EXTENSIONS_COPY[locale] ?? EXTENSIONS_COPY[DEFAULT_LOCALE];\n}\n\nfunction getFavorites(): Set<string> {\n try {\n const raw = localStorage.getItem(FAVORITES_KEY);\n if (!raw) return new Set();\n const parsed = JSON.parse(raw);\n return new Set(Array.isArray(parsed) ? parsed : []);\n } catch {\n return new Set();\n }\n}\n\nfunction saveFavorites(ids: Set<string>) {\n try {\n localStorage.setItem(FAVORITES_KEY, JSON.stringify(Array.from(ids)));\n } catch {\n // localStorage unavailable — ignore\n }\n}\n\nfunction getStoredBoolean(key: string, fallback: boolean): boolean {\n if (typeof window === \"undefined\") return fallback;\n const raw = window.localStorage.getItem(key);\n if (raw === \"true\") return true;\n if (raw === \"false\") return false;\n return fallback;\n}\n\nfunction setStoredBoolean(key: string, value: boolean): void {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(key, String(value));\n } catch {\n // localStorage unavailable — ignore\n }\n}\n\nfunction getSortMode(): ExtensionSortMode {\n if (typeof window === \"undefined\") return \"most-used\";\n const raw = window.localStorage.getItem(EXTENSIONS_SORT_MODE_KEY);\n if (raw === \"alphabetical\" || raw === \"manual\" || raw === \"most-used\") {\n return raw;\n }\n return \"most-used\";\n}\n\nfunction setSortMode(mode: ExtensionSortMode): void {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(EXTENSIONS_SORT_MODE_KEY, mode);\n } catch {\n // localStorage unavailable — ignore\n }\n}\n\nfunction sortByName<T extends { id: string; name: string }>(items: T[]): T[] {\n return [...items].sort((a, b) => {\n const name = a.name.localeCompare(b.name);\n return name !== 0 ? name : a.id.localeCompare(b.id);\n });\n}\n\nfunction ExtensionSortMenu({\n value,\n onChange,\n showHidden,\n onShowHiddenChange,\n copy,\n}: {\n value: ExtensionSortMode;\n onChange: (value: ExtensionSortMode) => void;\n showHidden: boolean;\n onShowHiddenChange: (next: boolean) => void;\n copy: ExtensionsCopy;\n}) {\n return (\n <DropdownMenu>\n <Tooltip>\n <TooltipTrigger asChild>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className=\"inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground/45 opacity-0 transition-[opacity,color,background-color] hover:bg-accent hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring group-hover/extensions-section:opacity-100\"\n aria-label={copy.sortOptions}\n >\n <IconFilter className=\"h-3.5 w-3.5\" />\n </button>\n </DropdownMenuTrigger>\n </TooltipTrigger>\n <TooltipContent>{copy.sortTooltip}</TooltipContent>\n </Tooltip>\n <DropdownMenuContent side=\"right\" align=\"start\" className=\"w-44\">\n <DropdownMenuLabel>{copy.sortBy}</DropdownMenuLabel>\n <DropdownMenuRadioGroup\n value={value}\n onValueChange={(next) => {\n if (\n next === \"most-used\" ||\n next === \"alphabetical\" ||\n next === \"manual\"\n ) {\n onChange(next);\n }\n }}\n >\n <DropdownMenuRadioItem value=\"most-used\">\n {copy.mostUsed}\n </DropdownMenuRadioItem>\n <DropdownMenuRadioItem value=\"alphabetical\">\n {copy.alphabetical}\n </DropdownMenuRadioItem>\n <DropdownMenuRadioItem value=\"manual\">\n {copy.manualOrder}\n </DropdownMenuRadioItem>\n </DropdownMenuRadioGroup>\n <DropdownMenuSeparator />\n <DropdownMenuCheckboxItem\n checked={showHidden}\n onCheckedChange={(checked) => onShowHiddenChange(Boolean(checked))}\n >\n {copy.showHidden}\n </DropdownMenuCheckboxItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nexport function ExtensionsSidebarSection() {\n const copy = useExtensionsCopy();\n const location = useLocation();\n const navigate = useNavigate();\n const queryClient = useQueryClient();\n const popularity = useExtensionPopularity();\n const [favoriteIds, setFavoriteIds] = useState<Set<string>>(() =>\n typeof window !== \"undefined\" ? getFavorites() : new Set(),\n );\n const [extensionsOpen, setExtensionsOpen] = useState(() =>\n getStoredBoolean(EXTENSIONS_OPEN_KEY, true),\n );\n const [sortModeState, setSortModeState] =\n useState<ExtensionSortMode>(getSortMode);\n const [menuOpenId, setMenuOpenId] = useState<string | null>(null);\n const [renamingId, setRenamingId] = useState<string | null>(null);\n const [renameValue, setRenameValue] = useState(\"\");\n const [showCreate, setShowCreate] = useState(false);\n const [toolOrderState, setToolOrderState] = useState<string[]>(() =>\n typeof window !== \"undefined\" ? getToolsOrder() : [],\n );\n const [draggingId, setDraggingId] = useState<string | null>(null);\n const [dragOverId, setDragOverId] = useState<string | null>(null);\n const [showAllExtensions, setShowAllExtensions] = useState(false);\n const [showGloballyHidden, setShowGloballyHidden] = useState(false);\n\n const extensionsQuery = useQuery<Extension[]>({\n queryKey: [\"extensions\", { includeGloballyHidden: showGloballyHidden }],\n queryFn: async () => {\n const res = await fetch(\n agentNativePath(\n showGloballyHidden\n ? \"/_agent-native/extensions?includeGloballyHidden=true\"\n : \"/_agent-native/extensions\",\n ),\n );\n if (!res.ok) throw new Error(`Failed to load extensions (${res.status})`);\n return res.json();\n },\n });\n const extensions = extensionsQuery.data;\n\n const toggleFavorite = useCallback((id: string) => {\n setFavoriteIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n saveFavorites(next);\n return next;\n });\n }, []);\n\n const setExtensionSortMode = useCallback((mode: ExtensionSortMode) => {\n setSortMode(mode);\n setSortModeState(mode);\n }, []);\n\n const toggleExtensionsOpen = useCallback(() => {\n setExtensionsOpen((current) => {\n const next = !current;\n setStoredBoolean(EXTENSIONS_OPEN_KEY, next);\n return next;\n });\n }, []);\n\n const handleDelete = useCallback(\n async (extension: Extension) => {\n const extensionId = extension.id;\n setMenuOpenId(null);\n const prev = queryClient.getQueryData<Extension[]>([\"extensions\"]);\n queryClient.setQueryData<Extension[]>([\"extensions\"], (old) =>\n (old ?? []).filter((t) => t.id !== extensionId),\n );\n try {\n await deleteOrHideExtension(extension);\n invalidateExtensionRemoval(queryClient, extensionId);\n setFavoriteIds((prev) => {\n const next = new Set(prev);\n next.delete(extensionId);\n saveFavorites(next);\n return next;\n });\n setToolOrderState((prev) => {\n const next = prev.filter((id) => id !== extensionId);\n if (next.length !== prev.length) setToolsOrder(next);\n return next;\n });\n if (isExtensionPathname(location.pathname, extensionId)) {\n navigate(\"/extensions\");\n }\n } catch {\n if (prev) queryClient.setQueryData([\"extensions\"], prev);\n }\n },\n [location.pathname, navigate, queryClient],\n );\n\n const handleGlobalHide = useCallback(\n async (extension: Extension) => {\n setMenuOpenId(null);\n try {\n await fetch(\n agentNativePath(\n `/_agent-native/extensions/${extension.id}/global-hide`,\n ),\n { method: \"POST\" },\n );\n } finally {\n queryClient.invalidateQueries({ queryKey: [\"extensions\"] });\n }\n },\n [queryClient],\n );\n\n const handleGlobalUnhide = useCallback(\n async (extension: Extension) => {\n setMenuOpenId(null);\n try {\n await fetch(\n agentNativePath(\n `/_agent-native/extensions/${extension.id}/global-unhide`,\n ),\n { method: \"POST\" },\n );\n } finally {\n queryClient.invalidateQueries({ queryKey: [\"extensions\"] });\n }\n },\n [queryClient],\n );\n\n const startRename = useCallback((extension: Extension) => {\n setMenuOpenId(null);\n setRenameValue(extension.name);\n setRenamingId(extension.id);\n }, []);\n\n const submitRename = useCallback(\n async (extensionId: string) => {\n const trimmed = renameValue.trim();\n setRenamingId(null);\n if (!trimmed) return;\n const prev = queryClient.getQueryData<Extension[]>([\"extensions\"]);\n const existing = prev?.find((t) => t.id === extensionId);\n if (!existing || trimmed === existing.name) return;\n queryClient.setQueryData<Extension[]>([\"extensions\"], (old) =>\n (old ?? []).map((t) =>\n t.id === extensionId ? { ...t, name: trimmed } : t,\n ),\n );\n queryClient.setQueryData<Extension>([\"extension\", extensionId], (old) =>\n old ? { ...old, name: trimmed } : old,\n );\n try {\n await fetch(\n agentNativePath(`/_agent-native/extensions/${extensionId}`),\n {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ name: trimmed }),\n },\n );\n queryClient.invalidateQueries({ queryKey: [\"extensions\"] });\n queryClient.invalidateQueries({ queryKey: [\"extension\", extensionId] });\n } catch {\n if (prev) queryClient.setQueryData([\"extensions\"], prev);\n queryClient.invalidateQueries({ queryKey: [\"extension\", extensionId] });\n }\n },\n [renameValue, queryClient],\n );\n\n const sortedTools = useMemo(() => {\n if (!extensions) return [];\n if (sortModeState === \"alphabetical\") {\n return sortByName(extensions);\n }\n const mostUsed = [...extensions].sort((a, b) => {\n const aPop = extensionPopularityOf(popularity, a.id);\n const bPop = extensionPopularityOf(popularity, b.id);\n if (aPop !== bPop) return bPop - aPop;\n const aFav = favoriteIds.has(a.id) ? 0 : 1;\n const bFav = favoriteIds.has(b.id) ? 0 : 1;\n if (aFav !== bFav) return aFav - bFav;\n return a.name.localeCompare(b.name);\n });\n return sortModeState === \"manual\" && toolOrderState.length > 0\n ? applyToolsOrder(mostUsed, toolOrderState)\n : mostUsed;\n }, [extensions, favoriteIds, popularity, sortModeState, toolOrderState]);\n\n const activeExtensionId = useMemo(\n () =>\n sortedTools.find((extension) =>\n isExtensionPathname(location.pathname, extension.id),\n )?.id ?? null,\n [location.pathname, sortedTools],\n );\n\n const visibleTools = useMemo(() => {\n if (showAllExtensions || sortedTools.length <= COLLAPSED_EXTENSION_COUNT) {\n return sortedTools;\n }\n\n const defaultVisible = sortedTools.slice(0, COLLAPSED_EXTENSION_COUNT);\n if (!activeExtensionId) return defaultVisible;\n\n const activeTool = sortedTools.find(\n (extension) => extension.id === activeExtensionId,\n );\n if (!activeTool || defaultVisible.some((tool) => tool.id === activeTool.id))\n return defaultVisible;\n\n return [\n ...defaultVisible.slice(0, COLLAPSED_EXTENSION_COUNT - 1),\n activeTool,\n ];\n }, [activeExtensionId, showAllExtensions, sortedTools]);\n\n const hasMoreExtensions = sortedTools.length > COLLAPSED_EXTENSION_COUNT;\n\n const reorderTool = useCallback(\n (activeId: string, overId: string) => {\n if (activeId === overId) return;\n const ids = sortedTools.map((extension) => extension.id);\n const oldIndex = ids.indexOf(activeId);\n const newIndex = ids.indexOf(overId);\n if (oldIndex === -1 || newIndex === -1) return;\n const next = [...ids];\n const [moved] = next.splice(oldIndex, 1);\n if (!moved) return;\n next.splice(newIndex, 0, moved);\n setToolsOrder(next);\n setToolOrderState(next);\n setExtensionSortMode(\"manual\");\n },\n [setExtensionSortMode, sortedTools],\n );\n\n const handleCreate = (text: string) => {\n const trimmed = text.trim();\n if (!trimmed) return;\n sendToAgentChat({\n message: `Create an extension: ${trimmed}`,\n submit: true,\n openSidebar: true,\n newTab: true,\n });\n setShowCreate(false);\n };\n\n return (\n <TooltipProvider delayDuration={200}>\n <div className=\"relative min-w-0 py-1\">\n <div\n className={cn(\n \"group/extensions-section relative flex w-full min-w-0 items-center rounded-md text-sm font-medium transition-[opacity,color,background-color] hover:text-primary\",\n location.pathname.startsWith(\"/extensions\")\n ? \"text-sidebar-accent-foreground\"\n : \"text-muted-foreground hover:bg-sidebar-accent/50\",\n extensionsOpen && sortedTools.length > 0 && \"mb-1\",\n )}\n >\n <button\n type=\"button\"\n onClick={toggleExtensionsOpen}\n className=\"absolute inset-0 rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n aria-label={extensionsOpen ? copy.collapse : copy.expand}\n aria-expanded={extensionsOpen}\n />\n <div className=\"pointer-events-none relative z-10 flex min-w-0 flex-1 items-center gap-2 px-3 py-1.5 pr-20\">\n <IconTool className=\"h-4 w-4 shrink-0\" />\n <HoverCard openDelay={1200} closeDelay={200}>\n <HoverCardTrigger asChild>\n <span\n className=\"pointer-events-auto min-w-0 select-none truncate\"\n onClick={toggleExtensionsOpen}\n >\n {copy.title}\n </span>\n </HoverCardTrigger>\n <HoverCardContent\n side=\"top\"\n align=\"start\"\n sideOffset={8}\n className=\"w-72 space-y-3 p-3\"\n >\n <div>\n <p className=\"text-sm font-semibold text-foreground\">\n {copy.title}\n </p>\n <p className=\"mt-1 text-xs leading-relaxed text-muted-foreground\">\n {copy.description}\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <Link\n to=\"/extensions\"\n className=\"inline-flex h-8 items-center rounded-md border px-2.5 text-xs font-medium text-foreground transition-colors hover:bg-accent\"\n >\n {copy.open}\n </Link>\n <a\n href=\"https://agent-native.com/docs/extensions\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex h-8 items-center rounded-md px-2.5 text-xs font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-foreground\"\n >\n {copy.learnMore}\n </a>\n </div>\n </HoverCardContent>\n </HoverCard>\n </div>\n <div className=\"absolute right-1 top-1/2 z-20 flex -translate-y-1/2 items-center\">\n <ExtensionSortMenu\n value={sortModeState}\n onChange={setExtensionSortMode}\n showHidden={showGloballyHidden}\n onShowHiddenChange={setShowGloballyHidden}\n copy={copy}\n />\n <Popover open={showCreate} onOpenChange={setShowCreate}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"pointer-events-none inline-flex h-6 w-6 shrink-0 cursor-pointer items-center justify-center rounded-md text-muted-foreground/70 opacity-0 transition-[opacity,color,background-color] hover:bg-accent hover:text-accent-foreground focus-visible:pointer-events-auto focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring group-hover/extensions-section:pointer-events-auto group-hover/extensions-section:opacity-100 group-focus-within/extensions-section:pointer-events-auto group-focus-within/extensions-section:opacity-100 data-[state=open]:pointer-events-auto data-[state=open]:opacity-100\"\n aria-label={copy.newExtension}\n >\n <IconPlus className=\"h-3.5 w-3.5\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n side=\"right\"\n align=\"start\"\n collisionPadding={8}\n className=\"relative z-[360] w-[min(420px,calc(100vw-16px))] px-2 pb-2 pt-3\"\n >\n <div className=\"flex items-center justify-between gap-2 ps-1 pb-2\">\n <p className=\"text-sm font-semibold text-foreground\">\n {copy.newExtension}\n </p>\n <Tooltip>\n <TooltipTrigger asChild>\n <a\n href=\"https://agent-native.com/docs/extensions\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n aria-label={copy.learnMore}\n >\n <IconHelpCircle className=\"size-4\" />\n </a>\n </TooltipTrigger>\n <TooltipContent>{copy.learnMore}</TooltipContent>\n </Tooltip>\n </div>\n <PromptComposer\n autoFocus\n placeholder={copy.createPlaceholder}\n draftScope=\"extensions:sidebar-create\"\n onSubmit={handleCreate}\n />\n </PopoverContent>\n </Popover>\n <button\n type=\"button\"\n onClick={toggleExtensionsOpen}\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground/70 hover:bg-accent hover:text-foreground\"\n aria-label={extensionsOpen ? copy.collapse : copy.expand}\n aria-expanded={extensionsOpen}\n >\n <IconChevronDown\n className={cn(\n \"h-3.5 w-3.5 shrink-0 transition-transform\",\n !extensionsOpen && \"-rotate-90\",\n )}\n />\n </button>\n </div>\n </div>\n\n {extensionsOpen &&\n (extensionsQuery.isLoading ? (\n <div className=\"min-w-0 space-y-0.5 px-0.5\">\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"flex items-center rounded-md px-2 py-1.5\"\n >\n <div\n className=\"h-3 rounded bg-muted animate-pulse\"\n style={{ width: `${60 + i * 20}px` }}\n />\n </div>\n ))}\n </div>\n ) : extensionsQuery.isError ? (\n <ExtensionQueryErrorState\n compact\n message={copy.loadError}\n onRetry={() => void extensionsQuery.refetch()}\n retrying={extensionsQuery.isFetching}\n />\n ) : sortedTools.length === 0 ? null : (\n <div className=\"min-w-0 space-y-0.5 px-0.5\">\n {visibleTools.map((extension) => {\n const isActive = isExtensionPathname(\n location.pathname,\n extension.id,\n );\n const isFav = favoriteIds.has(extension.id);\n const isRenamingThis = renamingId === extension.id;\n const isLocalExtension =\n extension.source?.mode === \"local-files\";\n const actionsVisible =\n menuOpenId === extension.id || isRenamingThis;\n\n return (\n <div\n key={extension.id}\n onDragOver={(e) => {\n if (!draggingId || draggingId === extension.id) return;\n e.preventDefault();\n e.dataTransfer.dropEffect = \"move\";\n setDragOverId(extension.id);\n }}\n onDragLeave={() => {\n setDragOverId((current) =>\n current === extension.id ? null : current,\n );\n }}\n onDrop={(e) => {\n e.preventDefault();\n const activeId =\n draggingId || e.dataTransfer.getData(\"text/plain\");\n setDraggingId(null);\n setDragOverId(null);\n if (activeId) reorderTool(activeId, extension.id);\n }}\n className={cn(\n \"group/extension relative flex items-center min-w-0 rounded-md\",\n draggingId === extension.id && \"opacity-50\",\n dragOverId === extension.id &&\n draggingId !== extension.id &&\n \"bg-accent/60\",\n )}\n >\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n draggable\n onDragStart={(e) => {\n setDraggingId(extension.id);\n setDragOverId(null);\n e.dataTransfer.effectAllowed = \"move\";\n e.dataTransfer.setData(\"text/plain\", extension.id);\n }}\n onDragEnd={() => {\n setDraggingId(null);\n setDragOverId(null);\n }}\n className=\"-ml-2 cursor-grab rounded p-0.5 text-muted-foreground/30 opacity-0 transition-[opacity,color] hover:text-muted-foreground/70 active:cursor-grabbing group-hover/extension:opacity-100 group-focus-within/extension:opacity-100\"\n aria-label={copy.reorder(extension.name)}\n >\n <IconGripVertical className=\"h-3 w-3\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>{copy.dragToReorder}</TooltipContent>\n </Tooltip>\n <Link\n to={extensionPath(extension.id, extension.name)}\n className={cn(\n \"flex min-w-0 flex-1 items-center rounded-md px-2 py-1.5 pr-12 text-xs transition-[padding,color,background-color] md:pr-2 md:group-hover/extension:pr-12 md:group-focus-within/extension:pr-12\",\n actionsVisible && \"md:pr-12\",\n isActive\n ? \"bg-accent text-accent-foreground font-medium\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-accent-foreground\",\n )}\n >\n {isRenamingThis ? (\n <input\n autoFocus\n value={renameValue}\n onChange={(e) => setRenameValue(e.target.value)}\n onBlur={() => submitRename(extension.id)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") submitRename(extension.id);\n if (e.key === \"Escape\") setRenamingId(null);\n }}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n className=\"min-w-0 flex-1 truncate border-b border-primary bg-transparent px-0 py-0 text-xs outline-none\"\n />\n ) : (\n <span className=\"flex min-w-0 items-center gap-1.5\">\n {extension.globallyHidden && (\n <IconEyeOff\n className=\"h-3 w-3 shrink-0 text-muted-foreground/60\"\n aria-label={copy.hiddenFromEveryone}\n />\n )}\n <span className=\"block truncate\">\n {extension.name}\n </span>\n {isLocalExtension && (\n <span className=\"shrink-0 rounded border border-border px-1 text-[9px] font-medium uppercase tracking-wide text-muted-foreground/70\">\n {copy.file}\n </span>\n )}\n </span>\n )}\n </Link>\n\n <div\n className={cn(\n \"pointer-events-none absolute right-1 top-1/2 flex -translate-y-1/2 items-center gap-0.5 opacity-100 transition-opacity md:opacity-0 md:group-hover/extension:opacity-100 md:group-focus-within/extension:opacity-100\",\n actionsVisible && \"md:opacity-100\",\n )}\n >\n <button\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n toggleFavorite(extension.id);\n }}\n className={cn(\n \"pointer-events-auto cursor-pointer rounded p-0.5 transition-colors\",\n isFav\n ? \"text-yellow-500\"\n : \"text-muted-foreground/40 hover:text-yellow-500\",\n )}\n aria-label={isFav ? copy.unfavorite : copy.favorite}\n >\n {isFav ? (\n <IconStarFilled className=\"h-3 w-3\" />\n ) : (\n <IconStar className=\"h-3 w-3\" />\n )}\n </button>\n\n <DropdownMenu\n open={menuOpenId === extension.id}\n onOpenChange={(open) =>\n setMenuOpenId(open ? extension.id : null)\n }\n >\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className=\"pointer-events-auto cursor-pointer rounded p-0.5 text-muted-foreground/40 transition-colors hover:text-foreground\"\n aria-label={copy.actions}\n >\n <IconDots className=\"h-3 w-3\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n sideOffset={4}\n className=\"min-w-[140px]\"\n >\n {isLocalExtension ? (\n <DropdownMenuItem disabled>\n <IconPencil className=\"h-3.5 w-3.5\" />\n {copy.editInFiles}\n </DropdownMenuItem>\n ) : (\n <DropdownMenuItem\n onSelect={() => startRename(extension)}\n >\n <IconPencil className=\"h-3.5 w-3.5\" />\n {copy.rename}\n </DropdownMenuItem>\n )}\n {!isLocalExtension &&\n extension.canDelete !== false &&\n (extension.globallyHidden ? (\n <DropdownMenuItem\n onSelect={() => handleGlobalUnhide(extension)}\n >\n <IconEye className=\"h-3.5 w-3.5\" />\n {copy.unhideForEveryone}\n </DropdownMenuItem>\n ) : (\n <DropdownMenuItem\n onSelect={() => handleGlobalHide(extension)}\n >\n <IconEyeOff className=\"h-3.5 w-3.5\" />\n {copy.hideFromEveryone}\n </DropdownMenuItem>\n ))}\n {!isLocalExtension && (\n <DropdownMenuItem\n onSelect={() => handleDelete(extension)}\n className=\"text-destructive focus:text-destructive\"\n >\n <IconTrash className=\"h-3.5 w-3.5\" />\n {extension.canDelete === false\n ? copy.removeFromMyList\n : copy.delete}\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n );\n })}\n {hasMoreExtensions && (\n <button\n type=\"button\"\n aria-expanded={showAllExtensions}\n onClick={() => setShowAllExtensions((current) => !current)}\n className=\"ml-5 mt-1 inline-flex h-5 items-center rounded px-1.5 text-[11px] font-medium text-muted-foreground/60 transition-colors hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\"\n >\n {showAllExtensions ? copy.showLess : copy.showMore}\n </button>\n )}\n </div>\n ))}\n </div>\n </TooltipProvider>\n );\n}\n"]}
1
+ {"version":3,"file":"ExtensionsSidebarSection.js","sourceRoot":"","sources":["../../../src/client/extensions/ExtensionsSidebarSection.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n IconChevronDown,\n IconPlus,\n IconFilter,\n IconStar,\n IconStarFilled,\n IconTrash,\n IconDots,\n IconPencil,\n IconGripVertical,\n IconTool,\n IconEye,\n IconEyeOff,\n IconHelpCircle,\n} from \"@tabler/icons-react\";\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { useState, useCallback, useMemo } from \"react\";\nimport { Link, useLocation, useNavigate } from \"react-router\";\n\nimport { extensionPath, isExtensionPathname } from \"../../extensions/path.js\";\nimport { sendToAgentChat } from \"../agent-chat.js\";\nimport { agentNativePath } from \"../api-path.js\";\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../components/ui/dropdown-menu.js\";\nimport {\n HoverCard,\n HoverCardContent,\n HoverCardTrigger,\n} from \"../components/ui/hover-card.js\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../components/ui/popover.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\nimport { PromptComposer } from \"../composer/index.js\";\nimport { DEFAULT_LOCALE, useOptionalLocale, type LocaleCode } from \"../i18n.js\";\nimport { cn } from \"../utils.js\";\nimport {\n deleteOrHideExtension,\n invalidateExtensionRemoval,\n} from \"./delete-extension.js\";\nimport {\n applyToolsOrder,\n getToolsOrder,\n setToolsOrder,\n} from \"./extension-order.js\";\nimport {\n extensionPopularityOf,\n useExtensionPopularity,\n} from \"./extension-popularity.js\";\nimport { ExtensionQueryErrorState } from \"./ExtensionQueryErrorState.js\";\n\ninterface Extension {\n id: string;\n name: string;\n description?: string;\n icon?: string;\n canDelete?: boolean;\n globallyHidden?: boolean;\n source?: {\n mode?: \"database\" | \"local-files\";\n entryPath?: string;\n };\n}\n\nconst FAVORITES_KEY = \"extensions-favorites\";\nconst COLLAPSED_EXTENSION_COUNT = 3;\nconst EXTENSIONS_OPEN_KEY = \"extensions-sidebar-open\";\nconst EXTENSIONS_SORT_MODE_KEY = \"extensions-sort-mode\";\n\ntype ExtensionSortMode = \"most-used\" | \"alphabetical\" | \"manual\";\n\ntype ExtensionsCopy = {\n title: string;\n description: string;\n open: string;\n learnMore: string;\n sortOptions: string;\n sortTooltip: string;\n sortBy: string;\n mostUsed: string;\n alphabetical: string;\n manualOrder: string;\n showHidden: string;\n newExtension: string;\n createPlaceholder: string;\n collapse: string;\n expand: string;\n reorder: (name: string) => string;\n dragToReorder: string;\n hiddenFromEveryone: string;\n file: string;\n unfavorite: string;\n favorite: string;\n actions: string;\n editInFiles: string;\n rename: string;\n unhideForEveryone: string;\n hideFromEveryone: string;\n removeFromMyList: string;\n delete: string;\n showLess: string;\n showMore: string;\n loadError: string;\n};\n\nconst EXTENSIONS_COPY: Record<LocaleCode, ExtensionsCopy> = {\n \"en-US\": {\n title: \"Extensions\",\n description:\n \"Build small sandboxed apps that can read app data, call actions, and save their own state.\",\n open: \"Open extensions\",\n learnMore: \"Learn more\",\n sortOptions: \"Extensions sort options\",\n sortTooltip: \"Extensions sort\",\n sortBy: \"Sort by\",\n mostUsed: \"Most used\",\n alphabetical: \"Alphabetical\",\n manualOrder: \"Manual order\",\n showHidden: \"Show hidden\",\n newExtension: \"New extension\",\n createPlaceholder: \"Describe what you'd like to build...\",\n collapse: \"Collapse extensions\",\n expand: \"Expand extensions\",\n reorder: (name) => `Reorder ${name}`,\n dragToReorder: \"Drag to reorder\",\n hiddenFromEveryone: \"Hidden from everyone\",\n file: \"File\",\n unfavorite: \"Unfavorite\",\n favorite: \"Favorite\",\n actions: \"Extension actions\",\n editInFiles: \"Edit in files\",\n rename: \"Rename\",\n unhideForEveryone: \"Unhide for everyone\",\n hideFromEveryone: \"Hide from everyone\",\n removeFromMyList: \"Remove from my list\",\n delete: \"Archive\",\n showLess: \"show less\",\n showMore: \"show more\",\n loadError: \"Couldn't load extensions.\",\n },\n \"zh-CN\": {\n title: \"扩展\",\n description: \"构建可读取应用数据、调用操作并保存自身状态的小型沙盒应用。\",\n open: \"打开扩展\",\n learnMore: \"了解更多\",\n sortOptions: \"扩展排序选项\",\n sortTooltip: \"扩展排序\",\n sortBy: \"排序方式\",\n mostUsed: \"最常用\",\n alphabetical: \"按字母顺序\",\n manualOrder: \"手动排序\",\n showHidden: \"显示隐藏项\",\n newExtension: \"新建扩展\",\n createPlaceholder: \"描述你想构建的内容...\",\n collapse: \"收起扩展\",\n expand: \"展开扩展\",\n reorder: (name) => `重新排序 ${name}`,\n dragToReorder: \"拖动以重新排序\",\n hiddenFromEveryone: \"已对所有人隐藏\",\n file: \"文件\",\n unfavorite: \"取消收藏\",\n favorite: \"收藏\",\n actions: \"扩展操作\",\n editInFiles: \"在文件中编辑\",\n rename: \"重命名\",\n unhideForEveryone: \"对所有人取消隐藏\",\n hideFromEveryone: \"对所有人隐藏\",\n removeFromMyList: \"从我的列表中移除\",\n delete: \"归档\",\n showLess: \"收起\",\n showMore: \"显示更多\",\n loadError: \"无法加载扩展。\",\n },\n \"zh-TW\": {\n title: \"擴充功能\",\n description:\n \"建立可讀取應用程式資料、呼叫動作並儲存自身狀態的小型沙盒應用程式。\",\n open: \"開啟擴充功能\",\n learnMore: \"了解更多\",\n sortOptions: \"擴充功能排序選項\",\n sortTooltip: \"擴充功能排序\",\n sortBy: \"排序方式\",\n mostUsed: \"最常用\",\n alphabetical: \"依字母排序\",\n manualOrder: \"手動排序\",\n showHidden: \"顯示隱藏項目\",\n newExtension: \"新增擴充功能\",\n createPlaceholder: \"描述你想建立的內容...\",\n collapse: \"收合擴充功能\",\n expand: \"展開擴充功能\",\n reorder: (name) => `重新排序 ${name}`,\n dragToReorder: \"拖曳以重新排序\",\n hiddenFromEveryone: \"已對所有人隱藏\",\n file: \"檔案\",\n unfavorite: \"取消最愛\",\n favorite: \"加入最愛\",\n actions: \"擴充功能動作\",\n editInFiles: \"在檔案中編輯\",\n rename: \"重新命名\",\n unhideForEveryone: \"對所有人取消隱藏\",\n hideFromEveryone: \"對所有人隱藏\",\n removeFromMyList: \"從我的清單移除\",\n delete: \"封存\",\n showLess: \"顯示較少\",\n showMore: \"顯示更多\",\n loadError: \"無法載入擴充功能。\",\n },\n \"es-ES\": {\n title: \"Extensiones\",\n description:\n \"Crea pequeñas apps aisladas que pueden leer datos de la app, llamar acciones y guardar su propio estado.\",\n open: \"Abrir extensiones\",\n learnMore: \"Más información\",\n sortOptions: \"Opciones de orden de extensiones\",\n sortTooltip: \"Orden de extensiones\",\n sortBy: \"Ordenar por\",\n mostUsed: \"Más usadas\",\n alphabetical: \"Alfabético\",\n manualOrder: \"Orden manual\",\n showHidden: \"Mostrar ocultas\",\n newExtension: \"Nueva extensión\",\n createPlaceholder: \"Describe lo que quieres crear...\",\n collapse: \"Contraer extensiones\",\n expand: \"Expandir extensiones\",\n reorder: (name) => `Reordenar ${name}`,\n dragToReorder: \"Arrastra para reordenar\",\n hiddenFromEveryone: \"Oculta para todos\",\n file: \"Archivo\",\n unfavorite: \"Quitar de favoritos\",\n favorite: \"Favorito\",\n actions: \"Acciones de extensión\",\n editInFiles: \"Editar en archivos\",\n rename: \"Renombrar\",\n unhideForEveryone: \"Mostrar para todos\",\n hideFromEveryone: \"Ocultar para todos\",\n removeFromMyList: \"Quitar de mi lista\",\n delete: \"Archivar\",\n showLess: \"mostrar menos\",\n showMore: \"mostrar más\",\n loadError: \"No se pudieron cargar las extensiones.\",\n },\n \"fr-FR\": {\n title: \"Extensions\",\n description:\n \"Créez de petites apps sandboxées capables de lire les données de l'app, d'appeler des actions et d'enregistrer leur propre état.\",\n open: \"Ouvrir les extensions\",\n learnMore: \"En savoir plus\",\n sortOptions: \"Options de tri des extensions\",\n sortTooltip: \"Tri des extensions\",\n sortBy: \"Trier par\",\n mostUsed: \"Les plus utilisées\",\n alphabetical: \"Alphabétique\",\n manualOrder: \"Ordre manuel\",\n showHidden: \"Afficher les masquées\",\n newExtension: \"Nouvelle extension\",\n createPlaceholder: \"Décrivez ce que vous voulez créer...\",\n collapse: \"Replier les extensions\",\n expand: \"Déplier les extensions\",\n reorder: (name) => `Réordonner ${name}`,\n dragToReorder: \"Faire glisser pour réordonner\",\n hiddenFromEveryone: \"Masquée pour tout le monde\",\n file: \"Fichier\",\n unfavorite: \"Retirer des favoris\",\n favorite: \"Favori\",\n actions: \"Actions de l'extension\",\n editInFiles: \"Modifier dans les fichiers\",\n rename: \"Renommer\",\n unhideForEveryone: \"Afficher pour tout le monde\",\n hideFromEveryone: \"Masquer pour tout le monde\",\n removeFromMyList: \"Retirer de ma liste\",\n delete: \"Archiver\",\n showLess: \"afficher moins\",\n showMore: \"afficher plus\",\n loadError: \"Impossible de charger les extensions.\",\n },\n \"de-DE\": {\n title: \"Erweiterungen\",\n description:\n \"Erstelle kleine Sandbox-Apps, die App-Daten lesen, Aktionen aufrufen und ihren eigenen Zustand speichern können.\",\n open: \"Erweiterungen öffnen\",\n learnMore: \"Mehr erfahren\",\n sortOptions: \"Sortieroptionen für Erweiterungen\",\n sortTooltip: \"Erweiterungen sortieren\",\n sortBy: \"Sortieren nach\",\n mostUsed: \"Am häufigsten genutzt\",\n alphabetical: \"Alphabetisch\",\n manualOrder: \"Manuelle Reihenfolge\",\n showHidden: \"Ausgeblendete anzeigen\",\n newExtension: \"Neue Erweiterung\",\n createPlaceholder: \"Beschreibe, was du erstellen möchtest...\",\n collapse: \"Erweiterungen einklappen\",\n expand: \"Erweiterungen ausklappen\",\n reorder: (name) => `${name} neu anordnen`,\n dragToReorder: \"Zum Neuordnen ziehen\",\n hiddenFromEveryone: \"Für alle ausgeblendet\",\n file: \"Datei\",\n unfavorite: \"Aus Favoriten entfernen\",\n favorite: \"Favorisieren\",\n actions: \"Erweiterungsaktionen\",\n editInFiles: \"In Dateien bearbeiten\",\n rename: \"Umbenennen\",\n unhideForEveryone: \"Für alle einblenden\",\n hideFromEveryone: \"Für alle ausblenden\",\n removeFromMyList: \"Aus meiner Liste entfernen\",\n delete: \"Archivieren\",\n showLess: \"weniger anzeigen\",\n showMore: \"mehr anzeigen\",\n loadError: \"Erweiterungen konnten nicht geladen werden.\",\n },\n \"ja-JP\": {\n title: \"拡張機能\",\n description:\n \"アプリデータを読み取り、アクションを呼び出し、独自の状態を保存できる小さなサンドボックスアプリを作成します。\",\n open: \"拡張機能を開く\",\n learnMore: \"詳しく見る\",\n sortOptions: \"拡張機能の並べ替えオプション\",\n sortTooltip: \"拡張機能の並べ替え\",\n sortBy: \"並べ替え\",\n mostUsed: \"よく使う順\",\n alphabetical: \"アルファベット順\",\n manualOrder: \"手動順\",\n showHidden: \"非表示を表示\",\n newExtension: \"新しい拡張機能\",\n createPlaceholder: \"作りたいものを説明してください...\",\n collapse: \"拡張機能を折りたたむ\",\n expand: \"拡張機能を展開\",\n reorder: (name) => `${name} を並べ替え`,\n dragToReorder: \"ドラッグして並べ替え\",\n hiddenFromEveryone: \"全員に非表示\",\n file: \"ファイル\",\n unfavorite: \"お気に入り解除\",\n favorite: \"お気に入り\",\n actions: \"拡張機能の操作\",\n editInFiles: \"ファイルで編集\",\n rename: \"名前を変更\",\n unhideForEveryone: \"全員に表示\",\n hideFromEveryone: \"全員に非表示\",\n removeFromMyList: \"自分のリストから削除\",\n delete: \"アーカイブ\",\n showLess: \"少なく表示\",\n showMore: \"さらに表示\",\n loadError: \"拡張機能を読み込めませんでした。\",\n },\n \"ko-KR\": {\n title: \"확장\",\n description:\n \"앱 데이터를 읽고, 액션을 호출하고, 자체 상태를 저장할 수 있는 작은 샌드박스 앱을 만듭니다.\",\n open: \"확장 열기\",\n learnMore: \"자세히 알아보기\",\n sortOptions: \"확장 정렬 옵션\",\n sortTooltip: \"확장 정렬\",\n sortBy: \"정렬 기준\",\n mostUsed: \"가장 많이 사용\",\n alphabetical: \"가나다순\",\n manualOrder: \"수동 순서\",\n showHidden: \"숨김 항목 표시\",\n newExtension: \"새 확장\",\n createPlaceholder: \"만들고 싶은 것을 설명하세요...\",\n collapse: \"확장 접기\",\n expand: \"확장 펼치기\",\n reorder: (name) => `${name} 순서 변경`,\n dragToReorder: \"드래그하여 순서 변경\",\n hiddenFromEveryone: \"모두에게 숨김\",\n file: \"파일\",\n unfavorite: \"즐겨찾기 해제\",\n favorite: \"즐겨찾기\",\n actions: \"확장 작업\",\n editInFiles: \"파일에서 편집\",\n rename: \"이름 변경\",\n unhideForEveryone: \"모두에게 표시\",\n hideFromEveryone: \"모두에게 숨기기\",\n removeFromMyList: \"내 목록에서 제거\",\n delete: \"보관\",\n showLess: \"덜 보기\",\n showMore: \"더 보기\",\n loadError: \"확장 프로그램을 불러올 수 없습니다.\",\n },\n \"pt-BR\": {\n title: \"Extensões\",\n description:\n \"Crie pequenos apps isolados que podem ler dados do app, chamar ações e salvar o próprio estado.\",\n open: \"Abrir extensões\",\n learnMore: \"Saiba mais\",\n sortOptions: \"Opções de ordenação das extensões\",\n sortTooltip: \"Ordenação das extensões\",\n sortBy: \"Ordenar por\",\n mostUsed: \"Mais usadas\",\n alphabetical: \"Alfabética\",\n manualOrder: \"Ordem manual\",\n showHidden: \"Mostrar ocultas\",\n newExtension: \"Nova extensão\",\n createPlaceholder: \"Descreva o que você quer criar...\",\n collapse: \"Recolher extensões\",\n expand: \"Expandir extensões\",\n reorder: (name) => `Reordenar ${name}`,\n dragToReorder: \"Arraste para reordenar\",\n hiddenFromEveryone: \"Oculta para todos\",\n file: \"Arquivo\",\n unfavorite: \"Remover dos favoritos\",\n favorite: \"Favoritar\",\n actions: \"Ações da extensão\",\n editInFiles: \"Editar em arquivos\",\n rename: \"Renomear\",\n unhideForEveryone: \"Mostrar para todos\",\n hideFromEveryone: \"Ocultar para todos\",\n removeFromMyList: \"Remover da minha lista\",\n delete: \"Arquivar\",\n showLess: \"mostrar menos\",\n showMore: \"mostrar mais\",\n loadError: \"Não foi possível carregar as extensões.\",\n },\n \"hi-IN\": {\n title: \"एक्सटेंशन\",\n description:\n \"छोटे सैंडबॉक्स ऐप बनाएं जो ऐप डेटा पढ़ सकते हैं, कार्रवाइयां चला सकते हैं और अपना स्टेट सहेज सकते हैं।\",\n open: \"एक्सटेंशन खोलें\",\n learnMore: \"और जानें\",\n sortOptions: \"एक्सटेंशन क्रम विकल्प\",\n sortTooltip: \"एक्सटेंशन क्रम\",\n sortBy: \"इसके अनुसार क्रमबद्ध करें\",\n mostUsed: \"सबसे अधिक उपयोग\",\n alphabetical: \"वर्णानुक्रम\",\n manualOrder: \"मैन्युअल क्रम\",\n showHidden: \"छिपे हुए दिखाएं\",\n newExtension: \"नया एक्सटेंशन\",\n createPlaceholder: \"बताएं कि आप क्या बनाना चाहते हैं...\",\n collapse: \"एक्सटेंशन समेटें\",\n expand: \"एक्सटेंशन फैलाएं\",\n reorder: (name) => `${name} का क्रम बदलें`,\n dragToReorder: \"क्रम बदलने के लिए खींचें\",\n hiddenFromEveryone: \"सभी से छिपा हुआ\",\n file: \"फ़ाइल\",\n unfavorite: \"पसंदीदा से हटाएं\",\n favorite: \"पसंदीदा\",\n actions: \"एक्सटेंशन कार्रवाइयां\",\n editInFiles: \"फ़ाइलों में संपादित करें\",\n rename: \"नाम बदलें\",\n unhideForEveryone: \"सभी के लिए दिखाएं\",\n hideFromEveryone: \"सभी से छिपाएं\",\n removeFromMyList: \"मेरी सूची से हटाएं\",\n delete: \"संग्रहित करें\",\n showLess: \"कम दिखाएं\",\n showMore: \"और दिखाएं\",\n loadError: \"एक्सटेंशन लोड नहीं हो सके।\",\n },\n \"ar-SA\": {\n title: \"الإضافات\",\n description:\n \"أنشئ تطبيقات صغيرة معزولة يمكنها قراءة بيانات التطبيق واستدعاء الإجراءات وحفظ حالتها الخاصة.\",\n open: \"فتح الإضافات\",\n learnMore: \"معرفة المزيد\",\n sortOptions: \"خيارات ترتيب الإضافات\",\n sortTooltip: \"ترتيب الإضافات\",\n sortBy: \"ترتيب حسب\",\n mostUsed: \"الأكثر استخدامًا\",\n alphabetical: \"أبجديًا\",\n manualOrder: \"ترتيب يدوي\",\n showHidden: \"إظهار المخفية\",\n newExtension: \"إضافة جديدة\",\n createPlaceholder: \"صف ما تريد إنشاءه...\",\n collapse: \"طي الإضافات\",\n expand: \"توسيع الإضافات\",\n reorder: (name) => `إعادة ترتيب ${name}`,\n dragToReorder: \"اسحب لإعادة الترتيب\",\n hiddenFromEveryone: \"مخفية عن الجميع\",\n file: \"ملف\",\n unfavorite: \"إزالة من المفضلة\",\n favorite: \"إضافة إلى المفضلة\",\n actions: \"إجراءات الإضافة\",\n editInFiles: \"تحرير في الملفات\",\n rename: \"إعادة تسمية\",\n unhideForEveryone: \"إظهار للجميع\",\n hideFromEveryone: \"إخفاء عن الجميع\",\n removeFromMyList: \"إزالة من قائمتي\",\n delete: \"أرشفة\",\n showLess: \"إظهار أقل\",\n showMore: \"إظهار المزيد\",\n loadError: \"تعذر تحميل الإضافات.\",\n },\n};\n\nfunction useExtensionsCopy() {\n const locale = useOptionalLocale()?.locale ?? DEFAULT_LOCALE;\n return EXTENSIONS_COPY[locale] ?? EXTENSIONS_COPY[DEFAULT_LOCALE];\n}\n\nfunction getFavorites(): Set<string> {\n try {\n const raw = localStorage.getItem(FAVORITES_KEY);\n if (!raw) return new Set();\n const parsed = JSON.parse(raw);\n return new Set(Array.isArray(parsed) ? parsed : []);\n } catch {\n return new Set();\n }\n}\n\nfunction saveFavorites(ids: Set<string>) {\n try {\n localStorage.setItem(FAVORITES_KEY, JSON.stringify(Array.from(ids)));\n } catch {\n // localStorage unavailable — ignore\n }\n}\n\nfunction getStoredBoolean(key: string, fallback: boolean): boolean {\n if (typeof window === \"undefined\") return fallback;\n const raw = window.localStorage.getItem(key);\n if (raw === \"true\") return true;\n if (raw === \"false\") return false;\n return fallback;\n}\n\nfunction setStoredBoolean(key: string, value: boolean): void {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(key, String(value));\n } catch {\n // localStorage unavailable — ignore\n }\n}\n\nfunction getSortMode(): ExtensionSortMode {\n if (typeof window === \"undefined\") return \"most-used\";\n const raw = window.localStorage.getItem(EXTENSIONS_SORT_MODE_KEY);\n if (raw === \"alphabetical\" || raw === \"manual\" || raw === \"most-used\") {\n return raw;\n }\n return \"most-used\";\n}\n\nfunction setSortMode(mode: ExtensionSortMode): void {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(EXTENSIONS_SORT_MODE_KEY, mode);\n } catch {\n // localStorage unavailable — ignore\n }\n}\n\nfunction sortByName<T extends { id: string; name: string }>(items: T[]): T[] {\n return [...items].sort((a, b) => {\n const name = a.name.localeCompare(b.name);\n return name !== 0 ? name : a.id.localeCompare(b.id);\n });\n}\n\nfunction ExtensionSortMenu({\n value,\n onChange,\n showHidden,\n onShowHiddenChange,\n copy,\n}: {\n value: ExtensionSortMode;\n onChange: (value: ExtensionSortMode) => void;\n showHidden: boolean;\n onShowHiddenChange: (next: boolean) => void;\n copy: ExtensionsCopy;\n}) {\n return (\n <DropdownMenu>\n <Tooltip>\n <TooltipTrigger asChild>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className=\"inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground/45 opacity-0 transition-[opacity,color,background-color] hover:bg-accent hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring group-hover/extensions-section:opacity-100\"\n aria-label={copy.sortOptions}\n >\n <IconFilter className=\"h-3.5 w-3.5\" />\n </button>\n </DropdownMenuTrigger>\n </TooltipTrigger>\n <TooltipContent>{copy.sortTooltip}</TooltipContent>\n </Tooltip>\n <DropdownMenuContent side=\"right\" align=\"start\" className=\"w-44\">\n <DropdownMenuLabel>{copy.sortBy}</DropdownMenuLabel>\n <DropdownMenuRadioGroup\n value={value}\n onValueChange={(next) => {\n if (\n next === \"most-used\" ||\n next === \"alphabetical\" ||\n next === \"manual\"\n ) {\n onChange(next);\n }\n }}\n >\n <DropdownMenuRadioItem value=\"most-used\">\n {copy.mostUsed}\n </DropdownMenuRadioItem>\n <DropdownMenuRadioItem value=\"alphabetical\">\n {copy.alphabetical}\n </DropdownMenuRadioItem>\n <DropdownMenuRadioItem value=\"manual\">\n {copy.manualOrder}\n </DropdownMenuRadioItem>\n </DropdownMenuRadioGroup>\n <DropdownMenuSeparator />\n <DropdownMenuCheckboxItem\n checked={showHidden}\n onCheckedChange={(checked) => onShowHiddenChange(Boolean(checked))}\n >\n {copy.showHidden}\n </DropdownMenuCheckboxItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nexport function ExtensionsSidebarSection() {\n const copy = useExtensionsCopy();\n const location = useLocation();\n const navigate = useNavigate();\n const queryClient = useQueryClient();\n const popularity = useExtensionPopularity();\n const [favoriteIds, setFavoriteIds] = useState<Set<string>>(() =>\n typeof window !== \"undefined\" ? getFavorites() : new Set(),\n );\n const [extensionsOpen, setExtensionsOpen] = useState(() =>\n getStoredBoolean(EXTENSIONS_OPEN_KEY, true),\n );\n const [sortModeState, setSortModeState] =\n useState<ExtensionSortMode>(getSortMode);\n const [menuOpenId, setMenuOpenId] = useState<string | null>(null);\n const [renamingId, setRenamingId] = useState<string | null>(null);\n const [renameValue, setRenameValue] = useState(\"\");\n const [showCreate, setShowCreate] = useState(false);\n const [toolOrderState, setToolOrderState] = useState<string[]>(() =>\n typeof window !== \"undefined\" ? getToolsOrder() : [],\n );\n const [draggingId, setDraggingId] = useState<string | null>(null);\n const [dragOverId, setDragOverId] = useState<string | null>(null);\n const [showAllExtensions, setShowAllExtensions] = useState(false);\n const [showGloballyHidden, setShowGloballyHidden] = useState(false);\n\n const extensionsQuery = useQuery<Extension[]>({\n queryKey: [\"extensions\", { includeGloballyHidden: showGloballyHidden }],\n queryFn: async () => {\n const res = await fetch(\n agentNativePath(\n showGloballyHidden\n ? \"/_agent-native/extensions?includeGloballyHidden=true\"\n : \"/_agent-native/extensions\",\n ),\n );\n if (!res.ok) throw new Error(`Failed to load extensions (${res.status})`);\n return res.json();\n },\n });\n const extensions = extensionsQuery.data;\n\n const toggleFavorite = useCallback((id: string) => {\n setFavoriteIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n saveFavorites(next);\n return next;\n });\n }, []);\n\n const setExtensionSortMode = useCallback((mode: ExtensionSortMode) => {\n setSortMode(mode);\n setSortModeState(mode);\n }, []);\n\n const toggleExtensionsOpen = useCallback(() => {\n setExtensionsOpen((current) => {\n const next = !current;\n setStoredBoolean(EXTENSIONS_OPEN_KEY, next);\n return next;\n });\n }, []);\n\n const handleDelete = useCallback(\n async (extension: Extension) => {\n const extensionId = extension.id;\n setMenuOpenId(null);\n const prev = queryClient.getQueryData<Extension[]>([\"extensions\"]);\n queryClient.setQueryData<Extension[]>([\"extensions\"], (old) =>\n (old ?? []).filter((t) => t.id !== extensionId),\n );\n try {\n await deleteOrHideExtension(extension);\n invalidateExtensionRemoval(queryClient, extensionId);\n setFavoriteIds((prev) => {\n const next = new Set(prev);\n next.delete(extensionId);\n saveFavorites(next);\n return next;\n });\n setToolOrderState((prev) => {\n const next = prev.filter((id) => id !== extensionId);\n if (next.length !== prev.length) setToolsOrder(next);\n return next;\n });\n if (isExtensionPathname(location.pathname, extensionId)) {\n navigate(\"/extensions\");\n }\n } catch {\n if (prev) queryClient.setQueryData([\"extensions\"], prev);\n }\n },\n [location.pathname, navigate, queryClient],\n );\n\n const handleGlobalHide = useCallback(\n async (extension: Extension) => {\n setMenuOpenId(null);\n try {\n await fetch(\n agentNativePath(\n `/_agent-native/extensions/${extension.id}/global-hide`,\n ),\n { method: \"POST\" },\n );\n } finally {\n queryClient.invalidateQueries({ queryKey: [\"extensions\"] });\n }\n },\n [queryClient],\n );\n\n const handleGlobalUnhide = useCallback(\n async (extension: Extension) => {\n setMenuOpenId(null);\n try {\n await fetch(\n agentNativePath(\n `/_agent-native/extensions/${extension.id}/global-unhide`,\n ),\n { method: \"POST\" },\n );\n } finally {\n queryClient.invalidateQueries({ queryKey: [\"extensions\"] });\n }\n },\n [queryClient],\n );\n\n const startRename = useCallback((extension: Extension) => {\n setMenuOpenId(null);\n setRenameValue(extension.name);\n setRenamingId(extension.id);\n }, []);\n\n const submitRename = useCallback(\n async (extensionId: string) => {\n const trimmed = renameValue.trim();\n setRenamingId(null);\n if (!trimmed) return;\n const prev = queryClient.getQueryData<Extension[]>([\"extensions\"]);\n const existing = prev?.find((t) => t.id === extensionId);\n if (!existing || trimmed === existing.name) return;\n queryClient.setQueryData<Extension[]>([\"extensions\"], (old) =>\n (old ?? []).map((t) =>\n t.id === extensionId ? { ...t, name: trimmed } : t,\n ),\n );\n queryClient.setQueryData<Extension>([\"extension\", extensionId], (old) =>\n old ? { ...old, name: trimmed } : old,\n );\n try {\n await fetch(\n agentNativePath(`/_agent-native/extensions/${extensionId}`),\n {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ name: trimmed }),\n },\n );\n queryClient.invalidateQueries({ queryKey: [\"extensions\"] });\n queryClient.invalidateQueries({ queryKey: [\"extension\", extensionId] });\n } catch {\n if (prev) queryClient.setQueryData([\"extensions\"], prev);\n queryClient.invalidateQueries({ queryKey: [\"extension\", extensionId] });\n }\n },\n [renameValue, queryClient],\n );\n\n const sortedTools = useMemo(() => {\n if (!extensions) return [];\n if (sortModeState === \"alphabetical\") {\n return sortByName(extensions);\n }\n const mostUsed = [...extensions].sort((a, b) => {\n const aPop = extensionPopularityOf(popularity, a.id);\n const bPop = extensionPopularityOf(popularity, b.id);\n if (aPop !== bPop) return bPop - aPop;\n const aFav = favoriteIds.has(a.id) ? 0 : 1;\n const bFav = favoriteIds.has(b.id) ? 0 : 1;\n if (aFav !== bFav) return aFav - bFav;\n return a.name.localeCompare(b.name);\n });\n return sortModeState === \"manual\" && toolOrderState.length > 0\n ? applyToolsOrder(mostUsed, toolOrderState)\n : mostUsed;\n }, [extensions, favoriteIds, popularity, sortModeState, toolOrderState]);\n\n const activeExtensionId = useMemo(\n () =>\n sortedTools.find((extension) =>\n isExtensionPathname(location.pathname, extension.id),\n )?.id ?? null,\n [location.pathname, sortedTools],\n );\n\n const visibleTools = useMemo(() => {\n if (showAllExtensions || sortedTools.length <= COLLAPSED_EXTENSION_COUNT) {\n return sortedTools;\n }\n\n const defaultVisible = sortedTools.slice(0, COLLAPSED_EXTENSION_COUNT);\n if (!activeExtensionId) return defaultVisible;\n\n const activeTool = sortedTools.find(\n (extension) => extension.id === activeExtensionId,\n );\n if (!activeTool || defaultVisible.some((tool) => tool.id === activeTool.id))\n return defaultVisible;\n\n return [\n ...defaultVisible.slice(0, COLLAPSED_EXTENSION_COUNT - 1),\n activeTool,\n ];\n }, [activeExtensionId, showAllExtensions, sortedTools]);\n\n const hasMoreExtensions = sortedTools.length > COLLAPSED_EXTENSION_COUNT;\n\n const reorderTool = useCallback(\n (activeId: string, overId: string) => {\n if (activeId === overId) return;\n const ids = sortedTools.map((extension) => extension.id);\n const oldIndex = ids.indexOf(activeId);\n const newIndex = ids.indexOf(overId);\n if (oldIndex === -1 || newIndex === -1) return;\n const next = [...ids];\n const [moved] = next.splice(oldIndex, 1);\n if (!moved) return;\n next.splice(newIndex, 0, moved);\n setToolsOrder(next);\n setToolOrderState(next);\n setExtensionSortMode(\"manual\");\n },\n [setExtensionSortMode, sortedTools],\n );\n\n const handleCreate = (text: string) => {\n const trimmed = text.trim();\n if (!trimmed) return;\n sendToAgentChat({\n message: `Create an extension: ${trimmed}`,\n submit: true,\n openSidebar: true,\n newTab: true,\n });\n setShowCreate(false);\n };\n\n return (\n <TooltipProvider delayDuration={200}>\n <div className=\"relative min-w-0 py-1\">\n <div\n className={cn(\n \"group/extensions-section relative flex w-full min-w-0 items-center rounded-md text-sm font-medium transition-[opacity,color,background-color] hover:text-primary\",\n location.pathname.startsWith(\"/extensions\")\n ? \"text-sidebar-accent-foreground\"\n : \"text-muted-foreground hover:bg-sidebar-accent/50\",\n extensionsOpen && sortedTools.length > 0 && \"mb-1\",\n )}\n >\n <button\n type=\"button\"\n onClick={toggleExtensionsOpen}\n className=\"absolute inset-0 rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n aria-label={extensionsOpen ? copy.collapse : copy.expand}\n aria-expanded={extensionsOpen}\n />\n <div className=\"pointer-events-none relative z-10 flex min-w-0 flex-1 items-center gap-2 px-3 py-1.5 pr-20\">\n <IconTool className=\"h-4 w-4 shrink-0\" />\n <HoverCard openDelay={1200} closeDelay={200}>\n <HoverCardTrigger asChild>\n <span\n className=\"pointer-events-auto min-w-0 select-none truncate\"\n onClick={toggleExtensionsOpen}\n >\n {copy.title}\n </span>\n </HoverCardTrigger>\n <HoverCardContent\n side=\"top\"\n align=\"start\"\n sideOffset={8}\n className=\"w-72 space-y-3 p-3\"\n >\n <div>\n <p className=\"text-sm font-semibold text-foreground\">\n {copy.title}\n </p>\n <p className=\"mt-1 text-xs leading-relaxed text-muted-foreground\">\n {copy.description}\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <Link\n to=\"/extensions\"\n className=\"inline-flex h-8 items-center rounded-md border px-2.5 text-xs font-medium text-foreground transition-colors hover:bg-accent\"\n >\n {copy.open}\n </Link>\n <a\n href=\"https://agent-native.com/docs/extensions\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex h-8 items-center rounded-md px-2.5 text-xs font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-foreground\"\n >\n {copy.learnMore}\n </a>\n </div>\n </HoverCardContent>\n </HoverCard>\n </div>\n <div className=\"absolute right-1 top-1/2 z-20 flex -translate-y-1/2 items-center\">\n <ExtensionSortMenu\n value={sortModeState}\n onChange={setExtensionSortMode}\n showHidden={showGloballyHidden}\n onShowHiddenChange={setShowGloballyHidden}\n copy={copy}\n />\n <Popover open={showCreate} onOpenChange={setShowCreate}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"pointer-events-none inline-flex h-6 w-6 shrink-0 cursor-pointer items-center justify-center rounded-md text-muted-foreground/70 opacity-0 transition-[opacity,color,background-color] hover:bg-accent hover:text-accent-foreground focus-visible:pointer-events-auto focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring group-hover/extensions-section:pointer-events-auto group-hover/extensions-section:opacity-100 group-focus-within/extensions-section:pointer-events-auto group-focus-within/extensions-section:opacity-100 data-[state=open]:pointer-events-auto data-[state=open]:opacity-100\"\n aria-label={copy.newExtension}\n >\n <IconPlus className=\"h-3.5 w-3.5\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n side=\"right\"\n align=\"start\"\n collisionPadding={8}\n className=\"relative z-[360] w-[min(420px,calc(100vw-16px))] px-2 pb-2 pt-3\"\n >\n <div className=\"flex items-center justify-between gap-2 ps-1 pb-2\">\n <p className=\"text-sm font-semibold text-foreground\">\n {copy.newExtension}\n </p>\n <Tooltip>\n <TooltipTrigger asChild>\n <a\n href=\"https://agent-native.com/docs/extensions\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n aria-label={copy.learnMore}\n >\n <IconHelpCircle className=\"size-4\" />\n </a>\n </TooltipTrigger>\n <TooltipContent>{copy.learnMore}</TooltipContent>\n </Tooltip>\n </div>\n <PromptComposer\n autoFocus\n placeholder={copy.createPlaceholder}\n draftScope=\"extensions:sidebar-create\"\n onSubmit={handleCreate}\n />\n </PopoverContent>\n </Popover>\n <button\n type=\"button\"\n onClick={toggleExtensionsOpen}\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground/70 hover:bg-accent hover:text-foreground\"\n aria-label={extensionsOpen ? copy.collapse : copy.expand}\n aria-expanded={extensionsOpen}\n >\n <IconChevronDown\n className={cn(\n \"h-3.5 w-3.5 shrink-0 transition-transform\",\n !extensionsOpen && \"-rotate-90\",\n )}\n />\n </button>\n </div>\n </div>\n\n {extensionsOpen &&\n (extensionsQuery.isLoading ? (\n <div className=\"min-w-0 space-y-0.5 px-0.5\">\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"flex items-center rounded-md px-2 py-1.5\"\n >\n <div\n className=\"h-3 rounded bg-muted animate-pulse\"\n style={{ width: `${60 + i * 20}px` }}\n />\n </div>\n ))}\n </div>\n ) : extensionsQuery.isError ? (\n <ExtensionQueryErrorState\n compact\n message={copy.loadError}\n onRetry={() => void extensionsQuery.refetch()}\n retrying={extensionsQuery.isFetching}\n />\n ) : sortedTools.length === 0 ? null : (\n <div className=\"min-w-0 space-y-0.5 px-0.5\">\n {visibleTools.map((extension) => {\n const isActive = isExtensionPathname(\n location.pathname,\n extension.id,\n );\n const isFav = favoriteIds.has(extension.id);\n const isRenamingThis = renamingId === extension.id;\n const isLocalExtension =\n extension.source?.mode === \"local-files\";\n const actionsVisible =\n menuOpenId === extension.id || isRenamingThis;\n\n return (\n <div\n key={extension.id}\n onDragOver={(e) => {\n if (!draggingId || draggingId === extension.id) return;\n e.preventDefault();\n e.dataTransfer.dropEffect = \"move\";\n setDragOverId(extension.id);\n }}\n onDragLeave={() => {\n setDragOverId((current) =>\n current === extension.id ? null : current,\n );\n }}\n onDrop={(e) => {\n e.preventDefault();\n const activeId =\n draggingId || e.dataTransfer.getData(\"text/plain\");\n setDraggingId(null);\n setDragOverId(null);\n if (activeId) reorderTool(activeId, extension.id);\n }}\n className={cn(\n \"group/extension relative flex items-center min-w-0 rounded-md\",\n draggingId === extension.id && \"opacity-50\",\n dragOverId === extension.id &&\n draggingId !== extension.id &&\n \"bg-accent/60\",\n )}\n >\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n draggable\n onDragStart={(e) => {\n setDraggingId(extension.id);\n setDragOverId(null);\n e.dataTransfer.effectAllowed = \"move\";\n e.dataTransfer.setData(\"text/plain\", extension.id);\n }}\n onDragEnd={() => {\n setDraggingId(null);\n setDragOverId(null);\n }}\n className=\"-ml-2 cursor-grab rounded p-0.5 text-muted-foreground/30 opacity-0 transition-[opacity,color] hover:text-muted-foreground/70 active:cursor-grabbing group-hover/extension:opacity-100 group-focus-within/extension:opacity-100\"\n aria-label={copy.reorder(extension.name)}\n >\n <IconGripVertical className=\"h-3 w-3\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>{copy.dragToReorder}</TooltipContent>\n </Tooltip>\n <Link\n to={extensionPath(extension.id, extension.name)}\n className={cn(\n \"flex min-w-0 flex-1 items-center rounded-md px-2 py-1.5 pr-12 text-xs transition-[padding,color,background-color] md:pr-2 md:group-hover/extension:pr-12 md:group-focus-within/extension:pr-12\",\n actionsVisible && \"md:pr-12\",\n isActive\n ? \"bg-accent text-accent-foreground font-medium\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-accent-foreground\",\n )}\n >\n {isRenamingThis ? (\n <input\n autoFocus\n value={renameValue}\n onChange={(e) => setRenameValue(e.target.value)}\n onBlur={() => submitRename(extension.id)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") submitRename(extension.id);\n if (e.key === \"Escape\") setRenamingId(null);\n }}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n className=\"min-w-0 flex-1 truncate border-b border-primary bg-transparent px-0 py-0 text-xs outline-none\"\n />\n ) : (\n <span className=\"flex min-w-0 items-center gap-1.5\">\n {extension.globallyHidden && (\n <IconEyeOff\n className=\"h-3 w-3 shrink-0 text-muted-foreground/60\"\n aria-label={copy.hiddenFromEveryone}\n />\n )}\n <span className=\"block truncate\">\n {extension.name}\n </span>\n {isLocalExtension && (\n <span className=\"shrink-0 rounded border border-border px-1 text-[9px] font-medium uppercase tracking-wide text-muted-foreground/70\">\n {copy.file}\n </span>\n )}\n </span>\n )}\n </Link>\n\n <div\n className={cn(\n \"pointer-events-none absolute right-1 top-1/2 flex -translate-y-1/2 items-center gap-0.5 opacity-100 transition-opacity md:opacity-0 md:group-hover/extension:opacity-100 md:group-focus-within/extension:opacity-100\",\n actionsVisible && \"md:opacity-100\",\n )}\n >\n <button\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n toggleFavorite(extension.id);\n }}\n className={cn(\n \"pointer-events-auto cursor-pointer rounded p-0.5 transition-colors\",\n isFav\n ? \"text-yellow-500\"\n : \"text-muted-foreground/40 hover:text-yellow-500\",\n )}\n aria-label={isFav ? copy.unfavorite : copy.favorite}\n >\n {isFav ? (\n <IconStarFilled className=\"h-3 w-3\" />\n ) : (\n <IconStar className=\"h-3 w-3\" />\n )}\n </button>\n\n <DropdownMenu\n open={menuOpenId === extension.id}\n onOpenChange={(open) =>\n setMenuOpenId(open ? extension.id : null)\n }\n >\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className=\"pointer-events-auto cursor-pointer rounded p-0.5 text-muted-foreground/40 transition-colors hover:text-foreground\"\n aria-label={copy.actions}\n >\n <IconDots className=\"h-3 w-3\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n sideOffset={4}\n className=\"min-w-[140px]\"\n >\n {isLocalExtension ? (\n <DropdownMenuItem disabled>\n <IconPencil className=\"h-3.5 w-3.5\" />\n {copy.editInFiles}\n </DropdownMenuItem>\n ) : (\n <DropdownMenuItem\n onSelect={() => startRename(extension)}\n >\n <IconPencil className=\"h-3.5 w-3.5\" />\n {copy.rename}\n </DropdownMenuItem>\n )}\n {!isLocalExtension &&\n extension.canDelete !== false &&\n (extension.globallyHidden ? (\n <DropdownMenuItem\n onSelect={() => handleGlobalUnhide(extension)}\n >\n <IconEye className=\"h-3.5 w-3.5\" />\n {copy.unhideForEveryone}\n </DropdownMenuItem>\n ) : (\n <DropdownMenuItem\n onSelect={() => handleGlobalHide(extension)}\n >\n <IconEyeOff className=\"h-3.5 w-3.5\" />\n {copy.hideFromEveryone}\n </DropdownMenuItem>\n ))}\n {!isLocalExtension && (\n <DropdownMenuItem\n onSelect={() => handleDelete(extension)}\n className=\"text-destructive focus:text-destructive\"\n >\n <IconTrash className=\"h-3.5 w-3.5\" />\n {extension.canDelete === false\n ? copy.removeFromMyList\n : copy.delete}\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n );\n })}\n {hasMoreExtensions && (\n <button\n type=\"button\"\n aria-expanded={showAllExtensions}\n onClick={() => setShowAllExtensions((current) => !current)}\n className=\"ml-5 mt-1 inline-flex h-5 items-center rounded px-1.5 text-[11px] font-medium text-muted-foreground/60 transition-colors hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\"\n >\n {showAllExtensions ? copy.showLess : copy.showMore}\n </button>\n )}\n </div>\n ))}\n </div>\n </TooltipProvider>\n );\n}\n"]}
@@ -37,7 +37,7 @@ const defaultThemeCss = `
37
37
  --border: 217.2 32.6% 17.5%;
38
38
  --primary: 217.2 91.2% 59.8%;
39
39
  --primary-foreground: 222.2 47.4% 11.2%;
40
- --destructive: 0 62.8% 30.6%;
40
+ --destructive: 0 84% 60%;
41
41
  --destructive-foreground: 210 40% 98%;
42
42
  }
43
43
  html, body {
@@ -1 +1 @@
1
- {"version":3,"file":"agent-native-extension-runtime.js","sourceRoot":"","sources":["../../../src/client/extensions/agent-native-extension-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { EXTENSION_IFRAME_META_CSP } from \"../../extensions/html-shell.js\";\n\nexport const AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES = {\n REQUEST: \"agentNative.extension.storage\",\n RESPONSE: \"agentNative.extension.storageResult\",\n SLOT_CONTEXT: \"agentNative.extension.slotContext\",\n RESIZE: \"agentNative.extension.resize\",\n} as const;\n\nexport type AgentNativeExtensionStorageScope = \"user\" | \"org\";\n\nexport type AgentNativeExtensionStorageOperation =\n | \"list\"\n | \"get\"\n | \"set\"\n | \"remove\";\n\nexport interface AgentNativeExtensionDefinition {\n id: string;\n name: string;\n description?: string;\n content: string;\n updatedAt?: string;\n}\n\nexport interface AgentNativeExtensionStorageRequest {\n operation: AgentNativeExtensionStorageOperation;\n extensionId: string;\n collection: string;\n id?: string;\n data?: unknown;\n scope?: AgentNativeExtensionStorageScope;\n limit?: number;\n}\n\nexport interface AgentNativeExtensionStorageContext {\n extensionId: string;\n slotId?: string;\n slotContext?: Record<string, unknown> | null;\n}\n\nexport interface AgentNativeExtensionDataRow {\n id: string;\n extensionId: string;\n collection: string;\n data: unknown;\n scope: AgentNativeExtensionStorageScope;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface AgentNativeExtensionStorage {\n list(\n collection: string,\n options: {\n scope?: AgentNativeExtensionStorageScope | \"all\";\n limit?: number;\n context: AgentNativeExtensionStorageContext;\n },\n ): Promise<AgentNativeExtensionDataRow[]>;\n get(\n collection: string,\n id: string,\n options: {\n scope?: AgentNativeExtensionStorageScope;\n context: AgentNativeExtensionStorageContext;\n },\n ): Promise<AgentNativeExtensionDataRow | null>;\n set(\n collection: string,\n id: string,\n data: unknown,\n options: {\n scope?: AgentNativeExtensionStorageScope;\n context: AgentNativeExtensionStorageContext;\n },\n ): Promise<AgentNativeExtensionDataRow>;\n remove(\n collection: string,\n id: string,\n options: {\n scope?: AgentNativeExtensionStorageScope;\n context: AgentNativeExtensionStorageContext;\n },\n ): Promise<{ ok: true }>;\n}\n\nexport interface BuildAgentNativeExtensionHtmlOptions {\n extensionId: string;\n content: string;\n title?: string;\n dark?: boolean;\n themeCss?: string;\n}\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\");\n}\n\nfunction safeJson(value: unknown): string {\n return JSON.stringify(value).replace(/</g, \"\\\\u003c\");\n}\n\nconst defaultThemeCss = `\n:root {\n color-scheme: light;\n --background: 0 0% 100%;\n --foreground: 222.2 84% 4.9%;\n --muted: 210 40% 96.1%;\n --muted-foreground: 215.4 16.3% 46.9%;\n --border: 214.3 31.8% 91.4%;\n --primary: 221.2 83.2% 53.3%;\n --primary-foreground: 210 40% 98%;\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 40% 98%;\n}\n.dark {\n color-scheme: dark;\n --background: 222.2 84% 4.9%;\n --foreground: 210 40% 98%;\n --muted: 217.2 32.6% 17.5%;\n --muted-foreground: 215 20.2% 65.1%;\n --border: 217.2 32.6% 17.5%;\n --primary: 217.2 91.2% 59.8%;\n --primary-foreground: 222.2 47.4% 11.2%;\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 210 40% 98%;\n}\nhtml, body {\n margin: 0;\n min-height: 100%;\n background: transparent;\n color: hsl(var(--foreground));\n font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n}\nbody {\n padding: 0;\n}\n`;\n\nexport function buildAgentNativeExtensionHtml(\n options: BuildAgentNativeExtensionHtmlOptions,\n): string {\n const extensionId = safeJson(options.extensionId);\n const storageRequestType = safeJson(\n AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES.REQUEST,\n );\n const storageResponseType = safeJson(\n AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES.RESPONSE,\n );\n const slotContextType = safeJson(\n AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES.SLOT_CONTEXT,\n );\n const resizeType = safeJson(\n AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES.RESIZE,\n );\n const themeCss = `${defaultThemeCss}\\n${options.themeCss ?? \"\"}`;\n\n return `<!doctype html>\n<html lang=\"en\"${options.dark ? ' class=\"dark\"' : \"\"}>\n<head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <meta http-equiv=\"Content-Security-Policy\" content=\"${EXTENSION_IFRAME_META_CSP}\" />\n <title>${escapeHtml(options.title ?? \"Agent Native extension\")}</title>\n <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n <link href=\"https://fonts.googleapis.com/css2?family=Inter:wght@300..700&display=swap\" rel=\"stylesheet\" />\n <script\n src=\"https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4.2.4\"\n integrity=\"sha384-yNSZBFvuOWcmww494a9+1zNuvgUGEXoWkein7cxP8wHUTi3iXCU4vJ7hr3tzBCml\"\n crossorigin=\"anonymous\"\n ></script>\n <script\n defer\n src=\"https://cdn.jsdelivr.net/npm/alpinejs@3.15.11/dist/cdn.min.js\"\n integrity=\"sha384-WPtu0YHhJ3arcykfnv1JgUffWDSKRnqnDeTpJUbOc2os2moEmLkIdaeR0trPN4be\"\n crossorigin=\"anonymous\"\n ></script>\n <style>${themeCss}</style>\n <style type=\"text/tailwindcss\">\n @custom-variant dark (&:where(.dark, .dark *));\n @theme {\n --color-background: hsl(var(--background));\n --color-foreground: hsl(var(--foreground));\n --color-muted: hsl(var(--muted));\n --color-muted-foreground: hsl(var(--muted-foreground));\n --color-border: hsl(var(--border));\n --color-primary: hsl(var(--primary));\n --color-primary-foreground: hsl(var(--primary-foreground));\n --color-destructive: hsl(var(--destructive));\n --color-destructive-foreground: hsl(var(--destructive-foreground));\n }\n </style>\n <script>\n (function() {\n var extensionId = ${extensionId};\n var pending = {};\n var seq = 0;\n var slotContext = {};\n var HOST = {\n READY: \"agentNative.host.ready\",\n GET_CONTEXT: \"agentNative.host.getContext\",\n CONTEXT: \"agentNative.host.context\",\n LIST_ACTIONS: \"agentNative.host.listActions\",\n ACTIONS: \"agentNative.host.actions\",\n RUN_ACTION: \"agentNative.host.runAction\",\n ACTION_RESULT: \"agentNative.host.actionResult\",\n COMMAND: \"agentNative.host.command\",\n COMMAND_RESULT: \"agentNative.host.commandResult\"\n };\n var STORAGE_REQUEST = ${storageRequestType};\n var STORAGE_RESPONSE = ${storageResponseType};\n var SLOT_CONTEXT = ${slotContextType};\n var RESIZE = ${resizeType};\n\n function nextId(prefix) {\n seq += 1;\n return prefix + \"-\" + Date.now() + \"-\" + seq;\n }\n\n function request(type, responseType, payload, timeoutMs) {\n return new Promise(function(resolve, reject) {\n var requestId = nextId(\"extension\");\n var timer = setTimeout(function() {\n delete pending[requestId];\n reject(new Error(\"Extension host request timed out\"));\n }, timeoutMs || 30000);\n pending[requestId] = {\n responseType: responseType,\n resolve: resolve,\n reject: reject,\n timer: timer\n };\n window.parent.postMessage(Object.assign({ type: type, requestId: requestId }, payload || {}), \"*\");\n });\n }\n\n window.addEventListener(\"message\", function(event) {\n if (event.source !== window.parent) return;\n var message = event.data || {};\n if (message.type === SLOT_CONTEXT) {\n slotContext = message.context || {};\n window.slotContext = slotContext;\n window.agentNative.slotContext = slotContext;\n return;\n }\n var item = pending[message.requestId];\n if (!item || message.type !== item.responseType) return;\n clearTimeout(item.timer);\n delete pending[message.requestId];\n if (message.ok === false || message.error) {\n item.reject(new Error(message.error || \"Extension host request failed\"));\n return;\n }\n item.resolve(message);\n });\n\n function storage(operation, payload) {\n return request(STORAGE_REQUEST, STORAGE_RESPONSE, Object.assign({\n operation: operation,\n extensionId: extensionId\n }, payload || {})).then(function(message) {\n return message.result;\n });\n }\n\n var api = {\n extensionId: extensionId,\n slotContext: slotContext,\n context: function() {\n return request(HOST.GET_CONTEXT, HOST.CONTEXT).then(function(message) {\n return message.context || {};\n });\n },\n listActions: function() {\n return request(HOST.LIST_ACTIONS, HOST.ACTIONS).then(function(message) {\n return message.actions || [];\n });\n },\n action: function(name, args) {\n return request(HOST.RUN_ACTION, HOST.ACTION_RESULT, {\n name: name,\n args: args || {}\n }).then(function(message) {\n return message.result;\n });\n },\n command: function(command, payload) {\n return request(HOST.COMMAND, HOST.COMMAND_RESULT, {\n command: command,\n payload: payload\n }).then(function(message) {\n return message.result;\n });\n },\n refresh: function(payload) {\n return api.command(\"refreshData\", payload);\n },\n data: {\n list: function(collection, opts) {\n opts = opts || {};\n return storage(\"list\", {\n collection: collection,\n scope: opts.scope,\n limit: opts.limit\n });\n },\n get: function(collection, id, opts) {\n opts = opts || {};\n return storage(\"get\", {\n collection: collection,\n id: id,\n scope: opts.scope\n });\n },\n set: function(collection, id, data, opts) {\n opts = opts || {};\n return storage(\"set\", {\n collection: collection,\n id: id,\n data: data,\n scope: opts.scope\n });\n },\n remove: function(collection, id, opts) {\n opts = opts || {};\n return storage(\"remove\", {\n collection: collection,\n id: id,\n scope: opts.scope\n });\n }\n }\n };\n\n window.agentNative = api;\n window.appAction = api.action;\n window.extensionData = api.data;\n window.extensionId = extensionId;\n window.slotContext = slotContext;\n window.toolData = api.data;\n window.toolId = extensionId;\n\n function reportSize() {\n var height = Math.max(\n document.documentElement ? document.documentElement.scrollHeight : 0,\n document.body ? document.body.scrollHeight : 0\n );\n window.parent.postMessage({ type: RESIZE, height: height }, \"*\");\n }\n if (typeof ResizeObserver !== \"undefined\") {\n window.addEventListener(\"DOMContentLoaded\", function() {\n var observer = new ResizeObserver(reportSize);\n observer.observe(document.body);\n reportSize();\n });\n } else {\n window.addEventListener(\"load\", reportSize);\n setInterval(reportSize, 1000);\n }\n\n window.parent.postMessage({ type: HOST.READY, requestId: nextId(\"ready\") }, \"*\");\n })();\n </script>\n</head>\n<body>\n${options.content}\n</body>\n</html>`;\n}\n\nfunction storageKey(\n namespace: string,\n context: AgentNativeExtensionStorageContext,\n collection: string,\n scope: AgentNativeExtensionStorageScope,\n): string {\n return [\n \"agent-native-extension-data\",\n namespace,\n context.extensionId,\n scope,\n collection,\n ]\n .map(encodeURIComponent)\n .join(\":\");\n}\n\nfunction readCollection(\n namespace: string,\n context: AgentNativeExtensionStorageContext,\n collection: string,\n scope: AgentNativeExtensionStorageScope,\n): Record<string, AgentNativeExtensionDataRow> {\n if (typeof localStorage === \"undefined\") return {};\n const raw = localStorage.getItem(\n storageKey(namespace, context, collection, scope),\n );\n if (!raw) return {};\n try {\n return JSON.parse(raw) as Record<string, AgentNativeExtensionDataRow>;\n } catch {\n return {};\n }\n}\n\nfunction writeCollection(\n namespace: string,\n context: AgentNativeExtensionStorageContext,\n collection: string,\n scope: AgentNativeExtensionStorageScope,\n rows: Record<string, AgentNativeExtensionDataRow>,\n): void {\n if (typeof localStorage === \"undefined\") return;\n localStorage.setItem(\n storageKey(namespace, context, collection, scope),\n JSON.stringify(rows),\n );\n}\n\nfunction normalizeScope(\n scope: AgentNativeExtensionStorageScope | undefined,\n): AgentNativeExtensionStorageScope {\n return scope === \"org\" ? \"org\" : \"user\";\n}\n\nexport function createLocalStorageAgentNativeExtensionStorage(\n namespace = \"default\",\n): AgentNativeExtensionStorage {\n return {\n async list(collection, options) {\n const scopes =\n options.scope === \"all\"\n ? ([\"user\", \"org\"] as const)\n : ([normalizeScope(options.scope)] as const);\n const rows = scopes.flatMap((scope) =>\n Object.values(\n readCollection(namespace, options.context, collection, scope),\n ),\n );\n return rows\n .sort((a, b) => b.updatedAt.localeCompare(a.updatedAt))\n .slice(0, options.limit ?? 100);\n },\n async get(collection, id, options) {\n const scope = normalizeScope(options.scope);\n const rows = readCollection(\n namespace,\n options.context,\n collection,\n scope,\n );\n return rows[id] ?? null;\n },\n async set(collection, id, data, options) {\n const scope = normalizeScope(options.scope);\n const rows = readCollection(\n namespace,\n options.context,\n collection,\n scope,\n );\n const now = new Date().toISOString();\n const row: AgentNativeExtensionDataRow = {\n id,\n extensionId: options.context.extensionId,\n collection,\n data,\n scope,\n createdAt: rows[id]?.createdAt ?? now,\n updatedAt: now,\n };\n rows[id] = row;\n writeCollection(namespace, options.context, collection, scope, rows);\n return row;\n },\n async remove(collection, id, options) {\n const scope = normalizeScope(options.scope);\n const rows = readCollection(\n namespace,\n options.context,\n collection,\n scope,\n );\n delete rows[id];\n writeCollection(namespace, options.context, collection, scope, rows);\n return { ok: true };\n },\n };\n}\n"]}
1
+ {"version":3,"file":"agent-native-extension-runtime.js","sourceRoot":"","sources":["../../../src/client/extensions/agent-native-extension-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { EXTENSION_IFRAME_META_CSP } from \"../../extensions/html-shell.js\";\n\nexport const AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES = {\n REQUEST: \"agentNative.extension.storage\",\n RESPONSE: \"agentNative.extension.storageResult\",\n SLOT_CONTEXT: \"agentNative.extension.slotContext\",\n RESIZE: \"agentNative.extension.resize\",\n} as const;\n\nexport type AgentNativeExtensionStorageScope = \"user\" | \"org\";\n\nexport type AgentNativeExtensionStorageOperation =\n | \"list\"\n | \"get\"\n | \"set\"\n | \"remove\";\n\nexport interface AgentNativeExtensionDefinition {\n id: string;\n name: string;\n description?: string;\n content: string;\n updatedAt?: string;\n}\n\nexport interface AgentNativeExtensionStorageRequest {\n operation: AgentNativeExtensionStorageOperation;\n extensionId: string;\n collection: string;\n id?: string;\n data?: unknown;\n scope?: AgentNativeExtensionStorageScope;\n limit?: number;\n}\n\nexport interface AgentNativeExtensionStorageContext {\n extensionId: string;\n slotId?: string;\n slotContext?: Record<string, unknown> | null;\n}\n\nexport interface AgentNativeExtensionDataRow {\n id: string;\n extensionId: string;\n collection: string;\n data: unknown;\n scope: AgentNativeExtensionStorageScope;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface AgentNativeExtensionStorage {\n list(\n collection: string,\n options: {\n scope?: AgentNativeExtensionStorageScope | \"all\";\n limit?: number;\n context: AgentNativeExtensionStorageContext;\n },\n ): Promise<AgentNativeExtensionDataRow[]>;\n get(\n collection: string,\n id: string,\n options: {\n scope?: AgentNativeExtensionStorageScope;\n context: AgentNativeExtensionStorageContext;\n },\n ): Promise<AgentNativeExtensionDataRow | null>;\n set(\n collection: string,\n id: string,\n data: unknown,\n options: {\n scope?: AgentNativeExtensionStorageScope;\n context: AgentNativeExtensionStorageContext;\n },\n ): Promise<AgentNativeExtensionDataRow>;\n remove(\n collection: string,\n id: string,\n options: {\n scope?: AgentNativeExtensionStorageScope;\n context: AgentNativeExtensionStorageContext;\n },\n ): Promise<{ ok: true }>;\n}\n\nexport interface BuildAgentNativeExtensionHtmlOptions {\n extensionId: string;\n content: string;\n title?: string;\n dark?: boolean;\n themeCss?: string;\n}\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\");\n}\n\nfunction safeJson(value: unknown): string {\n return JSON.stringify(value).replace(/</g, \"\\\\u003c\");\n}\n\nconst defaultThemeCss = `\n:root {\n color-scheme: light;\n --background: 0 0% 100%;\n --foreground: 222.2 84% 4.9%;\n --muted: 210 40% 96.1%;\n --muted-foreground: 215.4 16.3% 46.9%;\n --border: 214.3 31.8% 91.4%;\n --primary: 221.2 83.2% 53.3%;\n --primary-foreground: 210 40% 98%;\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 40% 98%;\n}\n.dark {\n color-scheme: dark;\n --background: 222.2 84% 4.9%;\n --foreground: 210 40% 98%;\n --muted: 217.2 32.6% 17.5%;\n --muted-foreground: 215 20.2% 65.1%;\n --border: 217.2 32.6% 17.5%;\n --primary: 217.2 91.2% 59.8%;\n --primary-foreground: 222.2 47.4% 11.2%;\n --destructive: 0 84% 60%;\n --destructive-foreground: 210 40% 98%;\n}\nhtml, body {\n margin: 0;\n min-height: 100%;\n background: transparent;\n color: hsl(var(--foreground));\n font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n}\nbody {\n padding: 0;\n}\n`;\n\nexport function buildAgentNativeExtensionHtml(\n options: BuildAgentNativeExtensionHtmlOptions,\n): string {\n const extensionId = safeJson(options.extensionId);\n const storageRequestType = safeJson(\n AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES.REQUEST,\n );\n const storageResponseType = safeJson(\n AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES.RESPONSE,\n );\n const slotContextType = safeJson(\n AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES.SLOT_CONTEXT,\n );\n const resizeType = safeJson(\n AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES.RESIZE,\n );\n const themeCss = `${defaultThemeCss}\\n${options.themeCss ?? \"\"}`;\n\n return `<!doctype html>\n<html lang=\"en\"${options.dark ? ' class=\"dark\"' : \"\"}>\n<head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <meta http-equiv=\"Content-Security-Policy\" content=\"${EXTENSION_IFRAME_META_CSP}\" />\n <title>${escapeHtml(options.title ?? \"Agent Native extension\")}</title>\n <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n <link href=\"https://fonts.googleapis.com/css2?family=Inter:wght@300..700&display=swap\" rel=\"stylesheet\" />\n <script\n src=\"https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4.2.4\"\n integrity=\"sha384-yNSZBFvuOWcmww494a9+1zNuvgUGEXoWkein7cxP8wHUTi3iXCU4vJ7hr3tzBCml\"\n crossorigin=\"anonymous\"\n ></script>\n <script\n defer\n src=\"https://cdn.jsdelivr.net/npm/alpinejs@3.15.11/dist/cdn.min.js\"\n integrity=\"sha384-WPtu0YHhJ3arcykfnv1JgUffWDSKRnqnDeTpJUbOc2os2moEmLkIdaeR0trPN4be\"\n crossorigin=\"anonymous\"\n ></script>\n <style>${themeCss}</style>\n <style type=\"text/tailwindcss\">\n @custom-variant dark (&:where(.dark, .dark *));\n @theme {\n --color-background: hsl(var(--background));\n --color-foreground: hsl(var(--foreground));\n --color-muted: hsl(var(--muted));\n --color-muted-foreground: hsl(var(--muted-foreground));\n --color-border: hsl(var(--border));\n --color-primary: hsl(var(--primary));\n --color-primary-foreground: hsl(var(--primary-foreground));\n --color-destructive: hsl(var(--destructive));\n --color-destructive-foreground: hsl(var(--destructive-foreground));\n }\n </style>\n <script>\n (function() {\n var extensionId = ${extensionId};\n var pending = {};\n var seq = 0;\n var slotContext = {};\n var HOST = {\n READY: \"agentNative.host.ready\",\n GET_CONTEXT: \"agentNative.host.getContext\",\n CONTEXT: \"agentNative.host.context\",\n LIST_ACTIONS: \"agentNative.host.listActions\",\n ACTIONS: \"agentNative.host.actions\",\n RUN_ACTION: \"agentNative.host.runAction\",\n ACTION_RESULT: \"agentNative.host.actionResult\",\n COMMAND: \"agentNative.host.command\",\n COMMAND_RESULT: \"agentNative.host.commandResult\"\n };\n var STORAGE_REQUEST = ${storageRequestType};\n var STORAGE_RESPONSE = ${storageResponseType};\n var SLOT_CONTEXT = ${slotContextType};\n var RESIZE = ${resizeType};\n\n function nextId(prefix) {\n seq += 1;\n return prefix + \"-\" + Date.now() + \"-\" + seq;\n }\n\n function request(type, responseType, payload, timeoutMs) {\n return new Promise(function(resolve, reject) {\n var requestId = nextId(\"extension\");\n var timer = setTimeout(function() {\n delete pending[requestId];\n reject(new Error(\"Extension host request timed out\"));\n }, timeoutMs || 30000);\n pending[requestId] = {\n responseType: responseType,\n resolve: resolve,\n reject: reject,\n timer: timer\n };\n window.parent.postMessage(Object.assign({ type: type, requestId: requestId }, payload || {}), \"*\");\n });\n }\n\n window.addEventListener(\"message\", function(event) {\n if (event.source !== window.parent) return;\n var message = event.data || {};\n if (message.type === SLOT_CONTEXT) {\n slotContext = message.context || {};\n window.slotContext = slotContext;\n window.agentNative.slotContext = slotContext;\n return;\n }\n var item = pending[message.requestId];\n if (!item || message.type !== item.responseType) return;\n clearTimeout(item.timer);\n delete pending[message.requestId];\n if (message.ok === false || message.error) {\n item.reject(new Error(message.error || \"Extension host request failed\"));\n return;\n }\n item.resolve(message);\n });\n\n function storage(operation, payload) {\n return request(STORAGE_REQUEST, STORAGE_RESPONSE, Object.assign({\n operation: operation,\n extensionId: extensionId\n }, payload || {})).then(function(message) {\n return message.result;\n });\n }\n\n var api = {\n extensionId: extensionId,\n slotContext: slotContext,\n context: function() {\n return request(HOST.GET_CONTEXT, HOST.CONTEXT).then(function(message) {\n return message.context || {};\n });\n },\n listActions: function() {\n return request(HOST.LIST_ACTIONS, HOST.ACTIONS).then(function(message) {\n return message.actions || [];\n });\n },\n action: function(name, args) {\n return request(HOST.RUN_ACTION, HOST.ACTION_RESULT, {\n name: name,\n args: args || {}\n }).then(function(message) {\n return message.result;\n });\n },\n command: function(command, payload) {\n return request(HOST.COMMAND, HOST.COMMAND_RESULT, {\n command: command,\n payload: payload\n }).then(function(message) {\n return message.result;\n });\n },\n refresh: function(payload) {\n return api.command(\"refreshData\", payload);\n },\n data: {\n list: function(collection, opts) {\n opts = opts || {};\n return storage(\"list\", {\n collection: collection,\n scope: opts.scope,\n limit: opts.limit\n });\n },\n get: function(collection, id, opts) {\n opts = opts || {};\n return storage(\"get\", {\n collection: collection,\n id: id,\n scope: opts.scope\n });\n },\n set: function(collection, id, data, opts) {\n opts = opts || {};\n return storage(\"set\", {\n collection: collection,\n id: id,\n data: data,\n scope: opts.scope\n });\n },\n remove: function(collection, id, opts) {\n opts = opts || {};\n return storage(\"remove\", {\n collection: collection,\n id: id,\n scope: opts.scope\n });\n }\n }\n };\n\n window.agentNative = api;\n window.appAction = api.action;\n window.extensionData = api.data;\n window.extensionId = extensionId;\n window.slotContext = slotContext;\n window.toolData = api.data;\n window.toolId = extensionId;\n\n function reportSize() {\n var height = Math.max(\n document.documentElement ? document.documentElement.scrollHeight : 0,\n document.body ? document.body.scrollHeight : 0\n );\n window.parent.postMessage({ type: RESIZE, height: height }, \"*\");\n }\n if (typeof ResizeObserver !== \"undefined\") {\n window.addEventListener(\"DOMContentLoaded\", function() {\n var observer = new ResizeObserver(reportSize);\n observer.observe(document.body);\n reportSize();\n });\n } else {\n window.addEventListener(\"load\", reportSize);\n setInterval(reportSize, 1000);\n }\n\n window.parent.postMessage({ type: HOST.READY, requestId: nextId(\"ready\") }, \"*\");\n })();\n </script>\n</head>\n<body>\n${options.content}\n</body>\n</html>`;\n}\n\nfunction storageKey(\n namespace: string,\n context: AgentNativeExtensionStorageContext,\n collection: string,\n scope: AgentNativeExtensionStorageScope,\n): string {\n return [\n \"agent-native-extension-data\",\n namespace,\n context.extensionId,\n scope,\n collection,\n ]\n .map(encodeURIComponent)\n .join(\":\");\n}\n\nfunction readCollection(\n namespace: string,\n context: AgentNativeExtensionStorageContext,\n collection: string,\n scope: AgentNativeExtensionStorageScope,\n): Record<string, AgentNativeExtensionDataRow> {\n if (typeof localStorage === \"undefined\") return {};\n const raw = localStorage.getItem(\n storageKey(namespace, context, collection, scope),\n );\n if (!raw) return {};\n try {\n return JSON.parse(raw) as Record<string, AgentNativeExtensionDataRow>;\n } catch {\n return {};\n }\n}\n\nfunction writeCollection(\n namespace: string,\n context: AgentNativeExtensionStorageContext,\n collection: string,\n scope: AgentNativeExtensionStorageScope,\n rows: Record<string, AgentNativeExtensionDataRow>,\n): void {\n if (typeof localStorage === \"undefined\") return;\n localStorage.setItem(\n storageKey(namespace, context, collection, scope),\n JSON.stringify(rows),\n );\n}\n\nfunction normalizeScope(\n scope: AgentNativeExtensionStorageScope | undefined,\n): AgentNativeExtensionStorageScope {\n return scope === \"org\" ? \"org\" : \"user\";\n}\n\nexport function createLocalStorageAgentNativeExtensionStorage(\n namespace = \"default\",\n): AgentNativeExtensionStorage {\n return {\n async list(collection, options) {\n const scopes =\n options.scope === \"all\"\n ? ([\"user\", \"org\"] as const)\n : ([normalizeScope(options.scope)] as const);\n const rows = scopes.flatMap((scope) =>\n Object.values(\n readCollection(namespace, options.context, collection, scope),\n ),\n );\n return rows\n .sort((a, b) => b.updatedAt.localeCompare(a.updatedAt))\n .slice(0, options.limit ?? 100);\n },\n async get(collection, id, options) {\n const scope = normalizeScope(options.scope);\n const rows = readCollection(\n namespace,\n options.context,\n collection,\n scope,\n );\n return rows[id] ?? null;\n },\n async set(collection, id, data, options) {\n const scope = normalizeScope(options.scope);\n const rows = readCollection(\n namespace,\n options.context,\n collection,\n scope,\n );\n const now = new Date().toISOString();\n const row: AgentNativeExtensionDataRow = {\n id,\n extensionId: options.context.extensionId,\n collection,\n data,\n scope,\n createdAt: rows[id]?.createdAt ?? now,\n updatedAt: now,\n };\n rows[id] = row;\n writeCollection(namespace, options.context, collection, scope, rows);\n return row;\n },\n async remove(collection, id, options) {\n const scope = normalizeScope(options.scope);\n const rows = readCollection(\n namespace,\n options.context,\n collection,\n scope,\n );\n delete rows[id];\n writeCollection(namespace, options.context, collection, scope, rows);\n return { ok: true };\n },\n };\n}\n"]}
@@ -4,7 +4,7 @@ export interface ExtensionDeleteTarget {
4
4
  canDelete?: boolean | null;
5
5
  }
6
6
  export type ExtensionDeleteResult = {
7
- mode: "deleted" | "hidden";
7
+ mode: "archived" | "hidden";
8
8
  };
9
9
  export declare function hideExtensionForCurrentUser(extensionId: string): Promise<ExtensionDeleteResult>;
10
10
  export declare function deleteOrHideExtension(extension: ExtensionDeleteTarget): Promise<ExtensionDeleteResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"delete-extension.d.ts","sourceRoot":"","sources":["../../../src/client/extensions/delete-extension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIzD,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,MAAM,qBAAqB,GAAG;IAAE,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAA;CAAE,CAAC;AAsBnE,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,qBAAqB,CAAC,CAWhC;AAED,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,qBAAqB,GAC/B,OAAO,CAAC,qBAAqB,CAAC,CAgBhC;AAED,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,MAAM,GAClB,IAAI,CAMN"}
1
+ {"version":3,"file":"delete-extension.d.ts","sourceRoot":"","sources":["../../../src/client/extensions/delete-extension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIzD,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,MAAM,qBAAqB,GAAG;IAAE,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAA;CAAE,CAAC;AAsBpE,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,qBAAqB,CAAC,CAWhC;AAED,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,qBAAqB,GAC/B,OAAO,CAAC,qBAAqB,CAAC,CAgBhC;AAED,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,MAAM,GAClB,IAAI,CAMN"}
@@ -33,7 +33,7 @@ export async function deleteOrHideExtension(extension) {
33
33
  }
34
34
  const res = await fetch(agentNativePath(`/_agent-native/extensions/${extension.id}`), { method: "DELETE" });
35
35
  if (res.ok)
36
- return { mode: "deleted" };
36
+ return { mode: "archived" };
37
37
  if (res.status === 403) {
38
38
  return hideExtensionForCurrentUser(extension.id);
39
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"delete-extension.js","sourceRoot":"","sources":["../../../src/client/extensions/delete-extension.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AASjD,KAAK,UAAU,gBAAgB,CAC7B,GAAa,EACb,QAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI;YAAE,OAAO,QAAQ,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,MAAM,EAAE,KAAK;gBAAE,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,MAAM,EAAE,OAAO;gBAAE,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,wDAAwD;IAC1D,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,WAAmB;IAEnB,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,eAAe,CAAC,6BAA6B,WAAW,OAAO,CAAC,EAChE,EAAE,MAAM,EAAE,MAAM,EAAE,CACnB,CAAC;IACF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,MAAM,gBAAgB,CAAC,GAAG,EAAE,2CAA2C,CAAC,CACzE,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,SAAgC;IAEhC,IAAI,SAAS,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;QAClC,OAAO,2BAA2B,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,eAAe,CAAC,6BAA6B,SAAS,CAAC,EAAE,EAAE,CAAC,EAC5D,EAAE,MAAM,EAAE,QAAQ,EAAE,CACrB,CAAC;IACF,IAAI,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAEvC,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,OAAO,2BAA2B,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,MAAM,gBAAgB,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,WAAwB,EACxB,WAAmB;IAEnB,WAAW,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IACpE,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAC5D,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,iBAAiB,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IAC9E,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IAC/D,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;AAClE,CAAC","sourcesContent":["import type { QueryClient } from \"@tanstack/react-query\";\n\nimport { agentNativePath } from \"../api-path.js\";\n\nexport interface ExtensionDeleteTarget {\n id: string;\n canDelete?: boolean | null;\n}\n\nexport type ExtensionDeleteResult = { mode: \"deleted\" | \"hidden\" };\n\nasync function readErrorMessage(\n res: Response,\n fallback: string,\n): Promise<string> {\n try {\n const text = await res.text();\n if (!text) return fallback;\n try {\n const parsed = JSON.parse(text);\n if (parsed?.error) return String(parsed.error);\n if (parsed?.message) return String(parsed.message);\n } catch {\n return text.slice(0, 200);\n }\n } catch {\n // Ignore body read failures and use the fallback below.\n }\n return fallback;\n}\n\nexport async function hideExtensionForCurrentUser(\n extensionId: string,\n): Promise<ExtensionDeleteResult> {\n const res = await fetch(\n agentNativePath(`/_agent-native/extensions/${extensionId}/hide`),\n { method: \"POST\" },\n );\n if (!res.ok) {\n throw new Error(\n await readErrorMessage(res, \"Could not remove extension from your list\"),\n );\n }\n return { mode: \"hidden\" };\n}\n\nexport async function deleteOrHideExtension(\n extension: ExtensionDeleteTarget,\n): Promise<ExtensionDeleteResult> {\n if (extension.canDelete === false) {\n return hideExtensionForCurrentUser(extension.id);\n }\n\n const res = await fetch(\n agentNativePath(`/_agent-native/extensions/${extension.id}`),\n { method: \"DELETE\" },\n );\n if (res.ok) return { mode: \"deleted\" };\n\n if (res.status === 403) {\n return hideExtensionForCurrentUser(extension.id);\n }\n\n throw new Error(await readErrorMessage(res, \"Delete failed\"));\n}\n\nexport function invalidateExtensionRemoval(\n queryClient: QueryClient,\n extensionId: string,\n): void {\n queryClient.removeQueries({ queryKey: [\"extension\", extensionId] });\n queryClient.invalidateQueries({ queryKey: [\"extensions\"] });\n queryClient.invalidateQueries({ queryKey: [\"extension-slots\", extensionId] });\n queryClient.invalidateQueries({ queryKey: [\"slot-installs\"] });\n queryClient.invalidateQueries({ queryKey: [\"slot-available\"] });\n}\n"]}
1
+ {"version":3,"file":"delete-extension.js","sourceRoot":"","sources":["../../../src/client/extensions/delete-extension.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AASjD,KAAK,UAAU,gBAAgB,CAC7B,GAAa,EACb,QAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI;YAAE,OAAO,QAAQ,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,MAAM,EAAE,KAAK;gBAAE,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,MAAM,EAAE,OAAO;gBAAE,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,wDAAwD;IAC1D,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,WAAmB;IAEnB,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,eAAe,CAAC,6BAA6B,WAAW,OAAO,CAAC,EAChE,EAAE,MAAM,EAAE,MAAM,EAAE,CACnB,CAAC;IACF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,MAAM,gBAAgB,CAAC,GAAG,EAAE,2CAA2C,CAAC,CACzE,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,SAAgC;IAEhC,IAAI,SAAS,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;QAClC,OAAO,2BAA2B,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,eAAe,CAAC,6BAA6B,SAAS,CAAC,EAAE,EAAE,CAAC,EAC5D,EAAE,MAAM,EAAE,QAAQ,EAAE,CACrB,CAAC;IACF,IAAI,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAExC,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,OAAO,2BAA2B,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,MAAM,gBAAgB,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,WAAwB,EACxB,WAAmB;IAEnB,WAAW,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IACpE,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAC5D,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,iBAAiB,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IAC9E,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IAC/D,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;AAClE,CAAC","sourcesContent":["import type { QueryClient } from \"@tanstack/react-query\";\n\nimport { agentNativePath } from \"../api-path.js\";\n\nexport interface ExtensionDeleteTarget {\n id: string;\n canDelete?: boolean | null;\n}\n\nexport type ExtensionDeleteResult = { mode: \"archived\" | \"hidden\" };\n\nasync function readErrorMessage(\n res: Response,\n fallback: string,\n): Promise<string> {\n try {\n const text = await res.text();\n if (!text) return fallback;\n try {\n const parsed = JSON.parse(text);\n if (parsed?.error) return String(parsed.error);\n if (parsed?.message) return String(parsed.message);\n } catch {\n return text.slice(0, 200);\n }\n } catch {\n // Ignore body read failures and use the fallback below.\n }\n return fallback;\n}\n\nexport async function hideExtensionForCurrentUser(\n extensionId: string,\n): Promise<ExtensionDeleteResult> {\n const res = await fetch(\n agentNativePath(`/_agent-native/extensions/${extensionId}/hide`),\n { method: \"POST\" },\n );\n if (!res.ok) {\n throw new Error(\n await readErrorMessage(res, \"Could not remove extension from your list\"),\n );\n }\n return { mode: \"hidden\" };\n}\n\nexport async function deleteOrHideExtension(\n extension: ExtensionDeleteTarget,\n): Promise<ExtensionDeleteResult> {\n if (extension.canDelete === false) {\n return hideExtensionForCurrentUser(extension.id);\n }\n\n const res = await fetch(\n agentNativePath(`/_agent-native/extensions/${extension.id}`),\n { method: \"DELETE\" },\n );\n if (res.ok) return { mode: \"archived\" };\n\n if (res.status === 403) {\n return hideExtensionForCurrentUser(extension.id);\n }\n\n throw new Error(await readErrorMessage(res, \"Delete failed\"));\n}\n\nexport function invalidateExtensionRemoval(\n queryClient: QueryClient,\n extensionId: string,\n): void {\n queryClient.removeQueries({ queryKey: [\"extension\", extensionId] });\n queryClient.invalidateQueries({ queryKey: [\"extensions\"] });\n queryClient.invalidateQueries({ queryKey: [\"extension-slots\", extensionId] });\n queryClient.invalidateQueries({ queryKey: [\"slot-installs\"] });\n queryClient.invalidateQueries({ queryKey: [\"slot-available\"] });\n}\n"]}
@@ -11,6 +11,8 @@ export interface OrgSwitcherProps {
11
11
  * the in-sidebar settings panel.
12
12
  */
13
13
  settingsPath?: string | null;
14
+ /** Path to navigate to when the user clicks "Profile". Defaults to the shared Account settings section. */
15
+ profilePath?: string | null;
14
16
  }
15
17
  /**
16
18
  * Compact org switcher button. Shows the active org (or "Personal" when the
@@ -18,5 +20,5 @@ export interface OrgSwitcherProps {
18
20
  * invitations, inline forms to create a new org / invite a teammate, and a
19
21
  * sign-out item. Renders nothing in dev / no-auth mode.
20
22
  */
21
- export declare function OrgSwitcher({ className, hideWhenSingle, reserveSpace, settingsPath, }: OrgSwitcherProps): import("react").JSX.Element | null;
23
+ export declare function OrgSwitcher({ className, hideWhenSingle, reserveSpace, settingsPath, profilePath, }: OrgSwitcherProps): import("react").JSX.Element | null;
22
24
  //# sourceMappingURL=OrgSwitcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"OrgSwitcher.d.ts","sourceRoot":"","sources":["../../../src/client/org/OrgSwitcher.tsx"],"names":[],"mappings":"AAyDA,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAoOD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,cAAc,EACd,YAAY,EACZ,YAAiD,GAClD,EAAE,gBAAgB,sCA4blB"}
1
+ {"version":3,"file":"OrgSwitcher.d.ts","sourceRoot":"","sources":["../../../src/client/org/OrgSwitcher.tsx"],"names":[],"mappings":"AA4DA,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,2GAA2G;IAC3G,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAqOD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,cAAc,EACd,YAAY,EACZ,YAAiD,EACjD,WAAkC,GACnC,EAAE,gBAAgB,sCA6clB"}