@agent-native/core 0.79.17 → 0.79.19
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/i18n.tsx +77 -65
- 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 +47 -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 +1 -18
- package/corpus/templates/analytics/app/global.css +15 -0
- 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/Ask.tsx +1 -1
- 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-ask-tab-uses-a-softer-dark-gray-canvas-while-sidebar-cha.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 +325 -333
- package/corpus/templates/clips/app/components/player/delete-recording-menu.tsx +80 -40
- 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 +263 -158
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +10 -2
- 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-recording-details-button-stays-at-the-far-right-on-small-screen.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-agent-sidebar-now-slides-in-smoothly-without-duplicate-e.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/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/components/plan/CanvasArea.tsx +56 -4
- package/corpus/templates/plan/app/global.css +8 -3
- 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/pages/PlansPage.tsx +1 -1
- package/corpus/templates/plan/app/routes/settings.tsx +75 -73
- package/corpus/templates/plan/app/routes/team.tsx +2 -8
- package/corpus/templates/plan/changelog/2026-06-26-canvas-grid-panning-now-stays-smooth-and-fills-the-workspace.md +6 -0
- 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/i18n.d.ts.map +1 -1
- package/dist/client/i18n.js +20 -9
- package/dist/client/i18n.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/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 +3 -3
- package/dist/observability/routes.d.ts +6 -6
- 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/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 +2 -2
- 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 +47 -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
|
@@ -3,20 +3,11 @@ import {
|
|
|
3
3
|
useActionQuery,
|
|
4
4
|
useT,
|
|
5
5
|
} from "@agent-native/core/client";
|
|
6
|
-
import {
|
|
7
|
-
IconCheck,
|
|
8
|
-
IconExternalLink,
|
|
9
|
-
IconLayoutDashboard,
|
|
10
|
-
IconLoader2,
|
|
11
|
-
IconPackageImport,
|
|
12
|
-
IconPlugConnected,
|
|
13
|
-
IconSparkles,
|
|
14
|
-
} from "@tabler/icons-react";
|
|
6
|
+
import { IconLayoutDashboard } from "@tabler/icons-react";
|
|
15
7
|
import { useMemo, useState } from "react";
|
|
16
8
|
import { useNavigate } from "react-router";
|
|
17
9
|
import { toast } from "sonner";
|
|
18
10
|
|
|
19
|
-
import { Badge } from "@/components/ui/badge";
|
|
20
11
|
import { Button } from "@/components/ui/button";
|
|
21
12
|
import {
|
|
22
13
|
Card,
|
|
@@ -27,15 +18,7 @@ import {
|
|
|
27
18
|
CardTitle,
|
|
28
19
|
} from "@/components/ui/card";
|
|
29
20
|
import { Skeleton } from "@/components/ui/skeleton";
|
|
30
|
-
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";
|
|
31
21
|
import { demoNodeExporterDashboardPath } from "@/lib/demo-dashboard-path";
|
|
32
|
-
import { cn } from "@/lib/utils";
|
|
33
|
-
|
|
34
|
-
type TemplateCategory =
|
|
35
|
-
| "Acquisition"
|
|
36
|
-
| "Product"
|
|
37
|
-
| "Observability"
|
|
38
|
-
| "Operations";
|
|
39
22
|
|
|
40
23
|
type InstalledDashboard = {
|
|
41
24
|
id: string;
|
|
@@ -49,26 +32,12 @@ type DashboardTemplate = {
|
|
|
49
32
|
id: string;
|
|
50
33
|
name: string;
|
|
51
34
|
description: string;
|
|
52
|
-
category: TemplateCategory;
|
|
53
35
|
defaultDashboardId: string;
|
|
54
36
|
dataSources: string[];
|
|
55
|
-
tags: string[];
|
|
56
37
|
panelCount: number;
|
|
57
|
-
version: string;
|
|
58
|
-
recommended?: boolean;
|
|
59
|
-
installed: boolean;
|
|
60
38
|
installedDashboards: InstalledDashboard[];
|
|
61
39
|
};
|
|
62
40
|
|
|
63
|
-
const CATEGORY_TABS = [
|
|
64
|
-
"Demo",
|
|
65
|
-
"All",
|
|
66
|
-
"Product",
|
|
67
|
-
"Acquisition",
|
|
68
|
-
"Observability",
|
|
69
|
-
"Operations",
|
|
70
|
-
] as const;
|
|
71
|
-
|
|
72
41
|
function isDemoTemplate(template: DashboardTemplate): boolean {
|
|
73
42
|
return template.dataSources.includes("demo");
|
|
74
43
|
}
|
|
@@ -94,22 +63,18 @@ function sourceLabel(source: string): string {
|
|
|
94
63
|
|
|
95
64
|
function TemplateSkeleton() {
|
|
96
65
|
return (
|
|
97
|
-
<Card>
|
|
66
|
+
<Card className="flex min-h-[250px] flex-col">
|
|
98
67
|
<CardHeader>
|
|
99
|
-
<div className="
|
|
100
|
-
<
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
<Skeleton className="h-6 w-20 rounded-full" />
|
|
68
|
+
<div className="space-y-3">
|
|
69
|
+
<Skeleton className="h-5 w-48" />
|
|
70
|
+
<Skeleton className="h-4 w-full" />
|
|
71
|
+
<Skeleton className="h-4 w-5/6" />
|
|
72
|
+
<Skeleton className="h-4 w-3/5" />
|
|
105
73
|
</div>
|
|
106
74
|
</CardHeader>
|
|
107
|
-
<CardContent className="space-y-4">
|
|
108
|
-
<
|
|
109
|
-
|
|
110
|
-
<Skeleton className="h-6 w-20 rounded-full" />
|
|
111
|
-
</div>
|
|
112
|
-
<Skeleton className="h-10 w-full" />
|
|
75
|
+
<CardContent className="mt-auto space-y-4">
|
|
76
|
+
<Skeleton className="h-4 w-40" />
|
|
77
|
+
<Skeleton className="h-9 w-full" />
|
|
113
78
|
</CardContent>
|
|
114
79
|
</Card>
|
|
115
80
|
);
|
|
@@ -131,110 +96,38 @@ function TemplateCard({
|
|
|
131
96
|
(dashboard) => !dashboard.archivedAt,
|
|
132
97
|
);
|
|
133
98
|
const isInstalled = Boolean(installedDashboard);
|
|
134
|
-
const
|
|
99
|
+
const metadata = [
|
|
100
|
+
t("catalog.panels", { count: String(template.panelCount) }),
|
|
101
|
+
...template.dataSources.map(sourceLabel),
|
|
102
|
+
].join(" · ");
|
|
135
103
|
|
|
136
104
|
return (
|
|
137
|
-
<Card className="flex min-h-[
|
|
138
|
-
<CardHeader className="pb-4">
|
|
139
|
-
<
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
</CardTitle>
|
|
144
|
-
<CardDescription className="line-clamp-2">
|
|
145
|
-
{template.description}
|
|
146
|
-
</CardDescription>
|
|
147
|
-
</div>
|
|
148
|
-
<div className="flex shrink-0 flex-col items-end gap-1.5">
|
|
149
|
-
{isDemo ? (
|
|
150
|
-
<Badge className="border-cyan-400/60 bg-cyan-400/20 text-cyan-800 shadow-sm shadow-cyan-500/10 dark:text-cyan-100">
|
|
151
|
-
<IconSparkles className="mr-1 h-3 w-3" />
|
|
152
|
-
{t("catalog.demo")}
|
|
153
|
-
</Badge>
|
|
154
|
-
) : null}
|
|
155
|
-
{template.recommended && (
|
|
156
|
-
<Badge variant="secondary" className="shrink-0">
|
|
157
|
-
{t("catalog.recommended")}
|
|
158
|
-
</Badge>
|
|
159
|
-
)}
|
|
160
|
-
</div>
|
|
161
|
-
</div>
|
|
105
|
+
<Card className="flex min-h-[250px] flex-col">
|
|
106
|
+
<CardHeader className="gap-2 pb-4">
|
|
107
|
+
<CardTitle className="text-base leading-6">{template.name}</CardTitle>
|
|
108
|
+
<CardDescription className="text-sm leading-6">
|
|
109
|
+
{template.description}
|
|
110
|
+
</CardDescription>
|
|
162
111
|
</CardHeader>
|
|
163
|
-
<CardContent className="
|
|
164
|
-
<
|
|
165
|
-
<Badge variant="outline" className="gap-1.5">
|
|
166
|
-
<IconLayoutDashboard className="h-3 w-3" />
|
|
167
|
-
{t("catalog.panels", { count: String(template.panelCount) })}
|
|
168
|
-
</Badge>
|
|
169
|
-
{template.dataSources.map((source) => (
|
|
170
|
-
<Badge
|
|
171
|
-
key={source}
|
|
172
|
-
variant="outline"
|
|
173
|
-
className={cn(
|
|
174
|
-
"gap-1.5",
|
|
175
|
-
source === "demo" &&
|
|
176
|
-
"border-cyan-400/50 bg-cyan-400/10 text-cyan-700 dark:text-cyan-200",
|
|
177
|
-
)}
|
|
178
|
-
>
|
|
179
|
-
<IconPlugConnected className="h-3 w-3" />
|
|
180
|
-
{sourceLabel(source)}
|
|
181
|
-
</Badge>
|
|
182
|
-
))}
|
|
183
|
-
</div>
|
|
184
|
-
|
|
185
|
-
<div className="flex min-h-8 flex-wrap gap-1.5">
|
|
186
|
-
{template.tags.map((tag) => (
|
|
187
|
-
<span
|
|
188
|
-
key={tag}
|
|
189
|
-
className="rounded-md bg-muted px-2 py-1 text-xs text-muted-foreground"
|
|
190
|
-
>
|
|
191
|
-
{tag}
|
|
192
|
-
</span>
|
|
193
|
-
))}
|
|
194
|
-
</div>
|
|
195
|
-
|
|
196
|
-
<div
|
|
197
|
-
className={cn(
|
|
198
|
-
"mt-auto flex items-center gap-2 rounded-md border px-3 py-2 text-xs",
|
|
199
|
-
isInstalled
|
|
200
|
-
? "border-emerald-500/30 bg-emerald-500/10 text-emerald-600 dark:text-emerald-300"
|
|
201
|
-
: "border-border bg-muted/40 text-muted-foreground",
|
|
202
|
-
)}
|
|
203
|
-
>
|
|
204
|
-
{isInstalled ? (
|
|
205
|
-
<IconCheck className="h-3.5 w-3.5 shrink-0" />
|
|
206
|
-
) : (
|
|
207
|
-
<IconPackageImport className="h-3.5 w-3.5 shrink-0" />
|
|
208
|
-
)}
|
|
209
|
-
<span className="truncate">
|
|
210
|
-
{isInstalled
|
|
211
|
-
? t("catalog.installedAs", {
|
|
212
|
-
name: installedDashboard?.name ?? "",
|
|
213
|
-
})
|
|
214
|
-
: t("catalog.installsPrivateSqlDashboard")}
|
|
215
|
-
</span>
|
|
216
|
-
</div>
|
|
112
|
+
<CardContent className="mt-auto">
|
|
113
|
+
<p className="text-sm text-muted-foreground">{metadata}</p>
|
|
217
114
|
</CardContent>
|
|
218
115
|
<CardFooter className="gap-2">
|
|
219
116
|
{isInstalled && installedDashboard ? (
|
|
220
117
|
<Button
|
|
118
|
+
variant="secondary"
|
|
221
119
|
className="min-w-0 flex-1"
|
|
222
120
|
onClick={() => onOpen(installedDashboard.id)}
|
|
223
121
|
>
|
|
224
|
-
<IconExternalLink className="h-4 w-4" />
|
|
225
122
|
{t("catalog.open")}
|
|
226
123
|
</Button>
|
|
227
124
|
) : (
|
|
228
125
|
<Button
|
|
126
|
+
variant="secondary"
|
|
229
127
|
className="min-w-0 flex-1"
|
|
230
128
|
onClick={onInstall}
|
|
231
129
|
disabled={installing}
|
|
232
130
|
>
|
|
233
|
-
{installing ? (
|
|
234
|
-
<IconLoader2 className="h-4 w-4 animate-spin" />
|
|
235
|
-
) : (
|
|
236
|
-
<IconPackageImport className="h-4 w-4" />
|
|
237
|
-
)}
|
|
238
131
|
{installing ? t("catalog.installing") : t("catalog.install")}
|
|
239
132
|
</Button>
|
|
240
133
|
)}
|
|
@@ -245,8 +138,6 @@ function TemplateCard({
|
|
|
245
138
|
|
|
246
139
|
export default function TemplateCatalogRoute() {
|
|
247
140
|
const t = useT();
|
|
248
|
-
const [category, setCategory] =
|
|
249
|
-
useState<(typeof CATEGORY_TABS)[number]>("Demo");
|
|
250
141
|
const [installingIds, setInstallingIds] = useState<Set<string>>(new Set());
|
|
251
142
|
const navigate = useNavigate();
|
|
252
143
|
const install = useActionMutation("install-dashboard-template");
|
|
@@ -260,14 +151,6 @@ export default function TemplateCatalogRoute() {
|
|
|
260
151
|
() => (data as DashboardTemplate[] | undefined) ?? [],
|
|
261
152
|
[data],
|
|
262
153
|
);
|
|
263
|
-
const filtered = useMemo(() => {
|
|
264
|
-
if (category === "Demo") return templates.filter(isDemoTemplate);
|
|
265
|
-
if (category === "All") return templates;
|
|
266
|
-
return templates.filter((template) => template.category === category);
|
|
267
|
-
}, [category, templates]);
|
|
268
|
-
const installedCount = templates.filter(
|
|
269
|
-
(template) => template.installed,
|
|
270
|
-
).length;
|
|
271
154
|
|
|
272
155
|
async function installTemplate(template: DashboardTemplate) {
|
|
273
156
|
setInstallingIds((prev) => new Set(prev).add(template.id));
|
|
@@ -310,46 +193,20 @@ export default function TemplateCatalogRoute() {
|
|
|
310
193
|
}
|
|
311
194
|
|
|
312
195
|
return (
|
|
313
|
-
<div className="mx-auto flex w-full max-w-
|
|
314
|
-
<div className="
|
|
315
|
-
<
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
</p>
|
|
319
|
-
<div className="flex flex-wrap gap-2">
|
|
320
|
-
<Badge variant="secondary">
|
|
321
|
-
{t("catalog.templatesCount", { count: String(templates.length) })}
|
|
322
|
-
</Badge>
|
|
323
|
-
<Badge variant="outline">
|
|
324
|
-
{t("catalog.installedCount", {
|
|
325
|
-
count: String(installedCount),
|
|
326
|
-
})}
|
|
327
|
-
</Badge>
|
|
328
|
-
</div>
|
|
329
|
-
</div>
|
|
330
|
-
<Tabs
|
|
331
|
-
value={category}
|
|
332
|
-
onValueChange={(next) =>
|
|
333
|
-
setCategory(next as (typeof CATEGORY_TABS)[number])
|
|
334
|
-
}
|
|
335
|
-
>
|
|
336
|
-
<TabsList className="grid w-full grid-cols-3 sm:grid-cols-6 md:w-auto">
|
|
337
|
-
{CATEGORY_TABS.map((item) => (
|
|
338
|
-
<TabsTrigger key={item} value={item} className="text-xs">
|
|
339
|
-
{item}
|
|
340
|
-
</TabsTrigger>
|
|
341
|
-
))}
|
|
342
|
-
</TabsList>
|
|
343
|
-
</Tabs>
|
|
196
|
+
<div className="mx-auto flex w-full max-w-5xl flex-col gap-5">
|
|
197
|
+
<div className="max-w-2xl">
|
|
198
|
+
<p className="text-sm leading-6 text-muted-foreground">
|
|
199
|
+
{t("catalog.description")}
|
|
200
|
+
</p>
|
|
344
201
|
</div>
|
|
345
202
|
|
|
346
203
|
{isLoading ? (
|
|
347
|
-
<div className="grid gap-4 md:grid-cols-2
|
|
204
|
+
<div className="grid gap-4 md:grid-cols-2">
|
|
348
205
|
{Array.from({ length: 4 }).map((_, index) => (
|
|
349
206
|
<TemplateSkeleton key={index} />
|
|
350
207
|
))}
|
|
351
208
|
</div>
|
|
352
|
-
) :
|
|
209
|
+
) : templates.length === 0 ? (
|
|
353
210
|
<Card className="border-dashed">
|
|
354
211
|
<CardContent className="flex flex-col items-center justify-center gap-3 py-16 text-center">
|
|
355
212
|
<IconLayoutDashboard className="h-8 w-8 text-muted-foreground" />
|
|
@@ -364,8 +221,8 @@ export default function TemplateCatalogRoute() {
|
|
|
364
221
|
</CardContent>
|
|
365
222
|
</Card>
|
|
366
223
|
) : (
|
|
367
|
-
<div className="grid gap-4 md:grid-cols-2
|
|
368
|
-
{
|
|
224
|
+
<div className="grid gap-4 md:grid-cols-2">
|
|
225
|
+
{templates.map((template) => (
|
|
369
226
|
<TemplateCard
|
|
370
227
|
key={template.id}
|
|
371
228
|
template={template}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { Navigate } from "react-router";
|
|
2
|
+
|
|
1
3
|
import { messagesByLocale } from "@/i18n-data";
|
|
2
|
-
import Team from "@/pages/Team";
|
|
3
4
|
|
|
4
5
|
export function meta() {
|
|
5
6
|
return [{ title: messagesByLocale["en-US"].routeTitles.team }];
|
|
6
7
|
}
|
|
7
8
|
|
|
8
9
|
export default function TeamRoute() {
|
|
9
|
-
return <
|
|
10
|
+
return <Navigate to="/settings#team" replace />;
|
|
10
11
|
}
|
|
@@ -31,6 +31,7 @@ export type CatalogDashboardConfig = SqlDashboardConfig & {
|
|
|
31
31
|
|
|
32
32
|
export type DashboardCatalogEntry = DashboardCatalogMetadata & {
|
|
33
33
|
buildConfig: () => SqlDashboardConfig;
|
|
34
|
+
visibleInCatalog?: boolean;
|
|
34
35
|
};
|
|
35
36
|
|
|
36
37
|
export type InstalledDashboardSummary = {
|
|
@@ -906,7 +907,7 @@ export const dashboardCatalogEntries: DashboardCatalogEntry[] = [
|
|
|
906
907
|
id: "demo-node-exporter",
|
|
907
908
|
name: "Demo Node Exporter Full",
|
|
908
909
|
description:
|
|
909
|
-
"
|
|
910
|
+
"Explore CPU, memory, disk, network, filesystem, and load metrics using built-in sample Prometheus data, with no data source setup required.",
|
|
910
911
|
category: "Observability",
|
|
911
912
|
defaultDashboardId: "demo-node-exporter",
|
|
912
913
|
dataSources: ["demo"],
|
|
@@ -940,6 +941,7 @@ export const dashboardCatalogEntries: DashboardCatalogEntry[] = [
|
|
|
940
941
|
panelCount: 34,
|
|
941
942
|
version: CATALOG_VERSION,
|
|
942
943
|
recommended: true,
|
|
944
|
+
visibleInCatalog: false,
|
|
943
945
|
buildConfig: () => seedConfig("agent-native-templates-first-party"),
|
|
944
946
|
},
|
|
945
947
|
{
|
|
@@ -954,13 +956,14 @@ export const dashboardCatalogEntries: DashboardCatalogEntry[] = [
|
|
|
954
956
|
panelCount: 12,
|
|
955
957
|
version: CATALOG_VERSION,
|
|
956
958
|
recommended: true,
|
|
959
|
+
visibleInCatalog: false,
|
|
957
960
|
buildConfig: () => seedConfig("skills-cli-funnel"),
|
|
958
961
|
},
|
|
959
962
|
{
|
|
960
963
|
id: "google-analytics-web",
|
|
961
964
|
name: "Google Analytics Website",
|
|
962
965
|
description:
|
|
963
|
-
"GA4 traffic, engagement, acquisition, top pages, and
|
|
966
|
+
"Track GA4 website traffic, engagement, acquisition channels, top pages, geography, and browser/device mix.",
|
|
964
967
|
category: "Acquisition",
|
|
965
968
|
defaultDashboardId: "google-analytics",
|
|
966
969
|
dataSources: ["ga4"],
|
|
@@ -973,7 +976,7 @@ export const dashboardCatalogEntries: DashboardCatalogEntry[] = [
|
|
|
973
976
|
id: "node-exporter-macos",
|
|
974
977
|
name: "Node Exporter macOS",
|
|
975
978
|
description:
|
|
976
|
-
"
|
|
979
|
+
"Monitor macOS host CPU, memory, disk, filesystem, network, load, and Homebrew node_exporter health from Prometheus.",
|
|
977
980
|
category: "Observability",
|
|
978
981
|
defaultDashboardId: "node-exporter-macos",
|
|
979
982
|
dataSources: ["prometheus"],
|
|
@@ -987,7 +990,7 @@ export const dashboardCatalogEntries: DashboardCatalogEntry[] = [
|
|
|
987
990
|
id: "node-exporter-full",
|
|
988
991
|
name: "Node Exporter Full",
|
|
989
992
|
description:
|
|
990
|
-
"Linux
|
|
993
|
+
"Monitor Linux host CPU, memory, disk, filesystem, network, and load, plus Prometheus demo-app traffic and latency panels.",
|
|
991
994
|
category: "Observability",
|
|
992
995
|
defaultDashboardId: "node-exporter-full",
|
|
993
996
|
dataSources: ["prometheus"],
|
|
@@ -1050,31 +1053,37 @@ export async function listDashboardCatalog(
|
|
|
1050
1053
|
hidden: "all",
|
|
1051
1054
|
});
|
|
1052
1055
|
|
|
1053
|
-
return dashboardCatalogEntries
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1056
|
+
return dashboardCatalogEntries
|
|
1057
|
+
.filter((entry) => entry.visibleInCatalog !== false)
|
|
1058
|
+
.map((entry) => {
|
|
1059
|
+
const installedDashboards = dashboards
|
|
1060
|
+
.filter((row) => installedDashboardForTemplate(row, entry))
|
|
1061
|
+
.map((row) => ({
|
|
1062
|
+
id: row.id,
|
|
1063
|
+
name:
|
|
1064
|
+
typeof row.config.name === "string" && row.config.name.trim()
|
|
1065
|
+
? row.config.name
|
|
1066
|
+
: row.title,
|
|
1067
|
+
visibility: row.visibility,
|
|
1068
|
+
updatedAt: row.updatedAt,
|
|
1069
|
+
archivedAt: row.archivedAt,
|
|
1070
|
+
}))
|
|
1071
|
+
.sort(
|
|
1072
|
+
(a, b) =>
|
|
1073
|
+
new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime(),
|
|
1074
|
+
);
|
|
1070
1075
|
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1076
|
+
const {
|
|
1077
|
+
buildConfig: _buildConfig,
|
|
1078
|
+
visibleInCatalog: _visibleInCatalog,
|
|
1079
|
+
...metadata
|
|
1080
|
+
} = entry;
|
|
1081
|
+
return {
|
|
1082
|
+
...metadata,
|
|
1083
|
+
installedDashboards,
|
|
1084
|
+
installed: installedDashboards.length > 0,
|
|
1085
|
+
};
|
|
1086
|
+
});
|
|
1078
1087
|
}
|
|
1079
1088
|
|
|
1080
1089
|
export function applyCatalogMetadata(
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ChangelogSettingsCard,
|
|
3
3
|
LanguagePicker,
|
|
4
|
+
SettingsTabsPage,
|
|
4
5
|
agentNativePath,
|
|
5
6
|
openAgentSettings,
|
|
6
7
|
useActionQuery,
|
|
@@ -13,6 +14,7 @@ import {
|
|
|
13
14
|
type OnboardingMethod,
|
|
14
15
|
type OnboardingStepStatus,
|
|
15
16
|
} from "@agent-native/core/client/onboarding";
|
|
17
|
+
import { TeamPage } from "@agent-native/core/client/org";
|
|
16
18
|
import {
|
|
17
19
|
IconAlertCircle,
|
|
18
20
|
IconCheck,
|
|
@@ -81,51 +83,71 @@ export default function SettingsPage() {
|
|
|
81
83
|
<PageShell
|
|
82
84
|
title={t("settings.title")}
|
|
83
85
|
description={t("settings.description")}
|
|
84
|
-
className="max-w-
|
|
86
|
+
className="max-w-5xl"
|
|
85
87
|
>
|
|
86
|
-
<
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
88
|
+
<SettingsTabsPage
|
|
89
|
+
teamLabel={t("team.title")}
|
|
90
|
+
general={
|
|
91
|
+
<div className="mx-auto w-full max-w-2xl space-y-6">
|
|
92
|
+
<div>
|
|
93
|
+
<h2 className="text-lg font-semibold tracking-tight">
|
|
94
|
+
{t("settings.connections")}
|
|
95
|
+
</h2>
|
|
96
|
+
<p className="mt-1 text-sm leading-6 text-muted-foreground">
|
|
97
|
+
{t("settings.connectionsDescription")}
|
|
98
|
+
</p>
|
|
99
|
+
</div>
|
|
98
100
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
101
|
+
<Card>
|
|
102
|
+
<CardHeader>
|
|
103
|
+
<CardTitle className="text-base">
|
|
104
|
+
{t("settings.languageTitle")}
|
|
105
|
+
</CardTitle>
|
|
106
|
+
<CardDescription>
|
|
107
|
+
{t("settings.languageDescription")}
|
|
108
|
+
</CardDescription>
|
|
109
|
+
</CardHeader>
|
|
110
|
+
<CardContent className="max-w-xs space-y-1.5">
|
|
111
|
+
<Label>{t("settings.languageLabel")}</Label>
|
|
112
|
+
<LanguagePicker label={t("settings.languageLabel")} />
|
|
113
|
+
</CardContent>
|
|
114
|
+
</Card>
|
|
115
|
+
|
|
116
|
+
<Card>
|
|
117
|
+
<CardHeader>
|
|
118
|
+
<CardTitle className="text-base">
|
|
119
|
+
{t("settings.agentTitle")}
|
|
120
|
+
</CardTitle>
|
|
121
|
+
<CardDescription>
|
|
122
|
+
{t("settings.agentDescription")}
|
|
123
|
+
</CardDescription>
|
|
124
|
+
</CardHeader>
|
|
125
|
+
<CardContent>
|
|
126
|
+
<Button variant="outline" onClick={() => openAgentSettings()}>
|
|
127
|
+
{t("settings.openAgentSettings")}
|
|
128
|
+
</Button>
|
|
129
|
+
</CardContent>
|
|
130
|
+
</Card>
|
|
131
|
+
|
|
132
|
+
<section id="asset-generation-setup" className="scroll-mt-4">
|
|
133
|
+
<AssetsSetupCard libraryCount={data?.count ?? 0} />
|
|
134
|
+
</section>
|
|
135
|
+
</div>
|
|
136
|
+
}
|
|
137
|
+
team={
|
|
138
|
+
<div className="mx-auto w-full max-w-2xl">
|
|
139
|
+
<TeamPage
|
|
140
|
+
showTitle={false}
|
|
141
|
+
createOrgDescription={t("team.createOrgDescription")}
|
|
142
|
+
/>
|
|
143
|
+
</div>
|
|
144
|
+
}
|
|
145
|
+
whatsNew={
|
|
146
|
+
<div className="mx-auto w-full max-w-2xl">
|
|
147
|
+
<ChangelogSettingsCard markdown={changelog} />
|
|
148
|
+
</div>
|
|
149
|
+
}
|
|
150
|
+
/>
|
|
129
151
|
</PageShell>
|
|
130
152
|
);
|
|
131
153
|
}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { TeamPage } from "@agent-native/core/client/org";
|
|
1
|
+
import { Navigate } from "react-router";
|
|
3
2
|
|
|
4
|
-
import { useSetPageTitle } from "@/components/layout/HeaderActions";
|
|
5
3
|
import { messagesByLocale } from "@/i18n-data";
|
|
6
4
|
|
|
7
5
|
export function meta() {
|
|
@@ -9,11 +7,5 @@ export function meta() {
|
|
|
9
7
|
}
|
|
10
8
|
|
|
11
9
|
export default function TeamRoute() {
|
|
12
|
-
|
|
13
|
-
useSetPageTitle(t("team.title"));
|
|
14
|
-
return (
|
|
15
|
-
<main className="mx-auto w-full max-w-3xl px-4 py-6 sm:px-6 sm:py-10">
|
|
16
|
-
<TeamPage createOrgDescription={t("team.createOrgDescription")} />
|
|
17
|
-
</main>
|
|
18
|
-
);
|
|
10
|
+
return <Navigate to="/settings#team" replace />;
|
|
19
11
|
}
|