@agent-native/core 0.79.17 → 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 +8 -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 +47 -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/player/transcript-panel.tsx +2 -0
  95. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +629 -643
  96. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +219 -155
  97. package/corpus/templates/clips/changelog/2026-06-26-long-desktop-recordings-are-checkpointed-so-macos-finalizati.md +6 -0
  98. package/corpus/templates/clips/changelog/2026-06-26-non-mac-desktop-recordings-wait-for-upload-transcription.md +6 -0
  99. package/corpus/templates/clips/changelog/2026-06-26-s3-compatible-storage-keys-now-save-securely-from-clips-sett.md +6 -0
  100. package/corpus/templates/clips/changelog/2026-06-26-shared-clip-links-guide-agents-through-processing-transcripts.md +6 -0
  101. package/corpus/templates/clips/changelog/2026-06-26-the-clip-details-sidebar-now-collapses-into-a-slide-out-pane.md +6 -0
  102. package/corpus/templates/clips/desktop/src/lib/recorder.ts +55 -3
  103. package/corpus/templates/clips/desktop/src/lib/transcription-capture.ts +217 -5
  104. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +1 -0
  105. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +176 -5
  106. package/corpus/templates/clips/server/lib/public-agent-context.ts +31 -0
  107. package/corpus/templates/clips/server/lib/s3-upload-provider.ts +60 -14
  108. package/corpus/templates/clips/server/lib/video-storage.ts +37 -9
  109. package/corpus/templates/clips/server/routes/api/agent-transcript.json.get.ts +5 -0
  110. package/corpus/templates/content/app/components/layout/Header.tsx +0 -1
  111. package/corpus/templates/content/app/components/sidebar/NotionButton.tsx +1 -0
  112. package/corpus/templates/content/app/routes/_app.settings.tsx +54 -55
  113. package/corpus/templates/content/app/routes/_app.team.tsx +2 -28
  114. package/corpus/templates/content/server/lib/notion.ts +43 -11
  115. package/corpus/templates/content/server/routes/api/notion/auth-url.get.ts +2 -2
  116. package/corpus/templates/content/server/routes/api/notion/status.get.ts +3 -3
  117. package/corpus/templates/design/app/routes/settings.tsx +60 -38
  118. package/corpus/templates/design/app/routes/team.tsx +2 -10
  119. package/corpus/templates/dispatch/app/hooks/use-navigation-state.ts +2 -2
  120. package/corpus/templates/dispatch/app/routes/settings.tsx +70 -55
  121. package/corpus/templates/dispatch/app/routes/team.tsx +5 -1
  122. package/corpus/templates/forms/actions/db-connect.ts +7 -36
  123. package/corpus/templates/forms/actions/navigate.ts +2 -2
  124. package/corpus/templates/forms/app/components/CloudUpgrade.tsx +8 -47
  125. package/corpus/templates/forms/app/components/layout/Header.tsx +0 -1
  126. package/corpus/templates/forms/app/components/layout/Layout.tsx +42 -25
  127. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +35 -76
  128. package/corpus/templates/forms/app/global.css +9 -25
  129. package/corpus/templates/forms/app/hooks/use-navigation-state.ts +4 -4
  130. package/corpus/templates/forms/app/i18n/ar-SA.ts +1 -0
  131. package/corpus/templates/forms/app/i18n/de-DE.ts +1 -0
  132. package/corpus/templates/forms/app/i18n/en-US.ts +1 -0
  133. package/corpus/templates/forms/app/i18n/es-ES.ts +1 -0
  134. package/corpus/templates/forms/app/i18n/fr-FR.ts +1 -0
  135. package/corpus/templates/forms/app/i18n/hi-IN.ts +1 -0
  136. package/corpus/templates/forms/app/i18n/ja-JP.ts +1 -0
  137. package/corpus/templates/forms/app/i18n/ko-KR.ts +1 -0
  138. package/corpus/templates/forms/app/i18n/pt-BR.ts +1 -0
  139. package/corpus/templates/forms/app/i18n/zh-CN.ts +1 -0
  140. package/corpus/templates/forms/app/i18n/zh-TW.ts +1 -0
  141. package/corpus/templates/forms/app/lib/route-prewarm.ts +9 -8
  142. package/corpus/templates/forms/app/pages/AskPage.tsx +70 -0
  143. package/corpus/templates/forms/app/pages/FormsListPage.tsx +74 -81
  144. package/corpus/templates/forms/app/root.tsx +1 -1
  145. package/corpus/templates/forms/app/routes/_app.ask.tsx +14 -0
  146. package/corpus/templates/forms/app/routes/_app.settings.tsx +54 -54
  147. package/corpus/templates/forms/app/routes/_app.team.tsx +2 -9
  148. package/corpus/templates/forms/app/routes/_index.tsx +21 -130
  149. package/corpus/templates/forms/changelog/2026-06-26-ask-forms-opens-as-a-standard-app-tab-with-a-simpler-sidebar.md +6 -0
  150. package/corpus/templates/forms/changelog/2026-06-26-forms-are-shown-in-a-tighter-row-list-with-a-denser-sidebar.md +6 -0
  151. package/corpus/templates/forms/shared/navigation.ts +4 -2
  152. package/corpus/templates/macros/app/routes/settings.tsx +54 -54
  153. package/corpus/templates/macros/app/routes/team.tsx +2 -10
  154. package/corpus/templates/mail/actions/helpers.ts +2 -2
  155. package/corpus/templates/mail/app/components/GoogleConnectBanner.tsx +2 -1
  156. package/corpus/templates/mail/app/pages/SettingsPage.tsx +5 -5
  157. package/corpus/templates/mail/app/routes/team.tsx +3 -2
  158. package/corpus/templates/mail/server/handlers/emails.ts +3 -2
  159. package/corpus/templates/mail/server/handlers/google-auth.ts +19 -12
  160. package/corpus/templates/mail/server/lib/automation-engine.ts +3 -2
  161. package/corpus/templates/mail/server/lib/email-state.ts +2 -3
  162. package/corpus/templates/mail/server/lib/google-auth.ts +28 -11
  163. package/corpus/templates/mail/server/lib/jobs.ts +3 -2
  164. package/corpus/templates/mail/server/onboarding.ts +9 -6
  165. package/corpus/templates/mail/server/routes/api/attachments.get.ts +3 -3
  166. package/corpus/templates/plan/actions/request-plan-access.ts +1 -1
  167. package/corpus/templates/plan/app/components/layout/Header.tsx +0 -1
  168. package/corpus/templates/plan/app/hooks/use-navigation-state.ts +4 -2
  169. package/corpus/templates/plan/app/lib/route-prewarm.ts +0 -4
  170. package/corpus/templates/plan/app/routes/settings.tsx +75 -73
  171. package/corpus/templates/plan/app/routes/team.tsx +2 -8
  172. package/corpus/templates/plan/server/lib/comment-notifications.ts +1 -1
  173. package/corpus/templates/slides/actions/check-image-gen.ts +2 -1
  174. package/corpus/templates/slides/actions/db-connect.ts +7 -45
  175. package/corpus/templates/slides/actions/edit-image.ts +6 -3
  176. package/corpus/templates/slides/actions/generate-image-api.ts +1 -1
  177. package/corpus/templates/slides/actions/generate-image.ts +2 -2
  178. package/corpus/templates/slides/actions/generate-slides-ai.ts +5 -3
  179. package/corpus/templates/slides/actions/image-gen-status.ts +4 -3
  180. package/corpus/templates/slides/actions/image-search.ts +6 -3
  181. package/corpus/templates/slides/actions/search-images.ts +6 -3
  182. package/corpus/templates/slides/app/components/CloudUpgrade.tsx +8 -51
  183. package/corpus/templates/slides/app/components/layout/Header.tsx +0 -1
  184. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +0 -2
  185. package/corpus/templates/slides/app/routes/settings.tsx +54 -54
  186. package/corpus/templates/slides/app/routes/team.tsx +2 -12
  187. package/corpus/templates/slides/server/handlers/google-docs-auth.ts +9 -9
  188. package/corpus/templates/slides/server/handlers/image-gen.ts +5 -1
  189. package/corpus/templates/slides/server/handlers/image-providers/gemini.ts +9 -1
  190. package/corpus/templates/slides/server/handlers/image-providers/index.ts +18 -8
  191. package/corpus/templates/slides/server/handlers/image-providers/openai.ts +10 -4
  192. package/corpus/templates/slides/server/handlers/image-providers/types.ts +1 -0
  193. package/corpus/templates/slides/server/lib/google-docs-oauth.ts +59 -34
  194. package/corpus/templates/slides/server/register-secrets.ts +60 -0
  195. package/corpus/templates/videos/actions/db-connect.ts +7 -45
  196. package/corpus/templates/videos/app/components/CloudUpgrade.tsx +8 -51
  197. package/corpus/templates/videos/app/components/Sidebar.tsx +1 -9
  198. package/corpus/templates/videos/app/components/layout/Header.tsx +0 -1
  199. package/corpus/templates/videos/app/components/layout/NavSidebar.tsx +0 -3
  200. package/corpus/templates/videos/app/routes/settings.tsx +54 -54
  201. package/corpus/templates/videos/app/routes/team.tsx +2 -8
  202. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  203. package/dist/agent/engine/builder-engine.js +8 -3
  204. package/dist/agent/engine/builder-engine.js.map +1 -1
  205. package/dist/cli/mcp.d.ts.map +1 -1
  206. package/dist/cli/mcp.js +3 -4
  207. package/dist/cli/mcp.js.map +1 -1
  208. package/dist/client/AssistantChat.d.ts.map +1 -1
  209. package/dist/client/AssistantChat.js +6 -2
  210. package/dist/client/AssistantChat.js.map +1 -1
  211. package/dist/client/chat/markdown-renderer.d.ts.map +1 -1
  212. package/dist/client/chat/markdown-renderer.js +1 -0
  213. package/dist/client/chat/markdown-renderer.js.map +1 -1
  214. package/dist/client/index.d.ts +1 -1
  215. package/dist/client/index.d.ts.map +1 -1
  216. package/dist/client/index.js +1 -1
  217. package/dist/client/index.js.map +1 -1
  218. package/dist/client/org/OrgSwitcher.d.ts +3 -3
  219. package/dist/client/org/OrgSwitcher.js +2 -2
  220. package/dist/client/org/OrgSwitcher.js.map +1 -1
  221. package/dist/client/org/TeamPage.d.ts +6 -1
  222. package/dist/client/org/TeamPage.d.ts.map +1 -1
  223. package/dist/client/org/TeamPage.js +2 -2
  224. package/dist/client/org/TeamPage.js.map +1 -1
  225. package/dist/client/settings/SettingsTabsPage.d.ts +27 -0
  226. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -0
  227. package/dist/client/settings/SettingsTabsPage.js +108 -0
  228. package/dist/client/settings/SettingsTabsPage.js.map +1 -0
  229. package/dist/client/settings/index.d.ts +1 -0
  230. package/dist/client/settings/index.d.ts.map +1 -1
  231. package/dist/client/settings/index.js +1 -0
  232. package/dist/client/settings/index.js.map +1 -1
  233. package/dist/collab/routes.d.ts +1 -1
  234. package/dist/file-upload/actions/upload-image.d.ts +2 -2
  235. package/dist/file-upload/index.d.ts +1 -1
  236. package/dist/file-upload/index.d.ts.map +1 -1
  237. package/dist/file-upload/index.js +1 -1
  238. package/dist/file-upload/index.js.map +1 -1
  239. package/dist/file-upload/registry.d.ts +1 -0
  240. package/dist/file-upload/registry.d.ts.map +1 -1
  241. package/dist/file-upload/registry.js +24 -6
  242. package/dist/file-upload/registry.js.map +1 -1
  243. package/dist/file-upload/types.d.ts +6 -1
  244. package/dist/file-upload/types.d.ts.map +1 -1
  245. package/dist/file-upload/types.js.map +1 -1
  246. package/dist/integrations/adapters/email.d.ts.map +1 -1
  247. package/dist/integrations/adapters/email.js +18 -18
  248. package/dist/integrations/adapters/email.js.map +1 -1
  249. package/dist/integrations/adapters/slack.d.ts.map +1 -1
  250. package/dist/integrations/adapters/slack.js +8 -7
  251. package/dist/integrations/adapters/slack.js.map +1 -1
  252. package/dist/integrations/adapters/telegram.d.ts.map +1 -1
  253. package/dist/integrations/adapters/telegram.js +9 -9
  254. package/dist/integrations/adapters/telegram.js.map +1 -1
  255. package/dist/integrations/adapters/whatsapp.d.ts.map +1 -1
  256. package/dist/integrations/adapters/whatsapp.js +10 -9
  257. package/dist/integrations/adapters/whatsapp.js.map +1 -1
  258. package/dist/integrations/plugin.d.ts.map +1 -1
  259. package/dist/integrations/plugin.js +47 -13
  260. package/dist/integrations/plugin.js.map +1 -1
  261. package/dist/notifications/routes.d.ts +1 -1
  262. package/dist/observability/routes.d.ts +2 -2
  263. package/dist/onboarding/default-steps.d.ts.map +1 -1
  264. package/dist/onboarding/default-steps.js +6 -5
  265. package/dist/onboarding/default-steps.js.map +1 -1
  266. package/dist/onboarding/types.d.ts +1 -1
  267. package/dist/onboarding/types.d.ts.map +1 -1
  268. package/dist/onboarding/types.js.map +1 -1
  269. package/dist/org/handlers.js +1 -1
  270. package/dist/org/handlers.js.map +1 -1
  271. package/dist/progress/routes.d.ts +1 -1
  272. package/dist/resources/handlers.d.ts +3 -3
  273. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  274. package/dist/server/agent-chat-plugin.js +4 -6
  275. package/dist/server/agent-chat-plugin.js.map +1 -1
  276. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  277. package/dist/server/better-auth-instance.d.ts.map +1 -1
  278. package/dist/server/better-auth-instance.js +17 -56
  279. package/dist/server/better-auth-instance.js.map +1 -1
  280. package/dist/server/core-routes-plugin.d.ts +1 -1
  281. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  282. package/dist/server/core-routes-plugin.js +67 -153
  283. package/dist/server/core-routes-plugin.js.map +1 -1
  284. package/dist/server/create-server.d.ts +3 -9
  285. package/dist/server/create-server.d.ts.map +1 -1
  286. package/dist/server/create-server.js +37 -91
  287. package/dist/server/create-server.js.map +1 -1
  288. package/dist/server/email-actions.d.ts +2 -3
  289. package/dist/server/email-actions.d.ts.map +1 -1
  290. package/dist/server/email-actions.js +3 -6
  291. package/dist/server/email-actions.js.map +1 -1
  292. package/dist/server/email.d.ts +3 -3
  293. package/dist/server/email.d.ts.map +1 -1
  294. package/dist/server/email.js +40 -19
  295. package/dist/server/email.js.map +1 -1
  296. package/dist/server/index.d.ts +3 -3
  297. package/dist/server/index.d.ts.map +1 -1
  298. package/dist/server/index.js +3 -3
  299. package/dist/server/index.js.map +1 -1
  300. package/dist/server/scoped-key-storage.d.ts +22 -0
  301. package/dist/server/scoped-key-storage.d.ts.map +1 -0
  302. package/dist/server/scoped-key-storage.js +152 -0
  303. package/dist/server/scoped-key-storage.js.map +1 -0
  304. package/dist/server/transcribe-voice.d.ts +1 -1
  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 +47 -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,6 +1,5 @@
