@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
@@ -2,6 +2,8 @@ import {
2
2
  IconAlertTriangle,
3
3
  IconArrowLeft,
4
4
  IconCalendarEvent,
5
+ IconChevronDown,
6
+ IconChevronRight,
5
7
  IconCircleCheck,
6
8
  IconCopy,
7
9
  IconDownload,
@@ -345,6 +347,8 @@ const CAM_ON_KEY = "clips:camera-on";
345
347
  const MIC_ON_KEY = "clips:mic-on";
346
348
  const SYSTEM_AUDIO_KEY = "clips:system-audio";
347
349
  const READINESS_REVIEWED_KEY = "clips:readiness-reviewed";
350
+ const REWIND_DOCS_URL =
351
+ "https://www.agent-native.com/docs/template-clips#agent-readable-clips";
348
352
 
349
353
  // Sensible defaults so the user never has to type a URL on first launch.
350
354
  // Dev builds point at the local dev server; production builds point at the
@@ -936,6 +940,7 @@ export function App() {
936
940
  const [readinessOpen, setReadinessOpen] = useState<boolean>(
937
941
  () => !loadBool(READINESS_REVIEWED_KEY, false),
938
942
  );
943
+ const [rewindHomeOpen, setRewindHomeOpen] = useState(false);
939
944
  const [recorder, setRecorder] = useState<RecorderHandle | null>(null);
940
945
  const [recError, setRecError] = useState<string | null>(null);
941
946
  const [cameraError, setCameraError] = useState<string | null>(null);
@@ -969,6 +974,9 @@ export function App() {
969
974
  config: featureConfig?.screenMemory ?? DEFAULT_SCREEN_MEMORY_CONFIG,
970
975
  clipRecordingActive: isRecording || recordingFlowActive,
971
976
  });
977
+ const homeRewindOn =
978
+ featureConfig?.screenMemory?.enabled === true &&
979
+ featureConfig.screenMemory.paused !== true;
972
980
  const refreshHomeScreenMemoryStatus = useCallback(() => {
973
981
  const version = ++homeScreenMemoryRefreshVersionRef.current;
974
982
  invoke<ScreenMemoryStatus>("screen_memory_status")
@@ -2551,6 +2559,12 @@ export function App() {
2551
2559
  });
2552
2560
  }
2553
2561
 
2562
+ function openRewindDocs() {
2563
+ openExternal(REWIND_DOCS_URL).catch((err) => {
2564
+ console.error("[clips-tray] open Rewind docs failed:", err);
2565
+ });
2566
+ }
2567
+
2554
2568
  async function retryPendingUpload(upload: PendingDesktopUpload) {
2555
2569
  if (retryingUploadId || exportingUploadId || dismissingUploadId) return;
2556
2570
  const targetServerUrl = serverUrlForPendingUpload(upload, serverUrl);
@@ -3679,59 +3693,79 @@ export function App() {
3679
3693
  onOpenPermission={openPrivacySettings}
3680
3694
  />
3681
3695
 
3682
- <section className="rewind-home-card" aria-label="Rewind status">
3683
- <div className="rewind-home-status">
3684
- <span
3685
- className={`rewind-home-dot ${homeRewindPresentation.isLive ? "is-live" : ""}`}
3686
- />
3687
- <div>
3688
- <strong>{homeRewindPresentation.title}</strong>
3689
- {!homeRewindPresentation.isLive ||
3690
- homeRewindPresentation.hasError ? (
3691
- <p>{homeRewindPresentation.detail}</p>
3692
- ) : null}
3693
- </div>
3694
- <div className="rewind-home-controls">
3695
- <button
3696
- type="button"
3697
- className="rewind-agent-prompt-copy"
3698
- onClick={() => void copyRewindAgentPrompt()}
3699
- aria-label={
3700
- rewindAgentPromptCopied
3701
- ? "Setup prompt copied — paste it into your agent once"
3702
- : "Set up your agent"
3703
- }
3704
- title={
3705
- rewindAgentPromptCopied
3706
- ? "Setup prompt copied — paste it into your agent once"
3707
- : "Set up your agent"
3708
- }
3709
- >
3710
- {rewindAgentPromptCopied ? (
3711
- <IconCircleCheck size={15} stroke={2} />
3712
- ) : (
3713
- <IconCopy size={15} stroke={1.9} />
3714
- )}
3715
- </button>
3716
- <Switch
3717
- on={
3718
- featureConfig?.screenMemory?.enabled === true &&
3719
- featureConfig.screenMemory.paused !== true
3720
- }
3721
- disabled={
3722
- homeScreenMemoryBusy || isRecording || recordingFlowActive
3723
- }
3724
- onChange={(remembering) =>
3725
- void setHomeRewindRemembering(remembering)
3726
- }
3727
- label={
3728
- featureConfig?.screenMemory?.enabled === true
3729
- ? "Remember with Rewind"
3730
- : "Set up Rewind"
3731
- }
3732
- />
3696
+ <section className="rewind-home-card" aria-label="Rewind">
3697
+ <button
3698
+ type="button"
3699
+ className="rewind-home-summary"
3700
+ aria-expanded={rewindHomeOpen}
3701
+ onClick={() => setRewindHomeOpen((open) => !open)}
3702
+ >
3703
+ <span className="rewind-home-title">Rewind</span>
3704
+ <span className="rewind-home-state">
3705
+ {homeRewindOn ? "On" : "Off"}
3706
+ {rewindHomeOpen ? (
3707
+ <IconChevronDown size={13} stroke={2} />
3708
+ ) : (
3709
+ <IconChevronRight size={13} stroke={2} />
3710
+ )}
3711
+ </span>
3712
+ </button>
3713
+ {rewindHomeOpen ? (
3714
+ <div className="rewind-home-details">
3715
+ <p>{homeRewindPresentation.detail}</p>
3716
+ <div className="rewind-home-detail-actions">
3717
+ <div className="rewind-home-controls">
3718
+ <Tooltip>
3719
+ <TooltipTrigger asChild>
3720
+ <button
3721
+ type="button"
3722
+ className="rewind-agent-prompt-copy"
3723
+ onClick={() => void copyRewindAgentPrompt()}
3724
+ aria-label={
3725
+ rewindAgentPromptCopied
3726
+ ? "Setup prompt copied — paste it into your agent once"
3727
+ : "Copy setup prompt for your agent"
3728
+ }
3729
+ >
3730
+ {rewindAgentPromptCopied ? (
3731
+ <IconCircleCheck size={15} stroke={2} />
3732
+ ) : (
3733
+ <IconCopy size={15} stroke={1.9} />
3734
+ )}
3735
+ </button>
3736
+ </TooltipTrigger>
3737
+ <TooltipContent>
3738
+ {rewindAgentPromptCopied
3739
+ ? "Setup prompt copied"
3740
+ : "Copy setup prompt for your agent"}
3741
+ </TooltipContent>
3742
+ </Tooltip>
3743
+ <Switch
3744
+ on={homeRewindOn}
3745
+ disabled={
3746
+ homeScreenMemoryBusy || isRecording || recordingFlowActive
3747
+ }
3748
+ onChange={(remembering) =>
3749
+ void setHomeRewindRemembering(remembering)
3750
+ }
3751
+ label={
3752
+ featureConfig?.screenMemory?.enabled === true
3753
+ ? "Remember with Rewind"
3754
+ : "Set up Rewind"
3755
+ }
3756
+ />
3757
+ </div>
3758
+ <button
3759
+ type="button"
3760
+ className="rewind-docs-link"
3761
+ onClick={openRewindDocs}
3762
+ >
3763
+ Learn about Rewind
3764
+ <IconExternalLink size={13} stroke={1.9} />
3765
+ </button>
3766
+ </div>
3733
3767
  </div>
3734
- </div>
3768
+ ) : null}
3735
3769
  </section>
3736
3770
 
3737
3771
  {!isRecording ? (
@@ -0,0 +1,31 @@
1
+ import { invoke } from "@tauri-apps/api/core";
2
+
3
+ export interface DismissibleMeetingNotification {
4
+ type: "calendar" | "adhoc";
5
+ meetingId: string;
6
+ platform?: string | null;
7
+ scheduledStart?: string | null;
8
+ scheduledEnd?: string | null;
9
+ }
10
+
11
+ type NativeInvoke = (
12
+ command: string,
13
+ args: Record<string, unknown>,
14
+ ) => Promise<unknown>;
15
+
16
+ export async function dismissMeetingNotification(
17
+ notification: DismissibleMeetingNotification,
18
+ nativeInvoke: NativeInvoke = invoke,
19
+ ): Promise<void> {
20
+ try {
21
+ await nativeInvoke("dismiss_meeting_notification", {
22
+ meetingId: notification.meetingId,
23
+ notificationType: notification.type,
24
+ platform: notification.platform ?? null,
25
+ scheduledStart: notification.scheduledStart ?? null,
26
+ scheduledEnd: notification.scheduledEnd ?? null,
27
+ });
28
+ } catch (error) {
29
+ console.warn("[clips-meeting-notif] dismissal sync failed", error);
30
+ }
31
+ }
@@ -114,7 +114,6 @@ const LIVE_UPLOAD_CHUNK_MS = 2_000;
114
114
  const NATIVE_FULLSCREEN_SEGMENT_MS = 5 * 60_000;
115
115
  const NATIVE_FULLSCREEN_MIME_TYPE = "video/mp4";
116
116
  const MEDIA_RECORDER_STOP_TIMEOUT_MS = 15_000;
117
- const THUMBNAIL_UPLOAD_TIMEOUT_MS = 8_000;
118
117
  // GCS resumable uploads require every non-final chunk to be a multiple of
119
118
  // 256 KiB. MediaRecorder emits arbitrary blob sizes, so on the streaming path
120
119
  // we buffer raw blobs and only PUT aligned slices; the unaligned remainder is
@@ -1462,146 +1461,6 @@ async function saveRecordingTranscriptFailure(
1462
1461
  }
1463
1462
  }
1464
1463
 
1465
- const THUMBNAIL_PROBE_WIDTH = 40;
1466
- const THUMBNAIL_MIN_MEAN_LUMA = 8;
1467
- const THUMBNAIL_MIN_MAX_LUMA = 28;
1468
- const THUMBNAIL_MIN_VISIBLE_PIXEL_RATIO = 0.005;
1469
-
1470
- function canvasHasVisibleContent(canvas: HTMLCanvasElement): boolean {
1471
- if (!canvas.width || !canvas.height) return false;
1472
-
1473
- const width = THUMBNAIL_PROBE_WIDTH;
1474
- const height = Math.max(
1475
- 1,
1476
- Math.round((canvas.height / canvas.width) * width),
1477
- );
1478
- const probe = document.createElement("canvas");
1479
- probe.width = width;
1480
- probe.height = height;
1481
-
1482
- const ctx = probe.getContext("2d", { willReadFrequently: true });
1483
- if (!ctx) return true;
1484
-
1485
- try {
1486
- ctx.drawImage(canvas, 0, 0, width, height);
1487
- const data = ctx.getImageData(0, 0, width, height).data;
1488
- let totalLuma = 0;
1489
- let maxLuma = 0;
1490
- let visiblePixels = 0;
1491
- const pixels = data.length / 4;
1492
-
1493
- for (let i = 0; i < data.length; i += 4) {
1494
- const alpha = data[i + 3] / 255;
1495
- const luma =
1496
- (0.2126 * data[i] + 0.7152 * data[i + 1] + 0.0722 * data[i + 2]) *
1497
- alpha;
1498
- totalLuma += luma;
1499
- maxLuma = Math.max(maxLuma, luma);
1500
- if (luma >= THUMBNAIL_MIN_MAX_LUMA) visiblePixels++;
1501
- }
1502
-
1503
- const meanLuma = totalLuma / Math.max(1, pixels);
1504
- const visibleRatio = visiblePixels / Math.max(1, pixels);
1505
- return (
1506
- meanLuma >= THUMBNAIL_MIN_MEAN_LUMA ||
1507
- (maxLuma >= THUMBNAIL_MIN_MAX_LUMA &&
1508
- visibleRatio >= THUMBNAIL_MIN_VISIBLE_PIXEL_RATIO)
1509
- );
1510
- } catch {
1511
- return true;
1512
- }
1513
- }
1514
-
1515
- async function waitForVideoDimensions(
1516
- video: HTMLVideoElement,
1517
- timeoutMs = 1600,
1518
- ): Promise<boolean> {
1519
- const startedAt = Date.now();
1520
- while (Date.now() - startedAt < timeoutMs) {
1521
- if (video.videoWidth > 0 && video.videoHeight > 0) return true;
1522
- await new Promise((resolve) => window.setTimeout(resolve, 80));
1523
- }
1524
- return video.videoWidth > 0 && video.videoHeight > 0;
1525
- }
1526
-
1527
- async function captureStreamThumbnailBlob(
1528
- stream: MediaStream | null,
1529
- ): Promise<Blob | null> {
1530
- if (!stream?.getVideoTracks().some((track) => track.readyState === "live")) {
1531
- return null;
1532
- }
1533
-
1534
- const video = document.createElement("video");
1535
- video.muted = true;
1536
- video.playsInline = true;
1537
- video.autoplay = true;
1538
- video.srcObject = stream;
1539
- video.style.position = "fixed";
1540
- video.style.left = "-10000px";
1541
- video.style.top = "0";
1542
- video.style.width = "1px";
1543
- video.style.height = "1px";
1544
- video.style.opacity = "0";
1545
-
1546
- try {
1547
- document.body.appendChild(video);
1548
- await video.play().catch(() => {});
1549
- if (!(await waitForVideoDimensions(video))) return null;
1550
-
1551
- const canvas = document.createElement("canvas");
1552
- canvas.width = video.videoWidth;
1553
- canvas.height = video.videoHeight;
1554
- const ctx = canvas.getContext("2d");
1555
- if (!ctx) return null;
1556
-
1557
- ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
1558
- if (!canvasHasVisibleContent(canvas)) return null;
1559
-
1560
- return await new Promise<Blob | null>((resolve) => {
1561
- canvas.toBlob((blob) => resolve(blob), "image/jpeg", 0.85);
1562
- });
1563
- } finally {
1564
- video.pause();
1565
- video.srcObject = null;
1566
- video.remove();
1567
- }
1568
- }
1569
-
1570
- async function captureAndUploadRecordingThumbnail(params: {
1571
- serverUrl: string;
1572
- recordingId: string;
1573
- stream: MediaStream | null;
1574
- authToken?: string;
1575
- }): Promise<void> {
1576
- const blob = await captureStreamThumbnailBlob(params.stream);
1577
- if (!blob) {
1578
- console.warn("[clips-recorder] no visible thumbnail frame captured");
1579
- return;
1580
- }
1581
-
1582
- const url = `${params.serverUrl.replace(
1583
- /\/+$/,
1584
- "",
1585
- )}/api/recordings/${params.recordingId}/thumbnail`;
1586
- const res = await fetch(url, {
1587
- method: "POST",
1588
- headers: buildRetryHeaders(blob.type || "image/jpeg", params.authToken),
1589
- credentials: "include",
1590
- body: blob,
1591
- signal: AbortSignal.timeout(THUMBNAIL_UPLOAD_TIMEOUT_MS),
1592
- });
1593
- if (!res.ok) {
1594
- const body = await res.text().catch(() => "");
1595
- throw new Error(
1596
- `Thumbnail upload failed (${res.status}): ${body.slice(0, 200)}`,
1597
- );
1598
- }
1599
- console.log("[clips-recorder] thumbnail uploaded", {
1600
- recordingId: params.recordingId,
1601
- bytes: blob.size,
1602
- });
1603
- }
1604
-
1605
1464
  /**
1606
1465
  * Counter of in-flight chunk POSTs. The bubble frame pump reads
1607
1466
  * `window.clipsChunkBusy` and SKIPS frame encoding while it's truthy,
@@ -3120,18 +2979,8 @@ async function startNativeFullscreenRecording(
3120
2979
  err,
3121
2980
  ),
3122
2981
  );
3123
- await invoke("native_fullscreen_capture_thumbnail", {
3124
- serverUrl: params.serverUrl,
3125
- recordingId: id,
3126
- authToken: params.authToken ?? "",
3127
- cookie: params.cookie ?? "",
3128
- }).catch((err) => {
3129
- console.warn(
3130
- "[clips-recorder] native thumbnail capture/upload failed:",
3131
- err,
3132
- );
3133
- });
3134
-
2982
+ // The owner player captures the poster from decoded recording media.
2983
+ // Never screen-capture this post-stop window: it may show upload UI.
3135
2984
  try {
3136
2985
  uploadResult = await uploadPromise;
3137
2986
  } catch (err) {
@@ -4294,8 +4143,8 @@ async function startRecordingInner(
4294
4143
  stopped = true;
4295
4144
  // Stamped right after the recorder fully stops below (see stoppedAt).
4296
4145
  // Duration must measure recorded content — through the final flushed
4297
- // chunk — but NOT the transcript-finalize + thumbnail + upload awaits that
4298
- // follow, which add ~seconds and would overstate the saved duration.
4146
+ // chunk — but NOT the transcript-finalize + upload awaits that follow,
4147
+ // which add ~seconds and would overstate the saved duration.
4299
4148
  let stoppedAt = 0;
4300
4149
  const viewUrl = `/r/${id}`;
4301
4150
  const absoluteViewUrl = `${params.serverUrl.replace(/\/+$/, "")}${viewUrl}`;
@@ -4412,18 +4261,6 @@ async function startRecordingInner(
4412
4261
  }
4413
4262
 
4414
4263
  if (!recorderStopTimedOut) {
4415
- void captureAndUploadRecordingThumbnail({
4416
- serverUrl: params.serverUrl,
4417
- recordingId: id,
4418
- stream: primaryVideo,
4419
- authToken: params.authToken,
4420
- }).catch((err) => {
4421
- console.warn(
4422
- "[clips-recorder] thumbnail capture/upload failed:",
4423
- err,
4424
- );
4425
- });
4426
-
4427
4264
  const capturedTranscript = await transcriptionCapture
4428
4265
  ?.stop()
4429
4266
  .catch((err) => {
@@ -11,6 +11,7 @@ import { emit, listen } from "@tauri-apps/api/event";
11
11
  import { getCurrentWindow } from "@tauri-apps/api/window";
12
12
  import { useEffect, useRef, useState } from "react";
13
13
 
14
+ import { dismissMeetingNotification } from "../lib/meeting-notification-dismissal";
14
15
  import {
15
16
  detectMeetingJoinProvider,
16
17
  joinProviderLabel,
@@ -308,6 +309,14 @@ export function MeetingNotification() {
308
309
  dataRef.current = null;
309
310
  }
310
311
 
312
+ function dismissNotification() {
313
+ const current = dataRef.current;
314
+ hideNotification();
315
+ if (current) {
316
+ void dismissMeetingNotification(current);
317
+ }
318
+ }
319
+
311
320
  async function takeNotes() {
312
321
  if (!data || pending) return;
313
322
  setPending(true);
@@ -447,7 +456,7 @@ export function MeetingNotification() {
447
456
  {showClose ? (
448
457
  <button
449
458
  className="meeting-notification-close"
450
- onClick={hideNotification}
459
+ onClick={dismissNotification}
451
460
  aria-label="Dismiss"
452
461
  data-no-drag
453
462
  >
@@ -889,19 +889,16 @@ body[data-clips-route="recording-pill"] #root {
889
889
  /* ------------------------------------------------------------------------- */
890
890
 
891
891
  .readiness {
892
- border: 1px solid var(--border);
893
- border-radius: var(--radius);
894
- background: var(--surface);
892
+ border: none;
893
+ border-radius: 0;
894
+ background: transparent;
895
895
  overflow: hidden;
896
896
  flex-shrink: 0;
897
- transition:
898
- border-color 120ms,
899
- background 120ms;
900
897
  }
901
898
 
902
899
  .readiness-open {
903
- border-color: var(--border-strong);
904
- background: var(--bg);
900
+ border-color: transparent;
901
+ background: transparent;
905
902
  }
906
903
 
907
904
  .readiness-summary {
@@ -922,7 +919,7 @@ body[data-clips-route="recording-pill"] #root {
922
919
  }
923
920
 
924
921
  .readiness-summary:hover {
925
- background: var(--surface-hover);
922
+ color: var(--fg-muted);
926
923
  }
927
924
 
928
925
  .readiness-summary:focus-visible {
@@ -932,10 +929,9 @@ body[data-clips-route="recording-pill"] #root {
932
929
 
933
930
  .readiness-open .readiness-summary {
934
931
  min-height: 42px;
935
- border-radius: 0;
932
+ border-radius: var(--radius-sm);
936
933
  padding: 10px 12px;
937
- background: var(--surface);
938
- border-bottom: 1px solid var(--border);
934
+ background: transparent;
939
935
  }
940
936
 
941
937
  .readiness-title {
@@ -1332,37 +1328,110 @@ body[data-clips-route="recording-pill"] #root {
1332
1328
  /* Rewind is a calm everyday status first; configuration is a drill-in. */
1333
1329
  .rewind-home-card {
1334
1330
  display: grid;
1335
- gap: 8px;
1336
- padding: 10px 11px;
1337
- border: 1px solid var(--border);
1338
- border-radius: var(--radius);
1339
- background: color-mix(in srgb, var(--surface) 72%, var(--bg));
1331
+ gap: 0;
1332
+ padding: 0;
1333
+ border: none;
1334
+ border-radius: 0;
1335
+ background: transparent;
1340
1336
  }
1341
1337
 
1342
- .rewind-home-status {
1338
+ .rewind-home-summary {
1343
1339
  display: grid;
1344
- grid-template-columns: auto minmax(0, 1fr) auto;
1340
+ grid-template-columns: minmax(0, 1fr) auto;
1345
1341
  align-items: center;
1346
- gap: 9px;
1342
+ gap: 8px;
1343
+ width: 100%;
1344
+ min-height: 42px;
1345
+ padding: 10px 12px;
1346
+ border: none;
1347
+ border-radius: var(--radius-sm);
1348
+ background: transparent;
1349
+ color: var(--fg);
1350
+ cursor: pointer;
1351
+ text-align: left;
1352
+ transition: color 120ms;
1347
1353
  }
1348
1354
 
1349
- .rewind-settings-entry-main {
1355
+ .rewind-home-summary:hover {
1356
+ color: var(--fg-muted);
1357
+ }
1358
+
1359
+ .rewind-home-summary:focus-visible {
1360
+ outline: none;
1361
+ box-shadow: 0 0 0 3px var(--brand-ring);
1362
+ }
1363
+
1364
+ .rewind-home-title {
1365
+ font-size: 13px;
1366
+ font-weight: 500;
1367
+ line-height: 1;
1368
+ }
1369
+
1370
+ .rewind-home-state {
1371
+ display: inline-flex;
1372
+ align-items: center;
1373
+ gap: 4px;
1374
+ color: var(--fg-muted);
1375
+ font-size: 11px;
1376
+ font-weight: 600;
1377
+ line-height: 1;
1378
+ }
1379
+
1380
+ .rewind-home-details {
1350
1381
  display: grid;
1351
- grid-template-columns: auto minmax(0, 1fr);
1352
- align-items: start;
1353
- gap: 9px;
1382
+ gap: 10px;
1383
+ padding: 0 12px 10px;
1354
1384
  }
1355
1385
 
1356
- .rewind-home-status p {
1357
- margin: 2px 0 0;
1386
+ .rewind-home-details p {
1387
+ margin: 0;
1358
1388
  color: var(--fg-muted);
1359
1389
  font-size: 11px;
1360
1390
  line-height: 1.4;
1361
1391
  }
1362
1392
 
1363
- .rewind-home-status strong {
1364
- font-size: 13px;
1365
- font-weight: 500;
1393
+ .rewind-home-detail-actions {
1394
+ display: flex;
1395
+ align-items: center;
1396
+ justify-content: space-between;
1397
+ gap: 10px;
1398
+ }
1399
+
1400
+ .rewind-home-controls {
1401
+ display: inline-flex;
1402
+ align-items: center;
1403
+ gap: 8px;
1404
+ }
1405
+
1406
+ .rewind-docs-link {
1407
+ display: inline-flex;
1408
+ align-items: center;
1409
+ gap: 4px;
1410
+ padding: 0;
1411
+ border: none;
1412
+ background: transparent;
1413
+ color: var(--fg-muted);
1414
+ cursor: pointer;
1415
+ font-size: 11px;
1416
+ font-weight: 600;
1417
+ white-space: nowrap;
1418
+ }
1419
+
1420
+ .rewind-docs-link:hover {
1421
+ color: var(--fg);
1422
+ }
1423
+
1424
+ .rewind-docs-link:focus-visible {
1425
+ outline: none;
1426
+ box-shadow: 0 0 0 3px var(--brand-ring);
1427
+ border-radius: 4px;
1428
+ }
1429
+
1430
+ .rewind-settings-entry-main {
1431
+ display: grid;
1432
+ grid-template-columns: auto minmax(0, 1fr);
1433
+ align-items: start;
1434
+ gap: 9px;
1366
1435
  }
1367
1436
 
1368
1437
  .rewind-home-lock-note,
@@ -1379,12 +1448,6 @@ body[data-clips-route="recording-pill"] #root {
1379
1448
  background: var(--surface);
1380
1449
  }
1381
1450
 
1382
- .rewind-home-controls {
1383
- display: inline-flex;
1384
- align-items: center;
1385
- gap: 8px;
1386
- }
1387
-
1388
1451
  .rewind-agent-prompt-copy {
1389
1452
  width: 28px;
1390
1453
  height: 28px;
@@ -1399,7 +1462,6 @@ body[data-clips-route="recording-pill"] #root {
1399
1462
  }
1400
1463
 
1401
1464
  .rewind-agent-prompt-copy:hover {
1402
- background: var(--surface-hover);
1403
1465
  color: var(--fg);
1404
1466
  }
1405
1467