@agent-native/core 0.75.5 → 0.76.1

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 (460) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +48 -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 +38 -2
  18. package/corpus/core/src/agent/production-agent.ts +54 -0
  19. package/corpus/core/src/agent/run-manager.ts +27 -0
  20. package/corpus/core/src/agent/run-store.ts +185 -4
  21. package/corpus/core/src/client/CommandMenu.tsx +16 -0
  22. package/corpus/core/src/client/app-providers.tsx +26 -1
  23. package/corpus/core/src/client/i18n.tsx +605 -0
  24. package/corpus/core/src/client/index.ts +28 -0
  25. package/corpus/core/src/index.browser.ts +25 -0
  26. package/corpus/core/src/localization/actions/get-localization-preference.ts +23 -0
  27. package/corpus/core/src/localization/actions/set-localization-preference.ts +30 -0
  28. package/corpus/core/src/localization/index.ts +2 -0
  29. package/corpus/core/src/localization/server.ts +131 -0
  30. package/corpus/core/src/localization/shared.ts +163 -0
  31. package/corpus/core/src/server/action-discovery.ts +8 -0
  32. package/corpus/core/src/server/agent-chat-plugin.ts +71 -0
  33. package/corpus/core/src/server/auth.ts +13 -0
  34. package/corpus/core/src/server/index.ts +8 -0
  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/CommandPalette.tsx +12 -12
  50. package/corpus/templates/analytics/app/components/layout/Header.tsx +18 -15
  51. package/corpus/templates/analytics/app/components/layout/Layout.tsx +7 -5
  52. package/corpus/templates/analytics/app/components/layout/MobileNav.tsx +9 -3
  53. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +28 -26
  54. package/corpus/templates/analytics/app/i18n/ar-SA.ts +3 -0
  55. package/corpus/templates/analytics/app/i18n/de-DE.ts +3 -0
  56. package/corpus/templates/analytics/app/i18n/en-US.ts +3 -0
  57. package/corpus/templates/analytics/app/i18n/es-ES.ts +3 -0
  58. package/corpus/templates/analytics/app/i18n/fr-FR.ts +3 -0
  59. package/corpus/templates/analytics/app/i18n/hi-IN.ts +3 -0
  60. package/corpus/templates/analytics/app/i18n/index.ts +31 -0
  61. package/corpus/templates/analytics/app/i18n/ja-JP.ts +3 -0
  62. package/corpus/templates/analytics/app/i18n/ko-KR.ts +3 -0
  63. package/corpus/templates/analytics/app/i18n/pt-BR.ts +3 -0
  64. package/corpus/templates/analytics/app/i18n/zh-CN.ts +3 -0
  65. package/corpus/templates/analytics/app/i18n-data.ts +433 -0
  66. package/corpus/templates/analytics/app/pages/Settings.tsx +50 -16
  67. package/corpus/templates/analytics/app/pages/analyses/AnalysesList.tsx +2 -2
  68. package/corpus/templates/analytics/app/root.tsx +14 -1
  69. package/corpus/templates/analytics/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  70. package/corpus/templates/analytics/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  71. package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +6 -0
  72. package/corpus/templates/assets/app/components/layout/Header.tsx +17 -8
  73. package/corpus/templates/assets/app/components/layout/Layout.tsx +10 -6
  74. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +40 -23
  75. package/corpus/templates/assets/app/i18n/ar-SA.ts +3 -0
  76. package/corpus/templates/assets/app/i18n/de-DE.ts +3 -0
  77. package/corpus/templates/assets/app/i18n/en-US.ts +3 -0
  78. package/corpus/templates/assets/app/i18n/es-ES.ts +3 -0
  79. package/corpus/templates/assets/app/i18n/fr-FR.ts +3 -0
  80. package/corpus/templates/assets/app/i18n/hi-IN.ts +3 -0
  81. package/corpus/templates/assets/app/i18n/index.ts +31 -0
  82. package/corpus/templates/assets/app/i18n/ja-JP.ts +3 -0
  83. package/corpus/templates/assets/app/i18n/ko-KR.ts +3 -0
  84. package/corpus/templates/assets/app/i18n/pt-BR.ts +3 -0
  85. package/corpus/templates/assets/app/i18n/zh-CN.ts +3 -0
  86. package/corpus/templates/assets/app/i18n-data.ts +668 -0
  87. package/corpus/templates/assets/app/root.tsx +40 -15
  88. package/corpus/templates/assets/app/routes/_index.tsx +9 -10
  89. package/corpus/templates/assets/app/routes/settings.tsx +37 -6
  90. package/corpus/templates/assets/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  91. package/corpus/templates/assets/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  92. package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +5 -0
  93. package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +6 -0
  94. package/corpus/templates/brain/app/components/layout/Layout.tsx +12 -8
  95. package/corpus/templates/brain/app/components/layout/Sidebar.tsx +23 -12
  96. package/corpus/templates/brain/app/i18n/ar-SA.ts +3 -0
  97. package/corpus/templates/brain/app/i18n/de-DE.ts +3 -0
  98. package/corpus/templates/brain/app/i18n/en-US.ts +3 -0
  99. package/corpus/templates/brain/app/i18n/es-ES.ts +3 -0
  100. package/corpus/templates/brain/app/i18n/fr-FR.ts +3 -0
  101. package/corpus/templates/brain/app/i18n/hi-IN.ts +3 -0
  102. package/corpus/templates/brain/app/i18n/index.ts +31 -0
  103. package/corpus/templates/brain/app/i18n/ja-JP.ts +3 -0
  104. package/corpus/templates/brain/app/i18n/ko-KR.ts +3 -0
  105. package/corpus/templates/brain/app/i18n/pt-BR.ts +3 -0
  106. package/corpus/templates/brain/app/i18n/zh-CN.ts +3 -0
  107. package/corpus/templates/brain/app/i18n-data.ts +624 -0
  108. package/corpus/templates/brain/app/root.tsx +27 -12
  109. package/corpus/templates/brain/app/routes/knowledge.tsx +6 -6
  110. package/corpus/templates/brain/app/routes/ops.tsx +4 -4
  111. package/corpus/templates/brain/app/routes/search.tsx +4 -4
  112. package/corpus/templates/brain/app/routes/settings.tsx +48 -11
  113. package/corpus/templates/brain/app/routes/sources.tsx +3 -3
  114. package/corpus/templates/brain/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  115. package/corpus/templates/brain/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  116. package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +6 -0
  117. package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +2 -0
  118. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +16 -9
  119. package/corpus/templates/calendar/app/i18n/ar-SA.ts +57 -0
  120. package/corpus/templates/calendar/app/i18n/de-DE.ts +58 -0
  121. package/corpus/templates/calendar/app/i18n/en-US.ts +57 -0
  122. package/corpus/templates/calendar/app/i18n/es-ES.ts +58 -0
  123. package/corpus/templates/calendar/app/i18n/fr-FR.ts +58 -0
  124. package/corpus/templates/calendar/app/i18n/hi-IN.ts +57 -0
  125. package/corpus/templates/calendar/app/i18n/index.ts +31 -0
  126. package/corpus/templates/calendar/app/i18n/ja-JP.ts +58 -0
  127. package/corpus/templates/calendar/app/i18n/ko-KR.ts +57 -0
  128. package/corpus/templates/calendar/app/i18n/pt-BR.ts +57 -0
  129. package/corpus/templates/calendar/app/i18n/zh-CN.ts +57 -0
  130. package/corpus/templates/calendar/app/i18n-data.ts +516 -0
  131. package/corpus/templates/calendar/app/pages/CalendarView.tsx +2 -0
  132. package/corpus/templates/calendar/app/pages/Settings.tsx +63 -28
  133. package/corpus/templates/calendar/app/root.tsx +78 -7
  134. package/corpus/templates/calendar/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  135. package/corpus/templates/calendar/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  136. package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +5 -0
  137. package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +6 -0
  138. package/corpus/templates/chat/app/components/layout/Header.tsx +17 -11
  139. package/corpus/templates/chat/app/components/layout/Layout.tsx +12 -8
  140. package/corpus/templates/chat/app/components/layout/Sidebar.tsx +47 -18
  141. package/corpus/templates/chat/app/i18n/ar-SA.ts +62 -0
  142. package/corpus/templates/chat/app/i18n/de-DE.ts +63 -0
  143. package/corpus/templates/chat/app/i18n/en-US.ts +63 -0
  144. package/corpus/templates/chat/app/i18n/es-ES.ts +63 -0
  145. package/corpus/templates/chat/app/i18n/fr-FR.ts +63 -0
  146. package/corpus/templates/chat/app/i18n/hi-IN.ts +63 -0
  147. package/corpus/templates/chat/app/i18n/index.ts +31 -0
  148. package/corpus/templates/chat/app/i18n/ja-JP.ts +63 -0
  149. package/corpus/templates/chat/app/i18n/ko-KR.ts +63 -0
  150. package/corpus/templates/chat/app/i18n/pt-BR.ts +63 -0
  151. package/corpus/templates/chat/app/i18n/zh-CN.ts +61 -0
  152. package/corpus/templates/chat/app/i18n-data.ts +475 -0
  153. package/corpus/templates/chat/app/root.tsx +18 -5
  154. package/corpus/templates/chat/app/routes/_index.tsx +9 -8
  155. package/corpus/templates/chat/app/routes/settings.tsx +86 -0
  156. package/corpus/templates/chat/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  157. package/corpus/templates/chat/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  158. package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +6 -0
  159. package/corpus/templates/clips/app/components/layout/Header.tsx +23 -17
  160. package/corpus/templates/clips/app/components/library/empty-state.tsx +10 -34
  161. package/corpus/templates/clips/app/components/library/library-layout.tsx +45 -34
  162. package/corpus/templates/clips/app/i18n/ar-SA.ts +182 -0
  163. package/corpus/templates/clips/app/i18n/de-DE.ts +184 -0
  164. package/corpus/templates/clips/app/i18n/en-US.ts +179 -0
  165. package/corpus/templates/clips/app/i18n/es-ES.ts +183 -0
  166. package/corpus/templates/clips/app/i18n/fr-FR.ts +184 -0
  167. package/corpus/templates/clips/app/i18n/hi-IN.ts +180 -0
  168. package/corpus/templates/clips/app/i18n/index.ts +41 -0
  169. package/corpus/templates/clips/app/i18n/ja-JP.ts +180 -0
  170. package/corpus/templates/clips/app/i18n/ko-KR.ts +178 -0
  171. package/corpus/templates/clips/app/i18n/pt-BR.ts +183 -0
  172. package/corpus/templates/clips/app/i18n/zh-CN.ts +173 -0
  173. package/corpus/templates/clips/app/root.tsx +104 -10
  174. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +154 -95
  175. package/corpus/templates/clips/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  176. package/corpus/templates/clips/changelog/2026-06-24-clips-now-includes-a-language-picker-and-simplified-chinese-ui.md +6 -0
  177. package/corpus/templates/clips/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  178. package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +6 -0
  179. package/corpus/templates/content/app/components/EmptyState.tsx +7 -5
  180. package/corpus/templates/content/app/components/ThemeToggle.tsx +4 -2
  181. package/corpus/templates/content/app/components/layout/Header.tsx +2 -0
  182. package/corpus/templates/content/app/components/layout/Layout.tsx +8 -7
  183. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +41 -1
  184. package/corpus/templates/content/app/i18n/ar-SA.ts +3 -0
  185. package/corpus/templates/content/app/i18n/de-DE.ts +3 -0
  186. package/corpus/templates/content/app/i18n/en-US.ts +3 -0
  187. package/corpus/templates/content/app/i18n/es-ES.ts +3 -0
  188. package/corpus/templates/content/app/i18n/fr-FR.ts +3 -0
  189. package/corpus/templates/content/app/i18n/hi-IN.ts +3 -0
  190. package/corpus/templates/content/app/i18n/index.ts +31 -0
  191. package/corpus/templates/content/app/i18n/ja-JP.ts +3 -0
  192. package/corpus/templates/content/app/i18n/ko-KR.ts +3 -0
  193. package/corpus/templates/content/app/i18n/pt-BR.ts +3 -0
  194. package/corpus/templates/content/app/i18n/zh-CN.ts +3 -0
  195. package/corpus/templates/content/app/i18n-data.ts +490 -0
  196. package/corpus/templates/content/app/root.tsx +110 -23
  197. package/corpus/templates/content/app/routes/_app.settings.tsx +84 -0
  198. package/corpus/templates/content/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  199. package/corpus/templates/content/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  200. package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +6 -0
  201. package/corpus/templates/design/app/components/layout/Header.tsx +16 -8
  202. package/corpus/templates/design/app/components/layout/Layout.tsx +8 -6
  203. package/corpus/templates/design/app/components/layout/Sidebar.tsx +25 -9
  204. package/corpus/templates/design/app/i18n/ar-SA.ts +3 -0
  205. package/corpus/templates/design/app/i18n/de-DE.ts +3 -0
  206. package/corpus/templates/design/app/i18n/en-US.ts +3 -0
  207. package/corpus/templates/design/app/i18n/es-ES.ts +3 -0
  208. package/corpus/templates/design/app/i18n/fr-FR.ts +3 -0
  209. package/corpus/templates/design/app/i18n/hi-IN.ts +3 -0
  210. package/corpus/templates/design/app/i18n/index.ts +31 -0
  211. package/corpus/templates/design/app/i18n/ja-JP.ts +3 -0
  212. package/corpus/templates/design/app/i18n/ko-KR.ts +3 -0
  213. package/corpus/templates/design/app/i18n/pt-BR.ts +3 -0
  214. package/corpus/templates/design/app/i18n/zh-CN.ts +3 -0
  215. package/corpus/templates/design/app/i18n-data.ts +350 -0
  216. package/corpus/templates/design/app/root.tsx +40 -15
  217. package/corpus/templates/design/app/routes/settings.tsx +43 -0
  218. package/corpus/templates/design/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  219. package/corpus/templates/design/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  220. package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +6 -0
  221. package/corpus/templates/dispatch/app/i18n/ar-SA.ts +3 -0
  222. package/corpus/templates/dispatch/app/i18n/de-DE.ts +3 -0
  223. package/corpus/templates/dispatch/app/i18n/en-US.ts +3 -0
  224. package/corpus/templates/dispatch/app/i18n/es-ES.ts +3 -0
  225. package/corpus/templates/dispatch/app/i18n/fr-FR.ts +3 -0
  226. package/corpus/templates/dispatch/app/i18n/hi-IN.ts +3 -0
  227. package/corpus/templates/dispatch/app/i18n/index.ts +31 -0
  228. package/corpus/templates/dispatch/app/i18n/ja-JP.ts +3 -0
  229. package/corpus/templates/dispatch/app/i18n/ko-KR.ts +3 -0
  230. package/corpus/templates/dispatch/app/i18n/pt-BR.ts +3 -0
  231. package/corpus/templates/dispatch/app/i18n/zh-CN.ts +3 -0
  232. package/corpus/templates/dispatch/app/i18n-data.ts +267 -0
  233. package/corpus/templates/dispatch/app/root.tsx +18 -4
  234. package/corpus/templates/dispatch/app/routes/settings.tsx +86 -0
  235. package/corpus/templates/dispatch/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  236. package/corpus/templates/dispatch/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  237. package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +6 -0
  238. package/corpus/templates/forms/app/components/layout/Header.tsx +16 -9
  239. package/corpus/templates/forms/app/components/layout/Layout.tsx +6 -4
  240. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +34 -17
  241. package/corpus/templates/forms/app/i18n/ar-SA.ts +58 -0
  242. package/corpus/templates/forms/app/i18n/de-DE.ts +59 -0
  243. package/corpus/templates/forms/app/i18n/en-US.ts +59 -0
  244. package/corpus/templates/forms/app/i18n/es-ES.ts +59 -0
  245. package/corpus/templates/forms/app/i18n/fr-FR.ts +59 -0
  246. package/corpus/templates/forms/app/i18n/hi-IN.ts +59 -0
  247. package/corpus/templates/forms/app/i18n/index.ts +31 -0
  248. package/corpus/templates/forms/app/i18n/ja-JP.ts +59 -0
  249. package/corpus/templates/forms/app/i18n/ko-KR.ts +59 -0
  250. package/corpus/templates/forms/app/i18n/pt-BR.ts +59 -0
  251. package/corpus/templates/forms/app/i18n/zh-CN.ts +56 -0
  252. package/corpus/templates/forms/app/root.tsx +65 -16
  253. package/corpus/templates/forms/app/routes/_app.settings.tsx +85 -0
  254. package/corpus/templates/forms/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  255. package/corpus/templates/forms/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  256. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +29 -17
  257. package/corpus/templates/macros/app/components/layout/Header.tsx +16 -10
  258. package/corpus/templates/macros/app/i18n/ar-SA.ts +54 -0
  259. package/corpus/templates/macros/app/i18n/de-DE.ts +55 -0
  260. package/corpus/templates/macros/app/i18n/en-US.ts +55 -0
  261. package/corpus/templates/macros/app/i18n/es-ES.ts +55 -0
  262. package/corpus/templates/macros/app/i18n/fr-FR.ts +55 -0
  263. package/corpus/templates/macros/app/i18n/hi-IN.ts +55 -0
  264. package/corpus/templates/macros/app/i18n/index.ts +31 -0
  265. package/corpus/templates/macros/app/i18n/ja-JP.ts +55 -0
  266. package/corpus/templates/macros/app/i18n/ko-KR.ts +55 -0
  267. package/corpus/templates/macros/app/i18n/pt-BR.ts +55 -0
  268. package/corpus/templates/macros/app/i18n/zh-CN.ts +53 -0
  269. package/corpus/templates/macros/app/root.tsx +65 -15
  270. package/corpus/templates/macros/app/routes/settings.tsx +85 -0
  271. package/corpus/templates/macros/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  272. package/corpus/templates/macros/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  273. package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +6 -0
  274. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +9 -4
  275. package/corpus/templates/mail/app/i18n/ar-SA.ts +33 -0
  276. package/corpus/templates/mail/app/i18n/de-DE.ts +33 -0
  277. package/corpus/templates/mail/app/i18n/en-US.ts +32 -0
  278. package/corpus/templates/mail/app/i18n/es-ES.ts +33 -0
  279. package/corpus/templates/mail/app/i18n/fr-FR.ts +33 -0
  280. package/corpus/templates/mail/app/i18n/hi-IN.ts +32 -0
  281. package/corpus/templates/mail/app/i18n/index.ts +31 -0
  282. package/corpus/templates/mail/app/i18n/ja-JP.ts +32 -0
  283. package/corpus/templates/mail/app/i18n/ko-KR.ts +33 -0
  284. package/corpus/templates/mail/app/i18n/pt-BR.ts +34 -0
  285. package/corpus/templates/mail/app/i18n/zh-CN.ts +32 -0
  286. package/corpus/templates/mail/app/pages/SettingsPage.tsx +67 -13
  287. package/corpus/templates/mail/app/root.tsx +20 -0
  288. package/corpus/templates/mail/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  289. package/corpus/templates/mail/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  290. package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +5 -0
  291. package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +6 -0
  292. package/corpus/templates/plan/app/components/layout/Header.tsx +19 -12
  293. package/corpus/templates/plan/app/components/layout/Layout.tsx +11 -7
  294. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +41 -28
  295. package/corpus/templates/plan/app/i18n/ar-SA.ts +77 -0
  296. package/corpus/templates/plan/app/i18n/de-DE.ts +78 -0
  297. package/corpus/templates/plan/app/i18n/en-US.ts +78 -0
  298. package/corpus/templates/plan/app/i18n/es-ES.ts +78 -0
  299. package/corpus/templates/plan/app/i18n/fr-FR.ts +78 -0
  300. package/corpus/templates/plan/app/i18n/hi-IN.ts +78 -0
  301. package/corpus/templates/plan/app/i18n/index.ts +31 -0
  302. package/corpus/templates/plan/app/i18n/ja-JP.ts +79 -0
  303. package/corpus/templates/plan/app/i18n/ko-KR.ts +77 -0
  304. package/corpus/templates/plan/app/i18n/pt-BR.ts +78 -0
  305. package/corpus/templates/plan/app/i18n/zh-CN.ts +74 -0
  306. package/corpus/templates/plan/app/root.tsx +45 -8
  307. package/corpus/templates/plan/app/routes/settings.tsx +86 -0
  308. package/corpus/templates/plan/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  309. package/corpus/templates/plan/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  310. package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +6 -0
  311. package/corpus/templates/slides/app/components/layout/Header.tsx +23 -11
  312. package/corpus/templates/slides/app/components/layout/Layout.tsx +7 -6
  313. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +23 -11
  314. package/corpus/templates/slides/app/i18n/ar-SA.ts +54 -0
  315. package/corpus/templates/slides/app/i18n/de-DE.ts +56 -0
  316. package/corpus/templates/slides/app/i18n/en-US.ts +55 -0
  317. package/corpus/templates/slides/app/i18n/es-ES.ts +55 -0
  318. package/corpus/templates/slides/app/i18n/fr-FR.ts +55 -0
  319. package/corpus/templates/slides/app/i18n/hi-IN.ts +55 -0
  320. package/corpus/templates/slides/app/i18n/index.ts +31 -0
  321. package/corpus/templates/slides/app/i18n/ja-JP.ts +55 -0
  322. package/corpus/templates/slides/app/i18n/ko-KR.ts +55 -0
  323. package/corpus/templates/slides/app/i18n/pt-BR.ts +55 -0
  324. package/corpus/templates/slides/app/i18n/zh-CN.ts +53 -0
  325. package/corpus/templates/slides/app/root.tsx +50 -8
  326. package/corpus/templates/slides/app/routes/settings.tsx +85 -0
  327. package/corpus/templates/slides/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  328. package/corpus/templates/slides/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  329. package/corpus/templates/videos/.agents/skills/self-modifying-code/SKILL.md +6 -0
  330. package/corpus/templates/videos/app/components/NewCompositionPopover.tsx +14 -9
  331. package/corpus/templates/videos/app/components/Sidebar.tsx +16 -9
  332. package/corpus/templates/videos/app/components/StudioHeader.tsx +12 -8
  333. package/corpus/templates/videos/app/components/layout/Header.tsx +21 -15
  334. package/corpus/templates/videos/app/components/layout/Layout.tsx +10 -7
  335. package/corpus/templates/videos/app/components/layout/NavSidebar.tsx +21 -6
  336. package/corpus/templates/videos/app/i18n/ar-SA.ts +73 -0
  337. package/corpus/templates/videos/app/i18n/de-DE.ts +75 -0
  338. package/corpus/templates/videos/app/i18n/en-US.ts +74 -0
  339. package/corpus/templates/videos/app/i18n/es-ES.ts +75 -0
  340. package/corpus/templates/videos/app/i18n/fr-FR.ts +75 -0
  341. package/corpus/templates/videos/app/i18n/hi-IN.ts +74 -0
  342. package/corpus/templates/videos/app/i18n/index.ts +31 -0
  343. package/corpus/templates/videos/app/i18n/ja-JP.ts +74 -0
  344. package/corpus/templates/videos/app/i18n/ko-KR.ts +74 -0
  345. package/corpus/templates/videos/app/i18n/pt-BR.ts +75 -0
  346. package/corpus/templates/videos/app/i18n/zh-CN.ts +72 -0
  347. package/corpus/templates/videos/app/pages/Index.tsx +11 -9
  348. package/corpus/templates/videos/app/root.tsx +45 -7
  349. package/corpus/templates/videos/app/routes/settings.tsx +85 -0
  350. package/corpus/templates/videos/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  351. package/corpus/templates/videos/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  352. package/dist/agent/durable-background.d.ts +15 -0
  353. package/dist/agent/durable-background.d.ts.map +1 -1
  354. package/dist/agent/durable-background.js +28 -2
  355. package/dist/agent/durable-background.js.map +1 -1
  356. package/dist/agent/production-agent.d.ts.map +1 -1
  357. package/dist/agent/production-agent.js +34 -1
  358. package/dist/agent/production-agent.js.map +1 -1
  359. package/dist/agent/run-manager.d.ts +8 -0
  360. package/dist/agent/run-manager.d.ts.map +1 -1
  361. package/dist/agent/run-manager.js +18 -1
  362. package/dist/agent/run-manager.js.map +1 -1
  363. package/dist/agent/run-store.d.ts +99 -0
  364. package/dist/agent/run-store.d.ts.map +1 -1
  365. package/dist/agent/run-store.js +155 -4
  366. package/dist/agent/run-store.js.map +1 -1
  367. package/dist/client/CommandMenu.d.ts +3 -0
  368. package/dist/client/CommandMenu.d.ts.map +1 -1
  369. package/dist/client/CommandMenu.js +9 -0
  370. package/dist/client/CommandMenu.js.map +1 -1
  371. package/dist/client/app-providers.d.ts +8 -1
  372. package/dist/client/app-providers.d.ts.map +1 -1
  373. package/dist/client/app-providers.js +7 -5
  374. package/dist/client/app-providers.js.map +1 -1
  375. package/dist/client/i18n.d.ts +54 -0
  376. package/dist/client/i18n.d.ts.map +1 -0
  377. package/dist/client/i18n.js +354 -0
  378. package/dist/client/i18n.js.map +1 -0
  379. package/dist/client/index.d.ts +2 -1
  380. package/dist/client/index.d.ts.map +1 -1
  381. package/dist/client/index.js +2 -1
  382. package/dist/client/index.js.map +1 -1
  383. package/dist/index.browser.d.ts +1 -1
  384. package/dist/index.browser.d.ts.map +1 -1
  385. package/dist/index.browser.js +1 -1
  386. package/dist/index.browser.js.map +1 -1
  387. package/dist/localization/actions/get-localization-preference.d.ts +4 -0
  388. package/dist/localization/actions/get-localization-preference.d.ts.map +1 -0
  389. package/dist/localization/actions/get-localization-preference.js +16 -0
  390. package/dist/localization/actions/get-localization-preference.js.map +1 -0
  391. package/dist/localization/actions/set-localization-preference.d.ts +6 -0
  392. package/dist/localization/actions/set-localization-preference.d.ts.map +1 -0
  393. package/dist/localization/actions/set-localization-preference.js +24 -0
  394. package/dist/localization/actions/set-localization-preference.js.map +1 -0
  395. package/dist/localization/index.d.ts +3 -0
  396. package/dist/localization/index.d.ts.map +1 -0
  397. package/dist/localization/index.js +3 -0
  398. package/dist/localization/index.js.map +1 -0
  399. package/dist/localization/server.d.ts +25 -0
  400. package/dist/localization/server.d.ts.map +1 -0
  401. package/dist/localization/server.js +69 -0
  402. package/dist/localization/server.js.map +1 -0
  403. package/dist/localization/shared.d.ts +25 -0
  404. package/dist/localization/shared.d.ts.map +1 -0
  405. package/dist/localization/shared.js +134 -0
  406. package/dist/localization/shared.js.map +1 -0
  407. package/dist/server/action-discovery.d.ts.map +1 -1
  408. package/dist/server/action-discovery.js +8 -0
  409. package/dist/server/action-discovery.js.map +1 -1
  410. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  411. package/dist/server/agent-chat-plugin.js +58 -1
  412. package/dist/server/agent-chat-plugin.js.map +1 -1
  413. package/dist/server/auth.d.ts.map +1 -1
  414. package/dist/server/auth.js +12 -0
  415. package/dist/server/auth.js.map +1 -1
  416. package/dist/server/index.d.ts +1 -0
  417. package/dist/server/index.d.ts.map +1 -1
  418. package/dist/server/index.js +1 -0
  419. package/dist/server/index.js.map +1 -1
  420. package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  421. package/dist/templates/default/.agents/skills/internationalization/SKILL.md +77 -0
  422. package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +6 -0
  423. package/dist/templates/default/AGENTS.md +16 -15
  424. package/dist/templates/default/app/i18n/en-US.ts +29 -0
  425. package/dist/templates/default/app/i18n/index.ts +13 -0
  426. package/dist/templates/default/app/root.tsx +20 -1
  427. package/dist/templates/default/app/routes/_index.tsx +24 -9
  428. package/dist/templates/default/app/routes/settings.tsx +67 -0
  429. package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  430. package/dist/templates/workspace-core/.agents/skills/internationalization/SKILL.md +77 -0
  431. package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +6 -0
  432. package/dist/vite/action-types-plugin.d.ts.map +1 -1
  433. package/dist/vite/action-types-plugin.js +8 -0
  434. package/dist/vite/action-types-plugin.js.map +1 -1
  435. package/docs/AGENTS.md +1 -0
  436. package/docs/content/client.md +15 -0
  437. package/docs/content/internationalization.md +145 -0
  438. package/docs/content/locales/ar-SA/internationalization.md +102 -0
  439. package/docs/content/locales/de-DE/internationalization.md +102 -0
  440. package/docs/content/locales/es-ES/internationalization.md +102 -0
  441. package/docs/content/locales/fr-FR/internationalization.md +102 -0
  442. package/docs/content/locales/hi-IN/internationalization.md +102 -0
  443. package/docs/content/locales/ja-JP/internationalization.md +114 -0
  444. package/docs/content/locales/ko-KR/internationalization.md +102 -0
  445. package/docs/content/locales/pt-BR/internationalization.md +102 -0
  446. package/docs/content/locales/zh-CN/internationalization.md +102 -0
  447. package/docs/content/skills-guide.md +19 -18
  448. package/package.json +7 -1
  449. package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  450. package/src/templates/default/.agents/skills/internationalization/SKILL.md +77 -0
  451. package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +6 -0
  452. package/src/templates/default/AGENTS.md +16 -15
  453. package/src/templates/default/app/i18n/en-US.ts +29 -0
  454. package/src/templates/default/app/i18n/index.ts +13 -0
  455. package/src/templates/default/app/root.tsx +20 -1
  456. package/src/templates/default/app/routes/_index.tsx +24 -9
  457. package/src/templates/default/app/routes/settings.tsx +67 -0
  458. package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  459. package/src/templates/workspace-core/.agents/skills/internationalization/SKILL.md +77 -0
  460. package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +6 -0
