@agent-native/core 0.75.4 → 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 (459) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +47 -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/agent/durable-background.ts +62 -28
  18. package/corpus/core/src/agent/production-agent.ts +16 -12
  19. package/corpus/core/src/cli/skills.ts +22 -4
  20. package/corpus/core/src/client/CommandMenu.tsx +16 -0
  21. package/corpus/core/src/client/app-providers.tsx +26 -1
  22. package/corpus/core/src/client/i18n.tsx +605 -0
  23. package/corpus/core/src/client/index.ts +28 -0
  24. package/corpus/core/src/deploy/build.ts +47 -113
  25. package/corpus/core/src/deploy/workspace-deploy.ts +62 -30
  26. package/corpus/core/src/index.browser.ts +25 -0
  27. package/corpus/core/src/localization/actions/get-localization-preference.ts +23 -0
  28. package/corpus/core/src/localization/actions/set-localization-preference.ts +30 -0
  29. package/corpus/core/src/localization/index.ts +2 -0
  30. package/corpus/core/src/localization/server.ts +131 -0
  31. package/corpus/core/src/localization/shared.ts +163 -0
  32. package/corpus/core/src/server/action-discovery.ts +8 -0
  33. package/corpus/core/src/server/index.ts +8 -0
  34. package/corpus/core/src/server/self-dispatch.ts +29 -2
  35. package/corpus/core/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  36. package/corpus/core/src/templates/default/.agents/skills/internationalization/SKILL.md +77 -0
  37. package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +6 -0
  38. package/corpus/core/src/templates/default/AGENTS.md +16 -15
  39. package/corpus/core/src/templates/default/app/i18n/en-US.ts +29 -0
  40. package/corpus/core/src/templates/default/app/i18n/index.ts +13 -0
  41. package/corpus/core/src/templates/default/app/root.tsx +20 -1
  42. package/corpus/core/src/templates/default/app/routes/_index.tsx +24 -9
  43. package/corpus/core/src/templates/default/app/routes/settings.tsx +67 -0
  44. package/corpus/core/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  45. package/corpus/core/src/templates/workspace-core/.agents/skills/internationalization/SKILL.md +77 -0
  46. package/corpus/core/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +6 -0
  47. package/corpus/core/src/vite/action-types-plugin.ts +10 -0
  48. package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +6 -0
  49. package/corpus/templates/analytics/app/components/layout/Header.tsx +18 -15
  50. package/corpus/templates/analytics/app/components/layout/Layout.tsx +7 -5
  51. package/corpus/templates/analytics/app/components/layout/MobileNav.tsx +9 -3
  52. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +5 -3
  53. package/corpus/templates/analytics/app/i18n/ar-SA.ts +3 -0
  54. package/corpus/templates/analytics/app/i18n/de-DE.ts +3 -0
  55. package/corpus/templates/analytics/app/i18n/en-US.ts +3 -0
  56. package/corpus/templates/analytics/app/i18n/es-ES.ts +3 -0
  57. package/corpus/templates/analytics/app/i18n/fr-FR.ts +3 -0
  58. package/corpus/templates/analytics/app/i18n/hi-IN.ts +3 -0
  59. package/corpus/templates/analytics/app/i18n/index.ts +31 -0
  60. package/corpus/templates/analytics/app/i18n/ja-JP.ts +3 -0
  61. package/corpus/templates/analytics/app/i18n/ko-KR.ts +3 -0
  62. package/corpus/templates/analytics/app/i18n/pt-BR.ts +3 -0
  63. package/corpus/templates/analytics/app/i18n/zh-CN.ts +3 -0
  64. package/corpus/templates/analytics/app/i18n-data.ts +433 -0
  65. package/corpus/templates/analytics/app/pages/Settings.tsx +50 -16
  66. package/corpus/templates/analytics/app/root.tsx +14 -1
  67. package/corpus/templates/analytics/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  68. package/corpus/templates/analytics/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  69. package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +6 -0
  70. package/corpus/templates/assets/app/components/layout/Header.tsx +17 -8
  71. package/corpus/templates/assets/app/components/layout/Layout.tsx +10 -6
  72. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +40 -23
  73. package/corpus/templates/assets/app/i18n/ar-SA.ts +3 -0
  74. package/corpus/templates/assets/app/i18n/de-DE.ts +3 -0
  75. package/corpus/templates/assets/app/i18n/en-US.ts +3 -0
  76. package/corpus/templates/assets/app/i18n/es-ES.ts +3 -0
  77. package/corpus/templates/assets/app/i18n/fr-FR.ts +3 -0
  78. package/corpus/templates/assets/app/i18n/hi-IN.ts +3 -0
  79. package/corpus/templates/assets/app/i18n/index.ts +31 -0
  80. package/corpus/templates/assets/app/i18n/ja-JP.ts +3 -0
  81. package/corpus/templates/assets/app/i18n/ko-KR.ts +3 -0
  82. package/corpus/templates/assets/app/i18n/pt-BR.ts +3 -0
  83. package/corpus/templates/assets/app/i18n/zh-CN.ts +3 -0
  84. package/corpus/templates/assets/app/i18n-data.ts +668 -0
  85. package/corpus/templates/assets/app/root.tsx +40 -15
  86. package/corpus/templates/assets/app/routes/_index.tsx +9 -10
  87. package/corpus/templates/assets/app/routes/settings.tsx +37 -6
  88. package/corpus/templates/assets/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  89. package/corpus/templates/assets/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  90. package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +5 -0
  91. package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +6 -0
  92. package/corpus/templates/brain/app/components/layout/Layout.tsx +12 -8
  93. package/corpus/templates/brain/app/components/layout/Sidebar.tsx +23 -12
  94. package/corpus/templates/brain/app/i18n/ar-SA.ts +3 -0
  95. package/corpus/templates/brain/app/i18n/de-DE.ts +3 -0
  96. package/corpus/templates/brain/app/i18n/en-US.ts +3 -0
  97. package/corpus/templates/brain/app/i18n/es-ES.ts +3 -0
  98. package/corpus/templates/brain/app/i18n/fr-FR.ts +3 -0
  99. package/corpus/templates/brain/app/i18n/hi-IN.ts +3 -0
  100. package/corpus/templates/brain/app/i18n/index.ts +31 -0
  101. package/corpus/templates/brain/app/i18n/ja-JP.ts +3 -0
  102. package/corpus/templates/brain/app/i18n/ko-KR.ts +3 -0
  103. package/corpus/templates/brain/app/i18n/pt-BR.ts +3 -0
  104. package/corpus/templates/brain/app/i18n/zh-CN.ts +3 -0
  105. package/corpus/templates/brain/app/i18n-data.ts +624 -0
  106. package/corpus/templates/brain/app/root.tsx +27 -12
  107. package/corpus/templates/brain/app/routes/settings.tsx +45 -8
  108. package/corpus/templates/brain/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  109. package/corpus/templates/brain/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  110. package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +6 -0
  111. package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +2 -0
  112. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +16 -9
  113. package/corpus/templates/calendar/app/i18n/ar-SA.ts +57 -0
  114. package/corpus/templates/calendar/app/i18n/de-DE.ts +58 -0
  115. package/corpus/templates/calendar/app/i18n/en-US.ts +57 -0
  116. package/corpus/templates/calendar/app/i18n/es-ES.ts +58 -0
  117. package/corpus/templates/calendar/app/i18n/fr-FR.ts +58 -0
  118. package/corpus/templates/calendar/app/i18n/hi-IN.ts +57 -0
  119. package/corpus/templates/calendar/app/i18n/index.ts +31 -0
  120. package/corpus/templates/calendar/app/i18n/ja-JP.ts +58 -0
  121. package/corpus/templates/calendar/app/i18n/ko-KR.ts +57 -0
  122. package/corpus/templates/calendar/app/i18n/pt-BR.ts +57 -0
  123. package/corpus/templates/calendar/app/i18n/zh-CN.ts +57 -0
  124. package/corpus/templates/calendar/app/i18n-data.ts +516 -0
  125. package/corpus/templates/calendar/app/pages/CalendarView.tsx +2 -0
  126. package/corpus/templates/calendar/app/pages/Settings.tsx +63 -28
  127. package/corpus/templates/calendar/app/root.tsx +78 -7
  128. package/corpus/templates/calendar/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  129. package/corpus/templates/calendar/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  130. package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +5 -0
  131. package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +6 -0
  132. package/corpus/templates/chat/app/components/layout/Header.tsx +17 -11
  133. package/corpus/templates/chat/app/components/layout/Layout.tsx +12 -8
  134. package/corpus/templates/chat/app/components/layout/Sidebar.tsx +47 -18
  135. package/corpus/templates/chat/app/i18n/ar-SA.ts +62 -0
  136. package/corpus/templates/chat/app/i18n/de-DE.ts +63 -0
  137. package/corpus/templates/chat/app/i18n/en-US.ts +63 -0
  138. package/corpus/templates/chat/app/i18n/es-ES.ts +63 -0
  139. package/corpus/templates/chat/app/i18n/fr-FR.ts +63 -0
  140. package/corpus/templates/chat/app/i18n/hi-IN.ts +63 -0
  141. package/corpus/templates/chat/app/i18n/index.ts +31 -0
  142. package/corpus/templates/chat/app/i18n/ja-JP.ts +63 -0
  143. package/corpus/templates/chat/app/i18n/ko-KR.ts +63 -0
  144. package/corpus/templates/chat/app/i18n/pt-BR.ts +63 -0
  145. package/corpus/templates/chat/app/i18n/zh-CN.ts +61 -0
  146. package/corpus/templates/chat/app/i18n-data.ts +475 -0
  147. package/corpus/templates/chat/app/root.tsx +18 -5
  148. package/corpus/templates/chat/app/routes/_index.tsx +9 -8
  149. package/corpus/templates/chat/app/routes/settings.tsx +86 -0
  150. package/corpus/templates/chat/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  151. package/corpus/templates/chat/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  152. package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +6 -0
  153. package/corpus/templates/clips/app/components/layout/Header.tsx +23 -17
  154. package/corpus/templates/clips/app/components/library/empty-state.tsx +10 -34
  155. package/corpus/templates/clips/app/components/library/library-layout.tsx +45 -34
  156. package/corpus/templates/clips/app/i18n/ar-SA.ts +182 -0
  157. package/corpus/templates/clips/app/i18n/de-DE.ts +184 -0
  158. package/corpus/templates/clips/app/i18n/en-US.ts +179 -0
  159. package/corpus/templates/clips/app/i18n/es-ES.ts +183 -0
  160. package/corpus/templates/clips/app/i18n/fr-FR.ts +184 -0
  161. package/corpus/templates/clips/app/i18n/hi-IN.ts +180 -0
  162. package/corpus/templates/clips/app/i18n/index.ts +41 -0
  163. package/corpus/templates/clips/app/i18n/ja-JP.ts +180 -0
  164. package/corpus/templates/clips/app/i18n/ko-KR.ts +178 -0
  165. package/corpus/templates/clips/app/i18n/pt-BR.ts +183 -0
  166. package/corpus/templates/clips/app/i18n/zh-CN.ts +173 -0
  167. package/corpus/templates/clips/app/root.tsx +104 -10
  168. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +154 -95
  169. package/corpus/templates/clips/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  170. package/corpus/templates/clips/changelog/2026-06-24-chrome-extension-setup-now-shows-a-clear-all-done-confirmati.md +6 -0
  171. package/corpus/templates/clips/changelog/2026-06-24-clips-now-includes-a-language-picker-and-simplified-chinese-ui.md +6 -0
  172. package/corpus/templates/clips/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  173. package/corpus/templates/clips/chrome-extension/src/permission.html +60 -0
  174. package/corpus/templates/clips/chrome-extension/src/permission.ts +28 -15
  175. package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +6 -0
  176. package/corpus/templates/content/app/components/EmptyState.tsx +7 -5
  177. package/corpus/templates/content/app/components/ThemeToggle.tsx +4 -2
  178. package/corpus/templates/content/app/components/layout/Header.tsx +2 -0
  179. package/corpus/templates/content/app/components/layout/Layout.tsx +8 -7
  180. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +41 -1
  181. package/corpus/templates/content/app/i18n/ar-SA.ts +3 -0
  182. package/corpus/templates/content/app/i18n/de-DE.ts +3 -0
  183. package/corpus/templates/content/app/i18n/en-US.ts +3 -0
  184. package/corpus/templates/content/app/i18n/es-ES.ts +3 -0
  185. package/corpus/templates/content/app/i18n/fr-FR.ts +3 -0
  186. package/corpus/templates/content/app/i18n/hi-IN.ts +3 -0
  187. package/corpus/templates/content/app/i18n/index.ts +31 -0
  188. package/corpus/templates/content/app/i18n/ja-JP.ts +3 -0
  189. package/corpus/templates/content/app/i18n/ko-KR.ts +3 -0
  190. package/corpus/templates/content/app/i18n/pt-BR.ts +3 -0
  191. package/corpus/templates/content/app/i18n/zh-CN.ts +3 -0
  192. package/corpus/templates/content/app/i18n-data.ts +490 -0
  193. package/corpus/templates/content/app/root.tsx +110 -23
  194. package/corpus/templates/content/app/routes/_app.settings.tsx +84 -0
  195. package/corpus/templates/content/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  196. package/corpus/templates/content/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  197. package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +6 -0
  198. package/corpus/templates/design/app/components/layout/Header.tsx +16 -8
  199. package/corpus/templates/design/app/components/layout/Layout.tsx +8 -6
  200. package/corpus/templates/design/app/components/layout/Sidebar.tsx +25 -9
  201. package/corpus/templates/design/app/i18n/ar-SA.ts +3 -0
  202. package/corpus/templates/design/app/i18n/de-DE.ts +3 -0
  203. package/corpus/templates/design/app/i18n/en-US.ts +3 -0
  204. package/corpus/templates/design/app/i18n/es-ES.ts +3 -0
  205. package/corpus/templates/design/app/i18n/fr-FR.ts +3 -0
  206. package/corpus/templates/design/app/i18n/hi-IN.ts +3 -0
  207. package/corpus/templates/design/app/i18n/index.ts +31 -0
  208. package/corpus/templates/design/app/i18n/ja-JP.ts +3 -0
  209. package/corpus/templates/design/app/i18n/ko-KR.ts +3 -0
  210. package/corpus/templates/design/app/i18n/pt-BR.ts +3 -0
  211. package/corpus/templates/design/app/i18n/zh-CN.ts +3 -0
  212. package/corpus/templates/design/app/i18n-data.ts +350 -0
  213. package/corpus/templates/design/app/root.tsx +40 -15
  214. package/corpus/templates/design/app/routes/settings.tsx +43 -0
  215. package/corpus/templates/design/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  216. package/corpus/templates/design/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  217. package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +6 -0
  218. package/corpus/templates/dispatch/app/i18n/ar-SA.ts +3 -0
  219. package/corpus/templates/dispatch/app/i18n/de-DE.ts +3 -0
  220. package/corpus/templates/dispatch/app/i18n/en-US.ts +3 -0
  221. package/corpus/templates/dispatch/app/i18n/es-ES.ts +3 -0
  222. package/corpus/templates/dispatch/app/i18n/fr-FR.ts +3 -0
  223. package/corpus/templates/dispatch/app/i18n/hi-IN.ts +3 -0
  224. package/corpus/templates/dispatch/app/i18n/index.ts +31 -0
  225. package/corpus/templates/dispatch/app/i18n/ja-JP.ts +3 -0
  226. package/corpus/templates/dispatch/app/i18n/ko-KR.ts +3 -0
  227. package/corpus/templates/dispatch/app/i18n/pt-BR.ts +3 -0
  228. package/corpus/templates/dispatch/app/i18n/zh-CN.ts +3 -0
  229. package/corpus/templates/dispatch/app/i18n-data.ts +267 -0
  230. package/corpus/templates/dispatch/app/root.tsx +18 -4
  231. package/corpus/templates/dispatch/app/routes/settings.tsx +86 -0
  232. package/corpus/templates/dispatch/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  233. package/corpus/templates/dispatch/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  234. package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +6 -0
  235. package/corpus/templates/forms/app/components/layout/Header.tsx +16 -9
  236. package/corpus/templates/forms/app/components/layout/Layout.tsx +6 -4
  237. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +34 -17
  238. package/corpus/templates/forms/app/i18n/ar-SA.ts +58 -0
  239. package/corpus/templates/forms/app/i18n/de-DE.ts +59 -0
  240. package/corpus/templates/forms/app/i18n/en-US.ts +59 -0
  241. package/corpus/templates/forms/app/i18n/es-ES.ts +59 -0
  242. package/corpus/templates/forms/app/i18n/fr-FR.ts +59 -0
  243. package/corpus/templates/forms/app/i18n/hi-IN.ts +59 -0
  244. package/corpus/templates/forms/app/i18n/index.ts +31 -0
  245. package/corpus/templates/forms/app/i18n/ja-JP.ts +59 -0
  246. package/corpus/templates/forms/app/i18n/ko-KR.ts +59 -0
  247. package/corpus/templates/forms/app/i18n/pt-BR.ts +59 -0
  248. package/corpus/templates/forms/app/i18n/zh-CN.ts +56 -0
  249. package/corpus/templates/forms/app/root.tsx +65 -16
  250. package/corpus/templates/forms/app/routes/_app.settings.tsx +85 -0
  251. package/corpus/templates/forms/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  252. package/corpus/templates/forms/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  253. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +29 -17
  254. package/corpus/templates/macros/app/components/layout/Header.tsx +16 -10
  255. package/corpus/templates/macros/app/i18n/ar-SA.ts +54 -0
  256. package/corpus/templates/macros/app/i18n/de-DE.ts +55 -0
  257. package/corpus/templates/macros/app/i18n/en-US.ts +55 -0
  258. package/corpus/templates/macros/app/i18n/es-ES.ts +55 -0
  259. package/corpus/templates/macros/app/i18n/fr-FR.ts +55 -0
  260. package/corpus/templates/macros/app/i18n/hi-IN.ts +55 -0
  261. package/corpus/templates/macros/app/i18n/index.ts +31 -0
  262. package/corpus/templates/macros/app/i18n/ja-JP.ts +55 -0
  263. package/corpus/templates/macros/app/i18n/ko-KR.ts +55 -0
  264. package/corpus/templates/macros/app/i18n/pt-BR.ts +55 -0
  265. package/corpus/templates/macros/app/i18n/zh-CN.ts +53 -0
  266. package/corpus/templates/macros/app/root.tsx +65 -15
  267. package/corpus/templates/macros/app/routes/settings.tsx +85 -0
  268. package/corpus/templates/macros/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  269. package/corpus/templates/macros/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  270. package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +6 -0
  271. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +9 -4
  272. package/corpus/templates/mail/app/i18n/ar-SA.ts +33 -0
  273. package/corpus/templates/mail/app/i18n/de-DE.ts +33 -0
  274. package/corpus/templates/mail/app/i18n/en-US.ts +32 -0
  275. package/corpus/templates/mail/app/i18n/es-ES.ts +33 -0
  276. package/corpus/templates/mail/app/i18n/fr-FR.ts +33 -0
  277. package/corpus/templates/mail/app/i18n/hi-IN.ts +32 -0
  278. package/corpus/templates/mail/app/i18n/index.ts +31 -0
  279. package/corpus/templates/mail/app/i18n/ja-JP.ts +32 -0
  280. package/corpus/templates/mail/app/i18n/ko-KR.ts +33 -0
  281. package/corpus/templates/mail/app/i18n/pt-BR.ts +34 -0
  282. package/corpus/templates/mail/app/i18n/zh-CN.ts +32 -0
  283. package/corpus/templates/mail/app/pages/SettingsPage.tsx +67 -13
  284. package/corpus/templates/mail/app/root.tsx +20 -0
  285. package/corpus/templates/mail/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  286. package/corpus/templates/mail/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  287. package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +5 -0
  288. package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +6 -0
  289. package/corpus/templates/plan/.agents/skills/visual-plan/references/wireframe.md +22 -4
  290. package/corpus/templates/plan/.agents/skills/visual-recap/references/wireframe.md +22 -4
  291. package/corpus/templates/plan/app/components/layout/Header.tsx +19 -12
  292. package/corpus/templates/plan/app/components/layout/Layout.tsx +11 -7
  293. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +41 -28
  294. package/corpus/templates/plan/app/i18n/ar-SA.ts +77 -0
  295. package/corpus/templates/plan/app/i18n/de-DE.ts +78 -0
  296. package/corpus/templates/plan/app/i18n/en-US.ts +78 -0
  297. package/corpus/templates/plan/app/i18n/es-ES.ts +78 -0
  298. package/corpus/templates/plan/app/i18n/fr-FR.ts +78 -0
  299. package/corpus/templates/plan/app/i18n/hi-IN.ts +78 -0
  300. package/corpus/templates/plan/app/i18n/index.ts +31 -0
  301. package/corpus/templates/plan/app/i18n/ja-JP.ts +79 -0
  302. package/corpus/templates/plan/app/i18n/ko-KR.ts +77 -0
  303. package/corpus/templates/plan/app/i18n/pt-BR.ts +78 -0
  304. package/corpus/templates/plan/app/i18n/zh-CN.ts +74 -0
  305. package/corpus/templates/plan/app/root.tsx +45 -8
  306. package/corpus/templates/plan/app/routes/settings.tsx +86 -0
  307. package/corpus/templates/plan/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  308. package/corpus/templates/plan/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  309. package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +6 -0
  310. package/corpus/templates/slides/app/components/layout/Header.tsx +23 -11
  311. package/corpus/templates/slides/app/components/layout/Layout.tsx +7 -6
  312. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +23 -11
  313. package/corpus/templates/slides/app/i18n/ar-SA.ts +54 -0
  314. package/corpus/templates/slides/app/i18n/de-DE.ts +56 -0
  315. package/corpus/templates/slides/app/i18n/en-US.ts +55 -0
  316. package/corpus/templates/slides/app/i18n/es-ES.ts +55 -0
  317. package/corpus/templates/slides/app/i18n/fr-FR.ts +55 -0
  318. package/corpus/templates/slides/app/i18n/hi-IN.ts +55 -0
  319. package/corpus/templates/slides/app/i18n/index.ts +31 -0
  320. package/corpus/templates/slides/app/i18n/ja-JP.ts +55 -0
  321. package/corpus/templates/slides/app/i18n/ko-KR.ts +55 -0
  322. package/corpus/templates/slides/app/i18n/pt-BR.ts +55 -0
  323. package/corpus/templates/slides/app/i18n/zh-CN.ts +53 -0
  324. package/corpus/templates/slides/app/root.tsx +50 -8
  325. package/corpus/templates/slides/app/routes/settings.tsx +85 -0
  326. package/corpus/templates/slides/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  327. package/corpus/templates/slides/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  328. package/corpus/templates/videos/.agents/skills/self-modifying-code/SKILL.md +6 -0
  329. package/corpus/templates/videos/app/components/NewCompositionPopover.tsx +14 -9
  330. package/corpus/templates/videos/app/components/Sidebar.tsx +16 -9
  331. package/corpus/templates/videos/app/components/StudioHeader.tsx +12 -8
  332. package/corpus/templates/videos/app/components/layout/Header.tsx +21 -15
  333. package/corpus/templates/videos/app/components/layout/Layout.tsx +10 -7
  334. package/corpus/templates/videos/app/components/layout/NavSidebar.tsx +21 -6
  335. package/corpus/templates/videos/app/i18n/ar-SA.ts +73 -0
  336. package/corpus/templates/videos/app/i18n/de-DE.ts +75 -0
  337. package/corpus/templates/videos/app/i18n/en-US.ts +74 -0
  338. package/corpus/templates/videos/app/i18n/es-ES.ts +75 -0
  339. package/corpus/templates/videos/app/i18n/fr-FR.ts +75 -0
  340. package/corpus/templates/videos/app/i18n/hi-IN.ts +74 -0
  341. package/corpus/templates/videos/app/i18n/index.ts +31 -0
  342. package/corpus/templates/videos/app/i18n/ja-JP.ts +74 -0
  343. package/corpus/templates/videos/app/i18n/ko-KR.ts +74 -0
  344. package/corpus/templates/videos/app/i18n/pt-BR.ts +75 -0
  345. package/corpus/templates/videos/app/i18n/zh-CN.ts +72 -0
  346. package/corpus/templates/videos/app/pages/Index.tsx +11 -9
  347. package/corpus/templates/videos/app/root.tsx +45 -7
  348. package/corpus/templates/videos/app/routes/settings.tsx +85 -0
  349. package/corpus/templates/videos/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  350. package/corpus/templates/videos/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  351. package/dist/agent/durable-background.d.ts +32 -28
  352. package/dist/agent/durable-background.d.ts.map +1 -1
  353. package/dist/agent/durable-background.js +59 -28
  354. package/dist/agent/durable-background.js.map +1 -1
  355. package/dist/agent/production-agent.d.ts.map +1 -1
  356. package/dist/agent/production-agent.js +16 -12
  357. package/dist/agent/production-agent.js.map +1 -1
  358. package/dist/cli/skills.d.ts +1 -1
  359. package/dist/cli/skills.d.ts.map +1 -1
  360. package/dist/cli/skills.js +22 -4
  361. package/dist/cli/skills.js.map +1 -1
  362. package/dist/client/CommandMenu.d.ts +3 -0
  363. package/dist/client/CommandMenu.d.ts.map +1 -1
  364. package/dist/client/CommandMenu.js +9 -0
  365. package/dist/client/CommandMenu.js.map +1 -1
  366. package/dist/client/app-providers.d.ts +8 -1
  367. package/dist/client/app-providers.d.ts.map +1 -1
  368. package/dist/client/app-providers.js +7 -5
  369. package/dist/client/app-providers.js.map +1 -1
  370. package/dist/client/i18n.d.ts +54 -0
  371. package/dist/client/i18n.d.ts.map +1 -0
  372. package/dist/client/i18n.js +354 -0
  373. package/dist/client/i18n.js.map +1 -0
  374. package/dist/client/index.d.ts +2 -1
  375. package/dist/client/index.d.ts.map +1 -1
  376. package/dist/client/index.js +2 -1
  377. package/dist/client/index.js.map +1 -1
  378. package/dist/deploy/build.d.ts +32 -36
  379. package/dist/deploy/build.d.ts.map +1 -1
  380. package/dist/deploy/build.js +47 -104
  381. package/dist/deploy/build.js.map +1 -1
  382. package/dist/deploy/workspace-deploy.js +62 -30
  383. package/dist/deploy/workspace-deploy.js.map +1 -1
  384. package/dist/index.browser.d.ts +1 -1
  385. package/dist/index.browser.d.ts.map +1 -1
  386. package/dist/index.browser.js +1 -1
  387. package/dist/index.browser.js.map +1 -1
  388. package/dist/localization/actions/get-localization-preference.d.ts +4 -0
  389. package/dist/localization/actions/get-localization-preference.d.ts.map +1 -0
  390. package/dist/localization/actions/get-localization-preference.js +16 -0
  391. package/dist/localization/actions/get-localization-preference.js.map +1 -0
  392. package/dist/localization/actions/set-localization-preference.d.ts +6 -0
  393. package/dist/localization/actions/set-localization-preference.d.ts.map +1 -0
  394. package/dist/localization/actions/set-localization-preference.js +24 -0
  395. package/dist/localization/actions/set-localization-preference.js.map +1 -0
  396. package/dist/localization/index.d.ts +3 -0
  397. package/dist/localization/index.d.ts.map +1 -0
  398. package/dist/localization/index.js +3 -0
  399. package/dist/localization/index.js.map +1 -0
  400. package/dist/localization/server.d.ts +25 -0
  401. package/dist/localization/server.d.ts.map +1 -0
  402. package/dist/localization/server.js +69 -0
  403. package/dist/localization/server.js.map +1 -0
  404. package/dist/localization/shared.d.ts +25 -0
  405. package/dist/localization/shared.d.ts.map +1 -0
  406. package/dist/localization/shared.js +134 -0
  407. package/dist/localization/shared.js.map +1 -0
  408. package/dist/server/action-discovery.d.ts.map +1 -1
  409. package/dist/server/action-discovery.js +8 -0
  410. package/dist/server/action-discovery.js.map +1 -1
  411. package/dist/server/index.d.ts +1 -0
  412. package/dist/server/index.d.ts.map +1 -1
  413. package/dist/server/index.js +1 -0
  414. package/dist/server/index.js.map +1 -1
  415. package/dist/server/self-dispatch.d.ts +0 -10
  416. package/dist/server/self-dispatch.d.ts.map +1 -1
  417. package/dist/server/self-dispatch.js +27 -2
  418. package/dist/server/self-dispatch.js.map +1 -1
  419. package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  420. package/dist/templates/default/.agents/skills/internationalization/SKILL.md +77 -0
  421. package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +6 -0
  422. package/dist/templates/default/AGENTS.md +16 -15
  423. package/dist/templates/default/app/i18n/en-US.ts +29 -0
  424. package/dist/templates/default/app/i18n/index.ts +13 -0
  425. package/dist/templates/default/app/root.tsx +20 -1
  426. package/dist/templates/default/app/routes/_index.tsx +24 -9
  427. package/dist/templates/default/app/routes/settings.tsx +67 -0
  428. package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  429. package/dist/templates/workspace-core/.agents/skills/internationalization/SKILL.md +77 -0
  430. package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +6 -0
  431. package/dist/vite/action-types-plugin.d.ts.map +1 -1
  432. package/dist/vite/action-types-plugin.js +8 -0
  433. package/dist/vite/action-types-plugin.js.map +1 -1
  434. package/docs/AGENTS.md +1 -0
  435. package/docs/content/client.md +15 -0
  436. package/docs/content/internationalization.md +145 -0
  437. package/docs/content/locales/ar-SA/internationalization.md +102 -0
  438. package/docs/content/locales/de-DE/internationalization.md +102 -0
  439. package/docs/content/locales/es-ES/internationalization.md +102 -0
  440. package/docs/content/locales/fr-FR/internationalization.md +102 -0
  441. package/docs/content/locales/hi-IN/internationalization.md +102 -0
  442. package/docs/content/locales/ja-JP/internationalization.md +114 -0
  443. package/docs/content/locales/ko-KR/internationalization.md +102 -0
  444. package/docs/content/locales/pt-BR/internationalization.md +102 -0
  445. package/docs/content/locales/zh-CN/internationalization.md +102 -0
  446. package/docs/content/skills-guide.md +19 -18
  447. package/package.json +7 -1
  448. package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  449. package/src/templates/default/.agents/skills/internationalization/SKILL.md +77 -0
  450. package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +6 -0
  451. package/src/templates/default/AGENTS.md +16 -15
  452. package/src/templates/default/app/i18n/en-US.ts +29 -0
  453. package/src/templates/default/app/i18n/index.ts +13 -0
  454. package/src/templates/default/app/root.tsx +20 -1
  455. package/src/templates/default/app/routes/_index.tsx +24 -9
  456. package/src/templates/default/app/routes/settings.tsx +67 -0
  457. package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  458. package/src/templates/workspace-core/.agents/skills/internationalization/SKILL.md +77 -0
  459. package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +6 -0