1
1
  #!/usr/bin/env tsx
2
2
 
3
- import crypto from "node:crypto";
4
3
  import fs from "node:fs";
5
4
  import path from "node:path";
6
5
 
@@ -10,8 +9,6 @@ interface Options {
10
9
  ownerEmail?: string;
11
10
  a2aSecret?: string;
12
11
  envPath: string;
13
- force: boolean;
14
- dryRun: boolean;
15
12
  setDispatchDefaultOwner: boolean;
16
13
  }
17
14
 
@@ -22,10 +19,10 @@ Options:
22
19
  --name <value> Sets WORKSPACE_ORG_NAME
23
20
  --domain <value> Sets WORKSPACE_ORG_DOMAIN
24
21
  --owner-email <value> Sets WORKSPACE_OWNER_EMAIL
25
- --a2a-secret <value> Sets A2A_SECRET (generated when omitted)
26
- --env <path> Env file to update (default: .env)
27
- --force Overwrite existing non-empty values
28
- --dry-run Print the changes without writing
22
+ --a2a-secret <value> Reads A2A_SECRET for validation
23
+ --env <path> Env file to read for fallback values (default: .env)
24
+ --force Accepted for compatibility; no file is written
25
+ --dry-run Accepted for compatibility; no file is written
29
26
  --set-dispatch-default-owner Also set DISPATCH_DEFAULT_OWNER_EMAIL
