@agent-native/core 0.121.1 → 0.122.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 (465) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +145 -0
  3. package/corpus/core/docs/content/actions.mdx +2 -2
  4. package/corpus/core/docs/content/agent-surfaces.mdx +1 -1
  5. package/corpus/core/docs/content/authentication.mdx +2 -0
  6. package/corpus/core/docs/content/deployment.mdx +36 -0
  7. package/corpus/core/docs/content/getting-started.mdx +477 -115
  8. package/corpus/core/docs/content/http-api.mdx +266 -0
  9. package/corpus/core/docs/content/syncing-template-changes.mdx +159 -0
  10. package/corpus/core/package.json +2 -1
  11. package/corpus/core/src/a2a/activity.ts +38 -27
  12. package/corpus/core/src/agent/engine/builder-engine.ts +35 -4
  13. package/corpus/core/src/agent/run-manager.ts +20 -1
  14. package/corpus/core/src/agent/run-store.ts +4 -1
  15. package/corpus/core/src/agent/types.ts +28 -8
  16. package/corpus/core/src/chat-threads/store.ts +45 -0
  17. package/corpus/core/src/checkpoints/index.ts +2 -0
  18. package/corpus/core/src/checkpoints/route-match.ts +13 -0
  19. package/corpus/core/src/cli/create.ts +105 -17
  20. package/corpus/core/src/cli/index.ts +20 -0
  21. package/corpus/core/src/cli/template-baseline.ts +410 -0
  22. package/corpus/core/src/cli/template-sync.ts +1004 -0
  23. package/corpus/core/src/cli/templates-meta.ts +1 -0
  24. package/corpus/core/src/client/AssistantChat.tsx +38 -12
  25. package/corpus/core/src/client/NewWorkspaceAppFlow.tsx +75 -10
  26. package/corpus/core/src/client/chat/message-components.tsx +127 -66
  27. package/corpus/core/src/client/chat/tool-call-display.tsx +29 -5
  28. package/corpus/core/src/client/error-format.ts +18 -0
  29. package/corpus/core/src/client/org/OrgSwitcher.tsx +30 -8
  30. package/corpus/core/src/client/org/TeamPage.tsx +7 -6
  31. package/corpus/core/src/client/sse-event-processor.ts +3 -0
  32. package/corpus/core/src/data-widgets/index.ts +41 -0
  33. package/corpus/core/src/deploy/build.ts +11 -9
  34. package/corpus/core/src/integrations/webhook-handler.ts +63 -9
  35. package/corpus/core/src/org/auto-join-domain.ts +4 -3
  36. package/corpus/core/src/org/context.ts +108 -39
  37. package/corpus/core/src/org/index.ts +5 -0
  38. package/corpus/core/src/org/service-identity.ts +60 -0
  39. package/corpus/core/src/provider-api/index.ts +22 -1
  40. package/corpus/core/src/scripts/docs/search.ts +12 -1
  41. package/corpus/core/src/server/agent-chat/context-tools.ts +9 -4
  42. package/corpus/core/src/server/agent-chat/framework-prompts.ts +38 -66
  43. package/corpus/core/src/server/agent-chat-plugin.ts +17 -10
  44. package/corpus/core/src/server/agents-bundle.ts +84 -5
  45. package/corpus/core/src/server/auth.ts +4 -3
  46. package/corpus/core/src/server/builder-browser.ts +47 -19
  47. package/corpus/core/src/server/core-routes-plugin.ts +2 -2
  48. package/corpus/core/src/server/credential-provider.ts +209 -68
  49. package/corpus/core/src/server/index.ts +3 -0
  50. package/corpus/core/src/server/prompts/framework-core-compact.ts +6 -13
  51. package/corpus/core/src/server/prompts/framework-core.ts +9 -21
  52. package/corpus/core/src/server/prompts/index.ts +0 -1
  53. package/corpus/core/src/server/prompts/shared-rules.ts +19 -11
  54. package/corpus/core/src/server/ssr-handler.ts +13 -2
  55. package/corpus/core/src/settings/user-settings.ts +13 -1
  56. package/corpus/core/src/shared/cache-control.ts +141 -0
  57. package/corpus/core/src/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  58. package/corpus/core/src/templates/chat/_gitignore +1 -0
  59. package/corpus/core/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  60. package/corpus/core/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  61. package/corpus/core/src/templates/workspace-core/.agents/skills/performance/SKILL.md +19 -0
  62. package/corpus/core/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  63. package/corpus/core/src/templates/workspace-core/.agents/skills/visual-answer/SKILL.md +1 -0
  64. package/corpus/core/src/vite/agents-bundle-plugin.ts +7 -6
  65. package/corpus/core/src/vite/client.ts +5 -0
  66. package/corpus/templates/analytics/.agents/skills/adhoc-analysis/SKILL.md +4 -5
  67. package/corpus/templates/analytics/.agents/skills/admin-surfaces/SKILL.md +55 -0
  68. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +10 -0
  69. package/corpus/templates/analytics/.agents/skills/dashboard-management/references/template-catalog-and-demo.md +62 -0
  70. package/corpus/templates/analytics/.agents/skills/dashboard-ops/SKILL.md +85 -0
  71. package/corpus/templates/analytics/.agents/skills/data-querying/SKILL.md +27 -2
  72. package/corpus/templates/analytics/.agents/skills/data-querying/references/inline-chart-embeds.md +139 -0
  73. package/corpus/templates/analytics/.agents/skills/monitoring/SKILL.md +77 -0
  74. package/corpus/templates/analytics/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  75. package/corpus/templates/analytics/AGENTS.md +91 -563
  76. package/corpus/templates/analytics/_gitignore +1 -0
  77. package/corpus/templates/analytics/actions/bigquery.ts +12 -4
  78. package/corpus/templates/analytics/actions/generate-chart.ts +5 -5
  79. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +30 -1
  80. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/DashboardFilterBar.tsx +3 -0
  81. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +1 -1
  82. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +1 -0
  83. package/corpus/templates/analytics/changelog/2026-07-24-analytics-finds-saved-dashboards-and-queries-far-more-reliab.md +6 -0
  84. package/corpus/templates/analytics/changelog/2026-07-24-notion-access-errors-now-explain-that-a-page-needs-sharing-w.md +6 -0
  85. package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +7 -0
  86. package/corpus/templates/analytics/server/lib/analytics-query-catalog.ts +191 -30
  87. package/corpus/templates/analytics/server/lib/bigquery.ts +11 -1
  88. package/corpus/templates/analytics/server/lib/notion.ts +15 -4
  89. package/corpus/templates/analytics/server/plugins/agent-chat.ts +10 -0
  90. package/corpus/templates/assets/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  91. package/corpus/templates/brain/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  92. package/corpus/templates/brain/_gitignore +1 -0
  93. package/corpus/templates/calendar/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  94. package/corpus/templates/calendar/_gitignore +1 -0
  95. package/corpus/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  96. package/corpus/templates/chat/_gitignore +1 -0
  97. package/corpus/templates/clips/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  98. package/corpus/templates/clips/.agents/skills/video-sharing/SKILL.md +34 -0
  99. package/corpus/templates/clips/AGENTS.md +5 -4
  100. package/corpus/templates/clips/_gitignore +1 -0
  101. package/corpus/templates/clips/actions/cleanup-transcript.ts +5 -0
  102. package/corpus/templates/clips/actions/get-recording-insights.ts +44 -8
  103. package/corpus/templates/clips/actions/get-recording-player-data.ts +39 -70
  104. package/corpus/templates/clips/actions/list-clip-views.ts +2 -4
  105. package/corpus/templates/clips/actions/list-recordings.ts +69 -19
  106. package/corpus/templates/clips/actions/list-viewers.ts +5 -2
  107. package/corpus/templates/clips/actions/regenerate-summary.ts +5 -1
  108. package/corpus/templates/clips/actions/request-transcript.ts +28 -1
  109. package/corpus/templates/clips/app/components/editor/stitch-manager.tsx +21 -1
  110. package/corpus/templates/clips/app/components/meetings/quick-ask-sidebar.tsx +14 -1
  111. package/corpus/templates/clips/app/components/player/insights-panel.tsx +8 -20
  112. package/corpus/templates/clips/app/components/player/recording-views-badge.tsx +335 -0
  113. package/corpus/templates/clips/app/components/player/video-player.tsx +13 -8
  114. package/corpus/templates/clips/app/components/sharing/share-ui.tsx +2 -1
  115. package/corpus/templates/clips/app/i18n/en-US.ts +13 -2
  116. package/corpus/templates/clips/app/lib/capture-permissions.ts +110 -0
  117. package/corpus/templates/clips/app/lib/recording-link.ts +32 -0
  118. package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +27 -0
  119. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +46 -15
  120. package/corpus/templates/clips/app/routes/record.tsx +77 -31
  121. package/corpus/templates/clips/app/routes/share.$shareId.tsx +42 -31
  122. package/corpus/templates/clips/changelog/2026-07-24-clip-pages-now-show-a-view-count-with-viewer-avatars-next-to.md +6 -0
  123. package/corpus/templates/clips/changelog/2026-07-24-clip-summaries-read-like-a-description-you-d-write-yourself-.md +6 -0
  124. package/corpus/templates/clips/changelog/2026-07-24-clip-view-counts-now-separate-human-views-from-agent-views-s.md +6 -0
  125. package/corpus/templates/clips/changelog/2026-07-24-clips-actions-can-now-be-called-by-org-service-tokens-so-ext.md +6 -0
  126. package/corpus/templates/clips/changelog/2026-07-24-clips-no-longer-briefly-shows-a-dock-icon-while-launching.md +6 -0
  127. package/corpus/templates/clips/changelog/2026-07-24-fixed-owner-and-editor-share-links-redirecting-to-the-record.md +6 -0
  128. package/corpus/templates/clips/changelog/2026-07-24-meeting-and-note-recordings-now-start-as-a-compact-pill-on-t.md +6 -0
  129. package/corpus/templates/clips/changelog/2026-07-24-new-clips-now-copy-a-shareable-link-instead-of-the-owner-onl.md +6 -0
  130. package/corpus/templates/clips/changelog/2026-07-24-opening-a-share-link-as-the-clip-s-owner-now-goes-straight-t.md +6 -0
  131. package/corpus/templates/clips/changelog/2026-07-24-permissions-and-rewind-controls-now-use-compact-consistent-h.md +6 -0
  132. package/corpus/templates/clips/changelog/2026-07-24-quitting-the-desktop-app-no-longer-shows-a-false-macos-crash.md +6 -0
  133. package/corpus/templates/clips/changelog/2026-07-24-screen-recording-permission-errors-now-name-the-exact-app-to.md +6 -0
  134. package/corpus/templates/clips/changelog/2026-07-24-the-desktop-app-now-copies-a-new-clip-s-share-link-to-your-c.md +6 -0
  135. package/corpus/templates/clips/changelog/2026-07-24-the-recording-toolbar-now-stays-above-other-apps-including-o.md +6 -0
  136. package/corpus/templates/clips/changelog/2026-07-24-transcript-captions-now-use-real-speech-timings-instead-of-a.md +6 -0
  137. package/corpus/templates/clips/changelog/2026-07-24-video-playback-no-longer-stutters-and-replays-the-last-momen.md +6 -0
  138. package/corpus/templates/clips/chrome-extension/src/background.ts +17 -1
  139. package/corpus/templates/clips/desktop/package.json +2 -0
  140. package/corpus/templates/clips/desktop/src/app.tsx +89 -0
  141. package/corpus/templates/clips/desktop/src/hooks/useMeetingTranscription.ts +9 -3
  142. package/corpus/templates/clips/desktop/src/lib/audio-meter.ts +51 -0
  143. package/corpus/templates/clips/desktop/src/lib/native-notification.ts +44 -0
  144. package/corpus/templates/clips/desktop/src/lib/recording-link.ts +67 -0
  145. package/corpus/templates/clips/desktop/src/overlays/live-audio-bars.tsx +35 -35
  146. package/corpus/templates/clips/desktop/src/overlays/live-transcript.tsx +3 -2
  147. package/corpus/templates/clips/desktop/src/overlays/recording-pill.tsx +47 -46
  148. package/corpus/templates/clips/desktop/src/styles.css +127 -78
  149. package/corpus/templates/clips/desktop/src-tauri/Cargo.toml +7 -0
  150. package/corpus/templates/clips/desktop/src-tauri/Info.plist +6 -0
  151. package/corpus/templates/clips/desktop/src-tauri/capabilities/default.json +1 -0
  152. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +7 -3
  153. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +4 -1
  154. package/corpus/templates/clips/desktop/src-tauri/src/main.rs +8 -0
  155. package/corpus/templates/clips/desktop/src-tauri/src/recording_indicator.rs +21 -10
  156. package/corpus/templates/clips/desktop/src-tauri/src/util.rs +40 -0
  157. package/corpus/templates/clips/server/db/schema.ts +25 -0
  158. package/corpus/templates/clips/server/lib/agent-views.ts +145 -0
  159. package/corpus/templates/clips/server/lib/public-agent-context.ts +7 -0
  160. package/corpus/templates/clips/server/lib/recording-share-grant.ts +79 -0
  161. package/corpus/templates/clips/server/lib/recordings.ts +51 -3
  162. package/corpus/templates/clips/server/plugins/db.ts +23 -0
  163. package/corpus/templates/clips/server/routes/api/public-recording.get.ts +49 -17
  164. package/corpus/templates/clips/shared/recording-link.ts +43 -0
  165. package/corpus/templates/clips/shared/share-attribution.ts +4 -0
  166. package/corpus/templates/clips/shared/share-dashboard-redirect.ts +42 -0
  167. package/corpus/templates/clips/shared/view-analytics.ts +26 -0
  168. package/corpus/templates/content/.agents/skills/content/SKILL.md +5 -0
  169. package/corpus/templates/content/.agents/skills/content/references/local-file-mode.md +135 -0
  170. package/corpus/templates/content/.agents/skills/document-editing/SKILL.md +12 -0
  171. package/corpus/templates/content/.agents/skills/document-editing/references/databases.md +238 -0
  172. package/corpus/templates/content/.agents/skills/document-editing/references/document-behavior.md +91 -0
  173. package/corpus/templates/content/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  174. package/corpus/templates/content/AGENTS.md +62 -583
  175. package/corpus/templates/content/_gitignore +1 -0
  176. package/corpus/templates/design/.agents/skills/creative-context/SKILL.md +11 -0
  177. package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +50 -8
  178. package/corpus/templates/design/.agents/skills/design-generation/references/code-layers.md +81 -0
  179. package/corpus/templates/design/.agents/skills/design-generation/references/code-workspace.md +42 -0
  180. package/corpus/templates/design/.agents/skills/design-generation/references/editor-extensions.md +34 -0
  181. package/corpus/templates/design/.agents/skills/responsive-breakpoints/SKILL.md +4 -1
  182. package/corpus/templates/design/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  183. package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +17 -0
  184. package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +8196 -0
  185. package/corpus/templates/design/.generated/bridge/embedded-wheel.generated.ts +265 -0
  186. package/corpus/templates/design/.generated/bridge/hit-test.generated.ts +642 -0
  187. package/corpus/templates/design/.generated/bridge/motion-preview.generated.ts +571 -0
  188. package/corpus/templates/design/.generated/bridge/nav.generated.ts +91 -0
  189. package/corpus/templates/design/.generated/bridge/sample.generated.ts +23 -0
  190. package/corpus/templates/design/.generated/bridge/shader-fill-preview.generated.ts +263 -0
  191. package/corpus/templates/design/.generated/bridge/shader-runtime.generated.ts +518 -0
  192. package/corpus/templates/design/.generated/bridge/tweak.generated.ts +20 -0
  193. package/corpus/templates/design/.generated/bridge/zoom.generated.ts +32 -0
  194. package/corpus/templates/design/AGENTS.md +88 -503
  195. package/corpus/templates/design/_gitignore +1 -0
  196. package/corpus/templates/dispatch/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  197. package/corpus/templates/dispatch/_gitignore +1 -0
  198. package/corpus/templates/dispatch/changelog/2026-07-24-signing-in-now-puts-you-in-your-companys-workspace.md +6 -0
  199. package/corpus/templates/forms/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  200. package/corpus/templates/forms/_gitignore +1 -0
  201. package/corpus/templates/forms/server/lib/public-form-ssr.ts +2 -2
  202. package/corpus/templates/macros/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  203. package/corpus/templates/macros/_gitignore +1 -0
  204. package/corpus/templates/mail/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  205. package/corpus/templates/mail/_gitignore +1 -0
  206. package/corpus/templates/plan/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  207. package/corpus/templates/plan/_gitignore +1 -0
  208. package/corpus/templates/slides/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  209. package/corpus/templates/slides/_gitignore +1 -0
  210. package/corpus/templates/slides/server/plugins/db.ts +4 -0
  211. package/corpus/templates/tasks/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  212. package/corpus/templates/tasks/AGENTS.md +1 -1
  213. package/corpus/templates/tasks/_gitignore +1 -0
  214. package/dist/a2a/activity.d.ts +4 -1
  215. package/dist/a2a/activity.d.ts.map +1 -1
  216. package/dist/a2a/activity.js +27 -16
  217. package/dist/a2a/activity.js.map +1 -1
  218. package/dist/agent/engine/builder-engine.d.ts +1 -0
  219. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  220. package/dist/agent/engine/builder-engine.js +31 -4
  221. package/dist/agent/engine/builder-engine.js.map +1 -1
  222. package/dist/agent/run-manager.d.ts.map +1 -1
  223. package/dist/agent/run-manager.js +18 -1
  224. package/dist/agent/run-manager.js.map +1 -1
  225. package/dist/agent/run-store.d.ts +1 -0
  226. package/dist/agent/run-store.d.ts.map +1 -1
  227. package/dist/agent/run-store.js +2 -1
  228. package/dist/agent/run-store.js.map +1 -1
  229. package/dist/agent/types.d.ts +12 -1
  230. package/dist/agent/types.d.ts.map +1 -1
  231. package/dist/agent/types.js +21 -1
  232. package/dist/agent/types.js.map +1 -1
  233. package/dist/chat-threads/store.d.ts +10 -0
  234. package/dist/chat-threads/store.d.ts.map +1 -1
  235. package/dist/chat-threads/store.js +41 -0
  236. package/dist/chat-threads/store.js.map +1 -1
  237. package/dist/checkpoints/index.d.ts +1 -0
  238. package/dist/checkpoints/index.d.ts.map +1 -1
  239. package/dist/checkpoints/index.js +1 -0
  240. package/dist/checkpoints/index.js.map +1 -1
  241. package/dist/checkpoints/route-match.d.ts +8 -0
  242. package/dist/checkpoints/route-match.d.ts.map +1 -0
  243. package/dist/checkpoints/route-match.js +13 -0
  244. package/dist/checkpoints/route-match.js.map +1 -0
  245. package/dist/cli/create.d.ts +35 -4
  246. package/dist/cli/create.d.ts.map +1 -1
  247. package/dist/cli/create.js +69 -19
  248. package/dist/cli/create.js.map +1 -1
  249. package/dist/cli/index.js +19 -0
  250. package/dist/cli/index.js.map +1 -1
  251. package/dist/cli/template-baseline.d.ts +54 -0
  252. package/dist/cli/template-baseline.d.ts.map +1 -0
  253. package/dist/cli/template-baseline.js +334 -0
  254. package/dist/cli/template-baseline.js.map +1 -0
  255. package/dist/cli/template-sync.d.ts +57 -0
  256. package/dist/cli/template-sync.d.ts.map +1 -0
  257. package/dist/cli/template-sync.js +787 -0
  258. package/dist/cli/template-sync.js.map +1 -0
  259. package/dist/cli/templates-meta.d.ts.map +1 -1
  260. package/dist/cli/templates-meta.js +1 -0
  261. package/dist/cli/templates-meta.js.map +1 -1
  262. package/dist/client/AssistantChat.d.ts +2 -1
  263. package/dist/client/AssistantChat.d.ts.map +1 -1
  264. package/dist/client/AssistantChat.js +38 -10
  265. package/dist/client/AssistantChat.js.map +1 -1
  266. package/dist/client/NewWorkspaceAppFlow.d.ts.map +1 -1
  267. package/dist/client/NewWorkspaceAppFlow.js +32 -2
  268. package/dist/client/NewWorkspaceAppFlow.js.map +1 -1
  269. package/dist/client/chat/message-components.d.ts +20 -0
  270. package/dist/client/chat/message-components.d.ts.map +1 -1
  271. package/dist/client/chat/message-components.js +81 -46
  272. package/dist/client/chat/message-components.js.map +1 -1
  273. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  274. package/dist/client/chat/tool-call-display.js +14 -6
  275. package/dist/client/chat/tool-call-display.js.map +1 -1
  276. package/dist/client/error-format.d.ts.map +1 -1
  277. package/dist/client/error-format.js +13 -0
  278. package/dist/client/error-format.js.map +1 -1
  279. package/dist/client/org/OrgSwitcher.d.ts +8 -1
  280. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  281. package/dist/client/org/OrgSwitcher.js +3 -2
  282. package/dist/client/org/OrgSwitcher.js.map +1 -1
  283. package/dist/client/org/TeamPage.d.ts.map +1 -1
  284. package/dist/client/org/TeamPage.js +1 -1
  285. package/dist/client/org/TeamPage.js.map +1 -1
  286. package/dist/client/sse-event-processor.d.ts.map +1 -1
  287. package/dist/client/sse-event-processor.js +3 -0
  288. package/dist/client/sse-event-processor.js.map +1 -1
  289. package/dist/collab/awareness.d.ts +2 -2
  290. package/dist/collab/awareness.d.ts.map +1 -1
  291. package/dist/data-widgets/index.d.ts +3 -0
  292. package/dist/data-widgets/index.d.ts.map +1 -1
  293. package/dist/data-widgets/index.js +33 -0
  294. package/dist/data-widgets/index.js.map +1 -1
  295. package/dist/deploy/build.d.ts.map +1 -1
  296. package/dist/deploy/build.js +11 -7
  297. package/dist/deploy/build.js.map +1 -1
  298. package/dist/eject/provider-api-definitions.d.ts +1 -0
  299. package/dist/eject/provider-api-definitions.d.ts.map +1 -1
  300. package/dist/integrations/webhook-handler.d.ts.map +1 -1
  301. package/dist/integrations/webhook-handler.js +46 -9
  302. package/dist/integrations/webhook-handler.js.map +1 -1
  303. package/dist/notifications/routes.d.ts +3 -3
  304. package/dist/observability/routes.d.ts +3 -3
  305. package/dist/org/auto-join-domain.d.ts +3 -2
  306. package/dist/org/auto-join-domain.d.ts.map +1 -1
  307. package/dist/org/auto-join-domain.js +1 -1
  308. package/dist/org/auto-join-domain.js.map +1 -1
  309. package/dist/org/context.d.ts.map +1 -1
  310. package/dist/org/context.js +84 -28
  311. package/dist/org/context.js.map +1 -1
  312. package/dist/org/index.d.ts +1 -0
  313. package/dist/org/index.d.ts.map +1 -1
  314. package/dist/org/index.js +1 -0
  315. package/dist/org/index.js.map +1 -1
  316. package/dist/org/service-identity.d.ts +43 -0
  317. package/dist/org/service-identity.d.ts.map +1 -0
  318. package/dist/org/service-identity.js +34 -0
  319. package/dist/org/service-identity.js.map +1 -0
  320. package/dist/provider-api/actions/custom-provider-registration.d.ts +14 -14
  321. package/dist/provider-api/actions/provider-api.d.ts +13 -11
  322. package/dist/provider-api/actions/provider-api.d.ts.map +1 -1
  323. package/dist/provider-api/index.d.ts +4 -0
  324. package/dist/provider-api/index.d.ts.map +1 -1
  325. package/dist/provider-api/index.js +17 -1
  326. package/dist/provider-api/index.js.map +1 -1
  327. package/dist/resources/handlers.d.ts +1 -1
  328. package/dist/scripts/docs/search.d.ts.map +1 -1
  329. package/dist/scripts/docs/search.js +12 -1
  330. package/dist/scripts/docs/search.js.map +1 -1
  331. package/dist/server/agent-chat/context-tools.d.ts.map +1 -1
  332. package/dist/server/agent-chat/context-tools.js +3 -3
  333. package/dist/server/agent-chat/context-tools.js.map +1 -1
  334. package/dist/server/agent-chat/framework-prompts.d.ts +8 -3
  335. package/dist/server/agent-chat/framework-prompts.d.ts.map +1 -1
  336. package/dist/server/agent-chat/framework-prompts.js +33 -62
  337. package/dist/server/agent-chat/framework-prompts.js.map +1 -1
  338. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  339. package/dist/server/agent-chat-plugin.js +16 -10
  340. package/dist/server/agent-chat-plugin.js.map +1 -1
  341. package/dist/server/agents-bundle.d.ts +18 -0
  342. package/dist/server/agents-bundle.d.ts.map +1 -1
  343. package/dist/server/agents-bundle.js +70 -4
  344. package/dist/server/agents-bundle.js.map +1 -1
  345. package/dist/server/auth.d.ts.map +1 -1
  346. package/dist/server/auth.js +4 -3
  347. package/dist/server/auth.js.map +1 -1
  348. package/dist/server/builder-browser.d.ts.map +1 -1
  349. package/dist/server/builder-browser.js +43 -19
  350. package/dist/server/builder-browser.js.map +1 -1
  351. package/dist/server/core-routes-plugin.js +2 -2
  352. package/dist/server/core-routes-plugin.js.map +1 -1
  353. package/dist/server/credential-provider.d.ts +38 -2
  354. package/dist/server/credential-provider.d.ts.map +1 -1
  355. package/dist/server/credential-provider.js +142 -64
  356. package/dist/server/credential-provider.js.map +1 -1
  357. package/dist/server/index.d.ts +1 -1
  358. package/dist/server/index.d.ts.map +1 -1
  359. package/dist/server/index.js +1 -1
  360. package/dist/server/index.js.map +1 -1
  361. package/dist/server/prompts/framework-core-compact.d.ts +1 -1
  362. package/dist/server/prompts/framework-core-compact.d.ts.map +1 -1
  363. package/dist/server/prompts/framework-core-compact.js +7 -13
  364. package/dist/server/prompts/framework-core-compact.js.map +1 -1
  365. package/dist/server/prompts/framework-core.d.ts +1 -1
  366. package/dist/server/prompts/framework-core.d.ts.map +1 -1
  367. package/dist/server/prompts/framework-core.js +10 -21
  368. package/dist/server/prompts/framework-core.js.map +1 -1
  369. package/dist/server/prompts/index.d.ts +1 -1
  370. package/dist/server/prompts/index.d.ts.map +1 -1
  371. package/dist/server/prompts/index.js +1 -1
  372. package/dist/server/prompts/index.js.map +1 -1
  373. package/dist/server/prompts/shared-rules.d.ts +16 -10
  374. package/dist/server/prompts/shared-rules.d.ts.map +1 -1
  375. package/dist/server/prompts/shared-rules.js +19 -10
  376. package/dist/server/prompts/shared-rules.js.map +1 -1
  377. package/dist/server/ssr-handler.d.ts +1 -1
  378. package/dist/server/ssr-handler.d.ts.map +1 -1
  379. package/dist/server/ssr-handler.js +10 -3
  380. package/dist/server/ssr-handler.js.map +1 -1
  381. package/dist/server/transcribe-voice.d.ts +1 -1
  382. package/dist/settings/user-settings.d.ts.map +1 -1
  383. package/dist/settings/user-settings.js +13 -1
  384. package/dist/settings/user-settings.js.map +1 -1
  385. package/dist/shared/cache-control.d.ts +52 -0
  386. package/dist/shared/cache-control.d.ts.map +1 -1
  387. package/dist/shared/cache-control.js +107 -0
  388. package/dist/shared/cache-control.js.map +1 -1
  389. package/dist/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  390. package/dist/templates/chat/_gitignore +1 -0
  391. package/dist/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  392. package/dist/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  393. package/dist/templates/workspace-core/.agents/skills/performance/SKILL.md +19 -0
  394. package/dist/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  395. package/dist/templates/workspace-core/.agents/skills/visual-answer/SKILL.md +1 -0
  396. package/dist/vite/agents-bundle-plugin.d.ts.map +1 -1
  397. package/dist/vite/agents-bundle-plugin.js +8 -7
  398. package/dist/vite/agents-bundle-plugin.js.map +1 -1
  399. package/dist/vite/client.d.ts.map +1 -1
  400. package/dist/vite/client.js +2 -0
  401. package/dist/vite/client.js.map +1 -1
  402. package/docs/content/actions.mdx +2 -2
  403. package/docs/content/agent-surfaces.mdx +1 -1
  404. package/docs/content/authentication.mdx +2 -0
  405. package/docs/content/deployment.mdx +36 -0
  406. package/docs/content/getting-started.mdx +477 -115
  407. package/docs/content/http-api.mdx +266 -0
  408. package/docs/content/syncing-template-changes.mdx +159 -0
  409. package/package.json +4 -3
  410. package/src/a2a/activity.ts +38 -27
  411. package/src/agent/engine/builder-engine.ts +35 -4
  412. package/src/agent/run-manager.ts +20 -1
  413. package/src/agent/run-store.ts +4 -1
  414. package/src/agent/types.ts +28 -8
  415. package/src/chat-threads/store.ts +45 -0
  416. package/src/checkpoints/index.ts +2 -0
  417. package/src/checkpoints/route-match.ts +13 -0
  418. package/src/cli/create.ts +105 -17
  419. package/src/cli/index.ts +20 -0
  420. package/src/cli/template-baseline.ts +410 -0
  421. package/src/cli/template-sync.ts +1004 -0
  422. package/src/cli/templates-meta.ts +1 -0
  423. package/src/client/AssistantChat.tsx +38 -12
  424. package/src/client/NewWorkspaceAppFlow.tsx +75 -10
  425. package/src/client/chat/message-components.tsx +127 -66
  426. package/src/client/chat/tool-call-display.tsx +29 -5
  427. package/src/client/error-format.ts +18 -0
  428. package/src/client/org/OrgSwitcher.tsx +30 -8
  429. package/src/client/org/TeamPage.tsx +7 -6
  430. package/src/client/sse-event-processor.ts +3 -0
  431. package/src/data-widgets/index.ts +41 -0
  432. package/src/deploy/build.ts +11 -9
  433. package/src/integrations/webhook-handler.ts +63 -9
  434. package/src/org/auto-join-domain.ts +4 -3
  435. package/src/org/context.ts +108 -39
  436. package/src/org/index.ts +5 -0
  437. package/src/org/service-identity.ts +60 -0
  438. package/src/provider-api/index.ts +22 -1
  439. package/src/scripts/docs/search.ts +12 -1
  440. package/src/server/__snapshots__/agent-chat-plugin.surface.spec.ts.snap +25 -36
  441. package/src/server/agent-chat/context-tools.ts +9 -4
  442. package/src/server/agent-chat/framework-prompts.ts +38 -66
  443. package/src/server/agent-chat-plugin.ts +17 -10
  444. package/src/server/agents-bundle.ts +84 -5
  445. package/src/server/auth.ts +4 -3
  446. package/src/server/builder-browser.ts +47 -19
  447. package/src/server/core-routes-plugin.ts +2 -2
  448. package/src/server/credential-provider.ts +209 -68
  449. package/src/server/index.ts +3 -0
  450. package/src/server/prompts/framework-core-compact.ts +6 -13
  451. package/src/server/prompts/framework-core.ts +9 -21
  452. package/src/server/prompts/index.ts +0 -1
  453. package/src/server/prompts/shared-rules.ts +19 -11
  454. package/src/server/ssr-handler.ts +13 -2
  455. package/src/settings/user-settings.ts +13 -1
  456. package/src/shared/cache-control.ts +141 -0
  457. package/src/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  458. package/src/templates/chat/_gitignore +1 -0
  459. package/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  460. package/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  461. package/src/templates/workspace-core/.agents/skills/performance/SKILL.md +19 -0
  462. package/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  463. package/src/templates/workspace-core/.agents/skills/visual-answer/SKILL.md +1 -0
  464. package/src/vite/agents-bundle-plugin.ts +7 -6
  465. package/src/vite/client.ts +5 -0