@@ -0,0 +1,77 @@
1
+ ---
2
+ name: internationalization
3
+ description: >-
4
+ How to add or edit localized UI copy in agent-native apps. Use when adding,
5
+ removing, or changing user-visible interface text, prompts, toasts, labels,
6
+ empty states, or date/number/list formatting.
7
+ scope: dev
8
+ metadata:
9
+ internal: true
10
+ ---
11
+
12
+ # Internationalization
13
+
14
+ ## Rule
15
+
16
+ Visible framework/template UI copy belongs in the app's i18n catalog, not
17
+ inline in components. When you add or edit UI text, update the English source
18
+ catalog first, update existing locale catalogs, and run the i18n guard.
19
+
20
+ ## Catalogs
21
+
22
+ Templates use `app/i18n/`:
23
+
24
+ - `en-US.ts` is the canonical source tree and fallback.
25
+ - Other locale files keep the same non-plural keys and the same placeholders.
26
+ - `index.ts` exports an `AgentNativeI18nCatalog` with English bundled and
27
+ non-English catalogs loaded by dynamic import.
28
+
29
+ Use BCP-47 filenames from the supported set: `en-US`, `zh-CN`, `es-ES`,
30
+ `fr-FR`, `de-DE`, `ja-JP`, `ko-KR`, `pt-BR`, `hi-IN`, `ar-SA`.
31
+
32
+ ## UI Pattern
33
+
34
+ - Wrap apps with `AppProviders i18n={{ catalog: i18nCatalog }}`.
35
+ - Read strings with `useT()` and keep keys stable.
36
+ - Sidebar apps should expose a `/settings` route in the app sidebar. Put
37
+ `<LanguagePicker />` in that settings page, usually in a Language or General
38
+ section, and keep the header language icon only as a quick-access shortcut.
39
+ - Settings pages should include an "Agent settings" row/card that calls
40
+ `openAgentSettings()` from `@agent-native/core/client` to open the right
41
+ agent sidebar's Settings tab. Localize the title, description, and button.
42
+ - Use `useFormatters()` for dates, numbers, relative time, and lists instead
43
+ of embedding formatted values in translation strings.
44
+ - Do not translate stable identifiers: action names, route names, enum values,
45
+ app-state keys, database values, protocol fields, env var names, or provider
46
+ names.
47
+
48
+ ## Plurals And Placeholders
49
+
50
+ Plural strings use i18next/CLDR suffixes. Do not force every locale to copy
51
+ English plural categories:
52
+
53
+ - English uses `_one` and `_other`.
54
+ - Chinese and Japanese usually use `_other`.
55
+ - Arabic uses `_zero`, `_one`, `_two`, `_few`, `_many`, and `_other`.
56
+
57
+ Keep interpolation placeholders identical across locales, such as
58
+ `{{count}}`, `{{name}}`, or ICU-style `{count}` arguments.
59
+
60
+ ## RTL
61
+
62
+ New UI should be RTL-safe. Prefer logical CSS utilities/properties such as
63
+ `ms-*`, `me-*`, `ps-*`, `pe-*`, `start-*`, `end-*`, `text-start`, and
64
+ `text-end` when direction matters. Avoid hardcoded left/right positioning for
65
+ new localized UI unless it is genuinely physical.
66
+
67
+ ## Verification
68
+
69
+ Run:
70
+
71
+ ```bash
72
+ pnpm guard:i18n-catalogs
73
+ ```
74
+
75
+ For broader changes, also run the affected template tests and `pnpm typecheck`.
76
+ Machine translation is only a starting point; high-visibility strings need
77
+ human review.
@@ -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
@@ -78,6 +78,16 @@ const CORE_SHARING_ACTIONS: Array<{ name: string; specifier: string }> = [
78
78
  name: "context-report",
79
79
  specifier: "@agent-native/core/agent/context-xray/actions/context-report",
80
80
  },
