@agent-native/core 0.92.0 → 0.92.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 (375) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/core/CHANGELOG.md +20 -0
  3. package/corpus/core/package.json +1 -1
  4. package/corpus/core/src/application-state/store.ts +12 -1
  5. package/corpus/core/src/cli/sync-builder-starter-manifest.ts +29 -1
  6. package/corpus/core/src/client/AssistantChat.tsx +27 -14
  7. package/corpus/core/src/client/PoweredByBadge.tsx +1 -8
  8. package/corpus/core/src/client/agent-chat-adapter.ts +37 -10
  9. package/corpus/core/src/client/chat/widgets/DataTableWidget.tsx +52 -1
  10. package/corpus/core/src/client/db-admin/TableEditor.tsx +49 -0
  11. package/corpus/core/src/client/db-admin/export-utils.ts +13 -4
  12. package/corpus/core/src/client/db-admin/useAgentSync.ts +72 -0
  13. package/corpus/core/src/client/error-capture.ts +69 -7
  14. package/corpus/core/src/client/extensions/EmbeddedExtension.tsx +5 -1
  15. package/corpus/core/src/client/extensions/ExtensionViewer.tsx +53 -8
  16. package/corpus/core/src/client/extensions/InlineExtensionFrame.tsx +5 -1
  17. package/corpus/core/src/client/extensions/portable-extension.ts +1 -0
  18. package/corpus/core/src/client/org/OrgSwitcher.tsx +12 -9
  19. package/corpus/core/src/client/org/TeamPage.tsx +77 -71
  20. package/corpus/core/src/client/settings/SettingsPanel.tsx +205 -52
  21. package/corpus/core/src/client/settings/SettingsSection.tsx +8 -1
  22. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +25 -9
  23. package/corpus/core/src/db-admin/agent-tools.ts +8 -2
  24. package/corpus/core/src/db-admin/operations.ts +116 -4
  25. package/corpus/core/src/db-admin/routes.ts +1 -0
  26. package/corpus/core/src/db-admin/types.ts +4 -0
  27. package/corpus/core/src/extensions/html-shell.ts +5 -4
  28. package/corpus/core/src/extensions/routes.ts +10 -0
  29. package/corpus/core/src/navigation/index.ts +1 -1
  30. package/corpus/core/src/notifications/channels.ts +1 -22
  31. package/corpus/core/src/resources/handlers.ts +10 -8
  32. package/corpus/core/src/server/poll.ts +293 -8
  33. package/corpus/core/src/styles/agent-native.css +27 -0
  34. package/corpus/core/src/templates/default/.agents/skills/actions/SKILL.md +5 -0
  35. package/corpus/core/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  36. package/corpus/core/src/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
  37. package/corpus/core/src/templates/default/.agents/skills/security/SKILL.md +7 -0
  38. package/corpus/core/src/templates/default/.agents/skills/storing-data/SKILL.md +5 -1
  39. package/corpus/core/src/templates/default/AGENTS.md +4 -2
  40. package/corpus/core/src/templates/headless/AGENTS.md +4 -0
  41. package/corpus/core/src/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -0
  42. package/corpus/core/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  43. package/corpus/core/src/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +4 -0
  44. package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +6 -0
  45. package/corpus/core/src/templates/workspace-core/.agents/skills/performance/SKILL.md +4 -0
  46. package/corpus/core/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
  47. package/corpus/core/src/templates/workspace-core/.agents/skills/security/SKILL.md +7 -0
  48. package/corpus/core/src/templates/workspace-core/.agents/skills/storing-data/SKILL.md +5 -1
  49. package/corpus/core/src/templates/workspace-core/AGENTS.md +7 -1
  50. package/corpus/core/src/templates/workspace-root/AGENTS.md +7 -1
  51. package/corpus/templates/analytics/.agents/skills/actions/SKILL.md +5 -0
  52. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +10 -0
  53. package/corpus/templates/analytics/.agents/skills/real-time-sync/SKILL.md +1 -1
  54. package/corpus/templates/analytics/.agents/skills/security/SKILL.md +7 -0
  55. package/corpus/templates/analytics/.agents/skills/storing-data/SKILL.md +5 -1
  56. package/corpus/templates/analytics/AGENTS.md +33 -14
  57. package/corpus/templates/analytics/actions/capture-test-error.ts +4 -0
  58. package/corpus/templates/analytics/actions/get-analytics-alert-rule-defaults.ts +23 -0
  59. package/corpus/templates/analytics/actions/get-error-issue.ts +1 -1
  60. package/corpus/templates/analytics/actions/list-analysis-revisions.ts +40 -0
  61. package/corpus/templates/analytics/actions/list-dashboard-revisions.ts +40 -0
  62. package/corpus/templates/analytics/actions/list-dashboard-usage-stats.ts +299 -0
  63. package/corpus/templates/analytics/actions/navigate.ts +4 -2
  64. package/corpus/templates/analytics/actions/restore-analysis-revision.ts +43 -0
  65. package/corpus/templates/analytics/actions/restore-dashboard-revision.ts +68 -0
  66. package/corpus/templates/analytics/actions/save-analytics-alert-rule.ts +14 -0
  67. package/corpus/templates/analytics/actions/save-monitor.ts +1 -1
  68. package/corpus/templates/analytics/actions/view-screen.ts +24 -0
  69. package/corpus/templates/analytics/app/components/analysis/AnalysisHistoryPanel.tsx +181 -0
  70. package/corpus/templates/analytics/app/components/dashboard/DashboardHistoryPanel.tsx +184 -0
  71. package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +22 -16
  72. package/corpus/templates/analytics/app/components/layout/Header.tsx +1 -1
  73. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +27 -21
  74. package/corpus/templates/analytics/app/hooks/use-analysis-revisions.ts +43 -0
  75. package/corpus/templates/analytics/app/hooks/use-dashboard-chat-context.ts +110 -0
  76. package/corpus/templates/analytics/app/hooks/use-dashboard-revisions.ts +43 -0
  77. package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +8 -3
  78. package/corpus/templates/analytics/app/i18n/zh-TW.ts +64 -2
  79. package/corpus/templates/analytics/app/i18n-data.ts +783 -3
  80. package/corpus/templates/analytics/app/pages/Agents.tsx +359 -19
  81. package/corpus/templates/analytics/app/pages/Settings.tsx +3 -2
  82. package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +34 -1
  83. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +28 -0
  84. package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +18 -1
  85. package/corpus/templates/analytics/app/pages/monitoring/ErrorsPanel.tsx +7 -10
  86. package/corpus/templates/analytics/app/pages/monitoring/errors/IssueDetail.tsx +479 -23
  87. package/corpus/templates/analytics/app/pages/monitoring/errors/IssueList.tsx +0 -9
  88. package/corpus/templates/analytics/app/pages/monitoring/errors/i18n.ts +11 -0
  89. package/corpus/templates/analytics/app/pages/monitoring/errors/types.ts +9 -1
  90. package/corpus/templates/analytics/app/pages/monitoring/uptime/MonitorFormPage.tsx +6 -3
  91. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +26 -30
  92. package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +9 -99
  93. package/corpus/templates/analytics/app/pages/settings/AlertRulesSettingsCard.tsx +262 -104
  94. package/corpus/templates/analytics/app/routes/team.tsx +1 -1
  95. package/corpus/templates/analytics/changelog/2026-07-08-admins-can-audit-dashboard-usage-ownership-and-cleanup-signa.md +6 -0
  96. package/corpus/templates/analytics/changelog/2026-07-08-agent-monitoring-stays-available-to-non-admins.md +6 -0
  97. package/corpus/templates/analytics/changelog/2026-07-08-alert-emails-now-show-the-message-without-raw-metadata-json.md +6 -0
  98. package/corpus/templates/analytics/changelog/2026-07-08-alert-rules-are-easier-to-scan-expand-and-edit-from-settings.md +6 -0
  99. package/corpus/templates/analytics/changelog/2026-07-08-analytics-alert-forms-remember-last-email-recipients.md +6 -0
  100. package/corpus/templates/analytics/changelog/2026-07-08-analytics-alert-rules-can-now-use-per-rule-slack-and-webhook.md +6 -0
  101. package/corpus/templates/analytics/changelog/2026-07-08-dashboard-history-and-chat-context.md +5 -0
  102. package/corpus/templates/analytics/changelog/2026-07-08-dashboard-usage-now-counts-explorer-dashboard-traffic.md +6 -0
  103. package/corpus/templates/analytics/changelog/2026-07-08-demo-mode-session-emails-are-filtered-and-anonymized.md +6 -0
  104. package/corpus/templates/analytics/changelog/2026-07-08-error-issue-detail-adds-stack-traces-and-frequency-bars.md +6 -0
  105. package/corpus/templates/analytics/changelog/2026-07-08-error-issue-detail-now-shows-the-latest-occurrence-message-a.md +6 -0
  106. package/corpus/templates/analytics/changelog/2026-07-08-monitoring-errors-only-show-test-action-when-empty.md +6 -0
  107. package/corpus/templates/analytics/changelog/2026-07-08-production-session-replay-now-requires-private-blob-storage-.md +6 -0
  108. package/corpus/templates/analytics/changelog/2026-07-08-shared-extension-links-now-show-a-clear-message-when-you-do-.md +6 -0
  109. package/corpus/templates/analytics/changelog/2026-07-08-team-settings-show-access-controls-next-to-member-lists.md +6 -0
  110. package/corpus/templates/analytics/changelog/2026-07-08-uptime-checks-no-longer-count-ssrf-setup-time-against-the-re.md +6 -0
  111. package/corpus/templates/analytics/changelog/2026-07-08-uptime-checks-reuse-one-keep-alive-connection-so-recorded-la.md +6 -0
  112. package/corpus/templates/analytics/changelog/2026-07-08-uptime-monitors-now-confirm-transient-timeout-failures-befor.md +6 -0
  113. package/corpus/templates/analytics/changelog/2026-07-08-uptime-monitors-now-use-a-10-second-request-timeout-by-defau.md +6 -0
  114. package/corpus/templates/analytics/docs/uptime-monitoring.md +30 -18
  115. package/corpus/templates/analytics/server/db/schema-monitoring.ts +1 -1
  116. package/corpus/templates/analytics/server/db/schema.ts +56 -0
  117. package/corpus/templates/analytics/server/lib/analytics-alerts.ts +92 -0
  118. package/corpus/templates/analytics/server/lib/dashboards-store.ts +334 -5
  119. package/corpus/templates/analytics/server/lib/error-capture.ts +231 -36
  120. package/corpus/templates/analytics/server/lib/session-replay.ts +114 -8
  121. package/corpus/templates/analytics/server/lib/uptime-monitors.ts +244 -33
  122. package/corpus/templates/analytics/server/plugins/db.ts +112 -2
  123. package/corpus/templates/analytics/server/routes/api/dashboard-agent-context.json.get.ts +1 -0
  124. package/corpus/templates/assets/.agents/skills/actions/SKILL.md +5 -0
  125. package/corpus/templates/assets/.agents/skills/real-time-sync/SKILL.md +1 -1
  126. package/corpus/templates/assets/.agents/skills/security/SKILL.md +7 -0
  127. package/corpus/templates/assets/.agents/skills/storing-data/SKILL.md +5 -1
  128. package/corpus/templates/assets/AGENTS.md +4 -0
  129. package/corpus/templates/assets/app/routes/settings.tsx +1 -1
  130. package/corpus/templates/assets/app/routes/team.tsx +1 -1
  131. package/corpus/templates/brain/.agents/skills/actions/SKILL.md +5 -0
  132. package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +5 -0
  133. package/corpus/templates/brain/.agents/skills/real-time-sync/SKILL.md +1 -1
  134. package/corpus/templates/brain/.agents/skills/security/SKILL.md +7 -0
  135. package/corpus/templates/brain/AGENTS.md +4 -0
  136. package/corpus/templates/brain/app/routes/team.tsx +1 -1
  137. package/corpus/templates/calendar/.agents/skills/actions/SKILL.md +5 -0
  138. package/corpus/templates/calendar/.agents/skills/real-time-sync/SKILL.md +1 -1
  139. package/corpus/templates/calendar/.agents/skills/security/SKILL.md +7 -0
  140. package/corpus/templates/calendar/.agents/skills/storing-data/SKILL.md +5 -1
  141. package/corpus/templates/calendar/AGENTS.md +4 -0
  142. package/corpus/templates/calendar/app/components/calendar/DayView.tsx +11 -2
  143. package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +21 -8
  144. package/corpus/templates/calendar/app/components/calendar/MonthView.tsx +7 -1
  145. package/corpus/templates/calendar/app/components/calendar/WeekView.tsx +11 -2
  146. package/corpus/templates/calendar/app/lib/popover-click-guard.ts +48 -4
  147. package/corpus/templates/calendar/app/pages/Settings.tsx +1 -1
  148. package/corpus/templates/calendar/app/routes/_app.team.tsx +1 -1
  149. package/corpus/templates/calendar/changelog/2026-07-08-clicking-empty-calendar-space-closes-an-open-event-popover-b.md +6 -0
  150. package/corpus/templates/chat/.agents/skills/actions/SKILL.md +5 -0
  151. package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +5 -0
  152. package/corpus/templates/chat/.agents/skills/real-time-sync/SKILL.md +1 -1
  153. package/corpus/templates/chat/.agents/skills/security/SKILL.md +7 -0
  154. package/corpus/templates/chat/AGENTS.md +4 -0
  155. package/corpus/templates/chat/app/hooks/use-navigation-state.ts +1 -1
  156. package/corpus/templates/chat/app/routes/settings.tsx +2 -2
  157. package/corpus/templates/chat/app/routes/team.tsx +1 -1
  158. package/corpus/templates/clips/.agents/skills/actions/SKILL.md +5 -0
  159. package/corpus/templates/clips/.agents/skills/security/SKILL.md +7 -0
  160. package/corpus/templates/clips/AGENTS.md +4 -0
  161. package/corpus/templates/clips/actions/finalize-recording.ts +9 -3
  162. package/corpus/templates/clips/actions/set-thumbnail.ts +11 -2
  163. package/corpus/templates/clips/app/components/meetings/canvas-editor.tsx +1 -7
  164. package/corpus/templates/clips/app/components/player/player-controls.tsx +21 -13
  165. package/corpus/templates/clips/app/components/player/video-player.tsx +30 -75
  166. package/corpus/templates/clips/app/i18n/ar-SA.ts +6 -5
  167. package/corpus/templates/clips/app/i18n/de-DE.ts +6 -6
  168. package/corpus/templates/clips/app/i18n/en-US.ts +6 -5
  169. package/corpus/templates/clips/app/i18n/es-ES.ts +6 -5
  170. package/corpus/templates/clips/app/i18n/fr-FR.ts +6 -6
  171. package/corpus/templates/clips/app/i18n/hi-IN.ts +6 -5
  172. package/corpus/templates/clips/app/i18n/ja-JP.ts +6 -5
  173. package/corpus/templates/clips/app/i18n/ko-KR.ts +6 -5
  174. package/corpus/templates/clips/app/i18n/pt-BR.ts +6 -5
  175. package/corpus/templates/clips/app/i18n/zh-CN.ts +6 -5
  176. package/corpus/templates/clips/app/i18n/zh-TW.ts +6 -5
  177. package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +51 -118
  178. package/corpus/templates/clips/changelog/2026-07-08-hosted-clip-uploads-now-clear-failed-buffered-chunks.md +6 -0
  179. package/corpus/templates/clips/changelog/2026-07-08-hosted-recording-uploads-now-avoid-sql-chunk-storage.md +6 -0
  180. package/corpus/templates/clips/changelog/2026-07-08-meeting-recaps-now-keep-summaries-action-items-and-transcrip.md +6 -0
  181. package/corpus/templates/clips/changelog/2026-07-08-video-playback-controls-now-match-loom-style-5-second-skips-.md +6 -0
  182. package/corpus/templates/clips/server/lib/recording-upload-state.ts +63 -0
  183. package/corpus/templates/clips/server/lib/video-storage.ts +4 -0
  184. package/corpus/templates/clips/server/routes/api/recordings/[recordingId]/thumbnail.post.ts +19 -13
  185. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +40 -1
  186. package/corpus/templates/content/.agents/skills/actions/SKILL.md +5 -0
  187. package/corpus/templates/content/.agents/skills/real-time-sync/SKILL.md +1 -1
  188. package/corpus/templates/content/.agents/skills/security/SKILL.md +7 -0
  189. package/corpus/templates/content/.agents/skills/storing-data/SKILL.md +5 -1
  190. package/corpus/templates/content/AGENTS.md +4 -0
  191. package/corpus/templates/content/app/routes/_app.settings.tsx +2 -2
  192. package/corpus/templates/content/app/routes/_app.team.tsx +1 -1
  193. package/corpus/templates/design/.agents/skills/actions/SKILL.md +5 -0
  194. package/corpus/templates/design/.agents/skills/security/SKILL.md +7 -0
  195. package/corpus/templates/design/AGENTS.md +4 -0
  196. package/corpus/templates/design/actions/take-design-screenshot.ts +12 -9
  197. package/corpus/templates/design/app/components/design/inspector/ImageFillControls.tsx +57 -13
  198. package/corpus/templates/design/app/routes/team.tsx +1 -1
  199. package/corpus/templates/design/changelog/2026-07-08-local-images-added-to-designs-now-upload-to-file-storage-ins.md +6 -0
  200. package/corpus/templates/dispatch/.agents/skills/actions/SKILL.md +5 -0
  201. package/corpus/templates/dispatch/.agents/skills/security/SKILL.md +7 -0
  202. package/corpus/templates/dispatch/AGENTS.md +4 -0
  203. package/corpus/templates/dispatch/app/hooks/use-navigation-state.ts +1 -1
  204. package/corpus/templates/dispatch/app/routes/settings.tsx +2 -2
  205. package/corpus/templates/dispatch/app/routes/team.tsx +1 -1
  206. package/corpus/templates/forms/.agents/skills/actions/SKILL.md +5 -0
  207. package/corpus/templates/forms/.agents/skills/real-time-sync/SKILL.md +1 -1
  208. package/corpus/templates/forms/.agents/skills/security/SKILL.md +7 -0
  209. package/corpus/templates/forms/.agents/skills/storing-data/SKILL.md +5 -1
  210. package/corpus/templates/forms/AGENTS.md +4 -0
  211. package/corpus/templates/forms/app/routes/_app.settings.tsx +2 -2
  212. package/corpus/templates/forms/app/routes/_app.team.tsx +1 -1
  213. package/corpus/templates/forms/shared/navigation.ts +1 -1
  214. package/corpus/templates/macros/.agents/skills/security/SKILL.md +7 -0
  215. package/corpus/templates/macros/AGENTS.md +4 -0
  216. package/corpus/templates/macros/app/routes/settings.tsx +2 -2
  217. package/corpus/templates/macros/app/routes/team.tsx +1 -1
  218. package/corpus/templates/mail/.agents/skills/actions/SKILL.md +5 -0
  219. package/corpus/templates/mail/.agents/skills/email-drafts/SKILL.md +1 -1
  220. package/corpus/templates/mail/.agents/skills/real-time-sync/SKILL.md +1 -1
  221. package/corpus/templates/mail/.agents/skills/security/SKILL.md +7 -0
  222. package/corpus/templates/mail/.agents/skills/storing-data/SKILL.md +5 -1
  223. package/corpus/templates/mail/AGENTS.md +4 -0
  224. package/corpus/templates/mail/changelog/2026-07-08-mail-attachments-in-hosted-environments-now-require-file-sto.md +6 -0
  225. package/corpus/templates/mail/server/handlers/media.ts +26 -1
  226. package/corpus/templates/mail/server/lib/outgoing-email.ts +24 -1
  227. package/corpus/templates/mail/server/lib/upload-store.ts +2 -1
  228. package/corpus/templates/plan/.agents/skills/actions/SKILL.md +5 -0
  229. package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +5 -0
  230. package/corpus/templates/plan/.agents/skills/real-time-sync/SKILL.md +1 -1
  231. package/corpus/templates/plan/.agents/skills/security/SKILL.md +7 -0
  232. package/corpus/templates/plan/AGENTS.md +4 -0
  233. package/corpus/templates/plan/app/hooks/use-navigation-state.ts +1 -1
  234. package/corpus/templates/plan/app/routes/settings.tsx +2 -2
  235. package/corpus/templates/plan/app/routes/team.tsx +1 -1
  236. package/corpus/templates/plan/changelog/2026-07-08-hosted-plan-images-now-require-connected-storage.md +6 -0
  237. package/corpus/templates/plan/server/lib/plan-assets.ts +33 -4
  238. package/corpus/templates/slides/.agents/skills/actions/SKILL.md +5 -0
  239. package/corpus/templates/slides/.agents/skills/security/SKILL.md +7 -0
  240. package/corpus/templates/slides/AGENTS.md +4 -0
  241. package/corpus/templates/slides/actions/generate-image-api.ts +15 -3
  242. package/corpus/templates/slides/app/routes/settings.tsx +2 -2
  243. package/corpus/templates/slides/app/routes/team.tsx +1 -1
  244. package/corpus/templates/slides/changelog/2026-07-08-generated-slide-images-now-return-hosted-file-storage-urls-i.md +6 -0
  245. package/corpus/templates/slides/shared/api.ts +1 -1
  246. package/dist/application-state/store.d.ts.map +1 -1
  247. package/dist/application-state/store.js +8 -2
  248. package/dist/application-state/store.js.map +1 -1
  249. package/dist/cli/sync-builder-starter-manifest.d.ts.map +1 -1
  250. package/dist/cli/sync-builder-starter-manifest.js +24 -1
  251. package/dist/cli/sync-builder-starter-manifest.js.map +1 -1
  252. package/dist/client/AssistantChat.d.ts.map +1 -1
  253. package/dist/client/AssistantChat.js +24 -13
  254. package/dist/client/AssistantChat.js.map +1 -1
  255. package/dist/client/PoweredByBadge.d.ts +1 -1
  256. package/dist/client/PoweredByBadge.d.ts.map +1 -1
  257. package/dist/client/PoweredByBadge.js +3 -9
  258. package/dist/client/PoweredByBadge.js.map +1 -1
  259. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  260. package/dist/client/agent-chat-adapter.js +28 -9
  261. package/dist/client/agent-chat-adapter.js.map +1 -1
  262. package/dist/client/chat/widgets/DataTableWidget.d.ts.map +1 -1
  263. package/dist/client/chat/widgets/DataTableWidget.js +19 -2
  264. package/dist/client/chat/widgets/DataTableWidget.js.map +1 -1
  265. package/dist/client/db-admin/TableEditor.d.ts.map +1 -1
  266. package/dist/client/db-admin/TableEditor.js +19 -2
  267. package/dist/client/db-admin/TableEditor.js.map +1 -1
  268. package/dist/client/db-admin/export-utils.d.ts +2 -0
  269. package/dist/client/db-admin/export-utils.d.ts.map +1 -1
  270. package/dist/client/db-admin/export-utils.js +11 -3
  271. package/dist/client/db-admin/export-utils.js.map +1 -1
  272. package/dist/client/db-admin/useAgentSync.d.ts.map +1 -1
  273. package/dist/client/db-admin/useAgentSync.js +63 -0
  274. package/dist/client/db-admin/useAgentSync.js.map +1 -1
  275. package/dist/client/error-capture.d.ts.map +1 -1
  276. package/dist/client/error-capture.js +41 -7
  277. package/dist/client/error-capture.js.map +1 -1
  278. package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
  279. package/dist/client/extensions/EmbeddedExtension.js +3 -1
  280. package/dist/client/extensions/EmbeddedExtension.js.map +1 -1
  281. package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
  282. package/dist/client/extensions/ExtensionViewer.js +32 -5
  283. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  284. package/dist/client/extensions/InlineExtensionFrame.d.ts.map +1 -1
  285. package/dist/client/extensions/InlineExtensionFrame.js +3 -1
  286. package/dist/client/extensions/InlineExtensionFrame.js.map +1 -1
  287. package/dist/client/extensions/portable-extension.d.ts.map +1 -1
  288. package/dist/client/extensions/portable-extension.js +1 -0
  289. package/dist/client/extensions/portable-extension.js.map +1 -1
  290. package/dist/client/org/OrgSwitcher.d.ts +1 -1
  291. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  292. package/dist/client/org/OrgSwitcher.js +11 -6
  293. package/dist/client/org/OrgSwitcher.js.map +1 -1
  294. package/dist/client/org/TeamPage.d.ts.map +1 -1
  295. package/dist/client/org/TeamPage.js +5 -5
  296. package/dist/client/org/TeamPage.js.map +1 -1
  297. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  298. package/dist/client/settings/SettingsPanel.js +37 -14
  299. package/dist/client/settings/SettingsPanel.js.map +1 -1
  300. package/dist/client/settings/SettingsSection.js +1 -1
  301. package/dist/client/settings/SettingsSection.js.map +1 -1
  302. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
  303. package/dist/client/settings/SettingsTabsPage.js +21 -10
  304. package/dist/client/settings/SettingsTabsPage.js.map +1 -1
  305. package/dist/collab/routes.d.ts +1 -1
  306. package/dist/db-admin/agent-tools.d.ts.map +1 -1
  307. package/dist/db-admin/agent-tools.js +7 -2
  308. package/dist/db-admin/agent-tools.js.map +1 -1
  309. package/dist/db-admin/operations.d.ts.map +1 -1
  310. package/dist/db-admin/operations.js +90 -4
  311. package/dist/db-admin/operations.js.map +1 -1
  312. package/dist/db-admin/routes.d.ts.map +1 -1
  313. package/dist/db-admin/routes.js +1 -0
  314. package/dist/db-admin/routes.js.map +1 -1
  315. package/dist/db-admin/types.d.ts +4 -0
  316. package/dist/db-admin/types.d.ts.map +1 -1
  317. package/dist/db-admin/types.js.map +1 -1
  318. package/dist/extensions/html-shell.d.ts +5 -4
  319. package/dist/extensions/html-shell.d.ts.map +1 -1
  320. package/dist/extensions/html-shell.js.map +1 -1
  321. package/dist/extensions/routes.d.ts.map +1 -1
  322. package/dist/extensions/routes.js +8 -0
  323. package/dist/extensions/routes.js.map +1 -1
  324. package/dist/navigation/index.d.ts +1 -1
  325. package/dist/navigation/index.d.ts.map +1 -1
  326. package/dist/navigation/index.js +1 -1
  327. package/dist/navigation/index.js.map +1 -1
  328. package/dist/notifications/channels.js +1 -17
  329. package/dist/notifications/channels.js.map +1 -1
  330. package/dist/notifications/routes.d.ts +1 -1
  331. package/dist/resources/handlers.d.ts +5 -0
  332. package/dist/resources/handlers.d.ts.map +1 -1
  333. package/dist/resources/handlers.js +9 -8
  334. package/dist/resources/handlers.js.map +1 -1
  335. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  336. package/dist/server/poll.d.ts +12 -4
  337. package/dist/server/poll.d.ts.map +1 -1
  338. package/dist/server/poll.js +236 -9
  339. package/dist/server/poll.js.map +1 -1
  340. package/dist/styles/agent-native.css +27 -0
  341. package/dist/templates/default/.agents/skills/actions/SKILL.md +5 -0
  342. package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  343. package/dist/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
  344. package/dist/templates/default/.agents/skills/security/SKILL.md +7 -0
  345. package/dist/templates/default/.agents/skills/storing-data/SKILL.md +5 -1
  346. package/dist/templates/default/AGENTS.md +4 -2
  347. package/dist/templates/headless/AGENTS.md +4 -0
  348. package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -0
  349. package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  350. package/dist/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +4 -0
  351. package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +6 -0
  352. package/dist/templates/workspace-core/.agents/skills/performance/SKILL.md +4 -0
  353. package/dist/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
  354. package/dist/templates/workspace-core/.agents/skills/security/SKILL.md +7 -0
  355. package/dist/templates/workspace-core/.agents/skills/storing-data/SKILL.md +5 -1
  356. package/dist/templates/workspace-core/AGENTS.md +7 -1
  357. package/dist/templates/workspace-root/AGENTS.md +7 -1
  358. package/package.json +1 -1
  359. package/src/templates/default/.agents/skills/actions/SKILL.md +5 -0
  360. package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  361. package/src/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
  362. package/src/templates/default/.agents/skills/security/SKILL.md +7 -0
  363. package/src/templates/default/.agents/skills/storing-data/SKILL.md +5 -1
  364. package/src/templates/default/AGENTS.md +4 -2
  365. package/src/templates/headless/AGENTS.md +4 -0
  366. package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -0
  367. package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  368. package/src/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +4 -0
  369. package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +6 -0
  370. package/src/templates/workspace-core/.agents/skills/performance/SKILL.md +4 -0
  371. package/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
  372. package/src/templates/workspace-core/.agents/skills/security/SKILL.md +7 -0
  373. package/src/templates/workspace-core/.agents/skills/storing-data/SKILL.md +5 -1
  374. package/src/templates/workspace-core/AGENTS.md +7 -1
  375. package/src/templates/workspace-root/AGENTS.md +7 -1
