@agent-native/core 0.75.5 → 0.76.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (427) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +7 -0
  3. package/corpus/core/docs/AGENTS.md +1 -0
  4. package/corpus/core/docs/content/client.md +15 -0
  5. package/corpus/core/docs/content/internationalization.md +145 -0
  6. package/corpus/core/docs/content/locales/ar-SA/internationalization.md +102 -0
  7. package/corpus/core/docs/content/locales/de-DE/internationalization.md +102 -0
  8. package/corpus/core/docs/content/locales/es-ES/internationalization.md +102 -0
  9. package/corpus/core/docs/content/locales/fr-FR/internationalization.md +102 -0
  10. package/corpus/core/docs/content/locales/hi-IN/internationalization.md +102 -0
  11. package/corpus/core/docs/content/locales/ja-JP/internationalization.md +114 -0
  12. package/corpus/core/docs/content/locales/ko-KR/internationalization.md +102 -0
  13. package/corpus/core/docs/content/locales/pt-BR/internationalization.md +102 -0
  14. package/corpus/core/docs/content/locales/zh-CN/internationalization.md +102 -0
  15. package/corpus/core/docs/content/skills-guide.md +19 -18
  16. package/corpus/core/package.json +7 -1
  17. package/corpus/core/src/client/CommandMenu.tsx +16 -0
  18. package/corpus/core/src/client/app-providers.tsx +26 -1
  19. package/corpus/core/src/client/i18n.tsx +605 -0
  20. package/corpus/core/src/client/index.ts +28 -0
  21. package/corpus/core/src/index.browser.ts +25 -0
  22. package/corpus/core/src/localization/actions/get-localization-preference.ts +23 -0
  23. package/corpus/core/src/localization/actions/set-localization-preference.ts +30 -0
  24. package/corpus/core/src/localization/index.ts +2 -0
  25. package/corpus/core/src/localization/server.ts +131 -0
  26. package/corpus/core/src/localization/shared.ts +163 -0
  27. package/corpus/core/src/server/action-discovery.ts +8 -0
  28. package/corpus/core/src/server/index.ts +8 -0
  29. package/corpus/core/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  30. package/corpus/core/src/templates/default/.agents/skills/internationalization/SKILL.md +77 -0
  31. package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +6 -0
  32. package/corpus/core/src/templates/default/AGENTS.md +16 -15
  33. package/corpus/core/src/templates/default/app/i18n/en-US.ts +29 -0
  34. package/corpus/core/src/templates/default/app/i18n/index.ts +13 -0
  35. package/corpus/core/src/templates/default/app/root.tsx +20 -1
  36. package/corpus/core/src/templates/default/app/routes/_index.tsx +24 -9
  37. package/corpus/core/src/templates/default/app/routes/settings.tsx +67 -0
  38. package/corpus/core/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  39. package/corpus/core/src/templates/workspace-core/.agents/skills/internationalization/SKILL.md +77 -0
  40. package/corpus/core/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +6 -0
  41. package/corpus/core/src/vite/action-types-plugin.ts +10 -0
  42. package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +6 -0
  43. package/corpus/templates/analytics/app/components/layout/Header.tsx +18 -15
  44. package/corpus/templates/analytics/app/components/layout/Layout.tsx +7 -5
  45. package/corpus/templates/analytics/app/components/layout/MobileNav.tsx +9 -3
  46. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +5 -3
  47. package/corpus/templates/analytics/app/i18n/ar-SA.ts +3 -0
  48. package/corpus/templates/analytics/app/i18n/de-DE.ts +3 -0
  49. package/corpus/templates/analytics/app/i18n/en-US.ts +3 -0
  50. package/corpus/templates/analytics/app/i18n/es-ES.ts +3 -0
  51. package/corpus/templates/analytics/app/i18n/fr-FR.ts +3 -0
  52. package/corpus/templates/analytics/app/i18n/hi-IN.ts +3 -0
  53. package/corpus/templates/analytics/app/i18n/index.ts +31 -0
  54. package/corpus/templates/analytics/app/i18n/ja-JP.ts +3 -0
  55. package/corpus/templates/analytics/app/i18n/ko-KR.ts +3 -0
  56. package/corpus/templates/analytics/app/i18n/pt-BR.ts +3 -0
  57. package/corpus/templates/analytics/app/i18n/zh-CN.ts +3 -0
  58. package/corpus/templates/analytics/app/i18n-data.ts +433 -0
  59. package/corpus/templates/analytics/app/pages/Settings.tsx +50 -16
  60. package/corpus/templates/analytics/app/root.tsx +14 -1
  61. package/corpus/templates/analytics/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  62. package/corpus/templates/analytics/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  63. package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +6 -0
  64. package/corpus/templates/assets/app/components/layout/Header.tsx +17 -8
  65. package/corpus/templates/assets/app/components/layout/Layout.tsx +10 -6
  66. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +40 -23
  67. package/corpus/templates/assets/app/i18n/ar-SA.ts +3 -0
  68. package/corpus/templates/assets/app/i18n/de-DE.ts +3 -0
  69. package/corpus/templates/assets/app/i18n/en-US.ts +3 -0
  70. package/corpus/templates/assets/app/i18n/es-ES.ts +3 -0
  71. package/corpus/templates/assets/app/i18n/fr-FR.ts +3 -0
  72. package/corpus/templates/assets/app/i18n/hi-IN.ts +3 -0
  73. package/corpus/templates/assets/app/i18n/index.ts +31 -0
  74. package/corpus/templates/assets/app/i18n/ja-JP.ts +3 -0
  75. package/corpus/templates/assets/app/i18n/ko-KR.ts +3 -0
  76. package/corpus/templates/assets/app/i18n/pt-BR.ts +3 -0
  77. package/corpus/templates/assets/app/i18n/zh-CN.ts +3 -0
  78. package/corpus/templates/assets/app/i18n-data.ts +668 -0
  79. package/corpus/templates/assets/app/root.tsx +40 -15
  80. package/corpus/templates/assets/app/routes/_index.tsx +9 -10
  81. package/corpus/templates/assets/app/routes/settings.tsx +37 -6
  82. package/corpus/templates/assets/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  83. package/corpus/templates/assets/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  84. package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +5 -0
  85. package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +6 -0
  86. package/corpus/templates/brain/app/components/layout/Layout.tsx +12 -8
  87. package/corpus/templates/brain/app/components/layout/Sidebar.tsx +23 -12
  88. package/corpus/templates/brain/app/i18n/ar-SA.ts +3 -0
  89. package/corpus/templates/brain/app/i18n/de-DE.ts +3 -0
  90. package/corpus/templates/brain/app/i18n/en-US.ts +3 -0
  91. package/corpus/templates/brain/app/i18n/es-ES.ts +3 -0
  92. package/corpus/templates/brain/app/i18n/fr-FR.ts +3 -0
  93. package/corpus/templates/brain/app/i18n/hi-IN.ts +3 -0
  94. package/corpus/templates/brain/app/i18n/index.ts +31 -0
  95. package/corpus/templates/brain/app/i18n/ja-JP.ts +3 -0
  96. package/corpus/templates/brain/app/i18n/ko-KR.ts +3 -0
  97. package/corpus/templates/brain/app/i18n/pt-BR.ts +3 -0
  98. package/corpus/templates/brain/app/i18n/zh-CN.ts +3 -0
  99. package/corpus/templates/brain/app/i18n-data.ts +624 -0
  100. package/corpus/templates/brain/app/root.tsx +27 -12
  101. package/corpus/templates/brain/app/routes/settings.tsx +45 -8
  102. package/corpus/templates/brain/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  103. package/corpus/templates/brain/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  104. package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +6 -0
  105. package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +2 -0
  106. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +16 -9
  107. package/corpus/templates/calendar/app/i18n/ar-SA.ts +57 -0
  108. package/corpus/templates/calendar/app/i18n/de-DE.ts +58 -0
  109. package/corpus/templates/calendar/app/i18n/en-US.ts +57 -0
  110. package/corpus/templates/calendar/app/i18n/es-ES.ts +58 -0
  111. package/corpus/templates/calendar/app/i18n/fr-FR.ts +58 -0
  112. package/corpus/templates/calendar/app/i18n/hi-IN.ts +57 -0
  113. package/corpus/templates/calendar/app/i18n/index.ts +31 -0
  114. package/corpus/templates/calendar/app/i18n/ja-JP.ts +58 -0
  115. package/corpus/templates/calendar/app/i18n/ko-KR.ts +57 -0
  116. package/corpus/templates/calendar/app/i18n/pt-BR.ts +57 -0
  117. package/corpus/templates/calendar/app/i18n/zh-CN.ts +57 -0
  118. package/corpus/templates/calendar/app/i18n-data.ts +516 -0
  119. package/corpus/templates/calendar/app/pages/CalendarView.tsx +2 -0
  120. package/corpus/templates/calendar/app/pages/Settings.tsx +63 -28
  121. package/corpus/templates/calendar/app/root.tsx +78 -7
  122. package/corpus/templates/calendar/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  123. package/corpus/templates/calendar/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  124. package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +5 -0
  125. package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +6 -0
  126. package/corpus/templates/chat/app/components/layout/Header.tsx +17 -11
  127. package/corpus/templates/chat/app/components/layout/Layout.tsx +12 -8
  128. package/corpus/templates/chat/app/components/layout/Sidebar.tsx +47 -18
  129. package/corpus/templates/chat/app/i18n/ar-SA.ts +62 -0
  130. package/corpus/templates/chat/app/i18n/de-DE.ts +63 -0
  131. package/corpus/templates/chat/app/i18n/en-US.ts +63 -0
  132. package/corpus/templates/chat/app/i18n/es-ES.ts +63 -0
  133. package/corpus/templates/chat/app/i18n/fr-FR.ts +63 -0
  134. package/corpus/templates/chat/app/i18n/hi-IN.ts +63 -0
  135. package/corpus/templates/chat/app/i18n/index.ts +31 -0
  136. package/corpus/templates/chat/app/i18n/ja-JP.ts +63 -0
  137. package/corpus/templates/chat/app/i18n/ko-KR.ts +63 -0
  138. package/corpus/templates/chat/app/i18n/pt-BR.ts +63 -0
  139. package/corpus/templates/chat/app/i18n/zh-CN.ts +61 -0
  140. package/corpus/templates/chat/app/i18n-data.ts +475 -0
  141. package/corpus/templates/chat/app/root.tsx +18 -5
  142. package/corpus/templates/chat/app/routes/_index.tsx +9 -8
  143. package/corpus/templates/chat/app/routes/settings.tsx +86 -0
  144. package/corpus/templates/chat/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  145. package/corpus/templates/chat/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  146. package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +6 -0
  147. package/corpus/templates/clips/app/components/layout/Header.tsx +23 -17
  148. package/corpus/templates/clips/app/components/library/empty-state.tsx +10 -34
  149. package/corpus/templates/clips/app/components/library/library-layout.tsx +45 -34
  150. package/corpus/templates/clips/app/i18n/ar-SA.ts +182 -0
  151. package/corpus/templates/clips/app/i18n/de-DE.ts +184 -0
  152. package/corpus/templates/clips/app/i18n/en-US.ts +179 -0
  153. package/corpus/templates/clips/app/i18n/es-ES.ts +183 -0
  154. package/corpus/templates/clips/app/i18n/fr-FR.ts +184 -0
  155. package/corpus/templates/clips/app/i18n/hi-IN.ts +180 -0
  156. package/corpus/templates/clips/app/i18n/index.ts +41 -0
  157. package/corpus/templates/clips/app/i18n/ja-JP.ts +180 -0
  158. package/corpus/templates/clips/app/i18n/ko-KR.ts +178 -0
  159. package/corpus/templates/clips/app/i18n/pt-BR.ts +183 -0
  160. package/corpus/templates/clips/app/i18n/zh-CN.ts +173 -0
  161. package/corpus/templates/clips/app/root.tsx +104 -10
  162. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +154 -95
  163. package/corpus/templates/clips/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  164. package/corpus/templates/clips/changelog/2026-06-24-clips-now-includes-a-language-picker-and-simplified-chinese-ui.md +6 -0
  165. package/corpus/templates/clips/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  166. package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +6 -0
  167. package/corpus/templates/content/app/components/EmptyState.tsx +7 -5
  168. package/corpus/templates/content/app/components/ThemeToggle.tsx +4 -2
  169. package/corpus/templates/content/app/components/layout/Header.tsx +2 -0
  170. package/corpus/templates/content/app/components/layout/Layout.tsx +8 -7
  171. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +41 -1
  172. package/corpus/templates/content/app/i18n/ar-SA.ts +3 -0
  173. package/corpus/templates/content/app/i18n/de-DE.ts +3 -0
  174. package/corpus/templates/content/app/i18n/en-US.ts +3 -0
  175. package/corpus/templates/content/app/i18n/es-ES.ts +3 -0
  176. package/corpus/templates/content/app/i18n/fr-FR.ts +3 -0
  177. package/corpus/templates/content/app/i18n/hi-IN.ts +3 -0
  178. package/corpus/templates/content/app/i18n/index.ts +31 -0
  179. package/corpus/templates/content/app/i18n/ja-JP.ts +3 -0
  180. package/corpus/templates/content/app/i18n/ko-KR.ts +3 -0
  181. package/corpus/templates/content/app/i18n/pt-BR.ts +3 -0
  182. package/corpus/templates/content/app/i18n/zh-CN.ts +3 -0
  183. package/corpus/templates/content/app/i18n-data.ts +490 -0
  184. package/corpus/templates/content/app/root.tsx +110 -23
  185. package/corpus/templates/content/app/routes/_app.settings.tsx +84 -0
  186. package/corpus/templates/content/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  187. package/corpus/templates/content/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  188. package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +6 -0
  189. package/corpus/templates/design/app/components/layout/Header.tsx +16 -8
  190. package/corpus/templates/design/app/components/layout/Layout.tsx +8 -6
  191. package/corpus/templates/design/app/components/layout/Sidebar.tsx +25 -9
  192. package/corpus/templates/design/app/i18n/ar-SA.ts +3 -0
  193. package/corpus/templates/design/app/i18n/de-DE.ts +3 -0
  194. package/corpus/templates/design/app/i18n/en-US.ts +3 -0
  195. package/corpus/templates/design/app/i18n/es-ES.ts +3 -0
  196. package/corpus/templates/design/app/i18n/fr-FR.ts +3 -0
  197. package/corpus/templates/design/app/i18n/hi-IN.ts +3 -0
  198. package/corpus/templates/design/app/i18n/index.ts +31 -0
  199. package/corpus/templates/design/app/i18n/ja-JP.ts +3 -0
  200. package/corpus/templates/design/app/i18n/ko-KR.ts +3 -0
  201. package/corpus/templates/design/app/i18n/pt-BR.ts +3 -0
  202. package/corpus/templates/design/app/i18n/zh-CN.ts +3 -0
  203. package/corpus/templates/design/app/i18n-data.ts +350 -0
  204. package/corpus/templates/design/app/root.tsx +40 -15
  205. package/corpus/templates/design/app/routes/settings.tsx +43 -0
  206. package/corpus/templates/design/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  207. package/corpus/templates/design/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  208. package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +6 -0
  209. package/corpus/templates/dispatch/app/i18n/ar-SA.ts +3 -0
  210. package/corpus/templates/dispatch/app/i18n/de-DE.ts +3 -0
  211. package/corpus/templates/dispatch/app/i18n/en-US.ts +3 -0
  212. package/corpus/templates/dispatch/app/i18n/es-ES.ts +3 -0
  213. package/corpus/templates/dispatch/app/i18n/fr-FR.ts +3 -0
  214. package/corpus/templates/dispatch/app/i18n/hi-IN.ts +3 -0
  215. package/corpus/templates/dispatch/app/i18n/index.ts +31 -0
  216. package/corpus/templates/dispatch/app/i18n/ja-JP.ts +3 -0
  217. package/corpus/templates/dispatch/app/i18n/ko-KR.ts +3 -0
  218. package/corpus/templates/dispatch/app/i18n/pt-BR.ts +3 -0
  219. package/corpus/templates/dispatch/app/i18n/zh-CN.ts +3 -0
  220. package/corpus/templates/dispatch/app/i18n-data.ts +267 -0
  221. package/corpus/templates/dispatch/app/root.tsx +18 -4
  222. package/corpus/templates/dispatch/app/routes/settings.tsx +86 -0
  223. package/corpus/templates/dispatch/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  224. package/corpus/templates/dispatch/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  225. package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +6 -0
  226. package/corpus/templates/forms/app/components/layout/Header.tsx +16 -9
  227. package/corpus/templates/forms/app/components/layout/Layout.tsx +6 -4
  228. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +34 -17
  229. package/corpus/templates/forms/app/i18n/ar-SA.ts +58 -0
  230. package/corpus/templates/forms/app/i18n/de-DE.ts +59 -0
  231. package/corpus/templates/forms/app/i18n/en-US.ts +59 -0
  232. package/corpus/templates/forms/app/i18n/es-ES.ts +59 -0
  233. package/corpus/templates/forms/app/i18n/fr-FR.ts +59 -0
  234. package/corpus/templates/forms/app/i18n/hi-IN.ts +59 -0
  235. package/corpus/templates/forms/app/i18n/index.ts +31 -0
  236. package/corpus/templates/forms/app/i18n/ja-JP.ts +59 -0
  237. package/corpus/templates/forms/app/i18n/ko-KR.ts +59 -0
  238. package/corpus/templates/forms/app/i18n/pt-BR.ts +59 -0
  239. package/corpus/templates/forms/app/i18n/zh-CN.ts +56 -0
  240. package/corpus/templates/forms/app/root.tsx +65 -16
  241. package/corpus/templates/forms/app/routes/_app.settings.tsx +85 -0
  242. package/corpus/templates/forms/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  243. package/corpus/templates/forms/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  244. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +29 -17
  245. package/corpus/templates/macros/app/components/layout/Header.tsx +16 -10
  246. package/corpus/templates/macros/app/i18n/ar-SA.ts +54 -0
  247. package/corpus/templates/macros/app/i18n/de-DE.ts +55 -0
  248. package/corpus/templates/macros/app/i18n/en-US.ts +55 -0
  249. package/corpus/templates/macros/app/i18n/es-ES.ts +55 -0
  250. package/corpus/templates/macros/app/i18n/fr-FR.ts +55 -0
  251. package/corpus/templates/macros/app/i18n/hi-IN.ts +55 -0
  252. package/corpus/templates/macros/app/i18n/index.ts +31 -0
  253. package/corpus/templates/macros/app/i18n/ja-JP.ts +55 -0
  254. package/corpus/templates/macros/app/i18n/ko-KR.ts +55 -0
  255. package/corpus/templates/macros/app/i18n/pt-BR.ts +55 -0
  256. package/corpus/templates/macros/app/i18n/zh-CN.ts +53 -0
  257. package/corpus/templates/macros/app/root.tsx +65 -15
  258. package/corpus/templates/macros/app/routes/settings.tsx +85 -0
  259. package/corpus/templates/macros/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  260. package/corpus/templates/macros/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  261. package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +6 -0
  262. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +9 -4
  263. package/corpus/templates/mail/app/i18n/ar-SA.ts +33 -0
  264. package/corpus/templates/mail/app/i18n/de-DE.ts +33 -0
  265. package/corpus/templates/mail/app/i18n/en-US.ts +32 -0
  266. package/corpus/templates/mail/app/i18n/es-ES.ts +33 -0
  267. package/corpus/templates/mail/app/i18n/fr-FR.ts +33 -0
  268. package/corpus/templates/mail/app/i18n/hi-IN.ts +32 -0
  269. package/corpus/templates/mail/app/i18n/index.ts +31 -0
  270. package/corpus/templates/mail/app/i18n/ja-JP.ts +32 -0
  271. package/corpus/templates/mail/app/i18n/ko-KR.ts +33 -0
  272. package/corpus/templates/mail/app/i18n/pt-BR.ts +34 -0
  273. package/corpus/templates/mail/app/i18n/zh-CN.ts +32 -0
  274. package/corpus/templates/mail/app/pages/SettingsPage.tsx +67 -13
  275. package/corpus/templates/mail/app/root.tsx +20 -0
  276. package/corpus/templates/mail/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  277. package/corpus/templates/mail/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  278. package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +5 -0
  279. package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +6 -0
  280. package/corpus/templates/plan/app/components/layout/Header.tsx +19 -12
  281. package/corpus/templates/plan/app/components/layout/Layout.tsx +11 -7
  282. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +41 -28
  283. package/corpus/templates/plan/app/i18n/ar-SA.ts +77 -0
  284. package/corpus/templates/plan/app/i18n/de-DE.ts +78 -0
  285. package/corpus/templates/plan/app/i18n/en-US.ts +78 -0
  286. package/corpus/templates/plan/app/i18n/es-ES.ts +78 -0
  287. package/corpus/templates/plan/app/i18n/fr-FR.ts +78 -0
  288. package/corpus/templates/plan/app/i18n/hi-IN.ts +78 -0
  289. package/corpus/templates/plan/app/i18n/index.ts +31 -0
  290. package/corpus/templates/plan/app/i18n/ja-JP.ts +79 -0
  291. package/corpus/templates/plan/app/i18n/ko-KR.ts +77 -0
  292. package/corpus/templates/plan/app/i18n/pt-BR.ts +78 -0
  293. package/corpus/templates/plan/app/i18n/zh-CN.ts +74 -0
  294. package/corpus/templates/plan/app/root.tsx +45 -8
  295. package/corpus/templates/plan/app/routes/settings.tsx +86 -0
  296. package/corpus/templates/plan/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  297. package/corpus/templates/plan/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  298. package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +6 -0
  299. package/corpus/templates/slides/app/components/layout/Header.tsx +23 -11
  300. package/corpus/templates/slides/app/components/layout/Layout.tsx +7 -6
  301. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +23 -11
  302. package/corpus/templates/slides/app/i18n/ar-SA.ts +54 -0
  303. package/corpus/templates/slides/app/i18n/de-DE.ts +56 -0
  304. package/corpus/templates/slides/app/i18n/en-US.ts +55 -0
  305. package/corpus/templates/slides/app/i18n/es-ES.ts +55 -0
  306. package/corpus/templates/slides/app/i18n/fr-FR.ts +55 -0
  307. package/corpus/templates/slides/app/i18n/hi-IN.ts +55 -0
  308. package/corpus/templates/slides/app/i18n/index.ts +31 -0
  309. package/corpus/templates/slides/app/i18n/ja-JP.ts +55 -0
  310. package/corpus/templates/slides/app/i18n/ko-KR.ts +55 -0
  311. package/corpus/templates/slides/app/i18n/pt-BR.ts +55 -0
  312. package/corpus/templates/slides/app/i18n/zh-CN.ts +53 -0
  313. package/corpus/templates/slides/app/root.tsx +50 -8
  314. package/corpus/templates/slides/app/routes/settings.tsx +85 -0
  315. package/corpus/templates/slides/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  316. package/corpus/templates/slides/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  317. package/corpus/templates/videos/.agents/skills/self-modifying-code/SKILL.md +6 -0
  318. package/corpus/templates/videos/app/components/NewCompositionPopover.tsx +14 -9
  319. package/corpus/templates/videos/app/components/Sidebar.tsx +16 -9
  320. package/corpus/templates/videos/app/components/StudioHeader.tsx +12 -8
  321. package/corpus/templates/videos/app/components/layout/Header.tsx +21 -15
  322. package/corpus/templates/videos/app/components/layout/Layout.tsx +10 -7
  323. package/corpus/templates/videos/app/components/layout/NavSidebar.tsx +21 -6
  324. package/corpus/templates/videos/app/i18n/ar-SA.ts +73 -0
  325. package/corpus/templates/videos/app/i18n/de-DE.ts +75 -0
  326. package/corpus/templates/videos/app/i18n/en-US.ts +74 -0
  327. package/corpus/templates/videos/app/i18n/es-ES.ts +75 -0
  328. package/corpus/templates/videos/app/i18n/fr-FR.ts +75 -0
  329. package/corpus/templates/videos/app/i18n/hi-IN.ts +74 -0
  330. package/corpus/templates/videos/app/i18n/index.ts +31 -0
  331. package/corpus/templates/videos/app/i18n/ja-JP.ts +74 -0
  332. package/corpus/templates/videos/app/i18n/ko-KR.ts +74 -0
  333. package/corpus/templates/videos/app/i18n/pt-BR.ts +75 -0
  334. package/corpus/templates/videos/app/i18n/zh-CN.ts +72 -0
  335. package/corpus/templates/videos/app/pages/Index.tsx +11 -9
  336. package/corpus/templates/videos/app/root.tsx +45 -7
  337. package/corpus/templates/videos/app/routes/settings.tsx +85 -0
  338. package/corpus/templates/videos/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  339. package/corpus/templates/videos/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  340. package/dist/client/CommandMenu.d.ts +3 -0
  341. package/dist/client/CommandMenu.d.ts.map +1 -1
  342. package/dist/client/CommandMenu.js +9 -0
  343. package/dist/client/CommandMenu.js.map +1 -1
  344. package/dist/client/app-providers.d.ts +8 -1
  345. package/dist/client/app-providers.d.ts.map +1 -1
  346. package/dist/client/app-providers.js +7 -5
  347. package/dist/client/app-providers.js.map +1 -1
  348. package/dist/client/i18n.d.ts +54 -0
  349. package/dist/client/i18n.d.ts.map +1 -0
  350. package/dist/client/i18n.js +354 -0
  351. package/dist/client/i18n.js.map +1 -0
  352. package/dist/client/index.d.ts +2 -1
  353. package/dist/client/index.d.ts.map +1 -1
  354. package/dist/client/index.js +2 -1
  355. package/dist/client/index.js.map +1 -1
  356. package/dist/index.browser.d.ts +1 -1
  357. package/dist/index.browser.d.ts.map +1 -1
  358. package/dist/index.browser.js +1 -1
  359. package/dist/index.browser.js.map +1 -1
  360. package/dist/localization/actions/get-localization-preference.d.ts +4 -0
  361. package/dist/localization/actions/get-localization-preference.d.ts.map +1 -0
  362. package/dist/localization/actions/get-localization-preference.js +16 -0
  363. package/dist/localization/actions/get-localization-preference.js.map +1 -0
  364. package/dist/localization/actions/set-localization-preference.d.ts +6 -0
  365. package/dist/localization/actions/set-localization-preference.d.ts.map +1 -0
  366. package/dist/localization/actions/set-localization-preference.js +24 -0
  367. package/dist/localization/actions/set-localization-preference.js.map +1 -0
  368. package/dist/localization/index.d.ts +3 -0
  369. package/dist/localization/index.d.ts.map +1 -0
  370. package/dist/localization/index.js +3 -0
  371. package/dist/localization/index.js.map +1 -0
  372. package/dist/localization/server.d.ts +25 -0
  373. package/dist/localization/server.d.ts.map +1 -0
  374. package/dist/localization/server.js +69 -0
  375. package/dist/localization/server.js.map +1 -0
  376. package/dist/localization/shared.d.ts +25 -0
  377. package/dist/localization/shared.d.ts.map +1 -0
  378. package/dist/localization/shared.js +134 -0
  379. package/dist/localization/shared.js.map +1 -0
  380. package/dist/server/action-discovery.d.ts.map +1 -1
  381. package/dist/server/action-discovery.js +8 -0
  382. package/dist/server/action-discovery.js.map +1 -1
  383. package/dist/server/index.d.ts +1 -0
  384. package/dist/server/index.d.ts.map +1 -1
  385. package/dist/server/index.js +1 -0
  386. package/dist/server/index.js.map +1 -1
  387. package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  388. package/dist/templates/default/.agents/skills/internationalization/SKILL.md +77 -0
  389. package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +6 -0
  390. package/dist/templates/default/AGENTS.md +16 -15
  391. package/dist/templates/default/app/i18n/en-US.ts +29 -0
  392. package/dist/templates/default/app/i18n/index.ts +13 -0
  393. package/dist/templates/default/app/root.tsx +20 -1
  394. package/dist/templates/default/app/routes/_index.tsx +24 -9
  395. package/dist/templates/default/app/routes/settings.tsx +67 -0
  396. package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  397. package/dist/templates/workspace-core/.agents/skills/internationalization/SKILL.md +77 -0
  398. package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +6 -0
  399. package/dist/vite/action-types-plugin.d.ts.map +1 -1
  400. package/dist/vite/action-types-plugin.js +8 -0
  401. package/dist/vite/action-types-plugin.js.map +1 -1
  402. package/docs/AGENTS.md +1 -0
  403. package/docs/content/client.md +15 -0
  404. package/docs/content/internationalization.md +145 -0
  405. package/docs/content/locales/ar-SA/internationalization.md +102 -0
  406. package/docs/content/locales/de-DE/internationalization.md +102 -0
  407. package/docs/content/locales/es-ES/internationalization.md +102 -0
  408. package/docs/content/locales/fr-FR/internationalization.md +102 -0
  409. package/docs/content/locales/hi-IN/internationalization.md +102 -0
  410. package/docs/content/locales/ja-JP/internationalization.md +114 -0
  411. package/docs/content/locales/ko-KR/internationalization.md +102 -0
  412. package/docs/content/locales/pt-BR/internationalization.md +102 -0
  413. package/docs/content/locales/zh-CN/internationalization.md +102 -0
  414. package/docs/content/skills-guide.md +19 -18
  415. package/package.json +7 -1
  416. package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  417. package/src/templates/default/.agents/skills/internationalization/SKILL.md +77 -0
  418. package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +6 -0
  419. package/src/templates/default/AGENTS.md +16 -15
  420. package/src/templates/default/app/i18n/en-US.ts +29 -0
  421. package/src/templates/default/app/i18n/index.ts +13 -0
  422. package/src/templates/default/app/root.tsx +20 -1
  423. package/src/templates/default/app/routes/_index.tsx +24 -9
  424. package/src/templates/default/app/routes/settings.tsx +67 -0
  425. package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  426. package/src/templates/workspace-core/.agents/skills/internationalization/SKILL.md +77 -0
  427. package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +6 -0
