@agent-native/core 0.79.16 → 0.79.18

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 (344) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +14 -0
  3. package/corpus/core/docs/content/file-uploads.md +11 -4
  4. package/corpus/core/docs/content/locales/ar-SA/multi-app-workspace.md +3 -3
  5. package/corpus/core/docs/content/locales/de-DE/multi-app-workspace.md +3 -3
  6. package/corpus/core/docs/content/locales/es-ES/multi-app-workspace.md +3 -3
  7. package/corpus/core/docs/content/locales/fr-FR/multi-app-workspace.md +3 -3
  8. package/corpus/core/docs/content/locales/hi-IN/multi-app-workspace.md +3 -3
  9. package/corpus/core/docs/content/locales/ja-JP/multi-app-workspace.md +3 -3
  10. package/corpus/core/docs/content/locales/ko-KR/multi-app-workspace.md +3 -3
  11. package/corpus/core/docs/content/locales/pt-BR/multi-app-workspace.md +3 -3
  12. package/corpus/core/docs/content/locales/zh-CN/multi-app-workspace.md +3 -3
  13. package/corpus/core/docs/content/locales/zh-TW/multi-app-workspace.md +3 -3
  14. package/corpus/core/docs/content/multi-app-workspace.md +3 -3
  15. package/corpus/core/docs/content/template-clips.md +14 -5
  16. package/corpus/core/package.json +1 -1
  17. package/corpus/core/src/agent/engine/builder-engine.ts +8 -3
  18. package/corpus/core/src/cli/mcp.ts +11 -6
  19. package/corpus/core/src/client/AssistantChat.tsx +6 -2
  20. package/corpus/core/src/client/chat/markdown-renderer.tsx +1 -0
  21. package/corpus/core/src/client/index.ts +7 -1
  22. package/corpus/core/src/client/org/OrgSwitcher.tsx +5 -5
  23. package/corpus/core/src/client/org/TeamPage.tsx +11 -3
  24. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +216 -0
  25. package/corpus/core/src/client/settings/index.ts +5 -0
  26. package/corpus/core/src/file-upload/index.ts +1 -0
  27. package/corpus/core/src/file-upload/registry.ts +22 -6
  28. package/corpus/core/src/file-upload/types.ts +6 -1
  29. package/corpus/core/src/integrations/adapters/email.ts +26 -18
  30. package/corpus/core/src/integrations/adapters/slack.ts +8 -7
  31. package/corpus/core/src/integrations/adapters/telegram.ts +9 -11
  32. package/corpus/core/src/integrations/adapters/whatsapp.ts +12 -9
  33. package/corpus/core/src/integrations/plugin.ts +79 -13
  34. package/corpus/core/src/onboarding/default-steps.ts +6 -3
  35. package/corpus/core/src/onboarding/types.ts +1 -1
  36. package/corpus/core/src/org/handlers.ts +1 -1
  37. package/corpus/core/src/server/agent-chat-plugin.ts +4 -7
  38. package/corpus/core/src/server/better-auth-instance.ts +19 -62
  39. package/corpus/core/src/server/core-routes-plugin.ts +93 -180
  40. package/corpus/core/src/server/create-server.ts +55 -116
  41. package/corpus/core/src/server/email-actions.ts +3 -6
  42. package/corpus/core/src/server/email.ts +52 -17
  43. package/corpus/core/src/server/index.ts +2 -1
  44. package/corpus/core/src/server/scoped-key-storage.ts +223 -0
  45. package/corpus/core/src/shared/agent-env.ts +3 -3
  46. package/corpus/core/src/sharing/actions/share-resource.ts +1 -1
  47. package/corpus/core/src/styles/agent-native.css +55 -3
  48. package/corpus/core/src/templates/workspace-root/AGENTS.md +3 -2
  49. package/corpus/core/src/templates/workspace-root/README.md +1 -1
  50. package/corpus/core/src/templates/workspace-root/scripts/repair-workspace-org.ts +29 -90
  51. package/corpus/core/src/terminal/pty-server.ts +3 -38
  52. package/corpus/core/src/triggers/dispatcher.ts +1 -2
  53. package/corpus/templates/.retired/issues/package.json +7 -0
  54. package/corpus/templates/.retired/meeting-notes/package.json +7 -0
  55. package/corpus/templates/.retired/recruiting/package.json +7 -0
  56. package/corpus/templates/.retired/scheduling/package.json +7 -0
  57. package/corpus/templates/.retired/voice/package.json +7 -0
  58. package/corpus/templates/analytics/app/components/layout/Header.tsx +0 -1
  59. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +0 -17
  60. package/corpus/templates/analytics/app/i18n/zh-TW.ts +7 -1
  61. package/corpus/templates/analytics/app/i18n-data.ts +71 -2
  62. package/corpus/templates/analytics/app/pages/Settings.tsx +120 -73
  63. package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +0 -11
  64. package/corpus/templates/analytics/app/routes/catalog.tsx +33 -176
  65. package/corpus/templates/analytics/app/routes/team.tsx +3 -2
  66. package/corpus/templates/analytics/changelog/2026-06-26-dashboard-templates-are-tucked-into-settings-and-show-simple.md +6 -0
  67. package/corpus/templates/analytics/changelog/2026-06-26-the-sessions-page-shows-a-single-page-title-instead-of-repea.md +6 -0
  68. package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +37 -28
  69. package/corpus/templates/assets/app/routes/settings.tsx +65 -43
  70. package/corpus/templates/assets/app/routes/team.tsx +2 -10
  71. package/corpus/templates/brain/app/routes/settings.tsx +390 -358
  72. package/corpus/templates/brain/app/routes/team.tsx +2 -8
  73. package/corpus/templates/calendar/actions/db-connect.ts +5 -29
  74. package/corpus/templates/calendar/app/components/CloudUpgrade.tsx +8 -51
  75. package/corpus/templates/calendar/app/components/calendar/GoogleConnectBanner.tsx +2 -1
  76. package/corpus/templates/calendar/app/components/calendar/GoogleSetupWizard.tsx +4 -2
  77. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +0 -2
  78. package/corpus/templates/calendar/app/pages/Settings.tsx +304 -271
  79. package/corpus/templates/calendar/app/routes/_app.team.tsx +2 -17
  80. package/corpus/templates/calendar/server/handlers/google-auth.ts +22 -9
  81. package/corpus/templates/calendar/server/lib/booking-emails.ts +1 -1
  82. package/corpus/templates/calendar/server/lib/event-guest-notifications.ts +1 -1
  83. package/corpus/templates/calendar/server/lib/google-calendar.ts +48 -28
  84. package/corpus/templates/chat/app/components/layout/Header.tsx +0 -1
  85. package/corpus/templates/chat/app/hooks/use-navigation-state.ts +4 -2
  86. package/corpus/templates/chat/app/routes/settings.tsx +54 -54
  87. package/corpus/templates/chat/app/routes/team.tsx +2 -10
  88. package/corpus/templates/clips/.agents/skills/ai-video-tools/SKILL.md +7 -2
  89. package/corpus/templates/clips/.agents/skills/recording/SKILL.md +1 -1
  90. package/corpus/templates/clips/.agents/skills/video-sharing/SKILL.md +7 -0
  91. package/corpus/templates/clips/AGENTS.md +8 -0
  92. package/corpus/templates/clips/actions/invite-member.ts +1 -1
  93. package/corpus/templates/clips/actions/request-transcript.ts +1 -1
  94. package/corpus/templates/clips/app/components/library/library-layout.tsx +3 -3
  95. package/corpus/templates/clips/app/components/player/transcript-panel.tsx +2 -0
  96. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +629 -643
  97. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +219 -155
  98. package/corpus/templates/clips/changelog/2026-06-26-long-desktop-recordings-are-checkpointed-so-macos-finalizati.md +6 -0
  99. package/corpus/templates/clips/changelog/2026-06-26-non-mac-desktop-recordings-wait-for-upload-transcription.md +6 -0
  100. package/corpus/templates/clips/changelog/2026-06-26-s3-compatible-storage-keys-now-save-securely-from-clips-sett.md +6 -0
  101. package/corpus/templates/clips/changelog/2026-06-26-shared-clip-links-guide-agents-through-processing-transcripts.md +6 -0
  102. package/corpus/templates/clips/changelog/2026-06-26-the-clip-details-sidebar-now-collapses-into-a-slide-out-pane.md +6 -0
  103. package/corpus/templates/clips/changelog/2026-06-26-the-clips-library-now-matches-the-shared-recessed-shell-styl.md +6 -0
  104. package/corpus/templates/clips/desktop/src/lib/recorder.ts +55 -3
  105. package/corpus/templates/clips/desktop/src/lib/transcription-capture.ts +217 -5
  106. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +1 -0
  107. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +176 -5
  108. package/corpus/templates/clips/server/lib/public-agent-context.ts +31 -0
  109. package/corpus/templates/clips/server/lib/s3-upload-provider.ts +60 -14
  110. package/corpus/templates/clips/server/lib/video-storage.ts +37 -9
  111. package/corpus/templates/clips/server/routes/api/agent-transcript.json.get.ts +5 -0
  112. package/corpus/templates/content/app/components/layout/Header.tsx +0 -1
  113. package/corpus/templates/content/app/components/sidebar/NotionButton.tsx +1 -0
  114. package/corpus/templates/content/app/routes/_app.settings.tsx +54 -55
  115. package/corpus/templates/content/app/routes/_app.team.tsx +2 -28
  116. package/corpus/templates/content/server/lib/notion.ts +43 -11
  117. package/corpus/templates/content/server/routes/api/notion/auth-url.get.ts +2 -2
  118. package/corpus/templates/content/server/routes/api/notion/status.get.ts +3 -3
  119. package/corpus/templates/design/app/routes/settings.tsx +60 -38
  120. package/corpus/templates/design/app/routes/team.tsx +2 -10
  121. package/corpus/templates/dispatch/app/hooks/use-navigation-state.ts +2 -2
  122. package/corpus/templates/dispatch/app/routes/settings.tsx +70 -55
  123. package/corpus/templates/dispatch/app/routes/team.tsx +5 -1
  124. package/corpus/templates/forms/actions/db-connect.ts +7 -36
  125. package/corpus/templates/forms/actions/navigate.ts +2 -2
  126. package/corpus/templates/forms/app/components/CloudUpgrade.tsx +8 -47
  127. package/corpus/templates/forms/app/components/layout/Header.tsx +0 -1
  128. package/corpus/templates/forms/app/components/layout/Layout.tsx +42 -25
  129. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +35 -76
  130. package/corpus/templates/forms/app/global.css +9 -25
  131. package/corpus/templates/forms/app/hooks/use-navigation-state.ts +4 -4
  132. package/corpus/templates/forms/app/i18n/ar-SA.ts +1 -0
  133. package/corpus/templates/forms/app/i18n/de-DE.ts +1 -0
  134. package/corpus/templates/forms/app/i18n/en-US.ts +1 -0
  135. package/corpus/templates/forms/app/i18n/es-ES.ts +1 -0
  136. package/corpus/templates/forms/app/i18n/fr-FR.ts +1 -0
  137. package/corpus/templates/forms/app/i18n/hi-IN.ts +1 -0
  138. package/corpus/templates/forms/app/i18n/ja-JP.ts +1 -0
  139. package/corpus/templates/forms/app/i18n/ko-KR.ts +1 -0
  140. package/corpus/templates/forms/app/i18n/pt-BR.ts +1 -0
  141. package/corpus/templates/forms/app/i18n/zh-CN.ts +1 -0
  142. package/corpus/templates/forms/app/i18n/zh-TW.ts +1 -0
  143. package/corpus/templates/forms/app/lib/route-prewarm.ts +9 -8
  144. package/corpus/templates/forms/app/pages/AskPage.tsx +70 -0
  145. package/corpus/templates/forms/app/pages/FormsListPage.tsx +74 -81
  146. package/corpus/templates/forms/app/root.tsx +1 -1
  147. package/corpus/templates/forms/app/routes/_app.ask.tsx +14 -0
  148. package/corpus/templates/forms/app/routes/_app.settings.tsx +54 -54
  149. package/corpus/templates/forms/app/routes/_app.team.tsx +2 -9
  150. package/corpus/templates/forms/app/routes/_index.tsx +21 -130
  151. package/corpus/templates/forms/changelog/2026-06-26-ask-forms-opens-as-a-standard-app-tab-with-a-simpler-sidebar.md +6 -0
  152. package/corpus/templates/forms/changelog/2026-06-26-forms-are-shown-in-a-tighter-row-list-with-a-denser-sidebar.md +6 -0
  153. package/corpus/templates/forms/shared/navigation.ts +4 -2
  154. package/corpus/templates/macros/app/routes/settings.tsx +54 -54
  155. package/corpus/templates/macros/app/routes/team.tsx +2 -10
  156. package/corpus/templates/mail/actions/helpers.ts +2 -2
  157. package/corpus/templates/mail/app/components/GoogleConnectBanner.tsx +2 -1
  158. package/corpus/templates/mail/app/pages/SettingsPage.tsx +5 -5
  159. package/corpus/templates/mail/app/routes/team.tsx +3 -2
  160. package/corpus/templates/mail/server/handlers/emails.ts +3 -2
  161. package/corpus/templates/mail/server/handlers/google-auth.ts +19 -12
  162. package/corpus/templates/mail/server/lib/automation-engine.ts +3 -2
  163. package/corpus/templates/mail/server/lib/email-state.ts +2 -3
  164. package/corpus/templates/mail/server/lib/google-auth.ts +28 -11
  165. package/corpus/templates/mail/server/lib/jobs.ts +3 -2
  166. package/corpus/templates/mail/server/onboarding.ts +9 -6
  167. package/corpus/templates/mail/server/routes/api/attachments.get.ts +3 -3
  168. package/corpus/templates/plan/actions/request-plan-access.ts +1 -1
  169. package/corpus/templates/plan/app/components/layout/Header.tsx +0 -1
  170. package/corpus/templates/plan/app/hooks/use-navigation-state.ts +4 -2
  171. package/corpus/templates/plan/app/lib/route-prewarm.ts +0 -4
  172. package/corpus/templates/plan/app/routes/settings.tsx +75 -73
  173. package/corpus/templates/plan/app/routes/team.tsx +2 -8
  174. package/corpus/templates/plan/server/lib/comment-notifications.ts +1 -1
  175. package/corpus/templates/slides/actions/check-image-gen.ts +2 -1
  176. package/corpus/templates/slides/actions/db-connect.ts +7 -45
  177. package/corpus/templates/slides/actions/edit-image.ts +6 -3
  178. package/corpus/templates/slides/actions/generate-image-api.ts +1 -1
  179. package/corpus/templates/slides/actions/generate-image.ts +2 -2
  180. package/corpus/templates/slides/actions/generate-slides-ai.ts +5 -3
  181. package/corpus/templates/slides/actions/image-gen-status.ts +4 -3
  182. package/corpus/templates/slides/actions/image-search.ts +6 -3
  183. package/corpus/templates/slides/actions/search-images.ts +6 -3
  184. package/corpus/templates/slides/app/components/CloudUpgrade.tsx +8 -51
  185. package/corpus/templates/slides/app/components/layout/Header.tsx +0 -1
  186. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +0 -2
  187. package/corpus/templates/slides/app/routes/settings.tsx +54 -54
  188. package/corpus/templates/slides/app/routes/team.tsx +2 -12
  189. package/corpus/templates/slides/server/handlers/google-docs-auth.ts +9 -9
  190. package/corpus/templates/slides/server/handlers/image-gen.ts +5 -1
  191. package/corpus/templates/slides/server/handlers/image-providers/gemini.ts +9 -1
  192. package/corpus/templates/slides/server/handlers/image-providers/index.ts +18 -8
  193. package/corpus/templates/slides/server/handlers/image-providers/openai.ts +10 -4
  194. package/corpus/templates/slides/server/handlers/image-providers/types.ts +1 -0
  195. package/corpus/templates/slides/server/lib/google-docs-oauth.ts +59 -34
  196. package/corpus/templates/slides/server/register-secrets.ts +60 -0
  197. package/corpus/templates/videos/actions/db-connect.ts +7 -45
  198. package/corpus/templates/videos/app/components/CloudUpgrade.tsx +8 -51
  199. package/corpus/templates/videos/app/components/Sidebar.tsx +1 -9
  200. package/corpus/templates/videos/app/components/layout/Header.tsx +0 -1
  201. package/corpus/templates/videos/app/components/layout/NavSidebar.tsx +0 -3
  202. package/corpus/templates/videos/app/routes/settings.tsx +54 -54
  203. package/corpus/templates/videos/app/routes/team.tsx +2 -8
  204. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  205. package/dist/agent/engine/builder-engine.js +8 -3
  206. package/dist/agent/engine/builder-engine.js.map +1 -1
  207. package/dist/cli/mcp.d.ts.map +1 -1
  208. package/dist/cli/mcp.js +3 -4
  209. package/dist/cli/mcp.js.map +1 -1
  210. package/dist/client/AssistantChat.d.ts.map +1 -1
  211. package/dist/client/AssistantChat.js +6 -2
  212. package/dist/client/AssistantChat.js.map +1 -1
  213. package/dist/client/chat/markdown-renderer.d.ts.map +1 -1
  214. package/dist/client/chat/markdown-renderer.js +1 -0
  215. package/dist/client/chat/markdown-renderer.js.map +1 -1
  216. package/dist/client/index.d.ts +1 -1
  217. package/dist/client/index.d.ts.map +1 -1
  218. package/dist/client/index.js +1 -1
  219. package/dist/client/index.js.map +1 -1
  220. package/dist/client/org/OrgSwitcher.d.ts +3 -3
  221. package/dist/client/org/OrgSwitcher.js +2 -2
  222. package/dist/client/org/OrgSwitcher.js.map +1 -1
  223. package/dist/client/org/TeamPage.d.ts +6 -1
  224. package/dist/client/org/TeamPage.d.ts.map +1 -1
  225. package/dist/client/org/TeamPage.js +2 -2
  226. package/dist/client/org/TeamPage.js.map +1 -1
  227. package/dist/client/settings/SettingsTabsPage.d.ts +27 -0
  228. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -0
  229. package/dist/client/settings/SettingsTabsPage.js +108 -0
  230. package/dist/client/settings/SettingsTabsPage.js.map +1 -0
  231. package/dist/client/settings/index.d.ts +1 -0
  232. package/dist/client/settings/index.d.ts.map +1 -1
  233. package/dist/client/settings/index.js +1 -0
  234. package/dist/client/settings/index.js.map +1 -1
  235. package/dist/collab/awareness.d.ts +2 -2
  236. package/dist/collab/awareness.d.ts.map +1 -1
  237. package/dist/collab/routes.d.ts +1 -1
  238. package/dist/file-upload/index.d.ts +1 -1
  239. package/dist/file-upload/index.d.ts.map +1 -1
  240. package/dist/file-upload/index.js +1 -1
  241. package/dist/file-upload/index.js.map +1 -1
  242. package/dist/file-upload/registry.d.ts +1 -0
  243. package/dist/file-upload/registry.d.ts.map +1 -1
  244. package/dist/file-upload/registry.js +24 -6
  245. package/dist/file-upload/registry.js.map +1 -1
  246. package/dist/file-upload/types.d.ts +6 -1
  247. package/dist/file-upload/types.d.ts.map +1 -1
  248. package/dist/file-upload/types.js.map +1 -1
  249. package/dist/integrations/adapters/email.d.ts.map +1 -1
  250. package/dist/integrations/adapters/email.js +18 -18
  251. package/dist/integrations/adapters/email.js.map +1 -1
  252. package/dist/integrations/adapters/slack.d.ts.map +1 -1
  253. package/dist/integrations/adapters/slack.js +8 -7
  254. package/dist/integrations/adapters/slack.js.map +1 -1
  255. package/dist/integrations/adapters/telegram.d.ts.map +1 -1
  256. package/dist/integrations/adapters/telegram.js +9 -9
  257. package/dist/integrations/adapters/telegram.js.map +1 -1
  258. package/dist/integrations/adapters/whatsapp.d.ts.map +1 -1
  259. package/dist/integrations/adapters/whatsapp.js +10 -9
  260. package/dist/integrations/adapters/whatsapp.js.map +1 -1
  261. package/dist/integrations/plugin.d.ts.map +1 -1
  262. package/dist/integrations/plugin.js +47 -13
  263. package/dist/integrations/plugin.js.map +1 -1
  264. package/dist/notifications/routes.d.ts +1 -1
  265. package/dist/onboarding/default-steps.d.ts.map +1 -1
  266. package/dist/onboarding/default-steps.js +6 -5
  267. package/dist/onboarding/default-steps.js.map +1 -1
  268. package/dist/onboarding/types.d.ts +1 -1
  269. package/dist/onboarding/types.d.ts.map +1 -1
  270. package/dist/onboarding/types.js.map +1 -1
  271. package/dist/org/handlers.js +1 -1
  272. package/dist/org/handlers.js.map +1 -1
  273. package/dist/progress/routes.d.ts +1 -1
  274. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  275. package/dist/server/agent-chat-plugin.js +4 -6
  276. package/dist/server/agent-chat-plugin.js.map +1 -1
  277. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  278. package/dist/server/better-auth-instance.d.ts.map +1 -1
  279. package/dist/server/better-auth-instance.js +17 -56
  280. package/dist/server/better-auth-instance.js.map +1 -1
  281. package/dist/server/core-routes-plugin.d.ts +1 -1
  282. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  283. package/dist/server/core-routes-plugin.js +67 -153
  284. package/dist/server/core-routes-plugin.js.map +1 -1
  285. package/dist/server/create-server.d.ts +3 -9
  286. package/dist/server/create-server.d.ts.map +1 -1
  287. package/dist/server/create-server.js +37 -91
  288. package/dist/server/create-server.js.map +1 -1
  289. package/dist/server/email-actions.d.ts +2 -3
  290. package/dist/server/email-actions.d.ts.map +1 -1
  291. package/dist/server/email-actions.js +3 -6
  292. package/dist/server/email-actions.js.map +1 -1
  293. package/dist/server/email.d.ts +3 -3
  294. package/dist/server/email.d.ts.map +1 -1
  295. package/dist/server/email.js +40 -19
  296. package/dist/server/email.js.map +1 -1
  297. package/dist/server/index.d.ts +3 -3
  298. package/dist/server/index.d.ts.map +1 -1
  299. package/dist/server/index.js +3 -3
  300. package/dist/server/index.js.map +1 -1
  301. package/dist/server/scoped-key-storage.d.ts +22 -0
  302. package/dist/server/scoped-key-storage.d.ts.map +1 -0
  303. package/dist/server/scoped-key-storage.js +152 -0
  304. package/dist/server/scoped-key-storage.js.map +1 -0
  305. package/dist/shared/agent-env.d.ts +3 -3
  306. package/dist/shared/agent-env.d.ts.map +1 -1
  307. package/dist/shared/agent-env.js +3 -3
  308. package/dist/shared/agent-env.js.map +1 -1
  309. package/dist/sharing/actions/share-resource.js +1 -1
  310. package/dist/sharing/actions/share-resource.js.map +1 -1
  311. package/dist/styles/agent-native.css +55 -3
  312. package/dist/templates/workspace-root/AGENTS.md +3 -2
  313. package/dist/templates/workspace-root/README.md +1 -1
  314. package/dist/templates/workspace-root/scripts/repair-workspace-org.ts +29 -90
  315. package/dist/terminal/pty-server.d.ts.map +1 -1
  316. package/dist/terminal/pty-server.js +3 -36
  317. package/dist/terminal/pty-server.js.map +1 -1
  318. package/dist/triggers/dispatcher.js +1 -1
  319. package/dist/triggers/dispatcher.js.map +1 -1
  320. package/docs/content/file-uploads.md +11 -4
  321. package/docs/content/locales/ar-SA/multi-app-workspace.md +3 -3
  322. package/docs/content/locales/de-DE/multi-app-workspace.md +3 -3
  323. package/docs/content/locales/es-ES/multi-app-workspace.md +3 -3
  324. package/docs/content/locales/fr-FR/multi-app-workspace.md +3 -3
  325. package/docs/content/locales/hi-IN/multi-app-workspace.md +3 -3
  326. package/docs/content/locales/ja-JP/multi-app-workspace.md +3 -3
  327. package/docs/content/locales/ko-KR/multi-app-workspace.md +3 -3
  328. package/docs/content/locales/pt-BR/multi-app-workspace.md +3 -3
  329. package/docs/content/locales/zh-CN/multi-app-workspace.md +3 -3
  330. package/docs/content/locales/zh-TW/multi-app-workspace.md +3 -3
  331. package/docs/content/multi-app-workspace.md +3 -3
  332. package/docs/content/template-clips.md +14 -5
  333. package/package.json +1 -1
  334. package/src/templates/workspace-root/AGENTS.md +3 -2
  335. package/src/templates/workspace-root/README.md +1 -1
  336. package/src/templates/workspace-root/scripts/repair-workspace-org.ts +29 -90
  337. package/corpus/core/src/server/env-var-writes.ts +0 -16
  338. package/corpus/templates/analytics/app/pages/Team.tsx +0 -9
  339. package/corpus/templates/calendar/app/pages/Team.tsx +0 -12
  340. package/corpus/templates/mail/app/pages/Team.tsx +0 -17
  341. package/dist/server/env-var-writes.d.ts +0 -10
  342. package/dist/server/env-var-writes.d.ts.map +0 -1
  343. package/dist/server/env-var-writes.js +0 -18
  344. package/dist/server/env-var-writes.js.map +0 -1
