@agent-native/core 0.79.17 → 0.79.19

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 (355) 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/i18n.tsx +77 -65
  22. package/corpus/core/src/client/index.ts +7 -1
  23. package/corpus/core/src/client/org/OrgSwitcher.tsx +5 -5
  24. package/corpus/core/src/client/org/TeamPage.tsx +11 -3
  25. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +216 -0
  26. package/corpus/core/src/client/settings/index.ts +5 -0
  27. package/corpus/core/src/file-upload/index.ts +1 -0
  28. package/corpus/core/src/file-upload/registry.ts +22 -6
  29. package/corpus/core/src/file-upload/types.ts +6 -1
  30. package/corpus/core/src/integrations/adapters/email.ts +26 -18
  31. package/corpus/core/src/integrations/adapters/slack.ts +8 -7
  32. package/corpus/core/src/integrations/adapters/telegram.ts +9 -11
  33. package/corpus/core/src/integrations/adapters/whatsapp.ts +12 -9
  34. package/corpus/core/src/integrations/plugin.ts +79 -13
  35. package/corpus/core/src/onboarding/default-steps.ts +6 -3
  36. package/corpus/core/src/onboarding/types.ts +1 -1
  37. package/corpus/core/src/org/handlers.ts +1 -1
  38. package/corpus/core/src/server/agent-chat-plugin.ts +4 -7
  39. package/corpus/core/src/server/better-auth-instance.ts +19 -62
  40. package/corpus/core/src/server/core-routes-plugin.ts +93 -180
  41. package/corpus/core/src/server/create-server.ts +55 -116
  42. package/corpus/core/src/server/email-actions.ts +3 -6
  43. package/corpus/core/src/server/email.ts +52 -17
  44. package/corpus/core/src/server/index.ts +2 -1
  45. package/corpus/core/src/server/scoped-key-storage.ts +223 -0
  46. package/corpus/core/src/shared/agent-env.ts +3 -3
  47. package/corpus/core/src/sharing/actions/share-resource.ts +1 -1
  48. package/corpus/core/src/styles/agent-native.css +47 -3
  49. package/corpus/core/src/templates/workspace-root/AGENTS.md +3 -2
  50. package/corpus/core/src/templates/workspace-root/README.md +1 -1
  51. package/corpus/core/src/templates/workspace-root/scripts/repair-workspace-org.ts +29 -90
  52. package/corpus/core/src/terminal/pty-server.ts +3 -38
  53. package/corpus/core/src/triggers/dispatcher.ts +1 -2
  54. package/corpus/templates/.retired/issues/package.json +7 -0
  55. package/corpus/templates/.retired/meeting-notes/package.json +7 -0
  56. package/corpus/templates/.retired/recruiting/package.json +7 -0
  57. package/corpus/templates/.retired/scheduling/package.json +7 -0
  58. package/corpus/templates/.retired/voice/package.json +7 -0
  59. package/corpus/templates/analytics/app/components/layout/Header.tsx +0 -1
  60. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +1 -18
  61. package/corpus/templates/analytics/app/global.css +15 -0
  62. package/corpus/templates/analytics/app/i18n/zh-TW.ts +7 -1
  63. package/corpus/templates/analytics/app/i18n-data.ts +71 -2
  64. package/corpus/templates/analytics/app/pages/Ask.tsx +1 -1
  65. package/corpus/templates/analytics/app/pages/Settings.tsx +120 -73
  66. package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +0 -11
  67. package/corpus/templates/analytics/app/routes/catalog.tsx +33 -176
  68. package/corpus/templates/analytics/app/routes/team.tsx +3 -2
  69. package/corpus/templates/analytics/changelog/2026-06-26-dashboard-templates-are-tucked-into-settings-and-show-simple.md +6 -0
  70. package/corpus/templates/analytics/changelog/2026-06-26-the-ask-tab-uses-a-softer-dark-gray-canvas-while-sidebar-cha.md +6 -0
  71. package/corpus/templates/analytics/changelog/2026-06-26-the-sessions-page-shows-a-single-page-title-instead-of-repea.md +6 -0
  72. package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +37 -28
  73. package/corpus/templates/assets/app/routes/settings.tsx +65 -43
  74. package/corpus/templates/assets/app/routes/team.tsx +2 -10
  75. package/corpus/templates/brain/app/routes/settings.tsx +390 -358
  76. package/corpus/templates/brain/app/routes/team.tsx +2 -8
  77. package/corpus/templates/calendar/actions/db-connect.ts +5 -29
  78. package/corpus/templates/calendar/app/components/CloudUpgrade.tsx +8 -51
  79. package/corpus/templates/calendar/app/components/calendar/GoogleConnectBanner.tsx +2 -1
  80. package/corpus/templates/calendar/app/components/calendar/GoogleSetupWizard.tsx +4 -2
  81. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +0 -2
  82. package/corpus/templates/calendar/app/pages/Settings.tsx +304 -271
  83. package/corpus/templates/calendar/app/routes/_app.team.tsx +2 -17
  84. package/corpus/templates/calendar/server/handlers/google-auth.ts +22 -9
  85. package/corpus/templates/calendar/server/lib/booking-emails.ts +1 -1
  86. package/corpus/templates/calendar/server/lib/event-guest-notifications.ts +1 -1
  87. package/corpus/templates/calendar/server/lib/google-calendar.ts +48 -28
  88. package/corpus/templates/chat/app/components/layout/Header.tsx +0 -1
  89. package/corpus/templates/chat/app/hooks/use-navigation-state.ts +4 -2
  90. package/corpus/templates/chat/app/routes/settings.tsx +54 -54
  91. package/corpus/templates/chat/app/routes/team.tsx +2 -10
  92. package/corpus/templates/clips/.agents/skills/ai-video-tools/SKILL.md +7 -2
  93. package/corpus/templates/clips/.agents/skills/recording/SKILL.md +1 -1
  94. package/corpus/templates/clips/.agents/skills/video-sharing/SKILL.md +7 -0
  95. package/corpus/templates/clips/AGENTS.md +8 -0
  96. package/corpus/templates/clips/actions/invite-member.ts +1 -1
  97. package/corpus/templates/clips/actions/request-transcript.ts +1 -1
  98. package/corpus/templates/clips/app/components/library/library-layout.tsx +325 -333
  99. package/corpus/templates/clips/app/components/player/delete-recording-menu.tsx +80 -40
  100. package/corpus/templates/clips/app/components/player/transcript-panel.tsx +2 -0
  101. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +629 -643
  102. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +263 -158
  103. package/corpus/templates/clips/app/routes/share.$shareId.tsx +10 -2
  104. package/corpus/templates/clips/changelog/2026-06-26-long-desktop-recordings-are-checkpointed-so-macos-finalizati.md +6 -0
  105. package/corpus/templates/clips/changelog/2026-06-26-non-mac-desktop-recordings-wait-for-upload-transcription.md +6 -0
  106. package/corpus/templates/clips/changelog/2026-06-26-recording-details-button-stays-at-the-far-right-on-small-screen.md +6 -0
  107. package/corpus/templates/clips/changelog/2026-06-26-s3-compatible-storage-keys-now-save-securely-from-clips-sett.md +6 -0
  108. package/corpus/templates/clips/changelog/2026-06-26-shared-clip-links-guide-agents-through-processing-transcripts.md +6 -0
  109. package/corpus/templates/clips/changelog/2026-06-26-the-agent-sidebar-now-slides-in-smoothly-without-duplicate-e.md +6 -0
  110. package/corpus/templates/clips/changelog/2026-06-26-the-clip-details-sidebar-now-collapses-into-a-slide-out-pane.md +6 -0
  111. package/corpus/templates/clips/desktop/src/lib/recorder.ts +55 -3
  112. package/corpus/templates/clips/desktop/src/lib/transcription-capture.ts +217 -5
  113. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +1 -0
  114. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +176 -5
  115. package/corpus/templates/clips/server/lib/public-agent-context.ts +31 -0
  116. package/corpus/templates/clips/server/lib/s3-upload-provider.ts +60 -14
  117. package/corpus/templates/clips/server/lib/video-storage.ts +37 -9
  118. package/corpus/templates/clips/server/routes/api/agent-transcript.json.get.ts +5 -0
  119. package/corpus/templates/content/app/components/layout/Header.tsx +0 -1
  120. package/corpus/templates/content/app/components/sidebar/NotionButton.tsx +1 -0
  121. package/corpus/templates/content/app/routes/_app.settings.tsx +54 -55
  122. package/corpus/templates/content/app/routes/_app.team.tsx +2 -28
  123. package/corpus/templates/content/server/lib/notion.ts +43 -11
  124. package/corpus/templates/content/server/routes/api/notion/auth-url.get.ts +2 -2
  125. package/corpus/templates/content/server/routes/api/notion/status.get.ts +3 -3
  126. package/corpus/templates/design/app/routes/settings.tsx +60 -38
  127. package/corpus/templates/design/app/routes/team.tsx +2 -10
  128. package/corpus/templates/dispatch/app/hooks/use-navigation-state.ts +2 -2
  129. package/corpus/templates/dispatch/app/routes/settings.tsx +70 -55
  130. package/corpus/templates/dispatch/app/routes/team.tsx +5 -1
  131. package/corpus/templates/forms/actions/db-connect.ts +7 -36
  132. package/corpus/templates/forms/actions/navigate.ts +2 -2
  133. package/corpus/templates/forms/app/components/CloudUpgrade.tsx +8 -47
  134. package/corpus/templates/forms/app/components/layout/Header.tsx +0 -1
  135. package/corpus/templates/forms/app/components/layout/Layout.tsx +42 -25
  136. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +35 -76
  137. package/corpus/templates/forms/app/global.css +9 -25
  138. package/corpus/templates/forms/app/hooks/use-navigation-state.ts +4 -4
  139. package/corpus/templates/forms/app/i18n/ar-SA.ts +1 -0
  140. package/corpus/templates/forms/app/i18n/de-DE.ts +1 -0
  141. package/corpus/templates/forms/app/i18n/en-US.ts +1 -0
  142. package/corpus/templates/forms/app/i18n/es-ES.ts +1 -0
  143. package/corpus/templates/forms/app/i18n/fr-FR.ts +1 -0
  144. package/corpus/templates/forms/app/i18n/hi-IN.ts +1 -0
  145. package/corpus/templates/forms/app/i18n/ja-JP.ts +1 -0
  146. package/corpus/templates/forms/app/i18n/ko-KR.ts +1 -0
  147. package/corpus/templates/forms/app/i18n/pt-BR.ts +1 -0
  148. package/corpus/templates/forms/app/i18n/zh-CN.ts +1 -0
  149. package/corpus/templates/forms/app/i18n/zh-TW.ts +1 -0
  150. package/corpus/templates/forms/app/lib/route-prewarm.ts +9 -8
  151. package/corpus/templates/forms/app/pages/AskPage.tsx +70 -0
  152. package/corpus/templates/forms/app/pages/FormsListPage.tsx +74 -81
  153. package/corpus/templates/forms/app/root.tsx +1 -1
  154. package/corpus/templates/forms/app/routes/_app.ask.tsx +14 -0
  155. package/corpus/templates/forms/app/routes/_app.settings.tsx +54 -54
  156. package/corpus/templates/forms/app/routes/_app.team.tsx +2 -9
  157. package/corpus/templates/forms/app/routes/_index.tsx +21 -130
  158. package/corpus/templates/forms/changelog/2026-06-26-ask-forms-opens-as-a-standard-app-tab-with-a-simpler-sidebar.md +6 -0
  159. package/corpus/templates/forms/changelog/2026-06-26-forms-are-shown-in-a-tighter-row-list-with-a-denser-sidebar.md +6 -0
  160. package/corpus/templates/forms/shared/navigation.ts +4 -2
  161. package/corpus/templates/macros/app/routes/settings.tsx +54 -54
  162. package/corpus/templates/macros/app/routes/team.tsx +2 -10
  163. package/corpus/templates/mail/actions/helpers.ts +2 -2
  164. package/corpus/templates/mail/app/components/GoogleConnectBanner.tsx +2 -1
  165. package/corpus/templates/mail/app/pages/SettingsPage.tsx +5 -5
  166. package/corpus/templates/mail/app/routes/team.tsx +3 -2
  167. package/corpus/templates/mail/server/handlers/emails.ts +3 -2
  168. package/corpus/templates/mail/server/handlers/google-auth.ts +19 -12
  169. package/corpus/templates/mail/server/lib/automation-engine.ts +3 -2
  170. package/corpus/templates/mail/server/lib/email-state.ts +2 -3
  171. package/corpus/templates/mail/server/lib/google-auth.ts +28 -11
  172. package/corpus/templates/mail/server/lib/jobs.ts +3 -2
  173. package/corpus/templates/mail/server/onboarding.ts +9 -6
  174. package/corpus/templates/mail/server/routes/api/attachments.get.ts +3 -3
  175. package/corpus/templates/plan/actions/request-plan-access.ts +1 -1
  176. package/corpus/templates/plan/app/components/layout/Header.tsx +0 -1
  177. package/corpus/templates/plan/app/components/plan/CanvasArea.tsx +56 -4
  178. package/corpus/templates/plan/app/global.css +8 -3
  179. package/corpus/templates/plan/app/hooks/use-navigation-state.ts +4 -2
  180. package/corpus/templates/plan/app/lib/route-prewarm.ts +0 -4
  181. package/corpus/templates/plan/app/pages/PlansPage.tsx +1 -1
  182. package/corpus/templates/plan/app/routes/settings.tsx +75 -73
  183. package/corpus/templates/plan/app/routes/team.tsx +2 -8
  184. package/corpus/templates/plan/changelog/2026-06-26-canvas-grid-panning-now-stays-smooth-and-fills-the-workspace.md +6 -0
  185. package/corpus/templates/plan/server/lib/comment-notifications.ts +1 -1
  186. package/corpus/templates/slides/actions/check-image-gen.ts +2 -1
  187. package/corpus/templates/slides/actions/db-connect.ts +7 -45
  188. package/corpus/templates/slides/actions/edit-image.ts +6 -3
  189. package/corpus/templates/slides/actions/generate-image-api.ts +1 -1
  190. package/corpus/templates/slides/actions/generate-image.ts +2 -2
  191. package/corpus/templates/slides/actions/generate-slides-ai.ts +5 -3
  192. package/corpus/templates/slides/actions/image-gen-status.ts +4 -3
  193. package/corpus/templates/slides/actions/image-search.ts +6 -3
  194. package/corpus/templates/slides/actions/search-images.ts +6 -3
  195. package/corpus/templates/slides/app/components/CloudUpgrade.tsx +8 -51
  196. package/corpus/templates/slides/app/components/layout/Header.tsx +0 -1
  197. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +0 -2
  198. package/corpus/templates/slides/app/routes/settings.tsx +54 -54
  199. package/corpus/templates/slides/app/routes/team.tsx +2 -12
  200. package/corpus/templates/slides/server/handlers/google-docs-auth.ts +9 -9
  201. package/corpus/templates/slides/server/handlers/image-gen.ts +5 -1
  202. package/corpus/templates/slides/server/handlers/image-providers/gemini.ts +9 -1
  203. package/corpus/templates/slides/server/handlers/image-providers/index.ts +18 -8
  204. package/corpus/templates/slides/server/handlers/image-providers/openai.ts +10 -4
  205. package/corpus/templates/slides/server/handlers/image-providers/types.ts +1 -0
  206. package/corpus/templates/slides/server/lib/google-docs-oauth.ts +59 -34
  207. package/corpus/templates/slides/server/register-secrets.ts +60 -0
  208. package/corpus/templates/videos/actions/db-connect.ts +7 -45
  209. package/corpus/templates/videos/app/components/CloudUpgrade.tsx +8 -51
  210. package/corpus/templates/videos/app/components/Sidebar.tsx +1 -9
  211. package/corpus/templates/videos/app/components/layout/Header.tsx +0 -1
  212. package/corpus/templates/videos/app/components/layout/NavSidebar.tsx +0 -3
  213. package/corpus/templates/videos/app/routes/settings.tsx +54 -54
  214. package/corpus/templates/videos/app/routes/team.tsx +2 -8
  215. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  216. package/dist/agent/engine/builder-engine.js +8 -3
  217. package/dist/agent/engine/builder-engine.js.map +1 -1
  218. package/dist/cli/mcp.d.ts.map +1 -1
  219. package/dist/cli/mcp.js +3 -4
  220. package/dist/cli/mcp.js.map +1 -1
  221. package/dist/client/AssistantChat.d.ts.map +1 -1
  222. package/dist/client/AssistantChat.js +6 -2
  223. package/dist/client/AssistantChat.js.map +1 -1
  224. package/dist/client/chat/markdown-renderer.d.ts.map +1 -1
  225. package/dist/client/chat/markdown-renderer.js +1 -0
  226. package/dist/client/chat/markdown-renderer.js.map +1 -1
  227. package/dist/client/i18n.d.ts.map +1 -1
  228. package/dist/client/i18n.js +20 -9
  229. package/dist/client/i18n.js.map +1 -1
  230. package/dist/client/index.d.ts +1 -1
  231. package/dist/client/index.d.ts.map +1 -1
  232. package/dist/client/index.js +1 -1
  233. package/dist/client/index.js.map +1 -1
  234. package/dist/client/org/OrgSwitcher.d.ts +3 -3
  235. package/dist/client/org/OrgSwitcher.js +2 -2
  236. package/dist/client/org/OrgSwitcher.js.map +1 -1
  237. package/dist/client/org/TeamPage.d.ts +6 -1
  238. package/dist/client/org/TeamPage.d.ts.map +1 -1
  239. package/dist/client/org/TeamPage.js +2 -2
  240. package/dist/client/org/TeamPage.js.map +1 -1
  241. package/dist/client/settings/SettingsTabsPage.d.ts +27 -0
  242. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -0
  243. package/dist/client/settings/SettingsTabsPage.js +108 -0
  244. package/dist/client/settings/SettingsTabsPage.js.map +1 -0
  245. package/dist/client/settings/index.d.ts +1 -0
  246. package/dist/client/settings/index.d.ts.map +1 -1
  247. package/dist/client/settings/index.js +1 -0
  248. package/dist/client/settings/index.js.map +1 -1
  249. package/dist/file-upload/index.d.ts +1 -1
  250. package/dist/file-upload/index.d.ts.map +1 -1
  251. package/dist/file-upload/index.js +1 -1
  252. package/dist/file-upload/index.js.map +1 -1
  253. package/dist/file-upload/registry.d.ts +1 -0
  254. package/dist/file-upload/registry.d.ts.map +1 -1
  255. package/dist/file-upload/registry.js +24 -6
  256. package/dist/file-upload/registry.js.map +1 -1
  257. package/dist/file-upload/types.d.ts +6 -1
  258. package/dist/file-upload/types.d.ts.map +1 -1
  259. package/dist/file-upload/types.js.map +1 -1
  260. package/dist/integrations/adapters/email.d.ts.map +1 -1
  261. package/dist/integrations/adapters/email.js +18 -18
  262. package/dist/integrations/adapters/email.js.map +1 -1
  263. package/dist/integrations/adapters/slack.d.ts.map +1 -1
  264. package/dist/integrations/adapters/slack.js +8 -7
  265. package/dist/integrations/adapters/slack.js.map +1 -1
  266. package/dist/integrations/adapters/telegram.d.ts.map +1 -1
  267. package/dist/integrations/adapters/telegram.js +9 -9
  268. package/dist/integrations/adapters/telegram.js.map +1 -1
  269. package/dist/integrations/adapters/whatsapp.d.ts.map +1 -1
  270. package/dist/integrations/adapters/whatsapp.js +10 -9
  271. package/dist/integrations/adapters/whatsapp.js.map +1 -1
  272. package/dist/integrations/plugin.d.ts.map +1 -1
  273. package/dist/integrations/plugin.js +47 -13
  274. package/dist/integrations/plugin.js.map +1 -1
  275. package/dist/notifications/routes.d.ts +3 -3
  276. package/dist/observability/routes.d.ts +6 -6
  277. package/dist/onboarding/default-steps.d.ts.map +1 -1
  278. package/dist/onboarding/default-steps.js +6 -5
  279. package/dist/onboarding/default-steps.js.map +1 -1
  280. package/dist/onboarding/types.d.ts +1 -1
  281. package/dist/onboarding/types.d.ts.map +1 -1
  282. package/dist/onboarding/types.js.map +1 -1
  283. package/dist/org/handlers.js +1 -1
  284. package/dist/org/handlers.js.map +1 -1
  285. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  286. package/dist/server/agent-chat-plugin.js +4 -6
  287. package/dist/server/agent-chat-plugin.js.map +1 -1
  288. package/dist/server/agent-engine-api-key-route.d.ts +2 -2
  289. package/dist/server/better-auth-instance.d.ts.map +1 -1
  290. package/dist/server/better-auth-instance.js +17 -56
  291. package/dist/server/better-auth-instance.js.map +1 -1
  292. package/dist/server/core-routes-plugin.d.ts +1 -1
  293. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  294. package/dist/server/core-routes-plugin.js +67 -153
  295. package/dist/server/core-routes-plugin.js.map +1 -1
  296. package/dist/server/create-server.d.ts +3 -9
  297. package/dist/server/create-server.d.ts.map +1 -1
  298. package/dist/server/create-server.js +37 -91
  299. package/dist/server/create-server.js.map +1 -1
  300. package/dist/server/email-actions.d.ts +2 -3
  301. package/dist/server/email-actions.d.ts.map +1 -1
  302. package/dist/server/email-actions.js +3 -6
  303. package/dist/server/email-actions.js.map +1 -1
  304. package/dist/server/email.d.ts +3 -3
  305. package/dist/server/email.d.ts.map +1 -1
  306. package/dist/server/email.js +40 -19
  307. package/dist/server/email.js.map +1 -1
  308. package/dist/server/index.d.ts +3 -3
  309. package/dist/server/index.d.ts.map +1 -1
  310. package/dist/server/index.js +3 -3
  311. package/dist/server/index.js.map +1 -1
  312. package/dist/server/scoped-key-storage.d.ts +22 -0
  313. package/dist/server/scoped-key-storage.d.ts.map +1 -0
  314. package/dist/server/scoped-key-storage.js +152 -0
  315. package/dist/server/scoped-key-storage.js.map +1 -0
  316. package/dist/shared/agent-env.d.ts +3 -3
  317. package/dist/shared/agent-env.d.ts.map +1 -1
  318. package/dist/shared/agent-env.js +3 -3
  319. package/dist/shared/agent-env.js.map +1 -1
  320. package/dist/sharing/actions/share-resource.js +1 -1
  321. package/dist/sharing/actions/share-resource.js.map +1 -1
  322. package/dist/styles/agent-native.css +47 -3
  323. package/dist/templates/workspace-root/AGENTS.md +3 -2
  324. package/dist/templates/workspace-root/README.md +1 -1
  325. package/dist/templates/workspace-root/scripts/repair-workspace-org.ts +29 -90
  326. package/dist/terminal/pty-server.d.ts.map +1 -1
  327. package/dist/terminal/pty-server.js +3 -36
  328. package/dist/terminal/pty-server.js.map +1 -1
  329. package/dist/triggers/dispatcher.js +1 -1
  330. package/dist/triggers/dispatcher.js.map +1 -1
  331. package/docs/content/file-uploads.md +11 -4
  332. package/docs/content/locales/ar-SA/multi-app-workspace.md +3 -3
  333. package/docs/content/locales/de-DE/multi-app-workspace.md +3 -3
  334. package/docs/content/locales/es-ES/multi-app-workspace.md +3 -3
  335. package/docs/content/locales/fr-FR/multi-app-workspace.md +3 -3
  336. package/docs/content/locales/hi-IN/multi-app-workspace.md +3 -3
  337. package/docs/content/locales/ja-JP/multi-app-workspace.md +3 -3
  338. package/docs/content/locales/ko-KR/multi-app-workspace.md +3 -3
  339. package/docs/content/locales/pt-BR/multi-app-workspace.md +3 -3
  340. package/docs/content/locales/zh-CN/multi-app-workspace.md +3 -3
  341. package/docs/content/locales/zh-TW/multi-app-workspace.md +3 -3
  342. package/docs/content/multi-app-workspace.md +3 -3
  343. package/docs/content/template-clips.md +14 -5
  344. package/package.json +1 -1
  345. package/src/templates/workspace-root/AGENTS.md +3 -2
  346. package/src/templates/workspace-root/README.md +1 -1
  347. package/src/templates/workspace-root/scripts/repair-workspace-org.ts +29 -90
  348. package/corpus/core/src/server/env-var-writes.ts +0 -16
  349. package/corpus/templates/analytics/app/pages/Team.tsx +0 -9
  350. package/corpus/templates/calendar/app/pages/Team.tsx +0 -12
  351. package/corpus/templates/mail/app/pages/Team.tsx +0 -17
  352. package/dist/server/env-var-writes.d.ts +0 -10
  353. package/dist/server/env-var-writes.d.ts.map +0 -1
  354. package/dist/server/env-var-writes.js +0 -18
  355. package/dist/server/env-var-writes.js.map +0 -1