@@ -0,0 +1,433 @@
1
+ import type { LocaleCode } from "@agent-native/core/client";
2
+
3
+ const enUS = {
4
+ navigation: {
5
+ brand: "Analytics",
6
+ overview: "Overview",
7
+ dataSources: "Data Sources",
8
+ dataDictionary: "Data Dictionary",
9
+ templateCatalog: "Template Catalog",
10
+ analyses: "Analyses",
11
+ explorer: "Explorer",
12
+ team: "Team",
13
+ settings: "Settings",
14
+ navigation: "Navigation",
15
+ openNavigation: "Open navigation",
16
+ },
17
+ settings: {
18
+ agentTitle: "Agent settings",
19
+ agentDescription:
20
+ "Open the agent sidebar settings for model, API keys, automations, voice, and other agent controls.",
21
+ openAgentSettings: "Open agent settings",
22
+ account: "Account",
23
+ signedInAs: "Signed in as",
24
+ credentials: "Data Source Credentials",
25
+ credentialsDescription:
26
+ "API keys and credentials are managed on the Data Sources page.",
27
+ manageDataSources: "Manage Data Sources",
28
+ languageTitle: "Language",
29
+ languageLabel: "Interface language",
30
+ about: "About",
31
+ aboutDescription:
32
+ "Analytics is a tool for connecting data sources and building custom dashboards. Connect Google Analytics, BigQuery, Stripe, and more, then ask the agent to create dashboards.",
33
+ aboutUsage:
34
+ "Use the Data Sources page to manage connections. Use the Query Explorer for ad-hoc BigQuery SQL.",
35
+ },
36
+ chat: {
37
+ emptyState:
38
+ "Ask me to analyze a dashboard, compare trends, or dig into data...",
39
+ suggestionArrGrowth: "What's driving ARR growth this quarter?",
40
+ suggestionChurn: "Show me churn trends over the last 6 months",
41
+ suggestionAnomalies: "Analyze the HubSpot Sales dashboard for anomalies",
42
+ suggestionMrr: "Compare MRR between enterprise and SMB",
43
+ },
44
+ };
45
+
46
+ type Messages = typeof enUS;
47
+ type Section = keyof Messages;
48
+
49
+ function mergeMessages(overrides: {
50
+ [K in Section]?: Partial<Messages[K]>;
51
+ }): Messages {
52
+ return {
53
+ navigation: { ...enUS.navigation, ...overrides.navigation },
54
+ settings: { ...enUS.settings, ...overrides.settings },
55
+ chat: { ...enUS.chat, ...overrides.chat },
56
+ };
57
+ }
58
+
59
+ export const messagesByLocale = {
60
+ "en-US": enUS,
61
+ "zh-CN": mergeMessages({
62
+ navigation: {
63
+ brand: "Analytics",
64
+ overview: "概览",
65
+ dataSources: "数据源",
66
+ dataDictionary: "数据字典",
67
+ templateCatalog: "模板目录",
68
+ analyses: "分析",
69
+ explorer: "探索器",
70
+ team: "团队",
71
+ settings: "设置",
72
+ navigation: "导航",
73
+ openNavigation: "打开导航",
74
+ },
75
+ settings: {
76
+ agentTitle: "代理设置",
77
+ agentDescription:
78
+ "打开代理侧边栏设置,管理模型、API 密钥、自动化、语音和其他代理控制项。",
79
+ openAgentSettings: "打开代理设置",
80
+ account: "账户",
81
+ signedInAs: "登录身份",
82
+ credentials: "数据源凭据",
83
+ credentialsDescription: "API 密钥和凭据在数据源页面管理。",
84
+ manageDataSources: "管理数据源",
85
+ languageTitle: "语言",
86
+ languageLabel: "界面语言",
87
+ about: "关于",
88
+ aboutDescription:
89
+ "Analytics 用于连接数据源并构建自定义仪表板。连接 Google Analytics、BigQuery、Stripe 等,然后让代理创建仪表板。",
90
+ aboutUsage: "在数据源页面管理连接。使用查询探索器运行临时 BigQuery SQL。",
91
+ },
92
+ chat: {
93
+ emptyState: "让我分析仪表板、比较趋势或深入查看数据...",
94
+ suggestionArrGrowth: "本季度 ARR 增长的驱动因素是什么?",
95
+ suggestionChurn: "显示过去 6 个月的流失趋势",
96
+ suggestionAnomalies: "分析 HubSpot 销售仪表板的异常",
97
+ suggestionMrr: "比较企业客户和 SMB 的 MRR",
98
+ },
99
+ }),
100
+ "es-ES": mergeMessages({
101
+ navigation: {
102
+ overview: "Resumen",
103
+ dataSources: "Fuentes de datos",
104
+ dataDictionary: "Diccionario de datos",
105
+ templateCatalog: "Catálogo de plantillas",
106
+ analyses: "Análisis",
107
+ explorer: "Explorador",
108
+ team: "Equipo",
109
+ settings: "Ajustes",
110
+ navigation: "Navegación",
111
+ openNavigation: "Abrir navegación",
112
+ },
113
+ settings: {
114
+ agentTitle: "Ajustes del agente",
115
+ agentDescription:
116
+ "Abre los ajustes del agente en la barra lateral para modelos, claves API, automatizaciones, voz y otros controles.",
117
+ openAgentSettings: "Abrir ajustes del agente",
118
+ account: "Cuenta",
119
+ signedInAs: "Sesión iniciada como",
120
+ credentials: "Credenciales de fuentes de datos",
121
+ credentialsDescription:
122
+ "Las claves API y credenciales se gestionan en la página Fuentes de datos.",
123
+ manageDataSources: "Gestionar fuentes de datos",
124
+ languageTitle: "Idioma",
125
+ languageLabel: "Idioma de la interfaz",
126
+ about: "Acerca de",
127
+ aboutDescription:
128
+ "Analytics conecta fuentes de datos y crea paneles personalizados. Conecta Google Analytics, BigQuery, Stripe y más, y pide al agente que cree paneles.",
129
+ aboutUsage:
130
+ "Usa Fuentes de datos para gestionar conexiones. Usa el Explorador de consultas para SQL ad hoc de BigQuery.",
131
+ },
132
+ chat: {
133
+ emptyState:
134
+ "Pídeme que analice un panel, compare tendencias o investigue datos...",
135
+ suggestionArrGrowth: "¿Qué impulsa el crecimiento de ARR este trimestre?",
136
+ suggestionChurn: "Muéstrame la tendencia de bajas de los últimos 6 meses",
137
+ suggestionAnomalies: "Analiza anomalías en el panel de ventas de HubSpot",
138
+ suggestionMrr: "Compara el MRR entre enterprise y SMB",
139
+ },
140
+ }),
141
+ "fr-FR": mergeMessages({
142
+ navigation: {
143
+ overview: "Vue d'ensemble",
144
+ dataSources: "Sources de données",
145
+ dataDictionary: "Dictionnaire de données",
146
+ templateCatalog: "Catalogue de modèles",
147
+ analyses: "Analyses",
148
+ explorer: "Explorateur",
149
+ team: "Équipe",
150
+ settings: "Paramètres",
151
+ navigation: "Navigation",
152
+ openNavigation: "Ouvrir la navigation",
153
+ },
154
+ settings: {
155
+ agentTitle: "Paramètres de l’agent",
156
+ agentDescription:
157
+ "Ouvrez les paramètres de l’agent dans la barre latérale pour les modèles, clés API, automatisations, voix et autres contrôles.",
158
+ openAgentSettings: "Ouvrir les paramètres de l’agent",
159
+ account: "Compte",
160
+ signedInAs: "Connecté en tant que",
161
+ credentials: "Identifiants des sources de données",
162
+ credentialsDescription:
163
+ "Les clés API et identifiants sont gérés sur la page Sources de données.",
164
+ manageDataSources: "Gérer les sources de données",
165
+ languageTitle: "Langue",
166
+ languageLabel: "Langue de l'interface",
167
+ about: "À propos",
168
+ aboutDescription:
169
+ "Analytics connecte des sources de données et crée des tableaux de bord personnalisés. Connectez Google Analytics, BigQuery, Stripe et plus encore, puis demandez à l'agent de créer des tableaux de bord.",
170
+ aboutUsage:
171
+ "Utilisez Sources de données pour gérer les connexions. Utilisez l'explorateur de requêtes pour le SQL BigQuery ad hoc.",
172
+ },
173
+ chat: {
174
+ emptyState:
175
+ "Demandez-moi d'analyser un tableau de bord, de comparer des tendances ou d'explorer les données...",
176
+ suggestionArrGrowth:
177
+ "Qu'est-ce qui stimule la croissance de l'ARR ce trimestre ?",
178
+ suggestionChurn: "Montre-moi les tendances de churn des 6 derniers mois",
179
+ suggestionAnomalies:
180
+ "Analyse les anomalies du tableau de bord HubSpot Sales",
181
+ suggestionMrr: "Compare le MRR entre enterprise et SMB",
182
+ },
183
+ }),
184
+ "de-DE": mergeMessages({
185
+ navigation: {
186
+ overview: "Übersicht",
187
+ dataSources: "Datenquellen",
188
+ dataDictionary: "Datenlexikon",
189
+ templateCatalog: "Vorlagenkatalog",
190
+ analyses: "Analysen",
191
+ explorer: "Explorer",
192
+ team: "Team",
193
+ settings: "Einstellungen",
194
+ navigation: "Navigation",
195
+ openNavigation: "Navigation öffnen",
196
+ },
197
+ settings: {
198
+ agentTitle: "Agent-Einstellungen",
199
+ agentDescription:
200
+ "Öffne die Agent-Einstellungen in der Seitenleiste für Modell, API-Schlüssel, Automatisierungen, Sprache und weitere Steuerungen.",
201
+ openAgentSettings: "Agent-Einstellungen öffnen",
202
+ account: "Konto",
203
+ signedInAs: "Angemeldet als",
204
+ credentials: "Datenquellen-Anmeldedaten",
205
+ credentialsDescription:
206
+ "API-Schlüssel und Anmeldedaten werden auf der Seite Datenquellen verwaltet.",
207
+ manageDataSources: "Datenquellen verwalten",
208
+ languageTitle: "Sprache",
209
+ languageLabel: "Oberflächensprache",
210
+ about: "Info",
211
+ aboutDescription:
212
+ "Analytics verbindet Datenquellen und erstellt benutzerdefinierte Dashboards. Verbinde Google Analytics, BigQuery, Stripe und mehr und bitte den Agenten, Dashboards zu erstellen.",
213
+ aboutUsage:
214
+ "Verwalte Verbindungen auf der Seite Datenquellen. Nutze den Query Explorer für Ad-hoc-BigQuery-SQL.",
215
+ },
216
+ chat: {
217
+ emptyState:
218
+ "Bitte mich, ein Dashboard zu analysieren, Trends zu vergleichen oder Daten zu untersuchen...",
219
+ suggestionArrGrowth: "Was treibt das ARR-Wachstum in diesem Quartal?",
220
+ suggestionChurn: "Zeige mir Churn-Trends der letzten 6 Monate",
221
+ suggestionAnomalies: "Analysiere Anomalien im HubSpot-Sales-Dashboard",
222
+ suggestionMrr: "Vergleiche MRR zwischen Enterprise und SMB",
223
+ },
224
+ }),
225
+ "ja-JP": mergeMessages({
226
+ navigation: {
227
+ overview: "概要",
228
+ dataSources: "データソース",
229
+ dataDictionary: "データ辞書",
230
+ templateCatalog: "テンプレートカタログ",
231
+ analyses: "分析",
232
+ explorer: "エクスプローラー",
233
+ team: "チーム",
234
+ settings: "設定",
235
+ navigation: "ナビゲーション",
236
+ openNavigation: "ナビゲーションを開く",
237
+ },
238
+ settings: {
239
+ agentTitle: "エージェント設定",
240
+ agentDescription:
241
+ "右サイドバーのエージェント設定を開き、モデル、API キー、自動化、音声などを管理します。",
242
+ openAgentSettings: "エージェント設定を開く",
243
+ account: "アカウント",
244
+ signedInAs: "サインイン中",
245
+ credentials: "データソース認証情報",
246
+ credentialsDescription:
247
+ "API キーと認証情報はデータソースページで管理します。",
248
+ manageDataSources: "データソースを管理",
249
+ languageTitle: "言語",
250
+ languageLabel: "インターフェース言語",
251
+ about: "概要",
252
+ aboutDescription:
253
+ "Analytics はデータソースを接続し、カスタムダッシュボードを作成するツールです。Google Analytics、BigQuery、Stripe などを接続し、エージェントにダッシュボード作成を依頼できます。",
254
+ aboutUsage:
255
+ "接続はデータソースページで管理します。アドホックな BigQuery SQL にはクエリエクスプローラーを使います。",
256
+ },
257
+ chat: {
258
+ emptyState:
259
+ "ダッシュボード分析、トレンド比較、データ調査を依頼できます...",
260
+ suggestionArrGrowth: "今四半期の ARR 成長要因は?",
261
+ suggestionChurn: "過去 6 か月の解約傾向を表示",
262
+ suggestionAnomalies: "HubSpot Sales ダッシュボードの異常を分析",
263
+ suggestionMrr: "Enterprise と SMB の MRR を比較",
264
+ },
265
+ }),
266
+ "ko-KR": mergeMessages({
267
+ navigation: {
268
+ overview: "개요",
269
+ dataSources: "데이터 소스",
270
+ dataDictionary: "데이터 사전",
271
+ templateCatalog: "템플릿 카탈로그",
272
+ analyses: "분석",
273
+ explorer: "탐색기",
274
+ team: "팀",
275
+ settings: "설정",
276
+ navigation: "탐색",
277
+ openNavigation: "탐색 열기",
278
+ },
279
+ settings: {
280
+ agentTitle: "에이전트 설정",
281
+ agentDescription:
282
+ "오른쪽 사이드바의 에이전트 설정을 열어 모델, API 키, 자동화, 음성 및 기타 제어를 관리합니다.",
283
+ openAgentSettings: "에이전트 설정 열기",
284
+ account: "계정",
285
+ signedInAs: "로그인 계정",
286
+ credentials: "데이터 소스 자격 증명",
287
+ credentialsDescription:
288
+ "API 키와 자격 증명은 데이터 소스 페이지에서 관리합니다.",
289
+ manageDataSources: "데이터 소스 관리",
290
+ languageTitle: "언어",
291
+ languageLabel: "인터페이스 언어",
292
+ about: "정보",
293
+ aboutDescription:
294
+ "Analytics는 데이터 소스를 연결하고 사용자 지정 대시보드를 만드는 도구입니다. Google Analytics, BigQuery, Stripe 등을 연결한 뒤 에이전트에게 대시보드를 만들게 하세요.",
295
+ aboutUsage:
296
+ "데이터 소스 페이지에서 연결을 관리합니다. 임시 BigQuery SQL은 쿼리 탐색기를 사용하세요.",
297
+ },
298
+ chat: {
299
+ emptyState:
300
+ "대시보드를 분석하거나 추세를 비교하거나 데이터를 파고들어 달라고 요청하세요...",
301
+ suggestionArrGrowth: "이번 분기 ARR 성장을 이끄는 요인은?",
302
+ suggestionChurn: "지난 6개월의 이탈 추세를 보여줘",
303
+ suggestionAnomalies: "HubSpot Sales 대시보드의 이상 징후를 분석해줘",
304
+ suggestionMrr: "엔터프라이즈와 SMB의 MRR 비교",
305
+ },
306
+ }),
307
+ "pt-BR": mergeMessages({
308
+ navigation: {
309
+ overview: "Visão geral",
310
+ dataSources: "Fontes de dados",
311
+ dataDictionary: "Dicionário de dados",
312
+ templateCatalog: "Catálogo de modelos",
313
+ analyses: "Análises",
314
+ explorer: "Explorador",
315
+ team: "Equipe",
316
+ settings: "Configurações",
317
+ navigation: "Navegação",
318
+ openNavigation: "Abrir navegação",
319
+ },
320
+ settings: {
321
+ agentTitle: "Configurações do agente",
322
+ agentDescription:
323
+ "Abra as configurações do agente na barra lateral para modelos, chaves de API, automações, voz e outros controles.",
324
+ openAgentSettings: "Abrir configurações do agente",
325
+ account: "Conta",
326
+ signedInAs: "Conectado como",
327
+ credentials: "Credenciais de fontes de dados",
328
+ credentialsDescription:
329
+ "Chaves de API e credenciais são gerenciadas na página Fontes de dados.",
330
+ manageDataSources: "Gerenciar fontes de dados",
331
+ languageTitle: "Idioma",
332
+ languageLabel: "Idioma da interface",
333
+ about: "Sobre",
334
+ aboutDescription:
335
+ "Analytics conecta fontes de dados e cria dashboards personalizados. Conecte Google Analytics, BigQuery, Stripe e outros, depois peça ao agente para criar dashboards.",
336
+ aboutUsage:
337
+ "Use Fontes de dados para gerenciar conexões. Use o Explorador de consultas para SQL ad hoc do BigQuery.",
338
+ },
339
+ chat: {
340
+ emptyState:
341
+ "Peça para eu analisar um dashboard, comparar tendências ou investigar dados...",
342
+ suggestionArrGrowth:
343
+ "O que impulsiona o crescimento de ARR neste trimestre?",
344
+ suggestionChurn: "Mostre tendências de churn dos últimos 6 meses",
345
+ suggestionAnomalies:
346
+ "Analise anomalias no dashboard de vendas do HubSpot",
347
+ suggestionMrr: "Compare MRR entre enterprise e SMB",
348
+ },
349
+ }),
350
+ "hi-IN": mergeMessages({
351
+ navigation: {
352
+ overview: "अवलोकन",
353
+ dataSources: "डेटा स्रोत",
354
+ dataDictionary: "डेटा शब्दकोश",
355
+ templateCatalog: "टेम्पलेट कैटलॉग",
356
+ analyses: "विश्लेषण",
357
+ explorer: "एक्सप्लोरर",
358
+ team: "टीम",
359
+ settings: "सेटिंग्स",
360
+ navigation: "नेविगेशन",
361
+ openNavigation: "नेविगेशन खोलें",
362
+ },
363
+ settings: {
364
+ agentTitle: "एजेंट सेटिंग्स",
365
+ agentDescription:
366
+ "मॉडल, API कुंजियों, ऑटोमेशन, आवाज़ और अन्य एजेंट नियंत्रणों के लिए साइडबार सेटिंग्स खोलें।",
367
+ openAgentSettings: "एजेंट सेटिंग्स खोलें",
368
+ account: "खाता",
369
+ signedInAs: "इस रूप में साइन इन",
370
+ credentials: "डेटा स्रोत क्रेडेंशियल",
371
+ credentialsDescription:
372
+ "API कुंजियां और क्रेडेंशियल डेटा स्रोत पेज पर प्रबंधित होते हैं।",
373
+ manageDataSources: "डेटा स्रोत प्रबंधित करें",
374
+ languageTitle: "भाषा",
375
+ languageLabel: "इंटरफ़ेस भाषा",
376
+ about: "परिचय",
377
+ aboutDescription:
378
+ "Analytics डेटा स्रोतों को जोड़ने और कस्टम डैशबोर्ड बनाने का टूल है। Google Analytics, BigQuery, Stripe आदि जोड़ें, फिर एजेंट से डैशबोर्ड बनवाएं।",
379
+ aboutUsage:
380
+ "कनेक्शन प्रबंधित करने के लिए डेटा स्रोत पेज का उपयोग करें। ad-hoc BigQuery SQL के लिए Query Explorer उपयोग करें।",
381
+ },
382
+ chat: {
383
+ emptyState:
384
+ "मुझसे डैशबोर्ड का विश्लेषण, ट्रेंड की तुलना या डेटा में गहराई से देखने को कहें...",
385
+ suggestionArrGrowth: "इस तिमाही ARR वृद्धि को क्या चला रहा है?",
386
+ suggestionChurn: "पिछले 6 महीनों के churn ट्रेंड दिखाएं",
387
+ suggestionAnomalies:
388
+ "HubSpot Sales डैशबोर्ड में anomalies का विश्लेषण करें",
389
+ suggestionMrr: "enterprise और SMB के बीच MRR की तुलना करें",
390
+ },
391
+ }),
392
+ "ar-SA": mergeMessages({
393
+ navigation: {
394
+ overview: "نظرة عامة",
395
+ dataSources: "مصادر البيانات",
396
+ dataDictionary: "قاموس البيانات",
397
+ templateCatalog: "كتالوج القوالب",
398
+ analyses: "التحليلات",
399
+ explorer: "المستكشف",
400
+ team: "الفريق",
401
+ settings: "الإعدادات",
402
+ navigation: "التنقل",
403
+ openNavigation: "فتح التنقل",
404
+ },
405
+ settings: {
406
+ agentTitle: "إعدادات الوكيل",
407
+ agentDescription:
408
+ "افتح إعدادات الوكيل في الشريط الجانبي لإدارة النموذج ومفاتيح API والأتمتة والصوت وعناصر التحكم الأخرى.",
409
+ openAgentSettings: "فتح إعدادات الوكيل",
410
+ account: "الحساب",
411
+ signedInAs: "تم تسجيل الدخول باسم",
412
+ credentials: "بيانات اعتماد مصادر البيانات",
413
+ credentialsDescription:
414
+ "تتم إدارة مفاتيح API وبيانات الاعتماد من صفحة مصادر البيانات.",
415
+ manageDataSources: "إدارة مصادر البيانات",
416
+ languageTitle: "اللغة",
417
+ languageLabel: "لغة الواجهة",
418
+ about: "حول",
419
+ aboutDescription:
420
+ "Analytics أداة لربط مصادر البيانات وبناء لوحات معلومات مخصصة. اربط Google Analytics وBigQuery وStripe وغيرها، ثم اطلب من الوكيل إنشاء اللوحات.",
421
+ aboutUsage:
422
+ "استخدم صفحة مصادر البيانات لإدارة الاتصالات. استخدم مستكشف الاستعلامات لاستعلامات BigQuery SQL المخصصة.",
423
+ },
424
+ chat: {
425
+ emptyState:
426
+ "اطلب مني تحليل لوحة معلومات أو مقارنة الاتجاهات أو التعمق في البيانات...",
427
+ suggestionArrGrowth: "ما الذي يدفع نمو ARR هذا الربع؟",
428
+ suggestionChurn: "اعرض اتجاهات فقدان العملاء خلال آخر 6 أشهر",
429
+ suggestionAnomalies: "حلل الشذوذ في لوحة مبيعات HubSpot",
430
+ suggestionMrr: "قارن MRR بين enterprise وSMB",
431
+ },
432
+ }),
433
+ } satisfies Record<LocaleCode, Messages>;
@@ -1,12 +1,19 @@
1
- import { ChangelogSettingsCard } from "@agent-native/core/client";
1
+ import {
2
+ ChangelogSettingsCard,
3
+ LanguagePicker,
4
+ openAgentSettings,
5
+ useT,
6
+ } from "@agent-native/core/client";
2
7
  import { useAuth } from "@/components/auth/AuthProvider";
