@agent-native/core 0.165.3 → 0.167.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 (249) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/templates/analytics/.agents/skills/secrets/SKILL.md +5 -1
  3. package/corpus/templates/analytics/.agents/skills/workspace-conventions/SKILL.md +4 -1
  4. package/corpus/templates/analytics/CHANGELOG.md +740 -2
  5. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +93 -56
  6. package/corpus/templates/analytics/app/i18n-data.ts +23 -20
  7. package/corpus/templates/analytics/app/pages/Settings.tsx +0 -1
  8. package/corpus/templates/analytics/app/pages/adhoc/explorer/index.tsx +0 -1
  9. package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +1 -1
  10. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +2 -1
  11. package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +0 -1
  12. package/corpus/templates/analytics/server/lib/first-party-analytics-backend.ts +0 -32
  13. package/corpus/templates/analytics/server/lib/session-replay.ts +1 -5
  14. package/corpus/templates/assets/.agents/skills/secrets/SKILL.md +5 -1
  15. package/corpus/templates/assets/.agents/skills/workspace-conventions/SKILL.md +4 -1
  16. package/corpus/templates/assets/CHANGELOG.md +204 -2
  17. package/corpus/templates/assets/actions/navigate.ts +2 -2
  18. package/corpus/templates/assets/actions/save-generated-image.ts +0 -5
  19. package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +2 -262
  20. package/corpus/templates/assets/app/routes/library.tsx +1 -1
  21. package/corpus/templates/assets/app/routes/settings.tsx +0 -3
  22. package/corpus/templates/brain/.agents/skills/secrets/SKILL.md +5 -1
  23. package/corpus/templates/brain/.agents/skills/workspace-conventions/SKILL.md +4 -1
  24. package/corpus/templates/brain/CHANGELOG.md +145 -2
  25. package/corpus/templates/brain/actions/ask-brain.ts +0 -1
  26. package/corpus/templates/brain/actions/navigate.ts +2 -2
  27. package/corpus/templates/brain/app/routes/sources.tsx +0 -4
  28. package/corpus/templates/brain/server/lib/capture-sanitization.ts +0 -11
  29. package/corpus/templates/calendar/.agents/skills/secrets/SKILL.md +5 -1
  30. package/corpus/templates/calendar/.agents/skills/workspace-conventions/SKILL.md +4 -1
  31. package/corpus/templates/calendar/CHANGELOG.md +272 -2
  32. package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +0 -20
  33. package/corpus/templates/calendar/app/pages/CalendarView.tsx +0 -1
  34. package/corpus/templates/chat/.agents/skills/secrets/SKILL.md +5 -1
  35. package/corpus/templates/chat/.agents/skills/workspace-conventions/SKILL.md +4 -1
  36. package/corpus/templates/chat/CHANGELOG.md +89 -2
  37. package/corpus/templates/chat/actions/navigate.ts +2 -2
  38. package/corpus/templates/clips/.agents/skills/secrets/SKILL.md +5 -1
  39. package/corpus/templates/clips/.agents/skills/workspace-conventions/SKILL.md +4 -1
  40. package/corpus/templates/clips/CHANGELOG.md +865 -2
  41. package/corpus/templates/clips/actions/import-loom-recording.ts +16 -4
  42. package/corpus/templates/clips/actions/navigate.ts +2 -2
  43. package/corpus/templates/clips/app/components/editor/stitch-manager.tsx +0 -1
  44. package/corpus/templates/clips/app/components/library/space-dialogs.tsx +0 -1
  45. package/corpus/templates/clips/app/components/meetings/share-meeting-dialog.tsx +0 -1
  46. package/corpus/templates/clips/app/components/player/clips-share-trigger.tsx +17 -0
  47. package/corpus/templates/clips/app/components/player/delete-recording-menu.tsx +3 -3
  48. package/corpus/templates/clips/app/components/player/video-player.tsx +2 -2
  49. package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +0 -1
  50. package/corpus/templates/clips/app/components/settings/ai-setup-section.tsx +0 -1
  51. package/corpus/templates/clips/app/global.css +31 -0
  52. package/corpus/templates/clips/app/hooks/use-playback-position.ts +0 -2
  53. package/corpus/templates/clips/app/lib/download-release-channel.ts +10 -0
  54. package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +1 -3
  55. package/corpus/templates/clips/app/routes/download.tsx +67 -44
  56. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +7 -12
  57. package/corpus/templates/clips/app/routes/record.tsx +6 -6
  58. package/corpus/templates/clips/app/routes/share.$shareId.tsx +26 -29
  59. package/corpus/templates/clips/changelog/2026-08-20-clip-viewer-share-actions.md +6 -0
  60. package/corpus/templates/clips/changelog/2026-08-20-preparing-recording-countdown-overlay.md +6 -0
  61. package/corpus/templates/clips/chrome-extension/src/background.ts +0 -13
  62. package/corpus/templates/clips/chrome-extension/src/overlay.ts +0 -1
  63. package/corpus/templates/clips/chrome-extension/src/popup.ts +0 -20
  64. package/corpus/templates/clips/desktop/src/app.tsx +6 -18
  65. package/corpus/templates/clips/desktop/src/hooks/useMediaDevices.ts +0 -1
  66. package/corpus/templates/clips/desktop/src/lib/recorder.ts +0 -8
  67. package/corpus/templates/clips/desktop/src/overlays/preparing.tsx +4 -6
  68. package/corpus/templates/clips/desktop/src/styles.css +18 -20
  69. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +9 -17
  70. package/corpus/templates/content/.agents/skills/secrets/SKILL.md +5 -1
  71. package/corpus/templates/content/.agents/skills/workspace-conventions/SKILL.md +4 -1
  72. package/corpus/templates/content/CHANGELOG.md +503 -2
  73. package/corpus/templates/content/actions/_database-source-utils.ts +0 -3
  74. package/corpus/templates/content/actions/attach-content-database-source.ts +1 -4
  75. package/corpus/templates/content/actions/navigate.ts +2 -2
  76. package/corpus/templates/content/actions/prepare-builder-source-execution.ts +1 -1
  77. package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +0 -6
  78. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +0 -580
  79. package/corpus/templates/content/app/components/editor/database/FormView.tsx +2 -2
  80. package/corpus/templates/content/app/components/editor/database/filter-sort.ts +1 -1
  81. package/corpus/templates/content/app/components/editor/database/settings.tsx +0 -23
  82. package/corpus/templates/content/app/components/editor/database/sidebar.tsx +0 -1
  83. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +8 -304
  84. package/corpus/templates/content/app/hooks/use-documents.ts +0 -1
  85. package/corpus/templates/content/shared/api.ts +0 -1
  86. package/corpus/templates/content/shared/builder-mdx.ts +0 -1
  87. package/corpus/templates/content/shared/nfm.ts +1 -7
  88. package/corpus/templates/crm/.agents/skills/secrets/SKILL.md +5 -1
  89. package/corpus/templates/crm/.agents/skills/workspace-conventions/SKILL.md +4 -1
  90. package/corpus/templates/crm/CHANGELOG.md +31 -2
  91. package/corpus/templates/crm/actions/merge-crm-records.ts +0 -4
  92. package/corpus/templates/crm/app/components/crm/record/RecordLists.tsx +0 -1
  93. package/corpus/templates/crm/server/crm/hubspot-adapter.ts +0 -1
  94. package/corpus/templates/crm/server/crm/salesforce-adapter.ts +0 -1
  95. package/corpus/templates/crm/server/db/crm-store.ts +1 -1
  96. package/corpus/templates/design/.agents/skills/secrets/SKILL.md +5 -1
  97. package/corpus/templates/design/.agents/skills/workspace-conventions/SKILL.md +4 -1
  98. package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +1 -14
  99. package/corpus/templates/design/AGENTS.md +2 -1
  100. package/corpus/templates/design/CHANGELOG.md +870 -2
  101. package/corpus/templates/design/actions/apply-component-prop-edit.ts +1 -5
  102. package/corpus/templates/design/actions/generate-design.ts +0 -1
  103. package/corpus/templates/design/actions/generate-screens.ts +5 -2
  104. package/corpus/templates/design/actions/go-to-main-component.ts +2 -2
  105. package/corpus/templates/design/actions/list-design-systems.ts +10 -0
  106. package/corpus/templates/design/actions/navigate.ts +2 -2
  107. package/corpus/templates/design/actions/open-component-source.ts +4 -4
  108. package/corpus/templates/design/actions/present-design-variants.ts +1 -2
  109. package/corpus/templates/design/actions/run-design-audit.ts +0 -22
  110. package/corpus/templates/design/actions/show-design-questions.ts +5 -2
  111. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +19 -8
  112. package/corpus/templates/design/app/components/design/EditPanel.tsx +11 -183
  113. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +21 -4
  114. package/corpus/templates/design/app/components/design/QuestionFlow.tsx +1 -5
  115. package/corpus/templates/design/app/components/design/bridge/codegen.ts +1 -1
  116. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +10 -19
  117. package/corpus/templates/design/app/components/design/edit-panel/appearance-properties.tsx +1 -1
  118. package/corpus/templates/design/app/components/design/edit-panel/layout-properties.tsx +13 -3
  119. package/corpus/templates/design/app/components/design/edit-panel/panel-primitives.tsx +38 -32
  120. package/corpus/templates/design/app/components/design/edit-panel/position-layout-properties.tsx +1 -4
  121. package/corpus/templates/design/app/components/design/inspector/AlignmentMatrix.tsx +0 -4
  122. package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +15 -6
  123. package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +2 -2
  124. package/corpus/templates/design/app/components/visual-editor/NodeRewriteProposal.tsx +0 -1
  125. package/corpus/templates/design/app/components/visual-editor/ReviewCanvasPins.tsx +1 -1
  126. package/corpus/templates/design/app/i18n-data.ts +122 -0
  127. package/corpus/templates/design/app/lib/clipboard-content-lineage.ts +11 -1
  128. package/corpus/templates/design/app/pages/DesignEditor.tsx +50 -254
  129. package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +163 -8
  130. package/corpus/templates/design/app/pages/Index.tsx +17 -0
  131. package/corpus/templates/design/app/pages/design-editor/canvas-primitive-insert.ts +44 -32
  132. package/corpus/templates/design/app/pages/design-editor/canvas-primitives.ts +10 -0
  133. package/corpus/templates/design/app/pages/design-editor/clone-and-pen-edit.ts +49 -3
  134. package/corpus/templates/design/app/pages/design-editor/clone-idrefs.ts +31 -0
  135. package/corpus/templates/design/app/pages/design-editor/code-layer-state.ts +28 -0
  136. package/corpus/templates/design/app/pages/design-editor/commands/add-auto-layout.ts +3 -3
  137. package/corpus/templates/design/app/pages/design-editor/commands/align-selection.ts +44 -14
  138. package/corpus/templates/design/app/pages/design-editor/commands/apply-local-content-update.ts +16 -5
  139. package/corpus/templates/design/app/pages/design-editor/commands/change-selected-z-index.ts +1 -1
  140. package/corpus/templates/design/app/pages/design-editor/commands/frame-selection.ts +1 -1
  141. package/corpus/templates/design/app/pages/design-editor/commands/group-selection.ts +1 -1
  142. package/corpus/templates/design/app/pages/design-editor/commands/nudge-selection.ts +1 -1
  143. package/corpus/templates/design/app/pages/design-editor/commands/paste-selection.ts +142 -17
  144. package/corpus/templates/design/app/pages/design-editor/commands/screen-visual-duplicate-change.ts +1 -0
  145. package/corpus/templates/design/app/pages/design-editor/commands/ungroup-selection.ts +1 -1
  146. package/corpus/templates/design/app/pages/design-editor/commands/visual-duplicate-change.ts +1 -0
  147. package/corpus/templates/design/app/pages/design-editor/cross-screen-text-color.ts +25 -9
  148. package/corpus/templates/design/app/pages/design-editor/editor-state.ts +1 -0
  149. package/corpus/templates/design/app/pages/design-editor/measure-child-rects.ts +83 -0
  150. package/corpus/templates/design/app/pages/design-editor/paste-placement.ts +66 -0
  151. package/corpus/templates/design/server/routes/[...page].get.ts +0 -1
  152. package/corpus/templates/design/shared/code-layer.ts +120 -70
  153. package/corpus/templates/design/shared/design-surface-index.ts +0 -1
  154. package/corpus/templates/design/shared/pen-path.ts +0 -4
  155. package/corpus/templates/dispatch/.agents/skills/secrets/SKILL.md +5 -1
  156. package/corpus/templates/dispatch/.agents/skills/workspace-conventions/SKILL.md +4 -1
  157. package/corpus/templates/dispatch/CHANGELOG.md +196 -2
  158. package/corpus/templates/dispatch/app/routes/integrations.tsx +0 -109
  159. package/corpus/templates/factory/.agents/skills/secrets/SKILL.md +5 -1
  160. package/corpus/templates/factory/.agents/skills/workspace-conventions/SKILL.md +4 -1
  161. package/corpus/templates/factory/CHANGELOG.md +121 -2
  162. package/corpus/templates/factory/actions/navigate.ts +2 -2
  163. package/corpus/templates/factory/app/components/factory/FactoryAuditView.tsx +0 -13
  164. package/corpus/templates/factory/app/routes/factory.tsx +0 -1
  165. package/corpus/templates/factory/server/factory-graph/store.ts +0 -1
  166. package/corpus/templates/forms/.agents/skills/secrets/SKILL.md +5 -1
  167. package/corpus/templates/forms/.agents/skills/workspace-conventions/SKILL.md +4 -1
  168. package/corpus/templates/forms/CHANGELOG.md +166 -2
  169. package/corpus/templates/macros/.agents/skills/secrets/SKILL.md +5 -1
  170. package/corpus/templates/macros/.agents/skills/workspace-conventions/SKILL.md +4 -1
  171. package/corpus/templates/macros/CHANGELOG.md +49 -2
  172. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +0 -1
  173. package/corpus/templates/mail/.agents/skills/secrets/SKILL.md +5 -1
  174. package/corpus/templates/mail/.agents/skills/workspace-conventions/SKILL.md +4 -1
  175. package/corpus/templates/mail/CHANGELOG.md +201 -2
  176. package/corpus/templates/mail/app/components/email/EmailList.tsx +0 -1
  177. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +2 -2
  178. package/corpus/templates/mail/shared/markdown.ts +3 -0
  179. package/corpus/templates/plan/.agents/skills/secrets/SKILL.md +5 -1
  180. package/corpus/templates/plan/.agents/skills/workspace-conventions/SKILL.md +4 -1
  181. package/corpus/templates/plan/CHANGELOG.md +277 -2
  182. package/corpus/templates/slides/.agents/skills/secrets/SKILL.md +5 -1
  183. package/corpus/templates/slides/.agents/skills/workspace-conventions/SKILL.md +4 -1
  184. package/corpus/templates/slides/CHANGELOG.md +437 -2
  185. package/corpus/templates/slides/actions/add-slide.ts +0 -1
  186. package/corpus/templates/slides/actions/list-decks.ts +1 -1
  187. package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +1 -4
  188. package/corpus/templates/slides/app/components/editor/SlideContextToolbar.tsx +0 -1
  189. package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +1 -1
  190. package/corpus/templates/slides/app/pages/DeckEditor.tsx +1 -6
  191. package/corpus/templates/tasks/.agents/skills/secrets/SKILL.md +5 -1
  192. package/corpus/templates/tasks/.agents/skills/workspace-conventions/SKILL.md +4 -1
  193. package/corpus/templates/tasks/CHANGELOG.md +32 -2
  194. package/corpus/templates/tasks/app/components/layout/Layout.tsx +0 -1
  195. package/corpus/templates/tasks/app/hooks/use-visible-task-fields.ts +1 -4
  196. package/corpus/templates/tasks/server/custom-fields/store.ts +1 -6
  197. package/corpus/templates/tasks/shared/list-screen-snapshot.ts +2 -2
  198. package/dist/agent/engine/registry.js +27 -14
  199. package/dist/agent/index.d.ts +1 -1
  200. package/dist/agent/production-agent.d.ts +19 -6
  201. package/dist/agent/production-agent.js +57 -16
  202. package/dist/agent/types.d.ts +3 -0
  203. package/dist/changelog/parse.d.ts +3 -3
  204. package/dist/changelog/parse.js +35 -16
  205. package/dist/client/EnvironmentBadge.d.ts +1 -0
  206. package/dist/client/EnvironmentBadge.js +7 -0
  207. package/dist/collab/awareness.d.ts +2 -2
  208. package/dist/collab/routes.d.ts +1 -1
  209. package/dist/collab/struct-routes.d.ts +1 -1
  210. package/dist/config.d.ts +11 -0
  211. package/dist/config.js +248 -0
  212. package/dist/deploy/build.js +12 -1
  213. package/dist/index.d.ts +1 -1
  214. package/dist/notifications/routes.d.ts +3 -3
  215. package/dist/observability/routes.d.ts +6 -6
  216. package/dist/resources/handlers.d.ts +2 -2
  217. package/dist/secrets/routes.d.ts +9 -9
  218. package/dist/server/agent-chat/plugin-options.d.ts +3 -2
  219. package/dist/server/agent-chat-plugin.js +5 -2
  220. package/dist/server/index.d.ts +1 -1
  221. package/dist/server/realtime-token.d.ts +1 -1
  222. package/dist/server/transcribe-voice.d.ts +1 -1
  223. package/dist/templates/chat/.agents/skills/secrets/SKILL.md +5 -1
  224. package/dist/templates/chat/.agents/skills/workspace-conventions/SKILL.md +4 -1
  225. package/dist/templates/chat/CHANGELOG.md +89 -2
  226. package/dist/templates/chat/actions/navigate.ts +2 -2
  227. package/dist/templates/default/.agents/skills/secrets/SKILL.md +5 -1
  228. package/dist/templates/default/.agents/skills/workspace-conventions/SKILL.md +4 -1
  229. package/dist/templates/headless/.agents/skills/secrets/SKILL.md +5 -1
  230. package/dist/templates/workspace-core/.agents/skills/secrets/SKILL.md +5 -1
  231. package/dist/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +4 -1
  232. package/dist/vite/agent-native-config-loader.d.ts +1 -0
  233. package/dist/vite/agent-native-config-loader.js +3 -3
  234. package/dist/vite/agents-bundle-plugin.d.ts +1 -1
  235. package/dist/vite/agents-bundle-plugin.js +13 -1
  236. package/dist/vite/client.js +14 -14
  237. package/docs/content/agent-native-config.mdx +62 -11
  238. package/docs/content/agent-surfaces.mdx +6 -0
  239. package/docs/content/environment-variables.mdx +5 -2
  240. package/package.json +3 -3
  241. package/src/templates/chat/.agents/skills/secrets/SKILL.md +5 -1
  242. package/src/templates/chat/.agents/skills/workspace-conventions/SKILL.md +4 -1
  243. package/src/templates/chat/CHANGELOG.md +89 -2
  244. package/src/templates/chat/actions/navigate.ts +2 -2
  245. package/src/templates/default/.agents/skills/secrets/SKILL.md +5 -1
  246. package/src/templates/default/.agents/skills/workspace-conventions/SKILL.md +4 -1
  247. package/src/templates/headless/.agents/skills/secrets/SKILL.md +5 -1
  248. package/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +5 -1
  249. package/src/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +4 -1
