@agent-native/core 0.79.16 → 0.79.18
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 +14 -0
- package/corpus/core/docs/content/file-uploads.md +11 -4
- package/corpus/core/docs/content/locales/ar-SA/multi-app-workspace.md +3 -3
- package/corpus/core/docs/content/locales/de-DE/multi-app-workspace.md +3 -3
- package/corpus/core/docs/content/locales/es-ES/multi-app-workspace.md +3 -3
- package/corpus/core/docs/content/locales/fr-FR/multi-app-workspace.md +3 -3
- package/corpus/core/docs/content/locales/hi-IN/multi-app-workspace.md +3 -3
- package/corpus/core/docs/content/locales/ja-JP/multi-app-workspace.md +3 -3
- package/corpus/core/docs/content/locales/ko-KR/multi-app-workspace.md +3 -3
- package/corpus/core/docs/content/locales/pt-BR/multi-app-workspace.md +3 -3
- package/corpus/core/docs/content/locales/zh-CN/multi-app-workspace.md +3 -3
- package/corpus/core/docs/content/locales/zh-TW/multi-app-workspace.md +3 -3
- package/corpus/core/docs/content/multi-app-workspace.md +3 -3
- package/corpus/core/docs/content/template-clips.md +14 -5
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/agent/engine/builder-engine.ts +8 -3
- package/corpus/core/src/cli/mcp.ts +11 -6
- package/corpus/core/src/client/AssistantChat.tsx +6 -2
- package/corpus/core/src/client/chat/markdown-renderer.tsx +1 -0
- package/corpus/core/src/client/index.ts +7 -1
- package/corpus/core/src/client/org/OrgSwitcher.tsx +5 -5
- package/corpus/core/src/client/org/TeamPage.tsx +11 -3
- package/corpus/core/src/client/settings/SettingsTabsPage.tsx +216 -0
- package/corpus/core/src/client/settings/index.ts +5 -0
- package/corpus/core/src/file-upload/index.ts +1 -0
- package/corpus/core/src/file-upload/registry.ts +22 -6
- package/corpus/core/src/file-upload/types.ts +6 -1
- package/corpus/core/src/integrations/adapters/email.ts +26 -18
- package/corpus/core/src/integrations/adapters/slack.ts +8 -7
- package/corpus/core/src/integrations/adapters/telegram.ts +9 -11
- package/corpus/core/src/integrations/adapters/whatsapp.ts +12 -9
- package/corpus/core/src/integrations/plugin.ts +79 -13
- package/corpus/core/src/onboarding/default-steps.ts +6 -3
- package/corpus/core/src/onboarding/types.ts +1 -1
- package/corpus/core/src/org/handlers.ts +1 -1
- package/corpus/core/src/server/agent-chat-plugin.ts +4 -7
- package/corpus/core/src/server/better-auth-instance.ts +19 -62
- package/corpus/core/src/server/core-routes-plugin.ts +93 -180
- package/corpus/core/src/server/create-server.ts +55 -116
- package/corpus/core/src/server/email-actions.ts +3 -6
- package/corpus/core/src/server/email.ts +52 -17
- package/corpus/core/src/server/index.ts +2 -1
- package/corpus/core/src/server/scoped-key-storage.ts +223 -0
- package/corpus/core/src/shared/agent-env.ts +3 -3
- package/corpus/core/src/sharing/actions/share-resource.ts +1 -1
- package/corpus/core/src/styles/agent-native.css +55 -3
- package/corpus/core/src/templates/workspace-root/AGENTS.md +3 -2
- package/corpus/core/src/templates/workspace-root/README.md +1 -1
- package/corpus/core/src/templates/workspace-root/scripts/repair-workspace-org.ts +29 -90
- package/corpus/core/src/terminal/pty-server.ts +3 -38
- package/corpus/core/src/triggers/dispatcher.ts +1 -2
- package/corpus/templates/.retired/issues/package.json +7 -0
- package/corpus/templates/.retired/meeting-notes/package.json +7 -0
- package/corpus/templates/.retired/recruiting/package.json +7 -0
- package/corpus/templates/.retired/scheduling/package.json +7 -0
- package/corpus/templates/.retired/voice/package.json +7 -0
- package/corpus/templates/analytics/app/components/layout/Header.tsx +0 -1
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +0 -17
- package/corpus/templates/analytics/app/i18n/zh-TW.ts +7 -1
- package/corpus/templates/analytics/app/i18n-data.ts +71 -2
- package/corpus/templates/analytics/app/pages/Settings.tsx +120 -73
- package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +0 -11
- package/corpus/templates/analytics/app/routes/catalog.tsx +33 -176
- package/corpus/templates/analytics/app/routes/team.tsx +3 -2
- package/corpus/templates/analytics/changelog/2026-06-26-dashboard-templates-are-tucked-into-settings-and-show-simple.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-26-the-sessions-page-shows-a-single-page-title-instead-of-repea.md +6 -0
- package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +37 -28
- package/corpus/templates/assets/app/routes/settings.tsx +65 -43
- package/corpus/templates/assets/app/routes/team.tsx +2 -10
- package/corpus/templates/brain/app/routes/settings.tsx +390 -358
- package/corpus/templates/brain/app/routes/team.tsx +2 -8
- package/corpus/templates/calendar/actions/db-connect.ts +5 -29
- package/corpus/templates/calendar/app/components/CloudUpgrade.tsx +8 -51
- package/corpus/templates/calendar/app/components/calendar/GoogleConnectBanner.tsx +2 -1
- package/corpus/templates/calendar/app/components/calendar/GoogleSetupWizard.tsx +4 -2
- package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +0 -2
- package/corpus/templates/calendar/app/pages/Settings.tsx +304 -271
- package/corpus/templates/calendar/app/routes/_app.team.tsx +2 -17
- package/corpus/templates/calendar/server/handlers/google-auth.ts +22 -9
- package/corpus/templates/calendar/server/lib/booking-emails.ts +1 -1
- package/corpus/templates/calendar/server/lib/event-guest-notifications.ts +1 -1
- package/corpus/templates/calendar/server/lib/google-calendar.ts +48 -28
- package/corpus/templates/chat/app/components/layout/Header.tsx +0 -1
- package/corpus/templates/chat/app/hooks/use-navigation-state.ts +4 -2
- package/corpus/templates/chat/app/routes/settings.tsx +54 -54
- package/corpus/templates/chat/app/routes/team.tsx +2 -10
- package/corpus/templates/clips/.agents/skills/ai-video-tools/SKILL.md +7 -2
- package/corpus/templates/clips/.agents/skills/recording/SKILL.md +1 -1
- package/corpus/templates/clips/.agents/skills/video-sharing/SKILL.md +7 -0
- package/corpus/templates/clips/AGENTS.md +8 -0
- package/corpus/templates/clips/actions/invite-member.ts +1 -1
- package/corpus/templates/clips/actions/request-transcript.ts +1 -1
- package/corpus/templates/clips/app/components/library/library-layout.tsx +3 -3
- package/corpus/templates/clips/app/components/player/transcript-panel.tsx +2 -0
- package/corpus/templates/clips/app/routes/_app.settings._index.tsx +629 -643
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +219 -155
- package/corpus/templates/clips/changelog/2026-06-26-long-desktop-recordings-are-checkpointed-so-macos-finalizati.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-26-non-mac-desktop-recordings-wait-for-upload-transcription.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-26-s3-compatible-storage-keys-now-save-securely-from-clips-sett.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-26-shared-clip-links-guide-agents-through-processing-transcripts.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-26-the-clip-details-sidebar-now-collapses-into-a-slide-out-pane.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-26-the-clips-library-now-matches-the-shared-recessed-shell-styl.md +6 -0
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +55 -3
- package/corpus/templates/clips/desktop/src/lib/transcription-capture.ts +217 -5
- package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +1 -0
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +176 -5
- package/corpus/templates/clips/server/lib/public-agent-context.ts +31 -0
- package/corpus/templates/clips/server/lib/s3-upload-provider.ts +60 -14
- package/corpus/templates/clips/server/lib/video-storage.ts +37 -9
- package/corpus/templates/clips/server/routes/api/agent-transcript.json.get.ts +5 -0
- package/corpus/templates/content/app/components/layout/Header.tsx +0 -1
- package/corpus/templates/content/app/components/sidebar/NotionButton.tsx +1 -0
- package/corpus/templates/content/app/routes/_app.settings.tsx +54 -55
- package/corpus/templates/content/app/routes/_app.team.tsx +2 -28
- package/corpus/templates/content/server/lib/notion.ts +43 -11
- package/corpus/templates/content/server/routes/api/notion/auth-url.get.ts +2 -2
- package/corpus/templates/content/server/routes/api/notion/status.get.ts +3 -3
- package/corpus/templates/design/app/routes/settings.tsx +60 -38
- package/corpus/templates/design/app/routes/team.tsx +2 -10
- package/corpus/templates/dispatch/app/hooks/use-navigation-state.ts +2 -2
- package/corpus/templates/dispatch/app/routes/settings.tsx +70 -55
- package/corpus/templates/dispatch/app/routes/team.tsx +5 -1
- package/corpus/templates/forms/actions/db-connect.ts +7 -36
- package/corpus/templates/forms/actions/navigate.ts +2 -2
- package/corpus/templates/forms/app/components/CloudUpgrade.tsx +8 -47
- package/corpus/templates/forms/app/components/layout/Header.tsx +0 -1
- package/corpus/templates/forms/app/components/layout/Layout.tsx +42 -25
- package/corpus/templates/forms/app/components/layout/Sidebar.tsx +35 -76
- package/corpus/templates/forms/app/global.css +9 -25
- package/corpus/templates/forms/app/hooks/use-navigation-state.ts +4 -4
- package/corpus/templates/forms/app/i18n/ar-SA.ts +1 -0
- package/corpus/templates/forms/app/i18n/de-DE.ts +1 -0
- package/corpus/templates/forms/app/i18n/en-US.ts +1 -0
- package/corpus/templates/forms/app/i18n/es-ES.ts +1 -0
- package/corpus/templates/forms/app/i18n/fr-FR.ts +1 -0
- package/corpus/templates/forms/app/i18n/hi-IN.ts +1 -0
- package/corpus/templates/forms/app/i18n/ja-JP.ts +1 -0
- package/corpus/templates/forms/app/i18n/ko-KR.ts +1 -0
- package/corpus/templates/forms/app/i18n/pt-BR.ts +1 -0
- package/corpus/templates/forms/app/i18n/zh-CN.ts +1 -0
- package/corpus/templates/forms/app/i18n/zh-TW.ts +1 -0
- package/corpus/templates/forms/app/lib/route-prewarm.ts +9 -8
- package/corpus/templates/forms/app/pages/AskPage.tsx +70 -0
- package/corpus/templates/forms/app/pages/FormsListPage.tsx +74 -81
- package/corpus/templates/forms/app/root.tsx +1 -1
- package/corpus/templates/forms/app/routes/_app.ask.tsx +14 -0
- package/corpus/templates/forms/app/routes/_app.settings.tsx +54 -54
- package/corpus/templates/forms/app/routes/_app.team.tsx +2 -9
- package/corpus/templates/forms/app/routes/_index.tsx +21 -130
- package/corpus/templates/forms/changelog/2026-06-26-ask-forms-opens-as-a-standard-app-tab-with-a-simpler-sidebar.md +6 -0
- package/corpus/templates/forms/changelog/2026-06-26-forms-are-shown-in-a-tighter-row-list-with-a-denser-sidebar.md +6 -0
- package/corpus/templates/forms/shared/navigation.ts +4 -2
- package/corpus/templates/macros/app/routes/settings.tsx +54 -54
- package/corpus/templates/macros/app/routes/team.tsx +2 -10
- package/corpus/templates/mail/actions/helpers.ts +2 -2
- package/corpus/templates/mail/app/components/GoogleConnectBanner.tsx +2 -1
- package/corpus/templates/mail/app/pages/SettingsPage.tsx +5 -5
- package/corpus/templates/mail/app/routes/team.tsx +3 -2
- package/corpus/templates/mail/server/handlers/emails.ts +3 -2
- package/corpus/templates/mail/server/handlers/google-auth.ts +19 -12
- package/corpus/templates/mail/server/lib/automation-engine.ts +3 -2
- package/corpus/templates/mail/server/lib/email-state.ts +2 -3
- package/corpus/templates/mail/server/lib/google-auth.ts +28 -11
- package/corpus/templates/mail/server/lib/jobs.ts +3 -2
- package/corpus/templates/mail/server/onboarding.ts +9 -6
- package/corpus/templates/mail/server/routes/api/attachments.get.ts +3 -3
- package/corpus/templates/plan/actions/request-plan-access.ts +1 -1
- package/corpus/templates/plan/app/components/layout/Header.tsx +0 -1
- package/corpus/templates/plan/app/hooks/use-navigation-state.ts +4 -2
- package/corpus/templates/plan/app/lib/route-prewarm.ts +0 -4
- package/corpus/templates/plan/app/routes/settings.tsx +75 -73
- package/corpus/templates/plan/app/routes/team.tsx +2 -8
- package/corpus/templates/plan/server/lib/comment-notifications.ts +1 -1
- package/corpus/templates/slides/actions/check-image-gen.ts +2 -1
- package/corpus/templates/slides/actions/db-connect.ts +7 -45
- package/corpus/templates/slides/actions/edit-image.ts +6 -3
- package/corpus/templates/slides/actions/generate-image-api.ts +1 -1
- package/corpus/templates/slides/actions/generate-image.ts +2 -2
- package/corpus/templates/slides/actions/generate-slides-ai.ts +5 -3
- package/corpus/templates/slides/actions/image-gen-status.ts +4 -3
- package/corpus/templates/slides/actions/image-search.ts +6 -3
- package/corpus/templates/slides/actions/search-images.ts +6 -3
- package/corpus/templates/slides/app/components/CloudUpgrade.tsx +8 -51
- package/corpus/templates/slides/app/components/layout/Header.tsx +0 -1
- package/corpus/templates/slides/app/components/layout/Sidebar.tsx +0 -2
- package/corpus/templates/slides/app/routes/settings.tsx +54 -54
- package/corpus/templates/slides/app/routes/team.tsx +2 -12
- package/corpus/templates/slides/server/handlers/google-docs-auth.ts +9 -9
- package/corpus/templates/slides/server/handlers/image-gen.ts +5 -1
- package/corpus/templates/slides/server/handlers/image-providers/gemini.ts +9 -1
- package/corpus/templates/slides/server/handlers/image-providers/index.ts +18 -8
- package/corpus/templates/slides/server/handlers/image-providers/openai.ts +10 -4
- package/corpus/templates/slides/server/handlers/image-providers/types.ts +1 -0
- package/corpus/templates/slides/server/lib/google-docs-oauth.ts +59 -34
- package/corpus/templates/slides/server/register-secrets.ts +60 -0
- package/corpus/templates/videos/actions/db-connect.ts +7 -45
- package/corpus/templates/videos/app/components/CloudUpgrade.tsx +8 -51
- package/corpus/templates/videos/app/components/Sidebar.tsx +1 -9
- package/corpus/templates/videos/app/components/layout/Header.tsx +0 -1
- package/corpus/templates/videos/app/components/layout/NavSidebar.tsx +0 -3
- package/corpus/templates/videos/app/routes/settings.tsx +54 -54
- package/corpus/templates/videos/app/routes/team.tsx +2 -8
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/engine/builder-engine.js +8 -3
- package/dist/agent/engine/builder-engine.js.map +1 -1
- package/dist/cli/mcp.d.ts.map +1 -1
- package/dist/cli/mcp.js +3 -4
- package/dist/cli/mcp.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +6 -2
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/chat/markdown-renderer.d.ts.map +1 -1
- package/dist/client/chat/markdown-renderer.js +1 -0
- package/dist/client/chat/markdown-renderer.js.map +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/org/OrgSwitcher.d.ts +3 -3
- package/dist/client/org/OrgSwitcher.js +2 -2
- package/dist/client/org/OrgSwitcher.js.map +1 -1
- package/dist/client/org/TeamPage.d.ts +6 -1
- package/dist/client/org/TeamPage.d.ts.map +1 -1
- package/dist/client/org/TeamPage.js +2 -2
- package/dist/client/org/TeamPage.js.map +1 -1
- package/dist/client/settings/SettingsTabsPage.d.ts +27 -0
- package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -0
- package/dist/client/settings/SettingsTabsPage.js +108 -0
- package/dist/client/settings/SettingsTabsPage.js.map +1 -0
- package/dist/client/settings/index.d.ts +1 -0
- package/dist/client/settings/index.d.ts.map +1 -1
- package/dist/client/settings/index.js +1 -0
- package/dist/client/settings/index.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/file-upload/index.d.ts +1 -1
- package/dist/file-upload/index.d.ts.map +1 -1
- package/dist/file-upload/index.js +1 -1
- package/dist/file-upload/index.js.map +1 -1
- package/dist/file-upload/registry.d.ts +1 -0
- package/dist/file-upload/registry.d.ts.map +1 -1
- package/dist/file-upload/registry.js +24 -6
- package/dist/file-upload/registry.js.map +1 -1
- package/dist/file-upload/types.d.ts +6 -1
- package/dist/file-upload/types.d.ts.map +1 -1
- package/dist/file-upload/types.js.map +1 -1
- package/dist/integrations/adapters/email.d.ts.map +1 -1
- package/dist/integrations/adapters/email.js +18 -18
- package/dist/integrations/adapters/email.js.map +1 -1
- package/dist/integrations/adapters/slack.d.ts.map +1 -1
- package/dist/integrations/adapters/slack.js +8 -7
- package/dist/integrations/adapters/slack.js.map +1 -1
- package/dist/integrations/adapters/telegram.d.ts.map +1 -1
- package/dist/integrations/adapters/telegram.js +9 -9
- package/dist/integrations/adapters/telegram.js.map +1 -1
- package/dist/integrations/adapters/whatsapp.d.ts.map +1 -1
- package/dist/integrations/adapters/whatsapp.js +10 -9
- package/dist/integrations/adapters/whatsapp.js.map +1 -1
- package/dist/integrations/plugin.d.ts.map +1 -1
- package/dist/integrations/plugin.js +47 -13
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/notifications/routes.d.ts +1 -1
- package/dist/onboarding/default-steps.d.ts.map +1 -1
- package/dist/onboarding/default-steps.js +6 -5
- package/dist/onboarding/default-steps.js.map +1 -1
- package/dist/onboarding/types.d.ts +1 -1
- package/dist/onboarding/types.d.ts.map +1 -1
- package/dist/onboarding/types.js.map +1 -1
- package/dist/org/handlers.js +1 -1
- package/dist/org/handlers.js.map +1 -1
- package/dist/progress/routes.d.ts +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +4 -6
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/better-auth-instance.d.ts.map +1 -1
- package/dist/server/better-auth-instance.js +17 -56
- package/dist/server/better-auth-instance.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts +1 -1
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +67 -153
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/create-server.d.ts +3 -9
- package/dist/server/create-server.d.ts.map +1 -1
- package/dist/server/create-server.js +37 -91
- package/dist/server/create-server.js.map +1 -1
- package/dist/server/email-actions.d.ts +2 -3
- package/dist/server/email-actions.d.ts.map +1 -1
- package/dist/server/email-actions.js +3 -6
- package/dist/server/email-actions.js.map +1 -1
- package/dist/server/email.d.ts +3 -3
- package/dist/server/email.d.ts.map +1 -1
- package/dist/server/email.js +40 -19
- package/dist/server/email.js.map +1 -1
- package/dist/server/index.d.ts +3 -3
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +3 -3
- package/dist/server/index.js.map +1 -1
- package/dist/server/scoped-key-storage.d.ts +22 -0
- package/dist/server/scoped-key-storage.d.ts.map +1 -0
- package/dist/server/scoped-key-storage.js +152 -0
- package/dist/server/scoped-key-storage.js.map +1 -0
- package/dist/shared/agent-env.d.ts +3 -3
- package/dist/shared/agent-env.d.ts.map +1 -1
- package/dist/shared/agent-env.js +3 -3
- package/dist/shared/agent-env.js.map +1 -1
- package/dist/sharing/actions/share-resource.js +1 -1
- package/dist/sharing/actions/share-resource.js.map +1 -1
- package/dist/styles/agent-native.css +55 -3
- package/dist/templates/workspace-root/AGENTS.md +3 -2
- package/dist/templates/workspace-root/README.md +1 -1
- package/dist/templates/workspace-root/scripts/repair-workspace-org.ts +29 -90
- package/dist/terminal/pty-server.d.ts.map +1 -1
- package/dist/terminal/pty-server.js +3 -36
- package/dist/terminal/pty-server.js.map +1 -1
- package/dist/triggers/dispatcher.js +1 -1
- package/dist/triggers/dispatcher.js.map +1 -1
- package/docs/content/file-uploads.md +11 -4
- package/docs/content/locales/ar-SA/multi-app-workspace.md +3 -3
- package/docs/content/locales/de-DE/multi-app-workspace.md +3 -3
- package/docs/content/locales/es-ES/multi-app-workspace.md +3 -3
- package/docs/content/locales/fr-FR/multi-app-workspace.md +3 -3
- package/docs/content/locales/hi-IN/multi-app-workspace.md +3 -3
- package/docs/content/locales/ja-JP/multi-app-workspace.md +3 -3
- package/docs/content/locales/ko-KR/multi-app-workspace.md +3 -3
- package/docs/content/locales/pt-BR/multi-app-workspace.md +3 -3
- package/docs/content/locales/zh-CN/multi-app-workspace.md +3 -3
- package/docs/content/locales/zh-TW/multi-app-workspace.md +3 -3
- package/docs/content/multi-app-workspace.md +3 -3
- package/docs/content/template-clips.md +14 -5
- package/package.json +1 -1
- package/src/templates/workspace-root/AGENTS.md +3 -2
- package/src/templates/workspace-root/README.md +1 -1
- package/src/templates/workspace-root/scripts/repair-workspace-org.ts +29 -90
- package/corpus/core/src/server/env-var-writes.ts +0 -16
- package/corpus/templates/analytics/app/pages/Team.tsx +0 -9
- package/corpus/templates/calendar/app/pages/Team.tsx +0 -12
- package/corpus/templates/mail/app/pages/Team.tsx +0 -17
- package/dist/server/env-var-writes.d.ts +0 -10
- package/dist/server/env-var-writes.d.ts.map +0 -1
- package/dist/server/env-var-writes.js +0 -18
- package/dist/server/env-var-writes.js.map +0 -1
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
2
|
|
|
3
|
-
import crypto from "node:crypto";
|
|
4
3
|
import fs from "node:fs";
|
|
5
4
|
import path from "node:path";
|
|
6
5
|
|
|
@@ -10,8 +9,6 @@ interface Options {
|
|
|
10
9
|
ownerEmail?: string;
|
|
11
10
|
a2aSecret?: string;
|
|
12
11
|
envPath: string;
|
|
13
|
-
force: boolean;
|
|
14
|
-
dryRun: boolean;
|
|
15
12
|
setDispatchDefaultOwner: boolean;
|
|
16
13
|
}
|
|
17
14
|
|
|
@@ -22,10 +19,10 @@ Options:
|
|
|
22
19
|
--name <value> Sets WORKSPACE_ORG_NAME
|
|
23
20
|
--domain <value> Sets WORKSPACE_ORG_DOMAIN
|
|
24
21
|
--owner-email <value> Sets WORKSPACE_OWNER_EMAIL
|
|
25
|
-
--a2a-secret <value>
|
|
26
|
-
--env <path> Env file to
|
|
27
|
-
--force
|
|
28
|
-
--dry-run
|
|
22
|
+
--a2a-secret <value> Reads A2A_SECRET for validation
|
|
23
|
+
--env <path> Env file to read for fallback values (default: .env)
|
|
24
|
+
--force Accepted for compatibility; no file is written
|
|
25
|
+
--dry-run Accepted for compatibility; no file is written
|
|
29
26
|
--set-dispatch-default-owner Also set DISPATCH_DEFAULT_OWNER_EMAIL
|
|
30
27
|
`;
|
|
31
28
|
|
|
@@ -41,8 +38,6 @@ type RequiredKey = (typeof REQUIRED_KEYS)[number];
|
|
|
41
38
|
function parseArgs(argv: string[]): Options {
|
|
42
39
|
const opts: Options = {
|
|
43
40
|
envPath: ".env",
|
|
44
|
-
force: false,
|
|
45
|
-
dryRun: false,
|
|
46
41
|
setDispatchDefaultOwner: false,
|
|
47
42
|
};
|
|
48
43
|
|
|
@@ -78,10 +73,8 @@ function parseArgs(argv: string[]): Options {
|
|
|
78
73
|
opts.envPath = value();
|
|
79
74
|
break;
|
|
80
75
|
case "--force":
|
|
81
|
-
opts.force = true;
|
|
82
76
|
break;
|
|
83
77
|
case "--dry-run":
|
|
84
|
-
opts.dryRun = true;
|
|
85
78
|
break;
|
|
86
79
|
case "--set-dispatch-default-owner":
|
|
87
80
|
opts.setDispatchDefaultOwner = true;
|
|
@@ -147,47 +140,6 @@ function validateEmail(email: string): void {
|
|
|
147
140
|
}
|
|
148
141
|
}
|
|
149
142
|
|
|
150
|
-
function formatEnvValue(value: string): string {
|
|
151
|
-
if (/^[A-Za-z0-9_@./:+-]+$/.test(value)) return value;
|
|
152
|
-
return JSON.stringify(value);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
function upsertEnvValue(
|
|
156
|
-
content: string,
|
|
157
|
-
key: string,
|
|
158
|
-
value: string,
|
|
159
|
-
force: boolean,
|
|
160
|
-
): { content: string; changed: boolean; skipped: boolean } {
|
|
161
|
-
const lines = content.length > 0 ? content.split(/\r?\n/) : [];
|
|
162
|
-
let found = false;
|
|
163
|
-
let changed = false;
|
|
164
|
-
let skipped = false;
|
|
165
|
-
|
|
166
|
-
const next = lines.map((line) => {
|
|
167
|
-
const match = line.match(/^(\s*)([A-Z0-9_]+)(\s*=\s*)(.*)$/);
|
|
168
|
-
if (!match || match[2] !== key) return line;
|
|
169
|
-
|
|
170
|
-
found = true;
|
|
171
|
-
const existing = unquote(match[4]);
|
|
172
|
-
if (existing && !force) {
|
|
173
|
-
skipped = true;
|
|
174
|
-
return line;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
const replacement = `${match[1]}${key}${match[3]}${formatEnvValue(value)}`;
|
|
178
|
-
if (replacement !== line) changed = true;
|
|
179
|
-
return replacement;
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
if (!found) {
|
|
183
|
-
if (next.length > 0 && next[next.length - 1] !== "") next.push("");
|
|
184
|
-
next.push(`${key}=${formatEnvValue(value)}`);
|
|
185
|
-
changed = true;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
return { content: next.join("\n"), changed, skipped };
|
|
189
|
-
}
|
|
190
|
-
|
|
191
143
|
function firstValue(...values: Array<string | undefined>): string | undefined {
|
|
192
144
|
return values.map((v) => v?.trim()).find(Boolean);
|
|
193
145
|
}
|
|
@@ -213,13 +165,21 @@ function main(): void {
|
|
|
213
165
|
process.env.WORKSPACE_OWNER_EMAIL,
|
|
214
166
|
current.WORKSPACE_OWNER_EMAIL,
|
|
215
167
|
)?.toLowerCase();
|
|
216
|
-
const a2aSecret =
|
|
217
|
-
|
|
218
|
-
|
|
168
|
+
const a2aSecret = firstValue(
|
|
169
|
+
opts.a2aSecret,
|
|
170
|
+
process.env.A2A_SECRET,
|
|
171
|
+
current.A2A_SECRET,
|
|
172
|
+
);
|
|
219
173
|
|
|
220
174
|
if (!name) fail("--name or WORKSPACE_ORG_NAME is required.");
|
|
221
175
|
if (!rawDomain) fail("--domain or WORKSPACE_ORG_DOMAIN is required.");
|
|
222
176
|
if (!ownerEmail) fail("--owner-email or WORKSPACE_OWNER_EMAIL is required.");
|
|
177
|
+
if (!a2aSecret) {
|
|
178
|
+
fail(
|
|
179
|
+
"--a2a-secret or A2A_SECRET is required. This script reads existing " +
|
|
180
|
+
"configuration but does not write env files.",
|
|
181
|
+
);
|
|
182
|
+
}
|
|
223
183
|
|
|
224
184
|
const domain = normalizeDomain(rawDomain);
|
|
225
185
|
validateDomain(domain);
|
|
@@ -232,52 +192,31 @@ function main(): void {
|
|
|
232
192
|
A2A_SECRET: a2aSecret,
|
|
233
193
|
};
|
|
234
194
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
for (const key of REQUIRED_KEYS) {
|
|
240
|
-
const result = upsertEnvValue(next, key, desired[key], opts.force);
|
|
241
|
-
next = result.content;
|
|
242
|
-
if (result.changed) changed.push(key);
|
|
243
|
-
if (result.skipped) skipped.push(key);
|
|
244
|
-
}
|
|
245
|
-
|
|
195
|
+
const displayEntries: Array<[string, string]> = REQUIRED_KEYS.map((key) => [
|
|
196
|
+
key,
|
|
197
|
+
key === "A2A_SECRET" ? "[configured]" : desired[key],
|
|
198
|
+
]);
|
|
246
199
|
if (opts.setDispatchDefaultOwner) {
|
|
247
|
-
|
|
248
|
-
next,
|
|
249
|
-
"DISPATCH_DEFAULT_OWNER_EMAIL",
|
|
250
|
-
ownerEmail,
|
|
251
|
-
opts.force,
|
|
252
|
-
);
|
|
253
|
-
next = result.content;
|
|
254
|
-
if (result.changed) changed.push("DISPATCH_DEFAULT_OWNER_EMAIL");
|
|
255
|
-
if (result.skipped) skipped.push("DISPATCH_DEFAULT_OWNER_EMAIL");
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
next = next.trimEnd() + "\n";
|
|
259
|
-
|
|
260
|
-
if (opts.dryRun) {
|
|
261
|
-
console.log(next);
|
|
262
|
-
} else {
|
|
263
|
-
fs.writeFileSync(envPath, next);
|
|
200
|
+
displayEntries.push(["DISPATCH_DEFAULT_OWNER_EMAIL", ownerEmail]);
|
|
264
201
|
}
|
|
265
202
|
|
|
266
203
|
console.log(
|
|
267
|
-
|
|
204
|
+
`Validated workspace org settings from ${path.relative(process.cwd(), envPath) || envPath}.`,
|
|
268
205
|
);
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
);
|
|
206
|
+
console.log("No env files were written.");
|
|
207
|
+
console.log("");
|
|
208
|
+
console.log("Resolved configuration:");
|
|
209
|
+
for (const [key, value] of displayEntries) {
|
|
210
|
+
console.log(`- ${key}: ${value}`);
|
|
274
211
|
}
|
|
275
212
|
console.log("");
|
|
276
213
|
console.log("Next steps:");
|
|
277
214
|
console.log("1. Sign in as WORKSPACE_OWNER_EMAIL.");
|
|
278
215
|
console.log("2. Create or select the org named by WORKSPACE_ORG_NAME.");
|
|
279
216
|
console.log("3. Set the org allowed domain to WORKSPACE_ORG_DOMAIN.");
|
|
280
|
-
console.log(
|
|
217
|
+
console.log(
|
|
218
|
+
"4. Configure A2A_SECRET through the scoped secret/deployment secret manager for apps that need cross-app A2A.",
|
|
219
|
+
);
|
|
281
220
|
}
|
|
282
221
|
|
|
283
222
|
main();
|
|
@@ -30,14 +30,6 @@ async function getChildProcess(): Promise<typeof import("child_process")> {
|
|
|
30
30
|
return _cp;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
let _fs: typeof import("fs") | undefined;
|
|
34
|
-
async function getFs(): Promise<typeof import("fs")> {
|
|
35
|
-
if (!_fs) {
|
|
36
|
-
_fs = await import("node:fs");
|
|
37
|
-
}
|
|
38
|
-
return _fs;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
33
|
/**
|
|
42
34
|
* Kill a process and all its descendants.
|
|
43
35
|
* node-pty's kill() only sends a signal to the shell, but child processes
|
|
@@ -314,10 +306,10 @@ export async function createPtyWebSocketServer(
|
|
|
314
306
|
msg.type === "agentNative.setEnvVars" &&
|
|
315
307
|
Array.isArray(msg.data?.vars)
|
|
316
308
|
) {
|
|
317
|
-
const envPath = path.join(resolvedAppDir, ".env");
|
|
318
309
|
const vars: Array<{ key: string; value: string }> = msg.data.vars;
|
|
319
310
|
|
|
320
|
-
//
|
|
311
|
+
// Legacy bridge message. Keep validating the keys, but do not persist
|
|
312
|
+
// them to .env or process.env; key storage is DB-scoped.
|
|
321
313
|
const validKeyPattern = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
322
314
|
const sanitizedVars = vars.filter(({ key }) => {
|
|
323
315
|
if (!validKeyPattern.test(key)) {
|
|
@@ -327,39 +319,12 @@ export async function createPtyWebSocketServer(
|
|
|
327
319
|
return true;
|
|
328
320
|
});
|
|
329
321
|
|
|
330
|
-
const fs = await getFs();
|
|
331
|
-
let lines: string[] = [];
|
|
332
|
-
try {
|
|
333
|
-
lines = fs.readFileSync(envPath, "utf-8").split("\n");
|
|
334
|
-
} catch {}
|
|
335
|
-
|
|
336
|
-
for (const { key, value } of sanitizedVars) {
|
|
337
|
-
// Strip newlines/null bytes to prevent line injection
|
|
338
|
-
const safeValue = value.replace(/[\r\n\0]/g, "");
|
|
339
|
-
// Quote values containing #, spaces, or quotes so dotenv parses correctly
|
|
340
|
-
const needsQuoting = /[# "']/.test(safeValue);
|
|
341
|
-
const quotedValue = needsQuoting
|
|
342
|
-
? `"${safeValue.replace(/"/g, '\\"')}"`
|
|
343
|
-
: safeValue;
|
|
344
|
-
const idx = lines.findIndex((l) => l.startsWith(`${key}=`));
|
|
345
|
-
const entry = `${key}=${quotedValue}`;
|
|
346
|
-
if (idx !== -1) {
|
|
347
|
-
lines[idx] = entry;
|
|
348
|
-
} else {
|
|
349
|
-
lines.push(entry);
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
while (lines.length > 0 && lines[lines.length - 1] === "") {
|
|
354
|
-
lines.pop();
|
|
355
|
-
}
|
|
356
|
-
fs.writeFileSync(envPath, lines.join("\n") + "\n", "utf-8");
|
|
357
|
-
|
|
358
322
|
if (ws.readyState === WebSocket.OPEN) {
|
|
359
323
|
ws.send(
|
|
360
324
|
JSON.stringify({
|
|
361
325
|
type: "env-vars-saved",
|
|
362
326
|
keys: sanitizedVars.map((v) => v.key),
|
|
327
|
+
storage: "scoped-secrets",
|
|
363
328
|
}),
|
|
364
329
|
);
|
|
365
330
|
}
|
|
@@ -257,8 +257,7 @@ async function handleEvent(
|
|
|
257
257
|
// Resolve API key for condition evaluation
|
|
258
258
|
const owner = meta.createdBy || resource.owner;
|
|
259
259
|
const userApiKey = await getOwnerActiveApiKey(owner);
|
|
260
|
-
const apiKey =
|
|
261
|
-
userApiKey || _deps.apiKey || process.env.ANTHROPIC_API_KEY;
|
|
260
|
+
const apiKey = userApiKey || _deps.apiKey;
|
|
262
261
|
if (!apiKey) {
|
|
263
262
|
console.warn(
|
|
264
263
|
`[triggers] No API key for trigger "${resource.path}" — skipping`,
|
|
@@ -10,11 +10,9 @@ import {
|
|
|
10
10
|
IconGripVertical,
|
|
11
11
|
IconBook2,
|
|
12
12
|
IconDatabase,
|
|
13
|
-
IconUsers,
|
|
14
13
|
IconReportAnalytics,
|
|
15
14
|
IconSearch,
|
|
16
15
|
IconArchive,
|
|
17
|
-
IconTemplate,
|
|
18
16
|
IconBuilding,
|
|
19
17
|
IconLock,
|
|
20
18
|
IconLink,
|
|
@@ -144,7 +142,6 @@ import {
|
|
|
144
142
|
import { CSS } from "@dnd-kit/utilities";
|
|
145
143
|
|
|
146
144
|
const bottomItems = [
|
|
147
|
-
{ icon: IconUsers, labelKey: "navigation.team", href: "/team" },
|
|
148
145
|
{ icon: IconSettings, labelKey: "navigation.settings", href: "/settings" },
|
|
149
146
|
];
|
|
150
147
|
|
|
@@ -1962,20 +1959,6 @@ export function Sidebar({ mobile }: { mobile?: boolean } = {}) {
|
|
|
1962
1959
|
{t("navigation.dataDictionary")}
|
|
1963
1960
|
</Link>
|
|
1964
1961
|
|
|
1965
|
-
{/* Catalog link */}
|
|
1966
|
-
<Link
|
|
1967
|
-
to="/catalog"
|
|
1968
|
-
className={cn(
|
|
1969
|
-
"flex items-center gap-3 rounded-lg px-3 py-2 transition-all hover:text-primary",
|
|
1970
|
-
location.pathname === "/catalog"
|
|
1971
|
-
? "bg-sidebar-accent text-sidebar-accent-foreground"
|
|
1972
|
-
: "text-muted-foreground hover:bg-sidebar-accent/50",
|
|
1973
|
-
)}
|
|
1974
|
-
>
|
|
1975
|
-
<IconTemplate className="h-4 w-4" />
|
|
1976
|
-
{t("navigation.templateCatalog")}
|
|
1977
|
-
</Link>
|
|
1978
|
-
|
|
1979
1962
|
{/* Dashboards section */}
|
|
1980
1963
|
<div className="group/section min-w-0 space-y-1">
|
|
1981
1964
|
<div
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
const messages = {
|
|
2
|
+
root: {
|
|
3
|
+
whatsNew: "最新消息",
|
|
4
|
+
},
|
|
2
5
|
navigation: {
|
|
3
6
|
brand: "Analytics",
|
|
4
7
|
ask: "提問",
|
|
@@ -102,6 +105,9 @@ const messages = {
|
|
|
102
105
|
credentials: "資料來源憑證",
|
|
103
106
|
credentialsDescription: "API 金鑰和憑證在資料來源頁面管理。",
|
|
104
107
|
manageDataSources: "管理資料來源",
|
|
108
|
+
dashboardTemplates: "儀表板範本",
|
|
109
|
+
dashboardTemplatesDescription: "需要起點時,可安裝來源程式碼控制的儀表板。",
|
|
110
|
+
openDashboardTemplates: "開啟目錄",
|
|
105
111
|
languageTitle: "語言",
|
|
106
112
|
languageLabel: "介面語言",
|
|
107
113
|
about: "關於",
|
|
@@ -795,7 +801,7 @@ const messages = {
|
|
|
795
801
|
time: "時間",
|
|
796
802
|
},
|
|
797
803
|
catalog: {
|
|
798
|
-
description: "
|
|
804
|
+
description: "需要起點時,可安裝儀表板範本。",
|
|
799
805
|
noTemplatesFound: "沒有找到範本",
|
|
800
806
|
tryDifferentCategory: "嘗試不同的目錄類別。",
|
|
801
807
|
templatesCount: "{{count}} 個範本",
|
|
@@ -3,6 +3,9 @@ import type { LocaleCode } from "@agent-native/core/client";
|
|
|
3
3
|
import zhTW from "./i18n/zh-TW";
|
|
4
4
|
|
|
5
5
|
const enUS = {
|
|
6
|
+
root: {
|
|
7
|
+
whatsNew: "What's new",
|
|
8
|
+
},
|
|
6
9
|
navigation: {
|
|
7
10
|
brand: "Analytics",
|
|
8
11
|
ask: "Ask",
|
|
@@ -135,6 +138,10 @@ const enUS = {
|
|
|
135
138
|
credentialsDescription:
|
|
136
139
|
"API keys and credentials are managed on the Data Sources page.",
|
|
137
140
|
manageDataSources: "Manage Data Sources",
|
|
141
|
+
dashboardTemplates: "Dashboard templates",
|
|
142
|
+
dashboardTemplatesDescription:
|
|
143
|
+
"Install a source-controlled dashboard when you need a starting point.",
|
|
144
|
+
openDashboardTemplates: "Open catalog",
|
|
138
145
|
languageTitle: "Language",
|
|
139
146
|
languageLabel: "Interface language",
|
|
140
147
|
about: "About",
|
|
@@ -832,8 +839,7 @@ const enUS = {
|
|
|
832
839
|
time: "Time",
|
|
833
840
|
},
|
|
834
841
|
catalog: {
|
|
835
|
-
description:
|
|
836
|
-
"Source-controlled dashboards ready to install into your workspace.",
|
|
842
|
+
description: "Install a dashboard template when you need a starting point.",
|
|
837
843
|
noTemplatesFound: "No templates found",
|
|
838
844
|
tryDifferentCategory: "Try a different catalog category.",
|
|
839
845
|
templatesCount: "{{count}} templates",
|
|
@@ -3327,6 +3333,7 @@ function mergeMessages(overrides: {
|
|
|
3327
3333
|
[K in Section]?: Partial<Messages[K]>;
|
|
3328
3334
|
}): Messages {
|
|
3329
3335
|
return {
|
|
3336
|
+
root: { ...enUS.root, ...overrides.root },
|
|
3330
3337
|
navigation: { ...enUS.navigation, ...overrides.navigation },
|
|
3331
3338
|
dashboardHeader: { ...enUS.dashboardHeader, ...overrides.dashboardHeader },
|
|
3332
3339
|
sidebar: { ...enUS.sidebar, ...overrides.sidebar },
|
|
@@ -3368,6 +3375,9 @@ export const messagesByLocale = {
|
|
|
3368
3375
|
"zh-TW": mergeMessages(zhTW),
|
|
3369
3376
|
"zh-CN": mergeMessages({
|
|
3370
3377
|
...analyticsSliceTranslations["zh-CN"],
|
|
3378
|
+
root: {
|
|
3379
|
+
whatsNew: "新增内容",
|
|
3380
|
+
},
|
|
3371
3381
|
navigation: {
|
|
3372
3382
|
brand: "Analytics",
|
|
3373
3383
|
ask: "提问",
|
|
@@ -3494,6 +3504,9 @@ export const messagesByLocale = {
|
|
|
3494
3504
|
credentials: "数据源凭据",
|
|
3495
3505
|
credentialsDescription: "API 密钥和凭据在数据源页面管理。",
|
|
3496
3506
|
manageDataSources: "管理数据源",
|
|
3507
|
+
dashboardTemplates: "仪表板模板",
|
|
3508
|
+
dashboardTemplatesDescription: "需要起点时,安装受源码管理的仪表板。",
|
|
3509
|
+
openDashboardTemplates: "打开目录",
|
|
3497
3510
|
languageTitle: "语言",
|
|
3498
3511
|
languageLabel: "界面语言",
|
|
3499
3512
|
about: "关于",
|
|
@@ -3537,6 +3550,9 @@ export const messagesByLocale = {
|
|
|
3537
3550
|
}),
|
|
3538
3551
|
"es-ES": mergeMessages({
|
|
3539
3552
|
...analyticsSliceTranslations["es-ES"],
|
|
3553
|
+
root: {
|
|
3554
|
+
whatsNew: "Novedades",
|
|
3555
|
+
},
|
|
3540
3556
|
navigation: {
|
|
3541
3557
|
ask: "Preguntar",
|
|
3542
3558
|
overview: "Resumen",
|
|
@@ -3667,6 +3683,10 @@ export const messagesByLocale = {
|
|
|
3667
3683
|
credentialsDescription:
|
|
3668
3684
|
"Las claves API y credenciales se gestionan en la página Fuentes de datos.",
|
|
3669
3685
|
manageDataSources: "Gestionar fuentes de datos",
|
|
3686
|
+
dashboardTemplates: "Plantillas de paneles",
|
|
3687
|
+
dashboardTemplatesDescription:
|
|
3688
|
+
"Instala un panel controlado por código fuente cuando necesites un punto de partida.",
|
|
3689
|
+
openDashboardTemplates: "Abrir catálogo",
|
|
3670
3690
|
languageTitle: "Idioma",
|
|
3671
3691
|
languageLabel: "Idioma de la interfaz",
|
|
3672
3692
|
about: "Acerca de",
|
|
@@ -3712,6 +3732,9 @@ export const messagesByLocale = {
|
|
|
3712
3732
|
}),
|
|
3713
3733
|
"fr-FR": mergeMessages({
|
|
3714
3734
|
...analyticsSliceTranslations["fr-FR"],
|
|
3735
|
+
root: {
|
|
3736
|
+
whatsNew: "Nouveautés",
|
|
3737
|
+
},
|
|
3715
3738
|
navigation: {
|
|
3716
3739
|
ask: "Demander",
|
|
3717
3740
|
overview: "Vue d'ensemble",
|
|
@@ -3843,6 +3866,10 @@ export const messagesByLocale = {
|
|
|
3843
3866
|
credentialsDescription:
|
|
3844
3867
|
"Les clés API et identifiants sont gérés sur la page Sources de données.",
|
|
3845
3868
|
manageDataSources: "Gérer les sources de données",
|
|
3869
|
+
dashboardTemplates: "Modèles de tableaux de bord",
|
|
3870
|
+
dashboardTemplatesDescription:
|
|
3871
|
+
"Installez un tableau de bord suivi dans le code source lorsque vous avez besoin d'un point de départ.",
|
|
3872
|
+
openDashboardTemplates: "Ouvrir le catalogue",
|
|
3846
3873
|
languageTitle: "Langue",
|
|
3847
3874
|
languageLabel: "Langue de l'interface",
|
|
3848
3875
|
about: "À propos",
|
|
@@ -3893,6 +3920,9 @@ export const messagesByLocale = {
|
|
|
3893
3920
|
}),
|
|
3894
3921
|
"de-DE": mergeMessages({
|
|
3895
3922
|
...analyticsSliceTranslations["de-DE"],
|
|
3923
|
+
root: {
|
|
3924
|
+
whatsNew: "Neuigkeiten",
|
|
3925
|
+
},
|
|
3896
3926
|
navigation: {
|
|
3897
3927
|
ask: "Fragen",
|
|
3898
3928
|
overview: "Übersicht",
|
|
@@ -4028,6 +4058,10 @@ export const messagesByLocale = {
|
|
|
4028
4058
|
credentialsDescription:
|
|
4029
4059
|
"API-Schlüssel und Anmeldedaten werden auf der Seite Datenquellen verwaltet.",
|
|
4030
4060
|
manageDataSources: "Datenquellen verwalten",
|
|
4061
|
+
dashboardTemplates: "Dashboard-Vorlagen",
|
|
4062
|
+
dashboardTemplatesDescription:
|
|
4063
|
+
"Installiere ein quellkontrolliertes Dashboard, wenn du einen Ausgangspunkt brauchst.",
|
|
4064
|
+
openDashboardTemplates: "Katalog öffnen",
|
|
4031
4065
|
languageTitle: "Sprache",
|
|
4032
4066
|
languageLabel: "Oberflächensprache",
|
|
4033
4067
|
about: "Info",
|
|
@@ -4074,6 +4108,9 @@ export const messagesByLocale = {
|
|
|
4074
4108
|
}),
|
|
4075
4109
|
"ja-JP": mergeMessages({
|
|
4076
4110
|
...analyticsSliceTranslations["ja-JP"],
|
|
4111
|
+
root: {
|
|
4112
|
+
whatsNew: "新着情報",
|
|
4113
|
+
},
|
|
4077
4114
|
navigation: {
|
|
4078
4115
|
ask: "質問",
|
|
4079
4116
|
overview: "概要",
|
|
@@ -4205,6 +4242,10 @@ export const messagesByLocale = {
|
|
|
4205
4242
|
credentialsDescription:
|
|
4206
4243
|
"API キーと認証情報はデータソースページで管理します。",
|
|
4207
4244
|
manageDataSources: "データソースを管理",
|
|
4245
|
+
dashboardTemplates: "ダッシュボードテンプレート",
|
|
4246
|
+
dashboardTemplatesDescription:
|
|
4247
|
+
"出発点が必要なときは、ソース管理されたダッシュボードをインストールします。",
|
|
4248
|
+
openDashboardTemplates: "カタログを開く",
|
|
4208
4249
|
languageTitle: "言語",
|
|
4209
4250
|
languageLabel: "インターフェース言語",
|
|
4210
4251
|
about: "概要",
|
|
@@ -4251,6 +4292,9 @@ export const messagesByLocale = {
|
|
|
4251
4292
|
}),
|
|
4252
4293
|
"ko-KR": mergeMessages({
|
|
4253
4294
|
...analyticsSliceTranslations["ko-KR"],
|
|
4295
|
+
root: {
|
|
4296
|
+
whatsNew: "새로운 기능",
|
|
4297
|
+
},
|
|
4254
4298
|
navigation: {
|
|
4255
4299
|
ask: "질문",
|
|
4256
4300
|
overview: "개요",
|
|
@@ -4382,6 +4426,10 @@ export const messagesByLocale = {
|
|
|
4382
4426
|
credentialsDescription:
|
|
4383
4427
|
"API 키와 자격 증명은 데이터 소스 페이지에서 관리합니다.",
|
|
4384
4428
|
manageDataSources: "데이터 소스 관리",
|
|
4429
|
+
dashboardTemplates: "대시보드 템플릿",
|
|
4430
|
+
dashboardTemplatesDescription:
|
|
4431
|
+
"시작점이 필요할 때 소스 제어된 대시보드를 설치하세요.",
|
|
4432
|
+
openDashboardTemplates: "카탈로그 열기",
|
|
4385
4433
|
languageTitle: "언어",
|
|
4386
4434
|
languageLabel: "인터페이스 언어",
|
|
4387
4435
|
about: "정보",
|
|
@@ -4427,6 +4475,9 @@ export const messagesByLocale = {
|
|
|
4427
4475
|
}),
|
|
4428
4476
|
"pt-BR": mergeMessages({
|
|
4429
4477
|
...analyticsSliceTranslations["pt-BR"],
|
|
4478
|
+
root: {
|
|
4479
|
+
whatsNew: "Novidades",
|
|
4480
|
+
},
|
|
4430
4481
|
navigation: {
|
|
4431
4482
|
ask: "Perguntar",
|
|
4432
4483
|
overview: "Visão geral",
|
|
@@ -4560,6 +4611,10 @@ export const messagesByLocale = {
|
|
|
4560
4611
|
credentialsDescription:
|
|
4561
4612
|
"Chaves de API e credenciais são gerenciadas na página Fontes de dados.",
|
|
4562
4613
|
manageDataSources: "Gerenciar fontes de dados",
|
|
4614
|
+
dashboardTemplates: "Modelos de dashboard",
|
|
4615
|
+
dashboardTemplatesDescription:
|
|
4616
|
+
"Instale um dashboard controlado por código-fonte quando precisar de um ponto de partida.",
|
|
4617
|
+
openDashboardTemplates: "Abrir catálogo",
|
|
4563
4618
|
languageTitle: "Idioma",
|
|
4564
4619
|
languageLabel: "Idioma da interface",
|
|
4565
4620
|
about: "Sobre",
|
|
@@ -4608,6 +4663,9 @@ export const messagesByLocale = {
|
|
|
4608
4663
|
}),
|
|
4609
4664
|
"hi-IN": mergeMessages({
|
|
4610
4665
|
...analyticsSliceTranslations["hi-IN"],
|
|
4666
|
+
root: {
|
|
4667
|
+
whatsNew: "नया क्या है",
|
|
4668
|
+
},
|
|
4611
4669
|
navigation: {
|
|
4612
4670
|
ask: "पूछें",
|
|
4613
4671
|
overview: "अवलोकन",
|
|
@@ -4736,6 +4794,10 @@ export const messagesByLocale = {
|
|
|
4736
4794
|
credentialsDescription:
|
|
4737
4795
|
"API कुंजियां और क्रेडेंशियल डेटा स्रोत पेज पर प्रबंधित होते हैं।",
|
|
4738
4796
|
manageDataSources: "डेटा स्रोत प्रबंधित करें",
|
|
4797
|
+
dashboardTemplates: "डैशबोर्ड टेम्पलेट",
|
|
4798
|
+
dashboardTemplatesDescription:
|
|
4799
|
+
"जब आपको शुरुआत का आधार चाहिए, तो स्रोत-नियंत्रित डैशबोर्ड इंस्टॉल करें।",
|
|
4800
|
+
openDashboardTemplates: "कैटलॉग खोलें",
|
|
4739
4801
|
languageTitle: "भाषा",
|
|
4740
4802
|
languageLabel: "इंटरफ़ेस भाषा",
|
|
4741
4803
|
about: "परिचय",
|
|
@@ -4782,6 +4844,9 @@ export const messagesByLocale = {
|
|
|
4782
4844
|
}),
|
|
4783
4845
|
"ar-SA": mergeMessages({
|
|
4784
4846
|
...analyticsSliceTranslations["ar-SA"],
|
|
4847
|
+
root: {
|
|
4848
|
+
whatsNew: "ما الجديد",
|
|
4849
|
+
},
|
|
4785
4850
|
navigation: {
|
|
4786
4851
|
ask: "اسأل",
|
|
4787
4852
|
overview: "نظرة عامة",
|
|
@@ -4910,6 +4975,10 @@ export const messagesByLocale = {
|
|
|
4910
4975
|
credentialsDescription:
|
|
4911
4976
|
"تتم إدارة مفاتيح API وبيانات الاعتماد من صفحة مصادر البيانات.",
|
|
4912
4977
|
manageDataSources: "إدارة مصادر البيانات",
|
|
4978
|
+
dashboardTemplates: "قوالب لوحات المعلومات",
|
|
4979
|
+
dashboardTemplatesDescription:
|
|
4980
|
+
"ثبّت لوحة معلومات مضبوطة في المصدر عندما تحتاج إلى نقطة بداية.",
|
|
4981
|
+
openDashboardTemplates: "افتح الكتالوج",
|
|
4913
4982
|
languageTitle: "اللغة",
|
|
4914
4983
|
languageLabel: "لغة الواجهة",
|
|
4915
4984
|
about: "حول",
|