@@ -28,9 +28,12 @@ import { z } from "zod";
28
28
  import { parseEdits, serializeEdits } from "../app/lib/timestamp-mapping.js";
29
29
  import { getDb, schema } from "../server/db/index.js";
30
30
  import { getCurrentOwnerEmail } from "../server/lib/recordings.js";
31
+ import { requiresConfiguredVideoStorage } from "../server/lib/video-storage.js";
31
32
  import { assertNativeRecordingMedia } from "./lib/native-media.js";
32
33
 
33
34
  const MAX_CAS_ATTEMPTS = 5;
35
+ const THUMBNAIL_STORAGE_REQUIRED_REASON =
36
+ "Thumbnail storage is not connected yet. Connect Builder.io or configure S3-compatible storage to save thumbnails.";
34
37
 
35
38
  function decodeDataUrl(dataUrl: string): { bytes: Uint8Array; mime: string } {
36
39
  const match = /^data:([^;]+);base64,(.+)$/.exec(dataUrl);
@@ -118,7 +121,10 @@ export default defineAction({
118
121
  ownerEmail,
119
122
  recordAsset: false,
120
123
  });
121
- const url = uploaded?.url ?? args.dataUrl; // fall back to inline storage
124
+ if (!uploaded?.url && requiresConfiguredVideoStorage()) {
125
+ throw new Error(THUMBNAIL_STORAGE_REQUIRED_REASON);
126
+ }
127
+ const url = uploaded?.url ?? args.dataUrl; // Local SQL fallback only.
122
128
  basePatch.thumbnailUrl = url;
123
129
  thumbnailPatch = { kind: "url", value: url };
124
130
  } else if (args.kind === "frame") {
@@ -137,7 +143,10 @@ export default defineAction({
137
143
  ownerEmail,
138
144
  recordAsset: false,
139
145
  });
140
- const url = uploaded?.url ?? args.dataUrl;
146
+ if (!uploaded?.url && requiresConfiguredVideoStorage()) {
147
+ throw new Error(THUMBNAIL_STORAGE_REQUIRED_REASON);
148
+ }
149
+ const url = uploaded?.url ?? args.dataUrl; // Local SQL fallback only.
141
150
  basePatch.animatedThumbnailUrl = url;
142
151
  basePatch.animatedThumbnailEnabled = true;
143
152
  gifPatch = {
@@ -1,5 +1,4 @@
1
1
  import { useT } from "@agent-native/core/client";
2
- import { IconWand } from "@tabler/icons-react";
3
2
  import { useEffect, useLayoutEffect, useRef, useState } from "react";
4
3
 
5
4
  import { Textarea } from "@/components/ui/textarea";
@@ -279,10 +278,5 @@ function AiBulletsBlock({
279
278
  /* -------------------------------------------------------------------------- */
280
279
 
281
280
  function AiTabIndicator() {
282
- return (
283
- <div className="flex items-center gap-1 text-[10px] uppercase tracking-wide text-muted-foreground/60 opacity-0 group-hover:opacity-100 transition-opacity">
284
- <IconWand className="h-3 w-3" />
285
- <span>AI</span>
286
- </div>
287
- );
281
+ return null;
288
282
  }
@@ -36,7 +36,7 @@ import { cn } from "@/lib/utils";
36
36
  import { Scrubber, msToClock } from "./scrubber";
37
37
 
38
38
  export const SPEED_OPTIONS = PLAYBACK_SPEED_OPTIONS;
39
- export const PLAYER_SEEK_STEP_MS = 15_000;
39
+ export const PLAYER_SEEK_STEP_MS = 5_000;
40
40
 
41
41
  export interface PlayerControlsProps {
42
42
  isPlaying: boolean;
@@ -120,14 +120,6 @@ export function PlayerControls(props: PlayerControlsProps) {
120
120
  />
121
121
 
122
122
  <div className="flex min-w-0 items-center gap-1.5 text-white">
123
- <IconBtn
124
- onClick={() => onSeekRelative(-PLAYER_SEEK_STEP_MS)}
125
- tooltip="Back 15 seconds"
126
- ariaLabel="Back 15 seconds"
127
- >
128
- <SkipIcon direction="back" />
129
- </IconBtn>
130
-
131
123
  <IconBtn
132
124
  onClick={onPlayPause}
133
125
  tooltip={isPlaying ? "Pause (K)" : "Play (K)"}
@@ -140,15 +132,24 @@ export function PlayerControls(props: PlayerControlsProps) {
140
132
  )}
141
133
  </IconBtn>
142
134
 
135
+ <IconBtn
136
+ onClick={() => onSeekRelative(-PLAYER_SEEK_STEP_MS)}
137
+ tooltip="Back 5 seconds"
138
+ ariaLabel="Back 5 seconds"
139
+ >
140
+ <SkipIcon direction="back" />
141
+ </IconBtn>
142
+
143
143
  <IconBtn
144
144
  onClick={() => onSeekRelative(PLAYER_SEEK_STEP_MS)}
145
- tooltip="Forward 15 seconds"
146
- ariaLabel="Forward 15 seconds"
145
+ tooltip="Forward 5 seconds"
146
+ ariaLabel="Forward 5 seconds"
147
147
  >
148
148
  <SkipIcon direction="forward" />
149
149
  </IconBtn>
150
150
 
151
151
  <div
152
+ data-player-ui
152
153
  className="relative flex shrink-0 items-center"
153
154
  onMouseEnter={() => setVolumePopoverOpen(true)}
154
155
  onMouseLeave={() => setVolumePopoverOpen(false)}
@@ -158,6 +159,7 @@ export function PlayerControls(props: PlayerControlsProps) {
158
159
  <Popover open={volumePopoverOpen} onOpenChange={setVolumePopoverOpen}>
159
160
  <PopoverTrigger asChild>
160
161
  <button
162
+ data-player-ui
161
163
  type="button"
162
164
  onClick={onToggleMute}
163
165
  className="flex h-8 w-8 shrink-0 items-center justify-center rounded-md text-white hover:bg-white/10"
@@ -171,6 +173,7 @@ export function PlayerControls(props: PlayerControlsProps) {
171
173
  </button>
172
174
  </PopoverTrigger>
173
175
  <PopoverContent
176
+ data-player-ui
174
177
  side="top"
175
178
  align="center"
176
179
  sideOffset={8}
@@ -219,7 +222,10 @@ export function PlayerControls(props: PlayerControlsProps) {
219
222
  <Tooltip>
220
223
  <TooltipTrigger asChild>
221
224
  <DropdownMenuTrigger asChild>
222
- <button className="h-8 shrink-0 rounded-md px-2 text-xs font-medium tabular-nums hover:bg-white/10">
225
+ <button
226
+ data-player-ui
227
+ className="h-8 shrink-0 rounded-md px-2 text-xs font-medium tabular-nums hover:bg-white/10"
228
+ >
223
229
  {speed}x
224
230
  </button>
225
231
  </DropdownMenuTrigger>
@@ -227,6 +233,7 @@ export function PlayerControls(props: PlayerControlsProps) {
227
233
  <TooltipContent>{t("playerControls.playbackSpeed")}</TooltipContent>
228
234
  </Tooltip>
229
235
  <DropdownMenuContent
236
+ data-player-ui
230
237
  align="end"
231
238
  side="top"
232
239
  className="min-w-[90px]"
@@ -298,6 +305,7 @@ function IconBtn({
298
305
  <Tooltip>
299
306
  <TooltipTrigger asChild>
300
307
  <button
308
+ data-player-ui
301
309
  onClick={onClick}
302
310
  aria-label={ariaLabel ?? tooltip}
303
311
  className={cn(
@@ -319,7 +327,7 @@ function SkipIcon({ direction }: { direction: "back" | "forward" }) {
319
327
  <IconPlayerSkipForward
320
328
  className={cn("h-5 w-5", direction === "back" && "rotate-180")}
321
329
  />
322
- <span className="absolute text-[7px] font-bold leading-none">15</span>
330
+ <span className="absolute text-[7px] font-bold leading-none">5</span>
323
331
  </span>
324
332
  );
325
333
  }
@@ -8,11 +8,7 @@ import {
8
8
  LOOM_START_MS_QUERY_PARAM,
9
9
  loomEmbedUrlWithTimestamp,
10
10
  } from "@shared/loom";
11
- import {
12
- IconBolt,
13
- IconPlayerPlay,
14
- IconPlayerSkipForward,
15
- } from "@tabler/icons-react";
11
+ import { IconBolt, IconPlayerPlay } from "@tabler/icons-react";
16
12
  import {
17
13
  forwardRef,
18
14
  useCallback,
@@ -51,11 +47,7 @@ import { cn } from "@/lib/utils";
51
47
 
52
48
  import { CaptionsOverlay } from "./captions-overlay";
53
49
  import { CtaButton } from "./cta-button";
54
- import {
55
- PLAYER_SEEK_STEP_MS,
56
- PlayerControls,
57
- SPEED_OPTIONS,
58
- } from "./player-controls";
50
+ import { PlayerControls, SPEED_OPTIONS } from "./player-controls";
59
51
 
60
52
  function resolveLocalUrl(url: string | null | undefined): string | undefined {
61
53
  if (!url) return undefined;
@@ -571,6 +563,17 @@ export const VideoPlayer = forwardRef<VideoPlayerHandle, VideoPlayerProps>(
571
563
  requestPlay();
572
564
  }, [isPlaying, pauseVideo, requestPlay]);
573
565
 
566
+ const activateVideoSurface = useCallback(() => {
567
+ const v = videoRef.current;
568
+ if (!v) return;
569
+ if (!v.paused || isPlaying) {
570
+ pauseVideo();
571
+ } else {
572
+ requestPlay();
573
+ }
574
+ bumpControls();
575
+ }, [bumpControls, isPlaying, pauseVideo, requestPlay]);
576
+
574
577
  const handlePlayerPointerDown = useCallback(
575
578
  (e: React.PointerEvent<HTMLDivElement>) => {
576
579
  if (
@@ -607,10 +610,9 @@ export const VideoPlayer = forwardRef<VideoPlayerHandle, VideoPlayerProps>(
607
610
 
608
611
  e.preventDefault();
609
612
  suppressNextClickRef.current = true;
610
- togglePlayback();
611
- bumpControls();
613
+ activateVideoSurface();
612
614
  },
613
- [bumpControls, isLoomEmbed, togglePlayback],
615
+ [activateVideoSurface, isLoomEmbed],
614
616
  );
615
617
 
616
618
  const handlePlayerPointerCancel = useCallback(
@@ -1109,10 +1111,11 @@ export const VideoPlayer = forwardRef<VideoPlayerHandle, VideoPlayerProps>(
1109
1111
  suppressNextClickRef.current = false;
1110
1112
  return;
1111
1113
  }
1112
- // Clicking the video toggles play but not when clicking controls.
1114
+ // Clicking the video surface toggles playback, but actual controls
1115
+ // keep their own behavior.
1113
1116
  if (isPlayerUiTarget(e.target)) return;
1114
1117
  if (isLoomEmbed) return;
1115
- togglePlayback();
1118
+ activateVideoSurface();
1116
1119
  }}
1117
1120
  >
1118
1121
  {isLoomEmbed && loomIframeSrc ? (
@@ -1397,7 +1400,6 @@ export const VideoPlayer = forwardRef<VideoPlayerHandle, VideoPlayerProps>(
1397
1400
  requestPlay();
1398
1401
  }}
1399
1402
  onSpeedChange={applySpeed}
1400
- onSeekRelative={seekByMs}
1401
1403
  menuPortalContainer={fullscreenMenuContainer}
1402
1404
  />
1403
1405
  ) : null}
@@ -1442,7 +1444,6 @@ export const VideoPlayer = forwardRef<VideoPlayerHandle, VideoPlayerProps>(
1442
1444
  {/* Controls */}
1443
1445
  {!hideChrome && !isLoomEmbed ? (
1444
1446
  <div
1445
- data-player-ui
1446
1447
  className={cn(
1447
1448
  "absolute inset-x-0 bottom-0 z-20 transition-opacity duration-200",
1448
1449
  showControls ? "opacity-100" : "opacity-0 pointer-events-none",
@@ -1511,7 +1512,6 @@ function CenterPlaybackOverlay({
1511
1512
  playError,
1512
1513
  onPlay,
1513
1514
  onSpeedChange,
1514
- onSeekRelative,
1515
1515
  menuPortalContainer,
1516
1516
  }: {
1517
1517
  mode: "loading" | "ready";
@@ -1521,7 +1521,6 @@ function CenterPlaybackOverlay({
1521
1521
  playError: string | null;
1522
1522
  onPlay: () => void;
1523
1523
  onSpeedChange: (rate: number) => void;
1524
- onSeekRelative: (deltaMs: number) => void;
1525
1524
  menuPortalContainer?: HTMLElement | null;
1526
1525
  }) {
1527
1526
  const t = useT();
@@ -1546,30 +1545,18 @@ function CenterPlaybackOverlay({
1546
1545
  </div>
1547
1546
  ) : (
1548
1547
  <>
1549
- <div className="flex items-center gap-[clamp(0.75rem,4cqw,1.5rem)]">
1550
- <CenterSeekButton
1551
- direction="back"
1552
- ariaLabel="Back 15 seconds"
1553
- onClick={() => onSeekRelative(-PLAYER_SEEK_STEP_MS)}
1554
- />
1555
- <button
1556
- data-player-ui
1557
- type="button"
1558
- aria-label={t("videoPlayer.playClip")}
1559
- onClick={(e) => {
1560
- e.stopPropagation();
1561
- onPlay();
1562
- }}
1563
- className="pointer-events-auto flex h-[clamp(3rem,13cqw,6rem)] w-[clamp(3rem,13cqw,6rem)] items-center justify-center rounded-full bg-white text-black shadow-2xl ring-1 ring-white/35 transition-transform duration-150 hover:scale-105 hover:bg-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white focus-visible:ring-offset-2 focus-visible:ring-offset-black"
1564
- >
1565
- <IconPlayerPlay className="ml-[6%] h-[clamp(1.5rem,6.5cqw,3rem)] w-[clamp(1.5rem,6.5cqw,3rem)] fill-current" />
1566
- </button>
1567
- <CenterSeekButton
1568
- direction="forward"
1569
- ariaLabel="Forward 15 seconds"
1570
- onClick={() => onSeekRelative(PLAYER_SEEK_STEP_MS)}
1571
- />
1572
- </div>
1548
+ <button
1549
+ data-player-ui
1550
+ type="button"
1551
+ aria-label={t("videoPlayer.playClip")}
1552
+ onClick={(e) => {
1553
+ e.stopPropagation();
1554
+ onPlay();
1555
+ }}
1556
+ className="pointer-events-auto flex h-[clamp(3rem,13cqw,6rem)] w-[clamp(3rem,13cqw,6rem)] items-center justify-center rounded-full bg-white text-black shadow-2xl ring-1 ring-white/35 transition-transform duration-150 hover:scale-105 hover:bg-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white focus-visible:ring-offset-2 focus-visible:ring-offset-black"
1557
+ >
1558
+ <IconPlayerPlay className="ml-[6%] h-[clamp(1.5rem,6.5cqw,3rem)] w-[clamp(1.5rem,6.5cqw,3rem)] fill-current" />
1559
+ </button>
1573
1560
 
1574
1561
  <div
1575
1562
  data-player-ui
@@ -1634,38 +1621,6 @@ function CenterPlaybackOverlay({
1634
1621
  );
1635
1622
  }
1636
1623
 
1637
- function CenterSeekButton({
1638
- direction,
1639
- ariaLabel,
1640
- onClick,
1641
- }: {
1642
- direction: "back" | "forward";
1643
- ariaLabel: string;
1644
- onClick: () => void;
1645
- }) {
1646
- return (
1647
- <button
1648
- data-player-ui
1649
- type="button"
1650
- aria-label={ariaLabel}
1651
- onClick={(e) => {
1652
- e.stopPropagation();
1653
- onClick();
1654
- }}
1655
- className="pointer-events-auto flex h-[clamp(2.5rem,9cqw,4rem)] w-[clamp(2.5rem,9cqw,4rem)] items-center justify-center rounded-full bg-black/70 text-white shadow-xl ring-1 ring-white/20 backdrop-blur-md transition-transform duration-150 hover:scale-105 hover:bg-black/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white focus-visible:ring-offset-2 focus-visible:ring-offset-black"
1656
- >
1657
- <span className="relative flex h-[clamp(1.25rem,4.5cqw,2rem)] w-[clamp(1.25rem,4.5cqw,2rem)] items-center justify-center">
1658
- <IconPlayerSkipForward
1659
- className={cn("h-full w-full", direction === "back" && "rotate-180")}
1660
- />
1661
- <span className="absolute text-[clamp(0.45rem,1.8cqw,0.7rem)] font-bold leading-none">
1662
- 15
1663
- </span>
1664
- </span>
1665
- </button>
1666
- );
1667
- }
1668
-
1669
1624
  /**
1670
1625
  * Clamp a millisecond seek target to a value the browser will actually accept.
1671
1626
  *
@@ -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:
@@ -907,7 +908,7 @@ const messages = {
907
908
  unavailable: "هذا الاجتماع خاص أو لم يعد متاحًا.",
908
909
  tryClips: "جرّب Clips",
909
910
  attendees: "{{count}} حاضرون",
910
- noAiNotes: "لم يتم إنشاء ملاحظات الذكاء الاصطناعي لهذا الاجتماع بعد.",
911
+ noAiNotes: "لم يتم إنشاء ملخص لهذا الاجتماع بعد.",
911
912
  summary: "الملخص",
912
913
  keyPoints: "النقاط الرئيسية",
913
914
  actionItems: "عناصر العمل",
@@ -323,8 +323,7 @@ const messages = {
323
323
  unassigned: "Nicht zugewiesen",
324
324
  them: "Ihnen",
325
325
  me: "Mich",
326
- regeneratingNotes:
327
- "Notizen neu generieren – Ihre eigenen Notizen bleiben erhalten",
326
+ regeneratingNotes: "Zusammenfassung wird neu generiert",
328
327
  meetingRemoved: "Besprechung entfernt",
329
328
  couldNotRemoveMeeting: "Das Meeting konnte nicht entfernt werden",
330
329
  couldNotLoadMeeting: "Dieses Meeting konnte nicht geladen werden.",
@@ -332,8 +331,8 @@ const messages = {
332
331
  couldNotCopyTranscript: "Das Transkript konnte nicht kopiert werden",
333
332
  allMeetings: "Alle Treffen",
334
333
  live: "Übersetzt: Live",
335
- generatingNotesInline: "Notizen erstellen…",
336
- regenerateNotes: "Notizen neu generieren",
334
+ generatingNotesInline: "Zusammenfassung wird erstellt…",
335
+ regenerateNotes: "Zusammenfassung neu generieren",
337
336
  share: "Aktie",
338
337
  meetingOptions: "Besprechungsmöglichkeiten",
339
338
  removeMeeting: "Besprechung entfernen",
@@ -347,12 +346,13 @@ const messages = {
347
346
  "Um Notizen zu starten, öffnen Sie Clips Desktop über die Menüleiste und wählen Sie Start Meeting Notes, oder klicken Sie auf Start notes, wenn die Erinnerung erscheint. Clips erfasst Mikrofon und Systemaudio und schreibt das Transkript hier.",
348
347
  getDesktopApp: "Holen Sie sich die Desktop-App",
349
348
  generateNotesFailed:
350
- "Notizen konnten nicht generiert werden. Versuchen Sie es erneut.",
349
+ "Zusammenfassung konnte nicht generiert werden. Versuchen Sie es erneut.",
351
350
  attendee_one: "{{count}}-Teilnehmer",
352
351
  attendee_other: "{{count}}-Teilnehmer",
353
352
  joinCall: "Nehmen Sie am Anruf teil",
354
353
  myNotes: "Meine Notizen",
355
354
  aiNotes: "KI-Notizen",
355
+ summary: "Zusammenfassung",
356
356
  actionItems: "Aktionselemente",
357
357
  working: "Arbeiten…",
358
358
  noActionItems:
@@ -933,7 +933,7 @@ Alle sichtbaren Änderungen für Clips-Nutzer werden hier dokumentiert. Du kanns
933
933
  unavailable: "Dieses Meeting ist privat oder nicht mehr verfügbar.",
934
934
  tryClips: "Clips ausprobieren",
935
935
  attendees: "{{count}} Teilnehmer",
936
- noAiNotes: "Für dieses Meeting wurden noch keine KI-Notizen generiert.",
936
+ noAiNotes: "Für dieses Meeting wurde noch keine Zusammenfassung generiert.",
937
937
  summary: "Zusammenfassung",
938
938
  keyPoints: "Kernpunkte",
939
939
  actionItems: "Aufgaben",
@@ -309,7 +309,7 @@ const messages = {
309
309
  unassigned: "Unassigned",
310
310
  them: "Them",
311
311
  me: "Me",
312
- regeneratingNotes: "Regenerating notes — your own notes are kept",
312
+ regeneratingNotes: "Regenerating summary",
313
313
  meetingRemoved: "Meeting removed",
314
314
  couldNotRemoveMeeting: "Couldn't remove meeting",
315
315
  couldNotLoadMeeting: "Couldn't load this meeting.",
@@ -317,8 +317,8 @@ const messages = {
317
317
  couldNotCopyTranscript: "Couldn't copy transcript",
318
318
  allMeetings: "All meetings",
319
319
  live: "Live",
320
- generatingNotesInline: "Generating notes…",
321
- regenerateNotes: "Regenerate notes",
320
+ generatingNotesInline: "Generating summary…",
321
+ regenerateNotes: "Regenerate summary",
322
322
  share: "Share",
323
323
  meetingOptions: "Meeting options",
324
324
  removeMeeting: "Remove meeting",
@@ -331,12 +331,13 @@ const messages = {
331
331
  desktopHint:
332
332
  "To start notes, open Clips Desktop from the menu bar and choose Start Meeting Notes, or click Start notes when the reminder appears. Clips captures mic + system audio and writes the transcript here.",
333
333
  getDesktopApp: "Get desktop app",
334
- generateNotesFailed: "Couldn't generate notes. Try again.",
334
+ generateNotesFailed: "Couldn't generate summary. Try again.",
335
335
  attendee_one: "{{count}} attendee",
336
336
  attendee_other: "{{count}} attendees",
337
337
  joinCall: "Join call",
338
338
  myNotes: "My notes",
339
339
  aiNotes: "AI notes",
340
+ summary: "Summary",
340
341
  actionItems: "Action items",
341
342
  working: "Working…",
342
343
  noActionItems:
@@ -902,7 +903,7 @@ All notable user-facing changes to Clips are documented here. Open it any time f
902
903
  unavailable: "This meeting is private or no longer available.",
903
904
  tryClips: "Try Clips",
904
905
  attendees: "{{count}} attendees",
905
- noAiNotes: "AI notes haven't been generated yet for this meeting.",
906
+ noAiNotes: "A summary hasn't been generated yet for this meeting.",
906
907
  summary: "Summary",
907
908
  keyPoints: "Key points",
908
909
  actionItems: "Action items",
@@ -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: "アクション項目",