@@ -823,19 +823,19 @@ body[data-clips-route="recording-pill"] #root {
823
823
  }
824
824
 
825
825
  .live-audio-bars-compact {
826
- width: 22px;
826
+ width: 24px;
827
827
  height: 22px;
828
828
  gap: 3px;
829
829
  }
830
830
 
831
831
  .live-audio-bar {
832
832
  display: block;
833
- width: 2px;
834
- min-height: 3px;
833
+ width: 2.5px;
834
+ min-height: 2.5px;
835
835
  border-radius: 999px;
836
836
  background: rgba(132, 204, 22, 0.98);
837
837
  box-shadow: 0 0 5px rgba(132, 204, 22, 0.35);
838
- transition: height 70ms ease-out;
838
+ transition: height 90ms ease-out;
839
839
  }
840
840
 
841
841
  @media (prefers-reduced-motion: reduce) {
@@ -945,19 +945,20 @@ body[data-clips-route="recording-pill"] #root {
945
945
  align-items: center;
946
946
  gap: 8px;
947
947
  width: 100%;
948
- min-height: 42px;
948
+ min-height: 36px;
949
949
  border: none;
950
950
  background: transparent;
951
951
  border-radius: var(--radius-sm);
952
- color: var(--fg);
952
+ color: var(--fg-muted);
953
953
  cursor: pointer;
954
- padding: 10px 12px;
954
+ padding: 7px 12px;
955
955
  text-align: left;
956
- transition: background 120ms;
956
+ transition: color 120ms;
957
957
  }
