@agent-native/core 0.75.5 → 0.76.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (427) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +7 -0
  3. package/corpus/core/docs/AGENTS.md +1 -0
  4. package/corpus/core/docs/content/client.md +15 -0
  5. package/corpus/core/docs/content/internationalization.md +145 -0
  6. package/corpus/core/docs/content/locales/ar-SA/internationalization.md +102 -0
  7. package/corpus/core/docs/content/locales/de-DE/internationalization.md +102 -0
  8. package/corpus/core/docs/content/locales/es-ES/internationalization.md +102 -0
  9. package/corpus/core/docs/content/locales/fr-FR/internationalization.md +102 -0
  10. package/corpus/core/docs/content/locales/hi-IN/internationalization.md +102 -0
  11. package/corpus/core/docs/content/locales/ja-JP/internationalization.md +114 -0
  12. package/corpus/core/docs/content/locales/ko-KR/internationalization.md +102 -0
  13. package/corpus/core/docs/content/locales/pt-BR/internationalization.md +102 -0
  14. package/corpus/core/docs/content/locales/zh-CN/internationalization.md +102 -0
  15. package/corpus/core/docs/content/skills-guide.md +19 -18
  16. package/corpus/core/package.json +7 -1
  17. package/corpus/core/src/client/CommandMenu.tsx +16 -0
  18. package/corpus/core/src/client/app-providers.tsx +26 -1
  19. package/corpus/core/src/client/i18n.tsx +605 -0
  20. package/corpus/core/src/client/index.ts +28 -0
  21. package/corpus/core/src/index.browser.ts +25 -0
  22. package/corpus/core/src/localization/actions/get-localization-preference.ts +23 -0
  23. package/corpus/core/src/localization/actions/set-localization-preference.ts +30 -0
  24. package/corpus/core/src/localization/index.ts +2 -0
  25. package/corpus/core/src/localization/server.ts +131 -0
  26. package/corpus/core/src/localization/shared.ts +163 -0
  27. package/corpus/core/src/server/action-discovery.ts +8 -0
  28. package/corpus/core/src/server/index.ts +8 -0
  29. package/corpus/core/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  30. package/corpus/core/src/templates/default/.agents/skills/internationalization/SKILL.md +77 -0
  31. package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +6 -0
  32. package/corpus/core/src/templates/default/AGENTS.md +16 -15
  33. package/corpus/core/src/templates/default/app/i18n/en-US.ts +29 -0
  34. package/corpus/core/src/templates/default/app/i18n/index.ts +13 -0
  35. package/corpus/core/src/templates/default/app/root.tsx +20 -1
  36. package/corpus/core/src/templates/default/app/routes/_index.tsx +24 -9
  37. package/corpus/core/src/templates/default/app/routes/settings.tsx +67 -0
  38. package/corpus/core/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  39. package/corpus/core/src/templates/workspace-core/.agents/skills/internationalization/SKILL.md +77 -0
  40. package/corpus/core/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +6 -0
  41. package/corpus/core/src/vite/action-types-plugin.ts +10 -0
  42. package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +6 -0
  43. package/corpus/templates/analytics/app/components/layout/Header.tsx +18 -15
  44. package/corpus/templates/analytics/app/components/layout/Layout.tsx +7 -5
  45. package/corpus/templates/analytics/app/components/layout/MobileNav.tsx +9 -3
  46. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +5 -3
  47. package/corpus/templates/analytics/app/i18n/ar-SA.ts +3 -0
  48. package/corpus/templates/analytics/app/i18n/de-DE.ts +3 -0
  49. package/corpus/templates/analytics/app/i18n/en-US.ts +3 -0
  50. package/corpus/templates/analytics/app/i18n/es-ES.ts +3 -0
  51. package/corpus/templates/analytics/app/i18n/fr-FR.ts +3 -0
  52. package/corpus/templates/analytics/app/i18n/hi-IN.ts +3 -0
  53. package/corpus/templates/analytics/app/i18n/index.ts +31 -0
  54. package/corpus/templates/analytics/app/i18n/ja-JP.ts +3 -0
  55. package/corpus/templates/analytics/app/i18n/ko-KR.ts +3 -0
  56. package/corpus/templates/analytics/app/i18n/pt-BR.ts +3 -0
  57. package/corpus/templates/analytics/app/i18n/zh-CN.ts +3 -0
  58. package/corpus/templates/analytics/app/i18n-data.ts +433 -0
  59. package/corpus/templates/analytics/app/pages/Settings.tsx +50 -16
  60. package/corpus/templates/analytics/app/root.tsx +14 -1
  61. package/corpus/templates/analytics/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  62. package/corpus/templates/analytics/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  63. package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +6 -0
  64. package/corpus/templates/assets/app/components/layout/Header.tsx +17 -8
  65. package/corpus/templates/assets/app/components/layout/Layout.tsx +10 -6
  66. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +40 -23
  67. package/corpus/templates/assets/app/i18n/ar-SA.ts +3 -0
  68. package/corpus/templates/assets/app/i18n/de-DE.ts +3 -0
  69. package/corpus/templates/assets/app/i18n/en-US.ts +3 -0
  70. package/corpus/templates/assets/app/i18n/es-ES.ts +3 -0
  71. package/corpus/templates/assets/app/i18n/fr-FR.ts +3 -0
  72. package/corpus/templates/assets/app/i18n/hi-IN.ts +3 -0
  73. package/corpus/templates/assets/app/i18n/index.ts +31 -0
  74. package/corpus/templates/assets/app/i18n/ja-JP.ts +3 -0
  75. package/corpus/templates/assets/app/i18n/ko-KR.ts +3 -0
  76. package/corpus/templates/assets/app/i18n/pt-BR.ts +3 -0
  77. package/corpus/templates/assets/app/i18n/zh-CN.ts +3 -0
  78. package/corpus/templates/assets/app/i18n-data.ts +668 -0
  79. package/corpus/templates/assets/app/root.tsx +40 -15
  80. package/corpus/templates/assets/app/routes/_index.tsx +9 -10
  81. package/corpus/templates/assets/app/routes/settings.tsx +37 -6
  82. package/corpus/templates/assets/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  83. package/corpus/templates/assets/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  84. package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +5 -0
  85. package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +6 -0
  86. package/corpus/templates/brain/app/components/layout/Layout.tsx +12 -8
  87. package/corpus/templates/brain/app/components/layout/Sidebar.tsx +23 -12
  88. package/corpus/templates/brain/app/i18n/ar-SA.ts +3 -0
  89. package/corpus/templates/brain/app/i18n/de-DE.ts +3 -0
  90. package/corpus/templates/brain/app/i18n/en-US.ts +3 -0
  91. package/corpus/templates/brain/app/i18n/es-ES.ts +3 -0
  92. package/corpus/templates/brain/app/i18n/fr-FR.ts +3 -0
  93. package/corpus/templates/brain/app/i18n/hi-IN.ts +3 -0
  94. package/corpus/templates/brain/app/i18n/index.ts +31 -0
  95. package/corpus/templates/brain/app/i18n/ja-JP.ts +3 -0
  96. package/corpus/templates/brain/app/i18n/ko-KR.ts +3 -0
  97. package/corpus/templates/brain/app/i18n/pt-BR.ts +3 -0
  98. package/corpus/templates/brain/app/i18n/zh-CN.ts +3 -0
  99. package/corpus/templates/brain/app/i18n-data.ts +624 -0
  100. package/corpus/templates/brain/app/root.tsx +27 -12
  101. package/corpus/templates/brain/app/routes/settings.tsx +45 -8
  102. package/corpus/templates/brain/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  103. package/corpus/templates/brain/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  104. package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +6 -0
  105. package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +2 -0
  106. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +16 -9
  107. package/corpus/templates/calendar/app/i18n/ar-SA.ts +57 -0
  108. package/corpus/templates/calendar/app/i18n/de-DE.ts +58 -0
  109. package/corpus/templates/calendar/app/i18n/en-US.ts +57 -0
  110. package/corpus/templates/calendar/app/i18n/es-ES.ts +58 -0
  111. package/corpus/templates/calendar/app/i18n/fr-FR.ts +58 -0
  112. package/corpus/templates/calendar/app/i18n/hi-IN.ts +57 -0
  113. package/corpus/templates/calendar/app/i18n/index.ts +31 -0
  114. package/corpus/templates/calendar/app/i18n/ja-JP.ts +58 -0
  115. package/corpus/templates/calendar/app/i18n/ko-KR.ts +57 -0
  116. package/corpus/templates/calendar/app/i18n/pt-BR.ts +57 -0
  117. package/corpus/templates/calendar/app/i18n/zh-CN.ts +57 -0
  118. package/corpus/templates/calendar/app/i18n-data.ts +516 -0
  119. package/corpus/templates/calendar/app/pages/CalendarView.tsx +2 -0
  120. package/corpus/templates/calendar/app/pages/Settings.tsx +63 -28
  121. package/corpus/templates/calendar/app/root.tsx +78 -7
  122. package/corpus/templates/calendar/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  123. package/corpus/templates/calendar/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  124. package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +5 -0
  125. package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +6 -0
  126. package/corpus/templates/chat/app/components/layout/Header.tsx +17 -11
  127. package/corpus/templates/chat/app/components/layout/Layout.tsx +12 -8
  128. package/corpus/templates/chat/app/components/layout/Sidebar.tsx +47 -18
  129. package/corpus/templates/chat/app/i18n/ar-SA.ts +62 -0
  130. package/corpus/templates/chat/app/i18n/de-DE.ts +63 -0
  131. package/corpus/templates/chat/app/i18n/en-US.ts +63 -0
  132. package/corpus/templates/chat/app/i18n/es-ES.ts +63 -0
  133. package/corpus/templates/chat/app/i18n/fr-FR.ts +63 -0
  134. package/corpus/templates/chat/app/i18n/hi-IN.ts +63 -0
  135. package/corpus/templates/chat/app/i18n/index.ts +31 -0
  136. package/corpus/templates/chat/app/i18n/ja-JP.ts +63 -0
  137. package/corpus/templates/chat/app/i18n/ko-KR.ts +63 -0
  138. package/corpus/templates/chat/app/i18n/pt-BR.ts +63 -0
  139. package/corpus/templates/chat/app/i18n/zh-CN.ts +61 -0
  140. package/corpus/templates/chat/app/i18n-data.ts +475 -0
  141. package/corpus/templates/chat/app/root.tsx +18 -5
  142. package/corpus/templates/chat/app/routes/_index.tsx +9 -8
  143. package/corpus/templates/chat/app/routes/settings.tsx +86 -0
  144. package/corpus/templates/chat/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  145. package/corpus/templates/chat/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  146. package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +6 -0
  147. package/corpus/templates/clips/app/components/layout/Header.tsx +23 -17
  148. package/corpus/templates/clips/app/components/library/empty-state.tsx +10 -34
  149. package/corpus/templates/clips/app/components/library/library-layout.tsx +45 -34
  150. package/corpus/templates/clips/app/i18n/ar-SA.ts +182 -0
  151. package/corpus/templates/clips/app/i18n/de-DE.ts +184 -0
  152. package/corpus/templates/clips/app/i18n/en-US.ts +179 -0
  153. package/corpus/templates/clips/app/i18n/es-ES.ts +183 -0
  154. package/corpus/templates/clips/app/i18n/fr-FR.ts +184 -0
  155. package/corpus/templates/clips/app/i18n/hi-IN.ts +180 -0
  156. package/corpus/templates/clips/app/i18n/index.ts +41 -0
  157. package/corpus/templates/clips/app/i18n/ja-JP.ts +180 -0
  158. package/corpus/templates/clips/app/i18n/ko-KR.ts +178 -0
  159. package/corpus/templates/clips/app/i18n/pt-BR.ts +183 -0
  160. package/corpus/templates/clips/app/i18n/zh-CN.ts +173 -0
  161. package/corpus/templates/clips/app/root.tsx +104 -10
  162. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +154 -95
  163. package/corpus/templates/clips/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  164. package/corpus/templates/clips/changelog/2026-06-24-clips-now-includes-a-language-picker-and-simplified-chinese-ui.md +6 -0
  165. package/corpus/templates/clips/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  166. package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +6 -0
  167. package/corpus/templates/content/app/components/EmptyState.tsx +7 -5
  168. package/corpus/templates/content/app/components/ThemeToggle.tsx +4 -2
  169. package/corpus/templates/content/app/components/layout/Header.tsx +2 -0
  170. package/corpus/templates/content/app/components/layout/Layout.tsx +8 -7
  171. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +41 -1
  172. package/corpus/templates/content/app/i18n/ar-SA.ts +3 -0
  173. package/corpus/templates/content/app/i18n/de-DE.ts +3 -0
  174. package/corpus/templates/content/app/i18n/en-US.ts +3 -0
  175. package/corpus/templates/content/app/i18n/es-ES.ts +3 -0
  176. package/corpus/templates/content/app/i18n/fr-FR.ts +3 -0
  177. package/corpus/templates/content/app/i18n/hi-IN.ts +3 -0
  178. package/corpus/templates/content/app/i18n/index.ts +31 -0
  179. package/corpus/templates/content/app/i18n/ja-JP.ts +3 -0
  180. package/corpus/templates/content/app/i18n/ko-KR.ts +3 -0
  181. package/corpus/templates/content/app/i18n/pt-BR.ts +3 -0
  182. package/corpus/templates/content/app/i18n/zh-CN.ts +3 -0
  183. package/corpus/templates/content/app/i18n-data.ts +490 -0
  184. package/corpus/templates/content/app/root.tsx +110 -23
  185. package/corpus/templates/content/app/routes/_app.settings.tsx +84 -0
  186. package/corpus/templates/content/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  187. package/corpus/templates/content/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  188. package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +6 -0
  189. package/corpus/templates/design/app/components/layout/Header.tsx +16 -8
  190. package/corpus/templates/design/app/components/layout/Layout.tsx +8 -6
  191. package/corpus/templates/design/app/components/layout/Sidebar.tsx +25 -9
  192. package/corpus/templates/design/app/i18n/ar-SA.ts +3 -0
  193. package/corpus/templates/design/app/i18n/de-DE.ts +3 -0
  194. package/corpus/templates/design/app/i18n/en-US.ts +3 -0
  195. package/corpus/templates/design/app/i18n/es-ES.ts +3 -0
  196. package/corpus/templates/design/app/i18n/fr-FR.ts +3 -0
  197. package/corpus/templates/design/app/i18n/hi-IN.ts +3 -0
  198. package/corpus/templates/design/app/i18n/index.ts +31 -0
  199. package/corpus/templates/design/app/i18n/ja-JP.ts +3 -0
  200. package/corpus/templates/design/app/i18n/ko-KR.ts +3 -0
  201. package/corpus/templates/design/app/i18n/pt-BR.ts +3 -0
  202. package/corpus/templates/design/app/i18n/zh-CN.ts +3 -0
  203. package/corpus/templates/design/app/i18n-data.ts +350 -0
  204. package/corpus/templates/design/app/root.tsx +40 -15
  205. package/corpus/templates/design/app/routes/settings.tsx +43 -0
  206. package/corpus/templates/design/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  207. package/corpus/templates/design/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  208. package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +6 -0
  209. package/corpus/templates/dispatch/app/i18n/ar-SA.ts +3 -0
  210. package/corpus/templates/dispatch/app/i18n/de-DE.ts +3 -0
  211. package/corpus/templates/dispatch/app/i18n/en-US.ts +3 -0
  212. package/corpus/templates/dispatch/app/i18n/es-ES.ts +3 -0
  213. package/corpus/templates/dispatch/app/i18n/fr-FR.ts +3 -0
  214. package/corpus/templates/dispatch/app/i18n/hi-IN.ts +3 -0
  215. package/corpus/templates/dispatch/app/i18n/index.ts +31 -0
  216. package/corpus/templates/dispatch/app/i18n/ja-JP.ts +3 -0
  217. package/corpus/templates/dispatch/app/i18n/ko-KR.ts +3 -0
  218. package/corpus/templates/dispatch/app/i18n/pt-BR.ts +3 -0
  219. package/corpus/templates/dispatch/app/i18n/zh-CN.ts +3 -0
  220. package/corpus/templates/dispatch/app/i18n-data.ts +267 -0
  221. package/corpus/templates/dispatch/app/root.tsx +18 -4
  222. package/corpus/templates/dispatch/app/routes/settings.tsx +86 -0
  223. package/corpus/templates/dispatch/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  224. package/corpus/templates/dispatch/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  225. package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +6 -0
  226. package/corpus/templates/forms/app/components/layout/Header.tsx +16 -9
  227. package/corpus/templates/forms/app/components/layout/Layout.tsx +6 -4
  228. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +34 -17
  229. package/corpus/templates/forms/app/i18n/ar-SA.ts +58 -0
  230. package/corpus/templates/forms/app/i18n/de-DE.ts +59 -0
  231. package/corpus/templates/forms/app/i18n/en-US.ts +59 -0
  232. package/corpus/templates/forms/app/i18n/es-ES.ts +59 -0
  233. package/corpus/templates/forms/app/i18n/fr-FR.ts +59 -0
  234. package/corpus/templates/forms/app/i18n/hi-IN.ts +59 -0
  235. package/corpus/templates/forms/app/i18n/index.ts +31 -0
  236. package/corpus/templates/forms/app/i18n/ja-JP.ts +59 -0
  237. package/corpus/templates/forms/app/i18n/ko-KR.ts +59 -0
  238. package/corpus/templates/forms/app/i18n/pt-BR.ts +59 -0
  239. package/corpus/templates/forms/app/i18n/zh-CN.ts +56 -0
  240. package/corpus/templates/forms/app/root.tsx +65 -16
  241. package/corpus/templates/forms/app/routes/_app.settings.tsx +85 -0
  242. package/corpus/templates/forms/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  243. package/corpus/templates/forms/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  244. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +29 -17
  245. package/corpus/templates/macros/app/components/layout/Header.tsx +16 -10
  246. package/corpus/templates/macros/app/i18n/ar-SA.ts +54 -0
  247. package/corpus/templates/macros/app/i18n/de-DE.ts +55 -0
  248. package/corpus/templates/macros/app/i18n/en-US.ts +55 -0
  249. package/corpus/templates/macros/app/i18n/es-ES.ts +55 -0
  250. package/corpus/templates/macros/app/i18n/fr-FR.ts +55 -0
  251. package/corpus/templates/macros/app/i18n/hi-IN.ts +55 -0
  252. package/corpus/templates/macros/app/i18n/index.ts +31 -0
  253. package/corpus/templates/macros/app/i18n/ja-JP.ts +55 -0
  254. package/corpus/templates/macros/app/i18n/ko-KR.ts +55 -0
  255. package/corpus/templates/macros/app/i18n/pt-BR.ts +55 -0
  256. package/corpus/templates/macros/app/i18n/zh-CN.ts +53 -0
  257. package/corpus/templates/macros/app/root.tsx +65 -15
  258. package/corpus/templates/macros/app/routes/settings.tsx +85 -0
  259. package/corpus/templates/macros/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  260. package/corpus/templates/macros/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  261. package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +6 -0
  262. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +9 -4
  263. package/corpus/templates/mail/app/i18n/ar-SA.ts +33 -0
  264. package/corpus/templates/mail/app/i18n/de-DE.ts +33 -0
  265. package/corpus/templates/mail/app/i18n/en-US.ts +32 -0
  266. package/corpus/templates/mail/app/i18n/es-ES.ts +33 -0
  267. package/corpus/templates/mail/app/i18n/fr-FR.ts +33 -0
  268. package/corpus/templates/mail/app/i18n/hi-IN.ts +32 -0
  269. package/corpus/templates/mail/app/i18n/index.ts +31 -0
  270. package/corpus/templates/mail/app/i18n/ja-JP.ts +32 -0
  271. package/corpus/templates/mail/app/i18n/ko-KR.ts +33 -0
  272. package/corpus/templates/mail/app/i18n/pt-BR.ts +34 -0
  273. package/corpus/templates/mail/app/i18n/zh-CN.ts +32 -0
  274. package/corpus/templates/mail/app/pages/SettingsPage.tsx +67 -13
  275. package/corpus/templates/mail/app/root.tsx +20 -0
  276. package/corpus/templates/mail/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  277. package/corpus/templates/mail/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
  278. package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +5 -0
  279. package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +6 -0
  280. package/corpus/templates/plan/app/components/layout/Header.tsx +19 -12
  281. package/corpus/templates/plan/app/components/layout/Layout.tsx +11 -7
  282. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +41 -28
  283. package/corpus/templates/plan/app/i18n/ar-SA.ts +77 -0
  284. package/corpus/templates/plan/app/i18n/de-DE.ts +78 -0
  285. package/corpus/templates/plan/app/i18n/en-US.ts +78 -0
  286. package/corpus/templates/plan/app/i18n/es-ES.ts +78 -0
  287. package/corpus/templates/plan/app/i18n/fr-FR.ts +78 -0
  288. package/corpus/templates/plan/app/i18n/hi-IN.ts +78 -0
  289. package/corpus/templates/plan/app/i18n/index.ts +31 -0
  290. package/corpus/templates/plan/app/i18n/ja-JP.ts +79 -0
  291. package/corpus/templates/plan/app/i18n/ko-KR.ts +77 -0
  292. package/corpus/templates/plan/app/i18n/pt-BR.ts +78 -0
  293. package/corpus/templates/plan/app/i18n/zh-CN.ts +74 -0
  294. package/corpus/templates/plan/app/root.tsx +45 -8
  295. package/corpus/templates/plan/app/routes/settings.tsx +86 -0
  296. package/corpus/templates/plan/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  297. package/corpus/templates/plan/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  298. package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +6 -0
  299. package/corpus/templates/slides/app/components/layout/Header.tsx +23 -11
  300. package/corpus/templates/slides/app/components/layout/Layout.tsx +7 -6
  301. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +23 -11
  302. package/corpus/templates/slides/app/i18n/ar-SA.ts +54 -0
  303. package/corpus/templates/slides/app/i18n/de-DE.ts +56 -0
  304. package/corpus/templates/slides/app/i18n/en-US.ts +55 -0
  305. package/corpus/templates/slides/app/i18n/es-ES.ts +55 -0
  306. package/corpus/templates/slides/app/i18n/fr-FR.ts +55 -0
  307. package/corpus/templates/slides/app/i18n/hi-IN.ts +55 -0
  308. package/corpus/templates/slides/app/i18n/index.ts +31 -0
  309. package/corpus/templates/slides/app/i18n/ja-JP.ts +55 -0
  310. package/corpus/templates/slides/app/i18n/ko-KR.ts +55 -0
  311. package/corpus/templates/slides/app/i18n/pt-BR.ts +55 -0
  312. package/corpus/templates/slides/app/i18n/zh-CN.ts +53 -0
  313. package/corpus/templates/slides/app/root.tsx +50 -8
  314. package/corpus/templates/slides/app/routes/settings.tsx +85 -0
  315. package/corpus/templates/slides/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  316. package/corpus/templates/slides/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  317. package/corpus/templates/videos/.agents/skills/self-modifying-code/SKILL.md +6 -0
  318. package/corpus/templates/videos/app/components/NewCompositionPopover.tsx +14 -9
  319. package/corpus/templates/videos/app/components/Sidebar.tsx +16 -9
  320. package/corpus/templates/videos/app/components/StudioHeader.tsx +12 -8
  321. package/corpus/templates/videos/app/components/layout/Header.tsx +21 -15
  322. package/corpus/templates/videos/app/components/layout/Layout.tsx +10 -7
  323. package/corpus/templates/videos/app/components/layout/NavSidebar.tsx +21 -6
  324. package/corpus/templates/videos/app/i18n/ar-SA.ts +73 -0
  325. package/corpus/templates/videos/app/i18n/de-DE.ts +75 -0
  326. package/corpus/templates/videos/app/i18n/en-US.ts +74 -0
  327. package/corpus/templates/videos/app/i18n/es-ES.ts +75 -0
  328. package/corpus/templates/videos/app/i18n/fr-FR.ts +75 -0
  329. package/corpus/templates/videos/app/i18n/hi-IN.ts +74 -0
  330. package/corpus/templates/videos/app/i18n/index.ts +31 -0
  331. package/corpus/templates/videos/app/i18n/ja-JP.ts +74 -0
  332. package/corpus/templates/videos/app/i18n/ko-KR.ts +74 -0
  333. package/corpus/templates/videos/app/i18n/pt-BR.ts +75 -0
  334. package/corpus/templates/videos/app/i18n/zh-CN.ts +72 -0
  335. package/corpus/templates/videos/app/pages/Index.tsx +11 -9
  336. package/corpus/templates/videos/app/root.tsx +45 -7
  337. package/corpus/templates/videos/app/routes/settings.tsx +85 -0
  338. package/corpus/templates/videos/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  339. package/corpus/templates/videos/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  340. package/dist/client/CommandMenu.d.ts +3 -0
  341. package/dist/client/CommandMenu.d.ts.map +1 -1
  342. package/dist/client/CommandMenu.js +9 -0
  343. package/dist/client/CommandMenu.js.map +1 -1
  344. package/dist/client/app-providers.d.ts +8 -1
  345. package/dist/client/app-providers.d.ts.map +1 -1
  346. package/dist/client/app-providers.js +7 -5
  347. package/dist/client/app-providers.js.map +1 -1
  348. package/dist/client/i18n.d.ts +54 -0
  349. package/dist/client/i18n.d.ts.map +1 -0
  350. package/dist/client/i18n.js +354 -0
  351. package/dist/client/i18n.js.map +1 -0
  352. package/dist/client/index.d.ts +2 -1
  353. package/dist/client/index.d.ts.map +1 -1
  354. package/dist/client/index.js +2 -1
  355. package/dist/client/index.js.map +1 -1
  356. package/dist/index.browser.d.ts +1 -1
  357. package/dist/index.browser.d.ts.map +1 -1
  358. package/dist/index.browser.js +1 -1
  359. package/dist/index.browser.js.map +1 -1
  360. package/dist/localization/actions/get-localization-preference.d.ts +4 -0
  361. package/dist/localization/actions/get-localization-preference.d.ts.map +1 -0
  362. package/dist/localization/actions/get-localization-preference.js +16 -0
  363. package/dist/localization/actions/get-localization-preference.js.map +1 -0
  364. package/dist/localization/actions/set-localization-preference.d.ts +6 -0
  365. package/dist/localization/actions/set-localization-preference.d.ts.map +1 -0
  366. package/dist/localization/actions/set-localization-preference.js +24 -0
  367. package/dist/localization/actions/set-localization-preference.js.map +1 -0
  368. package/dist/localization/index.d.ts +3 -0
  369. package/dist/localization/index.d.ts.map +1 -0
  370. package/dist/localization/index.js +3 -0
  371. package/dist/localization/index.js.map +1 -0
  372. package/dist/localization/server.d.ts +25 -0
  373. package/dist/localization/server.d.ts.map +1 -0
  374. package/dist/localization/server.js +69 -0
  375. package/dist/localization/server.js.map +1 -0
  376. package/dist/localization/shared.d.ts +25 -0
  377. package/dist/localization/shared.d.ts.map +1 -0
  378. package/dist/localization/shared.js +134 -0
  379. package/dist/localization/shared.js.map +1 -0
  380. package/dist/server/action-discovery.d.ts.map +1 -1
  381. package/dist/server/action-discovery.js +8 -0
  382. package/dist/server/action-discovery.js.map +1 -1
  383. package/dist/server/index.d.ts +1 -0
  384. package/dist/server/index.d.ts.map +1 -1
  385. package/dist/server/index.js +1 -0
  386. package/dist/server/index.js.map +1 -1
  387. package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  388. package/dist/templates/default/.agents/skills/internationalization/SKILL.md +77 -0
  389. package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +6 -0
  390. package/dist/templates/default/AGENTS.md +16 -15
  391. package/dist/templates/default/app/i18n/en-US.ts +29 -0
  392. package/dist/templates/default/app/i18n/index.ts +13 -0
  393. package/dist/templates/default/app/root.tsx +20 -1
  394. package/dist/templates/default/app/routes/_index.tsx +24 -9
  395. package/dist/templates/default/app/routes/settings.tsx +67 -0
  396. package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  397. package/dist/templates/workspace-core/.agents/skills/internationalization/SKILL.md +77 -0
  398. package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +6 -0
  399. package/dist/vite/action-types-plugin.d.ts.map +1 -1
  400. package/dist/vite/action-types-plugin.js +8 -0
  401. package/dist/vite/action-types-plugin.js.map +1 -1
  402. package/docs/AGENTS.md +1 -0
  403. package/docs/content/client.md +15 -0
  404. package/docs/content/internationalization.md +145 -0
  405. package/docs/content/locales/ar-SA/internationalization.md +102 -0
  406. package/docs/content/locales/de-DE/internationalization.md +102 -0
  407. package/docs/content/locales/es-ES/internationalization.md +102 -0
  408. package/docs/content/locales/fr-FR/internationalization.md +102 -0
  409. package/docs/content/locales/hi-IN/internationalization.md +102 -0
  410. package/docs/content/locales/ja-JP/internationalization.md +114 -0
  411. package/docs/content/locales/ko-KR/internationalization.md +102 -0
  412. package/docs/content/locales/pt-BR/internationalization.md +102 -0
  413. package/docs/content/locales/zh-CN/internationalization.md +102 -0
  414. package/docs/content/skills-guide.md +19 -18
  415. package/package.json +7 -1
  416. package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  417. package/src/templates/default/.agents/skills/internationalization/SKILL.md +77 -0
  418. package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +6 -0
  419. package/src/templates/default/AGENTS.md +16 -15
  420. package/src/templates/default/app/i18n/en-US.ts +29 -0
  421. package/src/templates/default/app/i18n/index.ts +13 -0
  422. package/src/templates/default/app/root.tsx +20 -1
  423. package/src/templates/default/app/routes/_index.tsx +24 -9
  424. package/src/templates/default/app/routes/settings.tsx +67 -0
  425. package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  426. package/src/templates/workspace-core/.agents/skills/internationalization/SKILL.md +77 -0
  427. package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +6 -0