@@ -1,14 +1,22 @@
1
1
  import {
2
2
  ChangelogSettingsCard,
3
3
  LanguagePicker,
4
+ SettingsTabsPage,
4
5
  openAgentSettings,
5
6
  useT,
6
7
  } from "@agent-native/core/client";
8
+ import { TeamPage } from "@agent-native/core/client/org";
7
9
  import { Link } from "react-router";
8
10
 
9
11
  import { useAuth } from "@/components/auth/AuthProvider";
10
12
  import { Button } from "@/components/ui/button";
11
- import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
13
+ import {
14
+ Card,
15
+ CardContent,
16
+ CardDescription,
17
+ CardHeader,
18
+ CardTitle,
19
+ } from "@/components/ui/card";
12
20
  import { Label } from "@/components/ui/label";
13
21
 
14
22
  import changelog from "../../CHANGELOG.md?raw";
@@ -18,82 +26,121 @@ export default function Settings() {
18
26
  const t = useT();
19
27
 
20
28
  return (
21
- <div className="space-y-6 max-w-2xl">
22
- <Card className="bg-card border-border/50">
23
- <CardHeader>
24
- <CardTitle className="text-base">{t("settings.account")}</CardTitle>
25
- </CardHeader>
26
- <CardContent className="space-y-4">
27
- {auth && (
28
- <div className="flex items-center justify-between">
29
- <span className="text-sm text-muted-foreground">
30
- {t("settings.signedInAs")}
31
- </span>
32
- <span className="text-sm font-medium">{auth.email}</span>
33
- </div>
34
- )}
35
- </CardContent>
36
- </Card>
29
+ <SettingsTabsPage
30
+ teamLabel={t("navigation.team")}
31
+ whatsNewLabel={t("root.whatsNew")}
32
+ general={
33
+ <div className="mx-auto w-full max-w-2xl space-y-6">
34
+ <Card className="bg-card border-border/50">
35
+ <CardHeader>
36
+ <CardTitle className="text-base">
37
+ {t("settings.account")}
38
+ </CardTitle>
39
+ </CardHeader>
40
+ <CardContent className="space-y-4">
41
+ {auth && (
42
+ <div className="flex items-center justify-between">
43
+ <span className="text-sm text-muted-foreground">
44
+ {t("settings.signedInAs")}
45
+ </span>
46
+ <span className="text-sm font-medium">{auth.email}</span>
47
+ </div>
48
+ )}
49
+ </CardContent>
50
+ </Card>
37
51
 
38
- <Card className="bg-card border-border/50">
39
- <CardHeader>
40
- <CardTitle className="text-base">
41
- {t("settings.credentials")}
42
- </CardTitle>
43
- </CardHeader>
44
- <CardContent>
45
- <p className="text-sm text-muted-foreground mb-3">
46
- {t("settings.credentialsDescription")}
47
- </p>
48
- <Button variant="outline" size="sm" asChild>
49
- <Link to="/data-sources">{t("settings.manageDataSources")}</Link>
50
- </Button>
51
- </CardContent>
52
- </Card>
52
+ <Card className="bg-card border-border/50">
53
+ <CardHeader>
54
+ <CardTitle className="text-base">
55
+ {t("settings.credentials")}
56
+ </CardTitle>
57
+ </CardHeader>
58
+ <CardContent>
59
+ <p className="text-sm text-muted-foreground mb-3">
60
+ {t("settings.credentialsDescription")}
61
+ </p>
62
+ <Button variant="outline" size="sm" asChild>
63
+ <Link to="/data-sources">
64
+ {t("settings.manageDataSources")}
65
+ </Link>
66
+ </Button>
67
+ </CardContent>
68
+ </Card>
53
69
 
54
- <Card className="bg-card border-border/50">
55
- <CardHeader>
56
- <CardTitle className="text-base">
57
- {t("settings.languageTitle")}
58
- </CardTitle>
59
- </CardHeader>
60
- <CardContent className="max-w-xs space-y-1.5">
61
- <Label>{t("settings.languageLabel")}</Label>
62
- <LanguagePicker label={t("settings.languageLabel")} />
63
- </CardContent>
64
- </Card>
70
+ <Card className="bg-card border-border/50">
71
+ <CardHeader>
72
+ <CardTitle className="text-base">
73
+ {t("settings.dashboardTemplates")}
74
+ </CardTitle>
75
+ <CardDescription>
76
+ {t("settings.dashboardTemplatesDescription")}
77
+ </CardDescription>
78
+ </CardHeader>
79
+ <CardContent>
80
+ <Button variant="outline" size="sm" asChild>
81
+ <Link to="/catalog">
82
+ {t("settings.openDashboardTemplates")}
83
+ </Link>
84
+ </Button>
85
+ </CardContent>
86
+ </Card>
65
87
 
66
- <Card className="bg-card border-border/50">
67
- <CardHeader>
68
- <CardTitle className="text-base">
69
- {t("settings.agentTitle")}
70
- </CardTitle>
71
- </CardHeader>
72
- <CardContent>
73
- <p className="text-sm text-muted-foreground mb-3">
74
- {t("settings.agentDescription")}
75
- </p>
76
- <Button
77
- variant="outline"
78
- size="sm"
79
- onClick={() => openAgentSettings()}
80
- >
81
- {t("settings.openAgentSettings")}
82
- </Button>
83
- </CardContent>
84
- </Card>
88
+ <Card className="bg-card border-border/50">
89
+ <CardHeader>
90
+ <CardTitle className="text-base">
91
+ {t("settings.languageTitle")}
92
+ </CardTitle>
93
+ </CardHeader>
94
+ <CardContent className="max-w-xs space-y-1.5">
95
+ <Label>{t("settings.languageLabel")}</Label>
96
+ <LanguagePicker label={t("settings.languageLabel")} />
97
+ </CardContent>
98
+ </Card>
85
99
 
86
- <Card className="bg-card border-border/50">
87
- <CardHeader>
88
- <CardTitle className="text-base">{t("settings.about")}</CardTitle>
89
- </CardHeader>
90
- <CardContent className="space-y-2 text-sm text-muted-foreground">
91
- <p>{t("settings.aboutDescription")}</p>
92
- <p>{t("settings.aboutUsage")}</p>
93
- </CardContent>
94
- </Card>
100
+ <Card className="bg-card border-border/50">
101
+ <CardHeader>
102
+ <CardTitle className="text-base">
103
+ {t("settings.agentTitle")}
104
+ </CardTitle>
105
+ </CardHeader>
106
+ <CardContent>
107
+ <p className="text-sm text-muted-foreground mb-3">
108
+ {t("settings.agentDescription")}
109
+ </p>
110
+ <Button
111
+ variant="outline"
112
+ size="sm"
113
+ onClick={() => openAgentSettings()}
114
+ >
115
+ {t("settings.openAgentSettings")}
116
+ </Button>
117
+ </CardContent>
118
+ </Card>
95
119
 
96
- <ChangelogSettingsCard markdown={changelog} />
97
- </div>
120
+ <Card className="bg-card border-border/50">
121
+ <CardHeader>
122
+ <CardTitle className="text-base">{t("settings.about")}</CardTitle>
123
+ </CardHeader>
124
+ <CardContent className="space-y-2 text-sm text-muted-foreground">
125
+ <p>{t("settings.aboutDescription")}</p>
126
+ <p>{t("settings.aboutUsage")}</p>
127
+ </CardContent>
128
+ </Card>
129
+ </div>
130
+ }
131
+ team={
132
+ <div className="mx-auto w-full max-w-2xl">
133
+ <TeamPage
134
+ showTitle={false}
135
+ createOrgDescription="Set up a team to share dashboards and data sources with your colleagues."
136
+ />
137
+ </div>
138
+ }
139
+ whatsNew={
140
+ <div className="mx-auto w-full max-w-2xl">
141
+ <ChangelogSettingsCard markdown={changelog} />
142
+ </div>
143
+ }
144
+ />
98
145
  );
99
146
  }