30
27
  `;
31
28
 
@@ -41,8 +38,6 @@ type RequiredKey = (typeof REQUIRED_KEYS)[number];
41
38
  function parseArgs(argv: string[]): Options {
42
39
  const opts: Options = {
43
40
  envPath: ".env",
44
- force: false,
45
- dryRun: false,
46
41
  setDispatchDefaultOwner: false,
47
42
  };
48
43
 
@@ -78,10 +73,8 @@ function parseArgs(argv: string[]): Options {
78
73
  opts.envPath = value();
79
74
  break;
80
75
  case "--force":
81
- opts.force = true;
82
76
  break;
83
77
  case "--dry-run":
84
- opts.dryRun = true;
85
78
  break;
86
79
  case "--set-dispatch-default-owner":
87
80
  opts.setDispatchDefaultOwner = true;
@@ -147,47 +140,6 @@ function validateEmail(email: string): void {
147
140
  }
148
141
  }
149
142
 
150
- function formatEnvValue(value: string): string {
151
- if (/^[A-Za-z0-9_@./:+-]+$/.test(value)) return value;
152
- return JSON.stringify(value);
153
- }
154
-
155
- function upsertEnvValue(
156
- content: string,
157
- key: string,
158
- value: string,
159
- force: boolean,
160
- ): { content: string; changed: boolean; skipped: boolean } {
161
- const lines = content.length > 0 ? content.split(/\r?\n/) : [];
162
- let found = false;
163
- let changed = false;
164
- let skipped = false;
165
-
166
- const next = lines.map((line) => {
167
- const match = line.match(/^(\s*)([A-Z0-9_]+)(\s*=\s*)(.*)$/);
168
- if (!match || match[2] !== key) return line;
169
-
170
- found = true;
171
- const existing = unquote(match[4]);
172
- if (existing && !force) {
173
- skipped = true;
174
- return line;
175
- }
176
-
177
- const replacement = `${match[1]}${key}${match[3]}${formatEnvValue(value)}`;
178
- if (replacement !== line) changed = true;
179
- return replacement;
180
- });
181
-
182
- if (!found) {
183
- if (next.length > 0 && next[next.length - 1] !== "") next.push("");
184
- next.push(`${key}=${formatEnvValue(value)}`);
185
- changed = true;
186
- }
187
-
188
- return { content: next.join("\n"), changed, skipped };
189
- }
190
-
191
143
  function firstValue(...values: Array<string | undefined>): string | undefined {
192
144
  return values.map((v) => v?.trim()).find(Boolean);
193
145
  }
@@ -213,13 +165,21 @@ function main(): void {
213
165
  process.env.WORKSPACE_OWNER_EMAIL,
214
166
  current.WORKSPACE_OWNER_EMAIL,
215
167
  )?.toLowerCase();
216
- const a2aSecret =
217
- firstValue(opts.a2aSecret, process.env.A2A_SECRET, current.A2A_SECRET) ??
218
- crypto.randomBytes(32).toString("hex");
168
+ const a2aSecret = firstValue(
169
+ opts.a2aSecret,
170
+ process.env.A2A_SECRET,
171
+ current.A2A_SECRET,
172
+ );
219
173
 
220
174
  if (!name) fail("--name or WORKSPACE_ORG_NAME is required.");
221
175
  if (!rawDomain) fail("--domain or WORKSPACE_ORG_DOMAIN is required.");
222
176
  if (!ownerEmail) fail("--owner-email or WORKSPACE_OWNER_EMAIL is required.");
177
+ if (!a2aSecret) {
178
+ fail(
179
+ "--a2a-secret or A2A_SECRET is required. This script reads existing " +
180
+ "configuration but does not write env files.",
181
+ );
182
+ }
223
183
 
224
184
  const domain = normalizeDomain(rawDomain);
225
185
  validateDomain(domain);
@@ -232,52 +192,31 @@ function main(): void {
232
192
  A2A_SECRET: a2aSecret,
233
193
  };
234
194
 
235
- let next = original.trimEnd();
236
- const changed: string[] = [];
237
- const skipped: string[] = [];
238
-
239
- for (const key of REQUIRED_KEYS) {
240
- const result = upsertEnvValue(next, key, desired[key], opts.force);
241
- next = result.content;
242
- if (result.changed) changed.push(key);
243
- if (result.skipped) skipped.push(key);
244
- }
245
-
195
+ const displayEntries: Array<[string, string]> = REQUIRED_KEYS.map((key) => [
196
+ key,
197
+ key === "A2A_SECRET" ? "[configured]" : desired[key],
198
+ ]);
246
199
  if (opts.setDispatchDefaultOwner) {
247
- const result = upsertEnvValue(
248
- next,
249
- "DISPATCH_DEFAULT_OWNER_EMAIL",
250
- ownerEmail,
251
- opts.force,
252
- );
253
- next = result.content;
254
- if (result.changed) changed.push("DISPATCH_DEFAULT_OWNER_EMAIL");
255
- if (result.skipped) skipped.push("DISPATCH_DEFAULT_OWNER_EMAIL");
256
- }
257
-
258
- next = next.trimEnd() + "\n";
259
-
260
- if (opts.dryRun) {
261
- console.log(next);
262
- } else {
263
- fs.writeFileSync(envPath, next);
200
+ displayEntries.push(["DISPATCH_DEFAULT_OWNER_EMAIL", ownerEmail]);
264
201
  }
265
202
 
266
203
  console.log(
267
- `${opts.dryRun ? "Validated" : "Updated"} ${path.relative(process.cwd(), envPath) || envPath}.`,
204
+ `Validated workspace org settings from ${path.relative(process.cwd(), envPath) || envPath}.`,
268
205
  );
269
- if (changed.length > 0) console.log(`Changed: ${changed.join(", ")}`);
270
- if (skipped.length > 0) {
271
- console.log(
272
- `Kept existing values: ${skipped.join(", ")} (use --force to overwrite)`,
273
- );
206
+ console.log("No env files were written.");
207
+ console.log("");
208
+ console.log("Resolved configuration:");
209
+ for (const [key, value] of displayEntries) {
210
+ console.log(`- ${key}: ${value}`);
274
211
  }
275
212
  console.log("");
276
213
  console.log("Next steps:");
277
214
  console.log("1. Sign in as WORKSPACE_OWNER_EMAIL.");
278
215
  console.log("2. Create or select the org named by WORKSPACE_ORG_NAME.");
279
216
  console.log("3. Set the org allowed domain to WORKSPACE_ORG_DOMAIN.");
280
- console.log("4. Set or sync the org A2A secret from A2A_SECRET across apps.");
217
+ console.log(
218
+ "4. Configure A2A_SECRET through the scoped secret/deployment secret manager for apps that need cross-app A2A.",
219
+ );
281
220
  }
282
221
 
283
222
  main();
@@ -30,14 +30,6 @@ async function getChildProcess(): Promise<typeof import("child_process")> {
30
30
  return _cp;
31
31
  }
32
32
 
33
- let _fs: typeof import("fs") | undefined;
34
- async function getFs(): Promise<typeof import("fs")> {
35
- if (!_fs) {
36
- _fs = await import("node:fs");
37
- }
38
- return _fs;
39
- }
40
-
41
33
  /**
42
34
  * Kill a process and all its descendants.
43
35
  * node-pty's kill() only sends a signal to the shell, but child processes
@@ -314,10 +306,10 @@ export async function createPtyWebSocketServer(
314
306
  msg.type === "agentNative.setEnvVars" &&
315
307
  Array.isArray(msg.data?.vars)
316
308
  ) {
317
- const envPath = path.join(resolvedAppDir, ".env");
318
309
  const vars: Array<{ key: string; value: string }> = msg.data.vars;
319
310
 
320
- // Validate env var names and sanitize values
311
+ // Legacy bridge message. Keep validating the keys, but do not persist
312
+ // them to .env or process.env; key storage is DB-scoped.
321
313
  const validKeyPattern = /^[A-Za-z_][A-Za-z0-9_]*$/;
322
314
  const sanitizedVars = vars.filter(({ key }) => {
323
315
  if (!validKeyPattern.test(key)) {
@@ -327,39 +319,12 @@ export async function createPtyWebSocketServer(
327
319
  return true;
328
320
  });
329
321
 
330
- const fs = await getFs();
331
- let lines: string[] = [];
332
- try {
333
- lines = fs.readFileSync(envPath, "utf-8").split("\n");
334
- } catch {}
335
-
336
- for (const { key, value } of sanitizedVars) {
337
- // Strip newlines/null bytes to prevent line injection
338
- const safeValue = value.replace(/[\r\n\0]/g, "");
339
- // Quote values containing #, spaces, or quotes so dotenv parses correctly
340
- const needsQuoting = /[# "']/.test(safeValue);
341
- const quotedValue = needsQuoting
342
- ? `"${safeValue.replace(/"/g, '\\"')}"`
343
- : safeValue;
344
- const idx = lines.findIndex((l) => l.startsWith(`${key}=`));
345
- const entry = `${key}=${quotedValue}`;
346
- if (idx !== -1) {
347
- lines[idx] = entry;
348
- } else {
349
- lines.push(entry);
350
- }
351
- }
352
-
353
- while (lines.length > 0 && lines[lines.length - 1] === "") {
354
- lines.pop();
355
- }
356
- fs.writeFileSync(envPath, lines.join("\n") + "\n", "utf-8");
357
-
358
322
  if (ws.readyState === WebSocket.OPEN) {
359
323
  ws.send(
360
324
  JSON.stringify({
361
325
  type: "env-vars-saved",
362
326
  keys: sanitizedVars.map((v) => v.key),
327
+ storage: "scoped-secrets",
363
328
  }),
364
329
  );
365
330
  }
