@agent-native/core 0.103.1 → 0.105.0

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 (568) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +61 -0
  3. package/corpus/core/package.json +9 -2
  4. package/corpus/core/src/agent/engine/credential-errors.ts +2 -2
  5. package/corpus/core/src/agent/production-agent.ts +30 -0
  6. package/corpus/core/src/agent/run-store.ts +12 -2
  7. package/corpus/core/src/cli/create.ts +1 -0
  8. package/corpus/core/src/cli/skills-content/visual-plan-skill.ts +30 -11
  9. package/corpus/core/src/cli/templates-meta.ts +4 -3
  10. package/corpus/core/src/client/AgentAskPopover.tsx +89 -0
  11. package/corpus/core/src/client/AgentChatHome.tsx +4 -0
  12. package/corpus/core/src/client/AgentPanel.tsx +321 -223
  13. package/corpus/core/src/client/AssistantChat.tsx +6 -10
  14. package/corpus/core/src/client/MultiTabAssistantChat.tsx +53 -372
  15. package/corpus/core/src/client/agent-chat-adapter.ts +13 -1
  16. package/corpus/core/src/client/agent-page/AgentContextTab.tsx +133 -149
  17. package/corpus/core/src/client/agent-page/AgentEmptyState.tsx +44 -0
  18. package/corpus/core/src/client/agent-page/AgentJobsTab.tsx +153 -82
  19. package/corpus/core/src/client/agent-page/AgentTabFrame.tsx +39 -0
  20. package/corpus/core/src/client/agent-page/AgentTabsPage.tsx +368 -356
  21. package/corpus/core/src/client/agent-page/types.ts +1 -1
  22. package/corpus/core/src/client/analytics.ts +51 -5
  23. package/corpus/core/src/client/chat/run-recovery.tsx +12 -4
  24. package/corpus/core/src/client/composer/PromptComposer.tsx +5 -15
  25. package/corpus/core/src/client/composer/TiptapComposer.tsx +32 -3
  26. package/corpus/core/src/client/dynamic-suggestions.ts +3 -3
  27. package/corpus/core/src/client/index.ts +16 -1
  28. package/corpus/core/src/client/resources/ResourceTree.tsx +249 -38
  29. package/corpus/core/src/client/resources/ResourcesPanel.tsx +307 -140
  30. package/corpus/core/src/client/session-replay.ts +158 -5
  31. package/corpus/core/src/client/settings/AutomationsSection.tsx +30 -10
  32. package/corpus/core/src/client/settings/SettingsPanel.tsx +3 -2
  33. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +2 -0
  34. package/corpus/core/src/client/settings/agent-settings-search.ts +2 -2
  35. package/corpus/core/src/client/use-chat-threads.ts +2 -0
  36. package/corpus/core/src/connections/catalog.ts +49 -7
  37. package/corpus/core/src/db/index.ts +6 -1
  38. package/corpus/core/src/deploy/build.ts +23 -0
  39. package/corpus/core/src/extensions/actions.ts +106 -16
  40. package/corpus/core/src/extensions/content-patch.ts +22 -0
  41. package/corpus/core/src/extensions/routes.ts +18 -0
  42. package/corpus/core/src/extensions/store.ts +8 -0
  43. package/corpus/core/src/index.ts +3 -0
  44. package/corpus/core/src/ingestion/docx.ts +158 -0
  45. package/corpus/core/src/ingestion/figma-node-to-html.ts +1860 -0
  46. package/corpus/core/src/ingestion/figma.ts +548 -0
  47. package/corpus/core/src/ingestion/index.ts +107 -0
  48. package/corpus/core/src/ingestion/media.ts +264 -0
  49. package/corpus/core/src/ingestion/notion.ts +121 -0
  50. package/corpus/core/src/ingestion/office.ts +214 -0
  51. package/corpus/core/src/ingestion/orchestration.ts +160 -0
  52. package/corpus/core/src/ingestion/pptx.ts +333 -0
  53. package/corpus/core/src/ingestion/selection.ts +81 -0
  54. package/corpus/core/src/ingestion/website.ts +151 -0
  55. package/corpus/core/src/integrations/plugin.ts +45 -37
  56. package/corpus/core/src/localization/default-messages.ts +35 -12
  57. package/corpus/core/src/observability/hosted-model-experiment.ts +118 -0
  58. package/corpus/core/src/observability/traces.ts +5 -3
  59. package/corpus/core/src/provider-api/index.ts +452 -8
  60. package/corpus/core/src/scripts/agent-engines/list-agent-engines.ts +18 -1
  61. package/corpus/core/src/search-utils/index.ts +112 -0
  62. package/corpus/core/src/secrets/register-framework-secrets.ts +61 -0
  63. package/corpus/core/src/server/action-discovery.ts +33 -8
  64. package/corpus/core/src/server/agent-chat/framework-prompts.ts +2 -2
  65. package/corpus/core/src/server/agent-chat/prompt-resources.ts +144 -0
  66. package/corpus/core/src/server/agent-chat-plugin.ts +6 -0
  67. package/corpus/core/src/server/core-routes-plugin.ts +12 -0
  68. package/corpus/core/src/server/index.ts +30 -0
  69. package/corpus/core/src/server/workspace-provider-oauth.ts +583 -0
  70. package/corpus/core/src/styles/agent-native.css +9 -0
  71. package/corpus/core/src/templates/default/app/i18n/en-US.ts +3 -3
  72. package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +14 -5
  73. package/corpus/core/src/templates/workspace-root/.env.example +12 -0
  74. package/corpus/core/src/workspace-connections/index.ts +6 -0
  75. package/corpus/core/src/workspace-connections/lifecycle.ts +43 -0
  76. package/corpus/core/src/workspace-connections/store.ts +16 -0
  77. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +46 -3
  78. package/corpus/templates/analytics/AGENTS.md +9 -0
  79. package/corpus/templates/analytics/actions/dashboard-mutation-api.ts +120 -6
  80. package/corpus/templates/analytics/actions/mutate-dashboard.ts +92 -30
  81. package/corpus/templates/analytics/actions/update-dashboard.ts +5 -5
  82. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +313 -220
  83. package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +2 -2
  84. package/corpus/templates/analytics/app/components/layout/Layout.tsx +9 -6
  85. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +90 -64
  86. package/corpus/templates/analytics/app/i18n-data.ts +3 -3
  87. package/corpus/templates/analytics/app/lib/dashboard-list-loading.ts +25 -0
  88. package/corpus/templates/analytics/app/lib/item-popularity.ts +13 -4
  89. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/DashboardFilterBar.tsx +1 -1
  90. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/pivot.ts +8 -3
  91. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +1 -0
  92. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +15 -3
  93. package/corpus/templates/analytics/changelog/2026-07-16-dashboard-filter-defaults-can-now-be-changed-reliably-withou.md +6 -0
  94. package/corpus/templates/analytics/changelog/2026-07-16-dashboard-lists-load-in-one-stable-order-without-popping-bet.md +6 -0
  95. package/corpus/templates/analytics/changelog/2026-07-16-fixed-dashboard-filter-dropdown-text-alignment.md +6 -0
  96. package/corpus/templates/analytics/changelog/2026-07-16-recurring-signed-in-users-can-now-be-viewed-as-weekly-bars-b.md +6 -0
  97. package/corpus/templates/analytics/changelog/2026-07-16-the-analytics-agent-can-now-duplicate-a-chart-and-place-the-.md +6 -0
  98. package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +41 -1
  99. package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +1 -1
  100. package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +47 -1
  101. package/corpus/templates/analytics/server/lib/session-replay.ts +68 -0
  102. package/corpus/templates/analytics/server/plugins/agent-chat.ts +1 -0
  103. package/corpus/templates/analytics/server/routes/sessions/lookup.get.ts +47 -0
  104. package/corpus/templates/assets/.agents/skills/asset-generation/SKILL.md +16 -9
  105. package/corpus/templates/assets/.agents/skills/creative-context/SKILL.md +86 -0
  106. package/corpus/templates/assets/AGENTS.md +10 -0
  107. package/corpus/templates/assets/actions/create-generation-session.ts +59 -1
  108. package/corpus/templates/assets/actions/edit-image.ts +2 -0
  109. package/corpus/templates/assets/actions/generate-asset.ts +52 -0
  110. package/corpus/templates/assets/actions/generate-image-batch.ts +55 -0
  111. package/corpus/templates/assets/actions/generate-image.ts +219 -1
  112. package/corpus/templates/assets/actions/open-asset-picker.ts +14 -0
  113. package/corpus/templates/assets/actions/refine-image.ts +3 -0
  114. package/corpus/templates/assets/actions/restyle-image.ts +2 -0
  115. package/corpus/templates/assets/agent-native.app-skill.json +4 -0
  116. package/corpus/templates/assets/app/components/layout/Layout.tsx +2 -0
  117. package/corpus/templates/assets/app/i18n/zh-TW.ts +3 -0
  118. package/corpus/templates/assets/app/i18n-data.ts +29 -13
  119. package/corpus/templates/assets/app/routes/agent.tsx +7 -1
  120. package/corpus/templates/assets/app/routes/library.tsx +9 -0
  121. package/corpus/templates/assets/app/routes/settings.tsx +3 -0
  122. package/corpus/templates/assets/changelog/2026-07-16-creative-context-library.md +6 -0
  123. package/corpus/templates/assets/package.json +1 -0
  124. package/corpus/templates/assets/server/lib/image-processing.ts +1 -22
  125. package/corpus/templates/assets/server/plugins/creative-context.ts +205 -0
  126. package/corpus/templates/brain/app/i18n-data.ts +3 -3
  127. package/corpus/templates/brain/app/lib/brain.ts +1 -1
  128. package/corpus/templates/brain/server/lib/search.ts +17 -67
  129. package/corpus/templates/calendar/app/i18n-data.ts +3 -3
  130. package/corpus/templates/calendar/app/pages/BookingLinksPage.tsx +19 -18
  131. package/corpus/templates/chat/app/i18n/en-US.ts +3 -3
  132. package/corpus/templates/chat/app/lib/agent-page.tsx +10 -1
  133. package/corpus/templates/clips/.agents/skills/meetings/SKILL.md +1 -1
  134. package/corpus/templates/clips/AGENTS.md +4 -0
  135. package/corpus/templates/clips/actions/cleanup-transcript.ts +35 -4
  136. package/corpus/templates/clips/actions/create-meeting.ts +6 -2
  137. package/corpus/templates/clips/actions/create-organization.ts +3 -2
  138. package/corpus/templates/clips/actions/create-recording.ts +4 -1
  139. package/corpus/templates/clips/actions/finalize-recording.ts +44 -7
  140. package/corpus/templates/clips/actions/import-loom-recording.ts +4 -1
  141. package/corpus/templates/clips/actions/lib/create-recording-schema.ts +2 -2
  142. package/corpus/templates/clips/actions/list-meetings.ts +23 -5
  143. package/corpus/templates/clips/actions/list-organization-state.ts +1 -1
  144. package/corpus/templates/clips/actions/remove-silences.ts +10 -1
  145. package/corpus/templates/clips/actions/request-transcript.ts +53 -11
  146. package/corpus/templates/clips/actions/search-recordings-utils.ts +7 -0
  147. package/corpus/templates/clips/actions/search-recordings.ts +5 -8
  148. package/corpus/templates/clips/actions/set-organization-branding.ts +2 -2
  149. package/corpus/templates/clips/actions/stitch-recordings.ts +10 -5
  150. package/corpus/templates/clips/actions/update-ai-request-status.ts +38 -0
  151. package/corpus/templates/clips/app/components/editor/editor-layout.tsx +3 -4
  152. package/corpus/templates/clips/app/components/editor/editor-selection.ts +19 -0
  153. package/corpus/templates/clips/app/components/editor/stitch-manager.tsx +10 -10
  154. package/corpus/templates/clips/app/components/library/bulk-action-toolbar.tsx +1 -2
  155. package/corpus/templates/clips/app/components/library/library-grid.tsx +101 -93
  156. package/corpus/templates/clips/app/components/player/video-player.tsx +11 -0
  157. package/corpus/templates/clips/app/components/workspace/branding-editor.tsx +53 -1
  158. package/corpus/templates/clips/app/i18n/ar-SA.ts +7 -1
  159. package/corpus/templates/clips/app/i18n/de-DE.ts +7 -1
  160. package/corpus/templates/clips/app/i18n/en-US.ts +10 -4
  161. package/corpus/templates/clips/app/i18n/es-ES.ts +7 -1
  162. package/corpus/templates/clips/app/i18n/fr-FR.ts +7 -1
  163. package/corpus/templates/clips/app/i18n/hi-IN.ts +7 -1
  164. package/corpus/templates/clips/app/i18n/ja-JP.ts +7 -1
  165. package/corpus/templates/clips/app/i18n/ko-KR.ts +7 -1
  166. package/corpus/templates/clips/app/i18n/pt-BR.ts +7 -1
  167. package/corpus/templates/clips/app/i18n/zh-CN.ts +6 -1
  168. package/corpus/templates/clips/app/i18n/zh-TW.ts +6 -1
  169. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +5 -9
  170. package/corpus/templates/clips/app/routes/_app.settings.organization.tsx +6 -2
  171. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +129 -27
  172. package/corpus/templates/clips/app/routes/record.tsx +23 -2
  173. package/corpus/templates/clips/app/routes/share.$shareId.tsx +6 -2
  174. package/corpus/templates/clips/app/routes.ts +3 -1
  175. package/corpus/templates/clips/changelog/2026-07-16-authorized-viewers-can-open-shared-private-clips-without-a-m.md +6 -0
  176. package/corpus/templates/clips/changelog/2026-07-16-camera-bubble-hover-controls-appear-above-the-face.md +6 -0
  177. package/corpus/templates/clips/changelog/2026-07-16-chrome-extension-recovers-stale-recorder-state.md +6 -0
  178. package/corpus/templates/clips/changelog/2026-07-16-clips-agent-chat-no-longer-shows-a-separate-workspace-header.md +6 -0
  179. package/corpus/templates/clips/changelog/2026-07-16-clips-search-now-matches-recording-content-without-requiring.md +6 -0
  180. package/corpus/templates/clips/changelog/2026-07-16-declined-meetings-no-longer-show-desktop-reminders.md +6 -0
  181. package/corpus/templates/clips/changelog/2026-07-16-failed-desktop-saves-now-show-their-local-recovery-copy.md +6 -0
  182. package/corpus/templates/clips/changelog/2026-07-16-long-desktop-clips-now-preserve-complete-playback-synced-aud.md +6 -0
  183. package/corpus/templates/clips/changelog/2026-07-16-long-recording-lists-keep-stitch-and-library-actions-visible.md +6 -0
  184. package/corpus/templates/clips/changelog/2026-07-16-organization-admins-can-choose-new-recording-visibility.md +6 -0
  185. package/corpus/templates/clips/changelog/2026-07-16-remove-silences-now-shows-queued-active-completed-and-failed.md +6 -0
  186. package/corpus/templates/clips/changelog/2026-07-16-settings-no-longer-repeats-the-builder-connection-status-in-.md +6 -0
  187. package/corpus/templates/clips/changelog/2026-07-16-transcripts-now-appear-from-native-browser-speech-sooner-wit.md +6 -0
  188. package/corpus/templates/clips/chrome-extension/public/manifest.json +1 -1
  189. package/corpus/templates/clips/chrome-extension/src/background.ts +73 -1
  190. package/corpus/templates/clips/chrome-extension/src/native-recording-state.ts +32 -0
  191. package/corpus/templates/clips/chrome-extension/src/native-transcription.ts +248 -0
  192. package/corpus/templates/clips/chrome-extension/src/offscreen.ts +106 -0
  193. package/corpus/templates/clips/desktop/src/app.tsx +66 -28
  194. package/corpus/templates/clips/desktop/src/lib/recorder.ts +335 -285
  195. package/corpus/templates/clips/desktop/src/lib/single-flight.ts +7 -0
  196. package/corpus/templates/clips/desktop/src/lib/upload-verification.ts +51 -0
  197. package/corpus/templates/clips/desktop/src/overlays/bubble.tsx +2 -2
  198. package/corpus/templates/clips/desktop/src/overlays/finalizing.tsx +10 -2
  199. package/corpus/templates/clips/desktop/src/styles.css +13 -11
  200. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +8 -9
  201. package/corpus/templates/clips/desktop/src-tauri/src/meetings_watcher.rs +1 -0
  202. package/corpus/templates/clips/desktop/src-tauri/src/native_screen/custom_capture.rs +88 -13
  203. package/corpus/templates/clips/desktop/src-tauri/src/native_screen/live_upload.rs +13 -2
  204. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +241 -6
  205. package/corpus/templates/clips/server/db/schema.ts +2 -2
  206. package/corpus/templates/clips/server/lib/builder-media-compression.ts +64 -67
  207. package/corpus/templates/clips/server/lib/calendar-event-classification.ts +19 -0
  208. package/corpus/templates/clips/server/lib/google-calendar-client.ts +1 -0
  209. package/corpus/templates/clips/server/lib/recordings.ts +40 -1
  210. package/corpus/templates/clips/server/plugins/agent-chat.ts +1 -0
  211. package/corpus/templates/clips/server/plugins/db.ts +2 -2
  212. package/corpus/templates/clips/server/routes/api/auth/google-calendar.get.ts +1 -1
  213. package/corpus/templates/clips/server/routes/api/public-recording.get.ts +14 -5
  214. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +51 -1
  215. package/corpus/templates/clips/server/routes/api/video/[recordingId].get.ts +1 -64
  216. package/corpus/templates/clips/shared/media-worker-contract.ts +32 -15
  217. package/corpus/templates/content/.agents/skills/content/SKILL.md +16 -0
  218. package/corpus/templates/content/.agents/skills/creative-context/SKILL.md +85 -0
  219. package/corpus/templates/content/.agents/skills/notion-integration/SKILL.md +8 -0
  220. package/corpus/templates/content/AGENTS.md +9 -0
  221. package/corpus/templates/content/actions/create-document.ts +94 -0
  222. package/corpus/templates/content/actions/edit-document.ts +144 -4
  223. package/corpus/templates/content/actions/update-document.ts +138 -0
  224. package/corpus/templates/content/agent-native.app-skill.json +4 -0
  225. package/corpus/templates/content/app/components/layout/Layout.tsx +2 -0
  226. package/corpus/templates/content/app/i18n/zh-TW.ts +3 -0
  227. package/corpus/templates/content/app/i18n-data.ts +13 -4
  228. package/corpus/templates/content/app/routes/_app.agent.tsx +2 -1
  229. package/corpus/templates/content/app/routes/_app.settings.tsx +3 -0
  230. package/corpus/templates/content/changelog/2026-07-16-creative-context-library.md +6 -0
  231. package/corpus/templates/content/package.json +1 -0
  232. package/corpus/templates/content/server/plugins/creative-context.ts +31 -0
  233. package/corpus/templates/design/.agents/skills/creative-context/SKILL.md +116 -0
  234. package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +16 -0
  235. package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +8 -0
  236. package/corpus/templates/design/AGENTS.md +6 -0
  237. package/corpus/templates/design/actions/clone-creative-context-design.ts +176 -0
  238. package/corpus/templates/design/actions/edit-design.ts +128 -0
  239. package/corpus/templates/design/actions/generate-design.ts +278 -14
  240. package/corpus/templates/design/actions/generate-screens.ts +42 -1
  241. package/corpus/templates/design/agent-native.app-skill.json +4 -0
  242. package/corpus/templates/design/app/components/layout/Layout.tsx +7 -3
  243. package/corpus/templates/design/app/i18n/zh-TW.ts +3 -0
  244. package/corpus/templates/design/app/i18n-data.ts +10 -4
  245. package/corpus/templates/design/app/routes/agent.tsx +2 -1
  246. package/corpus/templates/design/app/routes/settings.tsx +3 -0
  247. package/corpus/templates/design/changelog/2026-07-16-creative-context-library.md +6 -0
  248. package/corpus/templates/design/changelog/2026-07-16-design-agent-chat-no-longer-shows-a-separate-workspace-header.md +6 -0
  249. package/corpus/templates/design/package.json +1 -0
  250. package/corpus/templates/design/server/lib/figma-design-context.ts +5 -335
  251. package/corpus/templates/design/server/lib/figma-node-to-html.ts +1 -1859
  252. package/corpus/templates/design/server/lib/import-design-files.ts +6 -8
  253. package/corpus/templates/design/server/plugins/creative-context.ts +31 -0
  254. package/corpus/templates/design/shared/generation-session.ts +7 -0
  255. package/corpus/templates/dispatch/app/i18n-data.ts +3 -3
  256. package/corpus/templates/forms/app/i18n/en-US.ts +3 -3
  257. package/corpus/templates/macros/app/i18n/en-US.ts +3 -3
  258. package/corpus/templates/mail/app/components/email/EmailThread.tsx +35 -5
  259. package/corpus/templates/mail/app/i18n/en-US.ts +3 -3
  260. package/corpus/templates/mail/changelog/2026-07-16-mail-previews-now-expand-to-show-the-full-message-without-an.md +6 -0
  261. package/corpus/templates/plan/.agents/skills/visual-plan/SKILL.md +30 -11
  262. package/corpus/templates/plan/AGENTS.md +21 -1
  263. package/corpus/templates/plan/actions/get-visual-plan.ts +1 -1
  264. package/corpus/templates/plan/actions/patch-visual-plan-source.ts +161 -0
  265. package/corpus/templates/plan/actions/read-visual-plan-source.ts +1 -1
  266. package/corpus/templates/plan/actions/update-visual-plan.ts +126 -10
  267. package/corpus/templates/plan/app/hooks/use-plans.ts +2 -0
  268. package/corpus/templates/plan/app/i18n/en-US.ts +3 -3
  269. package/corpus/templates/plan/app/pages/PlansPage.tsx +65 -62
  270. package/corpus/templates/plan/changelog/2026-07-16-local-plan-previews-now-load-annotations-containing-html-lik.md +6 -0
  271. package/corpus/templates/plan/changelog/2026-07-16-plan-agents-now-prevent-stale-edits-from-overwriting-newer-p.md +6 -0
  272. package/corpus/templates/plan/server/plan-mdx.ts +75 -2
  273. package/corpus/templates/slides/.agents/skills/create-deck/SKILL.md +21 -4
  274. package/corpus/templates/slides/.agents/skills/creative-context/SKILL.md +122 -0
  275. package/corpus/templates/slides/.agents/skills/design-systems/SKILL.md +11 -0
  276. package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +12 -3
  277. package/corpus/templates/slides/AGENTS.md +6 -0
  278. package/corpus/templates/slides/actions/add-slide.ts +230 -14
  279. package/corpus/templates/slides/actions/clone-context-slide.ts +302 -0
  280. package/corpus/templates/slides/actions/create-deck.ts +130 -0
  281. package/corpus/templates/slides/actions/extract-pdf.ts +6 -2
  282. package/corpus/templates/slides/actions/import-file.ts +5 -4
  283. package/corpus/templates/slides/actions/patch-deck.ts +200 -10
  284. package/corpus/templates/slides/actions/update-slide.ts +208 -15
  285. package/corpus/templates/slides/app/components/layout/Layout.tsx +2 -0
  286. package/corpus/templates/slides/app/components/visual-editor/CanvasCommentPins.tsx +16 -1
  287. package/corpus/templates/slides/app/i18n/ar-SA.ts +3 -0
  288. package/corpus/templates/slides/app/i18n/de-DE.ts +3 -0
  289. package/corpus/templates/slides/app/i18n/en-US.ts +6 -3
  290. package/corpus/templates/slides/app/i18n/es-ES.ts +3 -0
  291. package/corpus/templates/slides/app/i18n/fr-FR.ts +3 -0
  292. package/corpus/templates/slides/app/i18n/hi-IN.ts +3 -0
  293. package/corpus/templates/slides/app/i18n/ja-JP.ts +3 -0
  294. package/corpus/templates/slides/app/i18n/ko-KR.ts +3 -0
  295. package/corpus/templates/slides/app/i18n/pt-BR.ts +3 -0
  296. package/corpus/templates/slides/app/i18n/zh-CN.ts +3 -0
  297. package/corpus/templates/slides/app/i18n/zh-TW.ts +3 -0
  298. package/corpus/templates/slides/app/lib/validate-native-slide-html.ts +176 -0
  299. package/corpus/templates/slides/app/routes/agent.tsx +7 -1
  300. package/corpus/templates/slides/app/routes/settings.tsx +3 -0
  301. package/corpus/templates/slides/changelog/2026-07-16-creative-context-library.md +6 -0
  302. package/corpus/templates/slides/changelog/2026-07-16-google-slides-native-cloning.md +6 -0
  303. package/corpus/templates/slides/package.json +1 -0
  304. package/corpus/templates/slides/server/handlers/import/docx-parser.ts +4 -85
  305. package/corpus/templates/slides/server/handlers/import/pptx-parser.ts +7 -421
  306. package/corpus/templates/slides/server/plugins/creative-context.ts +166 -0
  307. package/dist/agent/engine/credential-errors.d.ts +1 -1
  308. package/dist/agent/engine/credential-errors.d.ts.map +1 -1
  309. package/dist/agent/engine/credential-errors.js +2 -2
  310. package/dist/agent/engine/credential-errors.js.map +1 -1
  311. package/dist/agent/production-agent.d.ts.map +1 -1
  312. package/dist/agent/production-agent.js +25 -0
  313. package/dist/agent/production-agent.js.map +1 -1
  314. package/dist/agent/run-store.d.ts.map +1 -1
  315. package/dist/agent/run-store.js +12 -2
  316. package/dist/agent/run-store.js.map +1 -1
  317. package/dist/cli/create.d.ts.map +1 -1
  318. package/dist/cli/create.js +1 -0
  319. package/dist/cli/create.js.map +1 -1
  320. package/dist/cli/skills-content/visual-plan-skill.d.ts +1 -1
  321. package/dist/cli/skills-content/visual-plan-skill.d.ts.map +1 -1
  322. package/dist/cli/skills-content/visual-plan-skill.js +30 -11
  323. package/dist/cli/skills-content/visual-plan-skill.js.map +1 -1
  324. package/dist/cli/templates-meta.d.ts.map +1 -1
  325. package/dist/cli/templates-meta.js +4 -3
  326. package/dist/cli/templates-meta.js.map +1 -1
  327. package/dist/client/AgentAskPopover.d.ts +11 -0
  328. package/dist/client/AgentAskPopover.d.ts.map +1 -0
  329. package/dist/client/AgentAskPopover.js +30 -0
  330. package/dist/client/AgentAskPopover.js.map +1 -0
  331. package/dist/client/AgentChatHome.d.ts +1 -1
  332. package/dist/client/AgentChatHome.d.ts.map +1 -1
  333. package/dist/client/AgentChatHome.js +2 -2
  334. package/dist/client/AgentChatHome.js.map +1 -1
  335. package/dist/client/AgentPanel.d.ts +9 -19
  336. package/dist/client/AgentPanel.d.ts.map +1 -1
  337. package/dist/client/AgentPanel.js +119 -80
  338. package/dist/client/AgentPanel.js.map +1 -1
  339. package/dist/client/AssistantChat.d.ts.map +1 -1
  340. package/dist/client/AssistantChat.js +4 -4
  341. package/dist/client/AssistantChat.js.map +1 -1
  342. package/dist/client/MultiTabAssistantChat.d.ts +3 -9
  343. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  344. package/dist/client/MultiTabAssistantChat.js +49 -189
  345. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  346. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  347. package/dist/client/agent-chat-adapter.js +12 -1
  348. package/dist/client/agent-chat-adapter.js.map +1 -1
  349. package/dist/client/agent-page/AgentContextTab.d.ts.map +1 -1
  350. package/dist/client/agent-page/AgentContextTab.js +26 -28
  351. package/dist/client/agent-page/AgentContextTab.js.map +1 -1
  352. package/dist/client/agent-page/AgentEmptyState.d.ts +13 -0
  353. package/dist/client/agent-page/AgentEmptyState.d.ts.map +1 -0
  354. package/dist/client/agent-page/AgentEmptyState.js +6 -0
  355. package/dist/client/agent-page/AgentEmptyState.js.map +1 -0
  356. package/dist/client/agent-page/AgentJobsTab.d.ts +1 -1
  357. package/dist/client/agent-page/AgentJobsTab.d.ts.map +1 -1
  358. package/dist/client/agent-page/AgentJobsTab.js +90 -58
  359. package/dist/client/agent-page/AgentJobsTab.js.map +1 -1
  360. package/dist/client/agent-page/AgentTabFrame.d.ts +12 -0
  361. package/dist/client/agent-page/AgentTabFrame.d.ts.map +1 -0
  362. package/dist/client/agent-page/AgentTabFrame.js +7 -0
  363. package/dist/client/agent-page/AgentTabFrame.js.map +1 -0
  364. package/dist/client/agent-page/AgentTabsPage.d.ts +9 -1
  365. package/dist/client/agent-page/AgentTabsPage.d.ts.map +1 -1
  366. package/dist/client/agent-page/AgentTabsPage.js +135 -99
  367. package/dist/client/agent-page/AgentTabsPage.js.map +1 -1
  368. package/dist/client/agent-page/types.d.ts +1 -1
  369. package/dist/client/agent-page/types.d.ts.map +1 -1
  370. package/dist/client/agent-page/types.js.map +1 -1
  371. package/dist/client/analytics.d.ts +10 -3
  372. package/dist/client/analytics.d.ts.map +1 -1
  373. package/dist/client/analytics.js +37 -2
  374. package/dist/client/analytics.js.map +1 -1
  375. package/dist/client/chat/run-recovery.d.ts.map +1 -1
  376. package/dist/client/chat/run-recovery.js +10 -3
  377. package/dist/client/chat/run-recovery.js.map +1 -1
  378. package/dist/client/composer/PromptComposer.d.ts.map +1 -1
  379. package/dist/client/composer/PromptComposer.js +2 -2
  380. package/dist/client/composer/PromptComposer.js.map +1 -1
  381. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  382. package/dist/client/composer/TiptapComposer.js +15 -3
  383. package/dist/client/composer/TiptapComposer.js.map +1 -1
  384. package/dist/client/dynamic-suggestions.js +3 -3
  385. package/dist/client/dynamic-suggestions.js.map +1 -1
  386. package/dist/client/index.d.ts +4 -3
  387. package/dist/client/index.d.ts.map +1 -1
  388. package/dist/client/index.js +3 -2
  389. package/dist/client/index.js.map +1 -1
  390. package/dist/client/resources/ResourceTree.d.ts +5 -1
  391. package/dist/client/resources/ResourceTree.d.ts.map +1 -1
  392. package/dist/client/resources/ResourceTree.js +74 -5
  393. package/dist/client/resources/ResourceTree.js.map +1 -1
  394. package/dist/client/resources/ResourcesPanel.d.ts +11 -2
  395. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  396. package/dist/client/resources/ResourcesPanel.js +105 -31
  397. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  398. package/dist/client/session-replay.d.ts +28 -0
  399. package/dist/client/session-replay.d.ts.map +1 -1
  400. package/dist/client/session-replay.js +122 -8
  401. package/dist/client/session-replay.js.map +1 -1
  402. package/dist/client/settings/AutomationsSection.d.ts +3 -1
  403. package/dist/client/settings/AutomationsSection.d.ts.map +1 -1
  404. package/dist/client/settings/AutomationsSection.js +16 -6
  405. package/dist/client/settings/AutomationsSection.js.map +1 -1
  406. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  407. package/dist/client/settings/SettingsPanel.js +3 -3
  408. package/dist/client/settings/SettingsPanel.js.map +1 -1
  409. package/dist/client/settings/SettingsTabsPage.d.ts +2 -0
  410. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
  411. package/dist/client/settings/SettingsTabsPage.js.map +1 -1
  412. package/dist/client/settings/agent-settings-search.js +2 -2
  413. package/dist/client/settings/agent-settings-search.js.map +1 -1
  414. package/dist/client/use-chat-threads.d.ts +2 -0
  415. package/dist/client/use-chat-threads.d.ts.map +1 -1
  416. package/dist/client/use-chat-threads.js.map +1 -1
  417. package/dist/connections/catalog.d.ts +41 -7
  418. package/dist/connections/catalog.d.ts.map +1 -1
  419. package/dist/connections/catalog.js +40 -7
  420. package/dist/connections/catalog.js.map +1 -1
  421. package/dist/db/index.d.ts +2 -2
  422. package/dist/db/index.d.ts.map +1 -1
  423. package/dist/db/index.js +2 -2
  424. package/dist/db/index.js.map +1 -1
  425. package/dist/deploy/build.d.ts.map +1 -1
  426. package/dist/deploy/build.js +17 -0
  427. package/dist/deploy/build.js.map +1 -1
  428. package/dist/extensions/actions.d.ts.map +1 -1
  429. package/dist/extensions/actions.js +85 -15
  430. package/dist/extensions/actions.js.map +1 -1
  431. package/dist/extensions/content-patch.d.ts +4 -0
  432. package/dist/extensions/content-patch.d.ts.map +1 -1
  433. package/dist/extensions/content-patch.js +18 -0
  434. package/dist/extensions/content-patch.js.map +1 -1
  435. package/dist/extensions/routes.d.ts.map +1 -1
  436. package/dist/extensions/routes.js +14 -0
  437. package/dist/extensions/routes.js.map +1 -1
  438. package/dist/extensions/store.d.ts +1 -0
  439. package/dist/extensions/store.d.ts.map +1 -1
  440. package/dist/extensions/store.js +4 -1
  441. package/dist/extensions/store.js.map +1 -1
  442. package/dist/index.d.ts +1 -1
  443. package/dist/index.d.ts.map +1 -1
  444. package/dist/index.js +1 -1
  445. package/dist/index.js.map +1 -1
  446. package/dist/ingestion/docx.d.ts +16 -0
  447. package/dist/ingestion/docx.d.ts.map +1 -0
  448. package/dist/ingestion/docx.js +129 -0
  449. package/dist/ingestion/docx.js.map +1 -0
  450. package/dist/ingestion/figma-node-to-html.d.ts +304 -0
  451. package/dist/ingestion/figma-node-to-html.d.ts.map +1 -0
  452. package/dist/ingestion/figma-node-to-html.js +1292 -0
  453. package/dist/ingestion/figma-node-to-html.js.map +1 -0
  454. package/dist/ingestion/figma.d.ts +115 -0
  455. package/dist/ingestion/figma.d.ts.map +1 -0
  456. package/dist/ingestion/figma.js +399 -0
  457. package/dist/ingestion/figma.js.map +1 -0
  458. package/dist/ingestion/index.d.ts +11 -0
  459. package/dist/ingestion/index.d.ts.map +1 -0
  460. package/dist/ingestion/index.js +11 -0
  461. package/dist/ingestion/index.js.map +1 -0
  462. package/dist/ingestion/media.d.ts +36 -0
  463. package/dist/ingestion/media.d.ts.map +1 -0
  464. package/dist/ingestion/media.js +178 -0
  465. package/dist/ingestion/media.js.map +1 -0
  466. package/dist/ingestion/notion.d.ts +12 -0
  467. package/dist/ingestion/notion.d.ts.map +1 -0
  468. package/dist/ingestion/notion.js +104 -0
  469. package/dist/ingestion/notion.js.map +1 -0
  470. package/dist/ingestion/office.d.ts +45 -0
  471. package/dist/ingestion/office.d.ts.map +1 -0
  472. package/dist/ingestion/office.js +141 -0
  473. package/dist/ingestion/office.js.map +1 -0
  474. package/dist/ingestion/orchestration.d.ts +52 -0
  475. package/dist/ingestion/orchestration.d.ts.map +1 -0
  476. package/dist/ingestion/orchestration.js +89 -0
  477. package/dist/ingestion/orchestration.js.map +1 -0
  478. package/dist/ingestion/pptx.d.ts +28 -0
  479. package/dist/ingestion/pptx.d.ts.map +1 -0
  480. package/dist/ingestion/pptx.js +255 -0
  481. package/dist/ingestion/pptx.js.map +1 -0
  482. package/dist/ingestion/selection.d.ts +20 -0
  483. package/dist/ingestion/selection.d.ts.map +1 -0
  484. package/dist/ingestion/selection.js +52 -0
  485. package/dist/ingestion/selection.js.map +1 -0
  486. package/dist/ingestion/website.d.ts +27 -0
  487. package/dist/ingestion/website.d.ts.map +1 -0
  488. package/dist/ingestion/website.js +100 -0
  489. package/dist/ingestion/website.js.map +1 -0
  490. package/dist/integrations/plugin.d.ts.map +1 -1
  491. package/dist/integrations/plugin.js +32 -27
  492. package/dist/integrations/plugin.js.map +1 -1
  493. package/dist/localization/default-messages.d.ts +22 -0
  494. package/dist/localization/default-messages.d.ts.map +1 -1
  495. package/dist/localization/default-messages.js +31 -9
  496. package/dist/localization/default-messages.js.map +1 -1
  497. package/dist/notifications/routes.d.ts +2 -2
  498. package/dist/observability/hosted-model-experiment.d.ts +39 -0
  499. package/dist/observability/hosted-model-experiment.d.ts.map +1 -0
  500. package/dist/observability/hosted-model-experiment.js +90 -0
  501. package/dist/observability/hosted-model-experiment.js.map +1 -0
  502. package/dist/observability/routes.d.ts +5 -5
  503. package/dist/observability/traces.d.ts.map +1 -1
  504. package/dist/observability/traces.js +5 -3
  505. package/dist/observability/traces.js.map +1 -1
  506. package/dist/provider-api/index.d.ts +35 -4
  507. package/dist/provider-api/index.d.ts.map +1 -1
  508. package/dist/provider-api/index.js +339 -8
  509. package/dist/provider-api/index.js.map +1 -1
  510. package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
  511. package/dist/scripts/agent-engines/list-agent-engines.js +18 -1
  512. package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
  513. package/dist/search-utils/index.d.ts +12 -0
  514. package/dist/search-utils/index.d.ts.map +1 -0
  515. package/dist/search-utils/index.js +95 -0
  516. package/dist/search-utils/index.js.map +1 -0
  517. package/dist/secrets/register-framework-secrets.d.ts.map +1 -1
  518. package/dist/secrets/register-framework-secrets.js +57 -0
  519. package/dist/secrets/register-framework-secrets.js.map +1 -1
  520. package/dist/secrets/routes.d.ts +9 -9
  521. package/dist/server/action-discovery.d.ts +8 -0
  522. package/dist/server/action-discovery.d.ts.map +1 -1
  523. package/dist/server/action-discovery.js +26 -9
  524. package/dist/server/action-discovery.js.map +1 -1
  525. package/dist/server/agent-chat/framework-prompts.js +2 -2
  526. package/dist/server/agent-chat/framework-prompts.js.map +1 -1
  527. package/dist/server/agent-chat/prompt-resources.d.ts +19 -0
  528. package/dist/server/agent-chat/prompt-resources.d.ts.map +1 -1
  529. package/dist/server/agent-chat/prompt-resources.js +95 -0
  530. package/dist/server/agent-chat/prompt-resources.js.map +1 -1
  531. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  532. package/dist/server/agent-chat-plugin.js +7 -0
  533. package/dist/server/agent-chat-plugin.js.map +1 -1
  534. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  535. package/dist/server/core-routes-plugin.js +5 -0
  536. package/dist/server/core-routes-plugin.js.map +1 -1
  537. package/dist/server/index.d.ts +5 -1
  538. package/dist/server/index.d.ts.map +1 -1
  539. package/dist/server/index.js +5 -1
  540. package/dist/server/index.js.map +1 -1
  541. package/dist/server/workspace-provider-oauth.d.ts +48 -0
  542. package/dist/server/workspace-provider-oauth.d.ts.map +1 -0
  543. package/dist/server/workspace-provider-oauth.js +415 -0
  544. package/dist/server/workspace-provider-oauth.js.map +1 -0
  545. package/dist/styles/agent-native.css +9 -0
  546. package/dist/templates/chat/app/i18n/en-US.ts +3 -3
  547. package/dist/templates/chat/app/lib/agent-page.tsx +10 -1
  548. package/dist/templates/default/app/i18n/en-US.ts +3 -3
  549. package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +14 -5
  550. package/dist/templates/workspace-root/.env.example +12 -0
  551. package/dist/workspace-connections/index.d.ts +1 -0
  552. package/dist/workspace-connections/index.d.ts.map +1 -1
  553. package/dist/workspace-connections/index.js +1 -0
  554. package/dist/workspace-connections/index.js.map +1 -1
  555. package/dist/workspace-connections/lifecycle.d.ts +16 -0
  556. package/dist/workspace-connections/lifecycle.d.ts.map +1 -0
  557. package/dist/workspace-connections/lifecycle.js +14 -0
  558. package/dist/workspace-connections/lifecycle.js.map +1 -0
  559. package/dist/workspace-connections/store.d.ts.map +1 -1
  560. package/dist/workspace-connections/store.js +16 -0
  561. package/dist/workspace-connections/store.js.map +1 -1
  562. package/package.json +10 -3
  563. package/src/templates/chat/app/i18n/en-US.ts +3 -3
  564. package/src/templates/chat/app/lib/agent-page.spec.tsx +10 -1
  565. package/src/templates/chat/app/lib/agent-page.tsx +10 -1
  566. package/src/templates/default/app/i18n/en-US.ts +3 -3
  567. package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +14 -5
  568. package/src/templates/workspace-root/.env.example +12 -0
