@agent-native/core 0.91.2 → 0.92.1

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 (538) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +31 -0
  3. package/corpus/core/docs/content/faq.mdx +17 -0
  4. package/corpus/core/docs/content/notifications.mdx +12 -6
  5. package/corpus/core/package.json +1 -1
  6. package/corpus/core/src/agent/production-agent.ts +140 -46
  7. package/corpus/core/src/agent/tool-search.ts +71 -4
  8. package/corpus/core/src/application-state/store.ts +12 -1
  9. package/corpus/core/src/cli/index.ts +20 -0
  10. package/corpus/core/src/cli/upgrade.ts +798 -0
  11. package/corpus/core/src/client/AssistantChat.tsx +28 -15
  12. package/corpus/core/src/client/HighlightedCodeBlock.tsx +20 -3
  13. package/corpus/core/src/client/PoweredByBadge.tsx +1 -8
  14. package/corpus/core/src/client/agent-chat-adapter.ts +68 -16
  15. package/corpus/core/src/client/chat/message-components.tsx +85 -8
  16. package/corpus/core/src/client/chat/tool-call-display.tsx +355 -144
  17. package/corpus/core/src/client/chat/widgets/DataTableWidget.tsx +52 -1
  18. package/corpus/core/src/client/code-agent-chat-adapter.ts +2 -9
  19. package/corpus/core/src/client/db-admin/TableEditor.tsx +49 -0
  20. package/corpus/core/src/client/db-admin/export-utils.ts +13 -4
  21. package/corpus/core/src/client/db-admin/useAgentSync.ts +72 -0
  22. package/corpus/core/src/client/error-capture.ts +69 -7
  23. package/corpus/core/src/client/extensions/EmbeddedExtension.tsx +5 -1
  24. package/corpus/core/src/client/extensions/ExtensionViewer.tsx +53 -8
  25. package/corpus/core/src/client/extensions/InlineExtensionFrame.tsx +5 -1
  26. package/corpus/core/src/client/extensions/portable-extension.ts +1 -0
  27. package/corpus/core/src/client/org/OrgSwitcher.tsx +12 -9
  28. package/corpus/core/src/client/org/TeamPage.tsx +77 -71
  29. package/corpus/core/src/client/session-replay.ts +3 -97
  30. package/corpus/core/src/client/settings/SettingsPanel.tsx +738 -441
  31. package/corpus/core/src/client/settings/SettingsSection.tsx +161 -17
  32. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +25 -9
  33. package/corpus/core/src/client/sse-event-processor.ts +29 -2
  34. package/corpus/core/src/db-admin/agent-tools.ts +8 -2
  35. package/corpus/core/src/db-admin/operations.ts +116 -4
  36. package/corpus/core/src/db-admin/routes.ts +1 -0
  37. package/corpus/core/src/db-admin/types.ts +4 -0
  38. package/corpus/core/src/extensions/actions.ts +113 -5
  39. package/corpus/core/src/extensions/html-shell.ts +5 -4
  40. package/corpus/core/src/extensions/routes.ts +10 -0
  41. package/corpus/core/src/navigation/index.ts +1 -1
  42. package/corpus/core/src/notifications/channels.ts +88 -25
  43. package/corpus/core/src/notifications/registry.ts +17 -3
  44. package/corpus/core/src/notifications/types.ts +4 -1
  45. package/corpus/core/src/resources/handlers.ts +10 -8
  46. package/corpus/core/src/server/agent-chat-plugin.ts +7 -3
  47. package/corpus/core/src/server/poll.ts +293 -8
  48. package/corpus/core/src/server/request-context.ts +7 -0
  49. package/corpus/core/src/styles/agent-conversation.css +1 -1
  50. package/corpus/core/src/styles/agent-native.css +27 -0
  51. package/corpus/core/src/templates/default/.agents/skills/actions/SKILL.md +5 -0
  52. package/corpus/core/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  53. package/corpus/core/src/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
  54. package/corpus/core/src/templates/default/.agents/skills/security/SKILL.md +7 -0
  55. package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +20 -2
  56. package/corpus/core/src/templates/default/.agents/skills/storing-data/SKILL.md +5 -1
  57. package/corpus/core/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  58. package/corpus/core/src/templates/default/AGENTS.md +14 -5
  59. package/corpus/core/src/templates/default/package.json +2 -1
  60. package/corpus/core/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  61. package/corpus/core/src/templates/headless/AGENTS.md +13 -3
  62. package/corpus/core/src/templates/headless/package.json +1 -0
  63. package/corpus/core/src/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -0
  64. package/corpus/core/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  65. package/corpus/core/src/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +4 -0
  66. package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +6 -0
  67. package/corpus/core/src/templates/workspace-core/.agents/skills/performance/SKILL.md +4 -0
  68. package/corpus/core/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
  69. package/corpus/core/src/templates/workspace-core/.agents/skills/security/SKILL.md +7 -0
  70. package/corpus/core/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +20 -2
  71. package/corpus/core/src/templates/workspace-core/.agents/skills/storing-data/SKILL.md +5 -1
  72. package/corpus/core/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  73. package/corpus/core/src/templates/workspace-core/AGENTS.md +7 -1
  74. package/corpus/core/src/templates/workspace-root/AGENTS.md +17 -5
  75. package/corpus/core/src/templates/workspace-root/package.json +1 -0
  76. package/corpus/templates/analytics/.agents/skills/actions/SKILL.md +5 -0
  77. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +10 -0
  78. package/corpus/templates/analytics/.agents/skills/real-time-sync/SKILL.md +1 -1
  79. package/corpus/templates/analytics/.agents/skills/security/SKILL.md +7 -0
  80. package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +20 -2
  81. package/corpus/templates/analytics/.agents/skills/session-replay/SKILL.md +5 -6
  82. package/corpus/templates/analytics/.agents/skills/storing-data/SKILL.md +5 -1
  83. package/corpus/templates/analytics/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  84. package/corpus/templates/analytics/AGENTS.md +39 -18
  85. package/corpus/templates/analytics/actions/capture-test-error.ts +4 -0
  86. package/corpus/templates/analytics/actions/get-analytics-alert-rule-defaults.ts +23 -0
  87. package/corpus/templates/analytics/actions/get-error-issue.ts +1 -1
  88. package/corpus/templates/analytics/actions/list-analysis-revisions.ts +40 -0
  89. package/corpus/templates/analytics/actions/list-dashboard-revisions.ts +40 -0
  90. package/corpus/templates/analytics/actions/list-dashboard-usage-stats.ts +299 -0
  91. package/corpus/templates/analytics/actions/navigate.ts +4 -2
  92. package/corpus/templates/analytics/actions/restore-analysis-revision.ts +43 -0
  93. package/corpus/templates/analytics/actions/restore-dashboard-revision.ts +68 -0
  94. package/corpus/templates/analytics/actions/save-analytics-alert-rule.ts +14 -0
  95. package/corpus/templates/analytics/actions/save-monitor.ts +15 -1
  96. package/corpus/templates/analytics/actions/view-screen.ts +24 -0
  97. package/corpus/templates/analytics/app/components/analysis/AnalysisHistoryPanel.tsx +181 -0
  98. package/corpus/templates/analytics/app/components/dashboard/DashboardHistoryPanel.tsx +184 -0
  99. package/corpus/templates/analytics/app/components/dashboard/DataTable.tsx +41 -6
  100. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +122 -11
  101. package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +22 -16
  102. package/corpus/templates/analytics/app/components/layout/Header.tsx +1 -1
  103. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +27 -21
  104. package/corpus/templates/analytics/app/hooks/use-analysis-revisions.ts +43 -0
  105. package/corpus/templates/analytics/app/hooks/use-dashboard-chat-context.ts +110 -0
  106. package/corpus/templates/analytics/app/hooks/use-dashboard-revisions.ts +43 -0
  107. package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +8 -3
  108. package/corpus/templates/analytics/app/i18n/zh-TW.ts +64 -2
  109. package/corpus/templates/analytics/app/i18n-data.ts +783 -3
  110. package/corpus/templates/analytics/app/pages/Agents.tsx +359 -19
  111. package/corpus/templates/analytics/app/pages/Settings.tsx +3 -2
  112. package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +34 -1
  113. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +28 -0
  114. package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +18 -1
  115. package/corpus/templates/analytics/app/pages/monitoring/ErrorsPanel.tsx +7 -10
  116. package/corpus/templates/analytics/app/pages/monitoring/MonitoringPage.tsx +8 -2
  117. package/corpus/templates/analytics/app/pages/monitoring/errors/IssueDetail.tsx +479 -23
  118. package/corpus/templates/analytics/app/pages/monitoring/errors/IssueList.tsx +0 -9
  119. package/corpus/templates/analytics/app/pages/monitoring/errors/i18n.ts +11 -0
  120. package/corpus/templates/analytics/app/pages/monitoring/errors/types.ts +9 -1
  121. package/corpus/templates/analytics/app/pages/monitoring/uptime/MonitorFormPage.tsx +157 -35
  122. package/corpus/templates/analytics/app/pages/monitoring/uptime/i18n.ts +17 -2
  123. package/corpus/templates/analytics/app/pages/monitoring/uptime/types.ts +4 -0
  124. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +80 -220
  125. package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +9 -99
  126. package/corpus/templates/analytics/app/pages/settings/AlertRulesSettingsCard.tsx +262 -104
  127. package/corpus/templates/analytics/app/routes/team.tsx +1 -1
  128. package/corpus/templates/analytics/changelog/2026-07-08-admins-can-audit-dashboard-usage-ownership-and-cleanup-signa.md +6 -0
  129. package/corpus/templates/analytics/changelog/2026-07-08-agent-monitoring-stays-available-to-non-admins.md +6 -0
  130. package/corpus/templates/analytics/changelog/2026-07-08-alert-rules-are-easier-to-scan-expand-and-edit-from-settings.md +6 -0
  131. package/corpus/templates/analytics/changelog/2026-07-08-analytics-alert-forms-remember-last-email-recipients.md +6 -0
  132. package/corpus/templates/analytics/changelog/2026-07-08-analytics-alert-rules-can-now-use-per-rule-slack-and-webhook.md +6 -0
  133. package/corpus/templates/analytics/changelog/2026-07-08-dashboard-history-and-chat-context.md +5 -0
  134. package/corpus/templates/analytics/changelog/2026-07-08-dashboard-tables-keep-their-size-while-loading.md +6 -0
  135. package/corpus/templates/analytics/changelog/2026-07-08-dashboard-usage-now-counts-explorer-dashboard-traffic.md +6 -0
  136. package/corpus/templates/analytics/changelog/2026-07-08-demo-mode-session-emails-are-filtered-and-anonymized.md +6 -0
  137. package/corpus/templates/analytics/changelog/2026-07-08-error-issue-detail-adds-stack-traces-and-frequency-bars.md +6 -0
  138. package/corpus/templates/analytics/changelog/2026-07-08-error-issue-detail-now-shows-the-latest-occurrence-message-a.md +6 -0
  139. package/corpus/templates/analytics/changelog/2026-07-08-monitoring-errors-only-show-test-action-when-empty.md +6 -0
  140. package/corpus/templates/analytics/changelog/2026-07-08-monitoring-uptime-and-errors-tabs-now-clearly-show-which-view-is-active.md +6 -0
  141. package/corpus/templates/analytics/changelog/2026-07-08-production-session-replay-now-requires-private-blob-storage-.md +6 -0
  142. package/corpus/templates/analytics/changelog/2026-07-08-session-replay-uses-stock-rrweb-sizing-again-so-recorded.md +6 -0
  143. package/corpus/templates/analytics/changelog/2026-07-08-shared-extension-links-now-show-a-clear-message-when-you-do-.md +6 -0
  144. package/corpus/templates/analytics/changelog/2026-07-08-sidebar-dashboard-menus-now-open-above-the-dashboard-canvas.md +6 -0
  145. package/corpus/templates/analytics/changelog/2026-07-08-team-settings-show-access-controls-next-to-member-lists.md +6 -0
  146. package/corpus/templates/analytics/changelog/2026-07-08-uptime-alerting-clarifies-in-app-inbox-vs-email-and-lets-you-paste-slack-or-webhook-urls-per-monitor.md +6 -0
  147. package/corpus/templates/analytics/changelog/2026-07-08-uptime-monitors-now-use-a-10-second-request-timeout-by-defau.md +6 -0
  148. package/corpus/templates/analytics/docs/uptime-monitoring.md +13 -11
  149. package/corpus/templates/analytics/server/db/schema-monitoring.ts +5 -1
  150. package/corpus/templates/analytics/server/db/schema.ts +56 -0
  151. package/corpus/templates/analytics/server/lib/analytics-alerts.ts +92 -0
  152. package/corpus/templates/analytics/server/lib/dashboards-store.ts +334 -5
  153. package/corpus/templates/analytics/server/lib/error-capture.ts +231 -36
  154. package/corpus/templates/analytics/server/lib/session-replay.ts +114 -8
  155. package/corpus/templates/analytics/server/lib/uptime-monitors.ts +65 -16
  156. package/corpus/templates/analytics/server/plugins/db.ts +122 -2
  157. package/corpus/templates/analytics/server/routes/api/dashboard-agent-context.json.get.ts +1 -0
  158. package/corpus/templates/assets/.agents/skills/actions/SKILL.md +5 -0
  159. package/corpus/templates/assets/.agents/skills/real-time-sync/SKILL.md +1 -1
  160. package/corpus/templates/assets/.agents/skills/security/SKILL.md +7 -0
  161. package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +20 -2
  162. package/corpus/templates/assets/.agents/skills/storing-data/SKILL.md +5 -1
  163. package/corpus/templates/assets/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  164. package/corpus/templates/assets/AGENTS.md +4 -0
  165. package/corpus/templates/assets/app/routes/settings.tsx +1 -1
  166. package/corpus/templates/assets/app/routes/team.tsx +1 -1
  167. package/corpus/templates/brain/.agents/skills/actions/SKILL.md +5 -0
  168. package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +5 -0
  169. package/corpus/templates/brain/.agents/skills/real-time-sync/SKILL.md +1 -1
  170. package/corpus/templates/brain/.agents/skills/security/SKILL.md +7 -0
  171. package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +20 -2
  172. package/corpus/templates/brain/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  173. package/corpus/templates/brain/AGENTS.md +4 -0
  174. package/corpus/templates/brain/app/routes/team.tsx +1 -1
  175. package/corpus/templates/calendar/.agents/skills/actions/SKILL.md +5 -0
  176. package/corpus/templates/calendar/.agents/skills/real-time-sync/SKILL.md +1 -1
  177. package/corpus/templates/calendar/.agents/skills/security/SKILL.md +7 -0
  178. package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +20 -2
  179. package/corpus/templates/calendar/.agents/skills/storing-data/SKILL.md +5 -1
  180. package/corpus/templates/calendar/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  181. package/corpus/templates/calendar/AGENTS.md +4 -0
  182. package/corpus/templates/calendar/app/components/calendar/DayView.tsx +11 -2
  183. package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +21 -8
  184. package/corpus/templates/calendar/app/components/calendar/MonthView.tsx +7 -1
  185. package/corpus/templates/calendar/app/components/calendar/WeekView.tsx +11 -2
  186. package/corpus/templates/calendar/app/lib/popover-click-guard.ts +48 -4
  187. package/corpus/templates/calendar/app/pages/Settings.tsx +1 -1
  188. package/corpus/templates/calendar/app/routes/_app.team.tsx +1 -1
  189. package/corpus/templates/calendar/changelog/2026-07-08-clicking-empty-calendar-space-closes-an-open-event-popover-b.md +6 -0
  190. package/corpus/templates/chat/.agents/skills/actions/SKILL.md +5 -0
  191. package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +5 -0
  192. package/corpus/templates/chat/.agents/skills/real-time-sync/SKILL.md +1 -1
  193. package/corpus/templates/chat/.agents/skills/security/SKILL.md +7 -0
  194. package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +20 -2
  195. package/corpus/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  196. package/corpus/templates/chat/AGENTS.md +4 -0
  197. package/corpus/templates/chat/app/hooks/use-navigation-state.ts +1 -1
  198. package/corpus/templates/chat/app/routes/settings.tsx +2 -2
  199. package/corpus/templates/chat/app/routes/team.tsx +1 -1
  200. package/corpus/templates/clips/.agents/skills/actions/SKILL.md +5 -0
  201. package/corpus/templates/clips/.agents/skills/security/SKILL.md +7 -0
  202. package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +20 -2
  203. package/corpus/templates/clips/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  204. package/corpus/templates/clips/AGENTS.md +4 -0
  205. package/corpus/templates/clips/actions/finalize-recording.ts +9 -3
  206. package/corpus/templates/clips/actions/set-thumbnail.ts +11 -2
  207. package/corpus/templates/clips/app/components/meetings/canvas-editor.tsx +1 -7
  208. package/corpus/templates/clips/app/components/player/player-controls.tsx +21 -13
  209. package/corpus/templates/clips/app/components/player/video-player.tsx +30 -75
  210. package/corpus/templates/clips/app/i18n/ar-SA.ts +6 -5
  211. package/corpus/templates/clips/app/i18n/de-DE.ts +6 -6
  212. package/corpus/templates/clips/app/i18n/en-US.ts +6 -5
  213. package/corpus/templates/clips/app/i18n/es-ES.ts +6 -5
  214. package/corpus/templates/clips/app/i18n/fr-FR.ts +6 -6
  215. package/corpus/templates/clips/app/i18n/hi-IN.ts +6 -5
  216. package/corpus/templates/clips/app/i18n/ja-JP.ts +6 -5
  217. package/corpus/templates/clips/app/i18n/ko-KR.ts +6 -5
  218. package/corpus/templates/clips/app/i18n/pt-BR.ts +6 -5
  219. package/corpus/templates/clips/app/i18n/zh-CN.ts +6 -5
  220. package/corpus/templates/clips/app/i18n/zh-TW.ts +6 -5
  221. package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +51 -118
  222. package/corpus/templates/clips/changelog/2026-07-08-desktop-meeting-notes-stay-active-from-tray-and-shortcut-controls.md +6 -0
  223. package/corpus/templates/clips/changelog/2026-07-08-desktop-meeting-popovers-can-start-notes-and-join-the-meetin.md +6 -0
  224. package/corpus/templates/clips/changelog/2026-07-08-hosted-clip-uploads-now-clear-failed-buffered-chunks.md +6 -0
  225. package/corpus/templates/clips/changelog/2026-07-08-hosted-recording-uploads-now-avoid-sql-chunk-storage.md +6 -0
  226. package/corpus/templates/clips/changelog/2026-07-08-meeting-notes-keep-their-recording-state-when-the-desktop.md +6 -0
  227. package/corpus/templates/clips/changelog/2026-07-08-meeting-recaps-now-keep-summaries-action-items-and-transcrip.md +6 -0
  228. package/corpus/templates/clips/changelog/2026-07-08-meeting-reminder-dropdowns-now-expand-fully-instead-of-being.md +6 -0
  229. package/corpus/templates/clips/changelog/2026-07-08-video-playback-controls-now-match-loom-style-5-second-skips-.md +6 -0
  230. package/corpus/templates/clips/desktop/src/app.tsx +123 -3
  231. package/corpus/templates/clips/desktop/src/hooks/useMeetingTranscription.ts +15 -1
  232. package/corpus/templates/clips/desktop/src/overlays/meeting-notification.tsx +23 -0
  233. package/corpus/templates/clips/desktop/src/styles.css +23 -1
  234. package/corpus/templates/clips/desktop/src-tauri/src/adhoc_meetings_watcher.rs +1 -3
  235. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +40 -6
  236. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +4 -2
  237. package/corpus/templates/clips/desktop/src-tauri/src/meetings_watcher.rs +3 -5
  238. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +23 -19
  239. package/corpus/templates/clips/desktop/src-tauri/src/shortcuts.rs +3 -3
  240. package/corpus/templates/clips/desktop/src-tauri/src/silence_detector.rs +0 -1
  241. package/corpus/templates/clips/desktop/src-tauri/src/state.rs +5 -0
  242. package/corpus/templates/clips/desktop/src-tauri/src/tray.rs +18 -6
  243. package/corpus/templates/clips/server/lib/recording-upload-state.ts +63 -0
  244. package/corpus/templates/clips/server/lib/video-storage.ts +4 -0
  245. package/corpus/templates/clips/server/routes/api/recordings/[recordingId]/thumbnail.post.ts +19 -13
  246. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +40 -1
  247. package/corpus/templates/content/.agents/skills/actions/SKILL.md +5 -0
  248. package/corpus/templates/content/.agents/skills/real-time-sync/SKILL.md +1 -1
  249. package/corpus/templates/content/.agents/skills/security/SKILL.md +7 -0
  250. package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +20 -2
  251. package/corpus/templates/content/.agents/skills/storing-data/SKILL.md +5 -1
  252. package/corpus/templates/content/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  253. package/corpus/templates/content/AGENTS.md +4 -0
  254. package/corpus/templates/content/actions/_batch-utils.ts +8 -0
  255. package/corpus/templates/content/actions/_builder-cms-read-client.ts +7 -5
  256. package/corpus/templates/content/actions/_database-source-utils.ts +776 -319
  257. package/corpus/templates/content/actions/_database-utils.ts +6 -1
  258. package/corpus/templates/content/actions/_property-utils.ts +168 -0
  259. package/corpus/templates/content/actions/add-content-database-source-field-property.ts +19 -12
  260. package/corpus/templates/content/actions/bind-content-database-source-field.ts +19 -12
  261. package/corpus/templates/content/actions/delete-document.ts +9 -13
  262. package/corpus/templates/content/actions/refresh-content-database-source.ts +5 -5
  263. package/corpus/templates/content/app/components/editor/body-hydration.ts +35 -11
  264. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +47 -5
  265. package/corpus/templates/content/app/hooks/use-documents.ts +8 -2
  266. package/corpus/templates/content/app/routes/_app.settings.tsx +2 -2
  267. package/corpus/templates/content/app/routes/_app.team.tsx +1 -1
  268. package/corpus/templates/content/changelog/2026-07-08-builder-source-sync-now-completes-reliably-on-hosted-databases.md +6 -0
  269. package/corpus/templates/content/changelog/2026-07-08-fixed-builder-database-sync-so-large-sources-continue-past-t.md +6 -0
  270. package/corpus/templates/content/server/plugins/db.ts +19 -0
  271. package/corpus/templates/design/.agents/skills/actions/SKILL.md +5 -0
  272. package/corpus/templates/design/.agents/skills/security/SKILL.md +7 -0
  273. package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +20 -2
  274. package/corpus/templates/design/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  275. package/corpus/templates/design/AGENTS.md +4 -0
  276. package/corpus/templates/design/actions/take-design-screenshot.ts +12 -9
  277. package/corpus/templates/design/app/components/design/inspector/ImageFillControls.tsx +57 -13
  278. package/corpus/templates/design/app/routes/team.tsx +1 -1
  279. package/corpus/templates/design/changelog/2026-07-08-local-images-added-to-designs-now-upload-to-file-storage-ins.md +6 -0
  280. package/corpus/templates/dispatch/.agents/skills/actions/SKILL.md +5 -0
  281. package/corpus/templates/dispatch/.agents/skills/security/SKILL.md +7 -0
  282. package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +20 -2
  283. package/corpus/templates/dispatch/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  284. package/corpus/templates/dispatch/AGENTS.md +4 -0
  285. package/corpus/templates/dispatch/app/hooks/use-navigation-state.ts +1 -1
  286. package/corpus/templates/dispatch/app/routes/settings.tsx +2 -2
  287. package/corpus/templates/dispatch/app/routes/team.tsx +1 -1
  288. package/corpus/templates/forms/.agents/skills/actions/SKILL.md +5 -0
  289. package/corpus/templates/forms/.agents/skills/real-time-sync/SKILL.md +1 -1
  290. package/corpus/templates/forms/.agents/skills/security/SKILL.md +7 -0
  291. package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +20 -2
  292. package/corpus/templates/forms/.agents/skills/storing-data/SKILL.md +5 -1
  293. package/corpus/templates/forms/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  294. package/corpus/templates/forms/AGENTS.md +4 -0
  295. package/corpus/templates/forms/app/routes/_app.settings.tsx +2 -2
  296. package/corpus/templates/forms/app/routes/_app.team.tsx +1 -1
  297. package/corpus/templates/forms/shared/navigation.ts +1 -1
  298. package/corpus/templates/macros/.agents/skills/security/SKILL.md +7 -0
  299. package/corpus/templates/macros/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  300. package/corpus/templates/macros/AGENTS.md +4 -0
  301. package/corpus/templates/macros/app/routes/settings.tsx +2 -2
  302. package/corpus/templates/macros/app/routes/team.tsx +1 -1
  303. package/corpus/templates/mail/.agents/skills/actions/SKILL.md +5 -0
  304. package/corpus/templates/mail/.agents/skills/email-drafts/SKILL.md +1 -1
  305. package/corpus/templates/mail/.agents/skills/real-time-sync/SKILL.md +1 -1
  306. package/corpus/templates/mail/.agents/skills/security/SKILL.md +7 -0
  307. package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +20 -2
  308. package/corpus/templates/mail/.agents/skills/storing-data/SKILL.md +5 -1
  309. package/corpus/templates/mail/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  310. package/corpus/templates/mail/AGENTS.md +4 -0
  311. package/corpus/templates/mail/changelog/2026-07-08-mail-attachments-in-hosted-environments-now-require-file-sto.md +6 -0
  312. package/corpus/templates/mail/server/handlers/media.ts +26 -1
  313. package/corpus/templates/mail/server/lib/outgoing-email.ts +24 -1
  314. package/corpus/templates/mail/server/lib/upload-store.ts +2 -1
  315. package/corpus/templates/plan/.agents/skills/actions/SKILL.md +5 -0
  316. package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +5 -0
  317. package/corpus/templates/plan/.agents/skills/real-time-sync/SKILL.md +1 -1
  318. package/corpus/templates/plan/.agents/skills/security/SKILL.md +7 -0
  319. package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +20 -2
  320. package/corpus/templates/plan/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  321. package/corpus/templates/plan/AGENTS.md +4 -0
  322. package/corpus/templates/plan/app/hooks/use-navigation-state.ts +1 -1
  323. package/corpus/templates/plan/app/routes/settings.tsx +2 -2
  324. package/corpus/templates/plan/app/routes/team.tsx +1 -1
  325. package/corpus/templates/plan/changelog/2026-07-08-hosted-plan-images-now-require-connected-storage.md +6 -0
  326. package/corpus/templates/plan/server/lib/plan-assets.ts +33 -4
  327. package/corpus/templates/slides/.agents/skills/actions/SKILL.md +5 -0
  328. package/corpus/templates/slides/.agents/skills/security/SKILL.md +7 -0
  329. package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +20 -2
  330. package/corpus/templates/slides/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  331. package/corpus/templates/slides/AGENTS.md +4 -0
  332. package/corpus/templates/slides/actions/generate-image-api.ts +15 -3
  333. package/corpus/templates/slides/app/routes/settings.tsx +2 -2
  334. package/corpus/templates/slides/app/routes/team.tsx +1 -1
  335. package/corpus/templates/slides/changelog/2026-07-08-generated-slide-images-now-return-hosted-file-storage-urls-i.md +6 -0
  336. package/corpus/templates/slides/shared/api.ts +1 -1
  337. package/corpus/templates/videos/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  338. package/corpus/templates/voice/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  339. package/dist/agent/production-agent.d.ts +5 -1
  340. package/dist/agent/production-agent.d.ts.map +1 -1
  341. package/dist/agent/production-agent.js +112 -42
  342. package/dist/agent/production-agent.js.map +1 -1
  343. package/dist/agent/tool-search.d.ts +2 -0
  344. package/dist/agent/tool-search.d.ts.map +1 -1
  345. package/dist/agent/tool-search.js +60 -4
  346. package/dist/agent/tool-search.js.map +1 -1
  347. package/dist/application-state/store.d.ts.map +1 -1
  348. package/dist/application-state/store.js +8 -2
  349. package/dist/application-state/store.js.map +1 -1
  350. package/dist/cli/index.js +19 -0
  351. package/dist/cli/index.js.map +1 -1
  352. package/dist/cli/upgrade.d.ts +100 -0
  353. package/dist/cli/upgrade.d.ts.map +1 -0
  354. package/dist/cli/upgrade.js +678 -0
  355. package/dist/cli/upgrade.js.map +1 -0
  356. package/dist/client/AssistantChat.d.ts.map +1 -1
  357. package/dist/client/AssistantChat.js +25 -14
  358. package/dist/client/AssistantChat.js.map +1 -1
  359. package/dist/client/HighlightedCodeBlock.d.ts +2 -0
  360. package/dist/client/HighlightedCodeBlock.d.ts.map +1 -1
  361. package/dist/client/HighlightedCodeBlock.js +10 -1
  362. package/dist/client/HighlightedCodeBlock.js.map +1 -1
  363. package/dist/client/PoweredByBadge.d.ts +1 -1
  364. package/dist/client/PoweredByBadge.d.ts.map +1 -1
  365. package/dist/client/PoweredByBadge.js +3 -9
  366. package/dist/client/PoweredByBadge.js.map +1 -1
  367. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  368. package/dist/client/agent-chat-adapter.js +60 -13
  369. package/dist/client/agent-chat-adapter.js.map +1 -1
  370. package/dist/client/chat/message-components.d.ts.map +1 -1
  371. package/dist/client/chat/message-components.js +61 -8
  372. package/dist/client/chat/message-components.js.map +1 -1
  373. package/dist/client/chat/tool-call-display.d.ts +12 -0
  374. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  375. package/dist/client/chat/tool-call-display.js +136 -42
  376. package/dist/client/chat/tool-call-display.js.map +1 -1
  377. package/dist/client/chat/widgets/DataTableWidget.d.ts.map +1 -1
  378. package/dist/client/chat/widgets/DataTableWidget.js +19 -2
  379. package/dist/client/chat/widgets/DataTableWidget.js.map +1 -1
  380. package/dist/client/code-agent-chat-adapter.js +2 -9
  381. package/dist/client/code-agent-chat-adapter.js.map +1 -1
  382. package/dist/client/db-admin/TableEditor.d.ts.map +1 -1
  383. package/dist/client/db-admin/TableEditor.js +19 -2
  384. package/dist/client/db-admin/TableEditor.js.map +1 -1
  385. package/dist/client/db-admin/export-utils.d.ts +2 -0
  386. package/dist/client/db-admin/export-utils.d.ts.map +1 -1
  387. package/dist/client/db-admin/export-utils.js +11 -3
  388. package/dist/client/db-admin/export-utils.js.map +1 -1
  389. package/dist/client/db-admin/useAgentSync.d.ts.map +1 -1
  390. package/dist/client/db-admin/useAgentSync.js +63 -0
  391. package/dist/client/db-admin/useAgentSync.js.map +1 -1
  392. package/dist/client/error-capture.d.ts.map +1 -1
  393. package/dist/client/error-capture.js +41 -7
  394. package/dist/client/error-capture.js.map +1 -1
  395. package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
  396. package/dist/client/extensions/EmbeddedExtension.js +3 -1
  397. package/dist/client/extensions/EmbeddedExtension.js.map +1 -1
  398. package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
  399. package/dist/client/extensions/ExtensionViewer.js +32 -5
  400. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  401. package/dist/client/extensions/InlineExtensionFrame.d.ts.map +1 -1
  402. package/dist/client/extensions/InlineExtensionFrame.js +3 -1
  403. package/dist/client/extensions/InlineExtensionFrame.js.map +1 -1
  404. package/dist/client/extensions/portable-extension.d.ts.map +1 -1
  405. package/dist/client/extensions/portable-extension.js +1 -0
  406. package/dist/client/extensions/portable-extension.js.map +1 -1
  407. package/dist/client/org/OrgSwitcher.d.ts +1 -1
  408. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  409. package/dist/client/org/OrgSwitcher.js +11 -6
  410. package/dist/client/org/OrgSwitcher.js.map +1 -1
  411. package/dist/client/org/TeamPage.d.ts.map +1 -1
  412. package/dist/client/org/TeamPage.js +5 -5
  413. package/dist/client/org/TeamPage.js.map +1 -1
  414. package/dist/client/session-replay.d.ts +0 -8
  415. package/dist/client/session-replay.d.ts.map +1 -1
  416. package/dist/client/session-replay.js +3 -80
  417. package/dist/client/session-replay.js.map +1 -1
  418. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  419. package/dist/client/settings/SettingsPanel.js +89 -33
  420. package/dist/client/settings/SettingsPanel.js.map +1 -1
  421. package/dist/client/settings/SettingsSection.d.ts +19 -4
  422. package/dist/client/settings/SettingsSection.d.ts.map +1 -1
  423. package/dist/client/settings/SettingsSection.js +33 -4
  424. package/dist/client/settings/SettingsSection.js.map +1 -1
  425. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
  426. package/dist/client/settings/SettingsTabsPage.js +21 -10
  427. package/dist/client/settings/SettingsTabsPage.js.map +1 -1
  428. package/dist/client/sse-event-processor.d.ts +9 -0
  429. package/dist/client/sse-event-processor.d.ts.map +1 -1
  430. package/dist/client/sse-event-processor.js +20 -2
  431. package/dist/client/sse-event-processor.js.map +1 -1
  432. package/dist/db-admin/agent-tools.d.ts.map +1 -1
  433. package/dist/db-admin/agent-tools.js +7 -2
  434. package/dist/db-admin/agent-tools.js.map +1 -1
  435. package/dist/db-admin/operations.d.ts.map +1 -1
  436. package/dist/db-admin/operations.js +90 -4
  437. package/dist/db-admin/operations.js.map +1 -1
  438. package/dist/db-admin/routes.d.ts.map +1 -1
  439. package/dist/db-admin/routes.js +1 -0
  440. package/dist/db-admin/routes.js.map +1 -1
  441. package/dist/db-admin/types.d.ts +4 -0
  442. package/dist/db-admin/types.d.ts.map +1 -1
  443. package/dist/db-admin/types.js.map +1 -1
  444. package/dist/extensions/actions.d.ts.map +1 -1
  445. package/dist/extensions/actions.js +85 -5
  446. package/dist/extensions/actions.js.map +1 -1
  447. package/dist/extensions/html-shell.d.ts +5 -4
  448. package/dist/extensions/html-shell.d.ts.map +1 -1
  449. package/dist/extensions/html-shell.js.map +1 -1
  450. package/dist/extensions/routes.d.ts.map +1 -1
  451. package/dist/extensions/routes.js +8 -0
  452. package/dist/extensions/routes.js.map +1 -1
  453. package/dist/navigation/index.d.ts +1 -1
  454. package/dist/navigation/index.d.ts.map +1 -1
  455. package/dist/navigation/index.js +1 -1
  456. package/dist/navigation/index.js.map +1 -1
  457. package/dist/notifications/channels.d.ts +8 -3
  458. package/dist/notifications/channels.d.ts.map +1 -1
  459. package/dist/notifications/channels.js +61 -22
  460. package/dist/notifications/channels.js.map +1 -1
  461. package/dist/notifications/registry.d.ts.map +1 -1
  462. package/dist/notifications/registry.js +14 -3
  463. package/dist/notifications/registry.js.map +1 -1
  464. package/dist/notifications/types.d.ts +4 -1
  465. package/dist/notifications/types.d.ts.map +1 -1
  466. package/dist/notifications/types.js.map +1 -1
  467. package/dist/resources/handlers.d.ts +5 -0
  468. package/dist/resources/handlers.d.ts.map +1 -1
  469. package/dist/resources/handlers.js +9 -8
  470. package/dist/resources/handlers.js.map +1 -1
  471. package/dist/server/agent-chat-plugin.d.ts +5 -1
  472. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  473. package/dist/server/agent-chat-plugin.js +2 -2
  474. package/dist/server/agent-chat-plugin.js.map +1 -1
  475. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  476. package/dist/server/poll.d.ts +12 -4
  477. package/dist/server/poll.d.ts.map +1 -1
  478. package/dist/server/poll.js +236 -9
  479. package/dist/server/poll.js.map +1 -1
  480. package/dist/server/request-context.d.ts +7 -0
  481. package/dist/server/request-context.d.ts.map +1 -1
  482. package/dist/server/request-context.js.map +1 -1
  483. package/dist/styles/agent-conversation.css +1 -1
  484. package/dist/styles/agent-native.css +27 -0
  485. package/dist/templates/default/.agents/skills/actions/SKILL.md +5 -0
  486. package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  487. package/dist/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
  488. package/dist/templates/default/.agents/skills/security/SKILL.md +7 -0
  489. package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +20 -2
  490. package/dist/templates/default/.agents/skills/storing-data/SKILL.md +5 -1
  491. package/dist/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  492. package/dist/templates/default/AGENTS.md +14 -5
  493. package/dist/templates/default/package.json +2 -1
  494. package/dist/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  495. package/dist/templates/headless/AGENTS.md +13 -3
  496. package/dist/templates/headless/package.json +1 -0
  497. package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -0
  498. package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  499. package/dist/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +4 -0
  500. package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +6 -0
  501. package/dist/templates/workspace-core/.agents/skills/performance/SKILL.md +4 -0
  502. package/dist/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
  503. package/dist/templates/workspace-core/.agents/skills/security/SKILL.md +7 -0
  504. package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +20 -2
  505. package/dist/templates/workspace-core/.agents/skills/storing-data/SKILL.md +5 -1
  506. package/dist/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  507. package/dist/templates/workspace-core/AGENTS.md +7 -1
  508. package/dist/templates/workspace-root/AGENTS.md +17 -5
  509. package/dist/templates/workspace-root/package.json +1 -0
  510. package/docs/content/faq.mdx +17 -0
  511. package/docs/content/notifications.mdx +12 -6
  512. package/package.json +2 -2
  513. package/src/templates/default/.agents/skills/actions/SKILL.md +5 -0
  514. package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  515. package/src/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
  516. package/src/templates/default/.agents/skills/security/SKILL.md +7 -0
  517. package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +20 -2
  518. package/src/templates/default/.agents/skills/storing-data/SKILL.md +5 -1
  519. package/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  520. package/src/templates/default/AGENTS.md +14 -5
  521. package/src/templates/default/package.json +2 -1
  522. package/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  523. package/src/templates/headless/AGENTS.md +13 -3
  524. package/src/templates/headless/package.json +1 -0
  525. package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -0
  526. package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  527. package/src/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +4 -0
  528. package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +6 -0
  529. package/src/templates/workspace-core/.agents/skills/performance/SKILL.md +4 -0
  530. package/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
  531. package/src/templates/workspace-core/.agents/skills/security/SKILL.md +7 -0
  532. package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +20 -2
  533. package/src/templates/workspace-core/.agents/skills/storing-data/SKILL.md +5 -1
  534. package/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  535. package/src/templates/workspace-core/AGENTS.md +7 -1
  536. package/src/templates/workspace-root/AGENTS.md +17 -5
  537. package/src/templates/workspace-root/package.json +1 -0
  538. package/corpus/templates/analytics/changelog/2026-07-08-session-replay-clamps-ultra-wide-viewports-while-keeping-the.md +0 -6