@@ -0,0 +1,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,74 @@
1
+ const messages = {
2
+ root: {
3
+ commandVideos: "動画",
4
+ searchCompositions: "コンポジションを検索",
5
+ commandAppearance: "外観",
6
+ toggleTheme: "テーマを切り替え",
7
+ },
8
+ header: {
9
+ videos: "動画",
10
+ components: "コンポーネント",
11
+ designSystems: "デザインシステム",
12
+ team: "チーム",
13
+ settings: "設定",
14
+ extensions: "拡張機能",
15
+ newComposition: "新しいコンポジション",
16
+ studio: "スタジオ",
17
+ },
18
+ navigation: {
19
+ settings: "設定",
20
+ brand: "Videos",
21
+ animations: "アニメーション",
22
+ components: "コンポーネント",
23
+ designSystems: "デザインシステム",
24
+ team: "チーム",
25
+ },
26
+ settings: {
27
+ title: "設定",
28
+ description: "このアプリの言語とワークスペース設定。",
29
+ languageTitle: "言語",
30
+ languageDescription:
31
+ "インターフェース言語を選択します。この設定はアカウントに保存されます。",
32
+ languageLabel: "インターフェース言語",
33
+ workspaceTitle: "ワークスペース",
34
+ workspaceDescription:
35
+ "チームメンバー、組織アクセス、共有ワークスペース設定を管理します。",
36
+ openTeamSettings: "チーム設定を開く",
37
+ openResourceSettings: "リソース設定を開く",
38
+ agentTitle: "エージェント設定",
39
+ agentDescription:
40
+ "右サイドバーのエージェント設定を開き、モデル、API キー、自動化、音声などを管理します。",
41
+ openAgentSettings: "エージェント設定を開く",
42
+ },
43
+ agent: {
44
+ emptyState: "動画について何でも聞いてください",
45
+ suggestionLogo: "Acme のロゴリビールを作成",
46
+ suggestionZoom: "このシーンにカメラズームを追加",
47
+ suggestionSlow: "イントロアニメーションを遅くする",
48
+ },
49
+ sidebar: {
50
+ navigation: "ナビゲーション",
51
+ openNavigation: "ナビゲーションを開く",
52
+ },
53
+ studio: {
54
+ closeSidebar: "サイドバーを閉じる",
55
+ openSidebar: "サイドバーを開く",
56
+ share: "共有",
57
+ shareVideos: "動画を共有",
58
+ shareVideosDescription:
59
+ "動画を共有またはエクスポートするには、クラウドデータベースを接続して、どこからでもコンポジションにアクセスできるようにします。",
60
+ compositions: "コンポジション",
61
+ properties: "プロパティ",
62
+ },
63
+ newComposition: {
64
+ runFailed: "コンポジション作成前にエージェント実行が失敗しました。",
65
+ readFailed: "添付ファイルを読み取れませんでした。",
66
+ startFailed: "コンポジションリクエストを開始できませんでした。",
67
+ button: "新しいコンポジション",
68
+ title: "新しいコンポジション",
69
+ description: "作成したい動画を説明してください",
70
+ placeholder: "作成したい動画を説明してください...",
71
+ },
72
+ };
73
+
74
+ export default messages;
@@ -0,0 +1,74 @@
1
+ const messages = {
2
+ root: {
3
+ commandVideos: "동영상",
4
+ searchCompositions: "컴포지션 검색",
5
+ commandAppearance: "모양",
6
+ toggleTheme: "테마 전환",
7
+ },
8
+ header: {
9
+ videos: "동영상",
10
+ components: "컴포넌트",
11
+ designSystems: "디자인 시스템",
12
+ team: "팀",
13
+ settings: "설정",
14
+ extensions: "확장",
15
+ newComposition: "새 컴포지션",
16
+ studio: "스튜디오",
17
+ },
18
+ navigation: {
19
+ settings: "설정",
20
+ brand: "Videos",
21
+ animations: "애니메이션",
22
+ components: "컴포넌트",
23
+ designSystems: "디자인 시스템",
24
+ team: "팀",
25
+ },
26
+ settings: {
27
+ title: "설정",
28
+ description: "이 앱의 언어 및 워크스페이스 환경설정입니다.",
29
+ languageTitle: "언어",
30
+ languageDescription:
31
+ "인터페이스 언어를 선택하세요. 이 기본 설정은 계정에 저장됩니다.",
32
+ languageLabel: "인터페이스 언어",
33
+ workspaceTitle: "워크스페이스",
34
+ workspaceDescription:
35
+ "팀원, 조직 접근 권한, 공유 워크스페이스 환경설정을 관리합니다.",
36
+ openTeamSettings: "팀 설정 열기",
37
+ openResourceSettings: "리소스 설정 열기",
38
+ agentTitle: "에이전트 설정",
39
+ agentDescription:
40
+ "오른쪽 사이드바의 에이전트 설정을 열어 모델, API 키, 자동화, 음성 및 기타 제어를 관리합니다.",
41
+ openAgentSettings: "에이전트 설정 열기",
42
+ },
43
+ agent: {
44
+ emptyState: "동영상에 대해 무엇이든 물어보세요",
45
+ suggestionLogo: "Acme 로고 리빌 만들기",
46
+ suggestionZoom: "이 장면에 카메라 줌 추가",
47
+ suggestionSlow: "인트로 애니메이션 느리게 하기",
48
+ },
49
+ sidebar: {
50
+ navigation: "탐색",
51
+ openNavigation: "탐색 열기",
52
+ },
53
+ studio: {
54
+ closeSidebar: "사이드바 닫기",
55
+ openSidebar: "사이드바 열기",
56
+ share: "공유",
57
+ shareVideos: "동영상 공유",
58
+ shareVideosDescription:
59
+ "동영상을 공유하거나 내보내려면 클라우드 데이터베이스를 연결해 어디서든 컴포지션에 접근할 수 있게 하세요.",
60
+ compositions: "컴포지션",
61
+ properties: "속성",
62
+ },
63
+ newComposition: {
64
+ runFailed: "컴포지션을 만들기 전에 에이전트 실행이 실패했습니다.",
65
+ readFailed: "첨부 파일을 읽을 수 없습니다.",
66
+ startFailed: "컴포지션 요청을 시작할 수 없습니다.",
67
+ button: "새 컴포지션",
68
+ title: "새 컴포지션",
69
+ description: "만들고 싶은 동영상을 설명하세요",
70
+ placeholder: "만들고 싶은 동영상을 설명하세요...",
71
+ },
72
+ };
73
+
74
+ export default messages;
@@ -0,0 +1,75 @@
1
+ const messages = {
2
+ root: {
3
+ commandVideos: "Vídeos",
4
+ searchCompositions: "Buscar composições",
5
+ commandAppearance: "Aparência",
6
+ toggleTheme: "Alternar tema",
7
+ },
8
+ header: {
9
+ videos: "Vídeos",
10
+ components: "Componentes",
11
+ designSystems: "Sistemas de design",
12
+ team: "Equipe",
13
+ settings: "Configurações",
14
+ extensions: "Extensões",
15
+ newComposition: "Nova composição",
16
+ studio: "Estúdio",
17
+ },
18
+ navigation: {
19
+ settings: "Configurações",
20
+ brand: "Videos",
21
+ animations: "Animações",
22
+ components: "Componentes",
23
+ designSystems: "Sistemas de design",
24
+ team: "Equipe",
25
+ },
26
+ settings: {
27
+ title: "Configurações",
28
+ description: "Preferências de idioma e espaço de trabalho deste app.",
29
+ languageTitle: "Idioma",
30
+ languageDescription:
31
+ "Escolha o idioma da interface. Essa preferência é salva na sua conta.",
32
+ languageLabel: "Idioma da interface",
33
+ workspaceTitle: "Espaço de trabalho",
34
+ workspaceDescription:
35
+ "Gerencie membros da equipe, acesso da organização e preferências compartilhadas.",
36
+ openTeamSettings: "Abrir configurações da equipe",
37
+ openResourceSettings: "Abrir configurações de recursos",
38
+ agentTitle: "Configurações do agente",
39
+ agentDescription:
40
+ "Abra as configurações do agente na barra lateral para modelos, chaves de API, automações, voz e outros controles.",
41
+ openAgentSettings: "Abrir configurações do agente",
42
+ },
43
+ agent: {
44
+ emptyState: "Pergunte qualquer coisa sobre seus vídeos",
45
+ suggestionLogo: "Crie uma revelação de logo para Acme",
46
+ suggestionZoom: "Adicione um zoom de câmera nesta cena",
47
+ suggestionSlow: "Desacelere a animação de introdução",
48
+ },
49
+ sidebar: {
50
+ navigation: "Navegação",
51
+ openNavigation: "Abrir navegação",
52
+ },
53
+ studio: {
54
+ closeSidebar: "Fechar barra lateral",
55
+ openSidebar: "Abrir barra lateral",
56
+ share: "Compartilhar",
57
+ shareVideos: "Compartilhar vídeos",
58
+ shareVideosDescription:
59
+ "Para compartilhar ou exportar vídeos, conecte um banco de dados em nuvem para acessar suas composições de qualquer lugar.",
60
+ compositions: "Composições",
61
+ properties: "Propriedades",
62
+ },
63
+ newComposition: {
64
+ runFailed:
65
+ "A execução do agente falhou antes que a composição pudesse ser criada.",
66
+ readFailed: "Não foi possível ler o anexo.",
67
+ startFailed: "Não foi possível iniciar a solicitação de composição.",
68
+ button: "Nova composição",
69
+ title: "Nova composição",
70
+ description: "Descreva o vídeo que você quer criar",
71
+ placeholder: "Descreva o vídeo que você quer criar...",
72
+ },
73
+ };
74
+
75
+ export default messages;
@@ -0,0 +1,72 @@
1
+ const messages = {
2
+ root: {
3
+ commandVideos: "视频",
4
+ searchCompositions: "搜索合成",
5
+ commandAppearance: "外观",
6
+ toggleTheme: "切换主题",
7
+ },
8
+ header: {
9
+ videos: "视频",
10
+ components: "组件",
11
+ designSystems: "设计系统",
12
+ team: "团队",
13
+ settings: "设置",
14
+ extensions: "扩展",
15
+ newComposition: "新建合成",
16
+ studio: "工作室",
17
+ },
18
+ navigation: {
19
+ settings: "设置",
20
+ brand: "Videos",
21
+ animations: "动画",
22
+ components: "组件",
23
+ designSystems: "设计系统",
24
+ team: "团队",
25
+ },
26
+ settings: {
27
+ title: "设置",
28
+ description: "此应用的语言和工作区偏好设置。",
29
+ languageTitle: "语言",
30
+ languageDescription: "选择界面语言。此偏好会保存到你的账户。",
31
+ languageLabel: "界面语言",
32
+ workspaceTitle: "工作区",
33
+ workspaceDescription: "管理团队成员、组织访问权限和共享工作区偏好。",
34
+ openTeamSettings: "打开团队设置",
35
+ openResourceSettings: "打开资源设置",
36
+ agentTitle: "代理设置",
37
+ agentDescription:
38
+ "打开代理侧边栏设置,管理模型、API 密钥、自动化、语音和其他代理控制项。",
39
+ openAgentSettings: "打开代理设置",
40
+ },
41
+ agent: {
42
+ emptyState: "可以询问我任何关于视频的问题",
43
+ suggestionLogo: "为 Acme 制作标志揭示动画",
44
+ suggestionZoom: "给这个场景添加镜头缩放",
45
+ suggestionSlow: "放慢开场动画",
46
+ },
47
+ sidebar: {
48
+ navigation: "导航",
49
+ openNavigation: "打开导航",
50
+ },
51
+ studio: {
52
+ closeSidebar: "关闭侧边栏",
53
+ openSidebar: "打开侧边栏",
54
+ share: "分享",
55
+ shareVideos: "分享视频",
56
+ shareVideosDescription:
57
+ "若要分享或导出视频,请连接云数据库,让你的合成可从任何地方访问。",
58
+ compositions: "合成",
59
+ properties: "属性",
60
+ },
61
+ newComposition: {
62
+ runFailed: "代理运行失败,合成尚未创建。",
63
+ readFailed: "无法读取附件。",
64
+ startFailed: "无法启动合成请求。",
65
+ button: "新建合成",
66
+ title: "新建合成",
67
+ description: "描述你想创建的视频",
68
+ placeholder: "描述你想创建的视频...",
69
+ },
70
+ };
71
+
72
+ export default messages;
@@ -1,6 +1,6 @@
1
1
  import { useState, useCallback, useEffect, useRef } from "react";