@@ -19,6 +19,7 @@ import {
19
19
  type ListRecordingsArgs,
20
20
  type RecordingSummary,
21
21
  } from "@/hooks/use-library";
22
+ import { cn } from "@/lib/utils";
22
23
 
23
24
  import { BulkActionToolbar, type BulkMoveTarget } from "./bulk-action-toolbar";
24
25
  import { EmptyState } from "./empty-state";
@@ -291,109 +292,116 @@ export function LibraryGrid({
291
292
  )}
292
293
 
293
294
  {/* Grid body */}
294
- <div className="flex-1 overflow-y-auto">
295
- <div className="p-5">
296
- {isLoading ? (
297
- <div className="grid gap-4 [grid-template-columns:repeat(auto-fill,minmax(300px,1fr))]">
298
- {Array.from({ length: 8 }).map((_, i) => (
299
- <Skeleton key={i} />
300
- ))}
301
- </div>
302
- ) : isError && recordings.length === 0 ? (
303
- <div className="flex flex-1 flex-col items-center justify-center py-20 px-8 text-center">
304
- <div className="relative mb-6 flex h-20 w-20 items-center justify-center rounded-2xl bg-destructive/10">
305
- <IconAlertTriangle className="h-10 w-10 text-destructive" />
295
+ <div className="relative flex min-h-0 flex-1 overflow-hidden">
296
+ <div
297
+ className={cn(
298
+ "min-h-0 flex-1 overflow-y-auto",
299
+ selected.size > 0 && "pb-20",
300
+ )}
301
+ >
302
+ <div className="p-5">
303
+ {isLoading ? (
304
+ <div className="grid gap-4 [grid-template-columns:repeat(auto-fill,minmax(300px,1fr))]">
305
+ {Array.from({ length: 8 }).map((_, i) => (
306
+ <Skeleton key={i} />
307
+ ))}
306
308
  </div>
307
- <h2 className="text-base font-semibold text-foreground mb-1">
308
- {t("libraryGrid.loadFailedTitle")}
309
- </h2>
310
- <p className="text-sm text-muted-foreground max-w-sm mb-5">
311
- {t("libraryGrid.loadFailedBody")}
312
- </p>
313
- <Button
314
- onClick={() => refetch()}
315
- disabled={isRefetching}
316
- size="sm"
317
- >
318
- {t("libraryGrid.retry")}
319
- </Button>
320
- </div>
321
- ) : recordings.length === 0 ? (
322
- <EmptyState
323
- kind={resolvedEmptyKind}
324
- spaceId={spaceId}
325
- folderId={folderId}
326
- />
327
- ) : (
328
- <div className="grid gap-4 [grid-template-columns:repeat(auto-fill,minmax(300px,1fr))]">
329
- {recordings.map((r: RecordingSummary) => (
330
- <RecordingCard
331
- key={r.id}
332
- recording={r}
333
- selected={
334
- canManageRecordings ? selected.has(r.id) : undefined
335
- }
336
- selectionMode={canManageRecordings && selectionMode}
337
- onToggleSelect={
338
- canManageRecordings ? toggleSelect : undefined
339
- }
340
- onShare={
341
- canManageRecordings
342
- ? (rec) => setSharingRec(rec)
343
- : undefined
344
- }
345
- moveTargets={moveTargets}
346
- onMove={canMoveSelection ? moveSingle : undefined}
347
- isMovePending={moveRecording.isPending}
348
- onTrash={
349
- canManageRecordings
350
- ? (rec) => {
351
- trashRecording.mutate(
352
- { id: rec.id },
353
- {
354
- onSuccess: () =>
355
- toast.success(t("libraryGrid.movedToTrash")),
356
- },
357
- );
358
- }
359
- : undefined
360
- }
361
- onArchive={
362
- canManageRecordings
363
- ? (rec) => {
364
- if (rec.archivedAt) {
365
- restoreRecording.mutate(
366
- { id: rec.id },
367
- {
368
- onSuccess: () =>
369
- toast.success(
370
- t("libraryGrid.restoredFromArchive"),
371
- ),
372
- },
373
- );
374
- } else {
375
- archiveRecording.mutate(
309
+ ) : isError && recordings.length === 0 ? (
310
+ <div className="flex flex-1 flex-col items-center justify-center py-20 px-8 text-center">
311
+ <div className="relative mb-6 flex h-20 w-20 items-center justify-center rounded-2xl bg-destructive/10">
312
+ <IconAlertTriangle className="h-10 w-10 text-destructive" />
313
+ </div>
314
+ <h2 className="text-base font-semibold text-foreground mb-1">
315
+ {t("libraryGrid.loadFailedTitle")}
316
+ </h2>
317
+ <p className="text-sm text-muted-foreground max-w-sm mb-5">
318
+ {t("libraryGrid.loadFailedBody")}
319
+ </p>
320
+ <Button
321
+ onClick={() => refetch()}
322
+ disabled={isRefetching}
323
+ size="sm"
324
+ >
325
+ {t("libraryGrid.retry")}
326
+ </Button>
327
+ </div>
328
+ ) : recordings.length === 0 ? (
329
+ <EmptyState
330
+ kind={resolvedEmptyKind}
331
+ spaceId={spaceId}
332
+ folderId={folderId}
333
+ />
334
+ ) : (
335
+ <div className="grid gap-4 [grid-template-columns:repeat(auto-fill,minmax(300px,1fr))]">
336
+ {recordings.map((r: RecordingSummary) => (
337
+ <RecordingCard
338
+ key={r.id}
339
+ recording={r}
340
+ selected={
341
+ canManageRecordings ? selected.has(r.id) : undefined
342
+ }
343
+ selectionMode={canManageRecordings && selectionMode}
344
+ onToggleSelect={
345
+ canManageRecordings ? toggleSelect : undefined
346
+ }
347
+ onShare={
348
+ canManageRecordings
349
+ ? (rec) => setSharingRec(rec)
350
+ : undefined
351
+ }
352
+ moveTargets={moveTargets}
353
+ onMove={canMoveSelection ? moveSingle : undefined}
354
+ isMovePending={moveRecording.isPending}
355
+ onTrash={
356
+ canManageRecordings
357
+ ? (rec) => {
358
+ trashRecording.mutate(
376
359
  { id: rec.id },
377
360
  {
378
361
  onSuccess: () =>
379
- toast.success(t("libraryGrid.archived")),
362
+ toast.success(t("libraryGrid.movedToTrash")),
380
363
  },
381
364
  );
382
365
  }
383
- }
384
- : undefined
385
- }
386
- readOnly={!canManageRecordings}
387
- />
388
- ))}
389
- </div>
390
- )}
366
+ : undefined
367
+ }
368
+ onArchive={
369
+ canManageRecordings
370
+ ? (rec) => {
371
+ if (rec.archivedAt) {
372
+ restoreRecording.mutate(
373
+ { id: rec.id },
374
+ {
375
+ onSuccess: () =>
376
+ toast.success(
377
+ t("libraryGrid.restoredFromArchive"),
378
+ ),
379
+ },
380
+ );
381
+ } else {
382
+ archiveRecording.mutate(
383
+ { id: rec.id },
384
+ {
385
+ onSuccess: () =>
386
+ toast.success(t("libraryGrid.archived")),
387
+ },
388
+ );
389
+ }
390
+ }
391
+ : undefined
392
+ }
393
+ readOnly={!canManageRecordings}
394
+ />
395
+ ))}
396
+ </div>
397
+ )}
398
+ </div>
391
399
  </div>
392
400
 
393
- {/* Sticky bulk-action toolbar */}
401
+ {/* Keep selected-library actions visible while the recording list scrolls. */}
394
402
  {canManageRecordings && selected.size > 0 && (
395
- <div className="pointer-events-none sticky bottom-0 flex justify-center pb-4">
396
- <div className="pointer-events-auto">
403
+ <div className="pointer-events-none absolute inset-x-0 bottom-0 z-30 flex justify-center px-4 pb-4">
404
+ <div className="pointer-events-auto max-w-full overflow-x-auto">
397
405
  <BulkActionToolbar
398
406
  count={selected.size}
399
407
  moveTargets={moveTargets}
@@ -510,6 +510,17 @@ export const VideoPlayer = forwardRef<VideoPlayerHandle, VideoPlayerProps>(
510
510
  bumpControls();
511
511
  setPlayError(null);
512
512
 
513
+ // The center replay control calls requestPlay directly (rather than the
514
+ // surface toggle path), so restart an ended media element here as well.
515
+ if (v.ended) {
516
+ try {
517
+ v.currentTime = 0;
518
+ setCurrentMs(0);
519
+ } catch {
520
+ // Let the normal play attempt report a media error if the seek fails.
521
+ }
522
+ }
523
+
513
524
  if (
514
525
  !hasPlaybackStarted &&
515
526
  (!startMs || startMs <= 0) &&
@@ -5,22 +5,34 @@ import {
5
5
  } from "@agent-native/core/client";
6
6
  import { IconPalette, IconPhoto } from "@tabler/icons-react";
7
7
  import { useQueryClient } from "@tanstack/react-query";
8
- import { useState } from "react";
8
+ import { useEffect, useState } from "react";
9
9
  import { toast } from "sonner";
10
10
 
11
11
  import { Button } from "@/components/ui/button";
12
12
  import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
13
13
  import { Input } from "@/components/ui/input";
14
14
  import { Label } from "@/components/ui/label";
15
+ import {
16
+ Select,
17
+ SelectContent,
18
+ SelectItem,
19
+ SelectTrigger,
20
+ SelectValue,
21
+ } from "@/components/ui/select";
22
+
23
+ export type RecordingVisibility = "private" | "org" | "public";
15
24
 
16
25
  interface BrandingEditorProps {
17
26
  organizationId: string;
18
27
  initialName: string;
19
28
  initialBrandColor: string;
20
29
  initialBrandLogoUrl: string | null;
30
+ initialDefaultVisibility?: RecordingVisibility;
21
31
  disabled?: boolean;
22
32
  }
23
33
 
34
+ const DEFAULT_VISIBILITY: RecordingVisibility = "public";
35
+
24
36
  const PRESETS = [
25
37
  "#18181B",
26
38
  "#22C55E",
@@ -54,6 +66,7 @@ export function BrandingEditor({
54
66
  initialName,
55
67
  initialBrandColor,
56
68
  initialBrandLogoUrl,
69
+ initialDefaultVisibility = DEFAULT_VISIBILITY,
57
70
  disabled,
58
71
  }: BrandingEditorProps) {
59
72
  const t = useT();
@@ -62,9 +75,15 @@ export function BrandingEditor({
62
75
  const [brandLogoUrl, setBrandLogoUrl] = useState<string | null>(
63
76
  initialBrandLogoUrl,
64
77
  );
78
+ const [defaultVisibility, setDefaultVisibility] =
79
+ useState<RecordingVisibility>(initialDefaultVisibility);
65
80
  const [uploading, setUploading] = useState(false);
66
81
  const [dragging, setDragging] = useState(false);
67
82
 
83
+ useEffect(() => {
84
+ setDefaultVisibility(initialDefaultVisibility);
85
+ }, [initialDefaultVisibility]);
86
+
68
87
  const qc = useQueryClient();
69
88
  const save = useActionMutation<
70
89
  any,
@@ -73,6 +92,7 @@ export function BrandingEditor({
73
92
  name?: string;
74
93
  brandColor?: string;
75
94
  brandLogoUrl?: string | null;
95
+ defaultVisibility?: RecordingVisibility;
76
96
  }
77
97
  >("set-organization-branding");
78
98
 
@@ -103,6 +123,7 @@ export function BrandingEditor({
103
123
  name: name.trim() || undefined,
104
124
  brandColor,
105
125
  brandLogoUrl,
126
+ defaultVisibility,
106
127
  });
107
128
  toast.success(t("brandingEditor.brandingUpdated"));
108
129
  qc.invalidateQueries({
@@ -246,6 +267,37 @@ export function BrandingEditor({
246
267
  </div>
247
268
  </div>
248
269
 
270
+ <div className="space-y-1.5">
271
+ <Label htmlFor="default-visibility">
272
+ {t("brandingEditor.defaultVisibility")}
273
+ </Label>
274
+ <Select
275
+ value={defaultVisibility}
276
+ onValueChange={(value) =>
277
+ setDefaultVisibility(value as RecordingVisibility)
278
+ }
279
+ disabled={disabled}
280
+ >
281
+ <SelectTrigger id="default-visibility">
282
+ <SelectValue />
283
+ </SelectTrigger>
284
+ <SelectContent>
285
+ <SelectItem value="public">
286
+ {t("playerSettings.visibilityPublic")}
287
+ </SelectItem>
288
+ <SelectItem value="org">
289
+ {t("playerSettings.visibilityOrg")}
290
+ </SelectItem>
291
+ <SelectItem value="private">
292
+ {t("playerSettings.visibilityPrivate")}
293
+ </SelectItem>
294
+ </SelectContent>
295
+ </Select>
296
+ <p className="text-xs text-muted-foreground">
297
+ {t("brandingEditor.defaultVisibilityDescription")}
298
+ </p>
299
+ </div>
300
+
249
301
  <div className="rounded-md border p-4">
250
302
  <div className="text-xs uppercase tracking-wide text-muted-foreground mb-2">
251
303
  {t("brandingEditor.preview")}
@@ -170,7 +170,7 @@ const messages = {
170
170
  "انتهى مسجل سطح المكتب وحفظ نسخة محلية، لكن لم يتمكن Clips من تحميلها. يمكنك إعادة المحاولة من قائمة Clips دون التسجيل مرة أخرى.",
171
171
  retryLibrary: "يمكنك إعادة المحاولة من المكتبة.",
172
172
  processingStuck:
173
- "لم تكتمل المعالجة بعد 30 ثانية (الحالة={{status}}). ربما لم يتم الانتهاء من تحميل المقطع تحقق من سجلات الخادم بحثًا عن الرسائل المجمعة/النهائية.",
173
+ "يستغرق حفظ المقطع وقتًا أطول من المتوقع (الحالة={{status}}). إذا سجلته في تطبيق سطح المكتب، فافتح Clips من شريط القوائم لإعادة محاولة الرفع أو تنزيل نسخة محلية محفوظة، ثم تحقق مرة أخرى.",
174
174
  uploadingAssembling:
175
175
  "تحميل الفيديو الخاص بك وتجميعه — يستغرق هذا عادةً بضع ثوانٍ فقط.",
176
176
  connectStorageImportLoom: "قم بتوصيل وحدة التخزين لاستيراد Loom هذا.",
@@ -214,6 +214,9 @@ const messages = {
214
214
  autoChapters: "فصول السيارات",
215
215
  removeFillerWords: "إزالة كلمات الحشو",
216
216
  removeSilences: "إزالة فترات الصمت (> 1.2 ثانية)",
217
+ silenceWorking: "جارٍ إزالة فترات الصمت…",
218
+ silenceCompleted: "اكتملت إزالة فترات الصمت",
219
+ silenceFailed: "فشلت إزالة فترات الصمت",
217
220
  generatePrSummary: "إنشاء ملخص للعلاقات العامة",
218
221
  generateSop: "توليد SOP",
219
222
  generateSopTooltip:
@@ -540,6 +543,9 @@ const messages = {
540
543
  brandingUpdated: "تم تحديث العلامة التجارية",
541
544
  saveFailed: "فشل الحفظ",
542
545
  organizationName: "اسم المؤسسة",
546
+ defaultVisibility: "الرؤية الافتراضية للتسجيلات الجديدة",
547
+ defaultVisibilityDescription:
548
+ "تُطبّق على التسجيلات الجديدة ما لم تختر رؤية مختلفة.",
543
549
  brandColor: "لون العلامة التجارية",
544
550
  brandColorPicker: "منتقي لون العلامة التجارية",
545
551
  useColor: "استخدم {{color}}",
@@ -174,7 +174,7 @@ const messages = {
174
174
  "Der Desktop-Recorder hat den Vorgang abgeschlossen und eine lokale Kopie gespeichert, aber Clips konnte sie nicht hochladen. Sie können es über das Clips-Menü erneut versuchen, ohne erneut aufzunehmen.",
175
175
  retryLibrary: "Sie können es in der Bibliothek erneut versuchen.",
176
176
  processingStuck:
177
- "Die Verarbeitung ist nach 30 Sekunden noch nicht abgeschlossen (Status={{status}}). Der Clip wurde möglicherweise noch nicht vollständig hochgeladen. Überprüfen Sie die Serverprotokolle auf Chunk-/Finalisierungsmeldungen.",
177
+ "Das Speichern dauert länger als erwartet (Status={{status}}). Wenn du mit der Desktop-App aufgenommen hast, öffne Clips über die Menüleiste, um den Upload erneut zu versuchen oder eine gespeicherte lokale Kopie herunterzuladen. Prüfe danach erneut.",
178
178
  uploadingAssembling:
179
179
  "Das Hochladen und Zusammenstellen Ihres Videos dauert normalerweise nur wenige Sekunden.",
180
180
  connectStorageImportLoom:
@@ -225,6 +225,9 @@ const messages = {
225
225
  autoChapters: "Automatische Kapitel",
226
226
  removeFillerWords: "Entfernen Sie Füllwörter",
227
227
  removeSilences: "Stille entfernen (>1,2 s)",
228
+ silenceWorking: "Stille wird entfernt…",
229
+ silenceCompleted: "Entfernen der Stille abgeschlossen",
230
+ silenceFailed: "Entfernen der Stille fehlgeschlagen",
228
231
  generatePrSummary: "Erstellen Sie eine PR-Zusammenfassung",
229
232
  generateSop: "Generieren Sie SOP",
230
233
  generateSopTooltip:
@@ -555,6 +558,9 @@ const messages = {
555
558
  brandingUpdated: "Branding aktualisiert",
556
559
  saveFailed: "Speichern fehlgeschlagen",
557
560
  organizationName: "Name der Organisation",
561
+ defaultVisibility: "Standard-Sichtbarkeit neuer Aufnahmen",
562
+ defaultVisibilityDescription:
563
+ "Wird auf neue Aufnahmen angewendet, sofern du keine andere Sichtbarkeit auswählst.",
558
564
  brandColor: "Markenfarbe",
559
565
  brandColorPicker: "Markenfarbauswahl",
560
566
  useColor: "Verwenden Sie {{color}}",
@@ -161,6 +161,9 @@ const messages = {
161
161
  chapterQueued: "Chapter request queued",
162
162
  fillerQueued: "Filler-word removal queued",
163
163
  silenceQueued: "Silence removal queued",
164
+ silenceWorking: "Removing silences…",
165
+ silenceCompleted: "Silence removal complete",
166
+ silenceFailed: "Silence removal failed",
164
167
  workflowQueued: "Workflow request queued",
165
168
  pageTitle: "Clip recording · Clips",
166
169
  loomMissingUrl: "This Loom recording is missing its source URL.",
@@ -171,7 +174,7 @@ const messages = {
171
174
  "The desktop recorder finished and saved a local copy, but Clips could not upload it. You can retry from the Clips menu without recording again.",
172
175
  retryLibrary: "You can retry from the library.",
173
176
  processingStuck:
174
- "Processing has not completed after 30 seconds (status={{status}}). The clip may not have finished uploading check the server logs for chunk/finalize messages.",
177
+ "Saving is taking longer than expected (status={{status}}). If you recorded in the desktop app, open Clips from the menu bar to retry or download a saved local copy, then check again.",
175
178
  uploadingAssembling:
176
179
  "Uploading and assembling your video — this usually takes just a few seconds.",
177
180
  connectStorageImportLoom: "Connect storage to import this Loom.",
@@ -536,6 +539,9 @@ const messages = {
536
539
  brandingUpdated: "Branding updated",
537
540
  saveFailed: "Failed to save",
538
541
  organizationName: "Organization name",
542
+ defaultVisibility: "Default recording visibility",
543
+ defaultVisibilityDescription:
544
+ "Applied to new recordings unless you choose a different visibility.",
539
545
  brandColor: "Brand color",
540
546
  brandColorPicker: "Brand color picker",
541
547
  useColor: "Use {{color}}",
@@ -602,10 +608,10 @@ const messages = {
602
608
  pageTitle: "Join team · Clips",
603
609
  },
604
610
  settings: {
605
- openAgentSettings: "Open agent settings",
611
+ openAgentSettings: "Open agent workspace",
606
612
  agentDescription:
607
- "Open the agent sidebar settings for model, API keys, automations, voice, and other agent controls.",
608
- agentTitle: "Agent settings",
613
+ "Open the agent workspace for model, API keys, automations, voice, and other agent controls.",
614
+ agentTitle: "Agent workspace",
609
615
  title: "Settings",
610
616
  pageTitle: "Settings · Clips",
611
617
  intro: "Preferences and connected services for this Clips workspace.",
@@ -173,7 +173,7 @@ const messages = {
173
173
  "La grabadora de escritorio terminó y guardó una copia local, pero Clips no pudo cargarla. Puedes volver a intentarlo desde el menú Clips sin volver a grabar.",
174
174
  retryLibrary: "Puedes volver a intentarlo desde la biblioteca.",
175
175
  processingStuck:
176
- "El procesamiento no se ha completado después de 30 segundos (estado={{status}}). Es posible que el clip no haya terminado de cargarse; verifique los registros del servidor para ver si hay mensajes fragmentados/finalizados.",
176
+ "El guardado está tardando más de lo esperado (estado={{status}}). Si grabaste con la aplicación de escritorio, abre Clips desde la barra de menús para reintentar la carga o descargar una copia local guardada y vuelve a comprobarlo.",
177
177
  uploadingAssembling:
178
178
  "Cargar y ensamblar su video; esto generalmente toma solo unos segundos.",
179
179
  connectStorageImportLoom:
@@ -224,6 +224,9 @@ const messages = {
224
224
  autoChapters: "capítulos automáticos",
225
225
  removeFillerWords: "Eliminar palabras de relleno",
226
226
  removeSilences: "Eliminar silencios (>1,2s)",
227
+ silenceWorking: "Eliminando silencios…",
228
+ silenceCompleted: "Eliminación de silencios completada",
229
+ silenceFailed: "No se pudieron eliminar los silencios",
227
230
  generatePrSummary: "Generar resumen de relaciones públicas",
228
231
  generateSop: "Generar SOP",
229
232
  generateSopTooltip:
@@ -552,6 +555,9 @@ const messages = {
552
555
  brandingUpdated: "Marca actualizada",
553
556
  saveFailed: "No se pudo guardar",
554
557
  organizationName: "Nombre de la organización",
558
+ defaultVisibility: "Visibilidad predeterminada de las nuevas grabaciones",
559
+ defaultVisibilityDescription:
560
+ "Se aplica a las nuevas grabaciones, a menos que elijas otra visibilidad.",
555
561
  brandColor: "Color de la marca",
556
562
  brandColorPicker: "Selector de color de marca",
557
563
  useColor: "Utilice {{color}}",
@@ -172,7 +172,7 @@ const messages = {
172
172
  "L'enregistreur de bureau a terminé et a enregistré une copie locale, mais Clips n'a pas pu la télécharger. Vous pouvez réessayer à partir du menu Clips sans réenregistrer.",
173
173
  retryLibrary: "Vous pouvez réessayer depuis la bibliothèque.",
174
174
  processingStuck:
175
- "Le traitement n'est pas terminé après 30 secondes (status={{status}}). Le téléchargement du clip n'est peut-être pas terminé – vérifiez les journaux du serveur pour les messages de fragmentation/finalisation.",
175
+ "L’enregistrement prend plus de temps que prévu (statut={{status}}). Si vous avez utilisé l’application de bureau, ouvrez Clips depuis la barre des menus pour réessayer l’envoi ou télécharger une copie locale enregistrée, puis vérifiez à nouveau.",
176
176
  uploadingAssembling:
177
177
  "Télécharger et assembler votre vidéo : cela ne prend généralement que quelques secondes.",
178
178
  connectStorageImportLoom: "Connectez le stockage pour importer ce Loom.",
@@ -224,6 +224,9 @@ const messages = {
224
224
  autoChapters: "Chapitres automatiques",
225
225
  removeFillerWords: "Supprimer les mots de remplissage",
226
226
  removeSilences: "Supprimer les silences (>1,2s)",
227
+ silenceWorking: "Suppression des silences…",
228
+ silenceCompleted: "Suppression des silences terminée",
229
+ silenceFailed: "Échec de la suppression des silences",
227
230
  generatePrSummary: "Générer un résumé des relations publiques",
228
231
  generateSop: "Générer SOP",
229
232
  generateSopTooltip:
@@ -552,6 +555,9 @@ const messages = {
552
555
  brandingUpdated: "Image de marque mise à jour",
553
556
  saveFailed: "Échec de l'enregistrement",
554
557
  organizationName: "Nom de l'organisation",
558
+ defaultVisibility: "Visibilité par défaut des nouveaux enregistrements",
559
+ defaultVisibilityDescription:
560
+ "S'applique aux nouveaux enregistrements, sauf si vous choisissez une autre visibilité.",
555
561
  brandColor: "Couleur de la marque",
556
562
  brandColorPicker: "Sélecteur de couleurs de marque",
557
563
  useColor: "Utilisez {{color}}",
@@ -171,7 +171,7 @@ const messages = {
171
171
  "डेस्कटॉप रिकॉर्डर ने काम पूरा कर लिया और एक स्थानीय प्रतिलिपि सहेज ली, लेकिन Clips इसे अपलोड नहीं कर सका। आप दोबारा रिकॉर्डिंग किए बिना Clips मेनू से पुनः प्रयास कर सकते हैं।",
172
172
  retryLibrary: "आप लाइब्रेरी से पुनः प्रयास कर सकते हैं.",
173
173
  processingStuck:
174
- "30 सेकंड के बाद प्रसंस्करण पूरा नहीं हुआ है (स्थिति={{status}})। हो सकता है कि क्लिप की अपलोडिंग पूरी हुई हो - संदेशों को खंडित/अंतिम रूप देने के लिए सर्वर लॉग की जाँच करें।",
174
+ "क्लिप को सेव होने में अपेक्षा से अधिक समय लग रहा है (स्थिति={{status}})। अगर आपने डेस्कटॉप ऐप में रिकॉर्ड किया है, तो अपलोड दोबारा करने या सेव की गई स्थानीय कॉपी डाउनलोड करने के लिए मेनू बार से Clips खोलें, फिर दोबारा जाँचें।",
175
175
  uploadingAssembling:
176
176
  "अपना वीडियो अपलोड करना और असेंबल करना - इसमें आमतौर पर बस कुछ सेकंड लगते हैं।",
177
177
  connectStorageImportLoom: "इस Loom को आयात करने के लिए स्टोरेज कनेक्ट करें।",
@@ -214,6 +214,9 @@ const messages = {
214
214
  autoChapters: "ऑटो अध्याय",
215
215
  removeFillerWords: "पूरक शब्द हटाएँ",
216
216
  removeSilences: "मौन हटाएँ (>1.2s)",
217
+ silenceWorking: "मौन हटाए जा रहे हैं…",
218
+ silenceCompleted: "मौन हटाना पूरा हुआ",
219
+ silenceFailed: "मौन हटाना विफल रहा",
217
220
  generatePrSummary: "पीआर सारांश तैयार करें",
218
221
  generateSop: "SOP उत्पन्न करें",
219
222
  generateSopTooltip:
@@ -532,6 +535,9 @@ const messages = {
532
535
  brandingUpdated: "ब्रांडिंग अपडेट हुई",
533
536
  saveFailed: "सहेजने में विफल",
534
537
  organizationName: "संगठन का नाम",
538
+ defaultVisibility: "नई रिकॉर्डिंग की डिफ़ॉल्ट दृश्यता",
539
+ defaultVisibilityDescription:
540
+ "जब तक आप कोई अलग दृश्यता न चुनें, यह नई रिकॉर्डिंग पर लागू होगी।",
535
541
  brandColor: "ब्रांड रंग",
536
542
  brandColorPicker: "ब्रांड रंग चयनकर्ता",
537
543
  useColor: "{{color}} उपयोग करें",
@@ -172,7 +172,7 @@ const messages = {
172
172
  "デスクトップ レコーダーは終了し、ローカル コピーを保存しましたが、Clips はそれをアップロードできませんでした。再度録音せずに、Clips メニューから再試行できます。",
173
173
  retryLibrary: "ライブラリから再試行できます。",
174
174
  processingStuck:
175
- "処理は 30 秒経過しても完了しませんでした (status={{status}})。クリップのアップロードが完了していない可能性があります。サーバー ログでチャンク/ファイナライズ メッセージを確認してください。",
175
+ "保存に予想以上の時間がかかっています(ステータス={{status}})。デスクトップアプリで録画した場合は、メニューバーから Clips を開き、アップロードを再試行するか保存済みのローカルコピーをダウンロードしてから、もう一度確認してください。",
176
176
  uploadingAssembling:
177
177
  "ビデオのアップロードと組み立て - 通常、これには数秒しかかかりません。",
178
178
  connectStorageImportLoom:
@@ -222,6 +222,9 @@ const messages = {
222
222
  autoChapters: "自動チャプター",
223
223
  removeFillerWords: "つなぎ言葉を削除する",
224
224
  removeSilences: "無音部分を削除 (>1.2 秒)",
225
+ silenceWorking: "無音部分を削除しています…",
226
+ silenceCompleted: "無音部分の削除が完了しました",
227
+ silenceFailed: "無音部分の削除に失敗しました",
225
228
  generatePrSummary: "PRサマリーを生成する",
226
229
  generateSop: "SOPを生成する",
227
230
  generateSopTooltip:
@@ -547,6 +550,9 @@ const messages = {
547
550
  brandingUpdated: "ブランドを更新しました",
548
551
  saveFailed: "保存に失敗しました",
549
552
  organizationName: "組織名",
553
+ defaultVisibility: "新しい録画のデフォルトの公開範囲",
554
+ defaultVisibilityDescription:
555
+ "別の公開範囲を選択しない限り、新しい録画に適用されます。",
550
556
  brandColor: "ブランドカラー",
551
557
  brandColorPicker: "ブランドカラーピッカー",
552
558
  useColor: "{{color}} を使用してください",
@@ -171,7 +171,7 @@ const messages = {
171
171
  "데스크톱 레코더가 완료되고 로컬 복사본을 저장했지만 Clips가 이를 업로드할 수 없습니다. 다시 녹음하지 않고 Clips 메뉴에서 다시 시도할 수 있습니다.",
172
172
  retryLibrary: "라이브러리에서 다시 시도할 수 있습니다.",
173
173
  processingStuck:
174
- "30초 후에도 처리가 완료되지 않았습니다(상태={{status}}). 클립 업로드가 완료되지 않았을 있습니다. 서버 로그에서 청크/완결 메시지를 확인하세요.",
174
+ "저장하는 예상보다 오래 걸리고 있습니다(상태={{status}}). 데스크톱 앱에서 녹화했다면 메뉴 막대에서 Clips를 열어 업로드를 다시 시도하거나 저장된 로컬 사본을 다운로드한 다음 다시 확인하세요.",
175
175
  uploadingAssembling:
176
176
  "비디오 업로드 및 취합 – 일반적으로 몇 초 밖에 걸리지 않습니다.",
177
177
  connectStorageImportLoom: "이 Loom를 가져오려면 저장소를 연결하세요.",
@@ -218,6 +218,9 @@ const messages = {
218
218
  autoChapters: "자동 챕터",
219
219
  removeFillerWords: "필러 단어 제거",
220
220
  removeSilences: "무음 제거(>1.2초)",
221
+ silenceWorking: "무음 구간을 제거하는 중…",
222
+ silenceCompleted: "무음 구간 제거 완료",
223
+ silenceFailed: "무음 구간 제거 실패",
221
224
  generatePrSummary: "PR 요약 생성",
222
225
  generateSop: "SOP 생성",
223
226
  generateSopTooltip:
@@ -539,6 +542,9 @@ const messages = {
539
542
  brandingUpdated: "브랜딩이 업데이트됨",
540
543
  saveFailed: "저장 실패",
541
544
  organizationName: "조직 이름",
545
+ defaultVisibility: "새 녹화의 기본 공개 범위",
546
+ defaultVisibilityDescription:
547
+ "다른 공개 범위를 선택하지 않으면 새 녹화에 적용됩니다.",
542
548
  brandColor: "브랜드 색상",
543
549
  brandColorPicker: "브랜드 색상 선택기",
544
550
  useColor: "{{color}} 사용",
@@ -172,7 +172,7 @@ const messages = {
172
172
  "O gravador de desktop terminou e salvou uma cópia local, mas Clips não conseguiu carregá-la. Você pode tentar novamente no menu Clips sem gravar novamente.",
173
173
  retryLibrary: "Você pode tentar novamente na biblioteca.",
174
174
  processingStuck:
175
- "O processamento não foi concluído após 30 segundos (status={{status}}). O upload do clipe pode não ter terminado verifique os logs do servidor para mensagens de fragmentação/finalização.",
175
+ "O salvamento está demorando mais do que o esperado (status={{status}}). Se você gravou no app para desktop, abra o Clips pela barra de menus para tentar o upload novamente ou baixar uma cópia local salva e verifique outra vez.",
176
176
  uploadingAssembling:
177
177
  "Carregar e montar seu vídeo – isso geralmente leva apenas alguns segundos.",
178
178
  connectStorageImportLoom:
@@ -221,6 +221,9 @@ const messages = {
221
221
  autoChapters: "Capítulos automáticos",
222
222
  removeFillerWords: "Remover palavras de preenchimento",
223
223
  removeSilences: "Remover silêncios (>1,2s)",
224
+ silenceWorking: "Removendo silêncios…",
225
+ silenceCompleted: "Remoção de silêncios concluída",
226
+ silenceFailed: "Falha ao remover silêncios",
224
227
  generatePrSummary: "Gerar resumo de PR",
225
228
  generateSop: "Gerar SOP",
226
229
  generateSopTooltip:
@@ -549,6 +552,9 @@ const messages = {
549
552
  brandingUpdated: "Marca atualizada",
550
553
  saveFailed: "Falha ao salvar",
551
554
  organizationName: "Nome da organização",
555
+ defaultVisibility: "Visibilidade padrão de novas gravações",
556
+ defaultVisibilityDescription:
557
+ "Aplicada a novas gravações, a menos que você escolha outra visibilidade.",
552
558
  brandColor: "Cor da marca",
553
559
  brandColorPicker: "Seletor de cor da marca",
554
560
  useColor: "Usar {{color}}",