@agent-native/core 0.75.5 → 0.76.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +48 -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 +38 -2
- package/corpus/core/src/agent/production-agent.ts +54 -0
- package/corpus/core/src/agent/run-manager.ts +27 -0
- package/corpus/core/src/agent/run-store.ts +185 -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/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/agent-chat-plugin.ts +71 -0
- package/corpus/core/src/server/auth.ts +13 -0
- package/corpus/core/src/server/index.ts +8 -0
- 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/CommandPalette.tsx +12 -12
- 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 +28 -26
- 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/pages/analyses/AnalysesList.tsx +2 -2
- 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/knowledge.tsx +6 -6
- package/corpus/templates/brain/app/routes/ops.tsx +4 -4
- package/corpus/templates/brain/app/routes/search.tsx +4 -4
- package/corpus/templates/brain/app/routes/settings.tsx +48 -11
- package/corpus/templates/brain/app/routes/sources.tsx +3 -3
- 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-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/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/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 +15 -0
- package/dist/agent/durable-background.d.ts.map +1 -1
- package/dist/agent/durable-background.js +28 -2
- 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 +34 -1
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-manager.d.ts +8 -0
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +18 -1
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/run-store.d.ts +99 -0
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +155 -4
- package/dist/agent/run-store.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/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/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +58 -1
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +12 -0
- package/dist/server/auth.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/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>
|
|
@@ -163,12 +163,12 @@ export default function KnowledgeRoute() {
|
|
|
163
163
|
<Card>
|
|
164
164
|
<CardContent className="flex flex-col gap-3 p-4 lg:flex-row lg:items-center">
|
|
165
165
|
<div className="relative min-w-0 flex-1">
|
|
166
|
-
<IconSearch className="pointer-events-none absolute
|
|
166
|
+
<IconSearch className="pointer-events-none absolute start-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground" />
|
|
167
167
|
<Input
|
|
168
168
|
value={query}
|
|
169
169
|
onChange={(event) => updateParam("q", event.target.value)}
|
|
170
170
|
placeholder="Search memories, topics, source names..."
|
|
171
|
-
className="
|
|
171
|
+
className="ps-9"
|
|
172
172
|
/>
|
|
173
173
|
</div>
|
|
174
174
|
<div className="flex flex-col gap-2 sm:flex-row">
|
|
@@ -217,8 +217,8 @@ export default function KnowledgeRoute() {
|
|
|
217
217
|
<TableHead>Source</TableHead>
|
|
218
218
|
<TableHead>Status</TableHead>
|
|
219
219
|
<TableHead>Company context</TableHead>
|
|
220
|
-
<TableHead className="text-
|
|
221
|
-
<TableHead className="text-
|
|
220
|
+
<TableHead className="text-end">Confidence</TableHead>
|
|
221
|
+
<TableHead className="text-end">Cites</TableHead>
|
|
222
222
|
</TableRow>
|
|
223
223
|
</TableHeader>
|
|
224
224
|
<TableBody>
|
|
@@ -262,12 +262,12 @@ export default function KnowledgeRoute() {
|
|
|
262
262
|
onPreview={() => void openCanonicalPreview(row)}
|
|
263
263
|
/>
|
|
264
264
|
</TableCell>
|
|
265
|
-
<TableCell className="text-
|
|
265
|
+
<TableCell className="text-end">
|
|
266
266
|
{typeof row.confidence === "number"
|
|
267
267
|
? formatPercent(row.confidence)
|
|
268
268
|
: "n/a"}
|
|
269
269
|
</TableCell>
|
|
270
|
-
<TableCell className="text-
|
|
270
|
+
<TableCell className="text-end">
|
|
271
271
|
{row.citations ?? 0}
|
|
272
272
|
</TableCell>
|
|
273
273
|
</TableRow>
|
|
@@ -416,11 +416,11 @@ export default function OpsRoute() {
|
|
|
416
416
|
<TableHead>Status</TableHead>
|
|
417
417
|
<TableHead>Capture</TableHead>
|
|
418
418
|
<TableHead>Source</TableHead>
|
|
419
|
-
<TableHead className="text-
|
|
419
|
+
<TableHead className="text-end">Attempts</TableHead>
|
|
420
420
|
<TableHead>Run after</TableHead>
|
|
421
421
|
<TableHead>Updated</TableHead>
|
|
422
422
|
<TableHead>Reason</TableHead>
|
|
423
|
-
<TableHead className="text-
|
|
423
|
+
<TableHead className="text-end">Action</TableHead>
|
|
424
424
|
</TableRow>
|
|
425
425
|
</TableHeader>
|
|
426
426
|
<TableBody>
|
|
@@ -474,7 +474,7 @@ export default function OpsRoute() {
|
|
|
474
474
|
</p>
|
|
475
475
|
</div>
|
|
476
476
|
</TableCell>
|
|
477
|
-
<TableCell className="text-
|
|
477
|
+
<TableCell className="text-end tabular-nums">
|
|
478
478
|
{item.attempts}
|
|
479
479
|
</TableCell>
|
|
480
480
|
<TableCell className="whitespace-nowrap text-sm text-muted-foreground">
|
|
@@ -491,7 +491,7 @@ export default function OpsRoute() {
|
|
|
491
491
|
"No issue recorded"}
|
|
492
492
|
</p>
|
|
493
493
|
</TableCell>
|
|
494
|
-
<TableCell className="text-
|
|
494
|
+
<TableCell className="text-end">
|
|
495
495
|
<Button
|
|
496
496
|
size="sm"
|
|
497
497
|
variant="outline"
|
|
@@ -144,12 +144,12 @@ export default function SearchRoute() {
|
|
|
144
144
|
<Card>
|
|
145
145
|
<CardContent className="grid gap-3 p-4">
|
|
146
146
|
<div className="relative">
|
|
147
|
-
<IconSearch className="pointer-events-none absolute
|
|
147
|
+
<IconSearch className="pointer-events-none absolute start-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground" />
|
|
148
148
|
<Input
|
|
149
149
|
value={query}
|
|
150
150
|
onChange={(event) => updateParam("q", event.target.value)}
|
|
151
151
|
placeholder="Search decisions, customer facts, source names, transcripts, or policy snippets..."
|
|
152
|
-
className="h-11
|
|
152
|
+
className="h-11 ps-9 text-base"
|
|
153
153
|
autoFocus
|
|
154
154
|
/>
|
|
155
155
|
</div>
|
|
@@ -420,10 +420,10 @@ function SearchResultDetails({
|
|
|
420
420
|
</Badge>
|
|
421
421
|
) : null}
|
|
422
422
|
</div>
|
|
423
|
-
<SheetTitle className="text-
|
|
423
|
+
<SheetTitle className="text-start text-xl leading-7">
|
|
424
424
|
{result.title}
|
|
425
425
|
</SheetTitle>
|
|
426
|
-
<SheetDescription className="text-
|
|
426
|
+
<SheetDescription className="text-start leading-6">
|
|
427
427
|
{body}
|
|
428
428
|
</SheetDescription>
|
|
429
429
|
</SheetHeader>
|
|
@@ -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">
|
|
@@ -571,9 +608,9 @@ function NumberField({
|
|
|
571
608
|
max={max}
|
|
572
609
|
value={value}
|
|
573
610
|
onChange={(event) => onChange(Number(event.target.value))}
|
|
574
|
-
className="rounded-
|
|
611
|
+
className="rounded-e-none"
|
|
575
612
|
/>
|
|
576
|
-
<div className="flex min-w-20 items-center justify-center rounded-
|
|
613
|
+
<div className="flex min-w-20 items-center justify-center rounded-e-md border border-s-0 border-input bg-muted px-3 text-sm text-muted-foreground">
|
|
577
614
|
{suffix}
|
|
578
615
|
</div>
|
|
579
616
|
</div>
|
|
@@ -616,7 +653,7 @@ function PolicyRow({ label, value }: { label: string; value: string }) {
|
|
|
616
653
|
return (
|
|
617
654
|
<div className="flex items-center justify-between gap-3">
|
|
618
655
|
<span className="min-w-0 text-muted-foreground">{label}</span>
|
|
619
|
-
<span className="max-w-40 truncate text-
|
|
656
|
+
<span className="max-w-40 truncate text-end font-medium capitalize">
|
|
620
657
|
{value.replace(/_/g, " ")}
|
|
621
658
|
</span>
|
|
622
659
|
</div>
|
|
@@ -1074,7 +1074,7 @@ function ProviderCatalog({
|
|
|
1074
1074
|
variant="outline"
|
|
1075
1075
|
className={`${grantStateClass(grantState)} w-fit max-w-full`}
|
|
1076
1076
|
>
|
|
1077
|
-
<GrantIcon className="
|
|
1077
|
+
<GrantIcon className="me-1 size-3" />
|
|
1078
1078
|
{grantStateLabel(grantState)}
|
|
1079
1079
|
</Badge>
|
|
1080
1080
|
<Badge
|
|
@@ -2037,7 +2037,7 @@ export default function SourcesRoute() {
|
|
|
2037
2037
|
{enqueueCapturesDistillation.isPending ? (
|
|
2038
2038
|
<IconLoader2 className="size-4 animate-spin" />
|
|
2039
2039
|
) : (
|
|
2040
|
-
<IconSend className="size-4" />
|
|
2040
|
+
<IconSend className="size-4 rtl:-scale-x-100" />
|
|
2041
2041
|
)}
|
|
2042
2042
|
Queue selected
|
|
2043
2043
|
</Button>
|
|
@@ -2205,7 +2205,7 @@ export default function SourcesRoute() {
|
|
|
2205
2205
|
{enqueueDistillation.isPending ? (
|
|
2206
2206
|
<IconLoader2 className="size-4 animate-spin" />
|
|
2207
2207
|
) : (
|
|
2208
|
-
<IconSend className="size-4" />
|
|
2208
|
+
<IconSend className="size-4 rtl:-scale-x-100" />
|
|
2209
2209
|
)}
|
|
2210
2210
|
{queueActionLabel(queue)}
|
|
2211
2211
|
</Button>
|
|
@@ -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;
|