@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
@@ -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
 
@@ -11,7 +11,7 @@ import {
11
11
  useCommandMenuShortcut,
12
12
  } from "@agent-native/core/client/navigation";
13
13
  import { getThemeInitScript } from "@agent-native/core/client/ui";
14
- import { IconBrain, IconMoon, IconSun } from "@tabler/icons-react";
14
+ import { IconHierarchy2, IconMoon, IconSun } from "@tabler/icons-react";
15
15
  import { useQueryClient } from "@tanstack/react-query";
16
16
  import { useTheme } from "next-themes";
17
17
  import { useCallback, useState } from "react";
@@ -196,7 +196,7 @@ function AppContent() {
196
196
  "access",
197
197
  ]}
198
198
  >
199
- <IconBrain size={16} />
199
+ <IconHierarchy2 size={16} />
200
200
  {t("settings.openAgentSettings")}
201
201
  </CommandMenu.Item>
202
202
  </CommandMenu.Group>
@@ -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
@@ -5,7 +5,7 @@ import { useT } from "@agent-native/core/client/i18n";
5
5
  import { OrgSwitcher } from "@agent-native/core/client/org";
6
6
  import { FeedbackButton } from "@agent-native/core/client/ui";
7
7
  import {
8
- IconBrain,
8
+ IconHierarchy2,
9
9
  IconCalendar,
10
10
  IconSettings,
11
11
  IconLink,
@@ -96,7 +96,11 @@ const navItems = [
96
96
  labelKey: "navigation.bookingLinks",
97
97
  icon: IconLink,
98
98
  },
99
- { path: "/agent", labelKey: "settings.agentTitle", icon: IconBrain },
99
+ {
100
+ path: "/agent",
101
+ labelKey: "settings.agentTitle",
102
+ icon: IconHierarchy2,
103
+ },
100
104
  { path: "/settings", labelKey: "navigation.settings", icon: IconSettings },
101
105
  ];
102
106
 
@@ -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%;
@@ -21,7 +21,7 @@ import {
21
21
  getThemeInitScript,
22
22
  } from "@agent-native/core/client/ui";
23
23
  import { resolveLocaleFromRequest } from "@agent-native/core/server";
24
- import { IconBrain, IconSun, IconMoon } from "@tabler/icons-react";
24
+ import { IconHierarchy2, IconSun, IconMoon } from "@tabler/icons-react";
25
25
  import { useQueryClient } from "@tanstack/react-query";
26
26
  import { useTheme } from "next-themes";
27
27
  import { useCallback, useEffect, useState } from "react";
@@ -233,7 +233,7 @@ function AppContent() {
233
233
  "access",
234
234
  ]}
235
235
  >
236
- <IconBrain size={16} />
236
+ <IconHierarchy2 size={16} />
237
237
  {t("settings.openAgentSettings")}
238
238
  </CommandMenu.Item>
239
239
  </CommandMenu.Group>
@@ -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
@@ -13,7 +13,7 @@ import {
13
13
  type ChatHistoryItem,
14
14
  } from "@agent-native/toolkit/chat-history";