@@ -13,13 +13,12 @@ import {
13
13
  import { useT } from "@agent-native/core/client/i18n";
14
14
  import { buildSignInReturnHref } from "@agent-native/core/client/ui";
15
15
  import { docsUrl } from "@agent-native/core/shared";
16
- import { ShareTrigger } from "@agent-native/toolkit/sharing";
17
16
  import {
18
17
  IconAlertTriangle,
19
18
  IconArrowLeft,
20
19
  IconDeviceDesktop,
21
20
  IconDownload,
22
- IconDots,
21
+ IconDotsVertical,
23
22
  IconLock,
24
23
  IconLogin2,
25
24
  } from "@tabler/icons-react";
@@ -51,6 +50,7 @@ import { toast } from "sonner";
51
50
 
52
51
  import { CaptureInstallButton } from "@/components/capture-install-options";
53
52
  import { AccessPasswordPrompt } from "@/components/player/access-password-prompt";
53
+ import { ClipsShareTrigger } from "@/components/player/clips-share-trigger";
54
54
  import { CommentsPanel } from "@/components/player/comments-panel";
55
55
  import { RecordingOptionsMenu } from "@/components/player/delete-recording-menu";
56
56
  import { InsightsPanel } from "@/components/player/insights-panel";
@@ -1110,8 +1110,8 @@ export default function ShareRoute() {
1110
1110
  return (
1111
1111
  <div className="flex min-h-screen max-w-full flex-col overflow-x-hidden bg-background text-foreground lg:h-screen lg:flex-row lg:overflow-hidden">
1112
1112
  {agentDiscovery}
1113
- <div className="flex w-full min-w-0 flex-col lg:flex-1">
1114
- <header className="flex min-w-0 shrink-0 flex-wrap items-center gap-2 border-b border-border px-3 py-2 sm:gap-3 sm:px-4 sm:py-3 lg:flex-nowrap">
1113
+ <div className="clips-share-content flex w-full min-w-0 flex-col lg:flex-1">
1114
+ <header className="flex min-w-0 shrink-0 flex-wrap items-center gap-2 border-b border-border px-3 py-2 sm:px-4 sm:py-3 lg:flex-nowrap">
1115
1115
  {session ? (
1116
1116
  <Button
1117
1117
  asChild
@@ -1147,7 +1147,7 @@ export default function ShareRoute() {
1147
1147
  )}
1148
1148
  </div>
1149
1149
 
1150
- <div className="flex w-full min-w-0 flex-wrap items-center justify-between gap-2 sm:w-auto sm:justify-end">
1150
+ <div className="flex w-full min-w-0 flex-wrap items-center justify-between gap-1 sm:w-auto sm:justify-end">
1151
1151
  <RecordingViewsBadge
1152
1152
  recordingId={recording.id}
1153
1153
  viewCount={viewCount}
@@ -1161,6 +1161,22 @@ export default function ShareRoute() {
1161
1161
  onCtaClick={fireShareCtaClick}
1162
1162
  />
1163
1163
  )}
1164
+ {viewerCanEdit || canReshareLink ? (
1165
+ <ShareRecordingPopover
1166
+ recordingId={recording.id}
1167
+ recordingTitle={recording.title}
1168
+ initialVisibility={recording.visibility}
1169
+ initialRole={viewerIsOwner ? "owner" : undefined}
1170
+ videoUrl={shareVideoUrl}
1171
+ thumbnailUrl={recording.thumbnailUrl}
1172
+ animatedThumbnailUrl={recording.animatedThumbnailUrl}
1173
+ isLoomRecording={isLoomEmbedBacked}
1174
+ hasPassword={Boolean(recording.hasPassword)}
1175
+ viewerReshareOnly={viewerReshareOnly}
1176
+ >
1177
+ <ClipsShareTrigger label={t("sharePage.share")} />
1178
+ </ShareRecordingPopover>
1179
+ ) : null}
1164
1180
  {!viewerCanEdit && canDownloadRecording ? (
1165
1181
  <DropdownMenu
1166
1182
  open={downloadMenuOpen}
@@ -1170,10 +1186,10 @@ export default function ShareRoute() {
1170
1186
  <Button
1171
1187
  variant="ghost"
1172
1188
  size="sm"
1173
- className="h-9 w-9 shrink-0 px-0"
1189
+ className="-mx-1.5 h-auto w-auto shrink-0 px-0.5 py-1.5"
1174
1190
  aria-label={t("sharePage.clipOptions")}
1175
1191
  >
1176
- <IconDots className="h-4 w-4" />
1192
+ <IconDotsVertical className="h-4 w-4" />
1177
1193
  </Button>
1178
1194
  </DropdownMenuTrigger>
1179
1195
  <DropdownMenuContent align="end" className="w-44">
@@ -1206,25 +1222,6 @@ export default function ShareRoute() {
1206
1222
  onDeleted={() => navigate("/library", { replace: true })}
1207
1223
  />
1208
1224
  ) : null}
1209
- {viewerCanEdit || canReshareLink ? (
1210
- <ShareRecordingPopover
1211
- recordingId={recording.id}
1212
- recordingTitle={recording.title}
1213
- initialVisibility={recording.visibility}
1214
- initialRole={viewerIsOwner ? "owner" : undefined}
1215
- videoUrl={shareVideoUrl}
1216
- thumbnailUrl={recording.thumbnailUrl}
1217
- animatedThumbnailUrl={recording.animatedThumbnailUrl}
1218
- isLoomRecording={isLoomEmbedBacked}
1219
- hasPassword={Boolean(recording.hasPassword)}
1220
- viewerReshareOnly={viewerReshareOnly}
1221
- >
1222
- <ShareTrigger
1223
- label={t("sharePage.share")}
1224
- className="shrink-0"
1225
- />
1226
- </ShareRecordingPopover>
1227
- ) : null}
1228
1225
  </div>
1229
1226
  </header>
1230
1227
 
@@ -1361,15 +1358,15 @@ export default function ShareRoute() {
1361
1358
  : null}
1362
1359
  </div>
1363
1360
 
1364
- <div className="flex shrink-0 flex-col gap-3 px-4 pb-4 sm:flex-row sm:items-start sm:px-0 sm:pb-0">
1365
- <div className="min-w-0 flex-1">
1361
+ <div className="clips-share-metadata flex shrink-0 flex-col gap-3 px-4 pb-4 sm:px-0 sm:pb-0">
1362
+ <div className="clips-share-metadata-description min-w-0 flex-1">
1366
1363
  {recording.description ? (
1367
1364
  <p className="whitespace-pre-wrap break-words text-sm text-muted-foreground">
1368
1365
  {recording.description}
1369
1366
  </p>
1370
1367
  ) : null}
1371
1368
  </div>
1372
- <div className="flex max-w-full flex-col items-stretch gap-2 sm:items-end">
1369
+ <div className="clips-share-metadata-actions flex max-w-full flex-col items-stretch gap-2 sm:items-end">
1373
1370
  <div className="flex flex-wrap items-center gap-2 sm:justify-end">
1374
1371
  {recording.enableComments ? (
1375
1372
  <TimestampedCommentButton
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-08-20
4
+ ---
5
+
6
+ Clip viewers now make Share the primary action and keep the overflow control compact and vertical.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-08-20
4
+ ---
5
+
6
+ Recording preparation now uses a centered full-screen overlay that transitions smoothly into the 3-2-1 countdown.
@@ -61,19 +61,6 @@ type PopupStartMessage = {
61
61
  settings?: Partial<ExtensionSettings>;
62
62
  };
63
63
 
64
- type PopupMessage =
65
- | PopupStartMessage
66
- | { type: "CLIPS_POPUP_STATUS" }
67
- | { type: "CLIPS_POPUP_STOP" }
68
- | { type: "CLIPS_POPUP_CANCEL" }
69
- | { type: "CLIPS_POPUP_OPEN" }
70
- | { type: "CLIPS_POPUP_SIGN_IN"; settings?: Partial<ExtensionSettings> }
71
- | {
72
- type: "CLIPS_POPUP_PREPARE_PERMISSION_START";
73
- settings?: Partial<ExtensionSettings>;
74
- targetTabId?: number;
75
- };
76
-
77
64
  type ExternalMessage =
78
65
  | {
79
66
  type: "CLIPS_CAPTURE_START";
@@ -117,7 +117,6 @@ type OverlayState = {
117
117
  countdownEndsAtMs: number;
118
118
  };
119
119
 
120
- const COUNTDOWN_FALLBACK = 3;
121
120
  const params = new URLSearchParams(location.search);
122
121
  const part = params.get("part");
123
122
  const root = document.getElementById("root") as HTMLDivElement;
@@ -574,26 +574,6 @@ function isUnsupportedPage(url: string | undefined | null): boolean {
574
574
  );
575
575
  }
576
576
 
577
- function targetCopy(tab: chrome.tabs.Tab | null): {
578
- title: string;
579
- subtitle: string;
580
- } {
581
- const title = tab?.title?.trim() || "Current tab";
582
- const host = hostnameLabel(tab?.url);
583
- if (!host) return { title, subtitle: "Ready to record" };
584
- const titleKey = comparableLabel(title);
585
- const hostKey = comparableLabel(host);
586
- return {
587
- title,
588
- subtitle:
589
- titleKey &&
590
- hostKey &&
591
- (titleKey === hostKey || hostKey.includes(titleKey))
592
- ? ""
593
- : host,
594
- };
595
- }
596
-
597
577
  function isSignInError(message: string | undefined): boolean {
598
578
  return Boolean(
599
579
  message && /sign in to clips|unauthorized|unauthenticated/i.test(message),
@@ -345,17 +345,6 @@ const DEFAULT_SCREEN_MEMORY_CONFIG = {
345
345
  excludePrivateWindows: false,
346
346
  };
347
347
 
348
- function parseExcludedBundleIds(value: string): string[] {
349
- return [
350
- ...new Set(
351
- value
352
- .split(/[\n,]/)
353
- .map((id) => id.trim())
354
- .filter(Boolean),
355
- ),
356
- ];
357
- }
358
-
359
348
  function isStorageSetupFailureMessage(message: string | null | undefined) {
360
349
  return STORAGE_SETUP_FAILURE_RE.test(message ?? "");
361
350
  }
@@ -997,9 +986,9 @@ export function App() {
997
986
  setPopoverView("settings");
998
987
  }
999
988
 
1000
- const [rewindSettingsReturnView, setRewindSettingsReturnView] = useState<
1001
- "recorder" | "settings"
1002
- >("recorder");
989
+ const [rewindSettingsReturnView] = useState<"recorder" | "settings">(
990
+ "recorder",
991
+ );
1003
992
  const [rewindAgentPromptCopied, setRewindAgentPromptCopied] = useState(false);
1004
993
  const [agentHandoff, setAgentHandoff] =
1005
994
  useState<RewindAgentHandoffRequest | null>(null);
@@ -1037,7 +1026,7 @@ export function App() {
1037
1026
  // popover auto-hide during the macOS screen-picker focus dance.
1038
1027
  const [recordingFlowActive, setRecordingFlowActive] = useState(false);
1039
1028
  const [recordingStopFinalizing, setRecordingStopFinalizing] = useState(false);
1040
- const [lastRecordingId, setLastRecordingId] = useState<string | null>(null);
1029
+ const [, setLastRecordingId] = useState<string | null>(null);
1041
1030
  const [authStatus, setAuthStatus] = useState<"unknown" | "authed" | "anon">(
1042
1031
  "unknown",
1043
1032
  );
@@ -1071,7 +1060,6 @@ export function App() {
1071
1060
  const {
1072
1061
  cameraId,
1073
1062
  setCameraId,
1074
- micId,
1075
1063
  setMicId,
1076
1064
  cameraLabel,
1077
1065
  setCameraLabel,
@@ -4387,7 +4375,7 @@ function PendingUploadBanner({
4387
4375
 
4388
4376
  const retrying = retryingUploadId === latest.recordingId;
4389
4377
  const storageSetupFailure = isStorageSetupFailureMessage(latest.lastError);
4390
- const exporting = exportingUploadId === latest.recordingId;
4378
+
4391
4379
  const canOpenFolder = latest.kind === "native" && !!latest.folderPath;
4392
4380
  const canExport = latest.kind === "browser";
4393
4381
  const actionsDisabled =
@@ -5516,7 +5504,7 @@ function Setup({
5516
5504
  const [rewindLocalBusy, setRewindLocalBusy] = useState(false);
5517
5505
  const [rewindLocalError, setRewindLocalError] = useState<string | null>(null);
5518
5506
  const [rewindReplayId, setRewindReplayId] = useState<string | null>(null);
5519
- const [excludedBundleIdsInput, setExcludedBundleIdsInput] = useState("");
5507
+ const [, setExcludedBundleIdsInput] = useState("");
5520
5508
  const [excludedApps, setExcludedApps] = useState<RewindExcludedApplication[]>(
5521
5509
  [],
5522
5510
  );
@@ -1,4 +1,3 @@
1
- import { emit } from "@tauri-apps/api/event";
2
1
  import {
3
2
  useCallback,
4
3
  useEffect,
@@ -1992,14 +1992,6 @@ function isCountdownCancelledError(err: unknown) {
1992
1992
  );
1993
1993
  }
1994
1994
 
1995
- function isRegionSelectionCancelledError(err: unknown) {
1996
- return (
1997
- err instanceof Error &&
1998
- err.name === "AbortError" &&
1999
- /region selection/i.test(err.message)
2000
- );
2001
- }
2002
-
2003
1995
  function normalizeRegionCaptureRect(value: unknown): RegionCaptureRect | null {
2004
1996
  if (!value || typeof value !== "object") return null;
2005
1997
  const rect = value as Partial<RegionCaptureRect>;
@@ -1,12 +1,10 @@
1
- /** Visible readiness state shown while the shared Rewind Clip writer and
2
- * resumable upload session are prepared. The numeric countdown replaces it
3
- * only after zero can be an immediate media boundary. */
1
+ /** Visible readiness state shown before the numeric countdown takes over. */
4
2
  export function Preparing() {
5
3
  return (
6
- <div className="preparing-root">
7
- <div className="preparing-card" role="status" aria-live="polite">
4
+ <div className="countdown-root preparing-root">
5
+ <div className="preparing-content" role="status" aria-live="polite">
6
+ <span className="preparing-label">Preparing recording</span>
8
7
  <div className="preparing-spinner" aria-hidden="true" />
9
- <span>Preparing recording…</span>
10
8
  </div>
11
9
  </div>
12
10
  );
@@ -4250,42 +4250,40 @@ body[data-clips-route="recording-pill"] #root {
4250
4250
  }
4251
4251
 
4252
4252
  /* ------------------------------------------------------------------------- */
4253
- /* Overlay: finalizing spinner */
4253
+ /* Overlay: recording preparation */
4254
4254
  /* ------------------------------------------------------------------------- */
4255
4255
 
4256
4256
  .preparing-root {
4257
4257
  position: fixed;
4258
4258
  inset: 0;
4259
4259
  display: flex;
4260
- align-items: flex-end;
4261
- justify-content: flex-start;
4262
- padding: 10px;
4263
- background: transparent;
4260
+ align-items: center;
4261
+ justify-content: center;
4262
+ pointer-events: none;
4264
4263
  }
4265
4264
 
4266
- .preparing-card {
4265
+ .preparing-content {
4267
4266
  display: flex;
4267
+ flex-direction: column;
4268
4268
  align-items: center;
4269
- gap: 10px;
4270
- width: 100%;
4271
- padding: 12px 14px;
4272
- border-radius: 16px;
4273
- background: rgba(20, 22, 28, 0.94);
4274
- backdrop-filter: blur(20px);
4275
- -webkit-backdrop-filter: blur(20px);
4276
- border: 1px solid rgba(255, 255, 255, 0.08);
4269
+ gap: 16px;
4277
4270
  color: white;
4278
- font-size: 13px;
4279
- font-weight: 600;
4271
+ }
4272
+
4273
+ .preparing-label {
4274
+ font-size: 20px;
4275
+ font-weight: 650;
4276
+ letter-spacing: -0.01em;
4277
+ line-height: 1;
4280
4278
  }
4281
4279
 
4282
4280
  .preparing-spinner {
4283
- width: 18px;
4284
- height: 18px;
4281
+ width: 28px;
4282
+ height: 28px;
4285
4283
  flex: 0 0 auto;
4286
4284
  border-radius: 50%;
4287
- border: 2px solid rgba(255, 255, 255, 0.18);
4288
- border-top-color: #ffffff;
4285
+ border: 3px solid color-mix(in srgb, currentColor 18%, transparent);
4286
+ border-top-color: currentColor;
4289
4287
  animation: finalizing-spin 0.9s linear infinite;
4290
4288
  }
4291
4289
 
@@ -472,25 +472,17 @@ fn stop_countdown_control_tracking() {
472
472
  COUNTDOWN_CONTROL_TRACKING.store(false, Ordering::SeqCst);
473
473
  }
474
474
 
475
- /// Compact visible readiness state for the slow work that intentionally runs
476
- /// before the numeric countdown. This capture-excluded card briefly takes
477
- /// focus as the first stage of the explicit modal start flow, so the user sees
478
- /// that Start was accepted without changing the exact countdown-zero boundary.
475
+ /// Full-screen visible readiness state for the slow work that intentionally
476
+ /// runs before the numeric countdown. This capture-excluded overlay briefly
477
+ /// takes focus as the first stage of the explicit modal start flow, so the user
478
+ /// sees that Start was accepted without changing the exact countdown-zero
479
+ /// boundary.
479
480
  #[tauri::command]
480
481
  pub async fn show_preparing(app: AppHandle) -> Result<(), String> {
481
482
  if let Some(existing) = app.get_webview_window(PREPARING_LABEL) {
482
483
  let _ = existing.close();
483
484
  }
484
485
  let (mx, my, mw, mh) = tray_monitor_physical_rect(&app);
485
- let scale = overlay_scale_factor(&app);
486
- let content_w: u32 = (260.0 * scale).round() as u32;
487
- let content_h: u32 = (58.0 * scale).round() as u32;
488
- let margin: i32 = (14.0 * scale).round() as i32;
489
- let gutter = overlay_shadow_gutter_physical(&app);
490
- let w = content_w + gutter * 2;
491
- let h = content_h + gutter * 2;
492
- let x = (mx + (mw.saturating_sub(w) / 2) as i32).max(mx);
493
- let y = (my + mh as i32 - h as i32 - margin).max(my);
494
486
  let win = WebviewWindowBuilder::new(&app, PREPARING_LABEL, build_overlay_url("preparing"))
495
487
  .title("Preparing recording")
496
488
  .decorations(false)
@@ -503,14 +495,14 @@ pub async fn show_preparing(app: AppHandle) -> Result<(), String> {
503
495
  .focused(true)
504
496
  .build()
505
497
  .map_err(|error| format!("preparing window build failed: {error}"))?;
506
- let _ = win.set_size(tauri::Size::Physical(PhysicalSize::new(w, h)));
507
- let _ = win.set_position(PhysicalPosition::new(x, y));
498
+ let _ = win.set_size(tauri::Size::Physical(PhysicalSize::new(mw, mh)));
499
+ let _ = win.set_position(PhysicalPosition::new(mx, my));
508
500
  let _ = win.set_ignore_cursor_events(true);
509
501
  set_capture_excluded(&win);
510
502
  configure_overlay_behavior(&win);
511
503
  // Preparation and countdown are one explicit modal start flow. Making the
512
- // compact readiness card key ensures it gets a real first paint and is
513
- // announced before the full-screen countdown replaces it.
504
+ // readiness overlay key ensures it gets a real first paint and is announced
505
+ // before the countdown replaces it.
514
506
  present_interactive_window(&win);
515
507
  let _ = app.emit("clips:toolbar-preparing", true);
516
508
  // A newly-created webview needs one paint before the async preparation can
@@ -38,7 +38,11 @@ connection exists:
38
38
  register a `kind: "oauth"` entry so the shared UI renders Connect and the
39
39
  runtime owns status, refresh, and reauthorization.
40
40
  - **Deploy- or app-level configuration** - use deployment/runtime
41
- configuration, not a per-user secret row.
41
+ configuration, not a per-user secret row. For a non-secret public setting
42
+ already represented by `AgentNativeConfig`, put the default in
43
+ `agent-native.config.ts` and use its `AGENT_NATIVE_CONFIG_<PATH>` alias only
44
+ for a deployment override. Never put a credential or provider key in that
45
+ public namespace.
42
46
  - **Account, customer, manager, or other non-secret identifier** - store it as
43
47
  scoped connection metadata or app data, not as a masked secret field.
44
48
 
@@ -55,7 +55,10 @@ Preview before `--apply`, commit `agent-native.ejections.json`, and never edit
55
55
  ZIPs, screenshots, thumbnails, session replay chunks) in configured file/blob
56
56
  storage and persist only URLs, ids, or handles.
57
57
  - Store shared runtime configuration in the workspace root `.env`; use
58
- `apps/<app>/.env` only for app-specific overrides. Never hardcode API keys,
58
+ `apps/<app>/.env` only for app-specific overrides. For public app behavior,
59
+ prefer the default in `agent-native.config.ts` and use the deterministic
60
+ `AGENT_NATIVE_CONFIG_<UPPER_SNAKE_PATH>` alias only when a non-secret value
61
+ needs a deployment override. Never hardcode API keys,
59
62
  tokens, webhook URLs, signing secrets, private Builder/internal data, customer
60
63
  data, or credential-looking literals in source, docs, prompts, fixtures,
61
64
  application state, action responses, or generated app content. Use