@@ -320,7 +320,7 @@ const messages = {
320
320
  unassigned: "No asignado",
321
321
  them: "A ellos",
322
322
  me: "A mí",
323
- regeneratingNotes: "Notas regeneradoras: se conservan sus propias notas",
323
+ regeneratingNotes: "Regenerando resumen",
324
324
  meetingRemoved: "Reunión eliminada",
325
325
  couldNotRemoveMeeting: "No se pudo eliminar la reunión",
326
326
  couldNotLoadMeeting: "No se pudo cargar esta reunión.",
@@ -328,8 +328,8 @@ const messages = {
328
328
  couldNotCopyTranscript: "No se pudo copiar la transcripción",
329
329
  allMeetings: "Todas las reuniones",
330
330
  live: "Vivir",
331
- generatingNotesInline: "Generando notas...",
332
- regenerateNotes: "regenerar notas",
331
+ generatingNotesInline: "Generando resumen...",
332
+ regenerateNotes: "Regenerar resumen",
333
333
  share: "Compartir",
334
334
  meetingOptions: "Opciones de reunión",
335
335
  removeMeeting: "Eliminar reunión",
@@ -342,12 +342,13 @@ const messages = {
342
342
  desktopHint:
343
343
  "Para iniciar notas, abre Clips Desktop desde la barra de menús y elige Start Meeting Notes, o haz clic en Start notes cuando aparezca el recordatorio. Clips captura micrófono y audio del sistema, y escribe la transcripción aquí.",
344
344
  getDesktopApp: "Obtener aplicación de escritorio",
345
- generateNotesFailed: "No se pudieron generar notas. Intentar otra vez.",
345
+ generateNotesFailed: "No se pudo generar el resumen. Intentar otra vez.",
346
346
  attendee_one: "asistente {{count}}",
347
347
  attendee_other: "asistentes {{count}}",
348
348
  joinCall: "Unirse a la llamada",
349
349
  myNotes: "mis notas",
350
350
  aiNotes: "notas de IA",
351
+ summary: "Resumen",
351
352
  actionItems: "Elementos de acción",
352
353
  working: "Laboral…",
353
354
  noActionItems:
@@ -925,7 +926,7 @@ Todos los cambios visibles para los usuarios de Clips se documentan aquí. Puede
925
926
  unavailable: "Esta reunión es privada o ya no está disponible.",
926
927
  tryClips: "Probar Clips",
927
928
  attendees: "{{count}} asistentes",
928
- noAiNotes: "Aún no se han generado notas de IA para esta reunión.",
929
+ noAiNotes: "Aún no se ha generado un resumen para esta reunión.",
929
930
  summary: "Resumen",
930
931
  keyPoints: "Puntos clave",
931
932
  actionItems: "Elementos de acción",
@@ -320,8 +320,7 @@ const messages = {
320
320
  unassigned: "Non attribué",
321
321
  them: "Eux",
322
322
  me: "Moi",
323
- regeneratingNotes:
324
- "Notes régénératrices : vos propres notes sont conservées",
323
+ regeneratingNotes: "Régénération du résumé",
325
324
  meetingRemoved: "Réunion supprimée",
326
325
  couldNotRemoveMeeting: "Impossible de supprimer la réunion",
327
326
  couldNotLoadMeeting: "Impossible de charger cette réunion.",
@@ -329,8 +328,8 @@ const messages = {
329
328
  couldNotCopyTranscript: "Impossible de copier la transcription",
330
329
  allMeetings: "Toutes les réunions",
331
330
  live: "En direct",
332
- generatingNotesInline: "Générer des notes…",
333
- regenerateNotes: "Régénérer les notes",
331
+ generatingNotesInline: "Génération du résumé…",
332
+ regenerateNotes: "Régénérer le résumé",
334
333
  share: "Partager",
335
334
  meetingOptions: "Options de réunion",
336
335
  removeMeeting: "Supprimer la réunion",
@@ -343,12 +342,13 @@ const messages = {
343
342
  desktopHint:
344
343
  "Pour démarrer les notes, ouvrez Clips Desktop dans la barre de menus et choisissez Start Meeting Notes, ou cliquez sur Start notes lorsque le rappel apparaît. Clips capture le micro et l'audio système, puis écrit la transcription ici.",
345
344
  getDesktopApp: "Obtenir l'application de bureau",
346
- generateNotesFailed: "Impossible de générer des notes. Essayer à nouveau.",
345
+ generateNotesFailed: "Impossible de générer le résumé. Essayer à nouveau.",
347
346
  attendee_one: "participant {{count}}",
348
347
  attendee_other: "participants {{count}}",
349
348
  joinCall: "Rejoindre l'appel",
350
349
  myNotes: "Mes notes",
351
350
  aiNotes: "Notes sur l'IA",
351
+ summary: "Résumé",
352
352
  actionItems: "Éléments d'action",
353
353
  working: "Fonctionnement…",
354
354
  noActionItems:
@@ -928,7 +928,7 @@ Tous les changements visibles par les utilisateurs de Clips sont documentés ici
928
928
  unavailable: "Cette réunion est privée ou n’est plus disponible.",
929
929
  tryClips: "Essayer Clips",
930
930
  attendees: "{{count}} participants",
931
- noAiNotes: "Les notes IA n’ont pas encore été générées pour cette réunion.",
931
+ noAiNotes: "Aucun résumé n’a encore été généré pour cette réunion.",
932
932
  summary: "Résumé",
933
933
  keyPoints: "Points clés",
934
934
  actionItems: "Actions à faire",
@@ -307,7 +307,7 @@ const messages = {
307
307
  unassigned: "सौंपे नहीं गए",
308
308
  them: "उन्हें",
309
309
  me: "मुझे",
310
- regeneratingNotes: "नोट्स को पुनर्जीवित करना - आपके स्वयं के नोट्स रखे जाते हैं",
310
+ regeneratingNotes: "सारांश पुन: उत्पन्न कर रहे हैं",
311
311
  meetingRemoved: "मीटिंग हटा दी गई",
312
312
  couldNotRemoveMeeting: "मीटिंग को हटाया नहीं जा सका",
313
313
  couldNotLoadMeeting: "इस मीटिंग को लोड नहीं किया जा सका.",
@@ -315,8 +315,8 @@ const messages = {
315
315
  couldNotCopyTranscript: "प्रतिलेख कॉपी नहीं किया जा सका",
316
316
  allMeetings: "सभी बैठकें",
317
317
  live: "रहना",
318
- generatingNotesInline: "नोट्स जनरेट कर रहे हैं...",
319
- regenerateNotes: "नोट्स पुन: उत्पन्न करें",
318
+ generatingNotesInline: "सारांश जनरेट कर रहे हैं...",
319
+ regenerateNotes: "सारांश पुन: उत्पन्न करें",
320
320
  share: "शेयर करना",
321
321
  meetingOptions: "मीटिंग के विकल्प",
322
322
  removeMeeting: "मीटिंग हटाएँ",
@@ -329,12 +329,13 @@ const messages = {
329
329
  desktopHint:
330
330
  "नोट्स शुरू करने के लिए, मेनू बार से Clips Desktop खोलें और Start Meeting Notes चुनें, या रिमाइंडर आने पर Start notes पर क्लिक करें। Clips माइक्रोफ़ोन और सिस्टम ऑडियो कैप्चर करके यहां ट्रांसक्रिप्ट लिखता है।",
331
331
  getDesktopApp: "डेस्कटॉप ऐप प्राप्त करें",
332
- generateNotesFailed: "नोट जनरेट नहीं किए जा सके. पुनः प्रयास करें।",
332
+ generateNotesFailed: "सारांश जनरेट नहीं किया जा सका. पुनः प्रयास करें।",
333
333
  attendee_one: "{{count}} सहभागी",
334
334
  attendee_other: "{{count}} उपस्थितगण",
335
335
  joinCall: "कॉल में शामिल हों",
336
336
  myNotes: "मेरे नोट्स",
337
337
  aiNotes: "एआई नोट्स",
338
+ summary: "सारांश",
338
339
  actionItems: "एक्शन आइटम्स",
339
340
  working: "कार्यरत…",
340
341
  noActionItems:
@@ -896,7 +897,7 @@ Clips में उपयोगकर्ताओं को दिखने व
896
897
  unavailable: "यह मीटिंग निजी है या अब उपलब्ध नहीं है।",
897
898
  tryClips: "Clips आज़माएं",
898
899
  attendees: "{{count}} सहभागी",
899
- noAiNotes: "इस मीटिंग के लिए AI नोट्स अभी तक जनरेट नहीं हुए हैं।",
900
+ noAiNotes: "इस मीटिंग के लिए सारांश अभी तक जनरेट नहीं हुआ है।",
900
901
  summary: "सारांश",
901
902
  keyPoints: "मुख्य बिंदु",
902
903
  actionItems: "कार्य आइटम",
@@ -316,7 +316,7 @@ const messages = {
316
316
  unassigned: "未割り当て",
317
317
  them: "彼ら",
318
318
  me: "自分",
319
- regeneratingNotes: "メモの再生成 — 自分のメモは保持されます",
319
+ regeneratingNotes: "要約を再生成中",
320
320
  meetingRemoved: "会議が削除されました",
321
321
  couldNotRemoveMeeting: "会議を削除できませんでした",
322
322
  couldNotLoadMeeting: "この会議を読み込めませんでした。",
@@ -324,8 +324,8 @@ const messages = {
324
324
  couldNotCopyTranscript: "トランスクリプトをコピーできませんでした",
325
325
  allMeetings: "すべての会議",
326
326
  live: "ライブ",
327
- generatingNotesInline: "メモを生成中…",
328
- regenerateNotes: "ノートを再生成する",
327
+ generatingNotesInline: "要約を生成中…",
328
+ regenerateNotes: "要約を再生成する",
329
329
  share: "共有",
330
330
  meetingOptions: "会議オプション",
331
331
  removeMeeting: "会議を削除する",
@@ -339,12 +339,13 @@ const messages = {
339
339
  "メモを開始するには、メニューバーから Clips Desktop を開いて Start Meeting Notes を選ぶか、リマインダーが表示されたら Start notes をクリックします。Clips はマイクとシステム音声を取り込み、ここに文字起こしを書き込みます。",
340
340
  getDesktopApp: "デスクトップアプリを入手",
341
341
  generateNotesFailed:
342
- "メモを生成できませんでした。もう一度やり直してください。",
342
+ "要約を生成できませんでした。もう一度やり直してください。",
343
343
  attendee_one: "{{count}} 出席者",
344
344
  attendee_other: "{{count}} 出席者",
345
345
  joinCall: "通話に参加する",
346
346
  myNotes: "私のメモ",
347
347
  aiNotes: "AIメモ",
348
+ summary: "要約",
348
349
  actionItems: "アクションアイテム",
349
350
  working: "働く…",
350
351
  noActionItems:
@@ -914,7 +915,7 @@ Clips のユーザー向けの主な変更はここに記録されます。コ
914
915
  unavailable: "この会議は非公開、または利用できなくなりました。",
915
916
  tryClips: "Clips を試す",
916
917
  attendees: "{{count}} 人の参加者",
917
- noAiNotes: "この会議の AI メモはまだ生成されていません。",
918
+ noAiNotes: "この会議の要約はまだ生成されていません。",
918
919
  summary: "要約",
919
920
  keyPoints: "重要ポイント",
920
921
  actionItems: "アクション項目",
@@ -312,7 +312,7 @@ const messages = {
312
312
  unassigned: "할당되지 않음",
313
313
  them: "그들을",
314
314
  me: "나",
315
- regeneratingNotes: "메모 재생성 - 자신의 메모가 유지됩니다.",
315
+ regeneratingNotes: "요약 재생성 ",
316
316
  meetingRemoved: "회의가 삭제되었습니다.",
317
317
  couldNotRemoveMeeting: "회의를 삭제할 수 없습니다.",
318
318
  couldNotLoadMeeting: "이 회의를 로드할 수 없습니다.",
@@ -320,8 +320,8 @@ const messages = {
320
320
  couldNotCopyTranscript: "스크립트를 복사할 수 없습니다.",
321
321
  allMeetings: "모든 회의",
322
322
  live: "살다",
323
- generatingNotesInline: "메모 생성 중…",
324
- regenerateNotes: "메모 재생성",
323
+ generatingNotesInline: "요약 생성 중…",
324
+ regenerateNotes: "요약 재생성",
325
325
  share: "공유하다",
326
326
  meetingOptions: "회의 옵션",
327
327
  removeMeeting: "회의 삭제",
@@ -334,12 +334,13 @@ const messages = {
334
334
  desktopHint:
335
335
  "메모를 시작하려면 메뉴 막대에서 Clips Desktop을 열고 Start Meeting Notes를 선택하거나, 알림이 표시되면 Start notes를 클릭하세요. Clips가 마이크와 시스템 오디오를 캡처하고 여기에 기록을 작성합니다.",
336
336
  getDesktopApp: "데스크톱 앱 받기",
337
- generateNotesFailed: "메모를 생성할 수 없습니다. 다시 시도해 보세요.",
337
+ generateNotesFailed: "요약을 생성할 수 없습니다. 다시 시도해 보세요.",
338
338
  attendee_one: "{{count}} 참석자",
339
339
  attendee_other: "{{count}} 참석자",
340
340
  joinCall: "통화에 참여",
341
341
  myNotes: "내 노트",
342
342
  aiNotes: "AI 노트",
343
+ summary: "요약",
343
344
  actionItems: "조치사항",
344
345
  working: "일하고 있는…",
345
346
  noActionItems:
@@ -904,7 +905,7 @@ Clips의 모든 사용자 대상 변경 사항은 여기에 기록됩니다. 명
904
905
  unavailable: "이 회의는 비공개이거나 더 이상 사용할 수 없습니다.",
905
906
  tryClips: "Clips 사용해 보기",
906
907
  attendees: "참석자 {{count}}명",
907
- noAiNotes: "이 회의의 AI 노트가 아직 생성되지 않았습니다.",
908
+ noAiNotes: "이 회의의 요약이 아직 생성되지 않았습니다.",
908
909
  summary: "요약",
909
910
  keyPoints: "핵심 포인트",
910
911
  actionItems: "작업 항목",
@@ -317,7 +317,7 @@ const messages = {
317
317
  unassigned: "Não atribuído",
318
318
  them: "Eles",
319
319
  me: "Meu",
320
- regeneratingNotes: "Regenerando notas — suas próprias notas são mantidas",
320
+ regeneratingNotes: "Regenerando resumo",
321
321
  meetingRemoved: "Reunião removida",
322
322
  couldNotRemoveMeeting: "Não foi possível remover a reunião",
323
323
  couldNotLoadMeeting: "Não foi possível carregar esta reunião.",
@@ -325,8 +325,8 @@ const messages = {
325
325
  couldNotCopyTranscript: "Não foi possível copiar a transcrição",
326
326
  allMeetings: "Todas as reuniões",
327
327
  live: "Ao vivo",
328
- generatingNotesInline: "Gerando notas…",
329
- regenerateNotes: "Regenerar notas",
328
+ generatingNotesInline: "Gerando resumo…",
329
+ regenerateNotes: "Regenerar resumo",
330
330
  share: "Compartilhar",
331
331
  meetingOptions: "Opções de reunião",
332
332
  removeMeeting: "Remover reunião",
@@ -339,12 +339,13 @@ const messages = {
339
339
  desktopHint:
340
340
  "Para iniciar notas, abra o Clips Desktop na barra de menus e escolha Start Meeting Notes, ou clique em Start notes quando o lembrete aparecer. O Clips captura o microfone e o áudio do sistema e escreve a transcrição aqui.",
341
341
  getDesktopApp: "Obtenha o aplicativo para desktop",
342
- generateNotesFailed: "Não foi possível gerar notas. Tente novamente.",
342
+ generateNotesFailed: "Não foi possível gerar o resumo. Tente novamente.",
343
343
  attendee_one: "participante {{count}}",
344
344
  attendee_other: "participantes {{count}}",
345
345
  joinCall: "Participar da chamada",
346
346
  myNotes: "Minhas anotações",
347
347
  aiNotes: "Notas de IA",
348
+ summary: "Resumo",
348
349
  actionItems: "Itens de ação",
349
350
  working: "Trabalhando…",
350
351
  noActionItems:
@@ -921,7 +922,7 @@ Todas as mudanças visíveis para usuários do Clips são documentadas aqui. Voc
921
922
  unavailable: "Esta reunião é privada ou não está mais disponível.",
922
923
  tryClips: "Experimentar Clips",
923
924
  attendees: "{{count}} participantes",
924
- noAiNotes: "As notas de IA ainda não foram geradas para esta reunião.",
925
+ noAiNotes: "Um resumo ainda não foi gerado para esta reunião.",
925
926
  summary: "Resumo",
926
927
  keyPoints: "Pontos principais",
927
928
  actionItems: "Itens de ação",
@@ -299,7 +299,7 @@ const messages = {
299
299
  unassigned: "未分配",
300
300
  them: "他们",
301
301
  me: "我",
302
- regeneratingNotes: "重新生成笔记——保留您自己的笔记",
302
+ regeneratingNotes: "正在重新生成摘要",
303
303
  meetingRemoved: "会议已删除",
304
304
  couldNotRemoveMeeting: "无法删除会议",
305
305
  couldNotLoadMeeting: "无法加载该会议。",
@@ -307,8 +307,8 @@ const messages = {
307
307
  couldNotCopyTranscript: "无法复制成绩单",
308
308
  allMeetings: "所有会议",
309
309
  live: "居住",
310
- generatingNotesInline: "正在生成笔记...",
311
- regenerateNotes: "重新生成笔记",
310
+ generatingNotesInline: "正在生成摘要...",
311
+ regenerateNotes: "重新生成摘要",
312
312
  share: "分享",
313
313
  meetingOptions: "会议选项",
314
314
  removeMeeting: "删除会议",
@@ -321,12 +321,13 @@ const messages = {
321
321
  desktopHint:
322
322
  "要开始记录,请从菜单栏打开 Clips Desktop 并选择 Start Meeting Notes,或在提醒出现时点击 Start notes。Clips 会捕获麦克风和系统音频,并在这里写入文字记录。",
323
323
  getDesktopApp: "获取桌面应用程序",
324
- generateNotesFailed: "无法生成笔记。再试一次。",
324
+ generateNotesFailed: "无法生成摘要。再试一次。",
325
325
  attendee_one: "{{count}} 与会者",
326
326
  attendee_other: "{{count}} 与会者",
327
327
  joinCall: "加入通话",
328
328
  myNotes: "我的笔记",
329
329
  aiNotes: "人工智能笔记",
330
+ summary: "摘要",
330
331
  actionItems: "行动项目",
331
332
  working: "在职的…",
332
333
  noActionItems: "还没有行动项目。从记录生成笔记后,它们会出现在此处。",
@@ -867,7 +868,7 @@ Clips 中所有面向用户的重要更改都会记录在这里。你可以随
867
868
  unavailable: "此会议是私密的或不再可用。",
868
869
  tryClips: "试用 Clips",
869
870
  attendees: "{{count}} 位参会者",
870
- noAiNotes: "此会议尚未生成 AI 笔记。",
871
+ noAiNotes: "此会议尚未生成摘要。",
871
872
  summary: "摘要",
872
873
  keyPoints: "要点",
873
874
  actionItems: "行动项",
@@ -299,7 +299,7 @@ const messages = {
299
299
  unassigned: "未指派",
300
300
  them: "他們",
301
301
  me: "我",
302
- regeneratingNotes: "正在重新產生筆記,並保留您自己的筆記",
302
+ regeneratingNotes: "正在重新產生摘要",
303
303
  meetingRemoved: "會議已刪除",
304
304
  couldNotRemoveMeeting: "無法刪除會議",
305
305
  couldNotLoadMeeting: "無法載入該會議。",
@@ -307,8 +307,8 @@ const messages = {
307
307
  couldNotCopyTranscript: "無法複製逐字稿",
308
308
  allMeetings: "所有會議",
309
309
  live: "即時",
310
- generatingNotesInline: "正在產生筆記...",
311
- regenerateNotes: "重新產生筆記",
310
+ generatingNotesInline: "正在產生摘要...",
311
+ regenerateNotes: "重新產生摘要",
312
312
  share: "分享",
313
313
  meetingOptions: "會議選項",
314
314
  removeMeeting: "刪除會議",
@@ -321,12 +321,13 @@ const messages = {
321
321
  desktopHint:
322
322
  "若要開始筆記,請從選單列開啟 Clips Desktop 並選擇 Start Meeting Notes,或在提醒出現時按 Start notes。Clips 會擷取麥克風和系統音訊,並在這裡寫入逐字稿。",
323
323
  getDesktopApp: "取得桌面應用程式",
324
- generateNotesFailed: "無法產生筆記。請再試一次。",
324
+ generateNotesFailed: "無法產生摘要。請再試一次。",
325
325
  attendee_one: "{{count}} 與會者",
326
326
  attendee_other: "{{count}} 與會者",
327
327
  joinCall: "加入通話",
328
328
  myNotes: "我的筆記",
329
329
  aiNotes: "AI 筆記",
330
+ summary: "摘要",
330
331
  actionItems: "行動項目",
331
332
  working: "處理中…",
332
333
  noActionItems: "還沒有行動項目。從逐字稿產生筆記後,它們會出現在此處。",
@@ -860,7 +861,7 @@ const messages = {
860
861
  unavailable: "此會議是私密的或不再可用。",
861
862
  tryClips: "試用 Clips",
862
863
  attendees: "{{count}} 位與會者",
863
- noAiNotes: "此會議尚未產生 AI 筆記。",
864
+ noAiNotes: "此會議尚未產生摘要。",
864
865
  summary: "摘要",
865
866
  keyPoints: "要點",
866
867
  actionItems: "行動項",
@@ -9,16 +9,16 @@ import {
9
9
  IconClock,
10
10
  IconCopy,
11
11
  IconDeviceDesktop,
12
- IconDots,
12
+ IconDotsVertical,
13
13
  IconEdit,
14
14
  IconExternalLink,
15
15
  IconLoader2,
16
16
  IconNotes,
17
17
  IconPlayerStop,
18
+ IconRefresh,
18
19
  IconShare3,
19
20
  IconTrash,
20
21
  IconUsers,
21
- IconWand,
22
22
  } from "@tabler/icons-react";
23
23
  import { useQueryClient } from "@tanstack/react-query";
24
24
  import { useEffect, useMemo, useRef, useState } from "react";
@@ -60,7 +60,6 @@ import {
60
60
  DropdownMenuTrigger,
61
61
  } from "@/components/ui/dropdown-menu";
62
62
  import { Skeleton } from "@/components/ui/skeleton";
63
- import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
64
63
  import {
65
64
  Tooltip,
66
65
  TooltipContent,
@@ -123,14 +122,6 @@ function formatDateTime(iso?: string | null): string {
123
122
  }
124
123
  }
125
124
 
126
- function formatDurationMs(ms?: number | null): string {
127
- if (!ms || ms <= 0) return "";
128
- const total = Math.round(ms / 1000);
129
- const m = Math.floor(total / 60);
130
- const s = total % 60;
131
- return `${m}:${s.toString().padStart(2, "0")}`;
132
- }
133
-
134
125
  function TitleEditor({
135
126
  value,
136
127
  onChange,
@@ -482,12 +473,6 @@ export default function MeetingDetailRoute() {
482
473
  updateMeeting.mutate({ id: meeting.id, summaryMd: next });
483
474
  };
484
475
 
485
- const handleUserNotesChange = (next: string) => {
486
- if (!meeting) return;
487
- patchCachedMeeting({ userNotesMd: next });
488
- updateMeeting.mutate({ id: meeting.id, userNotesMd: next });
489
- };
490
-
491
476
  const handleToggleActionItem = (index: number, completed: boolean) => {
492
477
  if (!meeting) return;
493
478
  const items = meeting.actionItemsJson ?? [];
@@ -517,7 +502,7 @@ export default function MeetingDetailRoute() {
517
502
 
518
503
  const handleFinalize = () => {
519
504
  if (!meeting) return;
520
- // "My notes" (userNotesMd) is a separate field and is untouched by
505
+ // User-authored notes (userNotesMd) are separate and untouched by
521
506
  // regeneration; only the AI summary/bullets are overwritten. Reassure
522
507
  // the user their own notes are kept.
523
508
  if (hasNotes) {
@@ -626,7 +611,8 @@ export default function MeetingDetailRoute() {
626
611
  const bullets = meeting.bulletsJson ?? [];
627
612
  const actionItems = meeting.actionItemsJson ?? [];
628
613
  const segments = meeting.segmentsJson ?? [];
629
- const recordingDuration = formatDurationMs(meeting.recordingDurationMs);
614
+ const hasSummary =
615
+ !!meeting.summaryMd || bullets.length > 0 || actionItems.length > 0;
630
616
 
631
617
  const handleCopyTranscript = async () => {
632
618
  if (!segments.length) return;
@@ -647,7 +633,7 @@ export default function MeetingDetailRoute() {
647
633
  };
648
634
 
649
635
  return (
650
- <div className="p-6 max-w-6xl mx-auto w-full flex flex-col min-h-0 flex-1">
636
+ <div className="p-6 max-w-6xl mx-auto w-full flex flex-col min-h-0 flex-1 lg:h-full lg:overflow-hidden">
651
637
  <PageHeader>
652
638
  <Tooltip>
653
639
  <TooltipTrigger asChild>
@@ -692,15 +678,6 @@ export default function MeetingDetailRoute() {
692
678
  <IconLoader2 className="h-3.5 w-3.5 animate-spin" />
693
679
  {t("meetingDetail.generatingNotesInline")}
694
680
  </span>
695
- ) : hasNotes ? (
696
- <Button
697
- size="sm"
698
- variant="ghost"
699
- onClick={handleFinalize}
700
- className="cursor-pointer h-8"
701
- >
702
- {t("meetingDetail.regenerateNotes")}
703
- </Button>
704
681
  ) : null}
705
682
  <ShareMeetingPopover
706
683
  meetingId={meeting.id}
@@ -721,10 +698,16 @@ export default function MeetingDetailRoute() {
721
698
  className="h-8 w-8 cursor-pointer"
722
699
  aria-label={t("meetingDetail.meetingOptions")}
723
700
  >
724
- <IconDots className="h-4 w-4" />
701
+ <IconDotsVertical className="h-4 w-4" />
725
702
  </Button>
726
703
  </DropdownMenuTrigger>
727
704
  <DropdownMenuContent align="end" className="w-44">
705
+ {hasSummary && !finalize.isPending && (
706
+ <DropdownMenuItem onSelect={handleFinalize}>
707
+ <IconRefresh className="mr-2 h-4 w-4" />
708
+ {t("meetingDetail.regenerateNotes")}
709
+ </DropdownMenuItem>
710
+ )}
728
711
  {isLive && (
729
712
  <DropdownMenuItem
730
713
  onSelect={(event) => {
@@ -869,94 +852,51 @@ export default function MeetingDetailRoute() {
869
852
  )}
870
853
  </div>
871
854
 
872
- <div className="clips-meeting-detail-grid grid grid-cols-1 gap-6 flex-1 min-h-0">
873
- {/* Two-tone canvas: user notes (black) + AI summary/bullets (gray) */}
855
+ <div className="clips-meeting-detail-grid grid grid-cols-1 gap-6 flex-1 min-h-0 lg:overflow-hidden">
856
+ {/* Summary canvas with generated bullets and action items. */}
874
857
  <div
875
858
  className={cn(
876
859
  "clips-meeting-notes-panel rounded-lg border border-border bg-background min-h-[480px] overflow-hidden flex flex-col",
877
860
  notesJustArrived && "animate-in fade-in duration-500",
878
861
  )}
879
862
  >
880
- <Tabs
881
- defaultValue="notes"
882
- className="flex min-h-0 flex-1 flex-col gap-0"
883
- >
884
- <div className="flex shrink-0 items-center justify-between gap-2 border-b border-border px-3 py-2">
885
- <TabsList className="h-8 gap-1 bg-transparent p-0">
886
- <TabsTrigger
887
- value="notes"
888
- className="h-7 px-2.5 text-xs data-[state=active]:bg-muted"
889
- >
890
- {t("meetingDetail.myNotes")}
891
- </TabsTrigger>
892
- <TabsTrigger
893
- value="ai"
894
- className="h-7 gap-1 px-2.5 text-xs data-[state=active]:bg-muted"
895
- >
896
- <IconWand className="h-3 w-3" />
897
- {t("meetingDetail.aiNotes")}
898
- </TabsTrigger>
899
- <TabsTrigger
900
- value="actions"
901
- className="h-7 px-2.5 text-xs data-[state=active]:bg-muted"
902
- >
903
- {t("meetingDetail.actionItems")}
904
- {actionItems.length > 0 && (
905
- <span className="ml-1 text-muted-foreground">
906
- {actionItems.length}
907
- </span>
908
- )}
909
- </TabsTrigger>
910
- </TabsList>
911
- {finalize.isPending && (
912
- <span className="flex items-center gap-1 text-[10px] text-muted-foreground">
913
- <IconLoader2 className="h-3 w-3 animate-spin" />
914
- {t("meetingDetail.working")}
915
- </span>
916
- )}
863
+ <div className="flex shrink-0 items-center justify-between gap-2 border-b border-border px-4 py-2.5">
864
+ <div className="text-xs font-medium">
865
+ {t("meetingDetail.summary")}
917
866
  </div>
867
+ {finalize.isPending && (
868
+ <span className="flex items-center gap-1 text-[10px] text-muted-foreground">
869
+ <IconLoader2 className="h-3 w-3 animate-spin" />
870
+ {t("meetingDetail.working")}
871
+ </span>
872
+ )}
873
+ </div>
918
874
 
919
- <TabsContent
920
- value="notes"
921
- className="mt-0 min-h-0 flex-1 overflow-y-auto"
922
- >
923
- <CanvasEditor
924
- view="user"
925
- userNotesMd={meeting.userNotesMd ?? ""}
926
- onUserNotesChange={handleUserNotesChange}
927
- readOnly={!canEdit}
928
- />
929
- </TabsContent>
930
-
931
- <TabsContent
932
- value="ai"
933
- className="mt-0 min-h-0 flex-1 overflow-y-auto"
934
- >
935
- <CanvasEditor
936
- view="ai"
937
- summaryMd={meeting.summaryMd ?? ""}
938
- bullets={bullets.map((b) => b.text)}
939
- onSummaryChange={handleSummaryChange}
940
- readOnly={!canEdit}
941
- renderBullet={(b) => (
942
- <BulletLink
943
- bullet={b}
944
- segments={segments}
945
- onJumpTo={handleJumpToSegment}
946
- >
947
- <div className="flex gap-2 text-sm leading-relaxed text-muted-foreground">
948
- <span>•</span>
949
- <span className="flex-1">{b}</span>
950
- </div>
951
- </BulletLink>
952
- )}
953
- />
954
- </TabsContent>
875
+ <div className="min-h-0 flex-1 overflow-y-auto">
876
+ <CanvasEditor
877
+ view="ai"
878
+ summaryMd={meeting.summaryMd ?? ""}
879
+ bullets={bullets.map((b) => b.text)}
880
+ onSummaryChange={handleSummaryChange}
881
+ readOnly={!canEdit}
882
+ renderBullet={(b) => (
883
+ <BulletLink
884
+ bullet={b}
885
+ segments={segments}
886
+ onJumpTo={handleJumpToSegment}
887
+ >
888
+ <div className="flex gap-2 text-sm leading-relaxed text-muted-foreground">
889
+ <span>•</span>
890
+ <span className="flex-1">{b}</span>
891
+ </div>
892
+ </BulletLink>
893
+ )}
894
+ />
955
895
 
956
- <TabsContent
957
- value="actions"
958
- className="mt-0 min-h-0 flex-1 overflow-y-auto px-6 py-4"
959
- >
896
+ <div className="max-w-2xl px-6 pb-6">
897
+ <div className="mb-3 text-xs font-medium">
898
+ {t("meetingDetail.actionItems")}
899
+ </div>
960
900
  {actionItems.length > 0 ? (
961
901
  <ActionItemsByPerson
962
902
  items={actionItems}
@@ -968,8 +908,8 @@ export default function MeetingDetailRoute() {
968
908
  {t("meetingDetail.noActionItems")}
969
909
  </p>
970
910
  )}
971
- </TabsContent>
972
- </Tabs>
911
+ </div>
912
+ </div>
973
913
  </div>
974
914
 
975
915
  {/* Transcript pane — chat-bubble layout */}
@@ -980,13 +920,6 @@ export default function MeetingDetailRoute() {
980
920
  {t("meetingDetail.transcript")}
981
921
  </div>
982
922
  <div className="flex items-center gap-2">
983
- {meeting.transcriptStatus === "ready" && (
984
- <span className="text-[10px] text-muted-foreground">
985
- {t("meetingDetail.segments", {
986
- count: segments.length,
987
- })}
988
- </span>
989
- )}
990
923
  {segments.length > 0 && (
991
924
  <Tooltip>
992
925
  <TooltipTrigger asChild>
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-08
4
+ ---
5
+
6
+ Desktop meeting notes stay active when you open the tray or shortcut controls, and the stop action targets the live meeting.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-08
4
+ ---
5
+
6
+ Meeting reminders in the desktop popover can start notes and join the call in one click.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-08
4
+ ---
5
+
6
+ Hosted clip uploads now clear failed buffered chunks and require connected storage before saving thumbnails.