@agent-native/core 0.117.1 → 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 (347) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +10 -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/extensions/actions.ts +13 -5
  14. package/corpus/core/src/extensions/local.ts +1 -0
  15. package/corpus/core/src/extensions/routes.ts +10 -5
  16. package/corpus/core/src/extensions/schema.ts +5 -0
  17. package/corpus/core/src/extensions/slots/store.ts +14 -4
  18. package/corpus/core/src/extensions/store.ts +55 -19
  19. package/corpus/core/src/extensions/theme.ts +1 -1
  20. package/corpus/core/src/file-upload/registry.ts +9 -0
  21. package/corpus/core/src/index.browser.ts +5 -0
  22. package/corpus/core/src/index.ts +1 -0
  23. package/corpus/core/src/localization/default-messages.ts +23 -6
  24. package/corpus/core/src/server/action-discovery.ts +8 -0
  25. package/corpus/core/src/server/better-auth-instance.ts +7 -2
  26. package/corpus/core/src/server/email-template.ts +18 -0
  27. package/corpus/core/src/server/email-templates.ts +3 -0
  28. package/corpus/core/src/server/email.ts +40 -4
  29. package/corpus/core/src/sharing/actions/share-resource.ts +1 -0
  30. package/corpus/core/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  31. package/corpus/core/src/templates/default/app/global.css +1 -1
  32. package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +6 -6
  33. package/corpus/core/src/templates/default/app/i18n/de-DE.ts +6 -6
  34. package/corpus/core/src/templates/default/app/i18n/en-US.ts +6 -6
  35. package/corpus/core/src/templates/default/app/i18n/es-ES.ts +6 -6
  36. package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +6 -6
  37. package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +6 -6
  38. package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +6 -6
  39. package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +6 -6
  40. package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +6 -6
  41. package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +7 -7
  42. package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +7 -7
  43. package/corpus/core/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  44. package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  45. package/corpus/core/src/user-profile/actions/get-user-profile.ts +16 -0
  46. package/corpus/core/src/user-profile/actions/update-user-profile.ts +24 -0
  47. package/corpus/core/src/user-profile/index.ts +5 -0
  48. package/corpus/core/src/user-profile/shared.ts +14 -0
  49. package/corpus/core/src/user-profile/store.ts +50 -0
  50. package/corpus/templates/analytics/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  51. package/corpus/templates/assets/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  52. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +2 -2
  53. package/corpus/templates/assets/app/global.css +1 -1
  54. package/corpus/templates/assets/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  55. package/corpus/templates/brain/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  56. package/corpus/templates/brain/app/global.css +2 -2
  57. package/corpus/templates/brain/app/lib/brain.ts +2 -2
  58. package/corpus/templates/brain/app/root.tsx +2 -2
  59. package/corpus/templates/brain/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  60. package/corpus/templates/calendar/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  61. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +6 -2
  62. package/corpus/templates/calendar/app/global.css +1 -1
  63. package/corpus/templates/calendar/app/root.tsx +2 -2
  64. package/corpus/templates/calendar/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  65. package/corpus/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  66. package/corpus/templates/chat/app/components/layout/Sidebar.tsx +2 -2
  67. package/corpus/templates/chat/app/global.css +1 -1
  68. package/corpus/templates/chat/app/root.tsx +2 -2
  69. package/corpus/templates/chat/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  70. package/corpus/templates/clips/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  71. package/corpus/templates/clips/actions/export-to-brain.ts +1 -1
  72. package/corpus/templates/clips/actions/invite-member.ts +1 -0
  73. package/corpus/templates/clips/app/components/library/library-layout.tsx +2 -2
  74. package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +20 -11
  75. package/corpus/templates/clips/app/global.css +1 -1
  76. package/corpus/templates/clips/app/root.tsx +7 -2
  77. package/corpus/templates/clips/app/routes/record.tsx +2 -88
  78. package/corpus/templates/clips/changelog/2026-07-22-builder-connected-recordings-start-resumable-upload-sessions.md +6 -0
  79. package/corpus/templates/clips/changelog/2026-07-22-clip-thumbnails-now-come-from-the-recording-instead-of-the-p.md +6 -0
  80. package/corpus/templates/clips/changelog/2026-07-22-clips-emails-now-render-the-agent-native-logo-in-gmail-and-o.md +6 -0
  81. package/corpus/templates/clips/changelog/2026-07-22-dismissed-zoom-and-teams-meeting-note-prompts-now-stay-dismi.md +6 -0
  82. package/corpus/templates/clips/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  83. package/corpus/templates/clips/changelog/2026-07-22-quieter-permissions-and-rewind-controls.md +6 -0
  84. package/corpus/templates/clips/desktop/src/app.tsx +86 -52
  85. package/corpus/templates/clips/desktop/src/lib/meeting-notification-dismissal.ts +31 -0
  86. package/corpus/templates/clips/desktop/src/lib/recorder.ts +4 -167
  87. package/corpus/templates/clips/desktop/src/overlays/meeting-notification.tsx +10 -1
  88. package/corpus/templates/clips/desktop/src/styles.css +98 -36
  89. package/corpus/templates/clips/desktop/src-tauri/src/adhoc_meetings_watcher.rs +67 -4
  90. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +1 -1
  91. package/corpus/templates/clips/desktop/src-tauri/src/meetings_watcher.rs +51 -0
  92. package/corpus/templates/clips/desktop/src-tauri/src/native_screen/custom_capture.rs +5 -1
  93. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +0 -189
  94. package/corpus/templates/clips/desktop/src-tauri/src/notifications.rs +62 -0
  95. package/corpus/templates/clips/server/plugins/db.ts +6 -2
  96. package/corpus/templates/content/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  97. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +3 -3
  98. package/corpus/templates/content/app/global.css +1 -1
  99. package/corpus/templates/content/app/root.tsx +2 -2
  100. package/corpus/templates/content/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  101. package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  102. package/corpus/templates/crm/app/global.css +1 -1
  103. package/corpus/templates/design/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  104. package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +19 -1
  105. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +12 -1
  106. package/corpus/templates/design/app/components/design/EditPanel.tsx +177 -52
  107. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +179 -59
  108. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +74 -27
  109. package/corpus/templates/design/app/components/design/multi-screen/types.ts +2 -0
  110. package/corpus/templates/design/app/components/layout/Sidebar.tsx +2 -2
  111. package/corpus/templates/design/app/global.css +1 -1
  112. package/corpus/templates/design/app/hooks/use-navigation-state.ts +6 -5
  113. package/corpus/templates/design/app/root.tsx +2 -2
  114. package/corpus/templates/design/changelog/2026-07-22-design-owners-can-keep-editing-their-designs-after-switching.md +6 -0
  115. package/corpus/templates/design/changelog/2026-07-22-inspector-tabs-keep-their-text-labels-at-narrow-widths.md +6 -0
  116. package/corpus/templates/design/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  117. package/corpus/templates/design/changelog/2026-07-22-narrow-breakpoint-previews-keep-their-device-labels-readable.md +6 -0
  118. package/corpus/templates/design/changelog/2026-07-22-removed-the-draft-status-chip-from-the-design-editor.md +6 -0
  119. package/corpus/templates/design/changelog/2026-07-22-responsive-breakpoint-controls-stay-within-narrow-sidebars.md +6 -0
  120. package/corpus/templates/design/changelog/2026-07-22-responsive-peers-now-use-a-softer-selection-highlight-withou.md +6 -0
  121. package/corpus/templates/design/changelog/2026-07-22-rotate-from-context-menu.md +6 -0
  122. package/corpus/templates/design/changelog/2026-07-22-the-selection-outline-now-stays-attached-while-moving-screen.md +6 -0
  123. package/corpus/templates/design/changelog/2026-07-22-view-only-designs-now-support-figma-style-layer-inspection-w.md +6 -0
  124. package/corpus/templates/design/server/db/index.ts +4 -0
  125. package/corpus/templates/dispatch/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  126. package/corpus/templates/dispatch/app/dispatch-extensions.tsx +2 -2
  127. package/corpus/templates/dispatch/app/global.css +1 -1
  128. package/corpus/templates/dispatch/app/root.tsx +2 -2
  129. package/corpus/templates/dispatch/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  130. package/corpus/templates/forms/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  131. package/corpus/templates/forms/app/components/layout/Layout.tsx +1 -1
  132. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +3 -3
  133. package/corpus/templates/forms/app/global.css +1 -1
  134. package/corpus/templates/forms/app/hooks/use-forms.ts +55 -2
  135. package/corpus/templates/forms/app/i18n/en-US.ts +2 -0
  136. package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +3 -3
  137. package/corpus/templates/forms/app/pages/FormsListPage.tsx +23 -6
  138. package/corpus/templates/forms/app/root.tsx +2 -2
  139. package/corpus/templates/forms/changelog/2026-07-22-forms-now-archive-with-optimistic-feedback.md +6 -0
  140. package/corpus/templates/forms/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  141. package/corpus/templates/forms/server/plugins/agent-chat.ts +1 -1
  142. package/corpus/templates/macros/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  143. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +2 -2
  144. package/corpus/templates/macros/app/root.tsx +2 -2
  145. package/corpus/templates/macros/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  146. package/corpus/templates/mail/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  147. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +3 -3
  148. package/corpus/templates/mail/app/components/layout/CommandPalette.tsx +2 -2
  149. package/corpus/templates/mail/app/global.css +1 -1
  150. package/corpus/templates/mail/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  151. package/corpus/templates/plan/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  152. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +2 -2
  153. package/corpus/templates/plan/app/global.css +1 -1
  154. package/corpus/templates/plan/app/root.tsx +2 -2
  155. package/corpus/templates/plan/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  156. package/corpus/templates/slides/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  157. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +2 -2
  158. package/corpus/templates/slides/app/root.tsx +2 -2
  159. package/corpus/templates/slides/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  160. package/corpus/templates/slides/changelog/2026-07-22-slides-no-longer-fail-intermittently-on-fresh-server-instances.md +6 -0
  161. package/corpus/templates/slides/changelog/2026-07-22-uploaded-screenshots-can-now-be-analyzed-and-recreated-as-ed.md +6 -0
  162. package/corpus/templates/slides/server/lib/chat-attachments.ts +7 -3
  163. package/corpus/templates/slides/server/plugins/db.ts +44 -17
  164. package/corpus/templates/tasks/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  165. package/corpus/templates/tasks/app/global.css +1 -1
  166. package/dist/cli/context-xray-local.js +1 -1
  167. package/dist/cli/context-xray-local.js.map +1 -1
  168. package/dist/client/extensions/ExtensionViewer.js +2 -2
  169. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  170. package/dist/client/extensions/ExtensionsSidebarSection.js +11 -11
  171. package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
  172. package/dist/client/extensions/agent-native-extension-runtime.js +1 -1
  173. package/dist/client/extensions/agent-native-extension-runtime.js.map +1 -1
  174. package/dist/client/extensions/delete-extension.d.ts +1 -1
  175. package/dist/client/extensions/delete-extension.d.ts.map +1 -1
  176. package/dist/client/extensions/delete-extension.js +1 -1
  177. package/dist/client/extensions/delete-extension.js.map +1 -1
  178. package/dist/client/org/OrgSwitcher.d.ts +3 -1
  179. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  180. package/dist/client/org/OrgSwitcher.js +12 -4
  181. package/dist/client/org/OrgSwitcher.js.map +1 -1
  182. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  183. package/dist/client/settings/SettingsPanel.js +37 -4
  184. package/dist/client/settings/SettingsPanel.js.map +1 -1
  185. package/dist/client/sharing/ShareButton.d.ts +3 -4
  186. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  187. package/dist/client/sharing/ShareButton.js +3 -2
  188. package/dist/client/sharing/ShareButton.js.map +1 -1
  189. package/dist/collab/awareness.d.ts +2 -2
  190. package/dist/collab/awareness.d.ts.map +1 -1
  191. package/dist/db/client.d.ts +7 -7
  192. package/dist/db/client.d.ts.map +1 -1
  193. package/dist/db/client.js +13 -10
  194. package/dist/db/client.js.map +1 -1
  195. package/dist/extensions/actions.d.ts.map +1 -1
  196. package/dist/extensions/actions.js +8 -5
  197. package/dist/extensions/actions.js.map +1 -1
  198. package/dist/extensions/local.d.ts.map +1 -1
  199. package/dist/extensions/local.js +1 -0
  200. package/dist/extensions/local.js.map +1 -1
  201. package/dist/extensions/routes.d.ts.map +1 -1
  202. package/dist/extensions/routes.js +9 -4
  203. package/dist/extensions/routes.js.map +1 -1
  204. package/dist/extensions/schema.d.ts +23 -2
  205. package/dist/extensions/schema.d.ts.map +1 -1
  206. package/dist/extensions/schema.js +5 -0
  207. package/dist/extensions/schema.js.map +1 -1
  208. package/dist/extensions/slots/store.d.ts +1 -1
  209. package/dist/extensions/slots/store.d.ts.map +1 -1
  210. package/dist/extensions/slots/store.js +4 -4
  211. package/dist/extensions/slots/store.js.map +1 -1
  212. package/dist/extensions/store.d.ts +1 -0
  213. package/dist/extensions/store.d.ts.map +1 -1
  214. package/dist/extensions/store.js +38 -21
  215. package/dist/extensions/store.js.map +1 -1
  216. package/dist/extensions/theme.js +1 -1
  217. package/dist/extensions/theme.js.map +1 -1
  218. package/dist/file-upload/registry.d.ts.map +1 -1
  219. package/dist/file-upload/registry.js +9 -0
  220. package/dist/file-upload/registry.js.map +1 -1
  221. package/dist/index.browser.d.ts +1 -0
  222. package/dist/index.browser.d.ts.map +1 -1
  223. package/dist/index.browser.js +1 -0
  224. package/dist/index.browser.js.map +1 -1
  225. package/dist/index.d.ts +1 -0
  226. package/dist/index.d.ts.map +1 -1
  227. package/dist/index.js +1 -0
  228. package/dist/index.js.map +1 -1
  229. package/dist/localization/default-messages.d.ts +16 -0
  230. package/dist/localization/default-messages.d.ts.map +1 -1
  231. package/dist/localization/default-messages.js +22 -6
  232. package/dist/localization/default-messages.js.map +1 -1
  233. package/dist/provider-api/actions/custom-provider-registration.d.ts +7 -7
  234. package/dist/provider-api/actions/provider-api.d.ts +11 -11
  235. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  236. package/dist/secrets/routes.d.ts +6 -6
  237. package/dist/server/action-discovery.d.ts.map +1 -1
  238. package/dist/server/action-discovery.js +8 -0
  239. package/dist/server/action-discovery.js.map +1 -1
  240. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  241. package/dist/server/better-auth-instance.d.ts +7 -2
  242. package/dist/server/better-auth-instance.d.ts.map +1 -1
  243. package/dist/server/better-auth-instance.js.map +1 -1
  244. package/dist/server/email-template.d.ts +3 -0
  245. package/dist/server/email-template.d.ts.map +1 -1
  246. package/dist/server/email-template.js +13 -0
  247. package/dist/server/email-template.js.map +1 -1
  248. package/dist/server/email-templates.d.ts.map +1 -1
  249. package/dist/server/email-templates.js +3 -0
  250. package/dist/server/email-templates.js.map +1 -1
  251. package/dist/server/email.d.ts.map +1 -1
  252. package/dist/server/email.js +27 -4
  253. package/dist/server/email.js.map +1 -1
  254. package/dist/sharing/actions/share-resource.js +1 -0
  255. package/dist/sharing/actions/share-resource.js.map +1 -1
  256. package/dist/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  257. package/dist/templates/chat/app/components/layout/Sidebar.tsx +2 -2
  258. package/dist/templates/chat/app/global.css +1 -1
  259. package/dist/templates/chat/app/root.tsx +2 -2
  260. package/dist/templates/chat/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  261. package/dist/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  262. package/dist/templates/default/app/global.css +1 -1
  263. package/dist/templates/default/app/i18n/ar-SA.ts +6 -6
  264. package/dist/templates/default/app/i18n/de-DE.ts +6 -6
  265. package/dist/templates/default/app/i18n/en-US.ts +6 -6
  266. package/dist/templates/default/app/i18n/es-ES.ts +6 -6
  267. package/dist/templates/default/app/i18n/fr-FR.ts +6 -6
  268. package/dist/templates/default/app/i18n/hi-IN.ts +6 -6
  269. package/dist/templates/default/app/i18n/ja-JP.ts +6 -6
  270. package/dist/templates/default/app/i18n/ko-KR.ts +6 -6
  271. package/dist/templates/default/app/i18n/pt-BR.ts +6 -6
  272. package/dist/templates/default/app/i18n/zh-CN.ts +7 -7
  273. package/dist/templates/default/app/i18n/zh-TW.ts +7 -7
  274. package/dist/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  275. package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  276. package/dist/user-profile/actions/get-user-profile.d.ts +4 -0
  277. package/dist/user-profile/actions/get-user-profile.d.ts.map +1 -0
  278. package/dist/user-profile/actions/get-user-profile.js +14 -0
  279. package/dist/user-profile/actions/get-user-profile.js.map +1 -0
  280. package/dist/user-profile/actions/update-user-profile.d.ts +6 -0
  281. package/dist/user-profile/actions/update-user-profile.d.ts.map +1 -0
  282. package/dist/user-profile/actions/update-user-profile.js +20 -0
  283. package/dist/user-profile/actions/update-user-profile.js.map +1 -0
  284. package/dist/user-profile/index.d.ts +2 -0
  285. package/dist/user-profile/index.d.ts.map +1 -0
  286. package/dist/user-profile/index.js +2 -0
  287. package/dist/user-profile/index.js.map +1 -0
  288. package/dist/user-profile/shared.d.ts +7 -0
  289. package/dist/user-profile/shared.d.ts.map +1 -0
  290. package/dist/user-profile/shared.js +6 -0
  291. package/dist/user-profile/shared.js.map +1 -0
  292. package/dist/user-profile/store.d.ts +4 -0
  293. package/dist/user-profile/store.d.ts.map +1 -0
  294. package/dist/user-profile/store.js +38 -0
  295. package/dist/user-profile/store.js.map +1 -0
  296. package/package.json +2 -1
  297. package/src/cli/context-xray-local.ts +1 -1
  298. package/src/client/extensions/ExtensionViewer.tsx +4 -4
  299. package/src/client/extensions/ExtensionsSidebarSection.tsx +11 -11
  300. package/src/client/extensions/agent-native-extension-runtime.ts +1 -1
  301. package/src/client/extensions/delete-extension.ts +2 -2
  302. package/src/client/org/OrgSwitcher.tsx +25 -1
  303. package/src/client/settings/SettingsPanel.tsx +102 -10
  304. package/src/client/sharing/ShareButton.tsx +7 -6
  305. package/src/db/client.ts +13 -10
  306. package/src/extensions/actions.ts +13 -5
  307. package/src/extensions/local.ts +1 -0
  308. package/src/extensions/routes.ts +10 -5
  309. package/src/extensions/schema.ts +5 -0
  310. package/src/extensions/slots/store.ts +14 -4
  311. package/src/extensions/store.ts +55 -19
  312. package/src/extensions/theme.ts +1 -1
  313. package/src/file-upload/registry.ts +9 -0
  314. package/src/index.browser.ts +5 -0
  315. package/src/index.ts +1 -0
  316. package/src/localization/default-messages.ts +23 -6
  317. package/src/server/action-discovery.ts +8 -0
  318. package/src/server/better-auth-instance.ts +7 -2
  319. package/src/server/email-template.ts +18 -0
  320. package/src/server/email-templates.ts +3 -0
  321. package/src/server/email.ts +40 -4
  322. package/src/sharing/actions/share-resource.ts +1 -0
  323. package/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  324. package/src/templates/chat/app/components/layout/Sidebar.tsx +2 -2
  325. package/src/templates/chat/app/global.css +1 -1
  326. package/src/templates/chat/app/root.tsx +2 -2
  327. package/src/templates/chat/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  328. package/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  329. package/src/templates/default/app/global.css +1 -1
  330. package/src/templates/default/app/i18n/ar-SA.ts +6 -6
  331. package/src/templates/default/app/i18n/de-DE.ts +6 -6
  332. package/src/templates/default/app/i18n/en-US.ts +6 -6
  333. package/src/templates/default/app/i18n/es-ES.ts +6 -6
  334. package/src/templates/default/app/i18n/fr-FR.ts +6 -6
  335. package/src/templates/default/app/i18n/hi-IN.ts +6 -6
  336. package/src/templates/default/app/i18n/ja-JP.ts +6 -6
  337. package/src/templates/default/app/i18n/ko-KR.ts +6 -6
  338. package/src/templates/default/app/i18n/pt-BR.ts +6 -6
  339. package/src/templates/default/app/i18n/zh-CN.ts +7 -7
  340. package/src/templates/default/app/i18n/zh-TW.ts +7 -7
  341. package/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  342. package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  343. package/src/user-profile/actions/get-user-profile.ts +16 -0
  344. package/src/user-profile/actions/update-user-profile.ts +24 -0
  345. package/src/user-profile/index.ts +5 -0
  346. package/src/user-profile/shared.ts +14 -0
  347. package/src/user-profile/store.ts +50 -0