15
15
  import {
16
- IconBrain,
16
+ IconHierarchy2,
17
17
  IconLayoutSidebarLeftCollapse,
18
18
  IconLayoutSidebarLeftExpand,
19
19
  IconMessageCircle,
@@ -39,7 +39,7 @@ const navItems = [
39
39
  view: "chat",
40
40
  },
41
41
  {
42
- icon: IconBrain,
42
+ icon: IconHierarchy2,
43
43
  labelKey: "settings.agentTitle",
44
44
  href: "/agent",
45
45
  view: "agent",
@@ -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%;
@@ -11,7 +11,7 @@ import {
11
11
  useCommandMenuShortcut,
12
12
  } from "@agent-native/core/client/navigation";
13
13
  import { getThemeInitScript } from "@agent-native/core/client/ui";
14
- import { IconBrain, IconSun, IconMoon } from "@tabler/icons-react";
14
+ import { IconHierarchy2, IconSun, IconMoon } from "@tabler/icons-react";
15
15
  import { useQueryClient } from "@tanstack/react-query";
16
16
  import { useTheme } from "next-themes";
17
17
  import { useCallback, useState } from "react";
@@ -143,7 +143,7 @@ function AppContent() {
143
143
  "access",
144
144
  ]}
145
145
  >
146
- <IconBrain size={16} />
146
+ <IconHierarchy2 size={16} />
147
147
  {t("settings.openAgentSettings")}
148
148
  </CommandMenu.Item>
149
149
  </CommandMenu.Group>
@@ -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
@@ -627,7 +627,7 @@ export default defineAction({
627
627
  await persistRetryableBrainExportFailure(
628
628
  result.recordingId,
629
629
  result.reason,
630
- 0,
630
+ args.retryAttempt ?? 1,
631
631
  );
632
632
  return result;
633
633
  }
@@ -125,6 +125,7 @@ export default defineAction({
125
125
 
126
126
  const appName = getAppName();
127
127
  const { html, text } = renderEmail({
128
+ brandName: appName,
128
129
  preheader: `${inviter} invited you to ${orgName} on ${appName}.`,
129
130
  heading: `You're invited to join ${orgName}`,
130
131
  paragraphs: [
@@ -29,7 +29,7 @@ import {
29
29
  IconLayoutSidebarLeftExpand,
30
30
  IconPlus,
31
31
  IconShare,
32
- IconBrain,
32
+ IconHierarchy2,
33
33
  IconSettings,
34
34
  } from "@tabler/icons-react";
35
35
  import { ReactNode, useEffect, useMemo, useState } from "react";
@@ -244,7 +244,7 @@ export function LibraryLayout({ children }: LibraryLayoutProps) {
244
244
  {
245
245
  to: "/agent",
246
246
  label: t("navigation.agent"),
247
- icon: IconBrain,
247
+ icon: IconHierarchy2,
248
248
  match: (p) => p.startsWith("/agent"),
249
249
  },
250
250
  {
@@ -513,6 +513,7 @@ export class RecorderEngine {
513
513
  private pausedAccumMs = 0;
514
514
  private pausedStartedMs: number | null = null;
515
515
  private uploadFailure: Error | null = null;
516
+ private uploadFailureStopStarted = false;
516
517
  /**
517
518
  * Local mirror of every recorder chunk, in record order. We upload after stop
518
519
  * so the server never stores the uncompressed source before compression has a
@@ -774,17 +775,6 @@ export class RecorderEngine {
774
775
  return this.previewStream;
775
776
  }
776
777
 
777
- /**
778
- * The composited screen+camera canvas stream that actually gets recorded
779
- * (screen with the camera bubble drawn in), or `null` for screen-only /
780
- * camera-only modes where the visible preview already matches the recording.
781
- * Used to grab a thumbnail that includes the presenter's camera — the raw
782
- * preview stream in screen+camera mode is screen-only and has no face.
783
- */
784
- getCompositeStream(): MediaStream | null {
785
- return this.cameraComposite?.stream ?? null;
786
- }
787
-
788
778
  getElapsedMs(): number {
789
779
  if (this.startedAtMs === null) return 0;
790
780
  const now = performance.now();
@@ -1182,6 +1172,7 @@ export class RecorderEngine {
1182
1172
 
1183
1173
  this.chunkIndex = 0;
1184
1174
  this.uploadFailure = null;
1175
+ this.uploadFailureStopStarted = false;
1185
1176
  this.localChunks = [];
1186
1177
  this.totalRecordedBytes = 0;
1187
1178
  this.lastFinalizeMeta = null;
@@ -1927,11 +1918,29 @@ export class RecorderEngine {
1927
1918
  // User-initiated cancel — cancel() already runs the abortUrl path.
1928
1919
  if (failure.name === "AbortError") return;
1929
1920
  this.rememberUploadFailure(failure);
1921
+ this.stopAfterUploadFailure();
1930
1922
  this.emitError(failure);
1931
1923
  }
1932
1924
  });
1933
1925
  }
1934
1926
 
1927
+ private stopAfterUploadFailure(): void {
1928
+ if (
1929
+ this.uploadFailureStopStarted ||
1930
+ !this.recorder ||
1931
+ this.state === "stopping" ||
1932
+ this.state === "error"
1933
+ ) {
1934
+ return;
1935
+ }
1936
+ this.uploadFailureStopStarted = true;
1937
+ void this.stop().catch((err) => {
1938
+ if (err !== this.uploadFailure && (err as Error)?.name !== "AbortError") {
1939
+ console.warn("[recorder] failed to stop after upload error:", err);
1940
+ }
1941
+ });
1942
+ }
1943
+
1935
1944
  private rememberUploadFailure(err: Error): void {
1936
1945
  if (!this.uploadFailure) {
1937
1946
  this.uploadFailure = err;
@@ -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%;
@@ -19,7 +19,12 @@ import {
19
19
  } from "@agent-native/core/client/navigation";
20
20
  import { getThemeInitScript } from "@agent-native/core/client/ui";
21
21
  import { resolveLocaleFromRequest } from "@agent-native/core/server";
22
- import { IconBrain, IconCheck, IconSun, IconMoon } from "@tabler/icons-react";
22
+ import {
23
+ IconHierarchy2,
24
+ IconCheck,
25
+ IconSun,
26
+ IconMoon,
27
+ } from "@tabler/icons-react";
23
28
  import { useQueryClient } from "@tanstack/react-query";
24
29
  import { useTheme } from "next-themes";
25
30
  import { useCallback, useEffect, useState } from "react";
@@ -365,7 +370,7 @@ function AppContent() {
365
370
  >
366
371
  <CommandMenu.Group heading={t("root.commandActions")}>
367
372
  <CommandMenu.Item onSelect={() => navigate("/agent")}>
368
- <IconBrain size={16} />
373
+ <IconHierarchy2 size={16} />
369
374
  {t("root.openAgent")}
370
375
  </CommandMenu.Item>
371
376
  <CommandMenu.Item onSelect={() => {}}>
@@ -70,10 +70,6 @@ import {
70
70
  decideRecordingVisibilityAction,
71
71
  isMobileRecorderRuntime,
72
72
  } from "@/lib/recording-visibility";
73
- import {
74
- captureVideoThumbnailBlob,
75
- uploadRecordingThumbnail,
76
- } from "@/lib/thumbnail-capture";
77
73
  import { cn } from "@/lib/utils";
78
74
 
79
75
  // Client-side app-state writer (the server module pulls in Node's `events`
@@ -535,76 +531,6 @@ function userFacingActionErrorMessage(error: string): string {
535
531
  return error.replace(/^Action [a-z0-9-]+ failed:\s*/i, "").trim() || error;
536
532
  }
537
533
 
538
- function captureThumbnailFromPreview(
539
- video: HTMLVideoElement | null,
540
- recordingId: string,
541
- ): void {
542
- void captureVideoThumbnailBlob(video)
543
- .then((blob) => (blob ? uploadRecordingThumbnail(recordingId, blob) : null))
544
- .catch(() => {
545
- // best effort — the player has a backfill path if this misses.
546
- });
547
- }
548
-
549
- /** Resolve once the off-screen video has a decoded frame, or after a timeout. */
550
- function waitForVideoFrame(
551
- video: HTMLVideoElement,
552
- timeoutMs: number,
553
- ): Promise<void> {
554
- if (video.videoWidth > 0 && video.readyState >= 2) return Promise.resolve();
555
- return new Promise((resolve) => {
556
- let settled = false;
557
- const finish = () => {
558
- if (settled) return;
559
- settled = true;
560
- video.removeEventListener("loadeddata", onReady);
561
- video.removeEventListener("canplay", onReady);
562
- clearTimeout(timer);
563
- resolve();
564
- };
565
- const onReady = () => {
566
- if (video.videoWidth > 0 && video.readyState >= 2) finish();
567
- };
568
- video.addEventListener("loadeddata", onReady);
569
- video.addEventListener("canplay", onReady);
570
- const timer = setTimeout(finish, timeoutMs);
571
- onReady();
572
- });
573
- }
574
-
575
- /**
576
- * Capture a thumbnail from a MediaStream that isn't bound to a visible element
577
- * — used for the screen+camera composite so the thumbnail includes the camera
578
- * bubble. Best effort: if it misses, the player's backfill path (which reads
579
- * the recorded file, also composited) still produces a face thumbnail.
580
- */
581
- function captureThumbnailFromStream(
582
- stream: MediaStream,
583
- recordingId: string,
584
- ): void {
585
- const video = document.createElement("video");
586
- video.srcObject = stream;
587
- video.muted = true;
588
- video.playsInline = true;
589
- void (async () => {
590
- try {
591
- await video.play().catch(() => {});
592
- await waitForVideoFrame(video, 1500);
593
- const blob = await captureVideoThumbnailBlob(video);
594
- if (blob) await uploadRecordingThumbnail(recordingId, blob);
595
- } catch {
596
- // best effort — the player has a backfill path if this misses.
597
- } finally {
598
- try {
599
- video.pause();
600
- } catch {
601
- // ignore
602
- }
603
- video.srcObject = null;
604
- }
605
- })();
606
- }
607
-
608
534
  interface PendingRecording {
609
535
  id: string;
610
536
  uploadChunkUrl: string;
@@ -1159,8 +1085,8 @@ export default function RecordRoute() {
1159
1085
  }).catch(() => {});
1160
1086
  },
1161
1087
  // When the user clicks the browser's native "Stop sharing" button,
1162
- // delegate to doStop() so the UI runs its full stop flow: thumbnail
1163
- // capture, transcription flush, state updates, and navigation.
1088
+ // delegate to doStop() so the UI runs its full stop flow:
1089
+ // transcription flush, state updates, and navigation.
1164
1090
  // Using a ref so we always call the latest version of doStop even
1165
1091
  // though startFlow itself has empty deps.
1166
1092
  onDisplayTrackEnded: () => {
@@ -2079,18 +2005,6 @@ export default function RecordRoute() {
2079
2005
  }
2080
2006
  setUiState("uploading");
2081
2007
  try {
2082
- // Capture a still-frame thumbnail while the stream is still live —
2083
- // otherwise the library would show a blank card until the owner opens the
2084
- // recording and triggers the player's backfill path. In screen+camera
2085
- // mode the visible preview is screen-only, so grab the composited stream
2086
- // (screen + camera bubble) to keep the presenter's face in the thumbnail.
2087
- const compositeStream = engine.getCompositeStream();
2088
- if (compositeStream) {
2089
- captureThumbnailFromStream(compositeStream, pending.id);
2090
- } else {
2091
- captureThumbnailFromPreview(previewVideoRef.current, pending.id);
2092
- }
2093
-
2094
2008
  // Stop live transcription and save the native web transcript before the
2095
2009
  // engine finalizes. This gives the recording an instant transcript
2096
2010
  // (from Web Speech API) with no API key required.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-22
4
+ ---
5
+
6
+ Builder-connected recordings now start their resumable upload session reliably.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-22
4
+ ---
5
+
6
+ Clip thumbnails now come from the recording instead of the post-stop screen
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-22
4
+ ---
5
+
6
+ Clips emails now render the Agent-Native logo in Gmail and other clients.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-22
4
+ ---
5
+
6
+ Dismissed Zoom and Teams meeting-note prompts now stay dismissed when you switch windows.
@@ -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.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-22
4
+ ---
5
+
6
+ Permissions and Rewind now use quieter expandable rows with clearer setup guidance.