@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
package/corpus/README.md
CHANGED
package/corpus/core/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @agent-native/core
|
|
2
2
|
|
|
3
|
+
## 0.79.19
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 92876ad: Use a compact popover for the shared language picker so icon-only chrome can style it reliably.
|
|
8
|
+
|
|
9
|
+
## 0.79.18
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- a6492db: Quiet app-shell divider lines, taller center headers, and soften raised drawer/card surfaces in dark mode.
|
|
14
|
+
- a6492db: Save legacy key setup requests to scoped DB secrets instead of writing deployment env vars, and let file upload providers resolve request-scoped credentials.
|
|
15
|
+
- a6492db: Add a reusable settings tab shell and let team settings hide their duplicate panel title.
|
|
16
|
+
|
|
3
17
|
## 0.79.17
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
|
@@ -54,22 +54,28 @@ Register a custom provider in a server plugin to use any storage backend (S3, Cl
|
|
|
54
54
|
```ts
|
|
55
55
|
// server/plugins/file-upload.ts
|
|
56
56
|
import { registerFileUploadProvider } from "@agent-native/core/file-upload";
|
|
57
|
+
import { resolveSecret } from "@agent-native/core/server";
|
|
57
58
|
|
|
58
59
|
export default defineNitroPlugin(() => {
|
|
60
|
+
const readBucket = () => resolveSecret("S3_BUCKET");
|
|
61
|
+
|
|
59
62
|
registerFileUploadProvider({
|
|
60
63
|
id: "s3",
|
|
61
64
|
name: "Amazon S3",
|
|
62
|
-
isConfigured: () =>
|
|
65
|
+
isConfigured: () => false,
|
|
66
|
+
isConfiguredForRequest: async () => !!(await readBucket()),
|
|
63
67
|
upload: async ({ data, filename, mimeType }) => {
|
|
68
|
+
const bucket = await readBucket();
|
|
69
|
+
if (!bucket) throw new Error("S3 storage is not configured");
|
|
64
70
|
const key = `uploads/${Date.now()}-${filename}`;
|
|
65
71
|
await s3Client.putObject({
|
|
66
|
-
Bucket:
|
|
72
|
+
Bucket: bucket,
|
|
67
73
|
Key: key,
|
|
68
74
|
Body: data,
|
|
69
75
|
ContentType: mimeType,
|
|
70
76
|
});
|
|
71
77
|
return {
|
|
72
|
-
url: `https://${
|
|
78
|
+
url: `https://${bucket}.s3.amazonaws.com/${key}`,
|
|
73
79
|
provider: "s3",
|
|
74
80
|
};
|
|
75
81
|
},
|
|
@@ -85,7 +91,8 @@ The `FileUploadProvider` interface:
|
|
|
85
91
|
interface FileUploadProvider {
|
|
86
92
|
id: string; // Unique id, e.g. "s3"
|
|
87
93
|
name: string; // Human-readable name
|
|
88
|
-
isConfigured: () => boolean; // True when ready
|
|
94
|
+
isConfigured: () => boolean; // True when ready from sync runtime state
|
|
95
|
+
isConfiguredForRequest?: () => Promise<boolean>; // True from scoped DB secrets
|
|
89
96
|
upload: (input: FileUploadInput) => Promise<FileUploadResult>;
|
|
90
97
|
}
|
|
91
98
|
|
|
@@ -168,7 +168,7 @@ pnpm dev
|
|
|
168
168
|
|
|
169
169
|
## متغيرات البيئة المشتركة {#shared-env}
|
|
170
170
|
|
|
171
|
-
|
|
171
|
+
The workspace root `.env` is loaded into every app automatically for deployment-level configuration such as `A2A_SECRET`, `BETTER_AUTH_SECRET`, and `DATABASE_URL`. User, org, and workspace API keys should be saved as scoped DB secrets instead of being written into `.env`. Per-app deploy-time overrides can still go in `apps/<name>/.env` and win on conflict.
|
|
172
172
|
|
|
173
173
|
بالنسبة لبيانات اعتماد تطبيق وقت التشغيل، تفضل Dispatch vault على تحرير ملفات `.env` يدويًا. يتم تعيين الوصول الافتراضي للمخزن إلى جميع التطبيقات، لذلك يكون كل مفتاح مخزن محفوظ متاحًا لكل تطبيق مساحة عمل ويمكن دفعه باستخدام `sync-vault-to-app`. قم بتبديل المخزن إلى الوضع اليدوي فقط عندما تحتاج التطبيقات إلى منح صريحة لكل مفتاح.
|
|
174
174
|
|
|
@@ -182,8 +182,8 @@ my-company-platform/
|
|
|
182
182
|
|
|
183
183
|
هناك عدد قليل من عمليات الإعداد التي تكون جاهزة للاستخدام في مساحة العمل:
|
|
184
184
|
|
|
185
|
-
- **Builder `/cli-auth`**:
|
|
186
|
-
-
|
|
185
|
+
- **Builder `/cli-auth`**: clicking "Connect Builder" from any app writes `BUILDER_PRIVATE_KEY` and related metadata to scoped DB secrets, so every app can resolve the connection without sharing a deploy-global key.
|
|
186
|
+
- **Compatibility key route** (`POST /_agent-native/env-vars`): older onboarding forms still call this route name, but it now saves values as scoped DB secrets. Pass `scope: "workspace"` to share with the active org, or omit it for a per-user key.
|
|
187
187
|
|
|
188
188
|
## بيانات الاعتماد المشتركة {#shared-credentials}
|
|
189
189
|
|
|
@@ -168,7 +168,7 @@ Informationen zum Konfigurationsschema, zu den Prioritätsregeln und zur Hub-Ein
|
|
|
168
168
|
|
|
169
169
|
## Gemeinsame Umgebungsvariablen {#shared-env}
|
|
170
170
|
|
|
171
|
-
|
|
171
|
+
The workspace root `.env` is loaded into every app automatically for deployment-level configuration such as `A2A_SECRET`, `BETTER_AUTH_SECRET`, and `DATABASE_URL`. User, org, and workspace API keys should be saved as scoped DB secrets instead of being written into `.env`. Per-app deploy-time overrides can still go in `apps/<name>/.env` and win on conflict.
|
|
172
172
|
|
|
173
173
|
Für Laufzeit-App-Anmeldeinformationen bevorzugen Sie den Dispatch-Tresor gegenüber der manuellen Bearbeitung von `.env`-Dateien. Der Tresor ist standardmäßig auf den Zugriff aller Apps eingestellt, sodass jeder gespeicherte Tresorschlüssel für jede Workspace-App verfügbar ist und mit `sync-vault-to-app` übertragen werden kann. Schalten Sie den Tresor nur dann in den manuellen Modus, wenn Apps explizite Gewährung pro Schlüssel benötigen.
|
|
174
174
|
|
|
@@ -182,8 +182,8 @@ my-company-platform/
|
|
|
182
182
|
|
|
183
183
|
Einige Onboarding-Abläufe sind standardmäßig arbeitsbereichsorientiert:
|
|
184
184
|
|
|
185
|
-
- **Builder `/cli-auth`**:
|
|
186
|
-
- **
|
|
185
|
+
- **Builder `/cli-auth`**: clicking "Connect Builder" from any app writes `BUILDER_PRIVATE_KEY` and related metadata to scoped DB secrets, so every app can resolve the connection without sharing a deploy-global key.
|
|
186
|
+
- **Compatibility key route** (`POST /_agent-native/env-vars`): older onboarding forms still call this route name, but it now saves values as scoped DB secrets. Pass `scope: "workspace"` to share with the active org, or omit it for a per-user key.
|
|
187
187
|
|
|
188
188
|
## Gemeinsame Anmeldeinformationen {#shared-credentials}
|
|
189
189
|
|
|
@@ -168,7 +168,7 @@ Consulte [MCP Clients](/docs/mcp-clients) para conocer el esquema de configuraci
|
|
|
168
168
|
|
|
169
169
|
## Variables de entorno compartidas {#shared-env}
|
|
170
170
|
|
|
171
|
-
|
|
171
|
+
The workspace root `.env` is loaded into every app automatically for deployment-level configuration such as `A2A_SECRET`, `BETTER_AUTH_SECRET`, and `DATABASE_URL`. User, org, and workspace API keys should be saved as scoped DB secrets instead of being written into `.env`. Per-app deploy-time overrides can still go in `apps/<name>/.env` and win on conflict.
|
|
172
172
|
|
|
173
173
|
Para las credenciales de la aplicación en tiempo de ejecución, prefiera la bóveda de Dispatch a la edición manual de archivos `.env`. La bóveda tiene de forma predeterminada acceso a todas las aplicaciones, por lo que cada clave de bóveda guardada está disponible para todas las aplicaciones del espacio de trabajo y se puede enviar con `sync-vault-to-app`. Cambie la bóveda al modo manual solo cuando las aplicaciones necesiten concesiones explícitas por clave.
|
|
174
174
|
|
|
@@ -182,8 +182,8 @@ my-company-platform/
|
|
|
182
182
|
|
|
183
183
|
Algunos flujos de incorporación tienen en cuenta el espacio de trabajo desde el primer momento:
|
|
184
184
|
|
|
185
|
-
- **Builder `/cli-auth`**:
|
|
186
|
-
- **
|
|
185
|
+
- **Builder `/cli-auth`**: clicking "Connect Builder" from any app writes `BUILDER_PRIVATE_KEY` and related metadata to scoped DB secrets, so every app can resolve the connection without sharing a deploy-global key.
|
|
186
|
+
- **Compatibility key route** (`POST /_agent-native/env-vars`): older onboarding forms still call this route name, but it now saves values as scoped DB secrets. Pass `scope: "workspace"` to share with the active org, or omit it for a per-user key.
|
|
187
187
|
|
|
188
188
|
## Credenciales compartidas {#shared-credentials}
|
|
189
189
|
|
|
@@ -168,7 +168,7 @@ Voir [MCP Clients](/docs/mcp-clients) pour le schéma de configuration, les règ
|
|
|
168
168
|
|
|
169
169
|
## Variables d'environnement partagées {#shared-env}
|
|
170
170
|
|
|
171
|
-
|
|
171
|
+
The workspace root `.env` is loaded into every app automatically for deployment-level configuration such as `A2A_SECRET`, `BETTER_AUTH_SECRET`, and `DATABASE_URL`. User, org, and workspace API keys should be saved as scoped DB secrets instead of being written into `.env`. Per-app deploy-time overrides can still go in `apps/<name>/.env` and win on conflict.
|
|
172
172
|
|
|
173
173
|
Pour les informations d'identification de l'application d'exécution, préférez le coffre-fort Dispatch à la modification manuelle des fichiers `.env`. Le coffre-fort est par défaut un accès à toutes les applications, de sorte que chaque clé du coffre-fort enregistrée est disponible pour chaque application de l'espace de travail et peut être poussée avec `sync-vault-to-app`. Basculez le coffre-fort en mode manuel uniquement lorsque les applications ont besoin d'autorisations explicites par clé.
|
|
174
174
|
|
|
@@ -182,8 +182,8 @@ my-company-platform/
|
|
|
182
182
|
|
|
183
183
|
Quelques flux d'intégration sont prêts à l'emploi et adaptés à l'espace de travail :
|
|
184
184
|
|
|
185
|
-
- **Builder `/cli-auth
|
|
186
|
-
- **
|
|
185
|
+
- **Builder `/cli-auth`**: clicking "Connect Builder" from any app writes `BUILDER_PRIVATE_KEY` and related metadata to scoped DB secrets, so every app can resolve the connection without sharing a deploy-global key.
|
|
186
|
+
- **Compatibility key route** (`POST /_agent-native/env-vars`): older onboarding forms still call this route name, but it now saves values as scoped DB secrets. Pass `scope: "workspace"` to share with the active org, or omit it for a per-user key.
|
|
187
187
|
|
|
188
188
|
## Identifiants partagés {#shared-credentials}
|
|
189
189
|
|
|
@@ -168,7 +168,7 @@ pnpm dev
|
|
|
168
168
|
|
|
169
169
|
## साझा पर्यावरण चर {#shared-env}
|
|
170
170
|
|
|
171
|
-
|
|
171
|
+
The workspace root `.env` is loaded into every app automatically for deployment-level configuration such as `A2A_SECRET`, `BETTER_AUTH_SECRET`, and `DATABASE_URL`. User, org, and workspace API keys should be saved as scoped DB secrets instead of being written into `.env`. Per-app deploy-time overrides can still go in `apps/<name>/.env` and win on conflict.
|
|
172
172
|
|
|
173
173
|
रनटाइम ऐप क्रेडेंशियल के लिए, `.env` फ़ाइलों को हाथ से संपादित करने के बजाय डिस्पैच वॉल्ट को प्राथमिकता दें। वॉल्ट डिफ़ॉल्ट रूप से सभी ऐप्स तक पहुंच प्रदान करता है, इसलिए प्रत्येक सहेजी गई वॉल्ट कुंजी प्रत्येक कार्यस्थान ऐप के लिए उपलब्ध है और इसे `sync-vault-to-app` के साथ पुश किया जा सकता है। वॉल्ट को मैन्युअल मोड में तभी स्विच करें जब ऐप्स को स्पष्ट प्रति-कुंजी अनुदान की आवश्यकता हो।
|
|
174
174
|
|
|
@@ -182,8 +182,8 @@ my-company-platform/
|
|
|
182
182
|
|
|
183
183
|
कुछ ऑनबोर्डिंग प्रवाह बॉक्स से बाहर कार्यक्षेत्र-जागरूक हैं:
|
|
184
184
|
|
|
185
|
-
- **Builder `/cli-auth`**:
|
|
186
|
-
- **
|
|
185
|
+
- **Builder `/cli-auth`**: clicking "Connect Builder" from any app writes `BUILDER_PRIVATE_KEY` and related metadata to scoped DB secrets, so every app can resolve the connection without sharing a deploy-global key.
|
|
186
|
+
- **Compatibility key route** (`POST /_agent-native/env-vars`): older onboarding forms still call this route name, but it now saves values as scoped DB secrets. Pass `scope: "workspace"` to share with the active org, or omit it for a per-user key.
|
|
187
187
|
|
|
188
188
|
## साझा क्रेडेंशियल {#shared-credentials}
|
|
189
189
|
|
|
@@ -168,7 +168,7 @@ pnpm dev
|
|
|
168
168
|
|
|
169
169
|
## 共有環境変数 {#shared-env}
|
|
170
170
|
|
|
171
|
-
|
|
171
|
+
The workspace root `.env` is loaded into every app automatically for deployment-level configuration such as `A2A_SECRET`, `BETTER_AUTH_SECRET`, and `DATABASE_URL`. User, org, and workspace API keys should be saved as scoped DB secrets instead of being written into `.env`. Per-app deploy-time overrides can still go in `apps/<name>/.env` and win on conflict.
|
|
172
172
|
|
|
173
173
|
ランタイム アプリの資格情報については、`.env` ファイルを手動で編集するよりも、Dispatch ボールトを使用することをお勧めします。ボールトはデフォルトですべてのアプリにアクセスするため、保存されたすべてのボールト キーはすべてのワークスペース アプリで使用でき、`sync-vault-to-app` でプッシュできます。アプリがキーごとの明示的な許可を必要とする場合にのみ、ボールトを手動モードに切り替えます。
|
|
174
174
|
|
|
@@ -182,8 +182,8 @@ my-company-platform/
|
|
|
182
182
|
|
|
183
183
|
いくつかのオンボーディング フローは、すぐに使えるワークスペース対応です。
|
|
184
184
|
|
|
185
|
-
- **Builder `/cli-auth`**:
|
|
186
|
-
- **
|
|
185
|
+
- **Builder `/cli-auth`**: clicking "Connect Builder" from any app writes `BUILDER_PRIVATE_KEY` and related metadata to scoped DB secrets, so every app can resolve the connection without sharing a deploy-global key.
|
|
186
|
+
- **Compatibility key route** (`POST /_agent-native/env-vars`): older onboarding forms still call this route name, but it now saves values as scoped DB secrets. Pass `scope: "workspace"` to share with the active org, or omit it for a per-user key.
|
|
187
187
|
|
|
188
188
|
## 共有認証情報 {#shared-credentials}
|
|
189
189
|
|
|
@@ -168,7 +168,7 @@ pnpm dev
|
|
|
168
168
|
|
|
169
169
|
## 공유 환경 변수 {#shared-env}
|
|
170
170
|
|
|
171
|
-
|
|
171
|
+
The workspace root `.env` is loaded into every app automatically for deployment-level configuration such as `A2A_SECRET`, `BETTER_AUTH_SECRET`, and `DATABASE_URL`. User, org, and workspace API keys should be saved as scoped DB secrets instead of being written into `.env`. Per-app deploy-time overrides can still go in `apps/<name>/.env` and win on conflict.
|
|
172
172
|
|
|
173
173
|
런타임 앱 자격 증명의 경우 `.env` 파일을 직접 편집하는 것보다 Dispatch Vault를 선호합니다. 볼트는 기본적으로 모든 앱 액세스로 설정되어 있으므로 저장된 모든 볼트 키는 모든 작업 공간 앱에서 사용할 수 있으며 `sync-vault-to-app`로 푸시할 수 있습니다. 앱에 명시적인 키별 부여가 필요한 경우에만 Vault를 수동 모드로 전환하세요.
|
|
174
174
|
|
|
@@ -182,8 +182,8 @@ my-company-platform/
|
|
|
182
182
|
|
|
183
183
|
몇 가지 온보딩 흐름은 기본적으로 작업공간을 인식합니다.
|
|
184
184
|
|
|
185
|
-
- **Builder `/cli-auth`**:
|
|
186
|
-
- **
|
|
185
|
+
- **Builder `/cli-auth`**: clicking "Connect Builder" from any app writes `BUILDER_PRIVATE_KEY` and related metadata to scoped DB secrets, so every app can resolve the connection without sharing a deploy-global key.
|
|
186
|
+
- **Compatibility key route** (`POST /_agent-native/env-vars`): older onboarding forms still call this route name, but it now saves values as scoped DB secrets. Pass `scope: "workspace"` to share with the active org, or omit it for a per-user key.
|
|
187
187
|
|
|
188
188
|
## 공유 자격 증명 {#shared-credentials}
|
|
189
189
|
|
|
@@ -168,7 +168,7 @@ Consulte [MCP Clients](/docs/mcp-clients) para obter o esquema de configuração
|
|
|
168
168
|
|
|
169
169
|
## Variáveis de ambiente compartilhadas {#shared-env}
|
|
170
170
|
|
|
171
|
-
|
|
171
|
+
The workspace root `.env` is loaded into every app automatically for deployment-level configuration such as `A2A_SECRET`, `BETTER_AUTH_SECRET`, and `DATABASE_URL`. User, org, and workspace API keys should be saved as scoped DB secrets instead of being written into `.env`. Per-app deploy-time overrides can still go in `apps/<name>/.env` and win on conflict.
|
|
172
172
|
|
|
173
173
|
Para credenciais de aplicativos de tempo de execução, prefira o cofre do Dispatch em vez da edição manual de arquivos `.env`. O padrão do cofre é o acesso a todos os aplicativos, portanto, cada chave do cofre salva está disponível para todos os aplicativos do espaço de trabalho e pode ser enviada por push com `sync-vault-to-app`. Mude o cofre para o modo manual somente quando os apps precisarem de concessões explícitas por chave.
|
|
174
174
|
|
|
@@ -182,8 +182,8 @@ my-company-platform/
|
|
|
182
182
|
|
|
183
183
|
Alguns fluxos de integração já reconhecem o espaço de trabalho:
|
|
184
184
|
|
|
185
|
-
- **Builder `/cli-auth`**:
|
|
186
|
-
- **
|
|
185
|
+
- **Builder `/cli-auth`**: clicking "Connect Builder" from any app writes `BUILDER_PRIVATE_KEY` and related metadata to scoped DB secrets, so every app can resolve the connection without sharing a deploy-global key.
|
|
186
|
+
- **Compatibility key route** (`POST /_agent-native/env-vars`): older onboarding forms still call this route name, but it now saves values as scoped DB secrets. Pass `scope: "workspace"` to share with the active org, or omit it for a per-user key.
|
|
187
187
|
|
|
188
188
|
## Credenciais compartilhadas {#shared-credentials}
|
|
189
189
|
|
|
@@ -168,7 +168,7 @@ pnpm dev
|
|
|
168
168
|
|
|
169
169
|
## 共享环境变量 {#shared-env}
|
|
170
170
|
|
|
171
|
-
|
|
171
|
+
The workspace root `.env` is loaded into every app automatically for deployment-level configuration such as `A2A_SECRET`, `BETTER_AUTH_SECRET`, and `DATABASE_URL`. User, org, and workspace API keys should be saved as scoped DB secrets instead of being written into `.env`. Per-app deploy-time overrides can still go in `apps/<name>/.env` and win on conflict.
|
|
172
172
|
|
|
173
173
|
对于运行时应用程序凭据,与手动编辑 `.env` 文件相比,更喜欢使用 DispatchVault。保管库默认为所有应用程序访问,因此每个保存的保管库密钥可供每个工作区应用程序使用,并且可以使用 `sync-vault-to-app` 推送。仅当应用程序需要显式的每密钥授权时,才将保管库切换到手动模式。
|
|
174
174
|
|
|
@@ -182,8 +182,8 @@ my-company-platform/
|
|
|
182
182
|
|
|
183
183
|
一些入门流程是开箱即用的工作区感知型:
|
|
184
184
|
|
|
185
|
-
- **Builder `/cli-auth
|
|
186
|
-
-
|
|
185
|
+
- **Builder `/cli-auth`**: clicking "Connect Builder" from any app writes `BUILDER_PRIVATE_KEY` and related metadata to scoped DB secrets, so every app can resolve the connection without sharing a deploy-global key.
|
|
186
|
+
- **Compatibility key route** (`POST /_agent-native/env-vars`): older onboarding forms still call this route name, but it now saves values as scoped DB secrets. Pass `scope: "workspace"` to share with the active org, or omit it for a per-user key.
|
|
187
187
|
|
|
188
188
|
## 共享凭据 {#shared-credentials}
|
|
189
189
|
|
|
@@ -168,7 +168,7 @@ pnpm dev
|
|
|
168
168
|
|
|
169
169
|
## 共用環境變數 {#shared-env}
|
|
170
170
|
|
|
171
|
-
|
|
171
|
+
The workspace root `.env` is loaded into every app automatically for deployment-level configuration such as `A2A_SECRET`, `BETTER_AUTH_SECRET`, and `DATABASE_URL`. User, org, and workspace API keys should be saved as scoped DB secrets instead of being written into `.env`. Per-app deploy-time overrides can still go in `apps/<name>/.env` and win on conflict.
|
|
172
172
|
|
|
173
173
|
對於執行時應用程式憑證,與手動編輯 `.env` 檔案相比,更喜歡使用 DispatchVault。保管庫預設為所有應用程式存取,因此每個儲存的保管庫金鑰可供每個工作區應用程式使用,並且可以使用 `sync-vault-to-app` 推送。僅當應用程式需要顯式的每金鑰授權時,才將保管庫切換到手動模式。
|
|
174
174
|
|
|
@@ -182,8 +182,8 @@ my-company-platform/
|
|
|
182
182
|
|
|
183
183
|
一些入門流程是開箱即用的工作區感知型:
|
|
184
184
|
|
|
185
|
-
- **Builder `/cli-auth
|
|
186
|
-
-
|
|
185
|
+
- **Builder `/cli-auth`**: clicking "Connect Builder" from any app writes `BUILDER_PRIVATE_KEY` and related metadata to scoped DB secrets, so every app can resolve the connection without sharing a deploy-global key.
|
|
186
|
+
- **Compatibility key route** (`POST /_agent-native/env-vars`): older onboarding forms still call this route name, but it now saves values as scoped DB secrets. Pass `scope: "workspace"` to share with the active org, or omit it for a per-user key.
|
|
187
187
|
|
|
188
188
|
## 共用憑證 {#shared-credentials}
|
|
189
189
|
|
|
@@ -168,7 +168,7 @@ See [MCP Clients](/docs/mcp-clients) for the config schema, precedence rules, an
|
|
|
168
168
|
|
|
169
169
|
## Shared environment variables {#shared-env}
|
|
170
170
|
|
|
171
|
-
The workspace root `.env` is loaded into every app automatically
|
|
171
|
+
The workspace root `.env` is loaded into every app automatically for deployment-level configuration such as `A2A_SECRET`, `BETTER_AUTH_SECRET`, and `DATABASE_URL`. User, org, and workspace API keys should be saved as scoped DB secrets instead of being written into `.env`. Per-app deploy-time overrides can still go in `apps/<name>/.env` and win on conflict.
|
|
172
172
|
|
|
173
173
|
For runtime app credentials, prefer the Dispatch vault over hand-editing `.env` files. The vault defaults to all-apps access, so every saved vault key is available to every workspace app and can be pushed with `sync-vault-to-app`. Switch the vault to manual mode only when apps need explicit per-key grants.
|
|
174
174
|
|
|
@@ -182,8 +182,8 @@ my-company-platform/
|
|
|
182
182
|
|
|
183
183
|
A few onboarding flows are workspace-aware out of the box:
|
|
184
184
|
|
|
185
|
-
- **Builder `/cli-auth`**: clicking "Connect Builder" from any app writes `BUILDER_PRIVATE_KEY` and friends to
|
|
186
|
-
- **
|
|
185
|
+
- **Builder `/cli-auth`**: clicking "Connect Builder" from any app writes `BUILDER_PRIVATE_KEY` and friends to scoped DB secrets, so every app can resolve the connection without sharing a deploy-global key.
|
|
186
|
+
- **Compatibility key route** (`POST /_agent-native/env-vars`): older onboarding forms still call this route name, but it now saves values as scoped DB secrets. Pass `scope: "workspace"` to share with the active org, or omit it for a per-user key.
|
|
187
187
|
|
|
188
188
|
## Shared credentials {#shared-credentials}
|
|
189
189
|
|
|
@@ -130,6 +130,15 @@ Password-protected clips require the password once; successful responses return
|
|
|
130
130
|
short-lived tokenized links so downstream agents do not need the plaintext
|
|
131
131
|
password.
|
|
132
132
|
|
|
133
|
+
When `transcript.status` is `pending`, agents should wait 15-30 seconds and
|
|
134
|
+
retry the context or transcript URL a few times before falling back to frames or
|
|
135
|
+
reporting that no transcript is available. Long recordings can take several
|
|
136
|
+
minutes to finish. Failed transcripts include `failureReason`; if Builder
|
|
137
|
+
transcription credits are exhausted, the agent should explain that the user
|
|
138
|
+
needs Builder.io credits/upgrade or a Groq key for backup speech-to-text.
|
|
139
|
+
Pending transcript responses also include `retryAfterSeconds` for agents that
|
|
140
|
+
want a structured polling hint.
|
|
141
|
+
|
|
133
142
|
Slack previews use the same sharing boundary. The `/api/slack/unfurl` webhook
|
|
134
143
|
only returns a playable Slack `video` block for ready, public clips without a
|
|
135
144
|
password, expiry hit, archive marker, or trash marker. Other clips still get the
|
|
@@ -146,7 +155,7 @@ normal share-page title/thumbnail metadata and require opening Clips.
|
|
|
146
155
|
{ "name": "id", "in": "query", "type": "string", "required": true, "description": "Recording id" }
|
|
147
156
|
],
|
|
148
157
|
"responses": [
|
|
149
|
-
{ "status": "200", "description": "Clip metadata
|
|
158
|
+
{ "status": "200", "description": "Clip metadata, transcript status/failureReason/retryAfterSeconds, agent instructions, and transcript/frame API links" }
|
|
150
159
|
]
|
|
151
160
|
}
|
|
152
161
|
```
|
|
@@ -160,7 +169,7 @@ normal share-page title/thumbnail metadata and require opening Clips.
|
|
|
160
169
|
{ "name": "id", "in": "query", "type": "string", "required": true, "description": "Recording id" }
|
|
161
170
|
],
|
|
162
171
|
"responses": [
|
|
163
|
-
{ "status": "200", "description": "
|
|
172
|
+
{ "status": "200", "description": "Transcript status, failureReason, retryAfterSeconds, full text, and segments with startMs, endMs, readable timestamps, text, and optional source labels" }
|
|
164
173
|
]
|
|
165
174
|
}
|
|
166
175
|
```
|
|
@@ -216,7 +225,7 @@ pnpm dev
|
|
|
216
225
|
|
|
217
226
|
Clips is a larger template with a native recorder (it ships a desktop companion for local capture). Three setup steps are needed before recordings can upload:
|
|
218
227
|
|
|
219
|
-
1. **Video storage (required).** Connect a storage backend through the onboarding wizard. The easiest path is Builder.io (free during beta, one-click). For self-hosted storage,
|
|
228
|
+
1. **Video storage (required).** Connect a storage backend through the onboarding wizard or Clips Settings. The easiest path is Builder.io (free during beta, one-click). For self-hosted storage, save `S3_ENDPOINT`, `S3_BUCKET`, `S3_ACCESS_KEY_ID`, `S3_SECRET_ACCESS_KEY`, and optionally `S3_REGION` and `S3_PUBLIC_BASE_URL` in the app; the values are stored as scoped DB secrets. Cloudflare R2 and DigitalOcean Spaces use the same key names with the `R2_*` prefix.
|
|
220
229
|
2. **Google Calendar (optional).** To sync upcoming meetings, connect a Google Calendar account from Settings. The OAuth callback URL in dev is `http://localhost:8094/_agent-native/google/callback`. Set up a Google OAuth client in [Google Cloud Console](https://console.cloud.google.com/) with the Gmail and Google Calendar APIs enabled.
|
|
221
230
|
3. **Screen-capture permissions.** On macOS, grant Screen Recording permission to the browser (or the desktop companion app) in System Settings → Privacy & Security → Screen Recording. Browser recordings can save redacted console and fetch/XHR diagnostics from the recorder page. Once the Chrome extension listing is available, enable `VITE_CLIPS_CHROME_EXTENSION_ENABLED=1` so users can choose the extension for active-tab browser logs or the desktop app for the smoothest native capture path.
|
|
222
231
|
4. **Slack previews (optional).** Create a Slack app with `links:read`, `links:write`, and `links.embed:write`; subscribe to `link_shared`; add your Clips share domain under **App Unfurl Domains**; set the Request URL to `https://your-clips.example.com/api/slack/unfurl`; and add the OAuth redirect URL `https://your-clips.example.com/api/slack/oauth/callback`. Configure `SLACK_CLIENT_ID`, `SLACK_CLIENT_SECRET`, and `SLACK_SIGNING_SECRET`, then connect workspaces from Clips Settings.
|
|
@@ -239,8 +248,8 @@ tray app at your deployment.
|
|
|
239
248
|
2. **Configure production state.** Set a persistent `DATABASE_URL`, the normal
|
|
240
249
|
production auth/secrets variables from [Deployment](/docs/deployment), and a
|
|
241
250
|
video storage provider. Builder.io Connect is the easiest storage path; for
|
|
242
|
-
self-hosted storage,
|
|
243
|
-
bucket.
|
|
251
|
+
self-hosted storage, save `S3_*` or `R2_*` keys from Clips Settings for an
|
|
252
|
+
S3-compatible bucket.
|
|
244
253
|
|
|
245
254
|
3. **Deploy the web app.** For a plain Node deploy:
|
|
246
255
|
|
package/corpus/core/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/core",
|
|
3
|
-
"version": "0.79.
|
|
3
|
+
"version": "0.79.19",
|
|
4
4
|
"description": "Framework for agent-native application development — where AI agents and UI share SQL state, actions, and context",
|
|
5
5
|
"homepage": "https://github.com/BuilderIO/agent-native#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -94,11 +94,16 @@ function mapReasoningEffort(budgetTokens: number): ReasoningEffort {
|
|
|
94
94
|
* `/app/organizations/Nicholas%20kipchumba%20Space/billing` which Builder's
|
|
95
95
|
* router treats as unknown and silently bounces to `/app/projects`. The
|
|
96
96
|
* Builder CLI-auth callback doesn't expose the org slug/id today, so we route
|
|
97
|
-
* to the org-agnostic
|
|
98
|
-
*
|
|
97
|
+
* to the org-agnostic subscription page. Agent Native attribution lets Builder
|
|
98
|
+
* skip generic onboarding for new users who land there from an upgrade CTA.
|
|
99
99
|
*/
|
|
100
100
|
async function buildUpgradeUrl(): Promise<string> {
|
|
101
|
-
|
|
101
|
+
const url = new URL("https://builder.io/account/subscription");
|
|
102
|
+
url.searchParams.set("signupSource", "agent-native");
|
|
103
|
+
url.searchParams.set("agentNativeConnectSource", "gateway_quota_upgrade");
|
|
104
|
+
url.searchParams.set("agentNativeFlow", "connect_llm");
|
|
105
|
+
url.searchParams.set("framework", "agent-native");
|
|
106
|
+
return url.toString();
|
|
102
107
|
}
|
|
103
108
|
|
|
104
109
|
interface GatewayErrorBody {
|
|
@@ -205,21 +205,26 @@ async function mintHostedJwt(cwd: string): Promise<string | undefined> {
|
|
|
205
205
|
process.env.AGENT_NATIVE_OWNER_EMAIL ||
|
|
206
206
|
process.env.OWNER_EMAIL ||
|
|
207
207
|
"owner@localhost";
|
|
208
|
+
let fileA2ASecret: string | undefined;
|
|
208
209
|
if (!process.env.A2A_SECRET) {
|
|
209
210
|
const baseDir = envBaseDir(cwd);
|
|
210
211
|
const content =
|
|
211
212
|
readEnvFile(path.join(baseDir, ".env.local")) +
|
|
212
213
|
"\n" +
|
|
213
214
|
readEnvFile(path.join(baseDir, ".env"));
|
|
214
|
-
|
|
215
|
-
if (secret) process.env.A2A_SECRET = secret;
|
|
215
|
+
fileA2ASecret = getEnvValue(content, "A2A_SECRET");
|
|
216
216
|
}
|
|
217
217
|
try {
|
|
218
218
|
const { signA2AToken } = await import("../a2a/client.js");
|
|
219
|
-
return await signA2AToken(
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
219
|
+
return await signA2AToken(
|
|
220
|
+
owner,
|
|
221
|
+
undefined,
|
|
222
|
+
process.env.A2A_SECRET || fileA2ASecret,
|
|
223
|
+
{
|
|
224
|
+
preferGlobalSecret: true,
|
|
225
|
+
expiresIn: "30d",
|
|
226
|
+
},
|
|
227
|
+
);
|
|
223
228
|
} catch (err: any) {
|
|
224
229
|
logErr(
|
|
225
230
|
` Could not mint a hosted JWT (${err?.message ?? err}). ` +
|
|
@@ -1137,8 +1137,8 @@ const AssistantChatInner = forwardRef<
|
|
|
1137
1137
|
const isComposerDisabled = missingApiKey || composerDisabled;
|
|
1138
1138
|
const missingApiKeySetupAboveComposer =
|
|
1139
1139
|
missingApiKeySetupLayout === "sidebar";
|
|
1140
|
-
// Increments each time the user
|
|
1141
|
-
//
|
|
1140
|
+
// Increments each time the user tries to chat while no LLM is connected.
|
|
1141
|
+
// `BuilderSetupCard` watches this to replay a one-shot bounce.
|
|
1142
1142
|
const [missingKeyBouncePulse, setMissingKeyBouncePulse] = useState(0);
|
|
1143
1143
|
const [authError, setAuthError] = useState<{
|
|
1144
1144
|
sessionExpired?: boolean;
|
|
@@ -3152,6 +3152,10 @@ const AssistantChatInner = forwardRef<
|
|
|
3152
3152
|
<button
|
|
3153
3153
|
key={suggestion}
|
|
3154
3154
|
onClick={() => {
|
|
3155
|
+
if (missingApiKey) {
|
|
3156
|
+
setMissingKeyBouncePulse((p) => p + 1);
|
|
3157
|
+
return;
|
|
3158
|
+
}
|
|
3155
3159
|
threadRuntime.append({
|
|
3156
3160
|
role: "user",
|
|
3157
3161
|
content: [{ type: "text", text: suggestion }],
|
|
@@ -179,6 +179,7 @@ function isBuilderErrorCtaHref(href: string | undefined): boolean {
|
|
|
179
179
|
return (
|
|
180
180
|
url.href === BUILDER_SPACE_SETTINGS_URL ||
|
|
181
181
|
url.pathname === "/account/billing" ||
|
|
182
|
+
url.pathname === "/account/subscription" ||
|
|
182
183
|
/^\/app\/organizations\/[^/]+\/billing$/.test(url.pathname)
|
|
183
184
|
);
|
|
184
185
|
} catch {
|