@@ -95,17 +95,6 @@ export default function SessionsPage() {
95
95
 
96
96
  return (
97
97
  <div className="mx-auto flex w-full max-w-7xl flex-col gap-4 px-4 py-5 md:px-6">
98
- <div className="flex items-center">
99
- <div className="min-w-0">
100
- <div className="flex items-center gap-2">
101
- <IconPlayerPlay className="h-5 w-5 text-primary" />
102
- <h1 className="text-xl font-semibold tracking-normal">
103
- {t("sessions.title")}
104
- </h1>
105
- </div>
106
- </div>
107
- </div>
108
-
109
98
  <Card>
110
99
  <CardContent className="p-3">
111
100
  <div className="grid gap-2 lg:grid-cols-[150px_minmax(260px,1fr)_160px_auto_auto] lg:items-center">
@@ -3,20 +3,11 @@ import {
3
3
  useActionQuery,
4
4
  useT,
5
5
  } from "@agent-native/core/client";
6
- import {
7
- IconCheck,
8
- IconExternalLink,
9
- IconLayoutDashboard,
10
- IconLoader2,
11
- IconPackageImport,
12
- IconPlugConnected,
13
- IconSparkles,
14
- } from "@tabler/icons-react";
6
+ import { IconLayoutDashboard } from "@tabler/icons-react";
15
7
  import { useMemo, useState } from "react";
16
8
  import { useNavigate } from "react-router";
17
9
  import { toast } from "sonner";
18
10
 
19
- import { Badge } from "@/components/ui/badge";
20
11
  import { Button } from "@/components/ui/button";
21
12
  import {
22
13
  Card,
@@ -27,15 +18,7 @@ import {
27
18
  CardTitle,
28
19
  } from "@/components/ui/card";
29
20
  import { Skeleton } from "@/components/ui/skeleton";
30
- import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";
31
21
  import { demoNodeExporterDashboardPath } from "@/lib/demo-dashboard-path";
32
- import { cn } from "@/lib/utils";
33
-
34
- type TemplateCategory =
35
- | "Acquisition"
36
- | "Product"
37
- | "Observability"
38
- | "Operations";
39
22
 
40
23
  type InstalledDashboard = {
41
24
  id: string;
@@ -49,26 +32,12 @@ type DashboardTemplate = {
49
32
  id: string;
50
33
  name: string;
51
34
  description: string;
52
- category: TemplateCategory;
53
35
  defaultDashboardId: string;
54
36
  dataSources: string[];
55
- tags: string[];
56
37
  panelCount: number;
57
- version: string;
58
- recommended?: boolean;
59
- installed: boolean;
60
38
  installedDashboards: InstalledDashboard[];
61
39
  };
62
40
 
63
- const CATEGORY_TABS = [
64
- "Demo",
65
- "All",
66
- "Product",
67
- "Acquisition",
68
- "Observability",
69
- "Operations",
70
- ] as const;
71
-
72
41
  function isDemoTemplate(template: DashboardTemplate): boolean {
73
42
  return template.dataSources.includes("demo");
74
43
  }
@@ -94,22 +63,18 @@ function sourceLabel(source: string): string {
94
63
 
95
64
  function TemplateSkeleton() {
96
65
  return (
97
- <Card>
66
+ <Card className="flex min-h-[250px] flex-col">
98
67
  <CardHeader>
99
- <div className="flex items-start justify-between gap-3">
100
- <div className="space-y-2">
101
- <Skeleton className="h-5 w-48" />
102
- <Skeleton className="h-4 w-72" />
103
- </div>
104
- <Skeleton className="h-6 w-20 rounded-full" />
68
+ <div className="space-y-3">
69
+ <Skeleton className="h-5 w-48" />
70
+ <Skeleton className="h-4 w-full" />
71
+ <Skeleton className="h-4 w-5/6" />
72
+ <Skeleton className="h-4 w-3/5" />
105
73
  </div>
106
74
  </CardHeader>
107
- <CardContent className="space-y-4">
108
- <div className="flex gap-2">
109
- <Skeleton className="h-6 w-24 rounded-full" />
110
- <Skeleton className="h-6 w-20 rounded-full" />
111
- </div>
112
- <Skeleton className="h-10 w-full" />
75
+ <CardContent className="mt-auto space-y-4">
76
+ <Skeleton className="h-4 w-40" />
77
+ <Skeleton className="h-9 w-full" />
113
78
  </CardContent>
114
79
  </Card>
115
80
  );
@@ -131,110 +96,38 @@ function TemplateCard({
131
96
  (dashboard) => !dashboard.archivedAt,
132
97
  );
133
98
  const isInstalled = Boolean(installedDashboard);
134
- const isDemo = isDemoTemplate(template);
99
+ const metadata = [
100
+ t("catalog.panels", { count: String(template.panelCount) }),
101
+ ...template.dataSources.map(sourceLabel),
102
+ ].join(" · ");
135
103
 
136
104
  return (
137
- <Card className="flex min-h-[270px] flex-col overflow-hidden">
138
- <CardHeader className="pb-4">
139
- <div className="flex items-start justify-between gap-3">
140
- <div className="min-w-0 space-y-1">
141
- <CardTitle className="text-base leading-6">
142
- {template.name}
143
- </CardTitle>
144
- <CardDescription className="line-clamp-2">
145
- {template.description}
146
- </CardDescription>
147
- </div>
148
- <div className="flex shrink-0 flex-col items-end gap-1.5">
149
- {isDemo ? (
150
- <Badge className="border-cyan-400/60 bg-cyan-400/20 text-cyan-800 shadow-sm shadow-cyan-500/10 dark:text-cyan-100">
151
- <IconSparkles className="mr-1 h-3 w-3" />
152
- {t("catalog.demo")}
153
- </Badge>
154
- ) : null}
155
- {template.recommended && (
156
- <Badge variant="secondary" className="shrink-0">
157
- {t("catalog.recommended")}
158
- </Badge>
159
- )}
160
- </div>
161
- </div>
105
+ <Card className="flex min-h-[250px] flex-col">
106
+ <CardHeader className="gap-2 pb-4">
107
+ <CardTitle className="text-base leading-6">{template.name}</CardTitle>
108
+ <CardDescription className="text-sm leading-6">
109
+ {template.description}
110
+ </CardDescription>
162
111
  </CardHeader>
163
- <CardContent className="flex flex-1 flex-col gap-4">
164
- <div className="flex flex-wrap items-center gap-2">
165
- <Badge variant="outline" className="gap-1.5">
166
- <IconLayoutDashboard className="h-3 w-3" />
167
- {t("catalog.panels", { count: String(template.panelCount) })}
168
- </Badge>
169
- {template.dataSources.map((source) => (
170
- <Badge
171
- key={source}
172
- variant="outline"
173
- className={cn(
174
- "gap-1.5",
175
- source === "demo" &&
176
- "border-cyan-400/50 bg-cyan-400/10 text-cyan-700 dark:text-cyan-200",
177
- )}
178
- >
179
- <IconPlugConnected className="h-3 w-3" />
180
- {sourceLabel(source)}
181
- </Badge>
182
- ))}
183
- </div>
184
-
185
- <div className="flex min-h-8 flex-wrap gap-1.5">
186
- {template.tags.map((tag) => (
187
- <span
188
- key={tag}
189
- className="rounded-md bg-muted px-2 py-1 text-xs text-muted-foreground"
190
- >
191
- {tag}
192
- </span>
193
- ))}
194
- </div>
195
-
196
- <div
197
- className={cn(
198
- "mt-auto flex items-center gap-2 rounded-md border px-3 py-2 text-xs",
199
- isInstalled
200
- ? "border-emerald-500/30 bg-emerald-500/10 text-emerald-600 dark:text-emerald-300"
201
- : "border-border bg-muted/40 text-muted-foreground",
202
- )}
203
- >
204
- {isInstalled ? (
205
- <IconCheck className="h-3.5 w-3.5 shrink-0" />
206
- ) : (
207
- <IconPackageImport className="h-3.5 w-3.5 shrink-0" />
208
- )}
209
- <span className="truncate">
210
- {isInstalled
211
- ? t("catalog.installedAs", {
212
- name: installedDashboard?.name ?? "",
213
- })
214
- : t("catalog.installsPrivateSqlDashboard")}
215
- </span>
216
- </div>
112
+ <CardContent className="mt-auto">
113
+ <p className="text-sm text-muted-foreground">{metadata}</p>
217
114
  </CardContent>
218
115
  <CardFooter className="gap-2">
219
116
  {isInstalled && installedDashboard ? (
220
117
  <Button
118
+ variant="secondary"
221
119
  className="min-w-0 flex-1"
222
120
  onClick={() => onOpen(installedDashboard.id)}
223
121
  >
224
- <IconExternalLink className="h-4 w-4" />
225
122
  {t("catalog.open")}
226
123
  </Button>
227
124
  ) : (
228
125
  <Button
126
+ variant="secondary"
229
127
  className="min-w-0 flex-1"
230
128
  onClick={onInstall}
231
129
  disabled={installing}
232
130
  >
233
- {installing ? (
234
- <IconLoader2 className="h-4 w-4 animate-spin" />
235
- ) : (
236
- <IconPackageImport className="h-4 w-4" />
237
- )}
238
131
  {installing ? t("catalog.installing") : t("catalog.install")}
239
132
  </Button>
240
133
  )}
@@ -245,8 +138,6 @@ function TemplateCard({
245
138
 
246
139
  export default function TemplateCatalogRoute() {
247
140
  const t = useT();
248
- const [category, setCategory] =
249
- useState<(typeof CATEGORY_TABS)[number]>("Demo");
250
141
  const [installingIds, setInstallingIds] = useState<Set<string>>(new Set());
251
142
  const navigate = useNavigate();
252
143
  const install = useActionMutation("install-dashboard-template");
@@ -260,14 +151,6 @@ export default function TemplateCatalogRoute() {
260
151
  () => (data as DashboardTemplate[] | undefined) ?? [],
261
152
  [data],
262
153
  );
263
- const filtered = useMemo(() => {
264
- if (category === "Demo") return templates.filter(isDemoTemplate);
265
- if (category === "All") return templates;
266
- return templates.filter((template) => template.category === category);
267
- }, [category, templates]);
268
- const installedCount = templates.filter(
269
- (template) => template.installed,
270
- ).length;
271
154
 
272
155
  async function installTemplate(template: DashboardTemplate) {
273
156
  setInstallingIds((prev) => new Set(prev).add(template.id));
@@ -310,46 +193,20 @@ export default function TemplateCatalogRoute() {
310
193
  }
311
194
 
312
195
  return (
313
- <div className="mx-auto flex w-full max-w-6xl flex-col gap-6">
314
- <div className="flex flex-col gap-4 md:flex-row md:items-end md:justify-between">
315
- <div className="max-w-2xl space-y-2">
316
- <p className="text-sm text-muted-foreground">
317
- {t("catalog.description")}
318
- </p>
319
- <div className="flex flex-wrap gap-2">
320
- <Badge variant="secondary">
321
- {t("catalog.templatesCount", { count: String(templates.length) })}
322
- </Badge>
323
- <Badge variant="outline">
324
- {t("catalog.installedCount", {
325
- count: String(installedCount),
326
- })}
327
- </Badge>
328
- </div>
329
- </div>
330
- <Tabs
331
- value={category}
332
- onValueChange={(next) =>
333
- setCategory(next as (typeof CATEGORY_TABS)[number])
334
- }
335
- >
336
- <TabsList className="grid w-full grid-cols-3 sm:grid-cols-6 md:w-auto">
337
- {CATEGORY_TABS.map((item) => (
338
- <TabsTrigger key={item} value={item} className="text-xs">
339
- {item}
340
- </TabsTrigger>
341
- ))}
342
- </TabsList>
343
- </Tabs>
196
+ <div className="mx-auto flex w-full max-w-5xl flex-col gap-5">
197
+ <div className="max-w-2xl">
198
+ <p className="text-sm leading-6 text-muted-foreground">
199
+ {t("catalog.description")}
200
+ </p>
344
201
  </div>
345
202
 
346
203
  {isLoading ? (
347
- <div className="grid gap-4 md:grid-cols-2 xl:grid-cols-3">
204
+ <div className="grid gap-4 md:grid-cols-2">
348
205
  {Array.from({ length: 4 }).map((_, index) => (
349
206
  <TemplateSkeleton key={index} />
350
207
  ))}
351
208
  </div>
352
- ) : filtered.length === 0 ? (
209
+ ) : templates.length === 0 ? (
353
210
  <Card className="border-dashed">
354
211
  <CardContent className="flex flex-col items-center justify-center gap-3 py-16 text-center">
355
212
  <IconLayoutDashboard className="h-8 w-8 text-muted-foreground" />
@@ -364,8 +221,8 @@ export default function TemplateCatalogRoute() {
364
221
  </CardContent>
365
222
  </Card>
366
223
  ) : (
367
- <div className="grid gap-4 md:grid-cols-2 xl:grid-cols-3">
368
- {filtered.map((template) => (
224
+ <div className="grid gap-4 md:grid-cols-2">
225
+ {templates.map((template) => (
369
226
  <TemplateCard
370
227
  key={template.id}
371
228
  template={template}
@@ -1,10 +1,11 @@
1
+ import { Navigate } from "react-router";
2
+
1
3
  import { messagesByLocale } from "@/i18n-data";
2
- import Team from "@/pages/Team";
3
4
 
4
5
  export function meta() {
5
6
  return [{ title: messagesByLocale["en-US"].routeTitles.team }];
6
7
  }
7
8
 
8
9
  export default function TeamRoute() {
9
- return <Team />;
10
+ return <Navigate to="/settings#team" replace />;
10
11
  }
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-06-26
4
+ ---
5
+
6
+ Dashboard templates are tucked into settings and show simpler, clearer cards.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-06-26
4
+ ---
5
+
6
+ The Sessions page shows a single page title instead of repeating itself.