@@ -0,0 +1,350 @@
1
+ import type { LocaleCode } from "@agent-native/core/client";
2
+
3
+ const enUS = {
4
+ root: {
5
+ commandActions: "Actions",
6
+ commandSearch: "Search",
7
+ commandAppearance: "Appearance",
8
+ toggleTheme: "Toggle theme",
9
+ },
10
+ navigation: {
11
+ brand: "Design",
12
+ designs: "Designs",
13
+ templates: "Templates",
14
+ designSystems: "Design Systems",
15
+ setupDesignSystem: "Set up design system",
16
+ settings: "Settings",
17
+ openNavigation: "Open navigation",
18
+ expandSidebar: "Expand sidebar",
19
+ collapseSidebar: "Collapse sidebar",
20
+ },
21
+ settings: {
22
+ agentTitle: "Agent settings",
23
+ agentDescription:
24
+ "Open the agent sidebar settings for model, API keys, automations, voice, and other agent controls.",
25
+ openAgentSettings: "Open agent settings",
26
+ languageTitle: "Language",
27
+ languageDescription: "Choose the interface language for Design.",
28
+ languageLabel: "Interface language",
29
+ },
30
+ chat: {
31
+ emptyState: "Describe a design to create",
32
+ suggestionLandingPage: "Design a landing page for my startup",
33
+ suggestionBrandMatch: "Make this match our brand",
34
+ suggestionMobile: "Add a mobile version of this",
35
+ },
36
+ };
37
+
38
+ type Messages = typeof enUS;
39
+ type PartialMessages = { [K in keyof Messages]?: Partial<Messages[K]> };
40
+
41
+ function mergeMessages(overrides: PartialMessages): Messages {
42
+ return {
43
+ root: { ...enUS.root, ...overrides.root },
44
+ navigation: { ...enUS.navigation, ...overrides.navigation },
45
+ settings: { ...enUS.settings, ...overrides.settings },
46
+ chat: { ...enUS.chat, ...overrides.chat },
47
+ };
48
+ }
49
+
50
+ export const messagesByLocale = {
51
+ "en-US": enUS,
52
+ "zh-CN": mergeMessages({
53
+ root: {
54
+ commandActions: "操作",
55
+ commandSearch: "搜索",
56
+ commandAppearance: "外观",
57
+ toggleTheme: "切换主题",
58
+ },
59
+ navigation: {
60
+ brand: "Design",
61
+ designs: "设计",
62
+ templates: "模板",
63
+ designSystems: "设计系统",
64
+ setupDesignSystem: "设置设计系统",
65
+ settings: "设置",
66
+ openNavigation: "打开导航",
67
+ expandSidebar: "展开侧边栏",
68
+ collapseSidebar: "收起侧边栏",
69
+ },
70
+ settings: {
71
+ agentTitle: "代理设置",
72
+ agentDescription:
73
+ "打开代理侧边栏设置,管理模型、API 密钥、自动化、语音和其他代理控制项。",
74
+ openAgentSettings: "打开代理设置",
75
+ languageTitle: "语言",
76
+ languageDescription: "选择 Design 的界面语言。",
77
+ languageLabel: "界面语言",
78
+ },
79
+ chat: {
80
+ emptyState: "描述要创建的设计",
81
+ suggestionLandingPage: "为我的初创公司设计落地页",
82
+ suggestionBrandMatch: "让它匹配我们的品牌",
83
+ suggestionMobile: "添加移动端版本",
84
+ },
85
+ }),
86
+ "es-ES": mergeMessages({
87
+ root: {
88
+ commandActions: "Acciones",
89
+ commandSearch: "Buscar",
90
+ commandAppearance: "Apariencia",
91
+ toggleTheme: "Cambiar tema",
92
+ },
93
+ navigation: {
94
+ designs: "Diseños",
95
+ templates: "Plantillas",
96
+ designSystems: "Sistemas de diseño",
97
+ setupDesignSystem: "Configurar sistema de diseño",
98
+ settings: "Ajustes",
99
+ openNavigation: "Abrir navegación",
100
+ expandSidebar: "Expandir barra lateral",
101
+ collapseSidebar: "Contraer barra lateral",
102
+ },
103
+ settings: {
104
+ agentTitle: "Ajustes del agente",
105
+ agentDescription:
106
+ "Abre los ajustes del agente en la barra lateral para modelos, claves API, automatizaciones, voz y otros controles.",
107
+ openAgentSettings: "Abrir ajustes del agente",
108
+ languageTitle: "Idioma",
109
+ languageDescription: "Elige el idioma de la interfaz de Design.",
110
+ languageLabel: "Idioma de la interfaz",
111
+ },
112
+ chat: {
113
+ emptyState: "Describe el diseño que quieres crear",
114
+ suggestionLandingPage: "Diseña una landing page para mi startup",
115
+ suggestionBrandMatch: "Haz que coincida con nuestra marca",
116
+ suggestionMobile: "Añade una versión móvil",
117
+ },
118
+ }),
119
+ "fr-FR": mergeMessages({
120
+ root: {
121
+ commandActions: "Actions",
122
+ commandSearch: "Rechercher",
123
+ commandAppearance: "Apparence",
124
+ toggleTheme: "Changer de thème",
125
+ },
126
+ navigation: {
127
+ designs: "Designs",
128
+ templates: "Modèles",
129
+ designSystems: "Systèmes de design",
130
+ setupDesignSystem: "Configurer le système de design",
131
+ settings: "Paramètres",
132
+ openNavigation: "Ouvrir la navigation",
133
+ expandSidebar: "Développer la barre latérale",
134
+ collapseSidebar: "Réduire la barre latérale",
135
+ },
136
+ settings: {
137
+ agentTitle: "Paramètres de l’agent",
138
+ agentDescription:
139
+ "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.",
140
+ openAgentSettings: "Ouvrir les paramètres de l’agent",
141
+ languageTitle: "Langue",
142
+ languageDescription: "Choisissez la langue de l'interface de Design.",
143
+ languageLabel: "Langue de l'interface",
144
+ },
145
+ chat: {
146
+ emptyState: "Décrivez un design à créer",
147
+ suggestionLandingPage: "Conçois une landing page pour ma startup",
148
+ suggestionBrandMatch: "Adapte ceci à notre marque",
149
+ suggestionMobile: "Ajoute une version mobile",
150
+ },
151
+ }),
152
+ "de-DE": mergeMessages({
153
+ root: {
154
+ commandActions: "Aktionen",
155
+ commandSearch: "Suchen",
156
+ commandAppearance: "Darstellung",
157
+ toggleTheme: "Theme wechseln",
158
+ },
159
+ navigation: {
160
+ designs: "Designs",
161
+ templates: "Vorlagen",
162
+ designSystems: "Designsysteme",
163
+ setupDesignSystem: "Designsystem einrichten",
164
+ settings: "Einstellungen",
165
+ openNavigation: "Navigation öffnen",
166
+ expandSidebar: "Seitenleiste erweitern",
167
+ collapseSidebar: "Seitenleiste einklappen",
168
+ },
169
+ settings: {
170
+ agentTitle: "Agent-Einstellungen",
171
+ agentDescription:
172
+ "Öffne die Agent-Einstellungen in der Seitenleiste für Modell, API-Schlüssel, Automatisierungen, Sprache und weitere Steuerungen.",
173
+ openAgentSettings: "Agent-Einstellungen öffnen",
174
+ languageTitle: "Sprache",
175
+ languageDescription: "Wähle die Oberflächensprache für Design.",
176
+ languageLabel: "Oberflächensprache",
177
+ },
178
+ chat: {
179
+ emptyState: "Beschreibe ein Design, das erstellt werden soll",
180
+ suggestionLandingPage: "Entwirf eine Landingpage für mein Startup",
181
+ suggestionBrandMatch: "Passe dies an unsere Marke an",
182
+ suggestionMobile: "Füge eine mobile Version hinzu",
183
+ },
184
+ }),
185
+ "ja-JP": mergeMessages({
186
+ root: {
187
+ commandActions: "操作",
188
+ commandSearch: "検索",
189
+ commandAppearance: "外観",
190
+ toggleTheme: "テーマを切り替え",
191
+ },
192
+ navigation: {
193
+ designs: "デザイン",
194
+ templates: "テンプレート",
195
+ designSystems: "デザインシステム",
196
+ setupDesignSystem: "デザインシステムを設定",
197
+ settings: "設定",
198
+ openNavigation: "ナビゲーションを開く",
199
+ expandSidebar: "サイドバーを展開",
200
+ collapseSidebar: "サイドバーを折りたたむ",
201
+ },
202
+ settings: {
203
+ agentTitle: "エージェント設定",
204
+ agentDescription:
205
+ "右サイドバーのエージェント設定を開き、モデル、API キー、自動化、音声などを管理します。",
206
+ openAgentSettings: "エージェント設定を開く",
207
+ languageTitle: "言語",
208
+ languageDescription: "Design のインターフェース言語を選択します。",
209
+ languageLabel: "インターフェース言語",
210
+ },
211
+ chat: {
212
+ emptyState: "作成したいデザインを説明してください",
213
+ suggestionLandingPage: "スタートアップ向けのランディングページをデザイン",
214
+ suggestionBrandMatch: "これをブランドに合わせる",
215
+ suggestionMobile: "モバイル版を追加",
216
+ },
217
+ }),
218
+ "ko-KR": mergeMessages({
219
+ root: {
220
+ commandActions: "작업",
221
+ commandSearch: "검색",
222
+ commandAppearance: "모양",
223
+ toggleTheme: "테마 전환",
224
+ },
225
+ navigation: {
226
+ designs: "디자인",
227
+ templates: "템플릿",
228
+ designSystems: "디자인 시스템",
229
+ setupDesignSystem: "디자인 시스템 설정",
230
+ settings: "설정",
231
+ openNavigation: "탐색 열기",
232
+ expandSidebar: "사이드바 펼치기",
233
+ collapseSidebar: "사이드바 접기",
234
+ },
235
+ settings: {
236
+ agentTitle: "에이전트 설정",
237
+ agentDescription:
238
+ "오른쪽 사이드바의 에이전트 설정을 열어 모델, API 키, 자동화, 음성 및 기타 제어를 관리합니다.",
239
+ openAgentSettings: "에이전트 설정 열기",
240
+ languageTitle: "언어",
241
+ languageDescription: "Design의 인터페이스 언어를 선택하세요.",
242
+ languageLabel: "인터페이스 언어",
243
+ },
244
+ chat: {
245
+ emptyState: "만들 디자인을 설명하세요",
246
+ suggestionLandingPage: "내 스타트업 랜딩 페이지 디자인",
247
+ suggestionBrandMatch: "우리 브랜드에 맞게 만들기",
248
+ suggestionMobile: "모바일 버전 추가",
249
+ },
250
+ }),
251
+ "pt-BR": mergeMessages({
252
+ root: {
253
+ commandActions: "Ações",
254
+ commandSearch: "Buscar",
255
+ commandAppearance: "Aparência",
256
+ toggleTheme: "Alternar tema",
257
+ },
258
+ navigation: {
259
+ designs: "Designs",
260
+ templates: "Modelos",
261
+ designSystems: "Sistemas de design",
262
+ setupDesignSystem: "Configurar sistema de design",
263
+ settings: "Configurações",
264
+ openNavigation: "Abrir navegação",
265
+ expandSidebar: "Expandir barra lateral",
266
+ collapseSidebar: "Recolher barra lateral",
267
+ },
268
+ settings: {
269
+ agentTitle: "Configurações do agente",
270
+ agentDescription:
271
+ "Abra as configurações do agente na barra lateral para modelos, chaves de API, automações, voz e outros controles.",
272
+ openAgentSettings: "Abrir configurações do agente",
273
+ languageTitle: "Idioma",
274
+ languageDescription: "Escolha o idioma da interface do Design.",
275
+ languageLabel: "Idioma da interface",
276
+ },
277
+ chat: {
278
+ emptyState: "Descreva um design para criar",
279
+ suggestionLandingPage: "Crie uma landing page para minha startup",
280
+ suggestionBrandMatch: "Faça isto combinar com nossa marca",
281
+ suggestionMobile: "Adicione uma versão mobile",
282
+ },
283
+ }),
284
+ "hi-IN": mergeMessages({
285
+ root: {
286
+ commandActions: "क्रियाएं",
287
+ commandSearch: "खोजें",
288
+ commandAppearance: "रूप",
289
+ toggleTheme: "थीम बदलें",
290
+ },
291
+ navigation: {
292
+ designs: "डिज़ाइन",
293
+ templates: "टेम्पलेट",
294
+ designSystems: "डिज़ाइन सिस्टम",
295
+ setupDesignSystem: "डिज़ाइन सिस्टम सेट करें",
296
+ settings: "सेटिंग्स",
297
+ openNavigation: "नेविगेशन खोलें",
298
+ expandSidebar: "साइडबार फैलाएं",
299
+ collapseSidebar: "साइडबार समेटें",
300
+ },
301
+ settings: {
302
+ agentTitle: "एजेंट सेटिंग्स",
303
+ agentDescription:
304
+ "मॉडल, API कुंजियों, ऑटोमेशन, आवाज़ और अन्य एजेंट नियंत्रणों के लिए साइडबार सेटिंग्स खोलें।",
305
+ openAgentSettings: "एजेंट सेटिंग्स खोलें",
306
+ languageTitle: "भाषा",
307
+ languageDescription: "Design की interface भाषा चुनें।",
308
+ languageLabel: "इंटरफ़ेस भाषा",
309
+ },
310
+ chat: {
311
+ emptyState: "बनाने के लिए design का वर्णन करें",
312
+ suggestionLandingPage: "मेरे startup के लिए landing page design करें",
313
+ suggestionBrandMatch: "इसे हमारे brand से match करें",
314
+ suggestionMobile: "इसका mobile version जोड़ें",
315
+ },
316
+ }),
317
+ "ar-SA": mergeMessages({
318
+ root: {
319
+ commandActions: "الإجراءات",
320
+ commandSearch: "بحث",
321
+ commandAppearance: "المظهر",
322
+ toggleTheme: "تبديل السمة",
323
+ },
324
+ navigation: {
325
+ designs: "التصاميم",
326
+ templates: "القوالب",
327
+ designSystems: "أنظمة التصميم",
328
+ setupDesignSystem: "إعداد نظام التصميم",
329
+ settings: "الإعدادات",
330
+ openNavigation: "فتح التنقل",
331
+ expandSidebar: "توسيع الشريط الجانبي",
332
+ collapseSidebar: "طي الشريط الجانبي",
333
+ },
334
+ settings: {
335
+ agentTitle: "إعدادات الوكيل",
336
+ agentDescription:
337
+ "افتح إعدادات الوكيل في الشريط الجانبي لإدارة النموذج ومفاتيح API والأتمتة والصوت وعناصر التحكم الأخرى.",
338
+ openAgentSettings: "فتح إعدادات الوكيل",
339
+ languageTitle: "اللغة",
340
+ languageDescription: "اختر لغة واجهة Design.",
341
+ languageLabel: "لغة الواجهة",
342
+ },
343
+ chat: {
344
+ emptyState: "صف تصميمًا لإنشائه",
345
+ suggestionLandingPage: "صمم صفحة هبوط لشركتي الناشئة",
346
+ suggestionBrandMatch: "اجعل هذا مطابقًا لعلامتنا",
347
+ suggestionMobile: "أضف نسخة للجوال",
348
+ },
349
+ }),
350
+ } satisfies Record<LocaleCode, Messages>;
@@ -9,9 +9,11 @@ import {
9
9
  createAgentNativeQueryClient,
10
10
  useCommandMenuShortcut,
11
11
  useDbSync,
12
+ getLocaleInitScript,
12
13
  getThemeInitScript,
13
14
  getBrowserTabId,
14
15
  configureTracking,
16
+ useT,
15
17
  } from "@agent-native/core/client";
