@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
@@ -166,7 +166,7 @@ const messages = {
166
166
  "桌面录音机完成并保存了本地副本,但Clips无法上传。您可以从 Clips 菜单重试,而无需再次录制。",
167
167
  retryLibrary: "您可以从库中重试。",
168
168
  processingStuck:
169
- "30 秒后处理尚未完成(状态={{status}})。剪辑可能尚未完成上传 - 检查服务器日志中的块/最终消息。",
169
+ "保存时间比预期更长(状态={{status}})。如果你使用桌面应用录制,请从菜单栏打开 Clips 以重试上传或下载已保存的本地副本,然后再次检查。",
170
170
  uploadingAssembling: "上传和组合视频——通常只需要几秒钟。",
171
171
  connectStorageImportLoom: "连接存储导入这个Loom。",
172
172
  connectStorageFinishClip: "连接存储以完成此剪辑的保存。",
@@ -208,6 +208,9 @@ const messages = {
208
208
  autoChapters: "汽车章节",
209
209
  removeFillerWords: "删除填充词",
210
210
  removeSilences: "消除静音 (>1.2s)",
211
+ silenceWorking: "正在消除静音…",
212
+ silenceCompleted: "静音消除完成",
213
+ silenceFailed: "静音消除失败",
211
214
  generatePrSummary: "生成公关摘要",
212
215
  generateSop: "生成SOP",
213
216
  generateSopTooltip:
@@ -518,6 +521,8 @@ const messages = {
518
521
  brandingUpdated: "品牌更新",
519
522
  saveFailed: "保存失败",
520
523
  organizationName: "组织名称",
524
+ defaultVisibility: "新录制内容的默认可见性",
525
+ defaultVisibilityDescription: "应用于新录制内容,除非你选择其他可见性。",
521
526
  brandColor: "品牌颜色",
522
527
  brandColorPicker: "品牌颜色选择器",
523
528
  useColor: "使用 {{color}}",
@@ -166,7 +166,7 @@ const messages = {
166
166
  "桌面錄影程式已完成並儲存本機副本,但 Clips 無法上傳。您可以從 Clips 選單重試,不需要重新錄製。",
167
167
  retryLibrary: "您可以從媒體庫重試。",
168
168
  processingStuck:
169
- "處理 30 秒後仍未完成(狀態={{status}})。剪輯可能尚未完成上傳,請查看伺服器記錄中的區塊/完成訊息。",
169
+ "儲存時間比預期更久(狀態={{status}})。如果你使用桌面應用程式錄製,請從選單列開啟 Clips 以重試上傳或下載已儲存的本機副本,然後再次檢查。",
170
170
  uploadingAssembling: "正在上傳並組裝影片,通常只需要幾秒鐘。",
171
171
  connectStorageImportLoom: "連線儲存以匯入這個 Loom。",
172
172
  connectStorageFinishClip: "連線儲存以完成此剪輯的儲存。",
@@ -208,6 +208,9 @@ const messages = {
208
208
  autoChapters: "自動章節",
209
209
  removeFillerWords: "移除口頭禪",
210
210
  removeSilences: "消除靜音 (>1.2s)",
211
+ silenceWorking: "正在消除靜音…",
212
+ silenceCompleted: "靜音消除完成",
213
+ silenceFailed: "靜音消除失敗",
211
214
  generatePrSummary: "產生 PR 摘要",
212
215
  generateSop: "產生 SOP",
213
216
  generateSopTooltip:
@@ -518,6 +521,8 @@ const messages = {
518
521
  brandingUpdated: "品牌更新",
519
522
  saveFailed: "儲存失敗",
520
523
  organizationName: "組織名稱",
524
+ defaultVisibility: "新錄製內容的預設可見性",
525
+ defaultVisibilityDescription: "套用於新錄製內容,除非你選擇其他可見性。",
521
526
  brandColor: "品牌顏色",
522
527
  brandColorPicker: "品牌顏色選取器",
523
528
  useColor: "使用 {{color}}",
@@ -1187,7 +1187,7 @@ export default function SettingsIndexRoute() {
1187
1187
  className={cn(
1188
1188
  "flex flex-col gap-3 rounded-md border px-3 py-3 sm:flex-row sm:items-center sm:justify-between",
1189
1189
  builderConnected
1190
- ? "border-primary/35 bg-primary/5"
1190
+ ? "border-border bg-muted/20"
1191
1191
  : "border-border bg-accent/30",
1192
1192
  )}
1193
1193
  >
@@ -1201,20 +1201,16 @@ export default function SettingsIndexRoute() {
1201
1201
  {builderStatusLoading
1202
1202
  ? t("settings.checkingBuilder")
1203
1203
  : builderConnected
1204
- ? t("settings.builderConnected")
1204
+ ? t("settings.builderAiAvailable")
1205
1205
  : t("settings.builderEasySetup")}
1206
1206
  </div>
1207
1207
  <p className="mt-0.5 text-xs text-muted-foreground">
1208
1208
  {builderConnected
1209
- ? t("settings.builderAiAvailable")
1209
+ ? t("settings.apiSetupDescription")
1210
1210
  : t("settings.builderAiDescription")}
1211
1211
  </p>
1212
1212
  </div>
1213
- {builderConnected ? (
1214
- <Badge variant="secondary" className="shrink-0">
1215
- {t("common.connected")}
1216
- </Badge>
1217
- ) : (
1213
+ {!builderConnected ? (
1218
1214
  <Button
1219
1215
  type="button"
1220
1216
  variant="outline"
@@ -1237,7 +1233,7 @@ export default function SettingsIndexRoute() {
1237
1233
  )}
1238
1234
  {t("settings.connectBuilder")}
1239
1235
  </Button>
1240
- )}
1236
+ ) : null}
1241
1237
  </div>
1242
1238
 
1243
1239
  {builderCreditsPaused ? (
@@ -14,7 +14,10 @@ import {
14
14
  TableHeader,
15
15
  TableRow,
16
16
  } from "@/components/ui/table";
17
- import { BrandingEditor } from "@/components/workspace/branding-editor";
17
+ import {
18
+ BrandingEditor,
19
+ type RecordingVisibility,
20
+ } from "@/components/workspace/branding-editor";
18
21
  import { InviteDialog } from "@/components/workspace/invite-dialog";
19
22
  import {
20
23
  MembersList,
@@ -32,7 +35,7 @@ interface OrganizationStateResponse {
32
35
  name: string;
33
36
  brandColor: string;
34
37
  brandLogoUrl: string | null;
35
- defaultVisibility: string;
38
+ defaultVisibility: RecordingVisibility;
36
39
  ownerEmail?: string;
37
40
  } | null;
38
41
  members: {
@@ -130,6 +133,7 @@ export default function OrganizationSettingsRoute() {
130
133
  initialName={organization.name}
131
134
  initialBrandColor={organization.brandColor}
132
135
  initialBrandLogoUrl={organization.brandLogoUrl}
136
+ initialDefaultVisibility={organization.defaultVisibility}
133
137
  />
134
138
  ) : (
135
139
  <Card>
@@ -89,6 +89,8 @@ import { parsePlaybackSpeed } from "@/lib/playback-speed";
89
89
  import { isStorageSetupFailureReason } from "@/lib/storage-failures";
90
90
  import { cn } from "@/lib/utils";
91
91
 
92
+ import { STALE_PENDING_TRANSCRIPT_REASON } from "../../shared/transcript-status";
93
+
92
94
  const UPLOAD_STUCK_TIMEOUT_MS = 5 * 60 * 1000;
93
95
  const PROCESSING_STUCK_TIMEOUT_MS = 2 * 60 * 1000;
94
96
  const READY_MEDIA_SETTLE_POLL_MS = 20 * 1000;
@@ -125,6 +127,13 @@ interface GeneratedWorkflowState {
125
127
  error?: string;
126
128
  }
127
129
 
130
+ interface SilenceRemovalStatus {
131
+ kind?: "remove-silences";
132
+ status?: "queued" | "working" | "completed" | "failed";
133
+ message?: string | null;
134
+ updatedAt?: string;
135
+ }
136
+
128
137
  function useIsCompactRecordingLayout() {
129
138
  const [isCompact, setIsCompact] = useState(false);
130
139
 
@@ -219,7 +228,7 @@ export default function RecordingPage() {
219
228
  const [searchParams] = useSearchParams();
220
229
  const startMs = parseTimeParam(searchParams.get("t"));
221
230
  const panelParam = searchParams.get("panel");
222
- const { session } = useSession();
231
+ const { session, isLoading: sessionLoading } = useSession();
223
232
  const playerRef = useRef<VideoPlayerHandle | null>(null);
224
233
 
225
234
  const [panel, setPanel] = useState<SidePanel>("agent");
@@ -290,7 +299,11 @@ export default function RecordingPage() {
290
299
  recordingId: recordingId ?? "",
291
300
  },
292
301
  {
293
- enabled: !!recordingId,
302
+ // `/r/*` is intentionally reachable before auth so signed-out visitors
303
+ // can see the sign-in state. Do not send the protected action until the
304
+ // browser has finished resolving the session, or an authenticated viewer
305
+ // can be rendered as signed out from the initial 403.
306
+ enabled: !!recordingId && !sessionLoading,
294
307
  refetchInterval: (q) => {
295
308
  const data = q.state.data as any;
296
309
  const rec = data?.recording;
@@ -451,10 +464,36 @@ export default function RecordingPage() {
451
464
  );
452
465
  },
453
466
  });
467
+ const silenceRemovalStatusQ = useQuery<SilenceRemovalStatus | null>({
468
+ queryKey: [
469
+ "app-state",
470
+ "clips-ai-request-status",
471
+ recording?.id ?? "",
472
+ appStateVersion,
473
+ ],
474
+ enabled: Boolean(recording?.id),
475
+ placeholderData: (previous) => previous,
476
+ refetchInterval: (query) =>
477
+ query.state.data?.status === "queued" ||
478
+ query.state.data?.status === "working"
479
+ ? 2000
480
+ : false,
481
+ queryFn: async ({ signal }) => {
482
+ if (!recording?.id) return null;
483
+ return readClientAppState<SilenceRemovalStatus>(
484
+ `clips-ai-request-status-${recording.id}`,
485
+ { signal },
486
+ );
487
+ },
488
+ });
454
489
  const generatedWorkflow =
455
490
  generatedWorkflowQ.data?.recordingId === recording?.id
456
491
  ? generatedWorkflowQ.data
457
492
  : null;
493
+ const silenceRemovalStatus =
494
+ silenceRemovalStatusQ.data?.kind === "remove-silences"
495
+ ? silenceRemovalStatusQ.data
496
+ : null;
458
497
 
459
498
  const isLoomEmbedBacked = isLoomEmbedBackedRecording(recording);
460
499
  const isLoomRecording = isLoomRecordingSource(recording);
@@ -564,7 +603,10 @@ export default function RecordingPage() {
564
603
  const handleAiError = (err: Error) =>
565
604
  toast.error(err?.message ?? t("recordingPage.aiRequestFailed"));
566
605
  const requestTranscript = useActionMutation("request-transcript" as any, {
567
- onSuccess: () => void playerDataQ.refetch(),
606
+ onSuccess: (result: any) => {
607
+ void playerDataQ.refetch();
608
+ if (result?.queued) toast.success(t("transcriptPanel.transcribing"));
609
+ },
568
610
  onError: (err: Error) =>
569
611
  toast.error(
570
612
  t("recordingPage.retryFailed", {
@@ -609,9 +651,16 @@ export default function RecordingPage() {
609
651
  onError: handleAiError,
610
652
  });
611
653
  const removeSilences = useActionMutation("remove-silences" as any, {
612
- onSuccess: () => toast.success(t("recordingPage.silenceQueued")),
654
+ onSuccess: () => {
655
+ toast.success(t("recordingPage.silenceQueued"));
656
+ void silenceRemovalStatusQ.refetch();
657
+ },
613
658
  onError: handleAiError,
614
659
  });
660
+ const silenceRemovalBusy =
661
+ removeSilences.isPending ||
662
+ silenceRemovalStatus?.status === "queued" ||
663
+ silenceRemovalStatus?.status === "working";
615
664
  const generateWorkflow = useActionMutation("generate-workflow" as any, {
616
665
  onSuccess: () => {
617
666
  toast.success(t("recordingPage.workflowQueued"));
@@ -685,24 +734,37 @@ export default function RecordingPage() {
685
734
 
686
735
  // Self-heal stuck transcripts. Older recordings (before finalize-recording
687
736
  // learned to auto-trigger transcription) can sit in `pending` forever with no
688
- // worker to pick them up. When the owner opens one, kick off a transcript
689
- // once per page mount; request-transcript skips fresh pending rows so this
690
- // does not duplicate the finalize-recording background worker during HMR.
737
+ // worker to pick them up. A stale pending presentation gets a forced retry so
738
+ // a transient worker/provider failure does not require a manual click.
691
739
  useEffect(() => {
692
740
  if (!recording) return;
693
741
  if (role !== "owner" && role !== "admin" && role !== "editor") return;
694
742
  if (recording.status !== "ready") return;
695
- if (transcriptStatus !== "pending") return;
696
- if (transcriptKickedRef.current === recording.id) return;
697
- transcriptKickedRef.current = recording.id;
743
+ const stalePending =
744
+ transcriptStatus === "failed" &&
745
+ transcriptFailureReason === STALE_PENDING_TRANSCRIPT_REASON;
746
+ if (transcriptStatus !== "pending" && !stalePending) return;
747
+ const recoveryKey = `${recording.id}:${stalePending ? "stale" : "pending"}`;
748
+ if (transcriptKickedRef.current === recoveryKey) return;
749
+ transcriptKickedRef.current = recoveryKey;
698
750
  fetch(agentNativePath("/_agent-native/actions/request-transcript"), {
699
751
  method: "POST",
700
752
  headers: { "Content-Type": "application/json" },
701
- body: JSON.stringify({ recordingId: recording.id }),
753
+ body: JSON.stringify({
754
+ recordingId: recording.id,
755
+ ...(stalePending ? { force: true } : {}),
756
+ }),
702
757
  })
703
758
  .catch(() => {})
704
759
  .finally(() => playerDataQ.refetch());
705
- }, [recording?.id, recording?.status, transcriptStatus, role, playerDataQ]);
760
+ }, [
761
+ recording?.id,
762
+ recording?.status,
763
+ transcriptStatus,
764
+ transcriptFailureReason,
765
+ role,
766
+ playerDataQ,
767
+ ]);
706
768
 
707
769
  // Long browser-extension clips can still be uploading chunks or assembling
708
770
  // for more than 30s. Keep polling before surfacing a stuck-state fallback.
@@ -757,6 +819,13 @@ export default function RecordingPage() {
757
819
  typeof window === "undefined"
758
820
  ? `/r/${recordingId}`
759
821
  : window.location.pathname + window.location.search;
822
+ if (sessionLoading) {
823
+ return (
824
+ <div className="flex items-center justify-center h-screen w-full bg-background">
825
+ <Spinner className="h-8 w-8" />
826
+ </div>
827
+ );
828
+ }
760
829
  return (
761
830
  <div className="flex flex-col items-center justify-center h-screen w-full bg-background px-6">
762
831
  <h1 className="text-xl font-semibold mb-2">
@@ -802,12 +871,11 @@ export default function RecordingPage() {
802
871
  const nativeSaveFailed =
803
872
  searchParams.get("saveFailed") === "1" ||
804
873
  isNativeSaveFailureReason(rawFailureReason);
805
- // Treat "stuck on processing/uploading past the 30s mark" as a failure
806
- // too otherwise the user stares at a spinner forever when finalize
807
- // silently dies (e.g. chunk route 401s, storage provider throws).
874
+ // Give a long-running desktop save an actionable recovery state without
875
+ // claiming the upload failed while its bounded final request is still live.
808
876
  const stuckFailure = !explicitFailure && processingTimeout;
809
- const isFailure =
810
- explicitFailure || stuckFailure || waitingForStorage || nativeSaveFailed;
877
+ const isFailure = explicitFailure || waitingForStorage || nativeSaveFailed;
878
+ const showRecoveryState = isFailure || stuckFailure;
811
879
  const displayReason = explicitFailure
812
880
  ? storedButUnservableFailure
813
881
  ? t("recordingPage.clipDataPreserved")
@@ -825,16 +893,18 @@ export default function RecordingPage() {
825
893
  : t("recordingPage.connectStorageFinishClip")
826
894
  : nativeSaveFailed
827
895
  ? t("recordingPage.uploadPausedSaved")
828
- : isFailure
829
- ? t("recordingPage.savingWentWrong")
830
- : t("recordingPage.finishingClip");
896
+ : stuckFailure
897
+ ? t("recordingPage.finishingClip")
898
+ : isFailure
899
+ ? t("recordingPage.savingWentWrong")
900
+ : t("recordingPage.finishingClip");
831
901
  const failureReason = storageSetupFailure
832
902
  ? loomStorageSetupFailure
833
903
  ? t("recordingPage.loomSourcePreserved")
834
904
  : t("recordingPage.clipDataPreserved")
835
905
  : displayReason;
836
906
  const detail = failureDetail(rawFailureReason);
837
- if (!isFailure) {
907
+ if (!showRecoveryState) {
838
908
  return (
839
909
  <div className="flex min-h-screen w-full flex-col bg-background">
840
910
  <header className="flex min-w-0 shrink-0 items-center gap-3 border-b border-border px-3 py-2 sm:px-4 sm:py-3">
@@ -1069,16 +1139,16 @@ export default function RecordingPage() {
1069
1139
  value="agent"
1070
1140
  className="mt-0 flex flex-1 min-h-0 flex-col data-[state=inactive]:hidden"
1071
1141
  >
1142
+ {generatedWorkflow ? (
1143
+ <GeneratedWorkflowNotice workflow={generatedWorkflow} />
1144
+ ) : null}
1072
1145
  <AgentPanel
1073
1146
  browserTabId={browserTabId}
1074
1147
  scope={recordingScope}
1148
+ showHeader={false}
1149
+ showTabBar={false}
1075
1150
  emptyStateText={t("recordingPage.askAboutClip")}
1076
1151
  dynamicSuggestions={false}
1077
- chatNotice={
1078
- generatedWorkflow ? (
1079
- <GeneratedWorkflowNotice workflow={generatedWorkflow} />
1080
- ) : null
1081
- }
1082
1152
  suggestions={
1083
1153
  canEdit
1084
1154
  ? [
@@ -1223,6 +1293,38 @@ export default function RecordingPage() {
1223
1293
  {titleGenerationPaused ? (
1224
1294
  <BuilderCreditsTitleNotice className="mt-2" />
1225
1295
  ) : null}
1296
+ {silenceRemovalStatus ? (
1297
+ <div
1298
+ className="mt-1 flex items-center gap-1.5 text-xs text-muted-foreground"
1299
+ role="status"
1300
+ aria-live="polite"
1301
+ >
1302
+ {silenceRemovalStatus.status === "queued" ||
1303
+ silenceRemovalStatus.status === "working" ? (
1304
+ <Spinner className="size-3" />
1305
+ ) : null}
1306
+ <span>
1307
+ {silenceRemovalStatus.status === "queued"
1308
+ ? t("recordingPage.silenceQueued")
1309
+ : silenceRemovalStatus.status === "working"
1310
+ ? t("recordingPage.silenceWorking", {
1311
+ defaultValue: "Removing silences…",
1312
+ })
1313
+ : silenceRemovalStatus.status === "completed"
1314
+ ? t("recordingPage.silenceCompleted", {
1315
+ defaultValue: "Silence removal complete",
1316
+ })
1317
+ : t("recordingPage.silenceFailed", {
1318
+ defaultValue: "Silence removal failed",
1319
+ })}
1320
+ </span>
1321
+ {silenceRemovalStatus.message ? (
1322
+ <span className="truncate">
1323
+ · {silenceRemovalStatus.message}
1324
+ </span>
1325
+ ) : null}
1326
+ </div>
1327
+ ) : null}
1226
1328
  </div>
1227
1329
 
1228
1330
  {canUseNativeEditor ? (
@@ -1313,7 +1415,7 @@ export default function RecordingPage() {
1313
1415
  {t("recordingPage.removeFillerWords")}
1314
1416
  </DropdownMenuItem>
1315
1417
  <DropdownMenuItem
1316
- disabled={removeSilences.isPending}
1418
+ disabled={silenceRemovalBusy}
1317
1419
  onSelect={() =>
1318
1420
  removeSilences.mutate({
1319
1421
  recordingId: recording.id,
@@ -1238,7 +1238,7 @@ export default function RecordRoute() {
1238
1238
  sourceWindowTitle: captureTitle.sourceWindowTitle,
1239
1239
  hasCamera: opts.mode !== "screen",
1240
1240
  hasAudio: wantsMic,
1241
- visibility: reportContext ? "org" : "public",
1241
+ visibility: reportContext ? "org" : undefined,
1242
1242
  spaceIds: spaceIdFromUrl ? [spaceIdFromUrl] : undefined,
1243
1243
  folderId: folderIdFromUrl ?? undefined,
1244
1244
  mimeType: pickMimeType() || undefined,
@@ -1561,7 +1561,7 @@ export default function RecordRoute() {
1561
1561
  hasAudio: true,
1562
1562
  width: meta.width,
1563
1563
  height: meta.height,
1564
- visibility: reportContext ? "org" : "public",
1564
+ visibility: reportContext ? "org" : undefined,
1565
1565
  spaceIds: spaceIdFromUrl ? [spaceIdFromUrl] : undefined,
1566
1566
  folderId: folderIdFromUrl ?? undefined,
1567
1567
  mimeType: uploadMimeType,
@@ -2117,6 +2117,27 @@ export default function RecordRoute() {
2117
2117
  transcriptRes.status,
2118
2118
  );
2119
2119
  }
2120
+ } else {
2121
+ await fetch(
2122
+ agentNativePath("/_agent-native/actions/save-browser-transcript"),
2123
+ {
2124
+ method: "POST",
2125
+ headers: { "Content-Type": "application/json" },
2126
+ body: JSON.stringify({
2127
+ recordingId: pending.id,
2128
+ fullText: "",
2129
+ source: "web-speech",
2130
+ failureReason: liveTranscription.supported
2131
+ ? "Browser native transcription returned no speech before recording stopped."
2132
+ : "Browser Web Speech recognition is unavailable in this browser.",
2133
+ }),
2134
+ },
2135
+ ).catch((err) => {
2136
+ console.warn(
2137
+ "[recorder] native transcript failure save failed:",
2138
+ err,
2139
+ );
2140
+ });
2120
2141
  }
2121
2142
 
2122
2143
  const stopResult = await engine.stop();
@@ -443,7 +443,10 @@ export default function ShareRoute() {
443
443
  const data = await res.json().catch(() => ({}));
444
444
  return { ok: res.ok, status: res.status, data };
445
445
  },
446
- enabled: !!shareId,
446
+ // Private/org share links are public-shell routes, so the first render can
447
+ // happen before the browser session is known. Waiting avoids a transient
448
+ // anonymous 401/404 becoming the authenticated viewer's final state.
449
+ enabled: !!shareId && !sessionLoading,
447
450
  refetchInterval: (q) => {
448
451
  const payload = (q.state.data as { data?: any } | undefined)?.data;
449
452
  const rec = payload?.recording;
@@ -616,7 +619,7 @@ export default function ShareRoute() {
616
619
  }
617
620
  }
618
621
 
619
- if (dataQ.isLoading) {
622
+ if (sessionLoading || dataQ.isLoading) {
620
623
  return (
621
624
  <>
622
625
  {agentDiscovery}
@@ -1066,6 +1069,7 @@ export default function ShareRoute() {
1066
1069
  ]}
1067
1070
  browserTabId={getBrowserTabId()}
1068
1071
  showHeader={false}
1072
+ showTabBar={false}
1069
1073
  />
1070
1074
  ) : (
1071
1075
  <PublicAgentEmptyState
@@ -1,4 +1,6 @@
1
1
  import { type RouteConfig } from "@react-router/dev/routes";
2
2
  import { flatRoutes } from "@react-router/fs-routes";
3
3
 
4
- export default flatRoutes() satisfies RouteConfig;
4
+ export default flatRoutes({
5
+ ignoredRouteFiles: ["**/*.test.{ts,tsx}", "**/*.spec.{ts,tsx}"],
6
+ }) satisfies RouteConfig;
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-16
4
+ ---
5
+
6
+ Authorized viewers can open shared private clips without a misleading sign-in detour.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-16
4
+ ---
5
+
6
+ Camera bubble hover controls now appear above the face so it can rest flush near the bottom of the screen.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-16
4
+ ---
5
+
6
+ Chrome extension recordings no longer leave a stale recorder state blocking the next start after a failed launch.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-16
4
+ ---
5
+
6
+ Clips agent chat now stays inline with the recording tabs without a separate Chat or Workspace header.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-16
4
+ ---
5
+
6
+ Clips search now matches recording content without requiring exact letter case.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-16
4
+ ---
5
+
6
+ Meetings you decline no longer trigger Clips desktop reminders.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-16
4
+ ---
5
+
6
+ Failed or delayed desktop saves now reopen Clips with the saved local copy visible in every view, including Settings.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-16
4
+ ---
5
+
6
+ Long desktop Clips now preserve complete playback, synced audio, full transcripts, and local recovery copies until upload verification succeeds.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-16
4
+ ---
5
+
6
+ Long recording lists keep Stitch actions and selected-library actions visible.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: added
3
+ date: 2026-07-16
4
+ ---
5
+
6
+ Organization admins can choose the default visibility for new recordings.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-16
4
+ ---
5
+
6
+ Remove Silences now shows queued, active, completed, and failed progress on the recording page.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-16
4
+ ---
5
+
6
+ Settings no longer repeats the Builder connection status in multiple setup cards.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-16
4
+ ---
5
+
6
+ Transcripts now appear from native browser speech sooner, with automatic recovery when transcription stalls.
@@ -2,7 +2,7 @@
2
2
  "manifest_version": 3,
3
3
  "name": "Agent-Native Clips",
4
4
  "short_name": "Clips",
5
- "version": "0.1.15",
5
+ "version": "0.1.17",
6
6
  "description": "Start Clips recordings from Chrome, capture optional diagnostics, and preview Clips links on GitHub.",
7
7
  "minimum_chrome_version": "116",
8
8
  "action": {