@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
|
@@ -4,6 +4,10 @@ import {
|
|
|
4
4
|
listOAuthAccountsByOwner,
|
|
5
5
|
saveOAuthTokens,
|
|
6
6
|
} from "@agent-native/core/oauth-tokens";
|
|
7
|
+
import {
|
|
8
|
+
resolveSecret,
|
|
9
|
+
runWithRequestContext,
|
|
10
|
+
} from "@agent-native/core/server";
|
|
7
11
|
|
|
8
12
|
const TOKEN_URL = "https://oauth2.googleapis.com/token";
|
|
9
13
|
const AUTH_URL = "https://accounts.google.com/o/oauth2/v2/auth";
|
|
@@ -35,42 +39,58 @@ interface GoogleOAuthCredentials {
|
|
|
35
39
|
clientSecret: string;
|
|
36
40
|
}
|
|
37
41
|
|
|
38
|
-
function readCredentialPair(
|
|
42
|
+
async function readCredentialPair(
|
|
39
43
|
clientIdKey: string,
|
|
40
44
|
clientSecretKey: string,
|
|
41
|
-
): GoogleOAuthCredentials | null {
|
|
42
|
-
const clientId =
|
|
43
|
-
|
|
45
|
+
): Promise<GoogleOAuthCredentials | null> {
|
|
46
|
+
const [clientId, clientSecret] = await Promise.all([
|
|
47
|
+
resolveSecret(clientIdKey),
|
|
48
|
+
resolveSecret(clientSecretKey),
|
|
49
|
+
]);
|
|
44
50
|
if (!clientId || !clientSecret) return null;
|
|
45
51
|
return { clientId, clientSecret };
|
|
46
52
|
}
|
|
47
53
|
|
|
48
|
-
function resolveGoogleProviderCredentialCandidates(
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
54
|
+
async function resolveGoogleProviderCredentialCandidates(
|
|
55
|
+
owner?: string,
|
|
56
|
+
): Promise<GoogleOAuthCredentials[]> {
|
|
57
|
+
const resolve = async () => {
|
|
58
|
+
const primary = await readCredentialPair(
|
|
59
|
+
"GOOGLE_CLIENT_ID",
|
|
60
|
+
"GOOGLE_CLIENT_SECRET",
|
|
61
|
+
);
|
|
62
|
+
const legacy = await readCredentialPair(
|
|
63
|
+
"GOOGLE_LEGACY_CLIENT_ID",
|
|
64
|
+
"GOOGLE_LEGACY_CLIENT_SECRET",
|
|
65
|
+
);
|
|
66
|
+
if (!primary) return legacy ? [legacy] : [];
|
|
67
|
+
if (!legacy || legacy.clientId === primary.clientId) return [primary];
|
|
68
|
+
return [primary, legacy];
|
|
69
|
+
};
|
|
70
|
+
return owner
|
|
71
|
+
? runWithRequestContext({ userEmail: owner }, resolve)
|
|
72
|
+
: await resolve();
|
|
60
73
|
}
|
|
61
74
|
|
|
62
|
-
function getOAuthCredentials(
|
|
63
|
-
|
|
75
|
+
async function getOAuthCredentials(owner?: string): Promise<{
|
|
76
|
+
clientId: string;
|
|
77
|
+
clientSecret: string;
|
|
78
|
+
}> {
|
|
79
|
+
const credentials = (
|
|
80
|
+
await resolveGoogleProviderCredentialCandidates(owner)
|
|
81
|
+
)[0];
|
|
64
82
|
if (!credentials) {
|
|
65
83
|
throw new Error(
|
|
66
|
-
"Google OAuth is not configured.
|
|
84
|
+
"Google OAuth is not configured. Save GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET in settings.",
|
|
67
85
|
);
|
|
68
86
|
}
|
|
69
87
|
return credentials;
|
|
70
88
|
}
|
|
71
89
|
|
|
72
|
-
export function isGoogleDocsOAuthConfigured(
|
|
73
|
-
|
|
90
|
+
export async function isGoogleDocsOAuthConfigured(
|
|
91
|
+
owner?: string,
|
|
92
|
+
): Promise<boolean> {
|
|
93
|
+
return (await resolveGoogleProviderCredentialCandidates(owner)).length > 0;
|
|
74
94
|
}
|
|
75
95
|
|
|
76
96
|
function isPermanentGoogleRefreshError(error: string | undefined): boolean {
|
|
@@ -81,29 +101,33 @@ function isPermanentGoogleRefreshError(error: string | undefined): boolean {
|
|
|
81
101
|
);
|
|
82
102
|
}
|
|
83
103
|
|
|
84
|
-
export function getGooglePickerConfig(): {
|
|
104
|
+
export async function getGooglePickerConfig(owner?: string): Promise<{
|
|
85
105
|
apiKey: string | null;
|
|
86
106
|
appId: string | null;
|
|
87
|
-
} {
|
|
88
|
-
|
|
107
|
+
}> {
|
|
108
|
+
const resolve = async () => ({
|
|
89
109
|
apiKey:
|
|
90
|
-
|
|
91
|
-
|
|
110
|
+
(await resolveSecret("GOOGLE_PICKER_API_KEY")) ||
|
|
111
|
+
(await resolveSecret("GOOGLE_API_KEY")) ||
|
|
92
112
|
process.env.VITE_GOOGLE_PICKER_API_KEY ||
|
|
93
113
|
null,
|
|
94
114
|
appId:
|
|
95
|
-
|
|
96
|
-
|
|
115
|
+
(await resolveSecret("GOOGLE_PICKER_APP_ID")) ||
|
|
116
|
+
(await resolveSecret("GOOGLE_PROJECT_NUMBER")) ||
|
|
97
117
|
process.env.VITE_GOOGLE_PICKER_APP_ID ||
|
|
98
118
|
null,
|
|
99
|
-
};
|
|
119
|
+
});
|
|
120
|
+
return owner
|
|
121
|
+
? runWithRequestContext({ userEmail: owner }, resolve)
|
|
122
|
+
: await resolve();
|
|
100
123
|
}
|
|
101
124
|
|
|
102
|
-
export function getGoogleDocsAuthUrl(
|
|
125
|
+
export async function getGoogleDocsAuthUrl(
|
|
103
126
|
redirectUri: string,
|
|
104
127
|
state: string,
|
|
105
|
-
|
|
106
|
-
|
|
128
|
+
owner?: string,
|
|
129
|
+
): Promise<string> {
|
|
130
|
+
const { clientId } = await getOAuthCredentials(owner);
|
|
107
131
|
const params = new URLSearchParams({
|
|
108
132
|
client_id: clientId,
|
|
109
133
|
redirect_uri: redirectUri,
|
|
@@ -134,7 +158,8 @@ async function refreshGoogleDocsToken(
|
|
|
134
158
|
throw new Error("Google Docs connection expired. Please reconnect.");
|
|
135
159
|
}
|
|
136
160
|
|
|
137
|
-
const credentialCandidates =
|
|
161
|
+
const credentialCandidates =
|
|
162
|
+
await resolveGoogleProviderCredentialCandidates(owner);
|
|
138
163
|
let data: {
|
|
139
164
|
access_token?: string;
|
|
140
165
|
expires_in?: number;
|
|
@@ -217,7 +242,7 @@ export async function exchangeGoogleDocsCode(opts: {
|
|
|
217
242
|
redirectUri: string;
|
|
218
243
|
owner: string;
|
|
219
244
|
}): Promise<{ email: string; name?: string }> {
|
|
220
|
-
const { clientId, clientSecret } = getOAuthCredentials();
|
|
245
|
+
const { clientId, clientSecret } = await getOAuthCredentials(opts.owner);
|
|
221
246
|
const response = await fetch(TOKEN_URL, {
|
|
222
247
|
method: "POST",
|
|
223
248
|
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
@@ -73,3 +73,63 @@ registerRequiredSecret({
|
|
|
73
73
|
}
|
|
74
74
|
},
|
|
75
75
|
});
|
|
76
|
+
|
|
77
|
+
registerRequiredSecret({
|
|
78
|
+
key: "GOOGLE_API_KEY",
|
|
79
|
+
label: "Google API Key",
|
|
80
|
+
description: "Required for image search with Google Custom Search.",
|
|
81
|
+
docsUrl: "https://console.cloud.google.com/apis/credentials",
|
|
82
|
+
scope: "user",
|
|
83
|
+
kind: "api-key",
|
|
84
|
+
required: false,
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
registerRequiredSecret({
|
|
88
|
+
key: "GOOGLE_SEARCH_CX",
|
|
89
|
+
label: "Google Search Engine ID",
|
|
90
|
+
description: "Required with GOOGLE_API_KEY for image search.",
|
|
91
|
+
docsUrl: "https://programmablesearchengine.google.com/controlpanel/all",
|
|
92
|
+
scope: "user",
|
|
93
|
+
kind: "api-key",
|
|
94
|
+
required: false,
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
registerRequiredSecret({
|
|
98
|
+
key: "GOOGLE_CLIENT_ID",
|
|
99
|
+
label: "Google OAuth Client ID",
|
|
100
|
+
description: "Required for Google Docs import.",
|
|
101
|
+
docsUrl: "https://console.cloud.google.com/apis/credentials",
|
|
102
|
+
scope: "user",
|
|
103
|
+
kind: "api-key",
|
|
104
|
+
required: false,
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
registerRequiredSecret({
|
|
108
|
+
key: "GOOGLE_CLIENT_SECRET",
|
|
109
|
+
label: "Google OAuth Client Secret",
|
|
110
|
+
description: "Required for Google Docs import.",
|
|
111
|
+
docsUrl: "https://console.cloud.google.com/apis/credentials",
|
|
112
|
+
scope: "user",
|
|
113
|
+
kind: "api-key",
|
|
114
|
+
required: false,
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
registerRequiredSecret({
|
|
118
|
+
key: "GOOGLE_PICKER_API_KEY",
|
|
119
|
+
label: "Google Picker API Key",
|
|
120
|
+
description: "Required for the Google Docs picker.",
|
|
121
|
+
docsUrl: "https://console.cloud.google.com/apis/credentials",
|
|
122
|
+
scope: "user",
|
|
123
|
+
kind: "api-key",
|
|
124
|
+
required: false,
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
registerRequiredSecret({
|
|
128
|
+
key: "GOOGLE_PICKER_APP_ID",
|
|
129
|
+
label: "Google Picker App ID",
|
|
130
|
+
description: "Required for the Google Docs picker.",
|
|
131
|
+
docsUrl: "https://console.cloud.google.com/apis/credentials",
|
|
132
|
+
scope: "user",
|
|
133
|
+
kind: "api-key",
|
|
134
|
+
required: false,
|
|
135
|
+
});
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import fs from "fs";
|
|
2
|
-
import path from "path";
|
|
3
|
-
|
|
4
1
|
function parseArgs(args: string[]): Record<string, string> {
|
|
5
2
|
const result: Record<string, string> = {};
|
|
6
3
|
for (let i = 0; i < args.length; i++) {
|
|
@@ -19,24 +16,6 @@ function parseArgs(args: string[]): Record<string, string> {
|
|
|
19
16
|
return result;
|
|
20
17
|
}
|
|
21
18
|
|
|
22
|
-
function upsertEnvLine(lines: string[], key: string, value: string): string[] {
|
|
23
|
-
// Reject values with newlines, carriage returns, or null bytes
|
|
24
|
-
if (/[\r\n\0]/.test(value)) {
|
|
25
|
-
throw new Error(
|
|
26
|
-
`Invalid value for ${key}: must not contain newlines or null bytes`,
|
|
27
|
-
);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const idx = lines.findIndex((l) => l.startsWith(`${key}=`));
|
|
31
|
-
const line = `${key}=${value}`;
|
|
32
|
-
if (idx >= 0) {
|
|
33
|
-
lines[idx] = line;
|
|
34
|
-
} else {
|
|
35
|
-
lines.push(line);
|
|
36
|
-
}
|
|
37
|
-
return lines;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
19
|
export default async function main(args: string[]) {
|
|
41
20
|
const { url, token, help } = parseArgs(args);
|
|
42
21
|
|
|
@@ -44,7 +23,9 @@ export default async function main(args: string[]) {
|
|
|
44
23
|
console.log(
|
|
45
24
|
"Usage: pnpm action db-connect --url <DATABASE_URL> [--token <DATABASE_AUTH_TOKEN>]",
|
|
46
25
|
);
|
|
47
|
-
console.log(
|
|
26
|
+
console.log(
|
|
27
|
+
"\nDATABASE_URL and DATABASE_AUTH_TOKEN are deployment-level settings.",
|
|
28
|
+
);
|
|
48
29
|
return;
|
|
49
30
|
}
|
|
50
31
|
|
|
@@ -53,31 +34,12 @@ export default async function main(args: string[]) {
|
|
|
53
34
|
throw new Error("Script failed");
|
|
54
35
|
}
|
|
55
36
|
|
|
56
|
-
|
|
57
|
-
let lines: string[] = [];
|
|
58
|
-
|
|
59
|
-
if (fs.existsSync(envPath)) {
|
|
60
|
-
lines = fs.readFileSync(envPath, "utf8").split("\n");
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
try {
|
|
64
|
-
upsertEnvLine(lines, "DATABASE_URL", url);
|
|
65
|
-
if (token) {
|
|
66
|
-
upsertEnvLine(lines, "DATABASE_AUTH_TOKEN", token);
|
|
67
|
-
}
|
|
68
|
-
} catch (err) {
|
|
69
|
-
console.error(
|
|
70
|
-
`Error: ${err instanceof Error ? err.message : "Invalid value"}`,
|
|
71
|
-
);
|
|
72
|
-
throw new Error("Script failed");
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
fs.writeFileSync(envPath, lines.join("\n"));
|
|
76
|
-
|
|
77
|
-
console.log(`\nDatabase connection saved to .env`);
|
|
37
|
+
console.log(`\nDatabase connection not written locally`);
|
|
78
38
|
console.log(
|
|
79
39
|
` DATABASE_URL=${url.startsWith("file:") ? url : url.replace(/\/\/.*@/, "//***@")}`,
|
|
80
40
|
);
|
|
81
41
|
if (token) console.log(` DATABASE_AUTH_TOKEN=***`);
|
|
82
|
-
console.log(
|
|
42
|
+
console.log(
|
|
43
|
+
`\nConfigure these as deployment environment variables with your host, then redeploy.`,
|
|
44
|
+
);
|
|
83
45
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useT } from "@agent-native/core/client";
|
|
2
2
|
import {
|
|
3
3
|
IconX,
|
|
4
4
|
IconCheck,
|
|
@@ -106,63 +106,20 @@ export function CloudUpgrade({
|
|
|
106
106
|
connectingRef.current = true;
|
|
107
107
|
|
|
108
108
|
if (!dbUrl.trim()) {
|
|
109
|
-
setErrorMsg(
|
|
109
|
+
setErrorMsg(
|
|
110
|
+
"Database settings are deployment-level. Configure DATABASE_URL with your host and redeploy the app.",
|
|
111
|
+
);
|
|
110
112
|
setStatus("error");
|
|
111
113
|
connectingRef.current = false;
|
|
112
114
|
return;
|
|
113
115
|
}
|
|
114
116
|
|
|
115
117
|
try {
|
|
116
|
-
setStatus("
|
|
118
|
+
setStatus("error");
|
|
117
119
|
setErrorMsg("");
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
];
|
|
122
|
-
if (authToken.trim()) {
|
|
123
|
-
vars.push({ key: "DATABASE_AUTH_TOKEN", value: authToken.trim() });
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
const saveRes = await fetch(agentNativePath("/_agent-native/env-vars"), {
|
|
127
|
-
method: "POST",
|
|
128
|
-
headers: { "Content-Type": "application/json" },
|
|
129
|
-
body: JSON.stringify({ vars }),
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
if (!saveRes.ok) {
|
|
133
|
-
const data = await saveRes.json().catch(() => ({}));
|
|
134
|
-
throw new Error(data.error || "Failed to save credentials");
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
// Poll db-health until it returns ok
|
|
138
|
-
setStatus("polling");
|
|
139
|
-
let ok = false;
|
|
140
|
-
for (let i = 0; i < 30; i++) {
|
|
141
|
-
await new Promise((r) => setTimeout(r, 1000));
|
|
142
|
-
try {
|
|
143
|
-
const healthRes = await fetch(
|
|
144
|
-
agentNativePath("/_agent-native/actions/db-health"),
|
|
145
|
-
);
|
|
146
|
-
const health = await healthRes.json();
|
|
147
|
-
if (health.ok && health.local === false) {
|
|
148
|
-
ok = true;
|
|
149
|
-
break;
|
|
150
|
-
}
|
|
151
|
-
} catch {
|
|
152
|
-
// Keep polling
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
if (!ok) {
|
|
157
|
-
throw new Error(
|
|
158
|
-
"Database connection failed after 30 attempts. Check your credentials.",
|
|
159
|
-
);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
setStatus("success");
|
|
163
|
-
setTimeout(() => {
|
|
164
|
-
window.location.reload();
|
|
165
|
-
}, 1500);
|
|
120
|
+
throw new Error(
|
|
121
|
+
"Database settings are deployment-level. Configure DATABASE_URL and DATABASE_AUTH_TOKEN with your host, redeploy, then check sharing again.",
|
|
122
|
+
);
|
|
166
123
|
} catch (e) {
|
|
167
124
|
setErrorMsg(
|
|
168
125
|
e instanceof Error ? e.message : t("raw.cloud.connectionFailed"),
|
|
@@ -16,7 +16,6 @@ import {
|
|
|
16
16
|
IconVideo,
|
|
17
17
|
IconComponents,
|
|
18
18
|
IconPalette,
|
|
19
|
-
IconUsers,
|
|
20
19
|
IconFolderPlus,
|
|
21
20
|
} from "@tabler/icons-react";
|
|
22
21
|
import { useState, useEffect, useRef } from "react";
|
|
@@ -238,8 +237,7 @@ export function Sidebar({
|
|
|
238
237
|
href: "/",
|
|
239
238
|
active:
|
|
240
239
|
!location.pathname.startsWith("/components") &&
|
|
241
|
-
!location.pathname.startsWith("/design-systems")
|
|
242
|
-
!location.pathname.startsWith("/team"),
|
|
240
|
+
!location.pathname.startsWith("/design-systems"),
|
|
243
241
|
},
|
|
244
242
|
{
|
|
245
243
|
icon: IconComponents,
|
|
@@ -253,12 +251,6 @@ export function Sidebar({
|
|
|
253
251
|
href: "/design-systems",
|
|
254
252
|
active: location.pathname.startsWith("/design-systems"),
|
|
255
253
|
},
|
|
256
|
-
{
|
|
257
|
-
icon: IconUsers,
|
|
258
|
-
labelKey: "navigation.team",
|
|
259
|
-
href: "/team",
|
|
260
|
-
active: location.pathname === "/team",
|
|
261
|
-
},
|
|
262
254
|
];
|
|
263
255
|
|
|
264
256
|
return (
|
|
@@ -11,7 +11,6 @@ import {
|
|
|
11
11
|
IconComponents,
|
|
12
12
|
IconPalette,
|
|
13
13
|
IconSettings,
|
|
14
|
-
IconUsers,
|
|
15
14
|
} from "@tabler/icons-react";
|
|
16
15
|
import { Link, useLocation } from "react-router";
|
|
17
16
|
|
|
@@ -30,7 +29,6 @@ const navItems = [
|
|
|
30
29
|
href: "/design-systems",
|
|
31
30
|
},
|
|
32
31
|
{ icon: IconSettings, labelKey: "navigation.settings", href: "/settings" },
|
|
33
|
-
{ icon: IconUsers, labelKey: "navigation.team", href: "/team" },
|
|
34
32
|
];
|
|
35
33
|
|
|
36
34
|
export function NavSidebar() {
|
|
@@ -65,7 +63,6 @@ export function NavSidebar() {
|
|
|
65
63
|
? !location.pathname.startsWith("/components") &&
|
|
66
64
|
!location.pathname.startsWith("/design-systems") &&
|
|
67
65
|
!location.pathname.startsWith("/settings") &&
|
|
68
|
-
!location.pathname.startsWith("/team") &&
|
|
69
66
|
!location.pathname.startsWith("/extensions")
|
|
70
67
|
: location.pathname.startsWith(item.href);
|
|
71
68
|
return (
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ChangelogSettingsCard,
|
|
3
3
|
LanguagePicker,
|
|
4
|
+
SettingsTabsPage,
|
|
4
5
|
openAgentSettings,
|
|
5
6
|
useT,
|
|
6
7
|
} from "@agent-native/core/client";
|
|
7
|
-
import {
|
|
8
|
+
import { TeamPage } from "@agent-native/core/client/org";
|
|
8
9
|
|
|
9
10
|
import { useSetPageTitle } from "@/components/layout/HeaderActions";
|
|
10
11
|
import { Button } from "@/components/ui/button";
|
|
@@ -29,60 +30,59 @@ export default function SettingsRoute() {
|
|
|
29
30
|
useSetPageTitle(t("settings.title"));
|
|
30
31
|
|
|
31
32
|
return (
|
|
32
|
-
<
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
</p>
|
|
40
|
-
</div>
|
|
33
|
+
<SettingsTabsPage
|
|
34
|
+
teamLabel={t("navigation.team")}
|
|
35
|
+
general={
|
|
36
|
+
<div className="mx-auto w-full max-w-3xl space-y-6">
|
|
37
|
+
<p className="text-sm leading-6 text-muted-foreground">
|
|
38
|
+
{t("settings.description")}
|
|
39
|
+
</p>
|
|
41
40
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
41
|
+
<Card>
|
|
42
|
+
<CardHeader>
|
|
43
|
+
<CardTitle className="text-base">
|
|
44
|
+
{t("settings.languageTitle")}
|
|
45
|
+
</CardTitle>
|
|
46
|
+
<CardDescription>
|
|
47
|
+
{t("settings.languageDescription")}
|
|
48
|
+
</CardDescription>
|
|
49
|
+
</CardHeader>
|
|
50
|
+
<CardContent className="max-w-xs space-y-1.5">
|
|
51
|
+
<Label>{t("settings.languageLabel")}</Label>
|
|
52
|
+
<LanguagePicker label={t("settings.languageLabel")} />
|
|
53
|
+
</CardContent>
|
|
54
|
+
</Card>
|
|
54
55
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
</main>
|
|
56
|
+
<Card>
|
|
57
|
+
<CardHeader>
|
|
58
|
+
<CardTitle className="text-base">
|
|
59
|
+
{t("settings.agentTitle")}
|
|
60
|
+
</CardTitle>
|
|
61
|
+
<CardDescription>
|
|
62
|
+
{t("settings.agentDescription")}
|
|
63
|
+
</CardDescription>
|
|
64
|
+
</CardHeader>
|
|
65
|
+
<CardContent>
|
|
66
|
+
<Button variant="outline" onClick={() => openAgentSettings()}>
|
|
67
|
+
{t("settings.openAgentSettings")}
|
|
68
|
+
</Button>
|
|
69
|
+
</CardContent>
|
|
70
|
+
</Card>
|
|
71
|
+
</div>
|
|
72
|
+
}
|
|
73
|
+
team={
|
|
74
|
+
<div className="mx-auto w-full max-w-3xl">
|
|
75
|
+
<TeamPage
|
|
76
|
+
showTitle={false}
|
|
77
|
+
createOrgDescription="Set up a team to share compositions and animations with your colleagues."
|
|
78
|
+
/>
|
|
79
|
+
</div>
|
|
80
|
+
}
|
|
81
|
+
whatsNew={
|
|
82
|
+
<div className="mx-auto w-full max-w-3xl">
|
|
83
|
+
<ChangelogSettingsCard markdown={changelog} />
|
|
84
|
+
</div>
|
|
85
|
+
}
|
|
86
|
+
/>
|
|
87
87
|
);
|
|
88
88
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Navigate } from "react-router";
|
|
2
2
|
|
|
3
|
-
import { useSetPageTitle } from "@/components/layout/HeaderActions";
|
|
4
3
|
import enUS from "@/i18n/en-US";
|
|
5
4
|
|
|
6
5
|
export function meta() {
|
|
@@ -8,10 +7,5 @@ export function meta() {
|
|
|
8
7
|
}
|
|
9
8
|
|
|
10
9
|
export default function TeamRoute() {
|
|
11
|
-
|
|
12
|
-
return (
|
|
13
|
-
<main className="max-w-3xl mx-auto px-4 sm:px-6 py-6 sm:py-10">
|
|
14
|
-
<TeamPage createOrgDescription="Set up a team to share compositions and animations with your colleagues." />
|
|
15
|
-
</main>
|
|
16
|
-
);
|
|
10
|
+
return <Navigate to="/settings#team" replace />;
|
|
17
11
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder-engine.d.ts","sourceRoot":"","sources":["../../../src/agent/engine/builder-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAwBH,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAInB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,oBAAoB,EAAE,kBAMlC,CAAC;AAEF,eAAO,MAAM,wBAAwB,kNAAuC,CAAC;AAW7E,eAAO,MAAM,qBAAqB,qBAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"builder-engine.d.ts","sourceRoot":"","sources":["../../../src/agent/engine/builder-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAwBH,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAInB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,oBAAoB,EAAE,kBAMlC,CAAC;AAEF,eAAO,MAAM,wBAAwB,kNAAuC,CAAC;AAW7E,eAAO,MAAM,qBAAqB,qBAAoC,CAAC;AAorBvE,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACpC,WAAW,CAEb"}
|
|
@@ -68,11 +68,16 @@ function mapReasoningEffort(budgetTokens) {
|
|
|
68
68
|
* `/app/organizations/Nicholas%20kipchumba%20Space/billing` which Builder's
|
|
69
69
|
* router treats as unknown and silently bounces to `/app/projects`. The
|
|
70
70
|
* Builder CLI-auth callback doesn't expose the org slug/id today, so we route
|
|
71
|
-
* to the org-agnostic
|
|
72
|
-
*
|
|
71
|
+
* to the org-agnostic subscription page. Agent Native attribution lets Builder
|
|
72
|
+
* skip generic onboarding for new users who land there from an upgrade CTA.
|
|
73
73
|
*/
|
|
74
74
|
async function buildUpgradeUrl() {
|
|
75
|
-
|
|
75
|
+
const url = new URL("https://builder.io/account/subscription");
|
|
76
|
+
url.searchParams.set("signupSource", "agent-native");
|
|
77
|
+
url.searchParams.set("agentNativeConnectSource", "gateway_quota_upgrade");
|
|
78
|
+
url.searchParams.set("agentNativeFlow", "connect_llm");
|
|
79
|
+
url.searchParams.set("framework", "agent-native");
|
|
80
|
+
return url.toString();
|
|
76
81
|
}
|
|
77
82
|
class BuilderEngine {
|
|
78
83
|
name = "builder";
|