@@ -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 Ask tab uses a softer dark-gray canvas while sidebar chat stays black.
@@ -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.
@@ -31,6 +31,7 @@ export type CatalogDashboardConfig = SqlDashboardConfig & {
31
31
 
32
32
  export type DashboardCatalogEntry = DashboardCatalogMetadata & {
33
33
  buildConfig: () => SqlDashboardConfig;
34
+ visibleInCatalog?: boolean;
34
35
  };
35
36
 
36
37
  export type InstalledDashboardSummary = {
@@ -906,7 +907,7 @@ export const dashboardCatalogEntries: DashboardCatalogEntry[] = [
906
907
  id: "demo-node-exporter",
907
908
  name: "Demo Node Exporter Full",
908
909
  description:
909
- "The full Node Exporter dashboard, backed by the built-in demo Prometheus endpoint without consuming the Prometheus source slot.",
910
+ "Explore CPU, memory, disk, network, filesystem, and load metrics using built-in sample Prometheus data, with no data source setup required.",
910
911
  category: "Observability",
911
912
  defaultDashboardId: "demo-node-exporter",
912
913
  dataSources: ["demo"],
@@ -940,6 +941,7 @@ export const dashboardCatalogEntries: DashboardCatalogEntry[] = [
940
941
  panelCount: 34,
941
942
  version: CATALOG_VERSION,
942
943
  recommended: true,
944
+ visibleInCatalog: false,
943
945
  buildConfig: () => seedConfig("agent-native-templates-first-party"),
944
946
  },
945
947
  {
@@ -954,13 +956,14 @@ export const dashboardCatalogEntries: DashboardCatalogEntry[] = [
954
956
  panelCount: 12,
955
957
  version: CATALOG_VERSION,
956
958
  recommended: true,
959
+ visibleInCatalog: false,
957
960
  buildConfig: () => seedConfig("skills-cli-funnel"),
958
961
  },
959
962
  {
960
963
  id: "google-analytics-web",
961
964
  name: "Google Analytics Website",
962
965
  description:
963
- "GA4 traffic, engagement, acquisition, top pages, and geography.",
966
+ "Track GA4 website traffic, engagement, acquisition channels, top pages, geography, and browser/device mix.",
964
967
  category: "Acquisition",
965
968
  defaultDashboardId: "google-analytics",
966
969
  dataSources: ["ga4"],
@@ -973,7 +976,7 @@ export const dashboardCatalogEntries: DashboardCatalogEntry[] = [
973
976
  id: "node-exporter-macos",
974
977
  name: "Node Exporter macOS",
975
978
  description:
976
- "A comprehensive Darwin/macOS Prometheus host dashboard for Homebrew node_exporter metrics.",
979
+ "Monitor macOS host CPU, memory, disk, filesystem, network, load, and Homebrew node_exporter health from Prometheus.",
977
980
  category: "Observability",
978
981
  defaultDashboardId: "node-exporter-macos",
979
982
  dataSources: ["prometheus"],
@@ -987,7 +990,7 @@ export const dashboardCatalogEntries: DashboardCatalogEntry[] = [
987
990
  id: "node-exporter-full",
988
991
  name: "Node Exporter Full",
989
992
  description:
990
- "Linux node_exporter host observability plus Prometheus demo-app traffic, latency, and workload panels.",
993
+ "Monitor Linux host CPU, memory, disk, filesystem, network, and load, plus Prometheus demo-app traffic and latency panels.",
991
994
  category: "Observability",
992
995
  defaultDashboardId: "node-exporter-full",
993
996
  dataSources: ["prometheus"],
@@ -1050,31 +1053,37 @@ export async function listDashboardCatalog(
1050
1053
  hidden: "all",
1051
1054
  });
1052
1055
 
1053
- return dashboardCatalogEntries.map((entry) => {
1054
- const installedDashboards = dashboards
1055
- .filter((row) => installedDashboardForTemplate(row, entry))
1056
- .map((row) => ({
1057
- id: row.id,
1058
- name:
1059
- typeof row.config.name === "string" && row.config.name.trim()
1060
- ? row.config.name
1061
- : row.title,
1062
- visibility: row.visibility,
1063
- updatedAt: row.updatedAt,
1064
- archivedAt: row.archivedAt,
1065
- }))
1066
- .sort(
1067
- (a, b) =>
1068
- new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime(),
1069
- );
1056
+ return dashboardCatalogEntries
1057
+ .filter((entry) => entry.visibleInCatalog !== false)
1058
+ .map((entry) => {
1059
+ const installedDashboards = dashboards
1060
+ .filter((row) => installedDashboardForTemplate(row, entry))
1061
+ .map((row) => ({
1062
+ id: row.id,
1063
+ name:
1064
+ typeof row.config.name === "string" && row.config.name.trim()
1065
+ ? row.config.name
1066
+ : row.title,
1067
+ visibility: row.visibility,
1068
+ updatedAt: row.updatedAt,
1069
+ archivedAt: row.archivedAt,
1070
+ }))
1071
+ .sort(
1072
+ (a, b) =>
1073
+ new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime(),
1074
+ );
1070
1075
 
1071
- const { buildConfig: _buildConfig, ...metadata } = entry;
1072
- return {
1073
- ...metadata,
1074
- installedDashboards,
1075
- installed: installedDashboards.length > 0,
1076
- };
1077
- });
1076
+ const {
1077
+ buildConfig: _buildConfig,
1078
+ visibleInCatalog: _visibleInCatalog,
1079
+ ...metadata
1080
+ } = entry;
1081
+ return {
1082
+ ...metadata,
1083
+ installedDashboards,
1084
+ installed: installedDashboards.length > 0,
1085
+ };
1086
+ });
1078
1087
  }
1079
1088
 
1080
1089
  export function applyCatalogMetadata(
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  ChangelogSettingsCard,
3
3
  LanguagePicker,
4
+ SettingsTabsPage,
4
5
  agentNativePath,
5
6
  openAgentSettings,
6
7
  useActionQuery,
@@ -13,6 +14,7 @@ import {
13
14
  type OnboardingMethod,
14
15
  type OnboardingStepStatus,
15
16
  } from "@agent-native/core/client/onboarding";
17
+ import { TeamPage } from "@agent-native/core/client/org";
16
18
  import {
17
19
  IconAlertCircle,
18
20
  IconCheck,
@@ -81,51 +83,71 @@ export default function SettingsPage() {
81
83
  <PageShell
82
84
  title={t("settings.title")}
83
85
  description={t("settings.description")}
84
- className="max-w-4xl space-y-6"
86
+ className="max-w-5xl"
85
87
  >
86
- <div className="max-w-2xl">
87
- <ChangelogSettingsCard markdown={changelog} />
88
- </div>
89
-
90
- <div className="max-w-2xl">
91
- <h2 className="text-lg font-semibold tracking-tight">
92
- {t("settings.connections")}
93
- </h2>
94
- <p className="mt-1 text-sm leading-6 text-muted-foreground">
95
- {t("settings.connectionsDescription")}
96
- </p>
97
- </div>
88
+ <SettingsTabsPage
89
+ teamLabel={t("team.title")}
90
+ general={
91
+ <div className="mx-auto w-full max-w-2xl space-y-6">
92
+ <div>
93
+ <h2 className="text-lg font-semibold tracking-tight">
94
+ {t("settings.connections")}
95
+ </h2>
96
+ <p className="mt-1 text-sm leading-6 text-muted-foreground">
97
+ {t("settings.connectionsDescription")}
98
+ </p>
99
+ </div>
98
100
 
99
- <Card className="max-w-2xl">
100
- <CardHeader>
101
- <CardTitle className="text-base">
102
- {t("settings.languageTitle")}
103
- </CardTitle>
104
- <CardDescription>{t("settings.languageDescription")}</CardDescription>
105
- </CardHeader>
106
- <CardContent className="max-w-xs space-y-1.5">
107
- <Label>{t("settings.languageLabel")}</Label>
108
- <LanguagePicker label={t("settings.languageLabel")} />
109
- </CardContent>
110
- </Card>
111
-
112
- <Card className="max-w-2xl">
113
- <CardHeader>
114
- <CardTitle className="text-base">
115
- {t("settings.agentTitle")}
116
- </CardTitle>
117
- <CardDescription>{t("settings.agentDescription")}</CardDescription>
118
- </CardHeader>
119
- <CardContent>
120
- <Button variant="outline" onClick={() => openAgentSettings()}>
121
- {t("settings.openAgentSettings")}
122
- </Button>
123
- </CardContent>
124
- </Card>
125
-
126
- <section id="asset-generation-setup" className="scroll-mt-4">
127
- <AssetsSetupCard libraryCount={data?.count ?? 0} />
128
- </section>
101
+ <Card>
102
+ <CardHeader>
103
+ <CardTitle className="text-base">
104
+ {t("settings.languageTitle")}
105
+ </CardTitle>
106
+ <CardDescription>
107
+ {t("settings.languageDescription")}
108
+ </CardDescription>
109
+ </CardHeader>
110
+ <CardContent className="max-w-xs space-y-1.5">
111
+ <Label>{t("settings.languageLabel")}</Label>
112
+ <LanguagePicker label={t("settings.languageLabel")} />
113
+ </CardContent>
114
+ </Card>
115
+
116
+ <Card>
117
+ <CardHeader>
118
+ <CardTitle className="text-base">
119
+ {t("settings.agentTitle")}
120
+ </CardTitle>
121
+ <CardDescription>
122
+ {t("settings.agentDescription")}
123
+ </CardDescription>
124
+ </CardHeader>
125
+ <CardContent>
126
+ <Button variant="outline" onClick={() => openAgentSettings()}>
127
+ {t("settings.openAgentSettings")}
128
+ </Button>
129
+ </CardContent>
130
+ </Card>
131
+
132
+ <section id="asset-generation-setup" className="scroll-mt-4">
133
+ <AssetsSetupCard libraryCount={data?.count ?? 0} />
134
+ </section>
135
+ </div>
136
+ }
137
+ team={
138
+ <div className="mx-auto w-full max-w-2xl">
139
+ <TeamPage
140
+ showTitle={false}
141
+ createOrgDescription={t("team.createOrgDescription")}
142
+ />
143
+ </div>
144
+ }
145
+ whatsNew={
146
+ <div className="mx-auto w-full max-w-2xl">
147
+ <ChangelogSettingsCard markdown={changelog} />
148
+ </div>
149
+ }
150
+ />
129
151
  </PageShell>
130
152
  );
131
153
  }
@@ -1,7 +1,5 @@
1
- import { useT } from "@agent-native/core/client";
2
- import { TeamPage } from "@agent-native/core/client/org";
1
+ import { Navigate } from "react-router";
3
2
 
4
- import { useSetPageTitle } from "@/components/layout/HeaderActions";
5
3
  import { messagesByLocale } from "@/i18n-data";
6
4
 
7
5
  export function meta() {
@@ -9,11 +7,5 @@ export function meta() {
9
7
  }
10
8
 
11
9
  export default function TeamRoute() {
12
- const t = useT();
13
- useSetPageTitle(t("team.title"));
14
- return (
15
- <main className="mx-auto w-full max-w-3xl px-4 py-6 sm:px-6 sm:py-10">
16
- <TeamPage createOrgDescription={t("team.createOrgDescription")} />
17
- </main>
18
- );
10
+ return <Navigate to="/settings#team" replace />;
19
11
  }