@agent-native/core 0.75.4 → 0.76.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +47 -0
- package/corpus/core/docs/AGENTS.md +1 -0
- package/corpus/core/docs/content/client.md +15 -0
- package/corpus/core/docs/content/internationalization.md +145 -0
- package/corpus/core/docs/content/locales/ar-SA/internationalization.md +102 -0
- package/corpus/core/docs/content/locales/de-DE/internationalization.md +102 -0
- package/corpus/core/docs/content/locales/es-ES/internationalization.md +102 -0
- package/corpus/core/docs/content/locales/fr-FR/internationalization.md +102 -0
- package/corpus/core/docs/content/locales/hi-IN/internationalization.md +102 -0
- package/corpus/core/docs/content/locales/ja-JP/internationalization.md +114 -0
- package/corpus/core/docs/content/locales/ko-KR/internationalization.md +102 -0
- package/corpus/core/docs/content/locales/pt-BR/internationalization.md +102 -0
- package/corpus/core/docs/content/locales/zh-CN/internationalization.md +102 -0
- package/corpus/core/docs/content/skills-guide.md +19 -18
- package/corpus/core/package.json +7 -1
- package/corpus/core/src/agent/durable-background.ts +62 -28
- package/corpus/core/src/agent/production-agent.ts +16 -12
- package/corpus/core/src/cli/skills.ts +22 -4
- package/corpus/core/src/client/CommandMenu.tsx +16 -0
- package/corpus/core/src/client/app-providers.tsx +26 -1
- package/corpus/core/src/client/i18n.tsx +605 -0
- package/corpus/core/src/client/index.ts +28 -0
- package/corpus/core/src/deploy/build.ts +47 -113
- package/corpus/core/src/deploy/workspace-deploy.ts +62 -30
- package/corpus/core/src/index.browser.ts +25 -0
- package/corpus/core/src/localization/actions/get-localization-preference.ts +23 -0
- package/corpus/core/src/localization/actions/set-localization-preference.ts +30 -0
- package/corpus/core/src/localization/index.ts +2 -0
- package/corpus/core/src/localization/server.ts +131 -0
- package/corpus/core/src/localization/shared.ts +163 -0
- package/corpus/core/src/server/action-discovery.ts +8 -0
- package/corpus/core/src/server/index.ts +8 -0
- package/corpus/core/src/server/self-dispatch.ts +29 -2
- package/corpus/core/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/corpus/core/src/templates/default/.agents/skills/internationalization/SKILL.md +77 -0
- package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/core/src/templates/default/AGENTS.md +16 -15
- package/corpus/core/src/templates/default/app/i18n/en-US.ts +29 -0
- package/corpus/core/src/templates/default/app/i18n/index.ts +13 -0
- package/corpus/core/src/templates/default/app/root.tsx +20 -1
- package/corpus/core/src/templates/default/app/routes/_index.tsx +24 -9
- package/corpus/core/src/templates/default/app/routes/settings.tsx +67 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/internationalization/SKILL.md +77 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/core/src/vite/action-types-plugin.ts +10 -0
- package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/analytics/app/components/layout/Header.tsx +18 -15
- package/corpus/templates/analytics/app/components/layout/Layout.tsx +7 -5
- package/corpus/templates/analytics/app/components/layout/MobileNav.tsx +9 -3
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +5 -3
- package/corpus/templates/analytics/app/i18n/ar-SA.ts +3 -0
- package/corpus/templates/analytics/app/i18n/de-DE.ts +3 -0
- package/corpus/templates/analytics/app/i18n/en-US.ts +3 -0
- package/corpus/templates/analytics/app/i18n/es-ES.ts +3 -0
- package/corpus/templates/analytics/app/i18n/fr-FR.ts +3 -0
- package/corpus/templates/analytics/app/i18n/hi-IN.ts +3 -0
- package/corpus/templates/analytics/app/i18n/index.ts +31 -0
- package/corpus/templates/analytics/app/i18n/ja-JP.ts +3 -0
- package/corpus/templates/analytics/app/i18n/ko-KR.ts +3 -0
- package/corpus/templates/analytics/app/i18n/pt-BR.ts +3 -0
- package/corpus/templates/analytics/app/i18n/zh-CN.ts +3 -0
- package/corpus/templates/analytics/app/i18n-data.ts +433 -0
- package/corpus/templates/analytics/app/pages/Settings.tsx +50 -16
- package/corpus/templates/analytics/app/root.tsx +14 -1
- package/corpus/templates/analytics/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
- package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/assets/app/components/layout/Header.tsx +17 -8
- package/corpus/templates/assets/app/components/layout/Layout.tsx +10 -6
- package/corpus/templates/assets/app/components/layout/Sidebar.tsx +40 -23
- package/corpus/templates/assets/app/i18n/ar-SA.ts +3 -0
- package/corpus/templates/assets/app/i18n/de-DE.ts +3 -0
- package/corpus/templates/assets/app/i18n/en-US.ts +3 -0
- package/corpus/templates/assets/app/i18n/es-ES.ts +3 -0
- package/corpus/templates/assets/app/i18n/fr-FR.ts +3 -0
- package/corpus/templates/assets/app/i18n/hi-IN.ts +3 -0
- package/corpus/templates/assets/app/i18n/index.ts +31 -0
- package/corpus/templates/assets/app/i18n/ja-JP.ts +3 -0
- package/corpus/templates/assets/app/i18n/ko-KR.ts +3 -0
- package/corpus/templates/assets/app/i18n/pt-BR.ts +3 -0
- package/corpus/templates/assets/app/i18n/zh-CN.ts +3 -0
- package/corpus/templates/assets/app/i18n-data.ts +668 -0
- package/corpus/templates/assets/app/root.tsx +40 -15
- package/corpus/templates/assets/app/routes/_index.tsx +9 -10
- package/corpus/templates/assets/app/routes/settings.tsx +37 -6
- package/corpus/templates/assets/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/assets/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
- package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/brain/app/components/layout/Layout.tsx +12 -8
- package/corpus/templates/brain/app/components/layout/Sidebar.tsx +23 -12
- package/corpus/templates/brain/app/i18n/ar-SA.ts +3 -0
- package/corpus/templates/brain/app/i18n/de-DE.ts +3 -0
- package/corpus/templates/brain/app/i18n/en-US.ts +3 -0
- package/corpus/templates/brain/app/i18n/es-ES.ts +3 -0
- package/corpus/templates/brain/app/i18n/fr-FR.ts +3 -0
- package/corpus/templates/brain/app/i18n/hi-IN.ts +3 -0
- package/corpus/templates/brain/app/i18n/index.ts +31 -0
- package/corpus/templates/brain/app/i18n/ja-JP.ts +3 -0
- package/corpus/templates/brain/app/i18n/ko-KR.ts +3 -0
- package/corpus/templates/brain/app/i18n/pt-BR.ts +3 -0
- package/corpus/templates/brain/app/i18n/zh-CN.ts +3 -0
- package/corpus/templates/brain/app/i18n-data.ts +624 -0
- package/corpus/templates/brain/app/root.tsx +27 -12
- package/corpus/templates/brain/app/routes/settings.tsx +45 -8
- package/corpus/templates/brain/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/brain/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
- package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +2 -0
- package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +16 -9
- package/corpus/templates/calendar/app/i18n/ar-SA.ts +57 -0
- package/corpus/templates/calendar/app/i18n/de-DE.ts +58 -0
- package/corpus/templates/calendar/app/i18n/en-US.ts +57 -0
- package/corpus/templates/calendar/app/i18n/es-ES.ts +58 -0
- package/corpus/templates/calendar/app/i18n/fr-FR.ts +58 -0
- package/corpus/templates/calendar/app/i18n/hi-IN.ts +57 -0
- package/corpus/templates/calendar/app/i18n/index.ts +31 -0
- package/corpus/templates/calendar/app/i18n/ja-JP.ts +58 -0
- package/corpus/templates/calendar/app/i18n/ko-KR.ts +57 -0
- package/corpus/templates/calendar/app/i18n/pt-BR.ts +57 -0
- package/corpus/templates/calendar/app/i18n/zh-CN.ts +57 -0
- package/corpus/templates/calendar/app/i18n-data.ts +516 -0
- package/corpus/templates/calendar/app/pages/CalendarView.tsx +2 -0
- package/corpus/templates/calendar/app/pages/Settings.tsx +63 -28
- package/corpus/templates/calendar/app/root.tsx +78 -7
- package/corpus/templates/calendar/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/calendar/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
- package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/chat/app/components/layout/Header.tsx +17 -11
- package/corpus/templates/chat/app/components/layout/Layout.tsx +12 -8
- package/corpus/templates/chat/app/components/layout/Sidebar.tsx +47 -18
- package/corpus/templates/chat/app/i18n/ar-SA.ts +62 -0
- package/corpus/templates/chat/app/i18n/de-DE.ts +63 -0
- package/corpus/templates/chat/app/i18n/en-US.ts +63 -0
- package/corpus/templates/chat/app/i18n/es-ES.ts +63 -0
- package/corpus/templates/chat/app/i18n/fr-FR.ts +63 -0
- package/corpus/templates/chat/app/i18n/hi-IN.ts +63 -0
- package/corpus/templates/chat/app/i18n/index.ts +31 -0
- package/corpus/templates/chat/app/i18n/ja-JP.ts +63 -0
- package/corpus/templates/chat/app/i18n/ko-KR.ts +63 -0
- package/corpus/templates/chat/app/i18n/pt-BR.ts +63 -0
- package/corpus/templates/chat/app/i18n/zh-CN.ts +61 -0
- package/corpus/templates/chat/app/i18n-data.ts +475 -0
- package/corpus/templates/chat/app/root.tsx +18 -5
- package/corpus/templates/chat/app/routes/_index.tsx +9 -8
- package/corpus/templates/chat/app/routes/settings.tsx +86 -0
- package/corpus/templates/chat/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
- package/corpus/templates/chat/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/clips/app/components/layout/Header.tsx +23 -17
- package/corpus/templates/clips/app/components/library/empty-state.tsx +10 -34
- package/corpus/templates/clips/app/components/library/library-layout.tsx +45 -34
- package/corpus/templates/clips/app/i18n/ar-SA.ts +182 -0
- package/corpus/templates/clips/app/i18n/de-DE.ts +184 -0
- package/corpus/templates/clips/app/i18n/en-US.ts +179 -0
- package/corpus/templates/clips/app/i18n/es-ES.ts +183 -0
- package/corpus/templates/clips/app/i18n/fr-FR.ts +184 -0
- package/corpus/templates/clips/app/i18n/hi-IN.ts +180 -0
- package/corpus/templates/clips/app/i18n/index.ts +41 -0
- package/corpus/templates/clips/app/i18n/ja-JP.ts +180 -0
- package/corpus/templates/clips/app/i18n/ko-KR.ts +178 -0
- package/corpus/templates/clips/app/i18n/pt-BR.ts +183 -0
- package/corpus/templates/clips/app/i18n/zh-CN.ts +173 -0
- package/corpus/templates/clips/app/root.tsx +104 -10
- package/corpus/templates/clips/app/routes/_app.settings._index.tsx +154 -95
- package/corpus/templates/clips/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-24-chrome-extension-setup-now-shows-a-clear-all-done-confirmati.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-24-clips-now-includes-a-language-picker-and-simplified-chinese-ui.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
- package/corpus/templates/clips/chrome-extension/src/permission.html +60 -0
- package/corpus/templates/clips/chrome-extension/src/permission.ts +28 -15
- package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/content/app/components/EmptyState.tsx +7 -5
- package/corpus/templates/content/app/components/ThemeToggle.tsx +4 -2
- package/corpus/templates/content/app/components/layout/Header.tsx +2 -0
- package/corpus/templates/content/app/components/layout/Layout.tsx +8 -7
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +41 -1
- package/corpus/templates/content/app/i18n/ar-SA.ts +3 -0
- package/corpus/templates/content/app/i18n/de-DE.ts +3 -0
- package/corpus/templates/content/app/i18n/en-US.ts +3 -0
- package/corpus/templates/content/app/i18n/es-ES.ts +3 -0
- package/corpus/templates/content/app/i18n/fr-FR.ts +3 -0
- package/corpus/templates/content/app/i18n/hi-IN.ts +3 -0
- package/corpus/templates/content/app/i18n/index.ts +31 -0
- package/corpus/templates/content/app/i18n/ja-JP.ts +3 -0
- package/corpus/templates/content/app/i18n/ko-KR.ts +3 -0
- package/corpus/templates/content/app/i18n/pt-BR.ts +3 -0
- package/corpus/templates/content/app/i18n/zh-CN.ts +3 -0
- package/corpus/templates/content/app/i18n-data.ts +490 -0
- package/corpus/templates/content/app/root.tsx +110 -23
- package/corpus/templates/content/app/routes/_app.settings.tsx +84 -0
- package/corpus/templates/content/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
- package/corpus/templates/content/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/design/app/components/layout/Header.tsx +16 -8
- package/corpus/templates/design/app/components/layout/Layout.tsx +8 -6
- package/corpus/templates/design/app/components/layout/Sidebar.tsx +25 -9
- package/corpus/templates/design/app/i18n/ar-SA.ts +3 -0
- package/corpus/templates/design/app/i18n/de-DE.ts +3 -0
- package/corpus/templates/design/app/i18n/en-US.ts +3 -0
- package/corpus/templates/design/app/i18n/es-ES.ts +3 -0
- package/corpus/templates/design/app/i18n/fr-FR.ts +3 -0
- package/corpus/templates/design/app/i18n/hi-IN.ts +3 -0
- package/corpus/templates/design/app/i18n/index.ts +31 -0
- package/corpus/templates/design/app/i18n/ja-JP.ts +3 -0
- package/corpus/templates/design/app/i18n/ko-KR.ts +3 -0
- package/corpus/templates/design/app/i18n/pt-BR.ts +3 -0
- package/corpus/templates/design/app/i18n/zh-CN.ts +3 -0
- package/corpus/templates/design/app/i18n-data.ts +350 -0
- package/corpus/templates/design/app/root.tsx +40 -15
- package/corpus/templates/design/app/routes/settings.tsx +43 -0
- package/corpus/templates/design/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/design/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
- package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/dispatch/app/i18n/ar-SA.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/de-DE.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/en-US.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/es-ES.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/fr-FR.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/hi-IN.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/index.ts +31 -0
- package/corpus/templates/dispatch/app/i18n/ja-JP.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/ko-KR.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/pt-BR.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/zh-CN.ts +3 -0
- package/corpus/templates/dispatch/app/i18n-data.ts +267 -0
- package/corpus/templates/dispatch/app/root.tsx +18 -4
- package/corpus/templates/dispatch/app/routes/settings.tsx +86 -0
- package/corpus/templates/dispatch/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/forms/app/components/layout/Header.tsx +16 -9
- package/corpus/templates/forms/app/components/layout/Layout.tsx +6 -4
- package/corpus/templates/forms/app/components/layout/Sidebar.tsx +34 -17
- package/corpus/templates/forms/app/i18n/ar-SA.ts +58 -0
- package/corpus/templates/forms/app/i18n/de-DE.ts +59 -0
- package/corpus/templates/forms/app/i18n/en-US.ts +59 -0
- package/corpus/templates/forms/app/i18n/es-ES.ts +59 -0
- package/corpus/templates/forms/app/i18n/fr-FR.ts +59 -0
- package/corpus/templates/forms/app/i18n/hi-IN.ts +59 -0
- package/corpus/templates/forms/app/i18n/index.ts +31 -0
- package/corpus/templates/forms/app/i18n/ja-JP.ts +59 -0
- package/corpus/templates/forms/app/i18n/ko-KR.ts +59 -0
- package/corpus/templates/forms/app/i18n/pt-BR.ts +59 -0
- package/corpus/templates/forms/app/i18n/zh-CN.ts +56 -0
- package/corpus/templates/forms/app/root.tsx +65 -16
- package/corpus/templates/forms/app/routes/_app.settings.tsx +85 -0
- package/corpus/templates/forms/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
- package/corpus/templates/forms/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/macros/app/components/layout/AppLayout.tsx +29 -17
- package/corpus/templates/macros/app/components/layout/Header.tsx +16 -10
- package/corpus/templates/macros/app/i18n/ar-SA.ts +54 -0
- package/corpus/templates/macros/app/i18n/de-DE.ts +55 -0
- package/corpus/templates/macros/app/i18n/en-US.ts +55 -0
- package/corpus/templates/macros/app/i18n/es-ES.ts +55 -0
- package/corpus/templates/macros/app/i18n/fr-FR.ts +55 -0
- package/corpus/templates/macros/app/i18n/hi-IN.ts +55 -0
- package/corpus/templates/macros/app/i18n/index.ts +31 -0
- package/corpus/templates/macros/app/i18n/ja-JP.ts +55 -0
- package/corpus/templates/macros/app/i18n/ko-KR.ts +55 -0
- package/corpus/templates/macros/app/i18n/pt-BR.ts +55 -0
- package/corpus/templates/macros/app/i18n/zh-CN.ts +53 -0
- package/corpus/templates/macros/app/root.tsx +65 -15
- package/corpus/templates/macros/app/routes/settings.tsx +85 -0
- package/corpus/templates/macros/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
- package/corpus/templates/macros/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +9 -4
- package/corpus/templates/mail/app/i18n/ar-SA.ts +33 -0
- package/corpus/templates/mail/app/i18n/de-DE.ts +33 -0
- package/corpus/templates/mail/app/i18n/en-US.ts +32 -0
- package/corpus/templates/mail/app/i18n/es-ES.ts +33 -0
- package/corpus/templates/mail/app/i18n/fr-FR.ts +33 -0
- package/corpus/templates/mail/app/i18n/hi-IN.ts +32 -0
- package/corpus/templates/mail/app/i18n/index.ts +31 -0
- package/corpus/templates/mail/app/i18n/ja-JP.ts +32 -0
- package/corpus/templates/mail/app/i18n/ko-KR.ts +33 -0
- package/corpus/templates/mail/app/i18n/pt-BR.ts +34 -0
- package/corpus/templates/mail/app/i18n/zh-CN.ts +32 -0
- package/corpus/templates/mail/app/pages/SettingsPage.tsx +67 -13
- package/corpus/templates/mail/app/root.tsx +20 -0
- package/corpus/templates/mail/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/mail/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
- package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/plan/.agents/skills/visual-plan/references/wireframe.md +22 -4
- package/corpus/templates/plan/.agents/skills/visual-recap/references/wireframe.md +22 -4
- package/corpus/templates/plan/app/components/layout/Header.tsx +19 -12
- package/corpus/templates/plan/app/components/layout/Layout.tsx +11 -7
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +41 -28
- package/corpus/templates/plan/app/i18n/ar-SA.ts +77 -0
- package/corpus/templates/plan/app/i18n/de-DE.ts +78 -0
- package/corpus/templates/plan/app/i18n/en-US.ts +78 -0
- package/corpus/templates/plan/app/i18n/es-ES.ts +78 -0
- package/corpus/templates/plan/app/i18n/fr-FR.ts +78 -0
- package/corpus/templates/plan/app/i18n/hi-IN.ts +78 -0
- package/corpus/templates/plan/app/i18n/index.ts +31 -0
- package/corpus/templates/plan/app/i18n/ja-JP.ts +79 -0
- package/corpus/templates/plan/app/i18n/ko-KR.ts +77 -0
- package/corpus/templates/plan/app/i18n/pt-BR.ts +78 -0
- package/corpus/templates/plan/app/i18n/zh-CN.ts +74 -0
- package/corpus/templates/plan/app/root.tsx +45 -8
- package/corpus/templates/plan/app/routes/settings.tsx +86 -0
- package/corpus/templates/plan/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
- package/corpus/templates/plan/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/slides/app/components/layout/Header.tsx +23 -11
- package/corpus/templates/slides/app/components/layout/Layout.tsx +7 -6
- package/corpus/templates/slides/app/components/layout/Sidebar.tsx +23 -11
- package/corpus/templates/slides/app/i18n/ar-SA.ts +54 -0
- package/corpus/templates/slides/app/i18n/de-DE.ts +56 -0
- package/corpus/templates/slides/app/i18n/en-US.ts +55 -0
- package/corpus/templates/slides/app/i18n/es-ES.ts +55 -0
- package/corpus/templates/slides/app/i18n/fr-FR.ts +55 -0
- package/corpus/templates/slides/app/i18n/hi-IN.ts +55 -0
- package/corpus/templates/slides/app/i18n/index.ts +31 -0
- package/corpus/templates/slides/app/i18n/ja-JP.ts +55 -0
- package/corpus/templates/slides/app/i18n/ko-KR.ts +55 -0
- package/corpus/templates/slides/app/i18n/pt-BR.ts +55 -0
- package/corpus/templates/slides/app/i18n/zh-CN.ts +53 -0
- package/corpus/templates/slides/app/root.tsx +50 -8
- package/corpus/templates/slides/app/routes/settings.tsx +85 -0
- package/corpus/templates/slides/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
- package/corpus/templates/slides/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/videos/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/videos/app/components/NewCompositionPopover.tsx +14 -9
- package/corpus/templates/videos/app/components/Sidebar.tsx +16 -9
- package/corpus/templates/videos/app/components/StudioHeader.tsx +12 -8
- package/corpus/templates/videos/app/components/layout/Header.tsx +21 -15
- package/corpus/templates/videos/app/components/layout/Layout.tsx +10 -7
- package/corpus/templates/videos/app/components/layout/NavSidebar.tsx +21 -6
- package/corpus/templates/videos/app/i18n/ar-SA.ts +73 -0
- package/corpus/templates/videos/app/i18n/de-DE.ts +75 -0
- package/corpus/templates/videos/app/i18n/en-US.ts +74 -0
- package/corpus/templates/videos/app/i18n/es-ES.ts +75 -0
- package/corpus/templates/videos/app/i18n/fr-FR.ts +75 -0
- package/corpus/templates/videos/app/i18n/hi-IN.ts +74 -0
- package/corpus/templates/videos/app/i18n/index.ts +31 -0
- package/corpus/templates/videos/app/i18n/ja-JP.ts +74 -0
- package/corpus/templates/videos/app/i18n/ko-KR.ts +74 -0
- package/corpus/templates/videos/app/i18n/pt-BR.ts +75 -0
- package/corpus/templates/videos/app/i18n/zh-CN.ts +72 -0
- package/corpus/templates/videos/app/pages/Index.tsx +11 -9
- package/corpus/templates/videos/app/root.tsx +45 -7
- package/corpus/templates/videos/app/routes/settings.tsx +85 -0
- package/corpus/templates/videos/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
- package/corpus/templates/videos/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/dist/agent/durable-background.d.ts +32 -28
- package/dist/agent/durable-background.d.ts.map +1 -1
- package/dist/agent/durable-background.js +59 -28
- package/dist/agent/durable-background.js.map +1 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +16 -12
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/cli/skills.d.ts +1 -1
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +22 -4
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/CommandMenu.d.ts +3 -0
- package/dist/client/CommandMenu.d.ts.map +1 -1
- package/dist/client/CommandMenu.js +9 -0
- package/dist/client/CommandMenu.js.map +1 -1
- package/dist/client/app-providers.d.ts +8 -1
- package/dist/client/app-providers.d.ts.map +1 -1
- package/dist/client/app-providers.js +7 -5
- package/dist/client/app-providers.js.map +1 -1
- package/dist/client/i18n.d.ts +54 -0
- package/dist/client/i18n.d.ts.map +1 -0
- package/dist/client/i18n.js +354 -0
- package/dist/client/i18n.js.map +1 -0
- package/dist/client/index.d.ts +2 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +2 -1
- package/dist/client/index.js.map +1 -1
- package/dist/deploy/build.d.ts +32 -36
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +47 -104
- package/dist/deploy/build.js.map +1 -1
- package/dist/deploy/workspace-deploy.js +62 -30
- package/dist/deploy/workspace-deploy.js.map +1 -1
- package/dist/index.browser.d.ts +1 -1
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.browser.js +1 -1
- package/dist/index.browser.js.map +1 -1
- package/dist/localization/actions/get-localization-preference.d.ts +4 -0
- package/dist/localization/actions/get-localization-preference.d.ts.map +1 -0
- package/dist/localization/actions/get-localization-preference.js +16 -0
- package/dist/localization/actions/get-localization-preference.js.map +1 -0
- package/dist/localization/actions/set-localization-preference.d.ts +6 -0
- package/dist/localization/actions/set-localization-preference.d.ts.map +1 -0
- package/dist/localization/actions/set-localization-preference.js +24 -0
- package/dist/localization/actions/set-localization-preference.js.map +1 -0
- package/dist/localization/index.d.ts +3 -0
- package/dist/localization/index.d.ts.map +1 -0
- package/dist/localization/index.js +3 -0
- package/dist/localization/index.js.map +1 -0
- package/dist/localization/server.d.ts +25 -0
- package/dist/localization/server.d.ts.map +1 -0
- package/dist/localization/server.js +69 -0
- package/dist/localization/server.js.map +1 -0
- package/dist/localization/shared.d.ts +25 -0
- package/dist/localization/shared.d.ts.map +1 -0
- package/dist/localization/shared.js +134 -0
- package/dist/localization/shared.js.map +1 -0
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +8 -0
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/self-dispatch.d.ts +0 -10
- package/dist/server/self-dispatch.d.ts.map +1 -1
- package/dist/server/self-dispatch.js +27 -2
- package/dist/server/self-dispatch.js.map +1 -1
- package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/dist/templates/default/.agents/skills/internationalization/SKILL.md +77 -0
- package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/dist/templates/default/AGENTS.md +16 -15
- package/dist/templates/default/app/i18n/en-US.ts +29 -0
- package/dist/templates/default/app/i18n/index.ts +13 -0
- package/dist/templates/default/app/root.tsx +20 -1
- package/dist/templates/default/app/routes/_index.tsx +24 -9
- package/dist/templates/default/app/routes/settings.tsx +67 -0
- package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/dist/templates/workspace-core/.agents/skills/internationalization/SKILL.md +77 -0
- package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/dist/vite/action-types-plugin.d.ts.map +1 -1
- package/dist/vite/action-types-plugin.js +8 -0
- package/dist/vite/action-types-plugin.js.map +1 -1
- package/docs/AGENTS.md +1 -0
- package/docs/content/client.md +15 -0
- package/docs/content/internationalization.md +145 -0
- package/docs/content/locales/ar-SA/internationalization.md +102 -0
- package/docs/content/locales/de-DE/internationalization.md +102 -0
- package/docs/content/locales/es-ES/internationalization.md +102 -0
- package/docs/content/locales/fr-FR/internationalization.md +102 -0
- package/docs/content/locales/hi-IN/internationalization.md +102 -0
- package/docs/content/locales/ja-JP/internationalization.md +114 -0
- package/docs/content/locales/ko-KR/internationalization.md +102 -0
- package/docs/content/locales/pt-BR/internationalization.md +102 -0
- package/docs/content/locales/zh-CN/internationalization.md +102 -0
- package/docs/content/skills-guide.md +19 -18
- package/package.json +7 -1
- package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/src/templates/default/.agents/skills/internationalization/SKILL.md +77 -0
- package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/src/templates/default/AGENTS.md +16 -15
- package/src/templates/default/app/i18n/en-US.ts +29 -0
- package/src/templates/default/app/i18n/index.ts +13 -0
- package/src/templates/default/app/root.tsx +20 -1
- package/src/templates/default/app/routes/_index.tsx +24 -9
- package/src/templates/default/app/routes/settings.tsx +67 -0
- package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/src/templates/workspace-core/.agents/skills/internationalization/SKILL.md +77 -0
- package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +6 -0
|
@@ -16,8 +16,10 @@ import {
|
|
|
16
16
|
CommandMenu,
|
|
17
17
|
appPath,
|
|
18
18
|
createAgentNativeQueryClient,
|
|
19
|
+
getLocaleInitScript,
|
|
19
20
|
getThemeInitScript,
|
|
20
21
|
useCommandMenuShortcut,
|
|
22
|
+
useT,
|
|
21
23
|
} from "@agent-native/core/client";
|
|
22
24
|
import { configureTracking } from "@agent-native/core/client";
|
|
23
25
|
import { Layout as AppLayout } from "@/components/layout/Layout";
|
|
@@ -27,6 +29,7 @@ import { TAB_ID } from "@/lib/tab-id";
|
|
|
27
29
|
import changelog from "../CHANGELOG.md?raw";
|
|
28
30
|
import type { LinksFunction } from "react-router";
|
|
29
31
|
import stylesheet from "./global.css?url";
|
|
32
|
+
import { i18nCatalog } from "./i18n";
|
|
30
33
|
|
|
31
34
|
configureTracking({
|
|
32
35
|
getDefaultProps: (_name, properties) => ({
|
|
@@ -52,6 +55,7 @@ function getHydrationStableThemeInitScript() {
|
|
|
52
55
|
}
|
|
53
56
|
|
|
54
57
|
const THEME_INIT_SCRIPT = getHydrationStableThemeInitScript();
|
|
58
|
+
const LOCALE_INIT_SCRIPT = getLocaleInitScript();
|
|
55
59
|
|
|
56
60
|
export function Layout({ children }: { children: React.ReactNode }) {
|
|
57
61
|
return (
|
|
@@ -67,6 +71,11 @@ export function Layout({ children }: { children: React.ReactNode }) {
|
|
|
67
71
|
suppressHydrationWarning
|
|
68
72
|
dangerouslySetInnerHTML={{ __html: THEME_INIT_SCRIPT }}
|
|
69
73
|
/>
|
|
74
|
+
<script
|
|
75
|
+
data-agent-native-locale-init
|
|
76
|
+
suppressHydrationWarning
|
|
77
|
+
dangerouslySetInnerHTML={{ __html: LOCALE_INIT_SCRIPT }}
|
|
78
|
+
/>
|
|
70
79
|
<link rel="manifest" href={appPath("/manifest.json")} />
|
|
71
80
|
<meta name="theme-color" content="#18181b" />
|
|
72
81
|
<meta name="mobile-web-app-capable" content="yes" />
|
|
@@ -120,6 +129,7 @@ function DbSyncSetup() {
|
|
|
120
129
|
|
|
121
130
|
function ThemeToggleItem() {
|
|
122
131
|
const { resolvedTheme, setTheme } = useTheme();
|
|
132
|
+
const t = useT();
|
|
123
133
|
const isDark = resolvedTheme === "dark";
|
|
124
134
|
return (
|
|
125
135
|
<CommandMenu.Item
|
|
@@ -127,7 +137,7 @@ function ThemeToggleItem() {
|
|
|
127
137
|
keywords={["theme", "dark", "light", "mode"]}
|
|
128
138
|
>
|
|
129
139
|
{isDark ? <IconSun size={16} /> : <IconMoon size={16} />}
|
|
130
|
-
|
|
140
|
+
{t("root.toggleTheme")}
|
|
131
141
|
</CommandMenu.Item>
|
|
132
142
|
);
|
|
133
143
|
}
|
|
@@ -135,6 +145,7 @@ function ThemeToggleItem() {
|
|
|
135
145
|
function AppContent() {
|
|
136
146
|
const [cmdkOpen, setCmdkOpen] = useState(false);
|
|
137
147
|
const navigate = useNavigate();
|
|
148
|
+
const t = useT();
|
|
138
149
|
useCommandMenuShortcut(useCallback(() => setCmdkOpen(true), []));
|
|
139
150
|
return (
|
|
140
151
|
<>
|
|
@@ -144,33 +155,33 @@ function AppContent() {
|
|
|
144
155
|
changelog={changelog}
|
|
145
156
|
changelogKey="brain"
|
|
146
157
|
>
|
|
147
|
-
<CommandMenu.Group heading="
|
|
158
|
+
<CommandMenu.Group heading={t("root.commandNavigate")}>
|
|
148
159
|
<CommandMenu.Item onSelect={() => navigate("/")}>
|
|
149
|
-
|
|
160
|
+
{t("navigation.askBrain")}
|
|
150
161
|
</CommandMenu.Item>
|
|
151
162
|
<CommandMenu.Item onSelect={() => navigate("/search")}>
|
|
152
|
-
|
|
163
|
+
{t("navigation.search")}
|
|
153
164
|
</CommandMenu.Item>
|
|
154
165
|
<CommandMenu.Item onSelect={() => navigate("/knowledge")}>
|
|
155
|
-
|
|
166
|
+
{t("navigation.knowledge")}
|
|
156
167
|
</CommandMenu.Item>
|
|
157
168
|
<CommandMenu.Item onSelect={() => navigate("/review")}>
|
|
158
|
-
|
|
169
|
+
{t("navigation.reviewQueue")}
|
|
159
170
|
</CommandMenu.Item>
|
|
160
171
|
<CommandMenu.Item onSelect={() => navigate("/sources")}>
|
|
161
|
-
|
|
172
|
+
{t("navigation.sources")}
|
|
162
173
|
</CommandMenu.Item>
|
|
163
174
|
<CommandMenu.Item onSelect={() => navigate("/ops")}>
|
|
164
|
-
|
|
175
|
+
{t("navigation.ops")}
|
|
165
176
|
</CommandMenu.Item>
|
|
166
177
|
<CommandMenu.Item onSelect={() => navigate("/extensions")}>
|
|
167
|
-
|
|
178
|
+
{t("navigation.extensions")}
|
|
168
179
|
</CommandMenu.Item>
|
|
169
180
|
<CommandMenu.Item onSelect={() => navigate("/settings")}>
|
|
170
|
-
|
|
181
|
+
{t("navigation.settings")}
|
|
171
182
|
</CommandMenu.Item>
|
|
172
183
|
</CommandMenu.Group>
|
|
173
|
-
<CommandMenu.Group heading="
|
|
184
|
+
<CommandMenu.Group heading={t("root.commandAppearance")}>
|
|
174
185
|
<ThemeToggleItem />
|
|
175
186
|
</CommandMenu.Group>
|
|
176
187
|
</CommandMenu>
|
|
@@ -201,7 +212,11 @@ export default function Root() {
|
|
|
201
212
|
);
|
|
202
213
|
|
|
203
214
|
return (
|
|
204
|
-
<AppProviders
|
|
215
|
+
<AppProviders
|
|
216
|
+
queryClient={queryClient}
|
|
217
|
+
tooltipDelayDuration={250}
|
|
218
|
+
i18n={{ catalog: i18nCatalog }}
|
|
219
|
+
>
|
|
205
220
|
<DbSyncSetup />
|
|
206
221
|
<AppContent />
|
|
207
222
|
</AppProviders>
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { useEffect, useMemo, useState } from "react";
|
|
2
2
|
import {
|
|
3
3
|
ChangelogSettingsCard,
|
|
4
|
+
LanguagePicker,
|
|
5
|
+
openAgentSettings,
|
|
4
6
|
useActionMutation,
|
|
5
7
|
useActionQuery,
|
|
8
|
+
useT,
|
|
6
9
|
} from "@agent-native/core/client";
|
|
7
10
|
import changelog from "../../CHANGELOG.md?raw";
|
|
8
11
|
import {
|
|
@@ -89,6 +92,7 @@ type ToneValue = (typeof toneOptions)[number]["value"];
|
|
|
89
92
|
type SourcePolicyValue = (typeof sourcePolicyOptions)[number]["value"];
|
|
90
93
|
|
|
91
94
|
export default function SettingsRoute() {
|
|
95
|
+
const t = useT();
|
|
92
96
|
const settingsQuery = useActionQuery<SettingsResponse>(
|
|
93
97
|
"get-brain-settings" as any,
|
|
94
98
|
{} as any,
|
|
@@ -129,9 +133,9 @@ export default function SettingsRoute() {
|
|
|
129
133
|
return (
|
|
130
134
|
<div className="min-h-full bg-background">
|
|
131
135
|
<PageHeader
|
|
132
|
-
eyebrow="
|
|
133
|
-
title="
|
|
134
|
-
description="
|
|
136
|
+
eyebrow={t("settings.eyebrow")}
|
|
137
|
+
title={t("settings.title")}
|
|
138
|
+
description={t("settings.description")}
|
|
135
139
|
actions={
|
|
136
140
|
<Button
|
|
137
141
|
size="sm"
|
|
@@ -141,10 +145,10 @@ export default function SettingsRoute() {
|
|
|
141
145
|
>
|
|
142
146
|
<IconDeviceFloppy className="size-4" />
|
|
143
147
|
{saveSettings.isPending
|
|
144
|
-
? "
|
|
148
|
+
? t("common.saving")
|
|
145
149
|
: isDirty
|
|
146
|
-
? "
|
|
147
|
-
: "
|
|
150
|
+
? t("common.saveChanges")
|
|
151
|
+
: t("common.saved")}
|
|
148
152
|
</Button>
|
|
149
153
|
}
|
|
150
154
|
/>
|
|
@@ -391,14 +395,47 @@ export default function SettingsRoute() {
|
|
|
391
395
|
</main>
|
|
392
396
|
|
|
393
397
|
<aside className="grid content-start gap-5">
|
|
398
|
+
<Card>
|
|
399
|
+
<CardHeader>
|
|
400
|
+
<CardTitle className="flex items-center gap-2 text-base">
|
|
401
|
+
<IconAdjustments className="size-4 text-primary" />
|
|
402
|
+
{t("settings.languageTitle")}
|
|
403
|
+
</CardTitle>
|
|
404
|
+
<CardDescription>
|
|
405
|
+
{t("settings.languageDescription")}
|
|
406
|
+
</CardDescription>
|
|
407
|
+
</CardHeader>
|
|
408
|
+
<CardContent className="space-y-1.5">
|
|
409
|
+
<Label>{t("settings.languageLabel")}</Label>
|
|
410
|
+
<LanguagePicker label={t("settings.languageLabel")} />
|
|
411
|
+
</CardContent>
|
|
412
|
+
</Card>
|
|
413
|
+
|
|
414
|
+
<Card>
|
|
415
|
+
<CardHeader>
|
|
416
|
+
<CardTitle className="flex items-center gap-2 text-base">
|
|
417
|
+
<IconAdjustments className="size-4 text-primary" />
|
|
418
|
+
{t("settings.agentTitle")}
|
|
419
|
+
</CardTitle>
|
|
420
|
+
<CardDescription>
|
|
421
|
+
{t("settings.agentDescription")}
|
|
422
|
+
</CardDescription>
|
|
423
|
+
</CardHeader>
|
|
424
|
+
<CardContent>
|
|
425
|
+
<Button variant="outline" onClick={() => openAgentSettings()}>
|
|
426
|
+
{t("settings.openAgentSettings")}
|
|
427
|
+
</Button>
|
|
428
|
+
</CardContent>
|
|
429
|
+
</Card>
|
|
430
|
+
|
|
394
431
|
<Card>
|
|
395
432
|
<CardHeader>
|
|
396
433
|
<CardTitle className="flex items-center gap-2 text-base">
|
|
397
434
|
<IconFileText className="size-4 text-primary" />
|
|
398
|
-
|
|
435
|
+
{t("settings.currentPolicy")}
|
|
399
436
|
</CardTitle>
|
|
400
437
|
<CardDescription>
|
|
401
|
-
|
|
438
|
+
{t("settings.currentPolicyDescription")}
|
|
402
439
|
</CardDescription>
|
|
403
440
|
</CardHeader>
|
|
404
441
|
<CardContent className="grid gap-3 text-sm">
|
|
@@ -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
|
|
@@ -12,6 +12,7 @@ import { Button } from "@/components/ui/button";
|
|
|
12
12
|
import {
|
|
13
13
|
AgentSidebar,
|
|
14
14
|
AgentToggleButton,
|
|
15
|
+
LanguagePicker,
|
|
15
16
|
NotificationsBell,
|
|
16
17
|
useAppearanceSync,
|
|
17
18
|
} from "@agent-native/core/client";
|
|
@@ -287,6 +288,7 @@ export function AppLayout({ children }: AppLayoutProps) {
|
|
|
287
288
|
</div>
|
|
288
289
|
<div className="flex shrink-0 items-center gap-2">
|
|
289
290
|
{headerControls?.right}
|
|
291
|
+
<LanguagePicker variant="icon" />
|
|
290
292
|
{!isMobile && (
|
|
291
293
|
<NotificationsBell emptyDescription="Calendar can pop browser alerts while this app is open. Clips desktop handles fuller meeting prompts with one-click notes." />
|
|
292
294
|
)}
|
|
@@ -52,6 +52,7 @@ import {
|
|
|
52
52
|
appPath,
|
|
53
53
|
DevDatabaseLink,
|
|
54
54
|
FeedbackButton,
|
|
55
|
+
useT,
|
|
55
56
|
} from "@agent-native/core/client";
|
|
56
57
|
import { EVENT_CATEGORY_COLORS } from "@/lib/event-colors";
|
|
57
58
|
import {
|
|
@@ -85,10 +86,14 @@ import { OrgSwitcher } from "@agent-native/core/client/org";
|
|
|
85
86
|
import { ExtensionsSidebarSection } from "@agent-native/core/client/extensions";
|
|
86
87
|
|
|
87
88
|
const navItems = [
|
|
88
|
-
{ path: "/",
|
|
89
|
-
{
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
{ path: "/", labelKey: "navigation.calendar", icon: IconCalendar },
|
|
90
|
+
{
|
|
91
|
+
path: "/booking-links",
|
|
92
|
+
labelKey: "navigation.bookingLinks",
|
|
93
|
+
icon: IconLink,
|
|
94
|
+
},
|
|
95
|
+
{ path: "/team", labelKey: "navigation.team", icon: IconUsers },
|
|
96
|
+
{ path: "/settings", labelKey: "navigation.settings", icon: IconSettings },
|
|
92
97
|
];
|
|
93
98
|
|
|
94
99
|
interface SidebarProps {
|
|
@@ -304,6 +309,7 @@ function MiniCalendar({
|
|
|
304
309
|
}
|
|
305
310
|
|
|
306
311
|
function GoogleConnectSidebarButton() {
|
|
312
|
+
const t = useT();
|
|
307
313
|
const [wantAuthUrl, setWantAuthUrl] = useState(false);
|
|
308
314
|
const authUrl = useGoogleAuthUrl(wantAuthUrl);
|
|
309
315
|
const {
|
|
@@ -332,10 +338,10 @@ function GoogleConnectSidebarButton() {
|
|
|
332
338
|
<div className="border-t border-border p-3">
|
|
333
339
|
<div className="rounded-lg bg-primary/10 p-3">
|
|
334
340
|
<p className="mb-1 text-xs font-semibold text-foreground">
|
|
335
|
-
|
|
341
|
+
{t("settings.connectGoogleCalendar")}
|
|
336
342
|
</p>
|
|
337
343
|
<p className="mb-2.5 text-[11px] leading-relaxed text-muted-foreground">
|
|
338
|
-
|
|
344
|
+
{t("settings.connectGoogleDescription")}
|
|
339
345
|
</p>
|
|
340
346
|
<Button
|
|
341
347
|
size="sm"
|
|
@@ -348,7 +354,7 @@ function GoogleConnectSidebarButton() {
|
|
|
348
354
|
}
|
|
349
355
|
>
|
|
350
356
|
<IconExternalLink className="h-3 w-3" />
|
|
351
|
-
{authUrl.isLoading ? "
|
|
357
|
+
{authUrl.isLoading ? t("common.connecting") : t("common.connect")}
|
|
352
358
|
</Button>
|
|
353
359
|
</div>
|
|
354
360
|
</div>
|
|
@@ -590,6 +596,7 @@ function GoogleAccountsSection({
|
|
|
590
596
|
export function Sidebar({ open, onClose }: SidebarProps) {
|
|
591
597
|
const location = useLocation();
|
|
592
598
|
const navigate = useNavigate();
|
|
599
|
+
const t = useT();
|
|
593
600
|
const {
|
|
594
601
|
selectedDate,
|
|
595
602
|
setSelectedDate,
|
|
@@ -669,7 +676,7 @@ export function Sidebar({ open, onClose }: SidebarProps) {
|
|
|
669
676
|
className="hidden h-4 w-auto shrink-0 dark:block"
|
|
670
677
|
/>
|
|
671
678
|
<span className="text-base font-semibold tracking-tight">
|
|
672
|
-
|
|
679
|
+
{t("navigation.brand")}
|
|
673
680
|
</span>
|
|
674
681
|
</Link>
|
|
675
682
|
</div>
|
|
@@ -702,7 +709,7 @@ export function Sidebar({ open, onClose }: SidebarProps) {
|
|
|
702
709
|
)}
|
|
703
710
|
>
|
|
704
711
|
<item.icon className="h-4 w-4" />
|
|
705
|
-
{item.
|
|
712
|
+
{t(item.labelKey)}
|
|
706
713
|
</Link>
|
|
707
714
|
);
|
|
708
715
|
})}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
const messages = {
|
|
2
|
+
common: {
|
|
3
|
+
connect: "اتصال",
|
|
4
|
+
connected: "متصل",
|
|
5
|
+
connecting: "جار الاتصال",
|
|
6
|
+
disconnect: "قطع الاتصال",
|
|
7
|
+
notConnected: "غير متصل",
|
|
8
|
+
saving: "جار الحفظ...",
|
|
9
|
+
},
|
|
10
|
+
navigation: {
|
|
11
|
+
bookingLinks: "روابط الحجز",
|
|
12
|
+
brand: "التقويم",
|
|
13
|
+
calendar: "التقويم",
|
|
14
|
+
settings: "الإعدادات",
|
|
15
|
+
team: "الفريق",
|
|
16
|
+
},
|
|
17
|
+
root: {
|
|
18
|
+
commandActions: "الإجراءات",
|
|
19
|
+
commandAppearance: "المظهر",
|
|
20
|
+
commandSearch: "بحث",
|
|
21
|
+
toggleTheme: "تبديل السمة",
|
|
22
|
+
},
|
|
23
|
+
settings: {
|
|
24
|
+
openAgentSettings: "فتح إعدادات الوكيل",
|
|
25
|
+
agentDescription:
|
|
26
|
+
"افتح إعدادات الوكيل في الشريط الجانبي لإدارة النموذج ومفاتيح API والأتمتة والصوت وعناصر التحكم الأخرى.",
|
|
27
|
+
agentTitle: "إعدادات الوكيل",
|
|
28
|
+
appearance: "المظهر",
|
|
29
|
+
appearanceDescription: "Customize how the app looks.",
|
|
30
|
+
connectGoogleCalendar: "Connect Google Calendar",
|
|
31
|
+
connectGoogleDescription:
|
|
32
|
+
"Connect Google Calendar to sync events and availability.",
|
|
33
|
+
description: "إدارة التفضيلات والخدمات المتصلة.",
|
|
34
|
+
disconnectFailed: "Disconnect failed",
|
|
35
|
+
general: "عام",
|
|
36
|
+
generalDescription: "General workspace preferences.",
|
|
37
|
+
googleCalendar: "Google Calendar",
|
|
38
|
+
googleDescription:
|
|
39
|
+
"Connect Google Calendar to sync events and availability.",
|
|
40
|
+
googleDisconnected: "Google Calendar disconnected",
|
|
41
|
+
googleFailed: "Google Calendar failed",
|
|
42
|
+
languageDescription: "اختر لغة الواجهة لمساحة العمل هذه.",
|
|
43
|
+
languageLabel: "لغة الواجهة",
|
|
44
|
+
languageTitle: "اللغة",
|
|
45
|
+
saveFailed: "Failed to save settings",
|
|
46
|
+
saveSettings: "Save settings",
|
|
47
|
+
saved: "Settings saved",
|
|
48
|
+
timezone: "Timezone",
|
|
49
|
+
title: "الإعدادات",
|
|
50
|
+
zoomConnectFailed: "Failed to connect Zoom",
|
|
51
|
+
zoomDisconnectFailed: "Failed to disconnect Zoom",
|
|
52
|
+
zoomDisconnected: "Zoom disconnected",
|
|
53
|
+
zoomOpened: "Zoom connection opened",
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export default messages;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
const messages = {
|
|
2
|
+
common: {
|
|
3
|
+
connect: "Verbinden",
|
|
4
|
+
connected: "Verbunden",
|
|
5
|
+
connecting: "Verbindung wird hergestellt",
|
|
6
|
+
disconnect: "Trennen",
|
|
7
|
+
notConnected: "Nicht verbunden",
|
|
8
|
+
saving: "Speichern...",
|
|
9
|
+
},
|
|
10
|
+
navigation: {
|
|
11
|
+
bookingLinks: "Buchungslinks",
|
|
12
|
+
brand: "Kalender",
|
|
13
|
+
calendar: "Kalender",
|
|
14
|
+
settings: "Einstellungen",
|
|
15
|
+
team: "Team",
|
|
16
|
+
},
|
|
17
|
+
root: {
|
|
18
|
+
commandActions: "Aktionen",
|
|
19
|
+
commandAppearance: "Darstellung",
|
|
20
|
+
commandSearch: "Suchen",
|
|
21
|
+
toggleTheme: "Design wechseln",
|
|
22
|
+
},
|
|
23
|
+
settings: {
|
|
24
|
+
openAgentSettings: "Agent-Einstellungen öffnen",
|
|
25
|
+
agentDescription:
|
|
26
|
+
"Öffne die Agent-Einstellungen in der Seitenleiste für Modell, API-Schlüssel, Automatisierungen, Sprache und weitere Steuerungen.",
|
|
27
|
+
agentTitle: "Agent-Einstellungen",
|
|
28
|
+
appearance: "Darstellung",
|
|
29
|
+
appearanceDescription: "Customize how the app looks.",
|
|
30
|
+
connectGoogleCalendar: "Connect Google Calendar",
|
|
31
|
+
connectGoogleDescription:
|
|
32
|
+
"Connect Google Calendar to sync events and availability.",
|
|
33
|
+
description: "Verwalte Einstellungen und verbundene Dienste.",
|
|
34
|
+
disconnectFailed: "Disconnect failed",
|
|
35
|
+
general: "Allgemein",
|
|
36
|
+
generalDescription: "General workspace preferences.",
|
|
37
|
+
googleCalendar: "Google Calendar",
|
|
38
|
+
googleDescription:
|
|
39
|
+
"Connect Google Calendar to sync events and availability.",
|
|
40
|
+
googleDisconnected: "Google Calendar disconnected",
|
|
41
|
+
googleFailed: "Google Calendar failed",
|
|
42
|
+
languageDescription:
|
|
43
|
+
"Wähle die Oberflächensprache für diesen Arbeitsbereich.",
|
|
44
|
+
languageLabel: "Oberflächensprache",
|
|
45
|
+
languageTitle: "Sprache",
|
|
46
|
+
saveFailed: "Failed to save settings",
|
|
47
|
+
saveSettings: "Save settings",
|
|
48
|
+
saved: "Settings saved",
|
|
49
|
+
timezone: "Timezone",
|
|
50
|
+
title: "Einstellungen",
|
|
51
|
+
zoomConnectFailed: "Failed to connect Zoom",
|
|
52
|
+
zoomDisconnectFailed: "Failed to disconnect Zoom",
|
|
53
|
+
zoomDisconnected: "Zoom disconnected",
|
|
54
|
+
zoomOpened: "Zoom connection opened",
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export default messages;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
const messages = {
|
|
2
|
+
common: {
|
|
3
|
+
connect: "Connect",
|
|
4
|
+
connected: "Connected",
|
|
5
|
+
connecting: "Connecting",
|
|
6
|
+
disconnect: "Disconnect",
|
|
7
|
+
notConnected: "Not connected",
|
|
8
|
+
saving: "Saving...",
|
|
9
|
+
},
|
|
10
|
+
navigation: {
|
|
11
|
+
bookingLinks: "Booking links",
|
|
12
|
+
brand: "Calendar",
|
|
13
|
+
calendar: "Calendar",
|
|
14
|
+
settings: "Settings",
|
|
15
|
+
team: "Team",
|
|
16
|
+
},
|
|
17
|
+
root: {
|
|
18
|
+
commandActions: "Actions",
|
|
19
|
+
commandAppearance: "Appearance",
|
|
20
|
+
commandSearch: "Search",
|
|
21
|
+
toggleTheme: "Toggle theme",
|
|
22
|
+
},
|
|
23
|
+
settings: {
|
|
24
|
+
openAgentSettings: "Open agent settings",
|
|
25
|
+
agentDescription:
|
|
26
|
+
"Open the agent sidebar settings for model, API keys, automations, voice, and other agent controls.",
|
|
27
|
+
agentTitle: "Agent settings",
|
|
28
|
+
appearance: "Appearance",
|
|
29
|
+
appearanceDescription: "Customize how the app looks.",
|
|
30
|
+
connectGoogleCalendar: "Connect Google Calendar",
|
|
31
|
+
connectGoogleDescription:
|
|
32
|
+
"Connect Google Calendar to sync events and availability.",
|
|
33
|
+
description: "Manage preferences and connected services.",
|
|
34
|
+
disconnectFailed: "Disconnect failed",
|
|
35
|
+
general: "General",
|
|
36
|
+
generalDescription: "General workspace preferences.",
|
|
37
|
+
googleCalendar: "Google Calendar",
|
|
38
|
+
googleDescription:
|
|
39
|
+
"Connect Google Calendar to sync events and availability.",
|
|
40
|
+
googleDisconnected: "Google Calendar disconnected",
|
|
41
|
+
googleFailed: "Google Calendar failed",
|
|
42
|
+
languageDescription: "Choose the interface language for this workspace.",
|
|
43
|
+
languageLabel: "Interface language",
|
|
44
|
+
languageTitle: "Language",
|
|
45
|
+
saveFailed: "Failed to save settings",
|
|
46
|
+
saveSettings: "Save settings",
|
|
47
|
+
saved: "Settings saved",
|
|
48
|
+
timezone: "Timezone",
|
|
49
|
+
title: "Settings",
|
|
50
|
+
zoomConnectFailed: "Failed to connect Zoom",
|
|
51
|
+
zoomDisconnectFailed: "Failed to disconnect Zoom",
|
|
52
|
+
zoomDisconnected: "Zoom disconnected",
|
|
53
|
+
zoomOpened: "Zoom connection opened",
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export default messages;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
const messages = {
|
|
2
|
+
common: {
|
|
3
|
+
connect: "Conectar",
|
|
4
|
+
connected: "Conectado",
|
|
5
|
+
connecting: "Conectando",
|
|
6
|
+
disconnect: "Desconectar",
|
|
7
|
+
notConnected: "No conectado",
|
|
8
|
+
saving: "Guardando...",
|
|
9
|
+
},
|
|
10
|
+
navigation: {
|
|
11
|
+
bookingLinks: "Enlaces de reserva",
|
|
12
|
+
brand: "Calendario",
|
|
13
|
+
calendar: "Calendario",
|
|
14
|
+
settings: "Ajustes",
|
|
15
|
+
team: "Equipo",
|
|
16
|
+
},
|
|
17
|
+
root: {
|
|
18
|
+
commandActions: "Acciones",
|
|
19
|
+
commandAppearance: "Apariencia",
|
|
20
|
+
commandSearch: "Buscar",
|
|
21
|
+
toggleTheme: "Cambiar tema",
|
|
22
|
+
},
|
|
23
|
+
settings: {
|
|
24
|
+
openAgentSettings: "Abrir ajustes del agente",
|
|
25
|
+
agentDescription:
|
|
26
|
+
"Abre los ajustes del agente en la barra lateral para modelos, claves API, automatizaciones, voz y otros controles.",
|
|
27
|
+
agentTitle: "Ajustes del agente",
|
|
28
|
+
appearance: "Apariencia",
|
|
29
|
+
appearanceDescription: "Customize how the app looks.",
|
|
30
|
+
connectGoogleCalendar: "Connect Google Calendar",
|
|
31
|
+
connectGoogleDescription:
|
|
32
|
+
"Connect Google Calendar to sync events and availability.",
|
|
33
|
+
description: "Gestiona preferencias y servicios conectados.",
|
|
34
|
+
disconnectFailed: "Disconnect failed",
|
|
35
|
+
general: "General",
|
|
36
|
+
generalDescription: "General workspace preferences.",
|
|
37
|
+
googleCalendar: "Google Calendar",
|
|
38
|
+
googleDescription:
|
|
39
|
+
"Connect Google Calendar to sync events and availability.",
|
|
40
|
+
googleDisconnected: "Google Calendar disconnected",
|
|
41
|
+
googleFailed: "Google Calendar failed",
|
|
42
|
+
languageDescription:
|
|
43
|
+
"Elige el idioma de la interfaz para este espacio de trabajo.",
|
|
44
|
+
languageLabel: "Idioma de la interfaz",
|
|
45
|
+
languageTitle: "Idioma",
|
|
46
|
+
saveFailed: "Failed to save settings",
|
|
47
|
+
saveSettings: "Save settings",
|
|
48
|
+
saved: "Settings saved",
|
|
49
|
+
timezone: "Timezone",
|
|
50
|
+
title: "Ajustes",
|
|
51
|
+
zoomConnectFailed: "Failed to connect Zoom",
|
|
52
|
+
zoomDisconnectFailed: "Failed to disconnect Zoom",
|
|
53
|
+
zoomDisconnected: "Zoom disconnected",
|
|
54
|
+
zoomOpened: "Zoom connection opened",
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export default messages;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
const messages = {
|
|
2
|
+
common: {
|
|
3
|
+
connect: "Connecter",
|
|
4
|
+
connected: "Connecté",
|
|
5
|
+
connecting: "Connexion",
|
|
6
|
+
disconnect: "Déconnecter",
|
|
7
|
+
notConnected: "Non connecté",
|
|
8
|
+
saving: "Enregistrement...",
|
|
9
|
+
},
|
|
10
|
+
navigation: {
|
|
11
|
+
bookingLinks: "Liens de réservation",
|
|
12
|
+
brand: "Calendrier",
|
|
13
|
+
calendar: "Calendrier",
|
|
14
|
+
settings: "Paramètres",
|
|
15
|
+
team: "Équipe",
|
|
16
|
+
},
|
|
17
|
+
root: {
|
|
18
|
+
commandActions: "Actions",
|
|
19
|
+
commandAppearance: "Apparence",
|
|
20
|
+
commandSearch: "Rechercher",
|
|
21
|
+
toggleTheme: "Changer de thème",
|
|
22
|
+
},
|
|
23
|
+
settings: {
|
|
24
|
+
openAgentSettings: "Ouvrir les paramètres de l’agent",
|
|
25
|
+
agentDescription:
|
|
26
|
+
"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.",
|
|
27
|
+
agentTitle: "Paramètres de l’agent",
|
|
28
|
+
appearance: "Apparence",
|
|
29
|
+
appearanceDescription: "Customize how the app looks.",
|
|
30
|
+
connectGoogleCalendar: "Connect Google Calendar",
|
|
31
|
+
connectGoogleDescription:
|
|
32
|
+
"Connect Google Calendar to sync events and availability.",
|
|
33
|
+
description: "Gérez les préférences et les services connectés.",
|
|
34
|
+
disconnectFailed: "Disconnect failed",
|
|
35
|
+
general: "Général",
|
|
36
|
+
generalDescription: "General workspace preferences.",
|
|
37
|
+
googleCalendar: "Google Calendar",
|
|
38
|
+
googleDescription:
|
|
39
|
+
"Connect Google Calendar to sync events and availability.",
|
|
40
|
+
googleDisconnected: "Google Calendar disconnected",
|
|
41
|
+
googleFailed: "Google Calendar failed",
|
|
42
|
+
languageDescription:
|
|
43
|
+
"Choisissez la langue de l’interface pour cet espace de travail.",
|
|
44
|
+
languageLabel: "Langue de l’interface",
|
|
45
|
+
languageTitle: "Langue",
|
|
46
|
+
saveFailed: "Failed to save settings",
|
|
47
|
+
saveSettings: "Save settings",
|
|
48
|
+
saved: "Settings saved",
|
|
49
|
+
timezone: "Timezone",
|
|
50
|
+
title: "Paramètres",
|
|
51
|
+
zoomConnectFailed: "Failed to connect Zoom",
|
|
52
|
+
zoomDisconnectFailed: "Failed to disconnect Zoom",
|
|
53
|
+
zoomDisconnected: "Zoom disconnected",
|
|
54
|
+
zoomOpened: "Zoom connection opened",
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export default messages;
|