3
8
  import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
4
9
  import { Button } from "@/components/ui/button";
10
+ import { Label } from "@/components/ui/label";
5
11
  import { Link } from "react-router";
6
12
  import changelog from "../../CHANGELOG.md?raw";
7
13
 
8
14
  export default function Settings() {
9
15
  const { auth } = useAuth();
16
+ const t = useT();
10
17
 
11
18
  return (
12
19
  <div className="space-y-6 max-w-2xl">
@@ -14,13 +21,13 @@ export default function Settings() {
14
21
 
15
22
  <Card className="bg-card border-border/50">
16
23
  <CardHeader>
17
- <CardTitle className="text-base">Account</CardTitle>
24
+ <CardTitle className="text-base">{t("settings.account")}</CardTitle>
18
25
  </CardHeader>
19
26
  <CardContent className="space-y-4">
20
27
  {auth && (
21
28
  <div className="flex items-center justify-between">
22
29
  <span className="text-sm text-muted-foreground">
23
- Signed in as
30
+ {t("settings.signedInAs")}
24
31
  </span>
25
32
  <span className="text-sm font-medium">{auth.email}</span>
26
33
  </div>
@@ -30,32 +37,59 @@ export default function Settings() {
30
37
 
31
38
  <Card className="bg-card border-border/50">
32
39
  <CardHeader>
33
- <CardTitle className="text-base">Data Source Credentials</CardTitle>
40
+ <CardTitle className="text-base">
41
+ {t("settings.credentials")}
42
+ </CardTitle>
34
43
  </CardHeader>
35
44
  <CardContent>
36
45
  <p className="text-sm text-muted-foreground mb-3">
37
- API keys and credentials are managed on the Data Sources page.
46
+ {t("settings.credentialsDescription")}
38
47
  </p>
39
48
  <Button variant="outline" size="sm" asChild>
40
- <Link to="/data-sources">Manage Data Sources</Link>
49
+ <Link to="/data-sources">{t("settings.manageDataSources")}</Link>
41
50
  </Button>
42
51
  </CardContent>
43
52
  </Card>
44
53
 
45
54
  <Card className="bg-card border-border/50">
46
55
  <CardHeader>
47
- <CardTitle className="text-base">About</CardTitle>
56
+ <CardTitle className="text-base">
57
+ {t("settings.languageTitle")}
58
+ </CardTitle>
48
59
  </CardHeader>
49
- <CardContent className="space-y-2 text-sm text-muted-foreground">
50
- <p>
51
- Analytics is a tool for connecting data sources and building custom
52
- dashboards. Connect Google Analytics, BigQuery, Stripe, and more —
53
- then ask the agent to create dashboards.
54
- </p>
55
- <p>
56
- Use the Data Sources page to manage connections. Use the Query
57
- Explorer for ad-hoc BigQuery SQL.
60
+ <CardContent className="max-w-xs space-y-1.5">
61
+ <Label>{t("settings.languageLabel")}</Label>
62
+ <LanguagePicker label={t("settings.languageLabel")} />
63
+ </CardContent>
64
+ </Card>
65
+
66
+ <Card className="bg-card border-border/50">
67
+ <CardHeader>
68
+ <CardTitle className="text-base">
69
+ {t("settings.agentTitle")}
70
+ </CardTitle>
71
+ </CardHeader>
72
+ <CardContent>
73
+ <p className="text-sm text-muted-foreground mb-3">
74
+ {t("settings.agentDescription")}
58
75
  </p>
76
+ <Button
77
+ variant="outline"
78
+ size="sm"
79
+ onClick={() => openAgentSettings()}
80
+ >
81
+ {t("settings.openAgentSettings")}
82
+ </Button>
83
+ </CardContent>
84
+ </Card>
85
+
86
+ <Card className="bg-card border-border/50">
87
+ <CardHeader>
88
+ <CardTitle className="text-base">{t("settings.about")}</CardTitle>
89
+ </CardHeader>
90
+ <CardContent className="space-y-2 text-sm text-muted-foreground">
91
+ <p>{t("settings.aboutDescription")}</p>
92
+ <p>{t("settings.aboutUsage")}</p>
59
93
  </CardContent>
60
94
  </Card>
61
95
  </div>
@@ -7,6 +7,7 @@ import {
7
7
  AppProviders,
8
8
  appPath,
9
9
  createAgentNativeQueryClient,
10
+ getLocaleInitScript,
10
11
  getThemeInitScript,
11
12
  useDbSync,
12
13
  } from "@agent-native/core/client";
@@ -18,6 +19,7 @@ import type { LinksFunction } from "react-router";
18
19
  import stylesheet from "./global.css?url";
19
20
  import { TAB_ID } from "@/lib/tab-id";
20
21
  import { configureTracking } from "@agent-native/core/client";
22
+ import { i18nCatalog } from "./i18n";
21
23
  configureTracking({
22
24
  getDefaultProps: (_name, properties) => ({
23
25
  ...properties,
@@ -30,6 +32,7 @@ export const links: LinksFunction = () => [
30
32
  ];
31
33
 
32
34
  const THEME_INIT_SCRIPT = getThemeInitScript("dark", true);
35
+ const LOCALE_INIT_SCRIPT = getLocaleInitScript();
33
36
 
34
37
  export function Layout({ children }: { children: React.ReactNode }) {
35
38
  return (
@@ -44,6 +47,11 @@ export function Layout({ children }: { children: React.ReactNode }) {
44
47
  suppressHydrationWarning
45
48
  dangerouslySetInnerHTML={{ __html: THEME_INIT_SCRIPT }}
46
49
  />
50
+ <script
51
+ data-agent-native-locale-init
52
+ suppressHydrationWarning
53
+ dangerouslySetInnerHTML={{ __html: LOCALE_INIT_SCRIPT }}
54
+ />
47
55
  <link rel="manifest" href={appPath("/manifest.json")} />
48
56
  <meta name="theme-color" content="#F59E0B" />
49
57
  <meta name="mobile-web-app-capable" content="yes" />
@@ -83,7 +91,12 @@ export default function Root() {
83
91
  // defaultTheme="dark": analytics defaults to dark mode if no stored preference.
84
92
  // toaster={null}: suppress AppProviders' built-in sonner; analytics renders
85
93
  // both its styled Sonner and the legacy shadcn Toaster explicitly below.
86
- <AppProviders queryClient={queryClient} defaultTheme="dark" toaster={null}>
94
+ <AppProviders
95
+ queryClient={queryClient}
96
+ defaultTheme="dark"
97
+ toaster={null}
98
+ i18n={{ catalog: i18nCatalog }}
99
+ >
87
100
  <DbSyncBridge />
88
101
  <Toaster />
89
102
  <Sonner position="bottom-left" />
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: added
3
+ date: 2026-06-24
4
+ ---
5
+
6
+ Added a language picker and localized app chrome for supported languages.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-06-24
4
+ ---
5
+
6
+ Settings now link directly to Agent settings for model, API key, automation, and voice preferences.
@@ -66,6 +66,11 @@ el.dataset.selectedId = selectedItem?.id || "";
66
66
 
67
67
  **Use configuration-driven rendering** — Extract visual decisions (colors, layouts, sizes) into JSON config files in `data/`. The agent can modify the config (Tier 1) instead of the component source (Tier 2).
68
68
 
69
+ **Keep localized copy in catalogs** — When editing visible UI copy, labels,
70
+ toasts, empty states, prompts, or formatting, read `internationalization` and
71
+ update `app/i18n/en-US.ts` plus existing locale catalogs instead of leaving new
72
+ inline strings in components.
73
+
69
74
  ## Don't
70
75
 
71
76
  - Don't modify `.env` files or files containing secrets
@@ -80,3 +85,4 @@ el.dataset.selectedId = selectedItem?.id || "";
80
85
  - **actions** — The agent can create or modify actions to add new capabilities
81
86
  - **delegate-to-agent** — Self-modification requests come through the agent chat
82
87
  - **real-time-sync** — Database writes trigger change events to update the UI
88
+ - **internationalization** — UI copy, language catalogs, locale switching, and RTL-safe edits
@@ -1,13 +1,18 @@
1
1
  import { useLocation } from "react-router";
2
- import { AgentToggleButton, useActionQuery } from "@agent-native/core/client";
2
+ import {
3
+ AgentToggleButton,
4
+ LanguagePicker,
5
+ useActionQuery,
6
+ useT,
7
+ } from "@agent-native/core/client";
3
8
  import { useHeaderTitle, useHeaderActions } from "./HeaderActions";
4
9
 
5
- const pageTitles: Record<string, string> = {
6
- "/": "Create",
7
- "/library": "Library",
8
- "/brand-kits": "Brand Kits",
9
- "/extensions": "Extensions",
10
- "/settings": "Settings",
10
+ const pageTitleKeys: Record<string, string> = {
11
+ "/": "navigation.create",
12
+ "/library": "navigation.library",
13
+ "/brand-kits": "navigation.brandKits",
14
+ "/extensions": "navigation.extensions",
15
+ "/settings": "navigation.settings",
11
16
  };
12
17
 
13
18
  function LibraryTitle({ id }: { id: string }) {
@@ -19,7 +24,10 @@ function LibraryTitle({ id }: { id: string }) {
19
24
  }
20
25
 
21
26
  function StaticTitle({ pathname }: { pathname: string }) {
22
- const title = pageTitles[pathname] ?? "Assets";
27
+ const t = useT();
28
+ const title = pageTitleKeys[pathname]
29
+ ? t(pageTitleKeys[pathname])
30
+ : t("navigation.brand");
23
31
  return (
24
32
  <h1 className="text-lg font-semibold tracking-tight truncate">{title}</h1>
25
33
  );
@@ -47,6 +55,7 @@ export function Header() {
47
55
  </div>
48
56
  <div className="flex items-center gap-2 shrink-0">
49
57
  {actions}
58
+ <LanguagePicker variant="icon" />
50
59
  {showAgentToggle ? <AgentToggleButton /> : null}
51
60
  </div>
52
61
  </header>