@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
@@ -55,6 +55,8 @@
55
55
  --agent-native-lower-surface: hsl(
56
56
  var(--sidebar-background, var(--background))
57
57
  );
58
+ --agent-native-raised-surface: hsl(var(--background));
59
+ --agent-native-card-surface: hsl(var(--card));
58
60
  --agent-native-raised-border: hsl(var(--border));
59
61
  --agent-native-raised-radius: 8px;
60
62
  --agent-native-raised-shadow-left: -1px 0 3px rgb(0 0 0 / 0.018);
@@ -86,6 +88,16 @@
86
88
  hsl(var(--sidebar-background, var(--background))) 94%,
87
89
  black
88
90
  );
91
+ --agent-native-raised-surface: color-mix(
92
+ in srgb,
93
+ hsl(var(--background)) 78%,
94
+ hsl(var(--muted)) 22%
95
+ );
96
+ --agent-native-card-surface: color-mix(
97
+ in srgb,
98
+ var(--agent-native-raised-surface) 88%,
99
+ hsl(var(--muted)) 12%
100
+ );
89
101
  }
90
102
  }
91
103
 
@@ -126,7 +138,7 @@
126
138
  .agent-sidebar-main-surface {
127
139
  position: relative;
128
140
  z-index: 1;
129
- background: hsl(var(--background));
141
+ background: var(--agent-native-raised-surface);
130
142
  transition:
131
143
  border-radius 260ms cubic-bezier(0.32, 0.72, 0, 1),
132
144
  border-color 260ms cubic-bezier(0.32, 0.72, 0, 1),
@@ -136,17 +148,49 @@
136
148
  .agent-layout-shell
137
149
  :where(.agent-layout-main-surface, .agent-sidebar-main-surface)
138
150
  > :first-child
139
- > :where(header, div).border-b:first-child,
151
+ > :where(header, div).border-b,
140
152
  .agent-layout-shell
141
153
  :where(.agent-layout-main-surface, .agent-sidebar-main-surface)
142
- > :where(header, div).border-b:first-child,
154
+ > :where(header, div).border-b,
143
155
  .agent-layout-shell
144
156
  .agent-layout-left-drawer
145
157
  > :where(header, div).border-b:first-child,
158
+ .agent-layout-shell
159
+ .agent-layout-left-drawer
160
+ > :first-child
161
+ > :where(header, div).border-b,
146
162
  .agent-layout-shell .agent-native-shell-topbar {
147
163
  border-bottom-color: transparent !important;
148
164
  }
149
165
 
166
+ .agent-layout-shell
167
+ :where(.agent-layout-main-surface, .agent-sidebar-main-surface)
168
+ > :first-child
169
+ > :where(header, div).border-b,
170
+ .agent-layout-shell
171
+ :where(.agent-layout-main-surface, .agent-sidebar-main-surface)
172
+ > :where(header, div).border-b {
173
+ background-color: var(--agent-native-raised-surface) !important;
174
+ }
175
+
176
+ .agent-layout-shell
177
+ :where(.agent-layout-main-surface, .agent-sidebar-main-surface)
178
+ > :first-child
179
+ > :where(header, div).border-b.h-12,
180
+ .agent-layout-shell
181
+ :where(.agent-layout-main-surface, .agent-sidebar-main-surface)
182
+ > :where(header, div).border-b.h-12 {
183
+ min-height: 4rem;
184
+ height: 4rem;
185
+ }
186
+
187
+ .dark
188
+ .agent-layout-shell
189
+ :where(.agent-layout-main-surface, .agent-sidebar-main-surface)
190
+ :where(.bg-card) {
191
+ background-color: var(--agent-native-card-surface) !important;
192
+ }
193
+
150
194
  @media (min-width: 768px) {
151
195
  .agent-layout-main-surface,
152
196
  .agent-layout-shell > .agent-sidebar-shell > .agent-sidebar-main-surface {
@@ -170,7 +170,8 @@ Use the workspace root `.env` for shared identity and cross-app trust settings:
170
170
  - `WORKSPACE_OWNER_EMAIL` — initial owner/admin email for repairs and
171
171
  integration defaults.
172
172
  - `A2A_SECRET` — shared secret for cross-app A2A signing. Generate with
173
- `openssl rand -hex 32` or `pnpm repair:workspace-org -- --name ...`.
173
+ `openssl rand -hex 32` and configure through your deployment/scoped secret
174
+ manager.
174
175
 
175
176
  `DISPATCH_DEFAULT_OWNER_EMAIL` is optional. Set it only for trusted,
176
177
  single-workspace deployments where unlinked integration requests should run as
@@ -183,7 +184,7 @@ When asked to repair workspace org or A2A configuration:
183
184
  1. Read `.env` first. Do not infer the organization, domain, owner email, or
184
185
  secret from old examples.
185
186
  2. Run `pnpm repair:workspace-org -- --name "<org>" --domain example.com --owner-email owner@example.com`
186
- to create or update generic workspace identity values.
187
+ to validate generic workspace identity values without writing `.env`.
187
188
  3. Prefer the app's organization settings UI or authenticated org routes for
188
189
  changing `allowed_domain` and `a2a_secret`.
189
190
  4. If direct SQL is unavoidable, inspect the live schema first and use only
@@ -97,7 +97,7 @@ cross-app trust:
97
97
  - `A2A_SECRET` — shared signing secret for cross-app A2A calls.
98
98
 
99
99
  Run `pnpm repair:workspace-org -- --name "<org>" --domain example.com --owner-email owner@example.com`
100
- to fill or validate those values without committing secrets. Existing
100
+ to validate those values without writing env files. Existing
101
101
  organization rows should still be repaired through the app's org settings UI or
102
102
  authenticated org routes whenever possible.
103
103
 
@@ -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
@@ -2280,7 +2263,7 @@ export function Sidebar({ mobile }: { mobile?: boolean } = {}) {
2280
2263
  <LanguagePicker
2281
2264
  variant="icon"
2282
2265
  label={t("settings.languageLabel")}
2283
- className="[&_[role=combobox]]:rounded-lg [&_[role=combobox]]:border-0 [&_[role=combobox]]:bg-transparent [&_[role=combobox]]:text-muted-foreground [&_[role=combobox]]:hover:bg-sidebar-accent/50 [&_[role=combobox]]:hover:text-primary"
2266
+ className="[&_[data-language-picker-trigger]]:rounded-lg [&_[data-language-picker-trigger]]:border-0 [&_[data-language-picker-trigger]]:bg-transparent [&_[data-language-picker-trigger]]:text-muted-foreground [&_[data-language-picker-trigger]]:hover:bg-sidebar-accent/50 [&_[data-language-picker-trigger]]:hover:text-primary"
2284
2267
  />
2285
2268
  </div>
2286
2269
  </div>
@@ -146,6 +146,19 @@
146
146
  display: none;
147
147
  }
148
148
 
149
+ .dark .analytics-ask-page {
150
+ background: hsl(var(--secondary) / 0.38);
151
+ }
152
+
153
+ .dark .analytics-ask-page .analytics-chat-panel {
154
+ background: transparent;
155
+ }
156
+
157
+ .dark .agent-sidebar-panel[data-agent-sidebar-layout="desktop"],
158
+ .dark .agent-sidebar-panel[data-agent-sidebar-layout="mobile"] {
159
+ background: #000 !important;
160
+ }
161
+
149
162
  .analytics-chat-panel
150
163
  [data-agent-empty-state="centered"]
151
164
  .analytics-chat-intro {
@@ -236,9 +249,11 @@
236
249
  }
237
250
 
238
251
  .dark
252
+ .analytics-ask-page
239
253
  .analytics-chat-panel
240
254
  [data-agent-empty-state="centered"]
241
255
  .agent-composer-root {
256
+ background: hsl(var(--secondary) / 0.72);
242
257
  box-shadow: none;
243
258
  }
244
259
 
@@ -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}} 個範本",