@@ -257,8 +257,7 @@ async function handleEvent(
257
257
  // Resolve API key for condition evaluation
258
258
  const owner = meta.createdBy || resource.owner;
259
259
  const userApiKey = await getOwnerActiveApiKey(owner);
260
- const apiKey =
261
- userApiKey || _deps.apiKey || process.env.ANTHROPIC_API_KEY;
260
+ const apiKey = userApiKey || _deps.apiKey;
262
261
  if (!apiKey) {
263
262
  console.warn(
264
263
  `[triggers] No API key for trigger "${resource.path}" — skipping`,
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "issues",
3
+ "private": true,
4
+ "scripts": {
5
+ "build": "node ../../../scripts/build-retired-netlify-site.ts issues"
6
+ }
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "meeting-notes",
3
+ "private": true,
4
+ "scripts": {
5
+ "build": "node ../../../scripts/build-retired-netlify-site.ts meeting-notes"
6
+ }
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "recruiting",
3
+ "private": true,
4
+ "scripts": {
5
+ "build": "node ../../../scripts/build-retired-netlify-site.ts recruiting"
6
+ }
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "scheduling",
3
+ "private": true,
4
+ "scripts": {
5
+ "build": "node ../../../scripts/build-retired-netlify-site.ts scheduling"
6
+ }
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "voice",
3
+ "private": true,
4
+ "scripts": {
5
+ "build": "node ../../../scripts/build-retired-netlify-site.ts voice"
6
+ }
7
+ }
@@ -21,7 +21,6 @@ const pageTitleKeys: Record<string, string> = {
21
21
  "/analyses": "navigation.analyses",
22
22
  "/sessions": "navigation.sessions",
23
23
  "/dashboards/explorer": "navigation.explorer",
24
- "/team": "navigation.team",
25
24
  "/settings": "navigation.settings",
26
25
  };
27
26
 
@@ -10,11 +10,9 @@ import {
10
10
  IconGripVertical,
11
11
  IconBook2,
12
12
  IconDatabase,
13
- IconUsers,
14
13
  IconReportAnalytics,
15
14
  IconSearch,
16
15
  IconArchive,
17
- IconTemplate,
18
16
  IconBuilding,
19
17
  IconLock,
20
18
  IconLink,
@@ -144,7 +142,6 @@ import {
144
142
  import { CSS } from "@dnd-kit/utilities";
145
143
 
146
144
  const bottomItems = [
147
- { icon: IconUsers, labelKey: "navigation.team", href: "/team" },
148
145
  { icon: IconSettings, labelKey: "navigation.settings", href: "/settings" },
149
146
  ];
150
147
 
@@ -1962,20 +1959,6 @@ export function Sidebar({ mobile }: { mobile?: boolean } = {}) {
1962
1959
  {t("navigation.dataDictionary")}
1963
1960
  </Link>
1964
1961
 
1965
- {/* Catalog link */}
1966
- <Link
1967
- to="/catalog"
1968
- className={cn(
1969
- "flex items-center gap-3 rounded-lg px-3 py-2 transition-all hover:text-primary",
1970
- location.pathname === "/catalog"
1971
- ? "bg-sidebar-accent text-sidebar-accent-foreground"
1972
- : "text-muted-foreground hover:bg-sidebar-accent/50",
1973
- )}
1974
- >
1975
- <IconTemplate className="h-4 w-4" />
1976
- {t("navigation.templateCatalog")}
1977
- </Link>
1978
-
1979
1962
  {/* Dashboards section */}
1980
1963
  <div className="group/section min-w-0 space-y-1">
1981
1964
  <div
@@ -1,4 +1,7 @@
1
1
  const messages = {
2
+ root: {
3
+ whatsNew: "最新消息",
4
+ },
2
5
  navigation: {
3
6
  brand: "Analytics",
4
7
  ask: "提問",
@@ -102,6 +105,9 @@ const messages = {
102
105
  credentials: "資料來源憑證",
103
106
  credentialsDescription: "API 金鑰和憑證在資料來源頁面管理。",
104
107
  manageDataSources: "管理資料來源",
108
+ dashboardTemplates: "儀表板範本",
109
+ dashboardTemplatesDescription: "需要起點時,可安裝來源程式碼控制的儀表板。",
110
+ openDashboardTemplates: "開啟目錄",
105
111
  languageTitle: "語言",
106
112
  languageLabel: "介面語言",
107
113
  about: "關於",
@@ -795,7 +801,7 @@ const messages = {
795
801
  time: "時間",
796
802
  },
797
803
  catalog: {
798
- description: "來源程式碼控制的儀表板可隨時安裝到您的工作空間中。",
804
+ description: "需要起點時,可安裝儀表板範本。",
799
805
  noTemplatesFound: "沒有找到範本",
800
806
  tryDifferentCategory: "嘗試不同的目錄類別。",
801
807
  templatesCount: "{{count}} 個範本",
@@ -3,6 +3,9 @@ import type { LocaleCode } from "@agent-native/core/client";
3
3
  import zhTW from "./i18n/zh-TW";
4
4
 
5
5
  const enUS = {
6
+ root: {
7
+ whatsNew: "What's new",
8
+ },
6
9
  navigation: {
7
10
  brand: "Analytics",
8
11
  ask: "Ask",
@@ -135,6 +138,10 @@ const enUS = {
135
138
  credentialsDescription:
136
139
  "API keys and credentials are managed on the Data Sources page.",
137
140
  manageDataSources: "Manage Data Sources",
141
+ dashboardTemplates: "Dashboard templates",
142
+ dashboardTemplatesDescription:
143
+ "Install a source-controlled dashboard when you need a starting point.",
144
+ openDashboardTemplates: "Open catalog",
138
145
  languageTitle: "Language",
139
146
  languageLabel: "Interface language",
140
147
  about: "About",
@@ -832,8 +839,7 @@ const enUS = {
832
839
  time: "Time",
833
840
  },
834
841
  catalog: {
835
- description:
836
- "Source-controlled dashboards ready to install into your workspace.",
842
+ description: "Install a dashboard template when you need a starting point.",
837
843
  noTemplatesFound: "No templates found",
838
844
  tryDifferentCategory: "Try a different catalog category.",
839
845
  templatesCount: "{{count}} templates",
@@ -3327,6 +3333,7 @@ function mergeMessages(overrides: {
3327
3333
  [K in Section]?: Partial<Messages[K]>;
3328
3334
  }): Messages {
3329
3335
  return {
3336
+ root: { ...enUS.root, ...overrides.root },
3330
3337
  navigation: { ...enUS.navigation, ...overrides.navigation },
3331
3338
  dashboardHeader: { ...enUS.dashboardHeader, ...overrides.dashboardHeader },
3332
3339
  sidebar: { ...enUS.sidebar, ...overrides.sidebar },
@@ -3368,6 +3375,9 @@ export const messagesByLocale = {
3368
3375
  "zh-TW": mergeMessages(zhTW),
3369
3376
  "zh-CN": mergeMessages({
3370
3377
  ...analyticsSliceTranslations["zh-CN"],
3378
+ root: {
3379
+ whatsNew: "新增内容",
3380
+ },
3371
3381
  navigation: {
3372
3382
  brand: "Analytics",
3373
3383
  ask: "提问",
@@ -3494,6 +3504,9 @@ export const messagesByLocale = {
3494
3504
  credentials: "数据源凭据",
3495
3505
  credentialsDescription: "API 密钥和凭据在数据源页面管理。",
3496
3506
  manageDataSources: "管理数据源",
3507
+ dashboardTemplates: "仪表板模板",
3508
+ dashboardTemplatesDescription: "需要起点时,安装受源码管理的仪表板。",
3509
+ openDashboardTemplates: "打开目录",
3497
3510
  languageTitle: "语言",
3498
3511
  languageLabel: "界面语言",
3499
3512
  about: "关于",
@@ -3537,6 +3550,9 @@ export const messagesByLocale = {
3537
3550
  }),
3538
3551
  "es-ES": mergeMessages({
3539
3552
  ...analyticsSliceTranslations["es-ES"],
3553
+ root: {
3554
+ whatsNew: "Novedades",
3555
+ },
3540
3556
  navigation: {
3541
3557
  ask: "Preguntar",
3542
3558
  overview: "Resumen",
@@ -3667,6 +3683,10 @@ export const messagesByLocale = {
3667
3683
  credentialsDescription:
3668
3684
  "Las claves API y credenciales se gestionan en la página Fuentes de datos.",
3669
3685
  manageDataSources: "Gestionar fuentes de datos",
3686
+ dashboardTemplates: "Plantillas de paneles",
3687
+ dashboardTemplatesDescription:
3688
+ "Instala un panel controlado por código fuente cuando necesites un punto de partida.",
3689
+ openDashboardTemplates: "Abrir catálogo",
3670
3690
  languageTitle: "Idioma",
3671
3691
  languageLabel: "Idioma de la interfaz",
3672
3692
  about: "Acerca de",
@@ -3712,6 +3732,9 @@ export const messagesByLocale = {
3712
3732
  }),
3713
3733
  "fr-FR": mergeMessages({
3714
3734
  ...analyticsSliceTranslations["fr-FR"],
3735
+ root: {
3736
+ whatsNew: "Nouveautés",
3737
+ },
3715
3738
  navigation: {
3716
3739
  ask: "Demander",
3717
3740
  overview: "Vue d'ensemble",
@@ -3843,6 +3866,10 @@ export const messagesByLocale = {
3843
3866
  credentialsDescription:
3844
3867
  "Les clés API et identifiants sont gérés sur la page Sources de données.",
3845
3868
  manageDataSources: "Gérer les sources de données",
3869
+ dashboardTemplates: "Modèles de tableaux de bord",
3870
+ dashboardTemplatesDescription:
3871
+ "Installez un tableau de bord suivi dans le code source lorsque vous avez besoin d'un point de départ.",
3872
+ openDashboardTemplates: "Ouvrir le catalogue",
3846
3873
  languageTitle: "Langue",
3847
3874
  languageLabel: "Langue de l'interface",
3848
3875
  about: "À propos",
@@ -3893,6 +3920,9 @@ export const messagesByLocale = {
3893
3920
  }),
3894
3921
  "de-DE": mergeMessages({
3895
3922
  ...analyticsSliceTranslations["de-DE"],
3923
+ root: {
3924
+ whatsNew: "Neuigkeiten",
3925
+ },
3896
3926
  navigation: {
3897
3927
  ask: "Fragen",
3898
3928
  overview: "Übersicht",
@@ -4028,6 +4058,10 @@ export const messagesByLocale = {
4028
4058
  credentialsDescription:
4029
4059
  "API-Schlüssel und Anmeldedaten werden auf der Seite Datenquellen verwaltet.",
4030
4060
  manageDataSources: "Datenquellen verwalten",
4061
+ dashboardTemplates: "Dashboard-Vorlagen",
4062
+ dashboardTemplatesDescription:
4063
+ "Installiere ein quellkontrolliertes Dashboard, wenn du einen Ausgangspunkt brauchst.",
4064
+ openDashboardTemplates: "Katalog öffnen",
4031
4065
  languageTitle: "Sprache",
4032
4066
  languageLabel: "Oberflächensprache",
4033
4067
  about: "Info",
@@ -4074,6 +4108,9 @@ export const messagesByLocale = {
4074
4108
  }),
4075
4109
  "ja-JP": mergeMessages({
4076
4110
  ...analyticsSliceTranslations["ja-JP"],
4111
+ root: {
4112
+ whatsNew: "新着情報",
4113
+ },
4077
4114
  navigation: {
4078
4115
  ask: "質問",
4079
4116
  overview: "概要",
@@ -4205,6 +4242,10 @@ export const messagesByLocale = {
4205
4242
  credentialsDescription:
4206
4243
  "API キーと認証情報はデータソースページで管理します。",
4207
4244
  manageDataSources: "データソースを管理",
4245
+ dashboardTemplates: "ダッシュボードテンプレート",
4246
+ dashboardTemplatesDescription:
4247
+ "出発点が必要なときは、ソース管理されたダッシュボードをインストールします。",
4248
+ openDashboardTemplates: "カタログを開く",
4208
4249
  languageTitle: "言語",
4209
4250
  languageLabel: "インターフェース言語",
4210
4251
  about: "概要",
@@ -4251,6 +4292,9 @@ export const messagesByLocale = {
4251
4292
  }),
4252
4293
  "ko-KR": mergeMessages({
4253
4294
  ...analyticsSliceTranslations["ko-KR"],
4295
+ root: {
4296
+ whatsNew: "새로운 기능",
4297
+ },
4254
4298
  navigation: {
4255
4299
  ask: "질문",
4256
4300
  overview: "개요",
@@ -4382,6 +4426,10 @@ export const messagesByLocale = {
4382
4426
  credentialsDescription:
4383
4427
  "API 키와 자격 증명은 데이터 소스 페이지에서 관리합니다.",
4384
4428
  manageDataSources: "데이터 소스 관리",
4429
+ dashboardTemplates: "대시보드 템플릿",
4430
+ dashboardTemplatesDescription:
4431
+ "시작점이 필요할 때 소스 제어된 대시보드를 설치하세요.",
4432
+ openDashboardTemplates: "카탈로그 열기",
4385
4433
  languageTitle: "언어",
4386
4434
  languageLabel: "인터페이스 언어",
4387
4435
  about: "정보",
@@ -4427,6 +4475,9 @@ export const messagesByLocale = {
4427
4475
  }),
4428
4476
  "pt-BR": mergeMessages({
4429
4477
  ...analyticsSliceTranslations["pt-BR"],
4478
+ root: {
4479
+ whatsNew: "Novidades",
4480
+ },
4430
4481
  navigation: {
4431
4482
  ask: "Perguntar",
4432
4483
  overview: "Visão geral",
@@ -4560,6 +4611,10 @@ export const messagesByLocale = {
4560
4611
  credentialsDescription:
4561
4612
  "Chaves de API e credenciais são gerenciadas na página Fontes de dados.",
4562
4613
  manageDataSources: "Gerenciar fontes de dados",
4614
+ dashboardTemplates: "Modelos de dashboard",
4615
+ dashboardTemplatesDescription:
4616
+ "Instale um dashboard controlado por código-fonte quando precisar de um ponto de partida.",
4617
+ openDashboardTemplates: "Abrir catálogo",
4563
4618
  languageTitle: "Idioma",
4564
4619
  languageLabel: "Idioma da interface",
4565
4620
  about: "Sobre",
@@ -4608,6 +4663,9 @@ export const messagesByLocale = {
4608
4663
  }),
4609
4664
  "hi-IN": mergeMessages({
4610
4665
  ...analyticsSliceTranslations["hi-IN"],
4666
+ root: {
4667
+ whatsNew: "नया क्या है",
4668
+ },
4611
4669
  navigation: {
4612
4670
  ask: "पूछें",
4613
4671
  overview: "अवलोकन",
@@ -4736,6 +4794,10 @@ export const messagesByLocale = {
4736
4794
  credentialsDescription:
4737
4795
  "API कुंजियां और क्रेडेंशियल डेटा स्रोत पेज पर प्रबंधित होते हैं।",
4738
4796
  manageDataSources: "डेटा स्रोत प्रबंधित करें",
4797
+ dashboardTemplates: "डैशबोर्ड टेम्पलेट",
4798
+ dashboardTemplatesDescription:
4799
+ "जब आपको शुरुआत का आधार चाहिए, तो स्रोत-नियंत्रित डैशबोर्ड इंस्टॉल करें।",
4800
+ openDashboardTemplates: "कैटलॉग खोलें",
4739
4801
  languageTitle: "भाषा",
4740
4802
  languageLabel: "इंटरफ़ेस भाषा",
4741
4803
  about: "परिचय",
@@ -4782,6 +4844,9 @@ export const messagesByLocale = {
4782
4844
  }),
4783
4845
  "ar-SA": mergeMessages({
4784
4846
  ...analyticsSliceTranslations["ar-SA"],
4847
+ root: {
4848
+ whatsNew: "ما الجديد",
4849
+ },
4785
4850
  navigation: {
4786
4851
  ask: "اسأل",
4787
4852
  overview: "نظرة عامة",
@@ -4910,6 +4975,10 @@ export const messagesByLocale = {
4910
4975
  credentialsDescription:
4911
4976
  "تتم إدارة مفاتيح API وبيانات الاعتماد من صفحة مصادر البيانات.",
4912
4977
  manageDataSources: "إدارة مصادر البيانات",
4978
+ dashboardTemplates: "قوالب لوحات المعلومات",
4979
+ dashboardTemplatesDescription:
4980
+ "ثبّت لوحة معلومات مضبوطة في المصدر عندما تحتاج إلى نقطة بداية.",
4981
+ openDashboardTemplates: "افتح الكتالوج",
4913
4982
  languageTitle: "اللغة",
4914
4983
  languageLabel: "لغة الواجهة",
4915
4984
  about: "حول",