2
2
  import { useParams, Navigate } from "react-router";
3
- import { AgentSidebar } from "@agent-native/core/client";
3
+ import { AgentSidebar, useT } from "@agent-native/core/client";
4
4
  import { InvitationBanner } from "@agent-native/core/client/org";
5
5
  import { compositions } from "@/remotion/registry";
6
6
  import { Spinner } from "@/components/ui/spinner";
@@ -27,6 +27,7 @@ function StudioContent({
27
27
  collab: ReturnType<typeof useCompositionCollab>;
28
28
  }) {
29
29
  const isMobile = useIsMobile();
30
+ const t = useT();
30
31
  const [sidebarOpen, setSidebarOpen] = useState(true);
31
32
  const initialSidebarSet = useRef(false);
32
33
  const {
@@ -72,11 +73,11 @@ function StudioContent({
72
73
  <AgentSidebar
73
74
  position="right"
74
75
  defaultOpen
75
- emptyStateText="Ask me anything about your videos"
76
+ emptyStateText={t("agent.emptyState")}
76
77
  suggestions={[
77
- "Make a logo reveal for Acme",
78
- "Add a camera zoom on this scene",
79
- "Slow down the intro animation",
78
+ t("agent.suggestionLogo"),
79
+ t("agent.suggestionZoom"),
80
+ t("agent.suggestionSlow"),
80
81
  ]}
81
82
  >
82
83
  <div className="flex flex-1 min-h-0 flex-col overflow-hidden">
@@ -136,6 +137,7 @@ function StudioContent({
136
137
 
137
138
  export default function Studio() {
138
139
  const { compositionId } = useParams<{ compositionId: string }>();
140
+ const t = useT();
139
141
  const dbCompositions = useDatabaseCompositions();
140
142
  const collab = useCompositionCollab(
141
143
  compositionId && compositionId !== "new" ? compositionId : null,
@@ -197,11 +199,11 @@ export default function Studio() {
197
199
  <AgentSidebar
198
200
  position="right"
199
201
  defaultOpen
200
- emptyStateText="Ask me anything about your videos"
202
+ emptyStateText={t("agent.emptyState")}
201
203
  suggestions={[
202
- "Make a logo reveal for Acme",
203
- "Add a camera zoom on this scene",
204
- "Slow down the intro animation",
204
+ t("agent.suggestionLogo"),
205
+ t("agent.suggestionZoom"),
206
+ t("agent.suggestionSlow"),
205
207
  ]}
206
208
  >
207
209
  <div className="flex flex-1 min-h-0 flex-col overflow-hidden">
@@ -9,6 +9,7 @@ import {
9
9
  createAgentNativeQueryClient,
10
10
  useCommandMenuShortcut,
11
11
  useDbSync,
12
+ useT,
12
13
  } from "@agent-native/core/client";
13
14
  import { Layout as AppLayout } from "@/components/layout/Layout";
14
15
  import { IconSun, IconMoon } from "@tabler/icons-react";
@@ -18,9 +19,11 @@ import stylesheet from "./global.css?url";
18
19
  import { TAB_ID } from "@/lib/tab-id";
19
20
  import {
20
21
  configureTracking,
22
+ getLocaleInitScript,
21
23
  getThemeInitScript,
22
24
  } from "@agent-native/core/client";
23
25
  import changelog from "../CHANGELOG.md?raw";
26
+ import { i18nCatalog } from "./i18n";
24
27
  configureTracking({
25
28
  getDefaultProps: (_name, properties) => ({
26
29
  ...properties,
@@ -32,11 +35,35 @@ export const links: LinksFunction = () => [
32
35
  { rel: "stylesheet", href: stylesheet },
33
36
  ];
34
37
 
35
- const THEME_INIT_SCRIPT = getThemeInitScript("dark", true);
38
+ const THEME_INIT_SCRIPT_SELECTOR = "script[data-agent-native-theme-init]";
39
+ const LOCALE_INIT_SCRIPT_SELECTOR = "script[data-agent-native-locale-init]";
40
+
41
+ function getHydrationStableThemeInitScript() {
42
+ if (typeof document !== "undefined") {
43
+ const existing = document.querySelector<HTMLScriptElement>(
44
+ THEME_INIT_SCRIPT_SELECTOR,
45
+ );
46
+ if (existing?.innerHTML) return existing.innerHTML;
47
+ }
48
+ return getThemeInitScript("dark", true);
49
+ }
50
+
51
+ function getHydrationStableLocaleInitScript() {
52
+ if (typeof document !== "undefined") {
53
+ const existing = document.querySelector<HTMLScriptElement>(
54
+ LOCALE_INIT_SCRIPT_SELECTOR,
55
+ );
56
+ if (existing?.innerHTML) return existing.innerHTML;
57
+ }
58
+ return getLocaleInitScript();
59
+ }
60
+
61
+ const THEME_INIT_SCRIPT = getHydrationStableThemeInitScript();
62
+ const LOCALE_INIT_SCRIPT = getHydrationStableLocaleInitScript();
36
63
 
37
64
  export function Layout({ children }: { children: React.ReactNode }) {
38
65
  return (
39
- <html lang="en" suppressHydrationWarning>
66
+ <html lang="en-US" dir="ltr" data-locale="en-US" suppressHydrationWarning>
40
67
  <head>
41
68
  <meta charSet="utf-8" />
42
69
  <meta
@@ -44,9 +71,15 @@ export function Layout({ children }: { children: React.ReactNode }) {
44
71
  content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
45
72
  />
46
73
  <script
74
+ data-agent-native-theme-init
47
75
  suppressHydrationWarning
48
76
  dangerouslySetInnerHTML={{ __html: THEME_INIT_SCRIPT }}
49
77
  />
78
+ <script
79
+ data-agent-native-locale-init
80
+ suppressHydrationWarning
81
+ dangerouslySetInnerHTML={{ __html: LOCALE_INIT_SCRIPT }}
82
+ />
50
83
  <link rel="manifest" href={appPath("/manifest.json")} />
51
84
  <meta name="theme-color" content="#EF4444" />
52
85
  <meta name="mobile-web-app-capable" content="yes" />
@@ -80,6 +113,7 @@ function AppContent() {
80
113
  const { resolvedTheme, setTheme } = useTheme();
81
114
  const isDark = resolvedTheme === "dark";
82
115
  const [cmdkOpen, setCmdkOpen] = useState(false);
116
+ const t = useT();
83
117
  useCommandMenuShortcut(useCallback(() => setCmdkOpen(true), []));
84
118
 
85
119
  return (
@@ -90,18 +124,18 @@ function AppContent() {
90
124
  changelog={changelog}
91
125
  changelogKey="videos"
92
126
  >
93
- <CommandMenu.Group heading="Videos">
127
+ <CommandMenu.Group heading={t("root.commandVideos")}>
94
128
  <CommandMenu.Item onSelect={() => {}}>
95
- Search compositions
129
+ {t("root.searchCompositions")}
96
130
  </CommandMenu.Item>
97
131
  </CommandMenu.Group>
98
- <CommandMenu.Group heading="Appearance">
132
+ <CommandMenu.Group heading={t("root.commandAppearance")}>
99
133
  <CommandMenu.Item
100
134
  onSelect={() => setTheme(isDark ? "light" : "dark")}
101
135
  keywords={["theme", "dark", "light", "mode"]}
102
136
  >
103
137
  {isDark ? <IconSun size={16} /> : <IconMoon size={16} />}
104
- Toggle {isDark ? "light" : "dark"} mode
138
+ {t("root.toggleTheme")}
105
139
  </CommandMenu.Item>
106
140
  </CommandMenu.Group>
107
141
  </CommandMenu>
@@ -115,7 +149,11 @@ function AppContent() {
115
149
  export default function Root() {
116
150
  const [queryClient] = useState(() => createAgentNativeQueryClient());
117
151
  return (
118
- <AppProviders queryClient={queryClient} defaultTheme="dark">
152
+ <AppProviders
153
+ queryClient={queryClient}
154
+ defaultTheme="dark"
155
+ i18n={{ catalog: i18nCatalog }}
156
+ >
119
157
  <AppContent />
120
158
  </AppProviders>
121
159
  );
@@ -0,0 +1,85 @@
1
+ import { Link } from "react-router";
2
+ import {
3
+ ChangelogSettingsCard,
4
+ LanguagePicker,
5
+ openAgentSettings,
6
+ useT,
7
+ } from "@agent-native/core/client";
8
+ import { useSetPageTitle } from "@/components/layout/HeaderActions";
9
+ import { Button } from "@/components/ui/button";
10
+ import {
11
+ Card,
12
+ CardContent,
13
+ CardDescription,
14
+ CardHeader,
15
+ CardTitle,
16
+ } from "@/components/ui/card";
17
+ import { Label } from "@/components/ui/label";
18
+ import changelog from "../../CHANGELOG.md?raw";
19
+
20
+ export function meta() {
21
+ return [{ title: "Settings - Videos" }];
22
+ }
23
+
24
+ export default function SettingsRoute() {
25
+ const t = useT();
26
+ useSetPageTitle(t("settings.title"));
27
+
28
+ return (
29
+ <main className="mx-auto w-full max-w-3xl space-y-6 px-4 py-6 sm:px-6 sm:py-10">
30
+ <div className="space-y-1">
31
+ <h1 className="text-2xl font-semibold tracking-tight">
32
+ {t("settings.title")}
33
+ </h1>
34
+ <p className="text-sm leading-6 text-muted-foreground">
35
+ {t("settings.description")}
36
+ </p>
37
+ </div>
38
+
39
+ <Card>
40
+ <CardHeader>
41
+ <CardTitle className="text-base">
42
+ {t("settings.languageTitle")}
43
+ </CardTitle>
44
+ <CardDescription>{t("settings.languageDescription")}</CardDescription>
45
+ </CardHeader>
46
+ <CardContent className="max-w-xs space-y-1.5">
47
+ <Label>{t("settings.languageLabel")}</Label>
48
+ <LanguagePicker label={t("settings.languageLabel")} />
49
+ </CardContent>
50
+ </Card>
51
+
52
+ <Card>
53
+ <CardHeader>
54
+ <CardTitle className="text-base">
55
+ {t("settings.workspaceTitle")}
56
+ </CardTitle>
57
+ <CardDescription>
58
+ {t("settings.workspaceDescription")}
59
+ </CardDescription>
60
+ </CardHeader>
61
+ <CardContent>
62
+ <Button variant="outline" asChild>
63
+ <Link to="/team">{t("settings.openTeamSettings")}</Link>
64
+ </Button>
65
+ </CardContent>
66
+ </Card>
67
+
68
+ <Card>
69
+ <CardHeader>
70
+ <CardTitle className="text-base">
71
+ {t("settings.agentTitle")}
72
+ </CardTitle>
73
+ <CardDescription>{t("settings.agentDescription")}</CardDescription>
74
+ </CardHeader>
75
+ <CardContent>
76
+ <Button variant="outline" onClick={() => openAgentSettings()}>
77
+ {t("settings.openAgentSettings")}
78
+ </Button>
79
+ </CardContent>
80
+ </Card>
81
+
82
+ <ChangelogSettingsCard markdown={changelog} />
83
+ </main>
84
+ );
85
+ }
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: added
3
+ date: 2026-06-24
4
+ ---
5
+
6
+ A new Settings page gives quick access to language, workspace, and agent preferences.
@@ -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.
@@ -19,6 +19,9 @@ import { type ReactNode } from "react";
19
19
  * Opens the agent sidebar (dispatches event that AgentSidebar listens for)
20
20
  */
21
21
  export declare function openAgentSidebar(): void;
22
+ export declare function openAgentSettings(section?: string | {
23
+ section?: string | null;
24
+ }): void;
22
25
  export declare function focusAgentChat(): void;
23
26
  /**
24
27
  * Sends a prompt to the agent and opens the sidebar
@@ -1 +1 @@
1
- {"version":3,"file":"CommandMenu.d.ts","sourceRoot":"","sources":["../../src/client/CommandMenu.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAc,EAQZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAgCf;;GAEG;AACH,wBAAgB,gBAAgB,SAE/B;AAED,wBAAgB,cAAc,SAO7B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,QAG5C;AAID,UAAU,iBAAiB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,iBAAS,YAAY,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CAW7D;AAED,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,iBAAS,WAAW,CAAC,EACnB,QAAQ,EACR,QAAQ,EACR,QAAQ,EAAE,SAAS,EACnB,SAAS,EACT,WAAkB,GACnB,EAAE,gBAAgB,2CAsClB;AAED,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iBAAS,eAAe,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,oBAAoB,2CAWrE;AAED,iBAAS,gBAAgB,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAE9D;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,UAAU,qBAAqB;IAC7B,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAuBD,iBAAS,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAgB,EAAE,EAAE,qBAAqB,kDA2B1E;AAID,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,QAAQ,EAAE,SAAS,CAAC;IACpB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,WAA2C,EAC3C,SAAS,EAAE,UAAiC,EAC5C,iBAAwB,EACxB,SAAS,EACT,SAAS,EACT,cAA6B,EAC7B,YAAY,GACb,EAAE,gBAAgB,2CAuUlB;yBAlVe,WAAW;;;;;;;AAgX3B;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,IAAI,QAoBxD;AAED,YAAY,EACV,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,GACrB,CAAC"}
1
+ {"version":3,"file":"CommandMenu.d.ts","sourceRoot":"","sources":["../../src/client/CommandMenu.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAc,EAQZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAgCf;;GAEG;AACH,wBAAgB,gBAAgB,SAE/B;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,CAAC,EAAE,MAAM,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,QAa/C;AAED,wBAAgB,cAAc,SAO7B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,QAG5C;AAID,UAAU,iBAAiB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,iBAAS,YAAY,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CAW7D;AAED,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,iBAAS,WAAW,CAAC,EACnB,QAAQ,EACR,QAAQ,EACR,QAAQ,EAAE,SAAS,EACnB,SAAS,EACT,WAAkB,GACnB,EAAE,gBAAgB,2CAsClB;AAED,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iBAAS,eAAe,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,oBAAoB,2CAWrE;AAED,iBAAS,gBAAgB,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAE9D;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,UAAU,qBAAqB;IAC7B,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAuBD,iBAAS,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAgB,EAAE,EAAE,qBAAqB,kDA2B1E;AAID,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,QAAQ,EAAE,SAAS,CAAC;IACpB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,WAA2C,EAC3C,SAAS,EAAE,UAAiC,EAC5C,iBAAwB,EACxB,SAAS,EACT,SAAS,EACT,cAA6B,EAC7B,YAAY,GACb,EAAE,gBAAgB,2CAuUlB;yBAlVe,WAAW;;;;;;;AAgX3B;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,IAAI,QAoBxD;AAED,YAAY,EACV,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,GACrB,CAAC"}
@@ -35,6 +35,15 @@ function useCommandMenuContext() {
35
35
  export function openAgentSidebar() {
36
36
  window.dispatchEvent(new Event("agent-panel:open"));
37
37
  }
38
+ export function openAgentSettings(section) {
39
+ if (typeof window === "undefined")
40
+ return;
41
+ const normalizedSection = typeof section === "string" ? section : section?.section;
42
+ openAgentSidebar();
43
+ window.dispatchEvent(new CustomEvent("agent-panel:open-settings", {
44
+ detail: normalizedSection ? { section: normalizedSection } : undefined,
45
+ }));
46
+ }
38
47
  export function focusAgentChat() {
39
48
  window.dispatchEvent(new CustomEvent("agent-panel:set-mode", {
40
49
  detail: { mode: "chat" },