@@ -52,7 +52,7 @@
52
52
  --muted-foreground: 0 0% 60%;
53
53
  --accent: 0 0% 18%;
54
54
  --accent-foreground: 0 0% 90%;
55
- --destructive: 0 63% 51%;
55
+ --destructive: 0 84% 60%;
56
56
  --destructive-foreground: 0 0% 98%;
57
57
  --border: 0 0% 24%;
58
58
  --input: 0 0% 24%;
@@ -359,24 +359,24 @@ const messages = {
359
359
  hideEveryone: "إخفاء من الجميع",
360
360
  localFileDescription:
361
361
  "This extension is backed by {{entryPath}}. Edit or remove it from the workspace.",
362
- deleteQuestion: "Delete {{name}}?",
362
+ deleteQuestion: "هل تريد أرشفة {{name}}؟",
363
363
  removeQuestion: "Remove {{name}}?",
364
364
  hideForYouDescription:
365
365
  "يؤدي هذا إلى إخفائه من قائمة الإضافات الخاصة بك دون حذفه لأي شخص آخر.",
366
366
  removeEverywhereDescription:
367
- "يؤدي هذا إلى إزالته في كل مكان تتم مشاركته فيه.",
367
+ "يؤدي هذا إلى أرشفته في كل مكان تتم مشاركته فيه.",
368
368
  cancel: "إلغاء",
369
369
  remove: "إزالة",
370
370
  removing: "جارٍ الإزالة...",
371
- delete: "حذف",
372
- deleting: "جار الحذف...",
371
+ delete: "أرشفة",
372
+ deleting: "جارٍ الأرشفة...",
373
373
  openFullView: "فتح عرض كامل",
374
374
  removeFromWidgetArea: "إزالة من منطقة القطعة هذه",
375
- deleteExtensionEllipsis: "حذف الامتداد...",
375
+ deleteExtensionEllipsis: "أرشفة الامتداد...",
376
376
  removeFromMyListEllipsis: "إزالة من قائمتي...",
377
377
  removeFromWidgetAreaForMe: "Remove from this widget area (for me)",
378
378
  deleteEverywhereConfirmation:
379
- "يؤدي هذا إلى إزالة الامتداد في كل مكان، لكل شخص تمت مشاركته معه.",
379
+ "يؤدي هذا إلى أرشفة الامتداد في كل مكان، لكل شخص تمت مشاركته معه.",
380
380
  addWidget: "إضافة القطعة",
381
381
  loading: "جار التحميل...",
382
382
  noWidgetsAvailable: "لا توجد أدوات متاحة لهذه الفتحة حتى الآن.",
@@ -352,24 +352,24 @@ const messages = {
352
352
  hideEveryone: "Versteck dich vor allen",
353
353
  localFileDescription:
354
354
  "This extension is backed by {{entryPath}}. Edit or remove it from the workspace.",
355
- deleteQuestion: "Delete {{name}}?",
355
+ deleteQuestion: "{{name}} archivieren?",
356
356
  removeQuestion: "Remove {{name}}?",
357
357
  hideForYouDescription:
358
358
  "Dadurch wird es aus Ihrer Erweiterungsliste ausgeblendet, ohne dass es für andere gelöscht wird.",
359
359
  removeEverywhereDescription:
360
- "Dadurch wird es überall dort entfernt, wo es geteilt wird.",
360
+ "Dadurch wird es überall dort archiviert, wo es geteilt wird.",
361
361
  cancel: "Abbrechen",
362
362
  remove: "Entfernen",
363
363
  removing: "Entfernen...",
364
- delete: "Löschen",
365
- deleting: "Wird gelöscht...",
364
+ delete: "Archivieren",
365
+ deleting: "Wird archiviert...",
366
366
  openFullView: "Vollansicht öffnen",
367
367
  removeFromWidgetArea: "Aus diesem Widget-Bereich entfernen",
368
- deleteExtensionEllipsis: "Erweiterung löschen...",
368
+ deleteExtensionEllipsis: "Erweiterung archivieren...",
369
369
  removeFromMyListEllipsis: "Von meiner Liste entfernen...",
370
370
  removeFromWidgetAreaForMe: "Remove from this widget area (for me)",
371
371
  deleteEverywhereConfirmation:
372
- "Dadurch wird die Erweiterung überall und für alle entfernt, mit denen sie geteilt wird.",
372
+ "Dadurch wird die Erweiterung überall und für alle archiviert, mit denen sie geteilt wird.",
373
373
  addWidget: "Widget hinzufügen",
374
374
  loading: "Wird geladen...",
375
375
  noWidgetsAvailable: "Für diesen Slot sind noch keine Widgets verfügbar.",
@@ -344,23 +344,23 @@ const messages = {
344
344
  hideEveryone: "Hide from everyone",
345
345
  localFileDescription:
346
346
  "This extension is backed by {{entryPath}}. Edit or remove it from the workspace.",
347
- deleteQuestion: "Delete {{name}}?",
347
+ deleteQuestion: "Archive {{name}}?",
348
348
  removeQuestion: "Remove {{name}}?",
349
349
  hideForYouDescription:
350
350
  "This hides it from your Extensions list without deleting it for anyone else.",
351
- removeEverywhereDescription: "This removes it everywhere it is shared.",
351
+ removeEverywhereDescription: "This archives it everywhere it is shared.",
352
352
  cancel: "Cancel",
353
353
  remove: "Remove",
354
354
  removing: "Removing...",
355
- delete: "Delete",
356
- deleting: "Deleting...",
355
+ delete: "Archive",
356
+ deleting: "Archiving...",
357
357
  openFullView: "Open full view",
358
358
  removeFromWidgetArea: "Remove from this widget area",
359
- deleteExtensionEllipsis: "Delete extension...",
359
+ deleteExtensionEllipsis: "Archive extension...",
360
360
  removeFromMyListEllipsis: "Remove from my list...",
361
361
  removeFromWidgetAreaForMe: "Remove from this widget area (for me)",
362
362
  deleteEverywhereConfirmation:
363
- "This removes the extension everywhere, for everyone it's shared with.",
363
+ "This archives the extension everywhere, for everyone it's shared with.",
364
364
  addWidget: "Add widget",
365
365
  loading: "Loading...",
366
366
  noWidgetsAvailable: "No widgets available for this slot yet.",
@@ -355,24 +355,24 @@ const messages = {
355
355
  hideEveryone: "esconderse de todos",
356
356
  localFileDescription:
357
357
  "This extension is backed by {{entryPath}}. Edit or remove it from the workspace.",
358
- deleteQuestion: "Delete {{name}}?",
358
+ deleteQuestion: "¿Archivar {{name}}?",
359
359
  removeQuestion: "Remove {{name}}?",
360
360
  hideForYouDescription:
361
361
  "Esto lo oculta de su lista de Extensiones sin eliminarlo para nadie más.",
362
362
  removeEverywhereDescription:
363
- "Esto lo elimina en todos los lugares donde se comparte.",
363
+ "Esto lo archiva en todos los lugares donde se comparte.",
364
364
  cancel: "Cancelar",
365
365
  remove: "Eliminar",
366
366
  removing: "Eliminando...",
367
- delete: "Eliminar",
368
- deleting: "Eliminando...",
367
+ delete: "Archivar",
368
+ deleting: "Archivando...",
369
369
  openFullView: "Abrir vista completa",
370
370
  removeFromWidgetArea: "Eliminar de esta área de widgets",
371
- deleteExtensionEllipsis: "Eliminar extensión...",
371
+ deleteExtensionEllipsis: "Archivar extensión...",
372
372
  removeFromMyListEllipsis: "Quitar de mi lista...",
373
373
  removeFromWidgetAreaForMe: "Remove from this widget area (for me)",
374
374
  deleteEverywhereConfirmation:
375
- "Esto elimina la extensión en todas partes, para todas las personas con las que se comparte.",
375
+ "Esto archiva la extensión en todas partes, para todas las personas con las que se comparte.",
376
376
  addWidget: "Agregar widget",
377
377
  loading: "Cargando...",
378
378
  noWidgetsAvailable:
@@ -355,23 +355,23 @@ const messages = {
355
355
  hideEveryone: "Cacher de tout le monde",
356
356
  localFileDescription:
357
357
  "This extension is backed by {{entryPath}}. Edit or remove it from the workspace.",
358
- deleteQuestion: "Delete {{name}}?",
358
+ deleteQuestion: "Archiver {{name}} ?",
359
359
  removeQuestion: "Remove {{name}}?",
360
360
  hideForYouDescription:
361
361
  "Cela le masque de votre liste d'extensions sans le supprimer pour quelqu'un d'autre.",
362
- removeEverywhereDescription: "Cela le supprime partout où il est partagé.",
362
+ removeEverywhereDescription: "Cela l’archive partout où il est partagé.",
363
363
  cancel: "Annuler",
364
364
  remove: "Retirer",
365
365
  removing: "Suppression...",
366
- delete: "Supprimer",
367
- deleting: "Suppression...",
366
+ delete: "Archiver",
367
+ deleting: "Archivage...",
368
368
  openFullView: "Ouvrir la vue complète",
369
369
  removeFromWidgetArea: "Supprimer de cette zone de widget",
370
- deleteExtensionEllipsis: "Supprimer l'extension...",
370
+ deleteExtensionEllipsis: "Archiver l'extension...",
371
371
  removeFromMyListEllipsis: "Supprimer de ma liste...",
372
372
  removeFromWidgetAreaForMe: "Remove from this widget area (for me)",
373
373
  deleteEverywhereConfirmation:
374
- "Cela supprime l'extension partout, pour toutes les personnes avec lesquelles elle est partagée.",
374
+ "Cela archive l'extension partout, pour toutes les personnes avec lesquelles elle est partagée.",
375
375
  addWidget: "Ajouter un widget",
376
376
  loading: "Chargement...",
377
377
  noWidgetsAvailable:
@@ -338,24 +338,24 @@ const messages = {
338
338
  hideEveryone: "सबसे छुपाओ",
339
339
  localFileDescription:
340
340
  "This extension is backed by {{entryPath}}. Edit or remove it from the workspace.",
341
- deleteQuestion: "Delete {{name}}?",
341
+ deleteQuestion: "{{name}} को संग्रहित करें?",
342
342
  removeQuestion: "Remove {{name}}?",
343
343
  hideForYouDescription:
344
344
  "यह इसे किसी अन्य के लिए हटाए बिना आपकी एक्सटेंशन सूची से छिपा देता है।",
345
345
  removeEverywhereDescription:
346
- "यह इसे हर जगह से हटा देता है जहां इसे साझा किया गया है।",
346
+ "यह इसे साझा किए गए हर स्थान पर संग्रहित कर देता है।",
347
347
  cancel: "रद्द करें",
348
348
  remove: "हटाएं",
349
349
  removing: "हटाया जा रहा है...",
350
- delete: "हटाएं",
351
- deleting: "हटाया जा रहा है...",
350
+ delete: "संग्रहित करें",
351
+ deleting: "संग्रहित किया जा रहा है...",
352
352
  openFullView: "पूरा दृश्य खोलें",
353
353
  removeFromWidgetArea: "इस विजेट क्षेत्र से हटाएँ",
354
- deleteExtensionEllipsis: "एक्सटेंशन हटाएं...",
354
+ deleteExtensionEllipsis: "एक्सटेंशन संग्रहित करें...",
355
355
  removeFromMyListEllipsis: "मेरी सूची से हटाएं...",
356
356
  removeFromWidgetAreaForMe: "Remove from this widget area (for me)",
357
357
  deleteEverywhereConfirmation:
358
- "यह एक्सटेंशन को हर जगह से हटा देता है, उन सभी के लिए जिनके साथ इसे साझा किया गया है।",
358
+ "यह एक्सटेंशन को साझा किए गए हर स्थान पर, सभी लोगों के लिए संग्रहित कर देता है।",
359
359
  addWidget: "विजेट जोड़ें",
360
360
  loading: "लोड हो रहा है...",
361
361
  noWidgetsAvailable: "इस स्लॉट के लिए अभी तक कोई विजेट उपलब्ध नहीं है।",
@@ -344,24 +344,24 @@ const messages = {
344
344
  hideEveryone: "みんなから隠れて",
345
345
  localFileDescription:
346
346
  "This extension is backed by {{entryPath}}. Edit or remove it from the workspace.",
347
- deleteQuestion: "Delete {{name}}?",
347
+ deleteQuestion: "{{name}}をアーカイブしますか?",
348
348
  removeQuestion: "Remove {{name}}?",
349
349
  hideForYouDescription:
350
350
  "これにより、他のユーザーが削除することなく、拡張機能リストから非表示になります。",
351
351
  removeEverywhereDescription:
352
- "これにより、共有されているすべての場所で削除されます。",
352
+ "これにより、共有されているすべての場所でアーカイブされます。",
353
353
  cancel: "キャンセル",
354
354
  remove: "削除",
355
355
  removing: "削除中...",
356
- delete: "削除",
357
- deleting: "削除中...",
356
+ delete: "アーカイブ",
357
+ deleting: "アーカイブ中...",
358
358
  openFullView: "フルビューを開く",
359
359
  removeFromWidgetArea: "このウィジェット領域から削除する",
360
- deleteExtensionEllipsis: "拡張機能を削除...",
360
+ deleteExtensionEllipsis: "拡張機能をアーカイブ...",
361
361
  removeFromMyListEllipsis: "リストから削除...",
362
362
  removeFromWidgetAreaForMe: "Remove from this widget area (for me)",
363
363
  deleteEverywhereConfirmation:
364
- "これにより、共有されているすべてのユーザーの拡張機能がどこからでも削除されます。",
364
+ "これにより、共有されているすべてのユーザーの拡張機能がどこからでもアーカイブされます。",
365
365
  addWidget: "ウィジェットを追加する",
366
366
  loading: "読み込み中...",
367
367
  noWidgetsAvailable:
@@ -337,24 +337,24 @@ const messages = {
337
337
  hideEveryone: "모든 사람에게서 숨기기",
338
338
  localFileDescription:
339
339
  "This extension is backed by {{entryPath}}. Edit or remove it from the workspace.",
340
- deleteQuestion: "Delete {{name}}?",
340
+ deleteQuestion: "{{name}}을(를) 보관할까요?",
341
341
  removeQuestion: "Remove {{name}}?",
342
342
  hideForYouDescription:
343
343
  "이렇게 하면 다른 사람을 위해 삭제하지 않고 확장 프로그램 목록에서 숨겨집니다.",
344
344
  removeEverywhereDescription:
345
- "이렇게 하면 공유된 모든 위치에서 해당 항목이 제거됩니다.",
345
+ "이렇게 하면 공유된 모든 위치에서 해당 항목이 보관됩니다.",
346
346
  cancel: "취소",
347
347
  remove: "제거",
348
348
  removing: "삭제 중...",
349
- delete: "삭제",
350
- deleting: "삭제 중...",
349
+ delete: "보관",
350
+ deleting: "보관 중...",
351
351
  openFullView: "전체 보기 열기",
352
352
  removeFromWidgetArea: "이 위젯 영역에서 제거",
353
- deleteExtensionEllipsis: "확장 프로그램 삭제...",
353
+ deleteExtensionEllipsis: "확장 프로그램 보관...",
354
354
  removeFromMyListEllipsis: "내 목록에서 제거...",
355
355
  removeFromWidgetAreaForMe: "Remove from this widget area (for me)",
356
356
  deleteEverywhereConfirmation:
357
- "이렇게 하면 확장 프로그램을 공유하는 모든 사람의 모든 위치에서 확장 프로그램이 제거됩니다.",
357
+ "이렇게 하면 확장 프로그램을 공유하는 모든 사람의 모든 위치에서 확장 프로그램이 보관됩니다.",
358
358
  addWidget: "위젯 추가",
359
359
  loading: "로드 중...",
360
360
  noWidgetsAvailable: "이 슬롯에는 아직 사용할 수 있는 위젯이 없습니다.",
@@ -353,24 +353,24 @@ const messages = {
353
353
  hideEveryone: "Esconda-se de todos",
354
354
  localFileDescription:
355
355
  "This extension is backed by {{entryPath}}. Edit or remove it from the workspace.",
356
- deleteQuestion: "Delete {{name}}?",
356
+ deleteQuestion: "Arquivar {{name}}?",
357
357
  removeQuestion: "Remove {{name}}?",
358
358
  hideForYouDescription:
359
359
  "Isso o oculta da sua lista de extensões sem excluí-lo para mais ninguém.",
360
360
  removeEverywhereDescription:
361
- "Isso o remove em todos os lugares em que é compartilhado.",
361
+ "Isso o arquiva em todos os lugares em que é compartilhado.",
362
362
  cancel: "Cancelar",
363
363
  remove: "Remover",
364
364
  removing: "Removendo...",
365
- delete: "Excluir",
366
- deleting: "Excluindo...",
365
+ delete: "Arquivar",
366
+ deleting: "Arquivando...",
367
367
  openFullView: "Abrir visualização completa",
368
368
  removeFromWidgetArea: "Remover desta área de widget",
369
- deleteExtensionEllipsis: "Excluir extensão...",
369
+ deleteExtensionEllipsis: "Arquivar extensão...",
370
370
  removeFromMyListEllipsis: "Remover da minha lista...",
371
371
  removeFromWidgetAreaForMe: "Remove from this widget area (for me)",
372
372
  deleteEverywhereConfirmation:
373
- "Isso remove a extensão de todos os lugares, para todas as pessoas com quem ela é compartilhada.",
373
+ "Isso arquiva a extensão em todos os lugares, para todas as pessoas com quem ela é compartilhada.",
374
374
  addWidget: "Adicionar widget",
375
375
  loading: "Carregando...",
376
376
  noWidgetsAvailable: "Ainda não há widgets disponíveis para este slot.",
@@ -330,22 +330,22 @@ const messages = {
330
330
  hideEveryone: "向所有人隐藏",
331
331
  localFileDescription:
332
332
  "This extension is backed by {{entryPath}}. Edit or remove it from the workspace.",
333
- deleteQuestion: "Delete {{name}}?",
333
+ deleteQuestion: "要归档 {{name}} 吗?",
334
334
  removeQuestion: "Remove {{name}}?",
335
335
  hideForYouDescription:
336
336
  "这会将其从您的扩展列表中隐藏,而不会为其他任何人删除它。",
337
- removeEverywhereDescription: "这会在共享的所有地方删除它。",
337
+ removeEverywhereDescription: "这会在共享的所有地方归档它。",
338
338
  cancel: "取消",
339
339
  remove: "移除",
340
- removing: "正在删除...",
341
- delete: "删除",
342
- deleting: "正在删除...",
340
+ removing: "正在移除...",
341
+ delete: "归档",
342
+ deleting: "正在归档...",
343
343
  openFullView: "打开全视图",
344
344
  removeFromWidgetArea: "从此小部件区域中删除",
345
- deleteExtensionEllipsis: "删除扩展...",
345
+ deleteExtensionEllipsis: "归档扩展...",
346
346
  removeFromMyListEllipsis: "从我的列表中删除...",
347
347
  removeFromWidgetAreaForMe: "Remove from this widget area (for me)",
348
- deleteEverywhereConfirmation: "这会删除所有与之共享的每个人的扩展程序。",
348
+ deleteEverywhereConfirmation: "这会为所有与之共享的人归档该扩展程序。",
349
349
  addWidget: "添加小部件",
350
350
  loading: "正在加载...",
351
351
  noWidgetsAvailable: "此插槽尚无可用的小部件。",
@@ -330,22 +330,22 @@ const messages = {
330
330
  hideEveryone: "向所有人隱藏",
331
331
  localFileDescription:
332
332
  "此擴充功能由 {{entryPath}} 支援。請從工作區編輯或移除它。",
333
- deleteQuestion: "要刪除 {{name}} 嗎?",
333
+ deleteQuestion: "要封存 {{name}} 嗎?",
334
334
  removeQuestion: "要移除 {{name}} 嗎?",
335
335
  hideForYouDescription:
336
336
  "這會將其從您的擴充功能清單中隱藏,而不會為其他任何人刪除它。",
337
- removeEverywhereDescription: "這會在共用的所有地方刪除它。",
337
+ removeEverywhereDescription: "這會在共用的所有地方封存它。",
338
338
  cancel: "取消",
339
339
  remove: "移除",
340
- removing: "正在刪除...",
341
- delete: "刪除",
342
- deleting: "正在刪除...",
340
+ removing: "正在移除...",
341
+ delete: "封存",
342
+ deleting: "正在封存...",
343
343
  openFullView: "開啟全檢視",
344
344
  removeFromWidgetArea: "從此小工具區域中刪除",
345
- deleteExtensionEllipsis: "刪除擴充功能...",
345
+ deleteExtensionEllipsis: "封存擴充功能...",
346
346
  removeFromMyListEllipsis: "從我的清單中刪除...",
347
347
  removeFromWidgetAreaForMe: "從這個小工具區域移除(只套用於我)",
348
- deleteEverywhereConfirmation: "這會刪除所有與之共用的每個人的擴充功能。",
348
+ deleteEverywhereConfirmation: "這會為所有與之共用的人封存該擴充功能。",
349
349
  addWidget: "新增小工具",
350
350
  loading: "正在載入...",
351
351
  noWidgetsAvailable: "此插槽尚無可用的小工具。",
@@ -59,6 +59,12 @@ quick controls and deep links such as:
59
59
  - `/settings/usage`
60
60
  - `/settings/apps/:appId`
61
61
 
62
+ The shared Account section is the canonical profile surface at
63
+ `/settings#account`. It owns the editable display name and existing avatar
64
+ control through the authenticated `get-user-profile` and `update-user-profile`
65
+ actions. Shared workspace chrome such as `OrgSwitcher` should link to this
66
+ surface rather than creating an app-local profile page.
67
+
62
68
  When adding a new API key, OAuth grant, provider connection, model selector, app
63
69
  preference, notification preference, or usage/billing surface, register it as a
64
70
  settings tab or app settings panel first. Only add sidebar UI when it is needed
@@ -59,6 +59,12 @@ quick controls and deep links such as:
59
59
  - `/settings/usage`
60
60
  - `/settings/apps/:appId`
61
61
 
62
+ The shared Account section is the canonical profile surface at
63
+ `/settings#account`. It owns the editable display name and existing avatar
64
+ control through the authenticated `get-user-profile` and `update-user-profile`
65
+ actions. Shared workspace chrome such as `OrgSwitcher` should link to this
66
+ surface rather than creating an app-local profile page.
67
+
62
68
  When adding a new API key, OAuth grant, provider connection, model selector, app
63
69
  preference, notification preference, or usage/billing surface, register it as a
64
70
  settings tab or app settings panel first. Only add sidebar UI when it is needed
@@ -0,0 +1,16 @@
1
+ import { z } from "zod";
2
+
3
+ import { defineAction } from "../../action.js";
4
+ import type { UserProfile } from "../shared.js";
5
+ import { getUserProfile } from "../store.js";
6
+
7
+ export default defineAction({
8
+ description:
9
+ "Get the current user's profile, including the display name used across Agent-Native apps.",
10
+ schema: z.object({}),
11
+ http: { method: "GET" },
12
+ run: async (_args, ctx): Promise<UserProfile> => {
13
+ if (!ctx?.userEmail) throw new Error("Not authenticated.");
14
+ return getUserProfile(ctx.userEmail);
15
+ },
16
+ });
@@ -0,0 +1,24 @@
1
+ import { z } from "zod";
2
+
3
+ import { defineAction } from "../../action.js";
4
+ import type { UserProfile } from "../shared.js";
5
+ import { updateUserProfile } from "../store.js";
6
+
7
+ export default defineAction({
8
+ description:
9
+ "Update the current user's display name used across Agent-Native apps. Do not change the user's email address with this action.",
10
+ schema: z.object({
11
+ name: z
12
+ .string()
13
+ .trim()
14
+ .min(1)
15
+ .max(120)
16
+ .describe(
17
+ "The display name to use when referring to the signed-in user.",
18
+ ),
19
+ }),
20
+ run: async ({ name }, ctx): Promise<UserProfile> => {
21
+ if (!ctx?.userEmail) throw new Error("Not authenticated.");
22
+ return updateUserProfile(ctx.userEmail, name);
23
+ },
24
+ });
@@ -0,0 +1,5 @@
1
+ export {
2
+ normalizeUserProfileName,
3
+ USER_PROFILE_SETTING_KEY,
4
+ type UserProfile,
5
+ } from "./shared.js";
@@ -0,0 +1,14 @@
1
+ export const USER_PROFILE_SETTING_KEY = "user-profile";
2
+
3
+ export interface UserProfile {
4
+ email: string;
5
+ name: string;
6
+ }
7
+
8
+ export function normalizeUserProfileName(
9
+ value: string | null | undefined,
10
+ email: string,
11
+ ): string {
12
+ const name = value?.trim();
13
+ return name || email;
14
+ }
@@ -0,0 +1,50 @@
1
+ import {
2
+ getBetterAuthInternalAdapter,
3
+ getBetterAuthSync,
4
+ } from "../server/better-auth-instance.js";
5
+ import { getUserSetting, putUserSetting } from "../settings/user-settings.js";
6
+ import {
7
+ normalizeUserProfileName,
8
+ USER_PROFILE_SETTING_KEY,
9
+ type UserProfile,
10
+ } from "./shared.js";
11
+
12
+ async function getAuthUser(email: string) {
13
+ if (!getBetterAuthSync()) return null;
14
+ const adapter = await getBetterAuthInternalAdapter().catch(() => undefined);
15
+ if (!adapter) return null;
16
+ return adapter.findUserByEmail(email, { includeAccounts: false });
17
+ }
18
+
19
+ export async function getUserProfile(email: string): Promise<UserProfile> {
20
+ const stored = await getUserSetting(email, USER_PROFILE_SETTING_KEY);
21
+ const authUser = await getAuthUser(email);
22
+ const authName = authUser?.user.name;
23
+ const storedName = typeof stored?.name === "string" ? stored.name : null;
24
+
25
+ return {
26
+ email,
27
+ name: normalizeUserProfileName(storedName ?? authName, email),
28
+ };
29
+ }
30
+
31
+ export async function updateUserProfile(
32
+ email: string,
33
+ name: string,
34
+ ): Promise<UserProfile> {
35
+ const normalizedName = normalizeUserProfileName(name, email);
36
+ const authUser = await getAuthUser(email);
37
+ const adapter = authUser
38
+ ? await getBetterAuthInternalAdapter().catch(() => undefined)
39
+ : undefined;
40
+
41
+ if (authUser?.user.id && adapter?.updateUser) {
42
+ await adapter.updateUser(authUser.user.id, { name: normalizedName });
43
+ } else {
44
+ await putUserSetting(email, USER_PROFILE_SETTING_KEY, {
45
+ name: normalizedName,
46
+ });
47
+ }
48
+
49
+ return { email, name: normalizedName };
50
+ }
@@ -59,6 +59,12 @@ quick controls and deep links such as:
59
59
  - `/settings/usage`
60
60
  - `/settings/apps/:appId`
61
61
 
62
+ The shared Account section is the canonical profile surface at
63
+ `/settings#account`. It owns the editable display name and existing avatar
64
+ control through the authenticated `get-user-profile` and `update-user-profile`
65
+ actions. Shared workspace chrome such as `OrgSwitcher` should link to this
66
+ surface rather than creating an app-local profile page.
67
+
62
68
  When adding a new API key, OAuth grant, provider connection, model selector, app
63
69
  preference, notification preference, or usage/billing surface, register it as a
64
70
  settings tab or app settings panel first. Only add sidebar UI when it is needed
@@ -59,6 +59,12 @@ quick controls and deep links such as:
59
59
  - `/settings/usage`
60
60
  - `/settings/apps/:appId`
61
61
 
62
+ The shared Account section is the canonical profile surface at
63
+ `/settings#account`. It owns the editable display name and existing avatar
64
+ control through the authenticated `get-user-profile` and `update-user-profile`
65
+ actions. Shared workspace chrome such as `OrgSwitcher` should link to this
66
+ surface rather than creating an app-local profile page.
67
+
62
68
  When adding a new API key, OAuth grant, provider connection, model selector, app
63
69
  preference, notification preference, or usage/billing surface, register it as a
64
70
  settings tab or app settings panel first. Only add sidebar UI when it is needed
@@ -16,7 +16,7 @@ import {
16
16
  type ChatHistoryItem,
17
17
  } from "@agent-native/toolkit/chat-history";
18
18
  import {
19
- IconBrain,
19
+ IconHierarchy2,
20
20
  IconClipboardList,
21
21
  IconLayoutSidebarLeftCollapse,
22
22
  IconLayoutSidebarLeftExpand,
@@ -40,7 +40,7 @@ import { cn } from "@/lib/utils";
40
40
  const baseNavItems = [
41
41
  { icon: IconPhotoPlus, labelKey: "navigation.create", href: "/" },
42
42
  { icon: IconLayoutGrid, labelKey: "navigation.library", href: "/library" },
43
- { icon: IconBrain, labelKey: "settings.agentTitle", href: "/agent" },
43
+ { icon: IconHierarchy2, labelKey: "settings.agentTitle", href: "/agent" },
44
44
  { icon: IconSettings, labelKey: "navigation.settings", href: "/settings" },
45
45
  ];
46
46
 
@@ -53,7 +53,7 @@
53
53
  --muted-foreground: 0 0% 60%;
54
54
  --accent: 0 0% 18%;
55
55
  --accent-foreground: 0 0% 90%;
56
- --destructive: 0 63% 51%;
56
+ --destructive: 0 84% 60%;
57
57
  --destructive-foreground: 0 0% 98%;
58
58
  --border: 0 0% 24%;
59
59
  --input: 0 0% 24%;
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-22
4
+ ---
5
+
6
+ Manage agent navigation now uses the connected-nodes icon.
@@ -59,6 +59,12 @@ quick controls and deep links such as:
59
59
  - `/settings/usage`
60
60
  - `/settings/apps/:appId`
61
61
 
62
+ The shared Account section is the canonical profile surface at
63
+ `/settings#account`. It owns the editable display name and existing avatar
64
+ control through the authenticated `get-user-profile` and `update-user-profile`
65
+ actions. Shared workspace chrome such as `OrgSwitcher` should link to this
66
+ surface rather than creating an app-local profile page.
67
+
62
68
  When adding a new API key, OAuth grant, provider connection, model selector, app
63
69
  preference, notification preference, or usage/billing surface, register it as a
64
70
  settings tab or app settings panel first. Only add sidebar UI when it is needed
@@ -22,7 +22,7 @@
22
22
  --muted-foreground: 0 0% 45%;
23
23
  --accent: 0 0% 95%;
24
24
  --accent-foreground: 0 0% 15%;
25
- --destructive: 0 70% 48%;
25
+ --destructive: 0 84% 60%;
26
26
  --destructive-foreground: 0 0% 98%;
27
27
  --border: 0 0% 90%;
28
28
  --input: 0 0% 90%;
@@ -53,7 +53,7 @@
53
53
  --muted-foreground: 0 0% 60%;
54
54
  --accent: 0 0% 18%;
55
55
  --accent-foreground: 0 0% 90%;
56
- --destructive: 0 62% 48%;
56
+ --destructive: 0 84% 60%;
57
57
  --destructive-foreground: 0 0% 98%;
58
58
  --border: 0 0% 24%;
59
59
  --input: 0 0% 24%;
@@ -1,6 +1,6 @@
1
1
  import type { Icon } from "@tabler/icons-react";
2
2
  import {
3
- IconBrain,
3
+ IconHierarchy2,
4
4
  IconBook2,
5
5
  IconChecks,
6
6
  IconDatabase,
@@ -1011,7 +1011,7 @@ export const navItems: Array<{
1011
1011
  view: "agent",
1012
1012
  label: "Manage agent",
1013
1013
  href: "/agent",
1014
- icon: IconBrain,
1014
+ icon: IconHierarchy2,
1015
1015
  },
1016
1016
  ];
1017
1017