958
958
 
959
- .readiness-summary:hover {
960
- color: var(--fg-muted);
959
+ .readiness-summary:hover,
960
+ .readiness-summary:focus-visible {
961
+ color: var(--fg);
961
962
  }
962
963
 
963
964
  .readiness-summary:focus-visible {
@@ -966,28 +967,28 @@ body[data-clips-route="recording-pill"] #root {
966
967
  }
967
968
 
968
969
  .readiness-open .readiness-summary {
969
- min-height: 42px;
970
+ min-height: 36px;
970
971
  border-radius: var(--radius-sm);
971
- padding: 10px 12px;
972
+ padding: 7px 12px;
972
973
  background: transparent;
973
974
  }
974
975
 
975
976
  .readiness-title {
976
- color: var(--fg);
977
+ color: inherit;
977
978
  font-size: 13px;
978
979
  font-weight: 500;
979
980
  line-height: 1;
980
981
  }
981
982
 
982
983
  .readiness-open .readiness-title {
983
- color: var(--fg);
984
+ color: inherit;
984
985
  }
985
986
 
986
987
  .readiness-action {
987
988
  display: flex;
988
989
  align-items: center;
989
990
  gap: 3px;
990
- color: var(--brand);
991
+ color: inherit;
991
992
  font-size: 11px;
992
993
  font-weight: 600;
993
994
  line-height: 1;
@@ -1000,7 +1001,7 @@ body[data-clips-route="recording-pill"] #root {
1000
1001
  }
1001
1002
 
1002
1003
  .readiness-open .readiness-action {
1003
- color: var(--fg-muted);
1004
+ color: inherit;
1004
1005
  }
1005
1006
 
1006
1007
  .readiness-list {
@@ -1385,19 +1386,20 @@ body[data-clips-route="recording-pill"] #root {
1385
1386
  align-items: center;
1386
1387
  gap: 8px;
1387
1388
  width: 100%;
1388
- min-height: 42px;
1389
- padding: 10px 12px;
1389
+ min-height: 36px;
1390
+ padding: 7px 12px;
1390
1391
  border: none;
1391
1392
  border-radius: var(--radius-sm);
1392
1393
  background: transparent;
1393
- color: var(--fg);
1394
+ color: var(--fg-muted);
1394
1395
  cursor: pointer;
1395
1396
  text-align: left;
1396
1397
  transition: color 120ms;
1397
1398
  }
1398
1399
 
1399
- .rewind-home-summary:hover {
1400
- color: var(--fg-muted);
1400
+ .rewind-home-summary:hover,
1401
+ .rewind-home-summary:focus-visible {
1402
+ color: var(--fg);
1401
1403
  }
1402
1404
 
1403
1405
  .rewind-home-summary:focus-visible {
@@ -1415,7 +1417,7 @@ body[data-clips-route="recording-pill"] #root {
1415
1417
  display: inline-flex;
1416
1418
  align-items: center;
1417
1419
  gap: 4px;
1418
- color: var(--fg-muted);
1420
+ color: inherit;
1419
1421
  font-size: 11px;
1420
1422
  font-weight: 600;
1421
1423
  line-height: 1;
@@ -3033,7 +3035,8 @@ body[data-clips-route="recording-pill"] #root {
3033
3035
  }
3034
3036
 
3035
3037
  .local-recording-banner,
3036
- .local-save-banner {
3038
+ .local-save-banner,
3039
+ .share-link-banner {
3037
3040
  display: flex;
3038
3041
  align-items: center;
3039
3042
  gap: 9px;
@@ -3052,7 +3055,8 @@ body[data-clips-route="recording-pill"] #root {
3052
3055
  color: var(--fg-muted);
3053
3056
  }
3054
3057
 
3055
- .local-save-banner {
3058
+ .local-save-banner,
3059
+ .share-link-banner {
3056
3060
  display: grid;
3057
3061
  grid-template-columns: minmax(0, 1fr) auto auto;
3058
3062
  }
@@ -3075,7 +3079,8 @@ body[data-clips-route="recording-pill"] #root {
3075
3079
  white-space: nowrap;
3076
3080
  }
3077
3081
 
3078
- .local-save-banner button {
3082
+ .local-save-banner button,
3083
+ .share-link-banner button {
3079
3084
  height: 28px;
3080
3085
  border: 1px solid var(--border-strong);
3081
3086
  border-radius: var(--radius-sm);
@@ -3090,17 +3095,20 @@ body[data-clips-route="recording-pill"] #root {
3090
3095
  border-color 120ms;
3091
3096
  }
3092
3097
 
3093
- .local-save-banner button:hover {
3098
+ .local-save-banner button:hover,
3099
+ .share-link-banner button:hover {
3094
3100
  background: var(--brand-hover);
3095
3101
  border-color: transparent;
3096
3102
  }
3097
3103
 
3098
- .local-save-banner .local-save-dismiss {
3104
+ .local-save-banner .local-save-dismiss,
3105
+ .share-link-banner .local-save-dismiss {
3099
3106
  background: transparent;
3100
3107
  color: var(--fg-muted);
3101
3108
  }
3102
3109
 
3103
- .local-save-banner .local-save-dismiss:hover {
3110
+ .local-save-banner .local-save-dismiss:hover,
3111
+ .share-link-banner .local-save-dismiss:hover {
3104
3112
  background: var(--surface-hover);
3105
3113
  border-color: var(--border-strong);
3106
3114
  color: var(--fg);
@@ -5440,12 +5448,16 @@ body[data-clips-route="recording-pill"] #root {
5440
5448
  /* Overlay: recording pill */
5441
5449
  /* ------------------------------------------------------------------------- */
5442
5450
 
5451
+ /* Fills the window minus the shadow gutter `#root` already pads out. The
5452
+ collapsed capsule centers here rather than hugging a corner: hover is polled
5453
+ against the window frame, so slack between frame and capsule would light the
5454
+ pill up while the cursor is nowhere near it. */
5443
5455
  .pill-outer {
5444
5456
  display: flex;
5445
5457
  height: 100%;
5446
5458
  width: 100%;
5447
5459
  align-items: center;
5448
- justify-content: flex-end;
5460
+ justify-content: center;
5449
5461
  }
5450
5462
 
5451
5463
  .pill-inner {
@@ -5482,13 +5494,24 @@ body[data-clips-route="recording-pill"] #root {
5482
5494
  }
5483
5495
  }
5484
5496
 
5485
- /* Collapsed (not expanded). Shrinks to logo + waveform; controls revealed via
5486
- CSS :hover which works at the WebKit level even when the app is unfocused. */
5497
+ /* Collapsed (not expanded). Shrinks to logo + waveform; the whole capsule is
5498
+ the click-to-expand target and the whole capsule is what highlights. */
5487
5499
  .pill-inner-compact {
5488
5500
  width: fit-content;
5489
5501
  height: fit-content;
5490
- align-self: flex-start;
5491
5502
  border-radius: 18px;
5503
+ cursor: pointer;
5504
+ transition:
5505
+ background 120ms ease,
5506
+ box-shadow 120ms ease;
5507
+ }
5508
+
5509
+ /* CSS :hover covers the focused case; .pill-hovered is the Rust-polled
5510
+ fallback for when another app is focused (see clips:pill-hover). */
5511
+ .pill-inner-compact:hover,
5512
+ .pill-inner-compact.pill-hovered {
5513
+ background: rgba(42, 42, 42, 0.97);
5514
+ box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.2);
5492
5515
  }
5493
5516
 
5494
5517
  .pill-controls {
@@ -5505,11 +5528,10 @@ body[data-clips-route="recording-pill"] #root {
5505
5528
  opacity 120ms ease;
5506
5529
  }
5507
5530
 
5508
- /* Reveal on hover. CSS :hover covers the focused case; .pill-hovered is the
5509
- Rust-polled fallback for when another app is focused (see clips:pill-hover). */
5510
- .pill-inner:hover .pill-controls,
5511
- .pill-inner.pill-hovered .pill-controls,
5512
- /* Always visible when expanded. */
5531
+ /* Revealed on hover in the compact/detached bar, always visible when expanded.
5532
+ The vertical capsule hides them outright it expands on click instead. */
5533
+ .pill-inner-compact:hover .pill-controls,
5534
+ .pill-inner-compact.pill-hovered .pill-controls,
5513
5535
  .pill-inner:not(.pill-inner-compact) .pill-controls {
5514
5536
  max-width: 160px;
5515
5537
  opacity: 1;
@@ -5549,15 +5571,15 @@ body[data-clips-route="recording-pill"] #root {
5549
5571
  /* Collapsed = vertical capsule: logo on top, waveform below. */
5550
5572
  .pill-inner-compact .pill-header.pill-vertical {
5551
5573
  flex-direction: column;
5552
- gap: 0;
5574
+ gap: 6px;
5553
5575
  height: auto;
5554
5576
  width: auto;
5555
- padding: 11px 7px 7px;
5577
+ padding: 12px 10px 10px;
5556
5578
  cursor: pointer;
5557
5579
  }
5558
5580
 
5559
5581
  .pill-vertical .pill-logo {
5560
- height: 11px;
5582
+ height: 12px;
5561
5583
  }
5562
5584
 
5563
5585
  /* Controls (timer / pause / stop / chevron) live in the expanded view — the
@@ -5568,7 +5590,7 @@ body[data-clips-route="recording-pill"] #root {
5568
5590
 
5569
5591
  .pill-vertical .pill-wave-meter {
5570
5592
  height: 22px;
5571
- width: 22px;
5593
+ width: 24px;
5572
5594
  }
5573
5595
 
5574
5596
  /* Wrapper around logo + waveform. */
@@ -5580,19 +5602,7 @@ body[data-clips-route="recording-pill"] #root {
5580
5602
  display: flex;
5581
5603
  flex-direction: column;
5582
5604
  align-items: center;
5583
- align-self: stretch;
5584
5605
  gap: 5px;
5585
- /* The compact media area is the click-to-expand target. */
5586
- padding: 11px 7px 4px;
5587
- margin: -11px -7px 0;
5588
- border-radius: 18px 18px 0 0;
5589
- cursor: pointer;
5590
- transition: background 120ms ease;
5591
- }
5592
-
5593
- .pill-vertical .pill-media:hover,
5594
- .pill-hovered .pill-vertical .pill-media {
5595
- background: rgba(255, 255, 255, 0.08);
5596
5606
  }
5597
5607
 
5598
5608
  .pill-timer {
@@ -5601,11 +5611,12 @@ body[data-clips-route="recording-pill"] #root {
5601
5611
  font-variant-numeric: tabular-nums;
5602
5612
  }
5603
5613
 
5614
+ /* Layout only. `display` must stay flex here — a `block` override collapses
5615
+ the meter's bars into a single stacked column instead of a waveform. */
5604
5616
  .pill-wave-meter {
5605
5617
  height: 26px;
5606
5618
  width: 48px;
5607
5619
  flex-shrink: 0;
5608
- display: block;
5609
5620
  }
5610
5621
 
5611
5622
  .pill-stop-btn {
@@ -5849,6 +5860,7 @@ body[data-clips-route="recording-pill"] #root {
5849
5860
  min-height: 0;
5850
5861
  flex: 1;
5851
5862
  display: flex;
5863
+ flex-direction: column;
5852
5864
  overflow: hidden;
5853
5865
  }
5854
5866
 
@@ -5894,41 +5906,78 @@ body[data-clips-route="recording-pill"] #root {
5894
5906
  cursor: default;
5895
5907
  }
5896
5908
 
5897
- .pill-saved-bar {
5909
+ .pill-ask-bar {
5898
5910
  flex-shrink: 0;
5899
5911
  display: flex;
5900
- justify-content: space-between;
5901
5912
  align-items: center;
5902
- gap: 8px;
5903
- min-height: 18px;
5904
- padding: 2px 12px 8px;
5905
- font-size: 10px;
5906
- font-variant-numeric: tabular-nums;
5907
- color: rgba(245, 245, 245, 0.4);
5913
+ gap: 4px;
5914
+ padding: 6px 10px 10px;
5908
5915
  }
5909
5916
 
5910
- .pill-saved-status {
5911
- margin-left: auto;
5917
+ .pill-ask-input {
5918
+ flex: 1;
5919
+ min-width: 0;
5920
+ height: 32px;
5921
+ padding: 0 12px;
5922
+ border: 1px solid rgba(255, 255, 255, 0.1);
5923
+ border-radius: 999px;
5924
+ background: rgba(255, 255, 255, 0.05);
5925
+ color: #f5f5f5;
5926
+ font: inherit;
5927
+ font-size: 12px;
5928
+ outline: none;
5929
+ transition:
5930
+ background 120ms,
5931
+ border-color 120ms;
5912
5932
  }
5913
5933
 
5914
- .pill-open-web-btn {
5934
+ .pill-ask-input::placeholder {
5935
+ color: rgba(245, 245, 245, 0.35);
5936
+ }
5937
+
5938
+ .pill-ask-input:focus {
5939
+ background: rgba(255, 255, 255, 0.08);
5940
+ border-color: rgba(255, 255, 255, 0.22);
5941
+ }
5942
+
5943
+ .pill-ask-input:disabled {
5944
+ opacity: 0.5;
5945
+ }
5946
+
5947
+ .pill-ask-send,
5948
+ .pill-ask-open {
5915
5949
  display: inline-flex;
5950
+ height: 28px;
5951
+ width: 28px;
5952
+ flex-shrink: 0;
5916
5953
  align-items: center;
5917
- gap: 4px;
5918
- padding: 2px 6px;
5954
+ justify-content: center;
5919
5955
  border: none;
5920
- border-radius: 6px;
5956
+ border-radius: 50%;
5921
5957
  background: transparent;
5922
5958
  color: rgba(245, 245, 245, 0.6);
5923
- font-size: 10px;
5924
- font-weight: 500;
5925
5959
  cursor: pointer;
5926
5960
  transition:
5927
5961
  background 120ms,
5928
- color 120ms;
5962
+ color 120ms,
5963
+ opacity 120ms;
5964
+ }
5965
+
5966
+ .pill-ask-send:not(:disabled) {
5967
+ background: rgba(255, 255, 255, 0.12);
5968
+ color: #f5f5f5;
5929
5969
  }
5930
5970
 
5931
- .pill-open-web-btn:hover {
5971
+ .pill-ask-send:hover:not(:disabled) {
5972
+ background: rgba(255, 255, 255, 0.22);
5973
+ }
5974
+
5975
+ .pill-ask-send:disabled {
5976
+ opacity: 0.35;
5977
+ cursor: default;
5978
+ }
5979
+
5980
+ .pill-ask-open:hover {
5932
5981
  background: rgba(255, 255, 255, 0.1);
5933
5982
  color: #f5f5f5;
5934
5983
  }
@@ -5987,11 +6036,11 @@ body[data-clips-route="recording-pill"] #root {
5987
6036
  }
5988
6037
 
5989
6038
  .lt-row-you .lt-label {
5990
- color: rgba(252, 211, 77, 0.8);
6039
+ color: rgba(245, 245, 245, 0.5);
5991
6040
  }
5992
6041
 
5993
6042
  .lt-row-them .lt-label {
5994
- color: rgba(125, 211, 252, 0.8);
6043
+ color: rgba(245, 245, 245, 0.38);
5995
6044
  }
5996
6045
 
5997
6046
  .lt-bubble {
@@ -6002,14 +6051,14 @@ body[data-clips-route="recording-pill"] #root {
6002
6051
  }
6003
6052
 
6004
6053
  .lt-row-you .lt-bubble {
6005
- background: rgba(245, 158, 11, 0.2);
6006
- color: #fffbeb;
6054
+ background: rgba(255, 255, 255, 0.13);
6055
+ color: #fafafa;
6007
6056
  border-bottom-right-radius: 4px;
6008
6057
  }
6009
6058
 
6010
6059
  .lt-row-them .lt-bubble {
6011
- background: rgba(14, 165, 233, 0.2);
6012
- color: #f0f9ff;
6060
+ background: rgba(255, 255, 255, 0.06);
6061
+ color: #e5e5e5;
6013
6062
  border-bottom-left-radius: 4px;
6014
6063
  }
6015
6064
 
@@ -48,6 +48,13 @@ tauri-plugin-fs = "2.5.1"
48
48
  # tauri-plugin-notification`). Powers the Granola-style "Meeting starting
49
49
  # in N min — Join + Record" banners.
50
50
  tauri-plugin-notification = "2"
51
+ # System clipboard writes from Rust (arboard). The share link is copied when a
52
+ # recording finishes, at which point the popover webview is usually unfocused —
53
+ # `navigator.clipboard.writeText` rejects with `NotAllowedError: Document is not
54
+ # focused` in exactly that case, so the write has to happen native-side. v2.3.2
55
+ # is the current latest (verified via `cargo info
56
+ # tauri-plugin-clipboard-manager`).
57
+ tauri-plugin-clipboard-manager = "2.3.2"
51
58
  serde = { version = "1", features = ["derive"] }
52
59
  serde_json = "1"
53
60
  sentry = "0.48.3"
@@ -14,5 +14,11 @@
14
14
  <string>Clips uses Accessibility to learn your preferred spellings from edits you make right after dictating, so future dictations get them right.</string>
15
15
  <key>CFBundleIconName</key>
16
16
  <string>agent-native</string>
17
+ <!-- Menu-bar-only. Without this the bundle launches as a regular app, so
18
+ macOS creates a Dock tile and only removes it once the deferred
19
+ Accessory activation policy lands after setup() — a Dock icon that
20
+ appears and vanishes on a timing that varies with launch speed. -->
21
+ <key>LSUIElement</key>
22
+ <true/>
17
23
  </dict>
18
24
  </plist>
@@ -37,6 +37,7 @@
37
37
  "autostart:default",
38
38
  "process:allow-restart",
39
39
  "notification:default",
40
+ "clipboard-manager:allow-write-text",
40
41
  "fs:allow-video-write-recursive",
41
42
  "fs:allow-video-read-recursive"
42
43
  ]
@@ -21,7 +21,7 @@ use crate::state::{
21
21
  };
22
22
  use crate::util::{
23
23
  build_overlay_url, configure_overlay_behavior, hide_voice_wake_popover, is_recording_active,
24
- mark_popover_shown, present_interactive_window, set_capture_excluded,
24
+ mark_popover_shown, present_interactive_window, raise_to_status_level, set_capture_excluded,
25
25
  set_capture_excluded_always, set_capture_included, tray_monitor_physical_rect,
26
26
  };
27
27
 
@@ -887,8 +887,10 @@ pub async fn show_toolbar(app: AppHandle) -> Result<(), String> {
887
887
  if let Some(existing) = app.get_webview_window(TOOLBAR_LABEL) {
888
888
  let _ = existing.set_size(tauri::Size::Physical(PhysicalSize::new(w, h)));
889
889
  let _ = existing.set_position(PhysicalPosition::new(x, y));
890
- let _ = existing.show();
891
- let _ = existing.set_focus();
890
+ set_capture_excluded(&existing);
891
+ configure_overlay_behavior(&existing);
892
+ raise_to_status_level(&existing);
893
+ crate::util::show_without_activation(&existing);
892
894
  return Ok(());
893
895
  }
894
896
  #[allow(unused_mut)]
@@ -924,6 +926,7 @@ pub async fn show_toolbar(app: AppHandle) -> Result<(), String> {
924
926
  let _ = win.set_position(PhysicalPosition::new(x, y));
925
927
  set_capture_excluded(&win);
926
928
  configure_overlay_behavior(&win);
929
+ raise_to_status_level(&win);
927
930
  let _ = win.show();
928
931
  dlog!("[clips-tray] toolbar shown");
929
932
 
@@ -1524,6 +1527,7 @@ pub async fn show_flow_bar(app: AppHandle) -> Result<(), String> {
1524
1527
  let _ = existing.set_size(tauri::Size::Physical(PhysicalSize::new(w, h)));
1525
1528
  let _ = existing.set_position(PhysicalPosition::new(x, y));
1526
1529
  let _ = existing.set_ignore_cursor_events(false);
1530
+ configure_overlay_behavior(&existing);
1527
1531
  crate::util::show_without_activation(&existing);
1528
1532
  return Ok(());
1529
1533
  }
@@ -256,6 +256,7 @@ pub fn run() {
256
256
  )
257
257
  .plugin(tauri_plugin_updater::Builder::new().build())
258
258
  .plugin(tauri_plugin_notification::init())
259
+ .plugin(tauri_plugin_clipboard_manager::init())
259
260
  .plugin(shortcuts::build_shortcut_plugin().build())
260
261
  .manage(TrayAnchor::default())
261
262
  .manage(TrayMeetings::default())
@@ -284,7 +285,9 @@ pub fn run() {
284
285
  logfile::init(app.handle());
285
286
 
286
287
  // Keeps the app from yanking the user out of fullscreen when the
287
- // popover appears. Production bundles reinforce this with LSUIElement=1.
288
+ // popover appears. Bundles set LSUIElement=1 so macOS never creates
289
+ // a Dock tile in the first place; this call still matters for
290
+ // `tauri dev`, which runs the bare executable with no bundle plist.
288
291
  #[cfg(target_os = "macos")]
289
292
  {
290
293
  app.set_activation_policy(tauri::ActivationPolicy::Accessory);
@@ -2,5 +2,13 @@
2
2
  #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
3
3
 
4
4
  fn main() {
5
+ // ggml-metal registers a __cxa_atexit destructor that asserts every Metal
6
+ // residency-set resource was freed first. The Whisper context lives in a
7
+ // process-wide static that std::process::exit never drops, so that assert
8
+ // aborts during exit() and macOS reports a false crash on every quit.
9
+ // Opting out of residency sets keeps the destructor a no-op.
10
+ #[cfg(target_os = "macos")]
11
+ std::env::set_var("GGML_METAL_NO_RESIDENCY", "1");
12
+
5
13
  clips_tray_lib::run();
6
14
  }
@@ -66,12 +66,15 @@ static PILL_HOVER_TRACKING: AtomicBool = AtomicBool::new(false);
66
66
  /// Collapsed dimensions (logical px). The collapsed pill is a vertical capsule
67
67
  /// — clips logo on top, waveform below — so it is taller than it is wide. The
68
68
  /// expanded form stretches horizontally to fit the live-transcript area.
69
- const PILL_W_LOGICAL: u32 = 38;
69
+ const PILL_W_LOGICAL: u32 = 44;
70
70
  const PILL_W_EXPANDED_LOGICAL: u32 = 480;
71
71
  /// Meeting mode uses the same focused transcript width as other recordings;
72
72
  /// live notes are intentionally kept out of this compact overlay.
73
73
  const PILL_W_EXPANDED_MEETING_LOGICAL: u32 = 480;
74
- const PILL_H_LOGICAL: u32 = 92;
74
+ /// Keep this close to the rendered capsule's height. The window frame is what
75
+ /// hover is polled against, so slack here makes the pill light up while the
76
+ /// cursor is still nowhere near it.
77
+ const PILL_H_LOGICAL: u32 = 64;
75
78
  const PILL_H_EXPANDED_LOGICAL: u32 = 340;
76
79
  /// Bottom margin from the screen edge, logical px. Granola uses ~24.
77
80
  const PILL_BOTTOM_MARGIN_LOGICAL: u32 = 24;
@@ -232,14 +235,18 @@ fn default_bottom_center(app: &AppHandle, w: u32, h: u32) -> (i32, i32) {
232
235
  (x, y)
233
236
  }
234
237
 
235
- fn default_center_right(app: &AppHandle, w: u32, _h: u32) -> (i32, i32) {
238
+ fn default_center_right(app: &AppHandle, w: u32, h: u32) -> (i32, i32) {
236
239
  let scale = scale_factor(app);
237
240
  let right_margin = (PILL_RIGHT_MARGIN_LOGICAL as f64 * scale) as i32;
238
241
  let (mx, my, mw, mh) = tray_monitor_physical_rect(app);
239
242
  let x = (mx + mw as i32 - w as i32 - right_margin).max(mx);
240
- // Anchor Y to expanded height so header stays fixed on expand.
243
+ // Center whatever is actually on screen meetings now open collapsed, so
244
+ // reserving the expanded height here would strand the capsule high up.
245
+ // Expanding pins this top edge and grows downward (see `anchored_rect`),
246
+ // clamped below so a tall panel still fits.
241
247
  let (_, h_exp) = pill_size_physical(app, true);
242
- let y = (my + (mh as i32 - h_exp as i32) / 2).max(my);
248
+ let max_y_exp = (my + mh as i32 - h_exp as i32).max(my);
249
+ let y = (my + (mh as i32 - h as i32) / 2).clamp(my, max_y_exp);
243
250
  (x, y)
244
251
  }
245
252
 
@@ -458,7 +465,9 @@ pub async fn recording_pill_show(
458
465
 
459
466
  /// True when the global cursor sits inside the pill window's frame. Cursor and
460
467
  /// frame both come from Tauri (physical px, desktop top-left origin), so the
461
- /// test is a plain point-in-rect with no AppKit hop.
468
+ /// test is a plain point-in-rect with no AppKit hop. The frame is inset by the
469
+ /// transparent shadow gutter the renderer pads out, so the polled hover state
470
+ /// matches the capsule the user actually sees.
462
471
  fn cursor_inside_pill_frame(window: &WebviewWindow) -> bool {
463
472
  let (Ok(c), Ok(p), Ok(s)) = (
464
473
  window.cursor_position(),
@@ -467,10 +476,12 @@ fn cursor_inside_pill_frame(window: &WebviewWindow) -> bool {
467
476
  ) else {
468
477
  return false;
469
478
  };
470
- c.x >= p.x as f64
471
- && c.x <= (p.x + s.width as i32) as f64
472
- && c.y >= p.y as f64
473
- && c.y <= (p.y + s.height as i32) as f64
479
+ let gutter = overlay_shadow_gutter_physical(window.app_handle()) as i32;
480
+ let left = p.x + gutter;
481
+ let top = p.y + gutter;
482
+ let right = p.x + s.width as i32 - gutter;
483
+ let bottom = p.y + s.height as i32 - gutter;
484
+ c.x >= left as f64 && c.x <= right as f64 && c.y >= top as f64 && c.y <= bottom as f64
474
485
  }
475
486
 
476
487
  /// Start polling the cursor against the pill frame and emitting
@@ -162,6 +162,46 @@ pub fn configure_overlay_behavior(_window: &WebviewWindow) {
162
162
  // No-op on non-macOS platforms. Spaces are a macOS concept.
163
163
  }
164
164
 
165
+ /// Raise a window to NSStatusWindowLevel (25).
166
+ ///
167
+ /// Tauri's `always_on_top` maps to NSFloatingWindowLevel (3). Within a level
168
+ /// macOS still orders the *active* app's windows ahead of a background app's,
169
+ /// and the recording overlays are deliberately never key — so another app's
170
+ /// floating chrome (call controls, launchers) covers them. Level 25 clears
171
+ /// that whole class while staying below NSPopUpMenuWindowLevel (101) so
172
+ /// context menus still draw on top.
173
+ #[cfg(target_os = "macos")]
174
+ pub fn raise_to_status_level(window: &WebviewWindow) {
175
+ let win = window.clone();
176
+ if let Err(err) = win.clone().run_on_main_thread(move || {
177
+ let label = win.label().to_string();
178
+ let ns_window_ptr = match win.ns_window() {
179
+ Ok(p) => p,
180
+ Err(err) => {
181
+ eprintln!("[clips-tray] raise_to_status_level({label}): ns_window() failed: {err}");
182
+ return;
183
+ }
184
+ };
185
+ if ns_window_ptr.is_null() {
186
+ eprintln!("[clips-tray] raise_to_status_level({label}): ns_window is null");
187
+ return;
188
+ }
189
+ // SAFETY: ns_window() returns a live NSWindow*; called on main thread.
190
+ unsafe {
191
+ let obj = ns_window_ptr as *mut objc2::runtime::AnyObject;
192
+ let _: () = objc2::msg_send![&*obj, setLevel: 25isize];
193
+ }
194
+ dlog!("[clips-tray] raise_to_status_level({label}): NSStatusWindowLevel");
195
+ }) {
196
+ eprintln!("[clips-tray] raise_to_status_level: run_on_main_thread failed: {err}");
197
+ }
198
+ }
199
+
200
+ #[cfg(not(target_os = "macos"))]
201
+ pub fn raise_to_status_level(_window: &WebviewWindow) {
202
+ // No-op on non-macOS platforms. Window levels are an AppKit concept.
203
+ }
204
+
165
205
  #[cfg(not(target_os = "macos"))]
166
206
  pub fn set_capture_excluded(_window: &WebviewWindow) {
167
207
  // No-op on non-macOS platforms. Screen-capture exclusion isn't a public