@agent-native/core 0.169.0 → 0.170.0
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/agent-native.eject.json +4 -1
- package/bin/agent-native.js +23 -5
- package/corpus/README.md +1 -1
- package/corpus/templates/analytics/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/analytics/actions/bigquery-table-info.ts +3 -2
- package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +1 -1
- package/corpus/templates/analytics/actions/search-bigquery-schema.ts +130 -4
- package/corpus/templates/analytics/agent-native.config.ts +1 -0
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +36 -23
- package/corpus/templates/analytics/app/i18n-data.ts +28 -0
- package/corpus/templates/analytics/app/lib/dashboard-visibility.ts +41 -0
- package/corpus/templates/analytics/app/pages/Agents.tsx +25 -1
- package/corpus/templates/analytics/app/pages/DashboardOverview.tsx +34 -9
- package/corpus/templates/analytics/app/routes/$.tsx +10 -0
- package/corpus/templates/analytics/app/routes.ts +3 -1
- package/corpus/templates/analytics/changelog/2026-08-21-dashboard-filters-keep-other-users-dashboards-out-of-mine.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-22-fixed-the-agent-native-templates-first-party-dashboard-panel.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-22-org-admin-panels-no-longer-report-a-database-error-as-a-per.md +9 -0
- package/corpus/templates/analytics/changelog/2026-08-22-slack-requests-report-invalid-inputs.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-22-unknown-analytics-links-now-return-a-real-not-found-status.md +6 -0
- package/corpus/templates/analytics/docs/schemas/first-party-analytics.md +2 -1
- package/corpus/templates/analytics/docs/schemas/tracked-events.md +2 -0
- package/corpus/templates/analytics/scripts/emit-netlify-dashboard-report-cron.ts +29 -7
- package/corpus/templates/analytics/server/handlers/slack.ts +59 -5
- package/corpus/templates/analytics/server/lib/db-admin-connections.ts +11 -6
- package/corpus/templates/analytics/server/lib/first-party-analytics.ts +132 -2
- package/corpus/templates/analytics/server/lib/real-data-actions.ts +14 -3
- package/corpus/templates/analytics/server/lib/slack.ts +4 -2
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +33 -3
- package/corpus/templates/analytics/vitest.config.ts +6 -1
- package/corpus/templates/assets/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/assets/app/routes/library.tsx +5 -3
- package/corpus/templates/assets/app/routes.ts +3 -1
- package/corpus/templates/assets/changelog/2026-08-22-library-page-loads-again-instead-of-crashing-on-open.md +6 -0
- package/corpus/templates/assets/vitest.config.ts +6 -1
- package/corpus/templates/brain/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/brain/app/components/ui/pointer-lock.ts +1 -0
- package/corpus/templates/brain/app/routes/sources.tsx +8 -3
- package/corpus/templates/brain/changelog/2026-08-22-tuning-or-adding-a-source-no-longer-leaves-the-sources-page.md +6 -0
- package/corpus/templates/brain/server/lib/brain.ts +27 -2
- package/corpus/templates/brain/vitest.config.ts +1 -0
- package/corpus/templates/calendar/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/calendar/actions/list-booking-links.ts +83 -4
- package/corpus/templates/calendar/actions/update-booking-link.ts +4 -3
- package/corpus/templates/calendar/app/components/calendar/EventDetailPanel.tsx +11 -3
- package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +1 -1
- package/corpus/templates/calendar/app/components/calendar/GoogleConnectBanner.tsx +103 -44
- package/corpus/templates/calendar/app/components/calendar/OutOfOfficeEvent.tsx +28 -24
- package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +9 -2
- package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +47 -58
- package/corpus/templates/calendar/app/hooks/use-booking-links.ts +5 -1
- package/corpus/templates/calendar/app/lib/event-layout.ts +52 -26
- package/corpus/templates/calendar/app/pages/BookingLinksPage.tsx +126 -98
- package/corpus/templates/calendar/app/pages/CalendarView.tsx +1 -0
- package/corpus/templates/calendar/app/pages/Settings.tsx +88 -81
- package/corpus/templates/calendar/app/routes.ts +3 -1
- package/corpus/templates/calendar/changelog/2026-08-22-booking-link-visibility-respects-shared-access.md +6 -0
- package/corpus/templates/calendar/changelog/2026-08-22-clicking-an-out-of-office-event-s-marker-no-longer-creates-a.md +6 -0
- package/corpus/templates/calendar/changelog/2026-08-22-event-detail-views-now-show-your-calendar-timezone.md +6 -0
- package/corpus/templates/calendar/changelog/2026-08-22-google-calendar-can-now-connect-with-the-shared-google-oauth.md +6 -0
- package/corpus/templates/calendar/changelog/2026-08-22-overlapping-events-now-show-each-others-boundaries.md +6 -0
- package/corpus/templates/calendar/changelog/2026-08-22-public-booking-pages-now-offer-time-slots-from-the-host-s-we.md +6 -0
- package/corpus/templates/calendar/server/handlers/bookings.ts +5 -7
- package/corpus/templates/calendar/server/handlers/google-auth.ts +10 -2
- package/corpus/templates/calendar/server/lib/google-calendar.ts +139 -14
- package/corpus/templates/calendar/server/onboarding.ts +85 -0
- package/corpus/templates/calendar/server/plugins/agent-chat.ts +2 -0
- package/corpus/templates/calendar/shared/api.ts +9 -1
- package/corpus/templates/chat/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/chat/app/routes.ts +3 -1
- package/corpus/templates/chat/vitest.config.ts +8 -0
- package/corpus/templates/clips/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/clips/actions/get-meeting.ts +9 -4
- package/corpus/templates/clips/actions/list-recordings.ts +16 -3
- package/corpus/templates/clips/actions/search-meetings.ts +1 -0
- package/corpus/templates/clips/actions/stop-meeting-recording.ts +87 -6
- package/corpus/templates/clips/actions/view-screen.ts +8 -1
- package/corpus/templates/clips/app/components/library/search-bar.tsx +1 -1
- package/corpus/templates/clips/app/components/meetings/meeting-history-row.tsx +32 -1
- package/corpus/templates/clips/app/components/player/delete-recording-menu.tsx +1 -1
- package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +29 -1
- package/corpus/templates/clips/app/i18n/en-US.ts +5 -0
- package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +33 -4
- package/corpus/templates/clips/app/routes/_app.meetings._index.tsx +1 -0
- package/corpus/templates/clips/app/routes/access-request.approve.tsx +16 -9
- package/corpus/templates/clips/app/routes/embed.$shareId.tsx +17 -7
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +17 -7
- package/corpus/templates/clips/changelog/2026-08-21-camera-bubble-black-circle.md +6 -0
- package/corpus/templates/clips/changelog/2026-08-22-screen-recordings-respect-the-microphone-toggle.md +6 -0
- package/corpus/templates/clips/changelog/2026-08-22-the-recordings-library-no-longer-fails-right-after-server-start.md +6 -0
- package/corpus/templates/clips/changelog/2026-08-23-the-agent-can-see-your-library-right-after-server-start.md +6 -0
- package/corpus/templates/clips/chrome-extension/src/background.ts +1 -2
- package/corpus/templates/clips/chrome-extension/src/native-transcription.ts +39 -7
- package/corpus/templates/clips/chrome-extension/src/offscreen.ts +21 -25
- package/corpus/templates/clips/desktop/src/app.tsx +53 -24
- package/corpus/templates/clips/desktop/src/lib/bubble-playback.ts +68 -0
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +3 -0
- package/corpus/templates/clips/desktop/src/lib/transcription-capture.ts +72 -14
- package/corpus/templates/clips/desktop/src/lib/updater.ts +8 -3
- package/corpus/templates/clips/desktop/src/overlays/bubble.tsx +162 -20
- package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +43 -6
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen/custom_capture.rs +150 -13
- package/corpus/templates/clips/desktop/src-tauri/src/tray.rs +12 -0
- package/corpus/templates/clips/server/lib/calendar-event-meetings.ts +28 -3
- package/corpus/templates/clips/server/lib/emails.ts +17 -33
- package/corpus/templates/content/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/content/app/components/editor/VisualEditor.tsx +140 -15
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +12 -14
- package/corpus/templates/content/app/components/ui/pointer-lock.ts +1 -0
- package/corpus/templates/content/app/hooks/use-content-database.ts +18 -2
- package/corpus/templates/content/app/hooks/use-local-storage.ts +38 -22
- package/corpus/templates/content/app/i18n-data.ts +25 -0
- package/corpus/templates/content/app/routes.ts +3 -1
- package/corpus/templates/content/changelog/2026-08-22-code-blocks-inserted-from-the-slash-menu-no-longer-get-stuck.md +6 -0
- package/corpus/templates/content/changelog/2026-08-22-the-sidebar-page-tree-no-longer-flashes-empty-after-creating-a-page.md +6 -0
- package/corpus/templates/content/docs/solutions/2026-08-21-content-mermaid-rendering-shape.md +233 -0
- package/corpus/templates/content/server/plugins/agent-chat.ts +9 -2
- package/corpus/templates/content/vitest.config.ts +7 -1
- package/corpus/templates/crm/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/design/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +1386 -92
- package/corpus/templates/design/actions/generate-design.ts +98 -47
- package/corpus/templates/design/actions/get-design-system.ts +6 -1
- package/corpus/templates/design/actions/refresh-design-system-with-builder.ts +146 -0
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +70 -26
- package/corpus/templates/design/app/components/design/EditPanel.tsx +15 -47
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +284 -136
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +2060 -144
- package/corpus/templates/design/app/components/design/editor/DesignBottomToolbar.tsx +6 -2
- package/corpus/templates/design/app/components/design/editor/DesignWorkspaceRail.tsx +4 -4
- package/corpus/templates/design/app/components/design/keyboard-shortcuts.ts +10 -8
- package/corpus/templates/design/app/components/design/multi-screen/alt-hover-measurement.ts +19 -2
- package/corpus/templates/design/app/components/design/multi-screen/types.ts +9 -2
- package/corpus/templates/design/app/components/layout/Header.tsx +15 -0
- package/corpus/templates/design/app/components/layout/Layout.tsx +7 -2
- package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +13 -8
- package/corpus/templates/design/app/i18n-data.ts +11 -10
- package/corpus/templates/design/app/i18n-keyboard-shortcuts.ts +12 -0
- package/corpus/templates/design/app/lib/design-system-data.ts +68 -0
- package/corpus/templates/design/app/pages/DesignEditor.tsx +99 -57
- package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +39 -8
- package/corpus/templates/design/app/pages/DesignSystems.tsx +137 -43
- package/corpus/templates/design/app/pages/Index.tsx +3 -1
- package/corpus/templates/design/app/pages/Templates.tsx +0 -10
- package/corpus/templates/design/app/pages/design-editor/code-layer-state.ts +10 -0
- package/corpus/templates/design/app/pages/design-editor/collab-sync.ts +50 -0
- package/corpus/templates/design/app/pages/design-editor/commands/apply-design-editor-command.ts +1 -1
- package/corpus/templates/design/app/pages/design-editor/commands/apply-file-content-update.ts +10 -8
- package/corpus/templates/design/app/pages/design-editor/commands/apply-local-content-update.ts +6 -6
- package/corpus/templates/design/app/pages/design-editor/commands/apply-pending-visual-styles-with-agent.ts +1 -1
- package/corpus/templates/design/app/pages/design-editor/commands/commit-visual-styles.ts +18 -7
- package/corpus/templates/design/app/pages/design-editor/commands/escape-hotkey.ts +4 -90
- package/corpus/templates/design/app/pages/design-editor/commands/layer-marquee-selection-change.ts +2 -1
- package/corpus/templates/design/app/pages/design-editor/commands/layer-selection-change.ts +4 -3
- package/corpus/templates/design/app/pages/design-editor/commands/screen-element-select.ts +12 -2
- package/corpus/templates/design/app/pages/design-editor/commands/screen-visual-style-change.ts +9 -2
- package/corpus/templates/design/app/pages/design-editor/commands/send-runtime-layer-move-semantic-handoff.ts +1 -1
- package/corpus/templates/design/app/pages/design-editor/commands/send-runtime-layer-semantic-handoff.ts +1 -1
- package/corpus/templates/design/app/pages/design-editor/commands/send-runtime-layer-state-semantic-handoff.ts +1 -1
- package/corpus/templates/design/app/pages/design-editor/commands/start-sidebar-resize.ts +1 -1
- package/corpus/templates/design/app/pages/design-editor/editor-state.ts +11 -1
- package/corpus/templates/design/app/pages/design-editor/effects/adopt-db-file-content.ts +11 -19
- package/corpus/templates/design/app/pages/design-editor/effects/observe-collab-text.ts +6 -6
- package/corpus/templates/design/app/pages/design-editor/effects/publish-agent-selection-context.ts +1 -1
- package/corpus/templates/design/app/pages/design-editor/effects/seed-collab-content.ts +12 -15
- package/corpus/templates/design/app/pages/design-editor/preview-navigation.ts +25 -0
- package/corpus/templates/design/app/pages/design-editor/selection-state.ts +5 -59
- package/corpus/templates/design/app/pages/design-editor/tool-state.ts +8 -0
- package/corpus/templates/design/app/pages/design-editor/types.ts +3 -3
- package/corpus/templates/design/app/routes.ts +3 -1
- package/corpus/templates/design/changelog/2026-08-20-canvas-edits-patch-the-frame-instead-of-rebuilding-it.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-builder-design-system-imports-reconcile-after-indexing.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-draw-mode-needs-shift-y.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-eyedropper-shortcut.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-figma-style-alignment-guides-and-snapping.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-group-transforms-keep-the-selection.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-inspector-fields-keep-focus-on-enter.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-pen-alt-keeps-the-incoming-handle.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-pen-on-the-board-creates-one-vector.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-scale-a-multi-selection-from-the-group-handles.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-scale-resizes-text-with-the-object.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-selecting-another-object-keeps-the-scale-tool-armed.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-the-shape-tool-remembers-the-shape-you-picked.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-vectors-drawn-in-a-frame-land-where-you-drew-them.md +6 -0
- package/corpus/templates/design/changelog/2026-08-22-multi-screen-generation-no-longer-loses-a-saved-screens-layo.md +6 -0
- package/corpus/templates/design/changelog/2026-08-22-rename-and-search-fields-are-labeled-for-screen-readers.md +6 -0
- package/corpus/templates/design/package.json +2 -0
- package/corpus/templates/design/server/lib/builder-design-system-proxy.ts +311 -0
- package/corpus/templates/design/shared/canvas-math.ts +612 -206
- package/corpus/templates/design/shared/pen-path.ts +37 -0
- package/corpus/templates/design/vitest.config.ts +7 -1
- package/corpus/templates/dispatch/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/dispatch/actions/list-workspace-connections.ts +34 -3
- package/corpus/templates/dispatch/app/routes/integrations.tsx +55 -21
- package/corpus/templates/dispatch/app/routes.ts +3 -1
- package/corpus/templates/factory/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/factory/.env.example +2 -7
- package/corpus/templates/factory/AGENTS.md +3 -0
- package/corpus/templates/factory/README.md +5 -3
- package/corpus/templates/factory/actions/create-factory.ts +16 -3
- package/corpus/templates/factory/actions/get-slack-feedback-context.ts +2 -0
- package/corpus/templates/factory/actions/get-triage-item.ts +2 -0
- package/corpus/templates/factory/actions/list-factory-audit.ts +116 -36
- package/corpus/templates/factory/actions/list-factory-automations.ts +2 -1
- package/corpus/templates/factory/actions/list-triage-items.ts +22 -19
- package/corpus/templates/factory/actions/run-factory-automation.ts +7 -3
- package/corpus/templates/factory/actions/save-factory-automation.ts +5 -2
- package/corpus/templates/factory/actions/save-triage-config.ts +2 -8
- package/corpus/templates/factory/actions/start-builder-for-item.ts +21 -0
- package/corpus/templates/factory/app/components/factory/FactoryAuditView.tsx +229 -297
- package/corpus/templates/factory/app/components/factory/FactorySettingsView.tsx +397 -247
- package/corpus/templates/factory/app/components/factory/FactorySourceSettingsGroup.tsx +33 -0
- package/corpus/templates/factory/app/components/factory/NewFactoryForm.tsx +202 -162
- package/corpus/templates/factory/app/i18n/en-US.ts +32 -4
- package/corpus/templates/factory/app/routes/factory.tsx +84 -11
- package/corpus/templates/factory/app/routes.ts +3 -1
- package/corpus/templates/factory/changelog/2026-08-21-activity-runs-use-automation-display-names.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-21-create-and-settings-source-cards.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-21-keep-automations-visible-while-running.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-21-nested-factory-automations-can-poll.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-21-settings-sticky-unsaved-bar.md +6 -0
- package/corpus/templates/factory/server/connectors/credentials.ts +10 -5
- package/corpus/templates/factory/server/lib/factory-audit-report.ts +412 -0
- package/corpus/templates/factory/server/lib/factory-config-reconcile.ts +321 -0
- package/corpus/templates/factory/server/lib/factory-scope.ts +25 -2
- package/corpus/templates/factory/server/lib/require-factory-automation.ts +13 -4
- package/corpus/templates/factory/server/plugins/factory-migrations.ts +148 -4
- package/corpus/templates/factory/server/plugins/factory-scheduler-job.ts +4 -6
- package/corpus/templates/factory/vitest.config.ts +17 -2
- package/corpus/templates/forms/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/forms/app/routes/_app.settings.tsx +4 -1
- package/corpus/templates/forms/changelog/2026-08-22-the-extensions-link-now-opens-the-extensions-tab-instead-o.md +6 -0
- package/corpus/templates/forms/server/lib/public-form-ssr.ts +11 -1
- package/corpus/templates/forms/vitest.config.ts +1 -0
- package/corpus/templates/macros/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/macros/app/routes.ts +3 -1
- package/corpus/templates/macros/vitest.config.ts +6 -1
- package/corpus/templates/mail/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/mail/actions/manage-gmail-filters.ts +10 -2
- package/corpus/templates/mail/app/components/GoogleConnectBanner.tsx +100 -37
- package/corpus/templates/mail/app/components/email/IntegrationsSidebar.tsx +14 -2
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +66 -36
- package/corpus/templates/mail/app/hooks/use-emails.ts +13 -3
- package/corpus/templates/mail/app/hooks/use-google-auth.ts +2 -0
- package/corpus/templates/mail/app/lib/google-oauth-setup.ts +17 -0
- package/corpus/templates/mail/app/pages/InboxPage.tsx +69 -9
- package/corpus/templates/mail/app/routes/$.tsx +9 -0
- package/corpus/templates/mail/app/routes/$view.$threadId.tsx +23 -1
- package/corpus/templates/mail/app/routes/$view.tsx +47 -1
- package/corpus/templates/mail/app/routes.ts +3 -1
- package/corpus/templates/mail/changelog/2026-08-22-gmail-can-now-connect-with-the-shared-google-oauth.md +6 -0
- package/corpus/templates/mail/changelog/2026-08-22-gmail-filters-now-shows-the-real-error.md +6 -0
- package/corpus/templates/mail/changelog/2026-08-22-unknown-mail-urls-now-show-the-404-page.md +6 -0
- package/corpus/templates/mail/server/handlers/google-auth.ts +11 -2
- package/corpus/templates/mail/server/lib/google-auth.ts +92 -12
- package/corpus/templates/mail/server/onboarding.ts +66 -18
- package/corpus/templates/mail/vitest.config.ts +6 -1
- package/corpus/templates/plan/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/plan/app/routes/settings.tsx +4 -1
- package/corpus/templates/plan/app/routes.ts +3 -1
- package/corpus/templates/plan/changelog/2026-08-22-the-extensions-link-now-opens-the-extensions-tab-instead-o.md +6 -0
- package/corpus/templates/plan/netlify.toml +1 -1
- package/corpus/templates/slides/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/slides/actions/patch-deck.ts +79 -10
- package/corpus/templates/slides/actions/update-slide.ts +11 -1
- package/corpus/templates/slides/app/components/deck/SlideRenderer.tsx +14 -4
- package/corpus/templates/slides/app/components/editor/ExportMenu.tsx +10 -52
- package/corpus/templates/slides/app/components/editor/GoogleDocImportHint.tsx +8 -53
- package/corpus/templates/slides/app/components/editor/GoogleDriveConnectionCta.tsx +9 -75
- package/corpus/templates/slides/app/components/editor/GoogleSlidesReferenceImport.tsx +8 -60
- package/corpus/templates/slides/app/components/editor/SlideContextToolbar.tsx +10 -2
- package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +19 -7
- package/corpus/templates/slides/app/lib/sanitize-slide-html.ts +49 -36
- package/corpus/templates/slides/app/routes/access-request.approve.tsx +16 -9
- package/corpus/templates/slides/app/routes.ts +3 -1
- package/corpus/templates/slides/changelog/2026-08-22-already-uploaded-chat-images-are-no-longer-dropped.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-22-google-drive-and-slides-can-now-connect-with-the-shared-google-oauth.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-22-multi-slide-repairs-now-report-slides-that-still-overflow.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-22-update-slide-now-reports-which-batched-edit-was-skipped.md +6 -0
- package/corpus/templates/slides/server/handlers/google-docs-auth.ts +52 -1
- package/corpus/templates/slides/server/lib/chat-attachments.ts +29 -3
- package/corpus/templates/slides/server/lib/google-docs-oauth.ts +66 -16
- package/corpus/templates/slides/server/lib/slide-content-patch.ts +13 -2
- package/corpus/templates/slides/server/plugins/agent-chat.ts +5 -2
- package/corpus/templates/slides/tsconfig.json +5 -0
- package/corpus/templates/slides/vitest.config.ts +6 -1
- package/corpus/templates/tasks/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/tasks/app/routes/settings.tsx +4 -1
- package/corpus/templates/tasks/app/routes.ts +3 -1
- package/corpus/templates/tasks/changelog/2026-08-22-the-extensions-link-now-opens-the-extensions-tab-instead-o.md +6 -0
- package/corpus/templates/tasks/vitest.config.ts +7 -1
- package/dist/action.d.ts +91 -0
- package/dist/action.js +50 -0
- package/dist/agent/abort-reasons.d.ts +38 -0
- package/dist/agent/abort-reasons.js +49 -0
- package/dist/agent/engine/ai-sdk-engine.js +8 -5
- package/dist/agent/engine/anthropic-engine.js +7 -5
- package/dist/agent/engine/credential-errors.d.ts +1 -1
- package/dist/agent/engine/credential-errors.js +2 -2
- package/dist/agent/engine/first-event-timeout.d.ts +42 -17
- package/dist/agent/engine/first-event-timeout.js +67 -25
- package/dist/agent/production-agent.d.ts +23 -0
- package/dist/agent/production-agent.js +107 -102
- package/dist/agent/run-loop-with-resume.d.ts +2 -28
- package/dist/agent/run-loop-with-resume.js +25 -40
- package/dist/agent/run-manager.js +5 -4
- package/dist/agent/run-store.d.ts +55 -0
- package/dist/agent/run-store.js +124 -1
- package/dist/agent/tool-search.js +2 -1
- package/dist/agent/types.d.ts +9 -4
- package/dist/app-config/configuration-error.d.ts +11 -0
- package/dist/app-config/configuration-error.js +14 -0
- package/dist/app-config/index.d.ts +1 -0
- package/dist/app-config/index.js +1 -0
- package/dist/app-config/integrations.d.ts +1 -0
- package/dist/app-config/integrations.js +10 -0
- package/dist/app-config/plugins.d.ts +34 -0
- package/dist/app-config/plugins.js +39 -0
- package/dist/app-config/run-lifecycle-invariants.d.ts +18 -9
- package/dist/app-config/run-lifecycle-invariants.js +18 -25
- package/dist/app-config/schema.d.ts +16 -0
- package/dist/app-config/schema.js +2 -0
- package/dist/chat-threads/schema-migrations.js +20 -0
- package/dist/chat-threads/store.js +21 -4
- package/dist/cli/native-dependencies.d.ts +4 -0
- package/dist/cli/native-dependencies.js +15 -0
- package/dist/client/AssistantChat.js +47 -15
- package/dist/client/ConnectBuilderCard.d.ts +3 -1
- package/dist/client/ConnectBuilderCard.js +6 -3
- package/dist/client/EnvironmentBadge.d.ts +1 -1
- package/dist/client/EnvironmentBadge.js +40 -5
- package/dist/client/MultiTabAssistantChat.d.ts +1 -1
- package/dist/client/MultiTabAssistantChat.js +35 -14
- package/dist/client/agent-chat/index.d.ts +1 -1
- package/dist/client/agent-chat/index.js +1 -1
- package/dist/client/agent-page/use-jobs.d.ts +2 -1
- package/dist/client/agent-page/use-jobs.js +3 -5
- package/dist/client/agent-sidebar-state.js +3 -1
- package/dist/client/blocks/library/code-tabs.js +5 -0
- package/dist/client/blocks/library/code.js +1 -0
- package/dist/client/chat/message-components.d.ts +7 -0
- package/dist/client/chat/message-components.js +1 -1
- package/dist/client/chat/run-recovery.js +5 -2
- package/dist/client/chat/tool-call-display.js +9 -3
- package/dist/client/chat-first/apps-rail.js +2 -2
- package/dist/client/chat-model-groups.d.ts +12 -0
- package/dist/client/chat-model-groups.js +3 -2
- package/dist/client/error-format.js +12 -0
- package/dist/client/integrations/GoogleProductLogo.d.ts +5 -0
- package/dist/client/integrations/GoogleProductLogo.js +45 -0
- package/dist/client/integrations/index.d.ts +2 -0
- package/dist/client/integrations/index.js +2 -0
- package/dist/client/integrations/workspace-provider-oauth.d.ts +8 -0
- package/dist/client/integrations/workspace-provider-oauth.js +13 -0
- package/dist/client/navigation/index.d.ts +1 -0
- package/dist/client/navigation/index.js +1 -0
- package/dist/client/resources/mcp-integration-catalog.js +0 -29
- package/dist/client/route-state.js +6 -0
- package/dist/client/settings/SettingsTabsPage.js +10 -6
- package/dist/client/sharing/ShareButton.js +11 -2
- package/dist/client/use-chat-models.d.ts +6 -0
- package/dist/client/use-chat-models.js +10 -0
- package/dist/client/use-db-sync.js +27 -9
- package/dist/client/workspace-app-navigation.d.ts +10 -0
- package/dist/client/workspace-app-navigation.js +38 -0
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/connections/catalog.d.ts +111 -9
- package/dist/connections/catalog.js +86 -30
- package/dist/db/create-get-db.js +18 -0
- package/dist/db/ddl-guard.d.ts +0 -4
- package/dist/db/ddl-guard.js +46 -0
- package/dist/deploy/build.d.ts +32 -0
- package/dist/deploy/build.js +241 -16
- package/dist/deploy/function-bundle.d.ts +45 -0
- package/dist/deploy/function-bundle.js +337 -0
- package/dist/deploy/workspace-deploy.js +19 -1
- package/dist/eject/workspace-connections.js +4 -0
- package/dist/email-catalog/registry.d.ts +4 -0
- package/dist/email-catalog/registry.js +79 -14
- package/dist/extensions/content-patch.js +14 -2
- package/dist/file-upload/actions/upload-image.d.ts +1 -1
- package/dist/integrations/plugin.d.ts +10 -0
- package/dist/integrations/plugin.js +40 -6
- package/dist/jobs/actions/run-automation-now.d.ts +2 -1
- package/dist/jobs/actions/run-automation-now.js +11 -5
- package/dist/jobs/frontmatter.js +53 -2
- package/dist/jobs/run-now.d.ts +11 -1
- package/dist/jobs/run-now.js +42 -7
- package/dist/jobs/scheduler.d.ts +1 -0
- package/dist/jobs/scheduler.js +2 -1
- package/dist/localization/core-messages/ar-SA.js +4 -1
- package/dist/localization/core-messages/de-DE.js +4 -1
- package/dist/localization/core-messages/en-US.d.ts +4 -1
- package/dist/localization/core-messages/en-US.js +4 -1
- package/dist/localization/core-messages/es-ES.js +4 -1
- package/dist/localization/core-messages/fr-FR.js +4 -1
- package/dist/localization/core-messages/hi-IN.js +4 -1
- package/dist/localization/core-messages/ja-JP.js +4 -1
- package/dist/localization/core-messages/ko-KR.js +4 -1
- package/dist/localization/core-messages/pt-BR.js +4 -1
- package/dist/localization/core-messages/zh-CN.js +4 -1
- package/dist/localization/core-messages/zh-TW.js +4 -1
- package/dist/localization/core-messages.d.ts +4 -1
- package/dist/localization/default-messages.d.ts +2 -5
- package/dist/localization/default-messages.js +2 -5
- package/dist/mcp/build-server.d.ts +9 -0
- package/dist/mcp/build-server.js +37 -8
- package/dist/mcp-client/oauth-client.d.ts +7 -0
- package/dist/mcp-client/oauth-client.js +12 -1
- package/dist/notifications/routes.d.ts +1 -1
- package/dist/oauth-tokens/index.d.ts +1 -1
- package/dist/oauth-tokens/index.js +1 -1
- package/dist/oauth-tokens/lifecycle.d.ts +11 -0
- package/dist/oauth-tokens/lifecycle.js +17 -0
- package/dist/oauth-tokens/store.js +7 -0
- package/dist/observability/posthog-ai.d.ts +15 -1
- package/dist/observability/posthog-ai.js +24 -12
- package/dist/observability/traces.js +158 -28
- package/dist/onboarding/app-profile.js +2 -2
- package/dist/onboarding/plugin.js +10 -2
- package/dist/onboarding/types.d.ts +2 -0
- package/dist/provider-api/actions/custom-provider-registration.d.ts +12 -12
- package/dist/provider-api/actions/provider-api.d.ts +11 -11
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/provider-api/index.js +2 -0
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/resources/store.js +13 -4
- package/dist/scripts/agent-engines/list-agent-engines.js +29 -3
- package/dist/scripts/db/check-scoping.js +9 -6
- package/dist/secrets/register-framework-secrets.js +1 -1
- package/dist/secrets/routes.d.ts +6 -6
- package/dist/server/action-discovery.js +5 -0
- package/dist/server/agent-chat/action-filters-a2a.d.ts +27 -3
- package/dist/server/agent-chat/action-filters-a2a.js +48 -9
- package/dist/server/agent-chat-plugin.js +36 -9
- package/dist/server/agent-discovery.js +43 -20
- package/dist/server/auth.js +18 -16
- package/dist/server/beta-opt-out-html.js +45 -4
- package/dist/server/better-auth-instance.d.ts +2 -1
- package/dist/server/better-auth-instance.js +23 -7
- package/dist/server/builder-browser.d.ts +4 -0
- package/dist/server/builder-browser.js +23 -1
- package/dist/server/builder-design-systems.d.ts +4 -1
- package/dist/server/builder-design-systems.js +87 -6
- package/dist/server/builder-oauth.d.ts +1 -7
- package/dist/server/builder-oauth.js +80 -163
- package/dist/server/core-routes-plugin.d.ts +29 -0
- package/dist/server/core-routes-plugin.js +113 -21
- package/dist/server/default-plugins.d.ts +18 -0
- package/dist/server/default-plugins.js +22 -0
- package/dist/server/edge.d.ts +1 -0
- package/dist/server/edge.js +1 -0
- package/dist/server/framework-request-handler.js +31 -3
- package/dist/server/google-oauth.d.ts +3 -0
- package/dist/server/google-oauth.js +3 -0
- package/dist/server/index.d.ts +4 -4
- package/dist/server/index.js +3 -3
- package/dist/server/onboarding-html.js +37 -3
- package/dist/server/workspace-provider-oauth.d.ts +6 -1
- package/dist/server/workspace-provider-oauth.js +72 -20
- package/dist/shared/agent-sidebar-url.d.ts +1 -0
- package/dist/shared/agent-sidebar-url.js +1 -0
- package/dist/shared/environment-lanes.d.ts +2 -0
- package/dist/shared/environment-lanes.js +3 -1
- package/dist/shared/index.d.ts +3 -1
- package/dist/shared/index.js +3 -1
- package/dist/shared/surface-visibility.d.ts +31 -0
- package/dist/shared/surface-visibility.js +57 -0
- package/dist/templates/chat/.agents/skills/secrets/SKILL.md +11 -4
- package/dist/templates/chat/app/routes.ts +3 -1
- package/dist/templates/chat/vitest.config.ts +8 -0
- package/dist/templates/default/.agents/skills/secrets/SKILL.md +11 -4
- package/dist/templates/default/app/routes.ts +3 -1
- package/dist/templates/headless/.agents/skills/secrets/SKILL.md +11 -4
- package/dist/templates/workspace-core/.agents/skills/secrets/SKILL.md +11 -4
- package/dist/tracking/registry.d.ts +11 -0
- package/dist/tracking/registry.js +5 -2
- package/dist/triggers/actions.js +10 -3
- package/dist/usage/store.js +23 -3
- package/dist/user-profile/actions/get-auth-methods.js +18 -5
- package/dist/vite/client.js +24 -5
- package/docs/content/actions-access-control.mdx +43 -4
- package/docs/content/actions-defining.mdx +16 -0
- package/docs/content/template-clips-capture-everywhere.mdx +29 -30
- package/docs/content/template-clips-developers.mdx +4 -4
- package/docs/content/template-clips.mdx +3 -1
- package/package.json +3 -3
- package/src/eject/workspace-connections.ts +4 -0
- package/src/templates/chat/.agents/skills/secrets/SKILL.md +11 -4
- package/src/templates/chat/app/routes.ts +3 -1
- package/src/templates/chat/vitest.config.ts +8 -0
- package/src/templates/default/.agents/skills/secrets/SKILL.md +11 -4
- package/src/templates/default/app/routes.ts +3 -1
- package/src/templates/headless/.agents/skills/secrets/SKILL.md +11 -4
- package/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +11 -4
- /package/corpus/templates/dispatch/app/routes/{apps.$appId.tsx → apps.$appId.$.tsx} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BETA_OPT_OUT_DURATION_MS, BETA_OPT_OUT_QUERY_PARAM, BETA_OPT_OUT_STORAGE_KEY, ENVIRONMENT_BETA_HOSTS, } from "../shared/environment-lanes.js";
|
|
1
|
+
import { BETA_FORCE_QUERY_PARAM, BETA_FORCE_SESSION_STORAGE_KEY, BETA_OPT_OUT_DURATION_MS, BETA_OPT_OUT_QUERY_PARAM, BETA_OPT_OUT_STORAGE_KEY, ENVIRONMENT_BETA_HOSTS, } from "../shared/environment-lanes.js";
|
|
2
2
|
export const BETA_OPT_OUT_PERSISTENCE_MARKER = "Persist the beta opt-out before authentication";
|
|
3
3
|
const ENVIRONMENT_SWITCHER_MARKER = 'data-agent-native-environment-switcher="1"';
|
|
4
4
|
const ENVIRONMENT_SWITCHER_STYLE_MARKER = 'data-agent-native-environment-switcher-style="1"';
|
|
@@ -16,11 +16,16 @@ const environmentSwitcherMarkup = `<div class="environment-switcher" id="environ
|
|
|
16
16
|
<div class="environment-popover-title" id="environment-popover-title">You're on Agent Native Beta</div>
|
|
17
17
|
<div class="environment-popover-copy">Choose where you want to continue.</div>
|
|
18
18
|
<a class="environment-production-link" id="environment-production-link" href="">Switch to production</a>
|
|
19
|
+
<button type="button" class="environment-hide-badge" id="environment-hide-badge">Hide badge</button>
|
|
19
20
|
</div>
|
|
20
21
|
</div>`;
|
|
21
22
|
const environmentSwitcherStyles = `<style ${ENVIRONMENT_SWITCHER_STYLE_MARKER}>
|
|
22
|
-
color-scheme: dark;
|
|
23
23
|
.environment-switcher {
|
|
24
|
+
/* Must stay inside a rule. A bare declaration at stylesheet top level does
|
|
25
|
+
not end at its semicolon: the next qualified rule's prelude swallows it,
|
|
26
|
+
taking this selector with it, so the badge loses position/left/bottom and
|
|
27
|
+
drops into normal flow at the bottom of the page. */
|
|
28
|
+
color-scheme: dark;
|
|
24
29
|
position: fixed;
|
|
25
30
|
left: max(0.75rem, env(safe-area-inset-left));
|
|
26
31
|
bottom: max(0.75rem, env(safe-area-inset-bottom));
|
|
@@ -53,7 +58,8 @@ const environmentSwitcherStyles = `<style ${ENVIRONMENT_SWITCHER_STYLE_MARKER}>
|
|
|
53
58
|
background: color-mix(in srgb, CanvasText 85%, Canvas);
|
|
54
59
|
}
|
|
55
60
|
.environment-badge:focus-visible,
|
|
56
|
-
.environment-production-link:focus-visible
|
|
61
|
+
.environment-production-link:focus-visible,
|
|
62
|
+
.environment-hide-badge:focus-visible {
|
|
57
63
|
outline: 2px solid LinkText;
|
|
58
64
|
outline-offset: 2px;
|
|
59
65
|
}
|
|
@@ -87,6 +93,23 @@ const environmentSwitcherStyles = `<style ${ENVIRONMENT_SWITCHER_STYLE_MARKER}>
|
|
|
87
93
|
.environment-production-link:hover {
|
|
88
94
|
background: color-mix(in srgb, CanvasText 12%, Canvas);
|
|
89
95
|
}
|
|
96
|
+
.environment-hide-badge {
|
|
97
|
+
display: flex;
|
|
98
|
+
align-items: center;
|
|
99
|
+
justify-content: center;
|
|
100
|
+
width: 100%;
|
|
101
|
+
min-height: 2rem;
|
|
102
|
+
margin-top: 0.5rem;
|
|
103
|
+
margin-bottom: -0.5rem;
|
|
104
|
+
padding: 0.375rem 0.75rem;
|
|
105
|
+
color: GrayText;
|
|
106
|
+
border: 0;
|
|
107
|
+
background: transparent;
|
|
108
|
+
font: inherit;
|
|
109
|
+
font-size: 0.8125rem;
|
|
110
|
+
cursor: pointer;
|
|
111
|
+
}
|
|
112
|
+
.environment-hide-badge:hover { color: CanvasText; }
|
|
90
113
|
</style>`;
|
|
91
114
|
const environmentSwitcherScript = `<script ${ENVIRONMENT_SWITCHER_SCRIPT_MARKER}>
|
|
92
115
|
(function __anInitEnvironmentBadge() {
|
|
@@ -94,9 +117,19 @@ const environmentSwitcherScript = `<script ${ENVIRONMENT_SWITCHER_SCRIPT_MARKER}
|
|
|
94
117
|
var button = document.getElementById('environment-badge');
|
|
95
118
|
var popover = document.getElementById('environment-popover');
|
|
96
119
|
var productionLink = document.getElementById('environment-production-link');
|
|
97
|
-
|
|
120
|
+
var hideButton = document.getElementById('environment-hide-badge');
|
|
121
|
+
if (!switcher || !button || !popover || !productionLink || !hideButton) return;
|
|
98
122
|
if (window.parent !== window) return;
|
|
99
123
|
|
|
124
|
+
try {
|
|
125
|
+
var forceUrl = new URL(window.location.href);
|
|
126
|
+
if (forceUrl.searchParams.get(${JSON.stringify(BETA_FORCE_QUERY_PARAM)}) === 'true') {
|
|
127
|
+
window.sessionStorage.setItem(${JSON.stringify(BETA_FORCE_SESSION_STORAGE_KEY)}, '1');
|
|
128
|
+
}
|
|
129
|
+
} catch (error) {
|
|
130
|
+
void error;
|
|
131
|
+
}
|
|
132
|
+
|
|
100
133
|
var betaHosts = ${JSON.stringify(ENVIRONMENT_BETA_HOSTS)};
|
|
101
134
|
var hostname = (window.location.hostname || '').toLowerCase().replace(/\\.$/, '');
|
|
102
135
|
var productionHost = hostname.indexOf('beta.') === 0 ? hostname.slice(5) : '';
|
|
@@ -132,12 +165,20 @@ const environmentSwitcherScript = `<script ${ENVIRONMENT_SWITCHER_SCRIPT_MARKER}
|
|
|
132
165
|
document.addEventListener('keydown', function(event) {
|
|
133
166
|
if (event.key === 'Escape') setOpen(false);
|
|
134
167
|
});
|
|
168
|
+
hideButton.addEventListener('click', function() {
|
|
169
|
+
setOpen(false);
|
|
170
|
+
switcher.hidden = true;
|
|
171
|
+
});
|
|
135
172
|
})();
|
|
136
173
|
</script>`;
|
|
137
174
|
const betaOptOutPersistenceScript = `<script data-agent-native-beta-opt-out>
|
|
138
175
|
// ${BETA_OPT_OUT_PERSISTENCE_MARKER}.
|
|
139
176
|
(function __anPersistBetaOptOut() {
|
|
140
177
|
try {
|
|
178
|
+
var forceUrl = new URL(window.location.href);
|
|
179
|
+
if (forceUrl.searchParams.get(${JSON.stringify(BETA_FORCE_QUERY_PARAM)}) === 'true') {
|
|
180
|
+
window.sessionStorage.setItem(${JSON.stringify(BETA_FORCE_SESSION_STORAGE_KEY)}, '1');
|
|
181
|
+
}
|
|
141
182
|
var optOutUrl = new URL(window.location.href);
|
|
142
183
|
var optOutValue = optOutUrl.searchParams.get(${JSON.stringify(BETA_OPT_OUT_QUERY_PARAM)});
|
|
143
184
|
if (optOutValue === null) return;
|
|
@@ -265,5 +265,6 @@ export declare function resetBetterAuth(): Promise<void>;
|
|
|
265
265
|
*/
|
|
266
266
|
export declare function configureLocalSqlite(sqlite: {
|
|
267
267
|
pragma(statement: string): unknown;
|
|
268
|
-
|
|
268
|
+
close?(): void;
|
|
269
|
+
}): Promise<void>;
|
|
269
270
|
export declare function buildDatabaseConfig(dialect: string): Promise<BetterAuthOptions["database"]>;
|
|
@@ -16,7 +16,7 @@ import { pgTable, text as pgText, timestamp as pgTimestamp, boolean as pgBoolean
|
|
|
16
16
|
import { sqliteTable, text as sqliteText, integer as sqliteInteger, } from "drizzle-orm/sqlite-core";
|
|
17
17
|
import { TEMPLATES } from "../cli/templates-meta.js";
|
|
18
18
|
import { getDbExec, isPostgres } from "../db/client.js";
|
|
19
|
-
import { getDialect, getCloudflareD1Binding, getDatabaseUrl, getDatabaseAuthToken, closePgliteClients, getPgliteClient, isPgliteUrl, loadPgliteDrizzle, pgPoolOptions, neonPoolOptions, guardNeonPool, sharedDbPool, onSharedDbPoolsClosed, onSharedDbPoolReplaced, } from "../db/client.js";
|
|
19
|
+
import { getDialect, getCloudflareD1Binding, getDatabaseUrl, getDatabaseAuthToken, closePgliteClients, getPgliteClient, isPgliteUrl, loadPgliteDrizzle, pgPoolOptions, neonPoolOptions, guardNeonPool, sharedDbPool, onSharedDbPoolsClosed, onSharedDbPoolReplaced, prepareLocalSqliteUrl, sqliteFilenameFromUrl, retrySqliteBusy, } from "../db/client.js";
|
|
20
20
|
import { CORE_RESET_PASSWORD_EMAIL_ID, CORE_VERIFY_SIGNUP_EMAIL_ID, } from "../email-catalog/system-emails.js";
|
|
21
21
|
import { saveOAuthTokens } from "../oauth-tokens/store.js";
|
|
22
22
|
import { acceptPendingInvitationsForEmail } from "../org/accept-pending.js";
|
|
@@ -539,7 +539,12 @@ export async function getBetterAuth(config) {
|
|
|
539
539
|
return _auth;
|
|
540
540
|
if (_initPromise)
|
|
541
541
|
return _initPromise;
|
|
542
|
-
|
|
542
|
+
// A failed boot must not be cached: every later request would replay the same
|
|
543
|
+
// stale error with no way back short of restarting the process.
|
|
544
|
+
_initPromise = createBetterAuthInstance(config).catch((error) => {
|
|
545
|
+
_initPromise = undefined;
|
|
546
|
+
throw error;
|
|
547
|
+
});
|
|
543
548
|
_auth = await _initPromise;
|
|
544
549
|
return _auth;
|
|
545
550
|
}
|
|
@@ -1247,9 +1252,20 @@ async function createBetterAuthInstance(config) {
|
|
|
1247
1252
|
* as the shared app connection. Better Auth uses its own SQLite handle, so the
|
|
1248
1253
|
* app connection's busy timeout does not protect first-run account creation.
|
|
1249
1254
|
*/
|
|
1250
|
-
export function configureLocalSqlite(sqlite) {
|
|
1255
|
+
export async function configureLocalSqlite(sqlite) {
|
|
1251
1256
|
sqlite.pragma("busy_timeout = 10000");
|
|
1252
|
-
|
|
1257
|
+
try {
|
|
1258
|
+
// Vite can start a replacement Nitro runtime while the previous instance is
|
|
1259
|
+
// still releasing app.db, and the busy timeout can expire during that
|
|
1260
|
+
// handoff, so retry the idempotent WAL negotiation.
|
|
1261
|
+
await retrySqliteBusy(async () => sqlite.pragma("journal_mode = WAL"), {
|
|
1262
|
+
rethrow: true,
|
|
1263
|
+
});
|
|
1264
|
+
}
|
|
1265
|
+
catch (error) {
|
|
1266
|
+
sqlite.close?.();
|
|
1267
|
+
throw error;
|
|
1268
|
+
}
|
|
1253
1269
|
}
|
|
1254
1270
|
export async function buildDatabaseConfig(dialect) {
|
|
1255
1271
|
if (dialect === "postgres") {
|
|
@@ -1325,9 +1341,9 @@ export async function buildDatabaseConfig(dialect) {
|
|
|
1325
1341
|
if (url.startsWith("file:") || !url.includes("://")) {
|
|
1326
1342
|
// Local SQLite via better-sqlite3
|
|
1327
1343
|
const { default: Database } = await import("better-sqlite3");
|
|
1328
|
-
const
|
|
1329
|
-
const sqlite = new Database(
|
|
1330
|
-
configureLocalSqlite(sqlite);
|
|
1344
|
+
const sqliteUrl = await prepareLocalSqliteUrl(url.startsWith("file:") ? url : `file:${url}`);
|
|
1345
|
+
const sqlite = new Database(sqliteFilenameFromUrl(sqliteUrl));
|
|
1346
|
+
await configureLocalSqlite(sqlite);
|
|
1331
1347
|
const { drizzle } = await import("drizzle-orm/better-sqlite3");
|
|
1332
1348
|
const db = drizzle(sqlite, { schema: sqliteAuthSchema });
|
|
1333
1349
|
const { drizzleAdapter } = await import("better-auth/adapters/drizzle");
|
|
@@ -339,11 +339,15 @@ export declare function createBuilderBrowserCallbackErrorPage(message: string, o
|
|
|
339
339
|
}): string;
|
|
340
340
|
export interface RunBuilderAgentArgs {
|
|
341
341
|
prompt: string;
|
|
342
|
+
context?: string;
|
|
342
343
|
projectId?: string;
|
|
343
344
|
branchName?: string;
|
|
344
345
|
userEmail?: string;
|
|
345
346
|
userId?: string;
|
|
346
347
|
}
|
|
348
|
+
export declare const BUILDER_AGENT_CONTEXT_MAX_CHARS = 32000;
|
|
349
|
+
export declare function normalizeBuilderAgentContext(value: unknown): string | undefined;
|
|
350
|
+
export declare function buildBuilderAgentUserPrompt(prompt: string, context?: string): string;
|
|
347
351
|
export interface RunBuilderAgentResult {
|
|
348
352
|
branchName: string;
|
|
349
353
|
projectId: string;
|
|
@@ -1381,6 +1381,27 @@ export function createBuilderBrowserCallbackErrorPage(message, opts = {}) {
|
|
|
1381
1381
|
</body>
|
|
1382
1382
|
</html>`;
|
|
1383
1383
|
}
|
|
1384
|
+
export const BUILDER_AGENT_CONTEXT_MAX_CHARS = 32_000;
|
|
1385
|
+
export function normalizeBuilderAgentContext(value) {
|
|
1386
|
+
if (value == null)
|
|
1387
|
+
return undefined;
|
|
1388
|
+
if (typeof value !== "string") {
|
|
1389
|
+
throw new Error("context must be a string");
|
|
1390
|
+
}
|
|
1391
|
+
const context = value.trim();
|
|
1392
|
+
if (!context)
|
|
1393
|
+
return undefined;
|
|
1394
|
+
if (context.length > BUILDER_AGENT_CONTEXT_MAX_CHARS) {
|
|
1395
|
+
throw new Error(`context must be ${BUILDER_AGENT_CONTEXT_MAX_CHARS} characters or fewer`);
|
|
1396
|
+
}
|
|
1397
|
+
return context;
|
|
1398
|
+
}
|
|
1399
|
+
export function buildBuilderAgentUserPrompt(prompt, context) {
|
|
1400
|
+
const normalizedContext = normalizeBuilderAgentContext(context);
|
|
1401
|
+
if (!normalizedContext)
|
|
1402
|
+
return prompt;
|
|
1403
|
+
return `${prompt.trim()}\n\n<context>\n${normalizedContext}\n</context>`;
|
|
1404
|
+
}
|
|
1384
1405
|
function normalizeBuilderApiString(value, fieldName) {
|
|
1385
1406
|
if (typeof value !== "string" || !value.trim()) {
|
|
1386
1407
|
throw new Error(`Builder agent run returned a blank ${fieldName}`);
|
|
@@ -1636,11 +1657,12 @@ export async function runBuilderAgent(args) {
|
|
|
1636
1657
|
if (!builderUserEmail && !builderUserId) {
|
|
1637
1658
|
throw new Error("userEmail or userId is required");
|
|
1638
1659
|
}
|
|
1660
|
+
const userPrompt = buildBuilderAgentUserPrompt(args.prompt, args.context);
|
|
1639
1661
|
const url = new URL("/agents/run", getBuilderApiHost());
|
|
1640
1662
|
url.searchParams.set("apiKey", creds.publicKey);
|
|
1641
1663
|
const postRun = async (actor) => {
|
|
1642
1664
|
const body = {
|
|
1643
|
-
userMessage: { userPrompt
|
|
1665
|
+
userMessage: { userPrompt },
|
|
1644
1666
|
projectId,
|
|
1645
1667
|
};
|
|
1646
1668
|
if (args.branchName)
|
|
@@ -81,6 +81,8 @@ export interface BuilderDesignSystemHydratedReference extends BuilderDesignSyste
|
|
|
81
81
|
docs: BuilderDesignSystemDocument[];
|
|
82
82
|
tokenValues: Record<string, string>;
|
|
83
83
|
docCount: number;
|
|
84
|
+
/** True only when Builder explicitly confirms that indexing is complete. */
|
|
85
|
+
completionConfirmed?: boolean;
|
|
84
86
|
}
|
|
85
87
|
export interface BuilderDesignSystemIndexOptions {
|
|
86
88
|
projectName?: string;
|
|
@@ -108,8 +110,9 @@ export interface BuilderDesignSystemIndexResult {
|
|
|
108
110
|
designSystemId: string;
|
|
109
111
|
suggestedTitle: string | null;
|
|
110
112
|
builderUrl: string;
|
|
111
|
-
status:
|
|
113
|
+
status: BuilderDesignSystemStatus;
|
|
112
114
|
}
|
|
115
|
+
export type BuilderDesignSystemStatus = "in-progress" | "ready" | "complete" | "completed" | "error" | "failed" | "cancelled";
|
|
113
116
|
export interface BuilderDesignSystemUploadAttachment {
|
|
114
117
|
name: string;
|
|
115
118
|
mimetype: string;
|
|
@@ -10,6 +10,8 @@ const GCS_CHUNK_SIZE = 16 * 1024 * 1024;
|
|
|
10
10
|
const MAX_CHUNK_RETRIES = 5;
|
|
11
11
|
const DEFAULT_MAX_CODE_FILES = 50;
|
|
12
12
|
const DEFAULT_MAX_TOTAL_CODE_BYTES = 2 * 1024 * 1024;
|
|
13
|
+
const DEFAULT_BUILDER_DOC_PAGE_SIZE = 40;
|
|
14
|
+
const MAX_BUILDER_DOC_PAGES = 100;
|
|
13
15
|
const MAX_DOC_CONTENT_CHARS = 4_000;
|
|
14
16
|
const MAX_GITHUB_FILES = 50;
|
|
15
17
|
const MAX_GITHUB_TOTAL_BYTES = 2 * 1024 * 1024;
|
|
@@ -654,7 +656,35 @@ function normalizeBuilderDesignSystemDocument(value) {
|
|
|
654
656
|
: undefined,
|
|
655
657
|
};
|
|
656
658
|
}
|
|
657
|
-
|
|
659
|
+
function normalizeBuilderDesignSystemStatus(value) {
|
|
660
|
+
if (typeof value !== "string")
|
|
661
|
+
return "in-progress";
|
|
662
|
+
switch (value.trim().toLowerCase()) {
|
|
663
|
+
case "ready":
|
|
664
|
+
return "ready";
|
|
665
|
+
case "complete":
|
|
666
|
+
case "done":
|
|
667
|
+
case "success":
|
|
668
|
+
return "complete";
|
|
669
|
+
case "completed":
|
|
670
|
+
return "completed";
|
|
671
|
+
case "error":
|
|
672
|
+
return "error";
|
|
673
|
+
case "failed":
|
|
674
|
+
case "failure":
|
|
675
|
+
return "failed";
|
|
676
|
+
case "cancelled":
|
|
677
|
+
case "canceled":
|
|
678
|
+
return "cancelled";
|
|
679
|
+
default:
|
|
680
|
+
return "in-progress";
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
function isConfirmedBuilderDesignSystemStatus(value) {
|
|
684
|
+
const status = normalizeBuilderDesignSystemStatus(value);
|
|
685
|
+
return status === "ready" || status === "complete" || status === "completed";
|
|
686
|
+
}
|
|
687
|
+
async function fetchBuilderDesignSystemDocsResponse(designSystemId, options) {
|
|
658
688
|
const credentials = await resolveBuilderDesignSystemCredentials();
|
|
659
689
|
const url = makeBuilderDesignSystemUrl(`${encodeURIComponent(designSystemId)}/docs`, credentials);
|
|
660
690
|
if (options.page !== undefined)
|
|
@@ -671,13 +701,61 @@ export async function fetchBuilderDesignSystemDocs(designSystemId, options = {})
|
|
|
671
701
|
});
|
|
672
702
|
await assertOk(response, "Builder design-system docs fetch failed");
|
|
673
703
|
const json = (await response.json());
|
|
674
|
-
if (
|
|
704
|
+
if (Array.isArray(json)) {
|
|
705
|
+
return {
|
|
706
|
+
docs: json.map(normalizeBuilderDesignSystemDocument),
|
|
707
|
+
completionConfirmed: false,
|
|
708
|
+
};
|
|
709
|
+
}
|
|
710
|
+
if (!json || typeof json !== "object") {
|
|
711
|
+
throw new Error("Builder design-system docs fetch returned an invalid response.");
|
|
712
|
+
}
|
|
713
|
+
const envelope = json;
|
|
714
|
+
const rawDocs = envelope.docs ?? envelope.items;
|
|
715
|
+
if (!Array.isArray(rawDocs)) {
|
|
675
716
|
throw new Error("Builder design-system docs fetch returned an invalid response.");
|
|
676
717
|
}
|
|
677
|
-
|
|
718
|
+
const rawStatus = envelope.status ?? envelope.builderStatus;
|
|
719
|
+
const status = typeof rawStatus === "string"
|
|
720
|
+
? normalizeBuilderDesignSystemStatus(rawStatus)
|
|
721
|
+
: undefined;
|
|
722
|
+
const isTerminalFailure = status === "error" || status === "failed" || status === "cancelled";
|
|
723
|
+
return {
|
|
724
|
+
docs: rawDocs.map(normalizeBuilderDesignSystemDocument),
|
|
725
|
+
completionConfirmed: !isTerminalFailure &&
|
|
726
|
+
(envelope.complete === true ||
|
|
727
|
+
envelope.completed === true ||
|
|
728
|
+
isConfirmedBuilderDesignSystemStatus(status)),
|
|
729
|
+
...(status ? { status } : {}),
|
|
730
|
+
};
|
|
678
731
|
}
|
|
679
|
-
export async function
|
|
680
|
-
|
|
732
|
+
export async function fetchBuilderDesignSystemDocs(designSystemId, options = {}) {
|
|
733
|
+
return (await fetchBuilderDesignSystemDocsResponse(designSystemId, options))
|
|
734
|
+
.docs;
|
|
735
|
+
}
|
|
736
|
+
export async function hydrateBuilderDesignSystemReference(reference, options = {
|
|
737
|
+
page: 0,
|
|
738
|
+
pageSize: DEFAULT_BUILDER_DOC_PAGE_SIZE,
|
|
739
|
+
}) {
|
|
740
|
+
const pageSize = options.pageSize && options.pageSize > 0
|
|
741
|
+
? options.pageSize
|
|
742
|
+
: DEFAULT_BUILDER_DOC_PAGE_SIZE;
|
|
743
|
+
const docs = [];
|
|
744
|
+
let page = Math.max(0, options.page ?? 0);
|
|
745
|
+
let completionConfirmed = false;
|
|
746
|
+
let builderStatus = reference.builderStatus;
|
|
747
|
+
for (let pageNumber = 0; pageNumber < MAX_BUILDER_DOC_PAGES; pageNumber++) {
|
|
748
|
+
const response = await fetchBuilderDesignSystemDocsResponse(reference.builderDesignSystemId, { ...options, page, pageSize });
|
|
749
|
+
docs.push(...response.docs);
|
|
750
|
+
completionConfirmed ||= response.completionConfirmed;
|
|
751
|
+
builderStatus = response.status ?? builderStatus;
|
|
752
|
+
if (response.docs.length < pageSize)
|
|
753
|
+
break;
|
|
754
|
+
page += 1;
|
|
755
|
+
if (pageNumber === MAX_BUILDER_DOC_PAGES - 1) {
|
|
756
|
+
throw new Error("Builder design-system docs fetch exceeded the safe pagination limit.");
|
|
757
|
+
}
|
|
758
|
+
}
|
|
681
759
|
const tokenValues = {};
|
|
682
760
|
for (const doc of docs) {
|
|
683
761
|
if (!doc.tokenValues)
|
|
@@ -689,9 +767,12 @@ export async function hydrateBuilderDesignSystemReference(reference, options = {
|
|
|
689
767
|
}
|
|
690
768
|
return {
|
|
691
769
|
...reference,
|
|
770
|
+
...(builderStatus ? { builderStatus } : {}),
|
|
692
771
|
docs,
|
|
693
772
|
tokenValues,
|
|
694
773
|
docCount: docs.length,
|
|
774
|
+
completionConfirmed: completionConfirmed ||
|
|
775
|
+
isConfirmedBuilderDesignSystemStatus(builderStatus),
|
|
695
776
|
};
|
|
696
777
|
}
|
|
697
778
|
/**
|
|
@@ -771,7 +852,7 @@ export async function indexBuilderDesignSystem(options) {
|
|
|
771
852
|
builderUrl: branchUrl ||
|
|
772
853
|
builderProjectBranchUrl(indexed.projectId, indexed.branchName) ||
|
|
773
854
|
builderDesignSystemUrl(indexed.designSystemId),
|
|
774
|
-
status:
|
|
855
|
+
status: normalizeBuilderDesignSystemStatus(indexed.status),
|
|
775
856
|
};
|
|
776
857
|
}
|
|
777
858
|
/**
|
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
export declare const BUILDER_OAUTH_ISSUER = "https://mcp.builder.io";
|
|
2
2
|
export declare const BUILDER_OAUTH_RESOURCE = "https://api.builder.io";
|
|
3
|
-
export declare const BUILDER_OAUTH_PROTECTED_RESOURCE_METADATA = "https://mcp.builder.io/.well-known/oauth-protected-resource/api";
|
|
4
|
-
export declare const BUILDER_OAUTH_AUTHORIZATION_METADATA = "https://mcp.builder.io/.well-known/oauth-authorization-server";
|
|
5
|
-
export declare const BUILDER_OAUTH_AUTHORIZATION_ENDPOINT = "https://mcp.builder.io/oauth/authorize";
|
|
6
|
-
export declare const BUILDER_OAUTH_TOKEN_ENDPOINT = "https://mcp.builder.io/oauth/token";
|
|
7
|
-
export declare const BUILDER_OAUTH_REGISTRATION_ENDPOINT = "https://mcp.builder.io/oauth/register";
|
|
8
|
-
export declare const BUILDER_OAUTH_REVOCATION_ENDPOINT = "https://mcp.builder.io/oauth/revoke";
|
|
9
3
|
export declare const BUILDER_OAUTH_SCOPE = "builder:ai:invoke";
|
|
10
4
|
export declare const BUILDER_OAUTH_SCOPES: readonly ["builder:ai:invoke"];
|
|
11
5
|
export type BuilderOAuthPendingFlow = {
|
|
@@ -32,12 +26,12 @@ export declare function startBuilderOAuthAuthorization(input: {
|
|
|
32
26
|
}>;
|
|
33
27
|
export declare function finishBuilderOAuthAuthorization(input: {
|
|
34
28
|
ownerEmail: string;
|
|
29
|
+
orgId?: string;
|
|
35
30
|
code: string;
|
|
36
31
|
iss?: string;
|
|
37
32
|
pending: BuilderOAuthPendingFlow;
|
|
38
33
|
}): Promise<void>;
|
|
39
34
|
export declare function markBuilderOAuthReconnectRequired(ownerEmail: string): Promise<void>;
|
|
40
|
-
export declare function builderOAuthReconnectRequired(ownerEmail: string): Promise<boolean>;
|
|
41
35
|
export declare function getBuilderOAuthSession(ownerEmail: string): Promise<BuilderOAuthSession | null>;
|
|
42
36
|
export declare function hasBuilderOAuthSession(ownerEmail: string): Promise<boolean>;
|
|
43
37
|
export declare function resolveBuilderOAuthRequestAccess(input: {
|