16
18
  import { IconSun, IconMoon } from "@tabler/icons-react";
17
19
  import changelog from "../CHANGELOG.md?raw";
@@ -19,6 +21,7 @@ import { Toaster } from "@/components/ui/sonner";
19
21
  import { Layout as AppLayout } from "@/components/layout/Layout";
20
22
  import type { LinksFunction } from "react-router";
21
23
  import stylesheet from "./global.css?url";
24
+ import { i18nCatalog } from "./i18n";
22
25
 
23
26
  configureTracking({
24
27
  getDefaultProps: (_name, properties) => ({
@@ -32,6 +35,7 @@ export const links: LinksFunction = () => [
32
35
  ];
33
36
 
34
37
  const THEME_INIT_SCRIPT = getThemeInitScript();
38
+ const LOCALE_INIT_SCRIPT = getLocaleInitScript();
35
39
 
36
40
  export function Layout({ children }: { children: React.ReactNode }) {
37
41
  return (
@@ -46,6 +50,11 @@ export function Layout({ children }: { children: React.ReactNode }) {
46
50
  suppressHydrationWarning
47
51
  dangerouslySetInnerHTML={{ __html: THEME_INIT_SCRIPT }}
48
52
  />
53
+ <script
54
+ data-agent-native-locale-init
55
+ suppressHydrationWarning
56
+ dangerouslySetInnerHTML={{ __html: LOCALE_INIT_SCRIPT }}
57
+ />
49
58
  <link rel="manifest" href={appPath("/manifest.json")} />
50
59
  <meta name="theme-color" content="#71717A" />
51
60
  <meta name="mobile-web-app-capable" content="yes" />
@@ -80,6 +89,7 @@ function DbSyncSetup() {
80
89
 
81
90
  function ThemeToggleItem() {
82
91
  const { resolvedTheme, setTheme } = useTheme();
92
+ const t = useT();
83
93
  const isDark = resolvedTheme === "dark";
84
94
  return (
85
95
  <CommandMenu.Item
@@ -87,32 +97,47 @@ function ThemeToggleItem() {
87
97
  keywords={["theme", "dark", "light", "mode"]}
88
98
  >
89
99
  {isDark ? <IconSun size={16} /> : <IconMoon size={16} />}
90
- Toggle {isDark ? "light" : "dark"} mode
100
+ {t("root.toggleTheme")}
91
101
  </CommandMenu.Item>
92
102
  );
93
103
  }
94
104
 
105
+ function DesignCommandMenu({
106
+ open,
107
+ onOpenChange,
108
+ }: {
109
+ open: boolean;
110
+ onOpenChange: (open: boolean) => void;
111
+ }) {
112
+ const t = useT();
113
+ return (
114
+ <CommandMenu
115
+ open={open}
116
+ onOpenChange={onOpenChange}
117
+ changelog={changelog}
118
+ changelogKey="design"
119
+ >
120
+ <CommandMenu.Group heading={t("root.commandActions")}>
121
+ <CommandMenu.Item onSelect={() => {}}>
122
+ {t("root.commandSearch")}
123
+ </CommandMenu.Item>
124
+ </CommandMenu.Group>
125
+ <CommandMenu.Group heading={t("root.commandAppearance")}>
126
+ <ThemeToggleItem />
127
+ </CommandMenu.Group>
128
+ </CommandMenu>
129
+ );
130
+ }
131
+
95
132
  export default function Root() {
96
133
  const [queryClient] = useState(() => createAgentNativeQueryClient());
97
134
  const [cmdkOpen, setCmdkOpen] = useState(false);
98
135
  useCommandMenuShortcut(useCallback(() => setCmdkOpen(true), []));
99
136
  return (
100
- <AppProviders queryClient={queryClient}>
137
+ <AppProviders queryClient={queryClient} i18n={{ catalog: i18nCatalog }}>
101
138
  <DbSyncSetup />
102
139
  <Toaster richColors position="bottom-left" />
103
- <CommandMenu
104
- open={cmdkOpen}
105
- onOpenChange={setCmdkOpen}
106
- changelog={changelog}
107
- changelogKey="design"
108
- >
109
- <CommandMenu.Group heading="Actions">
110
- <CommandMenu.Item onSelect={() => {}}>Search</CommandMenu.Item>
111
- </CommandMenu.Group>
112
- <CommandMenu.Group heading="Appearance">
113
- <ThemeToggleItem />
114
- </CommandMenu.Group>
115
- </CommandMenu>
140
+ <DesignCommandMenu open={cmdkOpen} onOpenChange={setCmdkOpen} />
116
141
  <AppLayout>
117
142
  <Outlet />
118
143
  </AppLayout>
@@ -2,8 +2,19 @@ import {
2
2
  SettingsPanel,
3
3
  useDevMode,
4
4
  ChangelogSettingsCard,
5
+ LanguagePicker,
6
+ openAgentSettings,
7
+ useT,
5
8
  } from "@agent-native/core/client";
6
9
  import changelog from "../../CHANGELOG.md?raw";
10
+ import {
11
+ Card,
12
+ CardContent,
13
+ CardDescription,
14
+ CardHeader,
15
+ CardTitle,
16
+ } from "@/components/ui/card";
17
+ import { Label } from "@/components/ui/label";
7
18
 
8
19
  export function meta() {
9
20
  return [{ title: "Settings — Design" }];
@@ -11,6 +22,7 @@ export function meta() {
11
22
 
12
23
  export default function SettingsRoute() {
13
24
  const { isDevMode, canToggle, setDevMode } = useDevMode();
25
+ const t = useT();
14
26
 
15
27
  return (
16
28
  <div className="flex h-full min-h-0 flex-col overflow-y-auto bg-background">
@@ -20,6 +32,37 @@ export default function SettingsRoute() {
20
32
  showDevToggle={canToggle}
21
33
  />
22
34
  <div className="mx-auto w-full max-w-2xl px-4 pb-8">
35
+ <Card className="mb-6">
36
+ <CardHeader>
37
+ <CardTitle className="text-base">
38
+ {t("settings.languageTitle")}
39
+ </CardTitle>
40
+ <CardDescription>
41
+ {t("settings.languageDescription")}
42
+ </CardDescription>
43
+ </CardHeader>
44
+ <CardContent className="max-w-xs space-y-1.5">
45
+ <Label>{t("settings.languageLabel")}</Label>
46
+ <LanguagePicker label={t("settings.languageLabel")} />
47
+ </CardContent>
48
+ </Card>
49
+ <Card className="mb-6">
50
+ <CardHeader>
51
+ <CardTitle className="text-base">
52
+ {t("settings.agentTitle")}
53
+ </CardTitle>
54
+ <CardDescription>{t("settings.agentDescription")}</CardDescription>
55
+ </CardHeader>
56
+ <CardContent>
57
+ <button
58
+ type="button"
59
+ className="inline-flex h-9 items-center justify-center rounded-md border border-input bg-background px-3 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground"
60
+ onClick={() => openAgentSettings()}
61
+ >
62
+ {t("settings.openAgentSettings")}
63
+ </button>
64
+ </CardContent>
65
+ </Card>
23
66
  <ChangelogSettingsCard markdown={changelog} />
24
67
  </div>
25
68
  </div>
@@ -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
@@ -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"];