81
+ {
82
+ name: "get-localization-preference",
83
+ specifier:
84
+ "@agent-native/core/localization/actions/get-localization-preference",
85
+ },
86
+ {
87
+ name: "set-localization-preference",
88
+ specifier:
89
+ "@agent-native/core/localization/actions/set-localization-preference",
90
+ },
81
91
  ];
82
92
 
83
93
  function isRuntimeSourceFile(filename: string): boolean {
@@ -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
@@ -6,22 +6,23 @@ import {
6
6
  useHeaderTitle,
7
7
  useHeaderActions,
8
8
  } from "./HeaderActions";
9
- import { AgentToggleButton } from "@agent-native/core/client";
9
+ import { AgentToggleButton, LanguagePicker } from "@agent-native/core/client";
10
10
  import { RunsTray } from "@agent-native/core/client/progress";
11
+ import { useT } from "@agent-native/core/client";
11
12
 
12
- const pageTitles: Record<string, string> = {
13
- "/": "Overview",
14
- "/data-sources": "Data Sources",
15
- "/data-dictionary": "Data Dictionary",
16
- "/catalog": "Template Catalog",
17
- "/analyses": "Analyses",
18
- "/dashboards/explorer": "Explorer",
19
- "/team": "Team",
20
- "/settings": "Settings",
13
+ const pageTitleKeys: Record<string, string> = {
14
+ "/": "navigation.overview",
15
+ "/data-sources": "navigation.dataSources",
16
+ "/data-dictionary": "navigation.dataDictionary",
17
+ "/catalog": "navigation.templateCatalog",
18
+ "/analyses": "navigation.analyses",
19
+ "/dashboards/explorer": "navigation.explorer",
20
+ "/team": "navigation.team",
21
+ "/settings": "navigation.settings",
21
22
  };
22
23
 
23
- function resolveTitle(pathname: string): ReactNode {
24
- if (pageTitles[pathname]) return pageTitles[pathname];
24
+ function resolveTitle(pathname: string, t: (key: string) => string): ReactNode {
25
+ if (pageTitleKeys[pathname]) return t(pageTitleKeys[pathname]);
25
26
 
26
27
  const adhocMatch = pathname.match(/^\/(?:adhoc|dashboards)\/(.+)$/);
27
28
  if (adhocMatch) {
@@ -30,16 +31,17 @@ function resolveTitle(pathname: string): ReactNode {
30
31
  return dash?.name || <DashboardTitleSkeleton />;
31
32
  }
32
33
 
33
- if (pathname.startsWith("/analyses/")) return "Analyses";
34
+ if (pathname.startsWith("/analyses/")) return t("navigation.analyses");
34
35
 
35
- return "Analytics";
36
+ return t("navigation.brand");
36
37
  }
37
38
 
38
39
  export function Header() {
39
40
  const location = useLocation();
41
+ const t = useT();
40
42
  const title = useHeaderTitle();
41
43
  const actions = useHeaderActions();
42
- const fallbackTitle = resolveTitle(location.pathname);
44
+ const fallbackTitle = resolveTitle(location.pathname, t);
43
45
 
44
46
  return (
45
47
  <header className="flex h-12 items-center gap-3 border-b border-border bg-background px-4 lg:px-6 shrink-0">
@@ -55,6 +57,7 @@ export function Header() {
55
57
  </div>
56
58
  <div className="flex items-center gap-2 shrink-0">
57
59
  {actions}
60
+ <LanguagePicker variant="icon" />
58
61
  <RunsTray pollMs={1500} />
59
62
  <AgentToggleButton />
60
63
  </div>
@@ -12,6 +12,7 @@ import {
12
12
  useAgentChatHomeHandoff,
13
13
  useAgentChatHomeHandoffLinks,
14
14
  useGuidedQuestionFlow,
15
+ useT,
15
16
  } from "@agent-native/core/client";
16
17
  import { InvitationBanner } from "@agent-native/core/client/org";
17
18
  import { useNavigationState } from "@/hooks/use-navigation-state";
@@ -27,6 +28,7 @@ export function Layout({ children }: LayoutProps) {
27
28
  useNavigationState();
28
29
  const location = useLocation();
29
30
  const navigate = useNavigate();
31
+ const t = useT();
30
32
 
31
33
  // Analytics has two distinct "primary resources" — dashboards
32
34
  // (`/dashboards/:id`, legacy `/adhoc/:id`) and ad-hoc analyses
@@ -149,12 +151,12 @@ export function Layout({ children }: LayoutProps) {
149
151
  browserTabId={TAB_ID}
150
152
  openOnChatRunning={chatHomeHandoffActive}
151
153
  onFullscreenRequest={openAskAgentFullscreen}
152
- emptyStateText="Ask me to analyze a dashboard, compare trends, or dig into data..."
154
+ emptyStateText={t("chat.emptyState")}
153
155
  suggestions={[
154
- "What's driving ARR growth this quarter?",
155
- "Show me churn trends over the last 6 months",
156
- "Analyze the HubSpot Sales dashboard for anomalies",
157
- "Compare MRR between enterprise and SMB",
156
+ t("chat.suggestionArrGrowth"),
157
+ t("chat.suggestionChurn"),
158
+ t("chat.suggestionAnomalies"),
159
+ t("chat.suggestionMrr"),
158
160
  ]}
159
161
  scope={sidebarScope}
160
162
  >
@@ -3,10 +3,12 @@ import { useLocation } from "react-router";
3
3
  import { IconMenu, IconChartBar } from "@tabler/icons-react";
4
4
  import { Sheet, SheetContent, SheetTitle } from "@/components/ui/sheet";
5
5
  import { Sidebar } from "./Sidebar";
6
+ import { useT } from "@agent-native/core/client";
6
7
 
7
8
  export function MobileNav() {
8
9
  const [open, setOpen] = useState(false);
9
10
  const location = useLocation();
11
+ const t = useT();
10
12
 
11
13
  // Auto-close on route change
12
14
  useEffect(() => {
@@ -18,7 +20,7 @@ export function MobileNav() {
18
20
  <button
19
21
  onClick={() => setOpen(true)}
20
22
  className="mr-3 p-2.5 -ml-1 rounded-md hover:bg-sidebar-accent/50"
21
- aria-label="Open navigation"
23
+ aria-label={t("navigation.openNavigation")}
22
24
  >
23
25
  <IconMenu className="h-5 w-5 text-foreground" />
24
26
  </button>
@@ -26,12 +28,16 @@ export function MobileNav() {
26
28
  <div className="flex h-7 w-7 items-center justify-center rounded-lg bg-primary text-primary-foreground">
27
29
  <IconChartBar className="h-4 w-4" />
28
30
  </div>
29
- <span className="text-base font-bold tracking-tight">Analytics</span>
31
+ <span className="text-base font-bold tracking-tight">
32
+ {t("navigation.brand")}
33
+ </span>
30
34
  </div>
31
35
 
32
36
  <Sheet open={open} onOpenChange={setOpen}>
33
37
  <SheetContent side="left" className="p-0 w-[280px]">
34
- <SheetTitle className="sr-only">Navigation</SheetTitle>
38
+ <SheetTitle className="sr-only">
39
+ {t("navigation.navigation")}
40
+ </SheetTitle>
35
41
  <Sidebar mobile />
36
42
  </SheetContent>
37
43
  </Sheet>
@@ -96,6 +96,7 @@ import {
96
96
  navigateWithAgentChatViewTransition,
97
97
  useActionMutation,
98
98
  useChangeVersions,
99
+ useT,
99
100
  } from "@agent-native/core/client";
100
101
  import { ExtensionsSidebarSection } from "@agent-native/core/client/extensions";
101
102
  import { NewDashboardDialog } from "./NewDashboardDialog";
@@ -143,8 +144,8 @@ import {
143
144
  import { CSS } from "@dnd-kit/utilities";
144
145
 
145
146
  const bottomItems = [
146
- { icon: IconUsers, label: "Team", href: "/team" },
147
- { icon: IconSettings, label: "Settings", href: "/settings" },
147
+ { icon: IconUsers, labelKey: "navigation.team", href: "/team" },
148
+ { icon: IconSettings, labelKey: "navigation.settings", href: "/settings" },
148
149
  ];
149
150
 
150
151
  function getStoredBoolean(key: string, fallback: boolean): boolean {
@@ -1143,6 +1144,7 @@ function persistThemePreference(theme: "light" | "dark") {
1143
1144
  export function Sidebar({ mobile }: { mobile?: boolean } = {}) {
1144
1145
  const location = useLocation();
1145
1146
  const navigate = useNavigate();
1147
+ const t = useT();
1146
1148
  const { logout } = useAuth();
1147
1149
  const queryClient = useQueryClient();
1148
1150
  const { resolvedTheme, setTheme } = useTheme();
@@ -2191,7 +2193,7 @@ export function Sidebar({ mobile }: { mobile?: boolean } = {}) {
2191
2193
  )}
2192
2194
  >
2193
2195
  <Icon className="h-4 w-4" />
2194
- {item.label}
2196
+ {t(item.labelKey)}
2195
2197
  </Link>
2196
2198
  );
2197
2199
  })}
@@ -0,0 +1,3 @@
1
+ import { messagesByLocale } from "../i18n-data";
2
+
3
+ export default messagesByLocale["ar-SA"];
@@ -0,0 +1,3 @@
1
+ import { messagesByLocale } from "../i18n-data";
2
+
3
+ export default messagesByLocale["de-DE"];
@@ -0,0 +1,3 @@
1
+ import { messagesByLocale } from "../i18n-data";
2
+
3
+ export default messagesByLocale["en-US"];
@@ -0,0 +1,3 @@
1
+ import { messagesByLocale } from "../i18n-data";
2
+
3
+ export default messagesByLocale["es-ES"];
@@ -0,0 +1,3 @@
1
+ import { messagesByLocale } from "../i18n-data";
2
+
3
+ export default messagesByLocale["fr-FR"];
@@ -0,0 +1,3 @@
1
+ import { messagesByLocale } from "../i18n-data";
2
+
3
+ export default messagesByLocale["hi-IN"];
@@ -0,0 +1,31 @@
1
+ import enUS from "./en-US";
2
+ import type { AgentNativeI18nCatalog } from "@agent-native/core/client";
3
+
4
+ export const i18nCatalog = {
5
+ sourceLocale: "en-US",
6
+ messages: enUS,
7
+ loadMessages: async (locale) => {
8
+ switch (locale) {
9
+ case "zh-CN":
10
+ return (await import("./zh-CN")).default;
11
+ case "es-ES":
12
+ return (await import("./es-ES")).default;
13
+ case "fr-FR":
14
+ return (await import("./fr-FR")).default;
15
+ case "de-DE":
16
+ return (await import("./de-DE")).default;
17
+ case "ja-JP":
18
+ return (await import("./ja-JP")).default;
19
+ case "ko-KR":
20
+ return (await import("./ko-KR")).default;
21
+ case "pt-BR":
22
+ return (await import("./pt-BR")).default;
23
+ case "hi-IN":
24
+ return (await import("./hi-IN")).default;
25
+ case "ar-SA":
26
+ return (await import("./ar-SA")).default;
27
+ default:
28
+ return null;
29
+ }
30
+ },
31
+ } satisfies AgentNativeI18nCatalog;
@@ -0,0 +1,3 @@
1
+ import { messagesByLocale } from "../i18n-data";
2
+
3
+ export default messagesByLocale["ja-JP"];
@@ -0,0 +1,3 @@
1
+ import { messagesByLocale } from "../i18n-data";
2
+
3
+ export default messagesByLocale["ko-KR"];
@@ -0,0 +1,3 @@
1
+ import { messagesByLocale } from "../i18n-data";
2
+
3
+ export default messagesByLocale["pt-BR"];
@@ -0,0 +1,3 @@
1
+ import { messagesByLocale } from "../i18n-data";
2
+
3
+ export default messagesByLocale["zh-CN"];