@agent-native/core 0.176.1 → 0.176.2-nightly-20260831184159
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 +1 -1
- package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +4 -0
- package/corpus/templates/analytics/.agents/skills/secrets/SKILL.md +47 -0
- package/corpus/templates/analytics/AGENTS.md +13 -2
- package/corpus/templates/analytics/CHANGELOG.md +8 -0
- package/corpus/templates/analytics/actions/certify-dashboard.ts +39 -0
- package/corpus/templates/analytics/actions/get-sql-dashboard.ts +1 -1
- package/corpus/templates/analytics/actions/list-analysis-revisions.ts +4 -2
- package/corpus/templates/analytics/actions/list-dashboard-revisions.ts +4 -2
- package/corpus/templates/analytics/actions/search-analytics-query-catalog.ts +1 -0
- package/corpus/templates/analytics/actions/search-dashboard-references.ts +2 -1
- package/corpus/templates/analytics/actions/set-workspace-feature-flag.ts +2 -2
- package/corpus/templates/analytics/app/components/agents/FeatureFlagsFleetPanel.tsx +16 -1
- package/corpus/templates/analytics/app/components/layout/Layout.tsx +58 -0
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +7 -19
- package/corpus/templates/analytics/app/global.css +0 -7
- package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +1 -1
- package/corpus/templates/analytics/app/i18n-data.ts +42 -0
- package/corpus/templates/analytics/app/lib/track-metric.ts +15 -0
- package/corpus/templates/analytics/app/pages/NotFound.tsx +1 -1
- package/corpus/templates/analytics/app/pages/Placeholder.tsx +1 -1
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +115 -2
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +8 -0
- package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +23 -25
- package/corpus/templates/analytics/app/root.tsx +5 -5
- package/corpus/templates/analytics/app/routes/_index.tsx +18 -20
- package/corpus/templates/analytics/app/routes/dashboard.tsx +1 -1
- package/corpus/templates/analytics/app/routes/home.tsx +39 -0
- package/corpus/templates/analytics/changelog/2026-08-27-show-analytics-s-own-registered-flags-in-fleet-feature-flag-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-28-analytics-loading-placeholders-now-use-a-smooth-whole-surfac.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-28-analytics-loading-states-use-a-softer-whole-surfac.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-28-analytics-sidebar-horizontal-spacing-is-tighter.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-28-sidebar-branding-matches-the-app-text-color-with-a-tighter-m.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-28-sidebar-branding-uses-a-monochrome-agent-native-mark.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-29-analytics-loading-shine-is-more-subtle.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-29-chat-edits-can-be-reverted-to-saved-checkpoints.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-29-dashboard-certification-lives-in-the-overflow-menu.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-29-public-marketing-home.md +6 -0
- package/corpus/templates/analytics/package.json +2 -0
- package/corpus/templates/analytics/public/manifest.json +1 -1
- package/corpus/templates/analytics/server/db/schema.ts +4 -0
- package/corpus/templates/analytics/server/handlers/events.ts +10 -1
- package/corpus/templates/analytics/server/handlers/first-party-analytics.ts +9 -1
- package/corpus/templates/analytics/server/handlers/session-replay.ts +10 -1
- package/corpus/templates/analytics/server/lib/agent-readable-resource-context.ts +22 -2
- package/corpus/templates/analytics/server/lib/analytics-query-catalog.ts +82 -7
- package/corpus/templates/analytics/server/lib/dashboard-certification.ts +58 -0
- package/corpus/templates/analytics/server/lib/dashboard-report.ts +1 -0
- package/corpus/templates/analytics/server/lib/dashboards-store.ts +429 -46
- package/corpus/templates/analytics/server/lib/workspace-feature-flags.ts +204 -32
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +139 -0
- package/corpus/templates/analytics/server/plugins/auth.ts +1 -0
- package/corpus/templates/analytics/server/plugins/core-routes.ts +3 -2
- package/corpus/templates/analytics/server/plugins/db.ts +11 -0
- package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +4 -0
- package/corpus/templates/assets/.agents/skills/secrets/SKILL.md +47 -0
- package/corpus/templates/assets/app/components/layout/Header.tsx +2 -2
- package/corpus/templates/assets/app/components/layout/Layout.tsx +4 -3
- package/corpus/templates/assets/app/components/layout/Sidebar.tsx +14 -27
- package/corpus/templates/assets/app/hooks/use-navigation-state.ts +2 -2
- package/corpus/templates/assets/app/root.tsx +29 -9
- package/corpus/templates/assets/app/routes/_index.tsx +15 -116
- package/corpus/templates/assets/app/routes/chat.$threadId.tsx +1 -1
- package/corpus/templates/assets/app/routes/home.tsx +137 -0
- package/corpus/templates/assets/app/routes/library.tsx +5 -1
- package/corpus/templates/assets/app/routes/settings.tsx +28 -25
- package/corpus/templates/assets/changelog/2026-08-26-templates-across-brand-kits.md +1 -0
- package/corpus/templates/assets/public/manifest.json +1 -1
- package/corpus/templates/assets/server/plugins/auth.ts +1 -0
- package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +4 -0
- package/corpus/templates/brain/.agents/skills/secrets/SKILL.md +47 -0
- package/corpus/templates/brain/app/components/layout/Layout.tsx +3 -3
- package/corpus/templates/brain/app/components/layout/Sidebar.tsx +10 -23
- package/corpus/templates/brain/app/lib/brain.ts +2 -2
- package/corpus/templates/brain/app/root.tsx +13 -3
- package/corpus/templates/brain/app/routes/_index.tsx +15 -55
- package/corpus/templates/brain/app/routes/home.tsx +76 -0
- package/corpus/templates/brain/app/routes.ts +1 -0
- package/corpus/templates/brain/public/manifest.json +1 -1
- package/corpus/templates/brain/server/lib/brain-health.ts +2 -2
- package/corpus/templates/brain/server/plugins/auth.ts +1 -1
- package/corpus/templates/brain/server/plugins/core-routes.ts +2 -1
- package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +4 -0
- package/corpus/templates/calendar/.agents/skills/secrets/SKILL.md +47 -0
- package/corpus/templates/calendar/CHANGELOG.md +12 -0
- package/corpus/templates/calendar/actions/event-action-helpers.ts +2 -1
- package/corpus/templates/calendar/actions/manage-event-draft.ts +1 -1
- package/corpus/templates/calendar/actions/update-event.ts +8 -1
- package/corpus/templates/calendar/amplify.yml +15 -0
- package/corpus/templates/calendar/app/components/calendar/ApolloPanel.tsx +2 -2
- package/corpus/templates/calendar/app/components/calendar/CreateEventDialog.tsx +102 -109
- package/corpus/templates/calendar/app/components/calendar/DayView.tsx +23 -10
- package/corpus/templates/calendar/app/components/calendar/DeleteEventDialog.tsx +2 -11
- package/corpus/templates/calendar/app/components/calendar/EventAttendeesSection.tsx +150 -141
- package/corpus/templates/calendar/app/components/calendar/EventCard.tsx +3 -1
- package/corpus/templates/calendar/app/components/calendar/EventDescription.tsx +2 -2
- package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +359 -222
- package/corpus/templates/calendar/app/components/calendar/InlineEventPickers.tsx +13 -5
- package/corpus/templates/calendar/app/components/calendar/WeekView.tsx +21 -9
- package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +21 -32
- package/corpus/templates/calendar/app/global.css +11 -0
- package/corpus/templates/calendar/app/hooks/use-meeting-start-notifications.ts +10 -0
- package/corpus/templates/calendar/app/hooks/use-navigation-state.ts +3 -3
- package/corpus/templates/calendar/app/i18n-data.ts +110 -0
- package/corpus/templates/calendar/app/lib/calendar-timezone.ts +12 -3
- package/corpus/templates/calendar/app/lib/event-popover-style.ts +43 -0
- package/corpus/templates/calendar/app/lib/mcp-embed.ts +8 -2
- package/corpus/templates/calendar/app/lib/utils.ts +3 -1
- package/corpus/templates/calendar/app/pages/BookingPage.tsx +2 -8
- package/corpus/templates/calendar/app/pages/CalendarView.tsx +9 -11
- package/corpus/templates/calendar/app/pages/ManageBookingPage.tsx +2 -6
- package/corpus/templates/calendar/app/pages/NotFound.tsx +1 -1
- package/corpus/templates/calendar/app/pages/Settings.tsx +54 -0
- package/corpus/templates/calendar/app/root.tsx +9 -1
- package/corpus/templates/calendar/app/routes/{_app._index.tsx → _app.home.tsx} +1 -1
- package/corpus/templates/calendar/app/routes/_index.tsx +34 -0
- package/corpus/templates/calendar/app/routes/event.tsx +2 -6
- package/corpus/templates/calendar/changelog/2026-08-28-all-day-events-stay-in-the-compact-top-bar-in-day-and-week-v.md +6 -0
- package/corpus/templates/calendar/changelog/2026-08-28-calendar-organizer-note-emails-now-link-back-to-agent-native.md +6 -0
- package/corpus/templates/calendar/changelog/2026-08-28-calendar-shows-google-profile-photos-in-the-desktop-app.md +6 -0
- package/corpus/templates/calendar/changelog/2026-08-28-event-creators-can-choose-whether-a-meeting-shows-as-free-or.md +6 -0
- package/corpus/templates/calendar/changelog/2026-08-28-event-popovers-match-notion-calendar-s-density-a-284px-blurr.md +6 -0
- package/corpus/templates/calendar/changelog/2026-08-28-fixed-calendar-navigation-scheduling-permissions-and-action-.md +6 -0
- package/corpus/templates/calendar/changelog/2026-08-28-google-calendar-connections-use-the-registered-callback-on-m.md +6 -0
- package/corpus/templates/calendar/changelog/2026-08-28-sidebar-branding-matches-the-app-text-color-with-a-tighter-m.md +6 -0
- package/corpus/templates/calendar/changelog/2026-08-28-sidebar-branding-uses-a-monochrome-agent-native-mark.md +6 -0
- package/corpus/templates/calendar/changelog/2026-08-28-the-calendar-sidebar-keeps-the-settings-link-compact.md +6 -0
- package/corpus/templates/calendar/changelog/2026-08-28-the-calendar-sidebar-keeps-the-workspace-picker-compact.md +6 -0
- package/corpus/templates/calendar/changelog/2026-08-29-public-marketing-home.md +6 -0
- package/corpus/templates/calendar/public/manifest.json +1 -1
- package/corpus/templates/calendar/server/handlers/google-auth.ts +10 -2
- package/corpus/templates/calendar/server/lib/emails.ts +2 -1
- package/corpus/templates/calendar/server/lib/event-guest-notifications.ts +31 -5
- package/corpus/templates/calendar/server/lib/google-calendar.ts +4 -2
- package/corpus/templates/calendar/server/plugins/auth.ts +1 -0
- package/corpus/templates/calendar/server/plugins/core-routes.ts +5 -3
- package/corpus/templates/calendar/shared/event-permissions.ts +12 -0
- package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +4 -0
- package/corpus/templates/chat/.agents/skills/secrets/SKILL.md +47 -0
- package/corpus/templates/chat/AGENTS.md +5 -4
- package/corpus/templates/chat/app/components/layout/Header.tsx +1 -1
- package/corpus/templates/chat/app/components/layout/Layout.tsx +5 -4
- package/corpus/templates/chat/app/components/layout/Sidebar.tsx +16 -25
- package/corpus/templates/chat/app/hooks/use-navigation-state.ts +5 -5
- package/corpus/templates/chat/app/root.tsx +16 -3
- package/corpus/templates/chat/app/routes/_index.tsx +17 -74
- package/corpus/templates/chat/app/routes/chat.$threadId.tsx +1 -1
- package/corpus/templates/chat/app/routes/home.tsx +94 -0
- package/corpus/templates/chat/netlify.toml +2 -1
- package/corpus/templates/chat/public/manifest.json +1 -1
- package/corpus/templates/chat/server/plugins/auth.ts +1 -0
- package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +4 -0
- package/corpus/templates/clips/.agents/skills/secrets/SKILL.md +47 -0
- package/corpus/templates/clips/actions/add-comment.ts +18 -1
- package/corpus/templates/clips/actions/get-recording-player-data.ts +2 -0
- package/corpus/templates/clips/actions/list-comments.ts +2 -0
- package/corpus/templates/clips/actions/list-notifications.ts +60 -28
- package/corpus/templates/clips/actions/list-recording-mention-members.ts +64 -0
- package/corpus/templates/clips/actions/list-recordings.ts +1 -1
- package/corpus/templates/clips/actions/reply-to-comment.ts +17 -1
- package/corpus/templates/clips/actions/update-comment.ts +36 -2
- package/corpus/templates/clips/app/components/library/empty-state.tsx +1 -3
- package/corpus/templates/clips/app/components/library/library-grid.tsx +18 -6
- package/corpus/templates/clips/app/components/library/library-layout.tsx +6 -58
- package/corpus/templates/clips/app/components/library/recording-card.tsx +101 -3
- package/corpus/templates/clips/app/components/library/sort-menu.tsx +2 -2
- package/corpus/templates/clips/app/components/player/comment-composer.tsx +284 -0
- package/corpus/templates/clips/app/components/player/comments-panel.tsx +162 -46
- package/corpus/templates/clips/app/components/player/transcript-panel.tsx +38 -133
- package/corpus/templates/clips/app/components/player/video-player.tsx +1 -1
- package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +99 -20
- package/corpus/templates/clips/app/components/recorder/recording-toolbar.tsx +110 -116
- package/corpus/templates/clips/app/components/recorder/storage-setup-card.tsx +83 -60
- package/corpus/templates/clips/app/components/settings/ai-setup-section.tsx +17 -11
- package/corpus/templates/clips/app/components/settings/types.ts +5 -1
- package/corpus/templates/clips/app/components/settings/video-storage-section.tsx +21 -12
- package/corpus/templates/clips/app/global.css +0 -27
- package/corpus/templates/clips/app/hooks/use-desktop-promo.ts +3 -17
- package/corpus/templates/clips/app/hooks/use-mention-members.ts +24 -0
- package/corpus/templates/clips/app/hooks/use-navigation-state.ts +2 -2
- package/corpus/templates/clips/app/i18n/en-US.ts +15 -0
- package/corpus/templates/clips/app/lib/recording-backup.ts +245 -0
- package/corpus/templates/clips/app/lib/recording-retry.ts +189 -0
- package/corpus/templates/clips/app/lib/recording-status.ts +32 -0
- package/corpus/templates/clips/app/root.tsx +11 -2
- package/corpus/templates/clips/app/routes/_app.home.tsx +62 -0
- package/corpus/templates/clips/app/routes/_app.notifications.tsx +45 -12
- package/corpus/templates/clips/app/routes/_app.settings._index.tsx +2 -0
- package/corpus/templates/clips/app/routes/_index.tsx +11 -40
- package/corpus/templates/clips/app/routes/download.tsx +148 -15
- package/corpus/templates/clips/app/routes/embed.$shareId.tsx +4 -3
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +6 -11
- package/corpus/templates/clips/app/routes/record.tsx +72 -13
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +40 -24
- package/corpus/templates/clips/app/routes/share.meeting.$meetingId.tsx +2 -7
- package/corpus/templates/clips/changelog/2026-08-28-chrome-extension-download-help.md +6 -0
- package/corpus/templates/clips/changelog/2026-08-28-clips-loading-skeletons-use-a-softer-whole-surface.md +6 -0
- package/corpus/templates/clips/changelog/2026-08-28-comment-composer-no-longer-has-an-outer-border.md +6 -0
- package/corpus/templates/clips/changelog/2026-08-29-clips-loading-shine-is-more-subtle.md +6 -0
- package/corpus/templates/clips/desktop/src/app.tsx +377 -476
- package/corpus/templates/clips/desktop/src/components/ui/skeleton.tsx +1 -1
- package/corpus/templates/clips/desktop/src/components/ui/spinner.tsx +1 -17
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +4 -0
- package/corpus/templates/clips/desktop/src/overlays/countdown.tsx +0 -8
- package/corpus/templates/clips/desktop/src/overlays/record-pill.tsx +221 -460
- package/corpus/templates/clips/desktop/src/styles.css +0 -40
- package/corpus/templates/clips/desktop/src/tailwind.css +28 -14
- package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +15 -11
- package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +9 -0
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +192 -57
- package/corpus/templates/clips/desktop/src-tauri/src/recording_indicator.rs +9 -3
- package/corpus/templates/clips/desktop/src-tauri/src/tray.rs +12 -0
- package/corpus/templates/clips/desktop/src-tauri/src/util.rs +97 -3
- package/corpus/templates/clips/public/manifest.json +1 -1
- package/corpus/templates/clips/server/db/schema.ts +1 -0
- package/corpus/templates/clips/server/lib/activity-notifications.ts +30 -5
- package/corpus/templates/clips/server/lib/comment-mentions.ts +23 -0
- package/corpus/templates/clips/server/lib/emails.ts +2 -2
- package/corpus/templates/clips/server/lib/recording-page-access.ts +16 -0
- package/corpus/templates/clips/server/lib/transactional-email-templates.ts +14 -7
- package/corpus/templates/clips/server/plugins/auth.ts +1 -0
- package/corpus/templates/clips/server/plugins/core-routes.ts +5 -0
- package/corpus/templates/clips/server/plugins/db.ts +5 -0
- package/corpus/templates/clips/server/routes/api/auth/google-calendar.get.ts +4 -2
- package/corpus/templates/clips/server/routes/api/clips-latest.json.get.ts +77 -22
- package/corpus/templates/clips/server/routes/api/public-recording.get.ts +11 -0
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/interrupt.post.ts +4 -4
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/resume.get.ts +1 -1
- package/corpus/templates/clips/shared/comment-mentions.ts +71 -0
- package/corpus/templates/clips/shared/prerendered-public-paths.ts +1 -1
- package/corpus/templates/clips/shared/recording-core.ts +5 -0
- package/corpus/templates/clips/shared/recording-playhead.css +207 -0
- package/corpus/templates/clips/shared/recording-playhead.tsx +616 -0
- package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +4 -0
- package/corpus/templates/content/.agents/skills/secrets/SKILL.md +47 -0
- package/corpus/templates/content/CHANGELOG.md +6 -0
- package/corpus/templates/content/actions/_property-utils.ts +45 -9
- package/corpus/templates/content/actions/edit-document.ts +17 -0
- package/corpus/templates/content/actions/get-document.ts +31 -11
- package/corpus/templates/content/actions/list-document-properties.ts +30 -2
- package/corpus/templates/content/actions/list-document-versions.ts +49 -17
- package/corpus/templates/content/actions/list-documents.ts +13 -2
- package/corpus/templates/content/actions/restore-document-version.ts +8 -1
- package/corpus/templates/content/actions/update-document.ts +8 -0
- package/corpus/templates/content/app/components/QueryErrorState.tsx +1 -0
- package/corpus/templates/content/app/components/editor/DocumentBlockFields.tsx +28 -8
- package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +94 -61
- package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +24 -10
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +16 -13
- package/corpus/templates/content/app/components/editor/database/settings.tsx +16 -13
- package/corpus/templates/content/app/components/layout/Layout.tsx +35 -1
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +5 -18
- package/corpus/templates/content/app/hooks/use-document-properties.ts +5 -3
- package/corpus/templates/content/app/hooks/use-documents.ts +3 -1
- package/corpus/templates/content/app/hooks/use-navigation-state.ts +3 -3
- package/corpus/templates/content/app/root.tsx +9 -4
- package/corpus/templates/content/app/routes/{_app._index.tsx → _app.home.tsx} +12 -4
- package/corpus/templates/content/app/routes/_index.tsx +33 -0
- package/corpus/templates/content/changelog/2026-08-26-shared-page-load-failures-now-stay-visible-and-safe.md +6 -0
- package/corpus/templates/content/docs/product/capabilities/content.workspace.session-restore.md +2 -2
- package/corpus/templates/content/e2e/playwright.config.ts +1 -1
- package/corpus/templates/content/package.json +2 -0
- package/corpus/templates/content/parity/matrix.md +1 -1
- package/corpus/templates/content/parity/matrix.ts +1 -1
- package/corpus/templates/content/public/manifest.json +1 -1
- package/corpus/templates/content/server/db/schema.ts +1 -0
- package/corpus/templates/content/server/lib/document-version-context.ts +67 -0
- package/corpus/templates/content/server/plugins/agent-chat.ts +155 -0
- package/corpus/templates/content/server/plugins/auth.ts +1 -0
- package/corpus/templates/content/server/plugins/core-routes.ts +3 -2
- package/corpus/templates/content/server/plugins/db.ts +5 -0
- package/corpus/templates/content/shared/api.ts +6 -4
- package/corpus/templates/crm/.agents/skills/frontend-design/SKILL.md +4 -0
- package/corpus/templates/crm/.agents/skills/secrets/SKILL.md +47 -0
- package/corpus/templates/crm/actions/list-crm-dashboard-revisions.ts +1 -1
- package/corpus/templates/crm/agent-native.app-skill.json +1 -1
- package/corpus/templates/crm/app/components/layout/CrmCommandMenu.tsx +1 -1
- package/corpus/templates/crm/app/components/layout/CrmLayout.tsx +36 -1
- package/corpus/templates/crm/app/components/layout/CrmSidebar.tsx +3 -3
- package/corpus/templates/crm/app/root.tsx +28 -7
- package/corpus/templates/crm/app/routes/_index.tsx +28 -18
- package/corpus/templates/crm/app/routes/home.tsx +27 -0
- package/corpus/templates/crm/app/routes/setup.tsx +2 -2
- package/corpus/templates/crm/app/routes.ts +1 -0
- package/corpus/templates/crm/public/manifest.json +1 -1
- package/corpus/templates/crm/server/plugins/agent-chat.ts +81 -0
- package/corpus/templates/crm/server/plugins/auth.ts +1 -0
- package/corpus/templates/crm/server/plugins/core-routes.ts +2 -1
- package/corpus/templates/crm/server/plugins/db.ts +7 -1
- package/corpus/templates/crm/shared/crm-navigation.ts +3 -2
- package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +13 -0
- package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +4 -0
- package/corpus/templates/design/.agents/skills/secrets/SKILL.md +47 -0
- package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +22 -10
- package/corpus/templates/design/AGENTS.md +1 -1
- package/corpus/templates/design/actions/add-breakpoint.ts +3 -1
- package/corpus/templates/design/actions/add-fusion-screens.ts +2 -0
- package/corpus/templates/design/actions/add-localhost-screens.ts +16 -11
- package/corpus/templates/design/actions/apply-a11y-fix.ts +6 -8
- package/corpus/templates/design/actions/apply-component-prop-edit.ts +3 -1
- package/corpus/templates/design/actions/apply-design-token-edit.ts +3 -1
- package/corpus/templates/design/actions/apply-motion-edit.ts +18 -13
- package/corpus/templates/design/actions/apply-shader-fill.ts +3 -1
- package/corpus/templates/design/actions/apply-source-edit.ts +6 -1
- package/corpus/templates/design/actions/apply-tweaks.ts +3 -1
- package/corpus/templates/design/actions/apply-visual-edit.ts +14 -9
- package/corpus/templates/design/actions/clone-creative-context-design.ts +6 -1
- package/corpus/templates/design/actions/create-component.ts +3 -1
- package/corpus/templates/design/actions/create-file.ts +3 -1
- package/corpus/templates/design/actions/delete-file.ts +3 -1
- package/corpus/templates/design/actions/detach-component-instance.ts +3 -1
- package/corpus/templates/design/actions/edit-design.ts +16 -11
- package/corpus/templates/design/actions/generate-design.ts +19 -14
- package/corpus/templates/design/actions/get-design-branch-diff.ts +26 -31
- package/corpus/templates/design/actions/get-design-review.ts +25 -31
- package/corpus/templates/design/actions/get-design-system-index-status.ts +55 -0
- package/corpus/templates/design/actions/get-design-system.ts +1 -1
- package/corpus/templates/design/actions/hydrate-figma-paste-images.ts +3 -1
- package/corpus/templates/design/actions/import-design-source.ts +16 -9
- package/corpus/templates/design/actions/import-design-tokens.ts +3 -1
- package/corpus/templates/design/actions/import-figma-clipboard.ts +28 -16
- package/corpus/templates/design/actions/import-figma-frame.ts +3 -1
- package/corpus/templates/design/actions/insert-asset.ts +3 -1
- package/corpus/templates/design/actions/insert-design-native-asset.ts +3 -1
- package/corpus/templates/design/actions/insert-figma-library-asset.ts +3 -1
- package/corpus/templates/design/actions/list-design-versions.ts +23 -0
- package/corpus/templates/design/actions/migrate-board-objects-to-file.ts +3 -1
- package/corpus/templates/design/actions/open-visual-edit.ts +23 -20
- package/corpus/templates/design/actions/present-design-variants.ts +7 -2
- package/corpus/templates/design/actions/refresh-design-system-with-builder.ts +66 -10
- package/corpus/templates/design/actions/remove-breakpoint.ts +3 -1
- package/corpus/templates/design/actions/remove-motion-timeline.ts +3 -1
- package/corpus/templates/design/actions/restore-design-version.ts +16 -0
- package/corpus/templates/design/actions/set-layout-grid.ts +94 -0
- package/corpus/templates/design/actions/swap-component-instance.ts +6 -1
- package/corpus/templates/design/actions/update-design.ts +16 -11
- package/corpus/templates/design/actions/update-file.ts +2 -0
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +25 -0
- package/corpus/templates/design/app/components/design/EditPanel.tsx +36 -8
- package/corpus/templates/design/app/components/design/LayersPanel.tsx +6 -6
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +185 -29
- package/corpus/templates/design/app/components/design/ReviewCommentsPanel.tsx +4 -4
- package/corpus/templates/design/app/components/design/ReviewPanel.tsx +1 -1
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +35 -10
- package/corpus/templates/design/app/components/design/canvas-primitive-style.ts +16 -9
- package/corpus/templates/design/app/components/design/edit-panel/component-section.tsx +51 -21
- package/corpus/templates/design/app/components/design/edit-panel/effects-properties.tsx +18 -17
- package/corpus/templates/design/app/components/design/edit-panel/field-primitives.tsx +6 -1
- package/corpus/templates/design/app/components/design/edit-panel/frame-presets-panel.tsx +3 -3
- package/corpus/templates/design/app/components/design/edit-panel/layout-grid-properties.tsx +88 -0
- package/corpus/templates/design/app/components/design/edit-panel/panel-primitives.tsx +5 -2
- package/corpus/templates/design/app/components/design/edit-panel/position-layout-properties.tsx +8 -4
- package/corpus/templates/design/app/components/design/edit-panel/typography-helpers.ts +8 -103
- package/corpus/templates/design/app/components/design/edit-panel/typography-properties.tsx +68 -83
- package/corpus/templates/design/app/components/design/editor/MakeRealDialog.tsx +35 -10
- package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +29 -24
- package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +6 -0
- package/corpus/templates/design/app/components/design/inspector/GlslShaderPanel.tsx +72 -71
- package/corpus/templates/design/app/components/design/inspector/InspectorControlPopover.tsx +1 -1
- package/corpus/templates/design/app/components/design/keyboard-shortcuts.ts +9 -0
- package/corpus/templates/design/app/components/design/multi-screen/types.ts +8 -0
- package/corpus/templates/design/app/components/layout/Layout.tsx +32 -0
- package/corpus/templates/design/app/components/layout/Sidebar.tsx +8 -21
- package/corpus/templates/design/app/global.css +72 -1
- package/corpus/templates/design/app/hooks/use-navigation-state.ts +1 -1
- package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +32 -1
- package/corpus/templates/design/app/i18n-data.ts +116 -12
- package/corpus/templates/design/app/i18n-keyboard-shortcuts.ts +3 -1
- package/corpus/templates/design/app/lib/design-system-data.ts +36 -0
- package/corpus/templates/design/app/pages/DesignEditor.tsx +170 -34
- package/corpus/templates/design/app/pages/DesignSystems.tsx +126 -11
- package/corpus/templates/design/app/pages/Index.tsx +15 -7
- package/corpus/templates/design/app/pages/NotFound.tsx +1 -1
- package/corpus/templates/design/app/pages/Templates.tsx +18 -3
- package/corpus/templates/design/app/pages/VisualEdit.tsx +1 -1
- package/corpus/templates/design/app/pages/design-editor/code-layer-state.ts +3 -3
- package/corpus/templates/design/app/pages/design-editor/commands/README.md +1 -0
- package/corpus/templates/design/app/pages/design-editor/commands/geometry-commit.ts +2 -1
- package/corpus/templates/design/app/pages/design-editor/commands/set-layout-grid.ts +66 -0
- package/corpus/templates/design/app/pages/design-editor/design-data-geometry-utils.ts +5 -0
- package/corpus/templates/design/app/pages/design-editor/effects/publish-agent-selection-context.ts +9 -1
- package/corpus/templates/design/app/pages/design-editor/effects/resume-pending-generation.ts +39 -9
- package/corpus/templates/design/app/pages/design-editor/generation-prompt-directives.ts +31 -2
- package/corpus/templates/design/app/pages/design-editor/geometry-persistence.ts +26 -0
- package/corpus/templates/design/app/pages/design-editor/intake-question-topics.ts +335 -0
- package/corpus/templates/design/app/pages/design-editor/nudge-intent.ts +8 -1
- package/corpus/templates/design/app/root.tsx +12 -2
- package/corpus/templates/design/app/routes/_index.tsx +14 -1
- package/corpus/templates/design/app/routes/home.tsx +21 -0
- package/corpus/templates/design/changelog/2026-08-21-builder-design-system-imports-reconcile-after-indexing.md +1 -1
- package/corpus/templates/design/changelog/2026-08-28-frames-can-carry-an-8px-layout-grid-that-positions-snap-to.md +6 -0
- package/corpus/templates/design/changelog/2026-08-28-x-and-y-are-always-whole-numbers.md +6 -0
- package/corpus/templates/design/public/manifest.json +1 -1
- package/corpus/templates/design/server/db/schema.ts +2 -0
- package/corpus/templates/design/server/handlers/design-system-builder-link.ts +84 -0
- package/corpus/templates/design/server/lib/builder-design-system-proxy.ts +9 -1
- package/corpus/templates/design/server/lib/design-versions.ts +1017 -0
- package/corpus/templates/design/server/plugins/agent-chat.ts +144 -0
- package/corpus/templates/design/server/plugins/auth.ts +1 -1
- package/corpus/templates/design/server/plugins/core-routes.ts +3 -2
- package/corpus/templates/design/server/plugins/db.ts +7 -0
- package/corpus/templates/design/server/routes/api/design-system-builder-link.get.ts +1 -0
- package/corpus/templates/design/shared/canvas-math.ts +106 -14
- package/corpus/templates/design/shared/layout-grid.ts +80 -0
- package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +4 -0
- package/corpus/templates/dispatch/.agents/skills/secrets/SKILL.md +47 -0
- package/corpus/templates/dispatch/AGENTS.md +11 -13
- package/corpus/templates/dispatch/actions/list-workspace-connections.ts +10 -5
- package/corpus/templates/dispatch/app/i18n-data.ts +120 -0
- package/corpus/templates/dispatch/app/root.tsx +11 -1
- package/corpus/templates/dispatch/app/routes/_index.tsx +34 -7
- package/corpus/templates/dispatch/app/routes/home.tsx +7 -0
- package/corpus/templates/dispatch/package.json +1 -0
- package/corpus/templates/dispatch/public/manifest.json +1 -1
- package/corpus/templates/factory/.agents/skills/factory-graphs/SKILL.md +11 -2
- package/corpus/templates/factory/.agents/skills/frontend-design/SKILL.md +4 -0
- package/corpus/templates/factory/.agents/skills/secrets/SKILL.md +47 -0
- package/corpus/templates/factory/.env.example +2 -14
- package/corpus/templates/factory/AGENTS.md +12 -11
- package/corpus/templates/factory/README.md +15 -17
- package/corpus/templates/factory/actions/{babysit-agent-native-pull-request.ts → babysit-factory-pull-request.ts} +125 -88
- package/corpus/templates/factory/actions/create-factory-automation.ts +161 -0
- package/corpus/templates/factory/actions/create-factory.ts +4 -124
- package/corpus/templates/factory/actions/delete-factory.ts +11 -23
- package/corpus/templates/factory/actions/{start-builder-for-item.ts → dispatch-factory-item.ts} +169 -57
- package/corpus/templates/factory/actions/get-slack-feedback-context.ts +30 -10
- package/corpus/templates/factory/actions/get-triage-config.ts +22 -0
- package/corpus/templates/factory/actions/get-triage-item.ts +49 -2
- package/corpus/templates/factory/actions/{govern-agent-native-pull-request.ts → govern-factory-pull-request.ts} +95 -112
- package/corpus/templates/factory/actions/ingest-github-observation.ts +9 -2
- package/corpus/templates/factory/actions/list-factory-audit.ts +85 -12
- package/corpus/templates/factory/actions/list-factory-automation-templates.ts +56 -0
- package/corpus/templates/factory/actions/list-factory-automations.ts +36 -3
- package/corpus/templates/factory/actions/list-factory-graph-versions.ts +37 -10
- package/corpus/templates/factory/actions/list-triage-items.ts +120 -15
- package/corpus/templates/factory/actions/poll-github-sources.ts +102 -58
- package/corpus/templates/factory/actions/poll-sentry-errors.ts +73 -36
- package/corpus/templates/factory/actions/poll-slack-channel.ts +112 -28
- package/corpus/templates/factory/actions/{babysit-pull-request.ts → propose-pr-babysit-status.ts} +9 -47
- package/corpus/templates/factory/actions/reconcile-triage-run.ts +1 -1
- package/corpus/templates/factory/actions/save-factory-automation.ts +131 -33
- package/corpus/templates/factory/actions/save-factory-graph.ts +31 -8
- package/corpus/templates/factory/actions/save-triage-config.ts +7 -27
- package/corpus/templates/factory/actions/save-triage-rule.ts +1 -1
- package/corpus/templates/factory/app/components/factory/CreateFactoryAutomationView.tsx +258 -0
- package/corpus/templates/factory/app/components/factory/FactoryAuditView.tsx +349 -106
- package/corpus/templates/factory/app/components/factory/FactoryAutomationFields.tsx +614 -0
- package/corpus/templates/factory/app/components/factory/FactoryInboxView.tsx +1136 -0
- package/corpus/templates/factory/app/components/factory/FactoryInspector.tsx +7 -14
- package/corpus/templates/factory/app/components/factory/FactorySettingsView.tsx +4 -223
- package/corpus/templates/factory/app/components/factory/NewFactoryForm.tsx +10 -205
- package/corpus/templates/factory/app/components/factory/SlackMrkdwn.tsx +100 -0
- package/corpus/templates/factory/app/components/factory/audit-filters.ts +30 -0
- package/corpus/templates/factory/app/components/factory/factory-automation-form.ts +120 -0
- package/corpus/templates/factory/app/components/factory/inbox-filters.ts +84 -0
- package/corpus/templates/factory/app/components/factory/inbox-source-url.ts +23 -0
- package/corpus/templates/factory/app/components/factory/slack-emoji.ts +165 -0
- package/corpus/templates/factory/app/components/factory/slack-mrkdwn.ts +128 -0
- package/corpus/templates/factory/app/components/layout/Header.tsx +1 -1
- package/corpus/templates/factory/app/components/layout/Layout.tsx +63 -6
- package/corpus/templates/factory/app/components/layout/Sidebar.tsx +13 -26
- package/corpus/templates/factory/app/components/triage/triage-status-pill.tsx +63 -14
- package/corpus/templates/factory/app/global.css +106 -0
- package/corpus/templates/factory/app/hooks/use-navigation-state.ts +16 -10
- package/corpus/templates/factory/app/i18n/en-US.ts +154 -7
- package/corpus/templates/factory/app/lib/factory-tab-params.ts +59 -0
- package/corpus/templates/factory/app/lib/safe-http-url.ts +8 -0
- package/corpus/templates/factory/app/root.tsx +16 -3
- package/corpus/templates/factory/app/routes/_index.tsx +27 -5
- package/corpus/templates/factory/app/routes/factory.tsx +325 -733
- package/corpus/templates/factory/app/routes/home.tsx +13 -0
- package/corpus/templates/factory/app/routes/new-factory.tsx +3 -5
- package/corpus/templates/factory/changelog/2026-08-26-inbox-full-screen-thread.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-26-inbox-thread-and-audit-labels.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-27-audit-run-list-stacks.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-27-audit-run-names-wrap.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-27-factory-opens-on-inbox.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-27-github-repository-url.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-27-inbox-filters.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-27-polling-does-not-enable-automations.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-27-pr-babysit-can-poll-github.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-28-factory-automations-use-workspace-connections.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-28-inbox-approve-and-start-removed.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-28-pr-babysit-audit-shows-decisions.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-28-pr-babysit-reviews-next-github-prs.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-28-pr-babysit-sticky-out-of-scope.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-28-pr-babysit-uses-github-evidence.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-29-audit-filters-pagination-scroll.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-29-create-factory-automations.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-29-dispatch-reaction-argument.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-29-factory-action-names-match-behavior.md +6 -0
- package/corpus/templates/factory/public/manifest.json +1 -1
- package/corpus/templates/factory/server/connectors/slack.ts +8 -6
- package/corpus/templates/factory/server/db/schema.ts +23 -0
- package/corpus/templates/factory/server/lib/audit-cursor.ts +44 -0
- package/corpus/templates/factory/server/lib/factory-action-names.ts +15 -0
- package/corpus/templates/factory/server/lib/factory-audit-report.ts +29 -9
- package/corpus/templates/factory/server/lib/factory-automation-caller.ts +38 -0
- package/corpus/templates/factory/server/lib/factory-automation-config.ts +543 -0
- package/corpus/templates/factory/server/lib/factory-automation-plan.ts +0 -48
- package/corpus/templates/factory/server/lib/factory-automation-repair.ts +2 -18
- package/corpus/templates/factory/server/lib/factory-poll-cursors.ts +98 -0
- package/corpus/templates/factory/server/lib/factory-scope.ts +8 -0
- package/corpus/templates/factory/server/lib/github-repository.ts +104 -0
- package/corpus/templates/factory/server/lib/inbox-cursor.ts +34 -0
- package/corpus/templates/factory/server/lib/pr-babysit-prompt.ts +33 -0
- package/corpus/templates/factory/server/lib/require-factory-automation.ts +58 -17
- package/corpus/templates/factory/server/lib/safe-http-url.ts +8 -0
- package/corpus/templates/factory/server/lib/slack-feedback-prompt.ts +19 -10
- package/corpus/templates/factory/server/lib/source-reaction.ts +37 -0
- package/corpus/templates/factory/server/plugins/agent-chat.ts +18 -22
- package/corpus/templates/factory/server/plugins/auth.ts +1 -0
- package/corpus/templates/factory/server/plugins/factory-migrations.ts +26 -0
- package/corpus/templates/factory/server/plugins/factory-scheduler-job.ts +277 -164
- package/corpus/templates/factory/server/plugins/integrations.ts +5 -7
- package/corpus/templates/factory/server/triage/github-client.ts +274 -3
- package/corpus/templates/factory/server/triage/github-ingestion.ts +3 -1
- package/corpus/templates/factory/server/triage/metadata.ts +12 -0
- package/corpus/templates/factory/server/triage/pr-babysit.ts +22 -21
- package/corpus/templates/factory/server/triage/review-skill-alignment.ts +11 -11
- package/corpus/templates/factory/server/triage/review-state.ts +39 -0
- package/corpus/templates/factory/server/triage/slack-client.ts +14 -6
- package/corpus/templates/factory/server/triage/slack-poller.ts +34 -65
- package/corpus/templates/factory/server/triage/slack-user-labels.ts +126 -0
- package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +4 -0
- package/corpus/templates/forms/.agents/skills/secrets/SKILL.md +47 -0
- package/corpus/templates/forms/AGENTS.md +4 -3
- package/corpus/templates/forms/actions/response-insights.ts +4 -4
- package/corpus/templates/forms/actions/retry-response-deliveries.ts +26 -0
- package/corpus/templates/forms/app/components/layout/Sidebar.tsx +8 -33
- package/corpus/templates/forms/app/hooks/use-navigation-state.ts +1 -1
- package/corpus/templates/forms/app/lib/route-prewarm.ts +1 -1
- package/corpus/templates/forms/app/root.tsx +3 -2
- package/corpus/templates/forms/app/routes/_app.home.tsx +47 -0
- package/corpus/templates/forms/app/routes/_app.tsx +2 -1
- package/corpus/templates/forms/app/routes/_index.tsx +10 -23
- package/corpus/templates/forms/public/manifest.json +1 -1
- package/corpus/templates/forms/server/db/schema.ts +64 -17
- package/corpus/templates/forms/server/handlers/submissions.ts +1022 -94
- package/corpus/templates/forms/server/lib/integrations.ts +100 -33
- package/corpus/templates/forms/server/middleware/00-public-cors.ts +1 -1
- package/corpus/templates/forms/server/plugins/auth.ts +1 -0
- package/corpus/templates/forms/server/plugins/core-routes.ts +1 -0
- package/corpus/templates/forms/server/plugins/db.ts +40 -0
- package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +4 -0
- package/corpus/templates/macros/.agents/skills/secrets/SKILL.md +47 -0
- package/corpus/templates/macros/actions/view-screen.ts +1 -1
- package/corpus/templates/macros/app/components/layout/AppLayout.tsx +9 -21
- package/corpus/templates/macros/app/components/layout/Header.tsx +1 -1
- package/corpus/templates/macros/app/root.tsx +22 -8
- package/corpus/templates/macros/app/routes/_index.tsx +16 -291
- package/corpus/templates/macros/app/routes/home.tsx +312 -0
- package/corpus/templates/macros/server/plugins/auth.ts +9 -7
- package/corpus/templates/macros/server/plugins/core-routes.ts +1 -0
- package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +4 -0
- package/corpus/templates/mail/.agents/skills/inbox-automations/SKILL.md +13 -2
- package/corpus/templates/mail/.agents/skills/inbox-reads-and-triage/SKILL.md +1 -1
- package/corpus/templates/mail/.agents/skills/secrets/SKILL.md +47 -0
- package/corpus/templates/mail/AGENTS.md +5 -2
- package/corpus/templates/mail/actions/apply-ai-filter.ts +294 -0
- package/corpus/templates/mail/actions/create-automation.ts +1 -0
- package/corpus/templates/mail/actions/get-ai-filter.ts +19 -0
- package/corpus/templates/mail/actions/manage-automations.ts +162 -157
- package/corpus/templates/mail/actions/manage-email-rules.ts +3 -0
- package/corpus/templates/mail/actions/navigate.ts +1 -1
- package/corpus/templates/mail/actions/update-automation.ts +1 -0
- package/corpus/templates/mail/actions/update-mail-preferences.ts +1 -0
- package/corpus/templates/mail/app/components/email/AiFilterDialog.tsx +127 -0
- package/corpus/templates/mail/app/components/email/EmailList.tsx +63 -0
- package/corpus/templates/mail/app/components/email/EmailThread.tsx +95 -0
- package/corpus/templates/mail/app/components/email/MobileActionBar.tsx +35 -3
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +17 -22
- package/corpus/templates/mail/app/components/settings/AiFilterSection.tsx +401 -0
- package/corpus/templates/mail/app/hooks/use-ai-filter.ts +48 -0
- package/corpus/templates/mail/app/hooks/use-automations.ts +1 -0
- package/corpus/templates/mail/app/hooks/use-emails.ts +11 -3
- package/corpus/templates/mail/app/i18n/en-US.ts +55 -0
- package/corpus/templates/mail/app/lib/automation-visibility.ts +17 -0
- package/corpus/templates/mail/app/pages/InboxPage.tsx +5 -2
- package/corpus/templates/mail/app/pages/SettingsPage.tsx +16 -8
- package/corpus/templates/mail/app/pages/inbox-zero.ts +1 -2
- package/corpus/templates/mail/app/root.tsx +20 -8
- package/corpus/templates/mail/app/routes/_index.tsx +16 -55
- package/corpus/templates/mail/app/routes/home.tsx +71 -0
- package/corpus/templates/mail/changelog/2026-08-28-mail-settings-show-chat-created-automations.md +6 -0
- package/corpus/templates/mail/public/manifest.json +1 -1
- package/corpus/templates/mail/server/db/schema.ts +3 -0
- package/corpus/templates/mail/server/handlers/emails.ts +34 -11
- package/corpus/templates/mail/server/handlers/google-auth.ts +1 -1
- package/corpus/templates/mail/server/lib/ai-filter.ts +103 -0
- package/corpus/templates/mail/server/lib/automation-actions.ts +14 -9
- package/corpus/templates/mail/server/lib/automation-engine.ts +142 -18
- package/corpus/templates/mail/server/lib/automations.ts +9 -0
- package/corpus/templates/mail/server/lib/email-state.ts +7 -2
- package/corpus/templates/mail/server/lib/gmail-query.ts +10 -0
- package/corpus/templates/mail/server/lib/google-auth.ts +5 -8
- package/corpus/templates/mail/server/lib/jobs.ts +1 -5
- package/corpus/templates/mail/server/onboarding.ts +2 -2
- package/corpus/templates/mail/server/plugins/agent-chat.ts +5 -2
- package/corpus/templates/mail/server/plugins/auth.ts +1 -0
- package/corpus/templates/mail/server/plugins/core-routes.ts +4 -1
- package/corpus/templates/mail/server/plugins/db.ts +6 -0
- package/corpus/templates/mail/server/routes/api/attachments.get.ts +1 -5
- package/corpus/templates/mail/shared/ai-filter.ts +74 -0
- package/corpus/templates/mail/shared/types.ts +2 -0
- package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +4 -0
- package/corpus/templates/plan/.agents/skills/secrets/SKILL.md +47 -0
- package/corpus/templates/plan/actions/list-plan-versions.ts +20 -5
- package/corpus/templates/plan/agent-native.json +1 -4
- package/corpus/templates/plan/app/components/editor/PlanDocumentEditor.tsx +5 -2
- package/corpus/templates/plan/app/components/layout/Layout.tsx +41 -1
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +4 -16
- package/corpus/templates/plan/app/components/plan/PlanMarkdownEditor.tsx +7 -4
- package/corpus/templates/plan/app/components/plan/wireframe/Wireframe.tsx +1 -1
- package/corpus/templates/plan/app/components/plan/wireframe/html-artboard.css +15 -0
- package/corpus/templates/plan/app/components/plan/wireframe/kit/plan-wireframe-tokens.css +0 -15
- package/corpus/templates/plan/app/components/plan/wireframe/kit/primitives.tsx +2 -2
- package/corpus/templates/plan/app/hooks/use-plan-presence.ts +20 -10
- package/corpus/templates/plan/app/pages/PlansPage.tsx +2 -2
- package/corpus/templates/plan/app/root.tsx +13 -7
- package/corpus/templates/plan/app/routes/_index.tsx +31 -6
- package/corpus/templates/plan/app/routes/chat.tsx +3 -6
- package/corpus/templates/plan/app/routes/home.tsx +11 -0
- package/corpus/templates/plan/app/routes/local-plans.$slug.tsx +2 -6
- package/corpus/templates/plan/app/routes/plans.$id.tsx +3 -6
- package/corpus/templates/plan/app/routes/plans.tsx +3 -6
- package/corpus/templates/plan/app/routes/recaps.$id.tsx +3 -6
- package/corpus/templates/plan/app/routes/recaps.tsx +3 -6
- package/corpus/templates/plan/changelog/2026-08-28-plan-loading-skeletons-use-a-softer-whole-surface.md +6 -0
- package/corpus/templates/plan/changelog/2026-08-29-plan-loading-shine-is-more-subtle.md +6 -0
- package/corpus/templates/plan/public/manifest.json +1 -1
- package/corpus/templates/plan/server/db/schema.ts +1 -0
- package/corpus/templates/plan/server/lib/plan-versions.ts +57 -0
- package/corpus/templates/plan/server/plugins/agent-chat.ts +83 -0
- package/corpus/templates/plan/server/plugins/core-routes.ts +1 -0
- package/corpus/templates/plan/server/plugins/db.ts +10 -0
- package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +4 -0
- package/corpus/templates/slides/.agents/skills/secrets/SKILL.md +47 -0
- package/corpus/templates/slides/CHANGELOG.md +9 -0
- package/corpus/templates/slides/actions/_deck-write.ts +65 -0
- package/corpus/templates/slides/actions/add-slide.ts +44 -24
- package/corpus/templates/slides/actions/clone-context-slide.ts +22 -12
- package/corpus/templates/slides/actions/create-deck.ts +36 -21
- package/corpus/templates/slides/actions/delete-design-system.ts +10 -3
- package/corpus/templates/slides/actions/import-file.ts +9 -3
- package/corpus/templates/slides/actions/import-pptx.ts +11 -4
- package/corpus/templates/slides/actions/list-deck-versions.ts +20 -8
- package/corpus/templates/slides/actions/patch-deck.ts +29 -3
- package/corpus/templates/slides/actions/restore-deck-version.ts +37 -22
- package/corpus/templates/slides/actions/save-deck.ts +35 -22
- package/corpus/templates/slides/actions/update-deck-aspect-ratio.ts +31 -16
- package/corpus/templates/slides/actions/update-slide.ts +250 -37
- package/corpus/templates/slides/app/components/deck/SlideRenderer.tsx +10 -4
- package/corpus/templates/slides/app/components/editor/EditorActionCluster.tsx +2 -2
- package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +7 -8
- package/corpus/templates/slides/app/components/editor/ImageOverlay.tsx +78 -12
- package/corpus/templates/slides/app/components/editor/SlideContextToolbar.tsx +42 -4
- package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +381 -53
- package/corpus/templates/slides/app/components/editor/SlidesLayersPanel.tsx +20 -34
- package/corpus/templates/slides/app/components/editor/slide-style.ts +5 -0
- package/corpus/templates/slides/app/components/editor/style-clipboard.ts +2 -0
- package/corpus/templates/slides/app/components/layout/AgentWorkIndicator.tsx +18 -2
- package/corpus/templates/slides/app/components/layout/Header.tsx +1 -1
- package/corpus/templates/slides/app/components/layout/Layout.tsx +39 -10
- package/corpus/templates/slides/app/components/layout/Sidebar.tsx +7 -20
- package/corpus/templates/slides/app/components/presentation/PresenterView.tsx +35 -15
- package/corpus/templates/slides/app/components/presentation/present-channel.ts +12 -0
- package/corpus/templates/slides/app/global.css +45 -13
- package/corpus/templates/slides/app/hooks/use-navigation-state.ts +1 -1
- package/corpus/templates/slides/app/i18n/en-US.ts +11 -0
- package/corpus/templates/slides/app/lib/sanitize-slide-html.ts +133 -5
- package/corpus/templates/slides/app/lib/slide-image-replacement.ts +741 -17
- package/corpus/templates/slides/app/lib/validate-native-slide-html.ts +1 -0
- package/corpus/templates/slides/app/pages/DeckEditor.tsx +288 -95
- package/corpus/templates/slides/app/pages/DesignSystems.tsx +5 -5
- package/corpus/templates/slides/app/pages/Index.tsx +7 -7
- package/corpus/templates/slides/app/pages/NotFound.tsx +1 -1
- package/corpus/templates/slides/app/pages/SharedPresentation.tsx +1 -1
- package/corpus/templates/slides/app/root.tsx +4 -23
- package/corpus/templates/slides/app/routes/_index.tsx +18 -7
- package/corpus/templates/slides/app/routes/home.tsx +26 -0
- package/corpus/templates/slides/changelog/2026-08-27-image-fit-controls-apply-cover-crops-and-position.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-28-image-edits-persist-while-dropped-images-finish-uploading.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-28-shared-slides-with-a-style-block-render-again.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-28-slides-loading-skeletons-use-a-softer-whole-surface.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-28-standard-empty-home-layout.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-29-chat-imports-attached-decks-on-request.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-29-slides-loading-shine-is-more-subtle.md +6 -0
- package/corpus/templates/slides/package.json +3 -0
- package/corpus/templates/slides/public/manifest.json +1 -1
- package/corpus/templates/slides/server/db/schema.ts +1 -0
- package/corpus/templates/slides/server/handlers/google-docs-auth.ts +1 -1
- package/corpus/templates/slides/server/lib/chat-attachments.ts +102 -7
- package/corpus/templates/slides/server/lib/deck-versions.ts +77 -2
- package/corpus/templates/slides/server/plugins/agent-chat.ts +95 -1
- package/corpus/templates/slides/server/plugins/auth.ts +1 -0
- package/corpus/templates/slides/server/plugins/core-routes.ts +8 -1
- package/corpus/templates/slides/server/plugins/db.ts +5 -0
- package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +4 -0
- package/corpus/templates/tasks/.agents/skills/secrets/SKILL.md +47 -0
- package/corpus/templates/tasks/AGENTS.md +2 -1
- package/corpus/templates/tasks/README.md +3 -1
- package/corpus/templates/tasks/app/components/layout/Sidebar.tsx +5 -18
- package/corpus/templates/tasks/app/root.tsx +19 -3
- package/corpus/templates/tasks/app/routes/_index.tsx +28 -14
- package/corpus/templates/tasks/app/routes/home.tsx +24 -0
- package/corpus/templates/tasks/public/manifest.json +1 -1
- package/corpus/templates/tasks/server/plugins/auth.ts +1 -0
- package/dist/a2a/client.d.ts +4 -0
- package/dist/a2a/client.js +15 -2
- package/dist/action.d.ts +3 -1
- package/dist/agent/engine/ai-sdk-engine.js +13 -9
- package/dist/agent/engine/anthropic-engine.js +2 -1
- package/dist/agent/engine/builder-engine.js +23 -5
- package/dist/agent/engine/limit-provider-tools.d.ts +3 -0
- package/dist/agent/engine/limit-provider-tools.js +23 -0
- package/dist/agent/engine/openai-compatible-endpoint.d.ts +2 -0
- package/dist/agent/engine/openai-compatible-endpoint.js +4 -0
- package/dist/agent/engine/output-tokens.d.ts +12 -6
- package/dist/agent/engine/output-tokens.js +42 -16
- package/dist/agent/engine/registry.d.ts +1 -1
- package/dist/agent/engine/registry.js +69 -16
- package/dist/agent/production-agent.js +107 -13
- package/dist/agent/run-manager.d.ts +9 -0
- package/dist/agent/run-manager.js +35 -6
- package/dist/agent/thread-data-builder.d.ts +6 -1
- package/dist/agent/thread-data-builder.js +20 -5
- package/dist/agent/types.d.ts +2 -0
- package/dist/app-config/agent.d.ts +4 -0
- package/dist/app-config/agent.js +44 -0
- package/dist/app-config/integrations.d.ts +1 -0
- package/dist/app-config/integrations.js +8 -0
- package/dist/app-config/migration.d.ts +1 -0
- package/dist/app-config/migration.js +4 -0
- package/dist/app-config/observability.d.ts +4 -1
- package/dist/app-config/observability.js +25 -1
- package/dist/app-config/schema.d.ts +9 -0
- package/dist/app-config/store.js +1 -0
- package/dist/client/AgentAskPopover.d.ts +2 -1
- package/dist/client/AgentAskPopover.js +2 -2
- package/dist/client/AgentPanel.d.ts +35 -10
- package/dist/client/AgentPanel.js +136 -119
- package/dist/client/AssistantChat.d.ts +9 -2
- package/dist/client/AssistantChat.js +161 -36
- package/dist/client/ConnectBuilderCard.js +3 -1
- package/dist/client/DefaultSpinner.d.ts +13 -1
- package/dist/client/DefaultSpinner.js +52 -46
- package/dist/client/FeedbackButton.d.ts +12 -0
- package/dist/client/FeedbackButton.js +62 -28
- package/dist/client/MultiTabAssistantChat.js +30 -11
- package/dist/client/NewWorkspaceAppFlow.js +5 -3
- package/dist/client/agent-chat/index.d.ts +1 -0
- package/dist/client/agent-chat/index.js +1 -0
- package/dist/client/agent-chat-adapter.js +16 -1
- package/dist/client/agent-chat.d.ts +9 -0
- package/dist/client/agent-chat.js +6 -3
- package/dist/client/agent-page/AgentJobsTab.d.ts +2 -1
- package/dist/client/agent-page/AgentJobsTab.js +8 -5
- package/dist/client/agent-page/AgentTabsPage.js +2 -2
- package/dist/client/analytics.d.ts +2 -0
- package/dist/client/analytics.js +86 -15
- package/dist/client/app-providers.js +13 -1
- package/dist/client/auth/AuthPage.d.ts +87 -0
- package/dist/client/auth/AuthPage.js +1847 -0
- package/dist/client/auth/ResetPasswordPage.d.ts +9 -0
- package/dist/client/auth/ResetPasswordPage.js +119 -0
- package/dist/client/auth/entry.d.ts +1 -0
- package/dist/client/auth/entry.js +15 -0
- package/dist/client/chat/message-components.d.ts +53 -0
- package/dist/client/chat/message-components.js +181 -11
- package/dist/client/chat/run-recovery.d.ts +4 -1
- package/dist/client/chat/run-recovery.js +30 -12
- package/dist/client/chat/tool-call-display.d.ts +4 -2
- package/dist/client/chat/tool-call-display.js +16 -11
- package/dist/client/chat-first.js +8 -2
- package/dist/client/chat-model-groups.js +11 -1
- package/dist/client/collab/index.d.ts +1 -1
- package/dist/client/components/CodeRequiredDialog.js +22 -35
- package/dist/client/components/icons/AgentNativeIcon.d.ts +3 -3
- package/dist/client/components/icons/AgentNativeIcon.js +4 -4
- package/dist/client/components/ui/message-scroller.js +1 -1
- package/dist/client/composer/runtime-adapters.js +2 -0
- package/dist/client/feedback-context.d.ts +1 -0
- package/dist/client/feedback-context.js +3 -2
- package/dist/client/host-bridge.d.ts +1 -0
- package/dist/client/index.d.ts +2 -2
- package/dist/client/index.js +1 -1
- package/dist/client/integrations/IntegrationsPanel.d.ts +2 -1
- package/dist/client/integrations/IntegrationsPanel.js +3 -3
- package/dist/client/observability/ThumbsFeedback.js +73 -10
- package/dist/client/onboarding/FirstRunOnboarding.js +24 -15
- package/dist/client/onboarding/OnboardingPanel.js +5 -3
- package/dist/client/onboarding/first-run-startup-gate.js +7 -1
- package/dist/client/resources/McpIntegrationDialog.d.ts +2 -1
- package/dist/client/resources/McpIntegrationDialog.js +10 -2
- package/dist/client/session-replay.js +10 -0
- package/dist/client/settings/BuilderConnectPopover.d.ts +25 -0
- package/dist/client/settings/BuilderConnectPopover.js +55 -0
- package/dist/client/settings/SettingsPanel.js +21 -7
- package/dist/client/settings/SettingsTabsPage.d.ts +1 -1
- package/dist/client/settings/SettingsTabsPage.js +42 -25
- package/dist/client/settings/VoiceTranscriptionSection.js +16 -22
- package/dist/client/settings/index.d.ts +1 -0
- package/dist/client/settings/index.js +1 -0
- package/dist/client/settings/useBuilderStatus.d.ts +7 -0
- package/dist/client/settings/useBuilderStatus.js +77 -21
- package/dist/client/setup-connections/BuilderConnectCard.js +2 -1
- package/dist/client/setup-connections/useBuilderConnectCardController.d.ts +3 -1
- package/dist/client/setup-connections/useBuilderConnectCardController.js +4 -2
- package/dist/client/sse-event-processor.js +8 -0
- package/dist/client/terminal/AgentTerminal.js +6 -7
- package/dist/client/transcription/BuilderTranscriptionCta.js +17 -69
- package/dist/client/ui/index.d.ts +1 -0
- package/dist/client/ui/index.js +1 -0
- package/dist/client/use-chat-models.js +5 -4
- package/dist/client/webmcp.d.ts +4 -0
- package/dist/client/webmcp.js +51 -4
- package/dist/collab/client.d.ts +13 -0
- package/dist/collab/client.js +96 -21
- package/dist/dashboard-storage/index.d.ts +1 -1
- package/dist/dashboard-storage/schema.d.ts +19 -0
- package/dist/dashboard-storage/schema.js +1 -0
- package/dist/dashboard-storage/store.d.ts +9 -0
- package/dist/dashboard-storage/store.js +93 -3
- package/dist/deploy/build.d.ts +19 -3
- package/dist/deploy/build.js +262 -10
- package/dist/index.browser.d.ts +1 -1
- package/dist/index.browser.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/ingestion/media.js +7 -2
- package/dist/integrations/config-store.js +2 -4
- package/dist/integrations/google-docs-poller.d.ts +1 -1
- package/dist/integrations/google-docs-poller.js +100 -24
- package/dist/integrations/plugin.js +45 -15
- package/dist/integrations/webhook-handler.js +2 -1
- package/dist/jobs/background-automation-runner.js +17 -1
- package/dist/localization/core-messages/ar-SA.js +19 -0
- package/dist/localization/core-messages/de-DE.js +19 -0
- package/dist/localization/core-messages/en-US.d.ts +19 -0
- package/dist/localization/core-messages/en-US.js +19 -0
- package/dist/localization/core-messages/es-ES.js +19 -0
- package/dist/localization/core-messages/fr-FR.js +19 -0
- package/dist/localization/core-messages/hi-IN.js +19 -0
- package/dist/localization/core-messages/ja-JP.js +19 -0
- package/dist/localization/core-messages/ko-KR.js +19 -0
- package/dist/localization/core-messages/pt-BR.js +19 -0
- package/dist/localization/core-messages/zh-CN.js +19 -0
- package/dist/localization/core-messages/zh-TW.js +19 -0
- package/dist/localization/core-messages.d.ts +19 -0
- package/dist/localization/default-messages.d.ts +11 -0
- package/dist/localization/default-messages.js +11 -0
- package/dist/mcp/analytics.d.ts +103 -0
- package/dist/mcp/analytics.js +204 -0
- package/dist/mcp/build-server.d.ts +7 -0
- package/dist/mcp/build-server.js +132 -35
- package/dist/mcp/screen-memory-stdio.d.ts +7 -7
- package/dist/mcp/server.js +37 -8
- package/dist/mcp/stdio.js +1 -0
- package/dist/mcp-client/errors.js +30 -10
- package/dist/mcp-client/oauth-routes.d.ts +7 -2
- package/dist/mcp-client/oauth-routes.js +12 -3
- package/dist/mcp-client/routes.js +2 -1
- package/dist/oauth-tokens/store.js +6 -3
- package/dist/observability/routes.d.ts +5 -5
- package/dist/observability/routes.js +8 -2
- package/dist/observability/store.d.ts +1 -1
- package/dist/observability/store.js +18 -3
- package/dist/observability/types.d.ts +1 -0
- package/dist/onboarding/plugin.js +16 -4
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +16 -16
- package/dist/provider-api/actions/provider-api.d.ts +12 -12
- package/dist/resources/handlers.d.ts +2 -2
- package/dist/secrets/routes.d.ts +9 -9
- package/dist/server/action-routes.d.ts +1 -6
- package/dist/server/action-routes.js +61 -18
- package/dist/server/agent-chat/plugin-options.d.ts +8 -1
- package/dist/server/agent-chat-plugin.d.ts +3 -0
- package/dist/server/agent-chat-plugin.js +49 -4
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/agent-run-context.d.ts +1 -0
- package/dist/server/agent-run-context.js +6 -0
- package/dist/server/analytics.d.ts +3 -2
- package/dist/server/analytics.js +18 -7
- package/dist/server/app-url.d.ts +5 -2
- package/dist/server/app-url.js +4 -3
- package/dist/server/auth.d.ts +25 -0
- package/dist/server/auth.js +168 -21
- package/dist/server/better-auth-instance.js +18 -4
- package/dist/server/better-auth-migrations.d.ts +14 -0
- package/dist/server/better-auth-migrations.js +5 -1
- package/dist/server/builder-api-auth.js +30 -6
- package/dist/server/builder-browser.d.ts +10 -0
- package/dist/server/builder-browser.js +22 -5
- package/dist/server/builder-design-systems.d.ts +11 -0
- package/dist/server/builder-design-systems.js +52 -3
- package/dist/server/builder-oauth.d.ts +13 -6
- package/dist/server/builder-oauth.js +121 -63
- package/dist/server/capture-error.js +3 -0
- package/dist/server/cookie-namespace.d.ts +1 -0
- package/dist/server/cookie-namespace.js +3 -0
- package/dist/server/core-routes-plugin.d.ts +25 -9
- package/dist/server/core-routes-plugin.js +180 -76
- package/dist/server/credential-provider.js +22 -12
- package/dist/server/email.d.ts +4 -0
- package/dist/server/email.js +13 -5
- package/dist/server/framework-request-handler.js +6 -3
- package/dist/server/google-credential-check.d.ts +7 -3
- package/dist/server/google-credential-check.js +71 -0
- package/dist/server/google-oauth-credentials.d.ts +4 -3
- package/dist/server/google-oauth-credentials.js +7 -8
- package/dist/server/google-oauth.d.ts +9 -4
- package/dist/server/google-oauth.js +14 -93
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/jwks-secret-rotation.d.ts +29 -0
- package/dist/server/jwks-secret-rotation.js +150 -0
- package/dist/server/onboarding-html.d.ts +2 -14
- package/dist/server/onboarding-html.js +254 -2519
- package/dist/server/origin-allowlist.d.ts +15 -0
- package/dist/server/origin-allowlist.js +93 -0
- package/dist/server/release-migrations.js +48 -0
- package/dist/server/request-context.d.ts +2 -0
- package/dist/server/request-context.js +7 -2
- package/dist/server/self-dispatch.js +5 -0
- package/dist/server/sentry.js +5 -0
- package/dist/server/ssr-handler.js +5 -0
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/server/workspace-provider-oauth.d.ts +9 -0
- package/dist/server/workspace-provider-oauth.js +96 -31
- package/dist/shared/index.d.ts +2 -0
- package/dist/shared/index.js +2 -0
- package/dist/shared/loading-labels.d.ts +1 -0
- package/dist/shared/loading-labels.js +55 -0
- package/dist/shared/qa-test-email.d.ts +1 -0
- package/dist/shared/qa-test-email.js +42 -0
- package/dist/shared/route-warmup-config.js +2 -2
- package/dist/shared/sign-in-journey.js +1 -1
- package/dist/shared/ssr-auth-redirect.d.ts +8 -0
- package/dist/shared/ssr-auth-redirect.js +56 -0
- package/dist/shared/test-traffic.d.ts +8 -0
- package/dist/shared/test-traffic.js +11 -0
- package/dist/styles/agent-native.css +50 -14
- package/dist/styles/blocks.css +0 -6
- package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +4 -0
- package/dist/templates/chat/.agents/skills/secrets/SKILL.md +47 -0
- package/dist/templates/chat/AGENTS.md +5 -4
- package/dist/templates/chat/app/components/layout/Header.tsx +1 -1
- package/dist/templates/chat/app/components/layout/Layout.tsx +5 -4
- package/dist/templates/chat/app/components/layout/Sidebar.tsx +16 -25
- package/dist/templates/chat/app/hooks/use-navigation-state.ts +5 -5
- package/dist/templates/chat/app/root.tsx +16 -3
- package/dist/templates/chat/app/routes/_index.tsx +17 -74
- package/dist/templates/chat/app/routes/chat.$threadId.tsx +1 -1
- package/dist/templates/chat/app/routes/home.tsx +94 -0
- package/dist/templates/chat/netlify.toml +2 -1
- package/dist/templates/chat/public/manifest.json +1 -1
- package/dist/templates/chat/server/plugins/auth.ts +1 -0
- package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +4 -0
- package/dist/templates/default/.agents/skills/secrets/SKILL.md +47 -0
- package/dist/templates/default/AGENTS.md +10 -6
- package/dist/templates/default/DEVELOPING.md +8 -1
- package/dist/templates/default/app/hooks/use-navigation-state.ts +1 -1
- package/dist/templates/default/app/root.tsx +10 -3
- package/dist/templates/default/app/routes/_index.tsx +10 -86
- package/dist/templates/default/app/routes/home.tsx +94 -0
- package/dist/templates/default/app/routes/settings.tsx +1 -1
- package/dist/templates/default/public/manifest.json +1 -1
- package/dist/templates/default/server/plugins/auth.ts +5 -0
- package/dist/templates/headless/.agents/skills/secrets/SKILL.md +47 -0
- package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +4 -0
- package/dist/templates/workspace-core/.agents/skills/secrets/SKILL.md +47 -0
- package/dist/templates/workspace-root/.env.example +3 -2
- package/dist/terminal/pty-server.d.ts +2 -0
- package/dist/terminal/pty-server.js +22 -5
- package/dist/tracking/registry.d.ts +1 -0
- package/dist/tracking/registry.js +12 -0
- package/dist/usage/store.d.ts +1 -0
- package/dist/usage/store.js +16 -7
- package/dist/vite/client.d.ts +1 -1
- package/dist/vite/client.js +59 -0
- package/dist/workspace-connections/index.d.ts +1 -1
- package/dist/workspace-connections/index.js +1 -1
- package/dist/workspace-connections/store.d.ts +1 -0
- package/dist/workspace-connections/store.js +4 -0
- package/docs/content/aws-amplify.mdx +179 -0
- package/docs/content/client-agent-chat.mdx +1 -1
- package/docs/content/deploy-an-app.mdx +2 -1
- package/docs/content/deployment.mdx +14 -3
- package/docs/content/environment-variables.mdx +1 -0
- package/docs/content/template-forms-agent.mdx +65 -0
- package/docs/content/template-forms-developers.mdx +220 -65
- package/docs/content/template-forms-features.mdx +154 -0
- package/docs/content/template-forms-integrations.mdx +40 -0
- package/docs/content/template-forms.mdx +49 -36
- package/docs/content/template-mail-developers.mdx +3 -3
- package/docs/content/toolkit-settings.mdx +3 -3
- package/docs/content/webmcp.mdx +31 -12
- package/package.json +3 -3
- package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +4 -0
- package/src/templates/chat/.agents/skills/secrets/SKILL.md +47 -0
- package/src/templates/chat/AGENTS.md +5 -4
- package/src/templates/chat/app/components/layout/Header.tsx +1 -1
- package/src/templates/chat/app/components/layout/Layout.tsx +5 -4
- package/src/templates/chat/app/components/layout/Sidebar.tsx +16 -25
- package/src/templates/chat/app/hooks/use-navigation-state.ts +5 -5
- package/src/templates/chat/app/root.tsx +16 -3
- package/src/templates/chat/app/routes/_index.tsx +17 -74
- package/src/templates/chat/app/routes/chat.$threadId.tsx +1 -1
- package/src/templates/chat/app/routes/home.tsx +94 -0
- package/src/templates/chat/netlify.toml +2 -1
- package/src/templates/chat/public/manifest.json +1 -1
- package/src/templates/chat/server/plugins/auth.ts +1 -0
- package/src/templates/default/.agents/skills/frontend-design/SKILL.md +4 -0
- package/src/templates/default/.agents/skills/secrets/SKILL.md +47 -0
- package/src/templates/default/AGENTS.md +10 -6
- package/src/templates/default/DEVELOPING.md +8 -1
- package/src/templates/default/app/hooks/use-navigation-state.ts +1 -1
- package/src/templates/default/app/root.tsx +10 -3
- package/src/templates/default/app/routes/_index.tsx +10 -86
- package/src/templates/default/app/routes/home.tsx +94 -0
- package/src/templates/default/app/routes/settings.tsx +1 -1
- package/src/templates/default/public/manifest.json +1 -1
- package/src/templates/default/server/plugins/auth.ts +5 -0
- package/src/templates/headless/.agents/skills/secrets/SKILL.md +47 -0
- package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +4 -0
- package/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +47 -0
- package/src/templates/workspace-root/.env.example +3 -2
- package/corpus/templates/factory/actions/approve-factory-item.ts +0 -244
- package/corpus/templates/factory/app/components/factory/FactorySourceSettingsGroup.tsx +0 -33
- package/corpus/templates/factory/server/routes/_agent-native/factory/builder-callback.post.ts +0 -116
- package/corpus/templates/factory/server/triage/ai-services-git.ts +0 -205
- package/corpus/templates/factory/server/triage/builder-executor.ts +0 -123
- package/docs/content/template-forms-building-publishing.mdx +0 -135
- package/docs/content/template-forms-responses.mdx +0 -120
- /package/corpus/templates/clips/{server/lib → shared}/upload-interruption.ts +0 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import { and, desc, eq, inArray, isNotNull, isNull } from "drizzle-orm";
|
|
3
|
+
import { getRequestRunContext } from "../server/request-context.js";
|
|
3
4
|
import { accessFilter, assertAccess } from "../sharing/access.js";
|
|
4
5
|
import { registerShareableResource } from "../sharing/registry.js";
|
|
5
6
|
export class DashboardStorageConflictError extends Error {
|
|
@@ -25,6 +26,40 @@ function requireWriter(ctx) {
|
|
|
25
26
|
throw new Error("Dashboard writes require an authenticated user.");
|
|
26
27
|
return email;
|
|
27
28
|
}
|
|
29
|
+
function dashboardChatContextFromFields(value) {
|
|
30
|
+
const context = {};
|
|
31
|
+
for (const key of ["threadId", "runId", "turnId"]) {
|
|
32
|
+
if (typeof value[key] === "string" && value[key].trim()) {
|
|
33
|
+
context[key] = value[key];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return Object.keys(context).length > 0 ? context : null;
|
|
37
|
+
}
|
|
38
|
+
function requestDashboardChatContext() {
|
|
39
|
+
const run = getRequestRunContext();
|
|
40
|
+
return run ? dashboardChatContextFromFields(run) : null;
|
|
41
|
+
}
|
|
42
|
+
function parseDashboardChatContext(raw) {
|
|
43
|
+
if (raw == null)
|
|
44
|
+
return null;
|
|
45
|
+
if (typeof raw !== "string") {
|
|
46
|
+
throw new Error("Dashboard revision chat metadata is invalid.");
|
|
47
|
+
}
|
|
48
|
+
let value;
|
|
49
|
+
try {
|
|
50
|
+
value = JSON.parse(raw);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
throw new Error("Dashboard revision chat metadata is not valid JSON.");
|
|
54
|
+
}
|
|
55
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
56
|
+
throw new Error("Dashboard revision chat metadata is invalid.");
|
|
57
|
+
}
|
|
58
|
+
const context = dashboardChatContextFromFields(value);
|
|
59
|
+
if (!context)
|
|
60
|
+
throw new Error("Dashboard revision chat metadata is invalid.");
|
|
61
|
+
return context;
|
|
62
|
+
}
|
|
28
63
|
export function createDashboardStorage(options) {
|
|
29
64
|
const parseConfig = options.parseConfig ?? ((raw) => JSON.parse(raw));
|
|
30
65
|
const serializeConfig = options.serializeConfig ?? JSON.stringify;
|
|
@@ -57,6 +92,18 @@ export function createDashboardStorage(options) {
|
|
|
57
92
|
config: parseConfig(row.config),
|
|
58
93
|
createdAt: row.createdAt,
|
|
59
94
|
createdBy: row.createdBy ?? null,
|
|
95
|
+
chatContext: parseDashboardChatContext(row.chatContext),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
function revisionMetadataFromRow(row) {
|
|
99
|
+
return {
|
|
100
|
+
id: row.id,
|
|
101
|
+
dashboardId: row.dashboardId,
|
|
102
|
+
kind: row.kind,
|
|
103
|
+
title: row.title,
|
|
104
|
+
createdAt: row.createdAt,
|
|
105
|
+
createdBy: row.createdBy ?? null,
|
|
106
|
+
chatContext: parseDashboardChatContext(row.chatContext),
|
|
60
107
|
};
|
|
61
108
|
}
|
|
62
109
|
async function get(id, ctx) {
|
|
@@ -103,7 +150,7 @@ export function createDashboardStorage(options) {
|
|
|
103
150
|
.where(inArray(dashboardRevisions.id, staleIds));
|
|
104
151
|
}
|
|
105
152
|
}
|
|
106
|
-
async function snapshot(db, dashboard, writer) {
|
|
153
|
+
async function snapshot(db, dashboard, writer, chatContext = requestDashboardChatContext()) {
|
|
107
154
|
await db.insert(dashboardRevisions).values({
|
|
108
155
|
id: `dashboard-revision-${randomUUID()}`,
|
|
109
156
|
dashboardId: dashboard.id,
|
|
@@ -111,6 +158,7 @@ export function createDashboardStorage(options) {
|
|
|
111
158
|
title: dashboard.title,
|
|
112
159
|
config: serializeConfig(dashboard.config),
|
|
113
160
|
createdBy: writer,
|
|
161
|
+
...(chatContext ? { chatContext: JSON.stringify(chatContext) } : {}),
|
|
114
162
|
ownerEmail: dashboard.ownerEmail,
|
|
115
163
|
orgId: dashboard.orgId,
|
|
116
164
|
visibility: dashboard.visibility,
|
|
@@ -164,7 +212,7 @@ export function createDashboardStorage(options) {
|
|
|
164
212
|
.set(values)
|
|
165
213
|
.where(eq(dashboards.id, input.id));
|
|
166
214
|
}
|
|
167
|
-
await snapshot(tx, existing, writer);
|
|
215
|
+
await snapshot(tx, existing, writer, requestDashboardChatContext());
|
|
168
216
|
});
|
|
169
217
|
}
|
|
170
218
|
const stored = await get(input.id, ctx);
|
|
@@ -187,6 +235,39 @@ export function createDashboardStorage(options) {
|
|
|
187
235
|
.limit(maxRevisions);
|
|
188
236
|
return rows.map(revisionFromRow);
|
|
189
237
|
}
|
|
238
|
+
async function listRevisionMetadata(id, ctx) {
|
|
239
|
+
const dashboard = await get(id, ctx);
|
|
240
|
+
if (!dashboard)
|
|
241
|
+
return [];
|
|
242
|
+
await assertAccess(options.resourceType, id, "viewer", ctx);
|
|
243
|
+
const rows = await options
|
|
244
|
+
.getDb()
|
|
245
|
+
.select({
|
|
246
|
+
id: dashboardRevisions.id,
|
|
247
|
+
dashboardId: dashboardRevisions.dashboardId,
|
|
248
|
+
kind: dashboardRevisions.kind,
|
|
249
|
+
title: dashboardRevisions.title,
|
|
250
|
+
createdAt: dashboardRevisions.createdAt,
|
|
251
|
+
createdBy: dashboardRevisions.createdBy,
|
|
252
|
+
chatContext: dashboardRevisions.chatContext,
|
|
253
|
+
})
|
|
254
|
+
.from(dashboardRevisions)
|
|
255
|
+
.where(eq(dashboardRevisions.dashboardId, id))
|
|
256
|
+
.orderBy(desc(dashboardRevisions.createdAt))
|
|
257
|
+
.limit(maxRevisions);
|
|
258
|
+
return rows.map(revisionMetadataFromRow);
|
|
259
|
+
}
|
|
260
|
+
async function createRevisionSnapshot(id, ctx, chatContext) {
|
|
261
|
+
const dashboard = await get(id, ctx);
|
|
262
|
+
if (!dashboard)
|
|
263
|
+
return null;
|
|
264
|
+
await assertAccess(options.resourceType, id, "editor", ctx);
|
|
265
|
+
const writer = requireWriter(ctx);
|
|
266
|
+
await options.getDb().transaction(async (tx) => {
|
|
267
|
+
await snapshot(tx, dashboard, writer, chatContext ?? requestDashboardChatContext());
|
|
268
|
+
});
|
|
269
|
+
return dashboard;
|
|
270
|
+
}
|
|
190
271
|
async function restore(id, revisionId, ctx) {
|
|
191
272
|
const existing = await get(id, ctx);
|
|
192
273
|
if (!existing)
|
|
@@ -222,5 +303,14 @@ export function createDashboardStorage(options) {
|
|
|
222
303
|
getDb: options.getDb,
|
|
223
304
|
});
|
|
224
305
|
}
|
|
225
|
-
return {
|
|
306
|
+
return {
|
|
307
|
+
get,
|
|
308
|
+
list,
|
|
309
|
+
write,
|
|
310
|
+
listRevisions,
|
|
311
|
+
listRevisionMetadata,
|
|
312
|
+
createRevisionSnapshot,
|
|
313
|
+
restore,
|
|
314
|
+
registerShareable,
|
|
315
|
+
};
|
|
226
316
|
}
|
package/dist/deploy/build.d.ts
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* Supported presets:
|
|
11
11
|
* - cloudflare_pages: Outputs dist/ with _worker.js for Cloudflare Pages
|
|
12
12
|
* - cloudflare_module: Outputs a native Cloudflare Worker under .output/server
|
|
13
|
+
* - aws_amplify: Uses Nitro's .amplify-hosting deployment specification
|
|
13
14
|
*
|
|
14
15
|
* Usage: node deploy/build.js (called automatically by `agent-native build`)
|
|
15
16
|
*/
|
|
@@ -17,8 +18,16 @@ import { copyDir } from "./function-bundle.js";
|
|
|
17
18
|
import { type DiscoveredRoute, type DiscoveredAction } from "./route-discovery.js";
|
|
18
19
|
import { type WorkspaceCoreExports } from "./workspace-core.js";
|
|
19
20
|
export declare const CLOUDFLARE_MODULE_PRESETS: readonly ["cloudflare_module", "cloudflare-module"];
|
|
21
|
+
export declare const AWS_AMPLIFY_PRESETS: readonly ["aws_amplify", "aws-amplify", "awsAmplify"];
|
|
22
|
+
export declare function isAwsAmplifyPreset(targetPreset: string): boolean;
|
|
20
23
|
export declare function isCloudflareModulePreset(targetPreset: string): boolean;
|
|
21
24
|
export declare const CLOUDFLARE_MODULE_WORKER_ENTRY = "worker.mjs";
|
|
25
|
+
/**
|
|
26
|
+
* Amplify makes build variables available to the build container but does not
|
|
27
|
+
* forward them to SSR compute. Keep Nitro's self-contained entrypoint and
|
|
28
|
+
* write only app-declared runtime keys beside it for Node's native env loader.
|
|
29
|
+
*/
|
|
30
|
+
export declare function configureAwsAmplifyRuntimeOutput(serverDir: string, appDir: string, env?: NodeJS.ProcessEnv): void;
|
|
22
31
|
export declare function generateCloudflareModuleWorkerEntry(): string;
|
|
23
32
|
export declare function patchCloudflareModuleNitroEntry(code: string): string;
|
|
24
33
|
export declare function configureCloudflareModuleWorkerOutput(serverDir: string): void;
|
|
@@ -269,6 +278,12 @@ export declare function shouldBundleYjsRuntimeForPreset(targetPreset: string): b
|
|
|
269
278
|
* with the reason instead of quietly serving an empty one.
|
|
270
279
|
*/
|
|
271
280
|
export declare function stubLocalOnlySqliteDriverForServerless(serverDir: string): number;
|
|
281
|
+
/**
|
|
282
|
+
* Nitro bundles the Vite SSR driver's dynamic import into a private `_libs`
|
|
283
|
+
* chunk when Amplify uses `noExternals: true`, so the package-tree stub above
|
|
284
|
+
* cannot see it. Replace that generated chunk after Nitro emits it.
|
|
285
|
+
*/
|
|
286
|
+
export declare function stubBundledLocalOnlySqliteDriverForServerless(serverDir: string): number;
|
|
272
287
|
export declare function assertSingleTemplateNetlifyBuildOutput(projectCwd: string): void;
|
|
273
288
|
/**
|
|
274
289
|
* Strip the harmful single-template catch-all rewrite that points at
|
|
@@ -387,8 +402,9 @@ export declare const NITRO_SERVER_RUNTIME_BUNDLED_DEPS: readonly ["yjs"];
|
|
|
387
402
|
*/
|
|
388
403
|
export declare function resolveNitroBundledYjsEntry(): string;
|
|
389
404
|
/**
|
|
390
|
-
* Edge runtimes have no node_modules
|
|
391
|
-
*
|
|
405
|
+
* Edge runtimes have no node_modules. Amplify uses a self-contained Nitro
|
|
406
|
+
* bundle to avoid its monorepo dependency-tracing pass; other Node/serverless
|
|
407
|
+
* outputs receive the small set above through the controlled post-build pass.
|
|
392
408
|
*/
|
|
393
409
|
export declare function nitroNoExternalsForPreset(targetPreset: string): true | readonly string[];
|
|
394
|
-
export declare function resolveNitroBuildReplacements(env?: NodeJS.ProcessEnv, deploymentEnvironment?: string): Record<string, string>;
|
|
410
|
+
export declare function resolveNitroBuildReplacements(env?: NodeJS.ProcessEnv, deploymentEnvironment?: string, projectCwd?: string): Record<string, string>;
|
package/dist/deploy/build.js
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* Supported presets:
|
|
11
11
|
* - cloudflare_pages: Outputs dist/ with _worker.js for Cloudflare Pages
|
|
12
12
|
* - cloudflare_module: Outputs a native Cloudflare Worker under .output/server
|
|
13
|
+
* - aws_amplify: Uses Nitro's .amplify-hosting deployment specification
|
|
13
14
|
*
|
|
14
15
|
* Usage: node deploy/build.js (called automatically by `agent-native build`)
|
|
15
16
|
*/
|
|
@@ -20,16 +21,20 @@ import path from "path";
|
|
|
20
21
|
import { fileURLToPath } from "url";
|
|
21
22
|
import { loadEnv } from "vite";
|
|
22
23
|
import { AGENT_BACKGROUND_FUNCTION_NAME, AGENT_BACKGROUND_FUNCTION_URL_PATH, AGENT_BACKGROUND_PROCESSOR_A2A, AGENT_BACKGROUND_PROCESSOR_FIELD, AGENT_BACKGROUND_PROCESSOR_INTEGRATION, AGENT_BACKGROUND_PROCESSOR_ROUTE, AGENT_BACKGROUND_PROCESSOR_ROUTE_FIELD, AGENT_CHAT_PROCESS_RUN_PATH, isDurableBackgroundFlagExplicitlyDisabled, } from "../agent/durable-background.js";
|
|
24
|
+
import { declaredEnvKeys } from "../app-config/describe.js";
|
|
23
25
|
import { INTEGRATION_RECOVERY_RUNTIME_MARKER, INTEGRATION_RETRY_SWEEP_PATH, INTEGRATION_RETRY_SWEEP_TOKEN_SUBJECT, isIntegrationDurableDispatchConfigured, } from "../integrations/integration-durable-dispatch-config.js";
|
|
24
26
|
import { isValidCron } from "../jobs/cron.js";
|
|
25
27
|
import { RECURRING_JOBS_SWEEP_PATH, RECURRING_JOBS_SWEEP_TOKEN_SUBJECT, } from "../jobs/scheduler-dispatch.js";
|
|
26
28
|
import { findWorkspaceRoot as findAgentNativeWorkspaceRoot } from "../scripts/utils.js";
|
|
27
29
|
import { RECURRING_JOBS_BUILD_MARKER_ENV_VAR, resolveRecurringJobsBuildMarker, } from "../server/agent-chat/recurring-jobs-runtime.js";
|
|
28
30
|
import { normalizeAppBasePath } from "../server/app-base-path.js";
|
|
31
|
+
import { frameworkSessionHintCookieName, resolveAuthCookieNamespace, } from "../server/cookie-namespace.js";
|
|
29
32
|
import { DEFAULT_SPECULATION_RULES_PATH, resolveSsrCacheHeaders, resolveSsrCacheKeyHeaders, SSR_QUERY_CACHE_KEY_HEADER, } from "../shared/cache-control.js";
|
|
33
|
+
import { LOADING_LABELS } from "../shared/loading-labels.js";
|
|
30
34
|
import { mcpEmbedStaticAssetRouteRules } from "../shared/mcp-embed-headers.js";
|
|
31
35
|
import { isTruthyRuntimeValue } from "../shared/runtime-config.js";
|
|
32
36
|
import { AGENT_NATIVE_SOCIAL_IMAGE_ALT, AGENT_NATIVE_SOCIAL_IMAGE_CACHE_BUSTER, AGENT_NATIVE_SOCIAL_IMAGE_HEIGHT, AGENT_NATIVE_SOCIAL_IMAGE_PATH, AGENT_NATIVE_SOCIAL_IMAGE_TYPE, AGENT_NATIVE_SOCIAL_IMAGE_WIDTH, } from "../shared/social-meta.js";
|
|
37
|
+
import { getSsrAuthRedirectScript } from "../shared/ssr-auth-redirect.js";
|
|
33
38
|
import { generateActionRegistryForProject } from "../vite/action-types-plugin.js";
|
|
34
39
|
import { createAgentNativeConfigContext, loadResolvedAgentNativeConfig, } from "../vite/agent-native-config-loader.js";
|
|
35
40
|
import { cloneServerBundleForFunction, copyDir, pruneSsrIslandFromRewritingClone, readPackageManifest, SERVERLESS_BROWSER_RUNTIME_PACKAGES, } from "./function-bundle.js";
|
|
@@ -43,10 +48,128 @@ export const CLOUDFLARE_MODULE_PRESETS = [
|
|
|
43
48
|
"cloudflare_module",
|
|
44
49
|
"cloudflare-module",
|
|
45
50
|
];
|
|
51
|
+
export const AWS_AMPLIFY_PRESETS = [
|
|
52
|
+
"aws_amplify",
|
|
53
|
+
"aws-amplify",
|
|
54
|
+
"awsAmplify",
|
|
55
|
+
];
|
|
56
|
+
export function isAwsAmplifyPreset(targetPreset) {
|
|
57
|
+
return AWS_AMPLIFY_PRESETS.includes(targetPreset);
|
|
58
|
+
}
|
|
46
59
|
export function isCloudflareModulePreset(targetPreset) {
|
|
47
60
|
return CLOUDFLARE_MODULE_PRESETS.includes(targetPreset);
|
|
48
61
|
}
|
|
49
62
|
export const CLOUDFLARE_MODULE_WORKER_ENTRY = "worker.mjs";
|
|
63
|
+
const AWS_AMPLIFY_CORE_RUNTIME_ENV_KEYS = [
|
|
64
|
+
"A2A_SECRET",
|
|
65
|
+
"AGENT_CHAT_DURABLE_BACKGROUND",
|
|
66
|
+
"AGENT_INTEGRATION_DURABLE_DISPATCH",
|
|
67
|
+
"AGENT_NATIVE_DISABLE_KEEP_WARM",
|
|
68
|
+
"AGENT_NATIVE_DISABLE_KEEP_WARM_BACKGROUND",
|
|
69
|
+
"AGENT_NATIVE_DISABLE_RECURRING_JOBS",
|
|
70
|
+
"AGENT_NATIVE_ENABLE_KEEP_WARM",
|
|
71
|
+
"AGENT_NATIVE_ENABLE_RECURRING_JOBS",
|
|
72
|
+
"APP_BASE_PATH",
|
|
73
|
+
"APP_NAME",
|
|
74
|
+
"APP_URL",
|
|
75
|
+
"BETTER_AUTH_SECRET",
|
|
76
|
+
"BETTER_AUTH_URL",
|
|
77
|
+
"DATABASE_AUTH_TOKEN",
|
|
78
|
+
"DATABASE_URL",
|
|
79
|
+
"DATABASE_URL_UNPOOLED",
|
|
80
|
+
"DB_OP_TIMEOUT_MS",
|
|
81
|
+
"EMAIL_FROM",
|
|
82
|
+
"EMAIL_AGENT_ADDRESS",
|
|
83
|
+
"EMAIL_INBOUND_WEBHOOK_SECRET",
|
|
84
|
+
"ANTHROPIC_API_KEY",
|
|
85
|
+
"AGENT_NATIVE_BUILDER_RELAY_SECRET",
|
|
86
|
+
"AGENT_NATIVE_BUILDER_RELAY_TARGET_ORIGINS",
|
|
87
|
+
"AGENT_NATIVE_BUILDER_RELAY_TARGET_DOMAIN_SUFFIXES",
|
|
88
|
+
"BUILDER_GATEWAY_SPACE_ID",
|
|
89
|
+
"BUILDER_GATEWAY_TOKEN",
|
|
90
|
+
"COHERE_API_KEY",
|
|
91
|
+
"GOOGLE_CLIENT_ID",
|
|
92
|
+
"GOOGLE_CLIENT_SECRET",
|
|
93
|
+
"GOOGLE_GENERATIVE_AI_API_KEY",
|
|
94
|
+
"GOOGLE_LEGACY_CLIENT_ID",
|
|
95
|
+
"GOOGLE_LEGACY_CLIENT_SECRET",
|
|
96
|
+
"GOOGLE_PICKER_APP_ID",
|
|
97
|
+
"GOOGLE_SIGN_IN_CLIENT_ID",
|
|
98
|
+
"GOOGLE_SIGN_IN_CLIENT_SECRET",
|
|
99
|
+
"GROQ_API_KEY",
|
|
100
|
+
"MISTRAL_API_KEY",
|
|
101
|
+
"NOTION_CLIENT_ID",
|
|
102
|
+
"NOTION_CLIENT_SECRET",
|
|
103
|
+
"OLLAMA_BASE_URL",
|
|
104
|
+
"OAUTH_STATE_SECRET",
|
|
105
|
+
"OPENAI_API_KEY",
|
|
106
|
+
"OPENAI_BASE_URL",
|
|
107
|
+
"OPENROUTER_API_KEY",
|
|
108
|
+
"RESEND_API_KEY",
|
|
109
|
+
"SENDGRID_API_KEY",
|
|
110
|
+
"SECRETS_ENCRYPTION_KEY",
|
|
111
|
+
"WORKSPACE_SECRETS_ENCRYPTION_KEY",
|
|
112
|
+
"WORKSPACE_SECRETS_ENCRYPTION_KEY_PREVIOUS",
|
|
113
|
+
];
|
|
114
|
+
function appScopedRuntimeEnvKeys(appName) {
|
|
115
|
+
const databasePrefix = appName?.toUpperCase().replace(/-/g, "_");
|
|
116
|
+
const encryptionPrefix = appName
|
|
117
|
+
?.trim()
|
|
118
|
+
.toUpperCase()
|
|
119
|
+
.replace(/[^A-Z0-9]+/g, "_")
|
|
120
|
+
.replace(/^_+|_+$/g, "");
|
|
121
|
+
return [
|
|
122
|
+
...(databasePrefix
|
|
123
|
+
? [
|
|
124
|
+
`${databasePrefix}_DATABASE_URL`,
|
|
125
|
+
`${databasePrefix}_DATABASE_AUTH_TOKEN`,
|
|
126
|
+
`${databasePrefix}_DATABASE_URL_UNPOOLED`,
|
|
127
|
+
]
|
|
128
|
+
: []),
|
|
129
|
+
...(encryptionPrefix ? [`${encryptionPrefix}_SECRETS_ENCRYPTION_KEY`] : []),
|
|
130
|
+
];
|
|
131
|
+
}
|
|
132
|
+
function readEnvExampleKeys(filePath) {
|
|
133
|
+
if (!fs.existsSync(filePath))
|
|
134
|
+
return [];
|
|
135
|
+
const keys = new Set();
|
|
136
|
+
for (const line of fs.readFileSync(filePath, "utf8").split(/\r?\n/)) {
|
|
137
|
+
const match = line.match(/^\s*#?\s*(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=/);
|
|
138
|
+
if (match)
|
|
139
|
+
keys.add(match[1]);
|
|
140
|
+
}
|
|
141
|
+
return [...keys];
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Amplify makes build variables available to the build container but does not
|
|
145
|
+
* forward them to SSR compute. Keep Nitro's self-contained entrypoint and
|
|
146
|
+
* write only app-declared runtime keys beside it for Node's native env loader.
|
|
147
|
+
*/
|
|
148
|
+
export function configureAwsAmplifyRuntimeOutput(serverDir, appDir, env = process.env) {
|
|
149
|
+
const declaredKeys = new Set([
|
|
150
|
+
...AWS_AMPLIFY_CORE_RUNTIME_ENV_KEYS,
|
|
151
|
+
...declaredEnvKeys(),
|
|
152
|
+
...readEnvExampleKeys(path.join(appDir, ".env.example")),
|
|
153
|
+
]);
|
|
154
|
+
for (const key of appScopedRuntimeEnvKeys(env.APP_NAME)) {
|
|
155
|
+
declaredKeys.add(key);
|
|
156
|
+
}
|
|
157
|
+
const runtimeEnv = [...declaredKeys].sort().flatMap((key) => {
|
|
158
|
+
const value = env[key];
|
|
159
|
+
return typeof value === "string" ? [`${key}=${JSON.stringify(value)}`] : [];
|
|
160
|
+
});
|
|
161
|
+
const envPath = path.join(serverDir, ".env");
|
|
162
|
+
const serverEntryPath = path.join(serverDir, "server.js");
|
|
163
|
+
if (!fs.existsSync(path.join(serverDir, "index.mjs"))) {
|
|
164
|
+
throw new Error(`[deploy] Nitro did not generate ${path.join(serverDir, "index.mjs")} for aws_amplify`);
|
|
165
|
+
}
|
|
166
|
+
fs.writeFileSync(envPath, runtimeEnv.length > 0 ? `${runtimeEnv.join("\n")}\n` : "", { encoding: "utf8", mode: 0o600 });
|
|
167
|
+
fs.chmodSync(envPath, 0o600);
|
|
168
|
+
fs.writeFileSync(serverEntryPath, "// Amplify Hosting exposes env vars during build, not to SSR compute.\n" +
|
|
169
|
+
'process.loadEnvFile(require("node:path").join(__dirname, ".env"));\n' +
|
|
170
|
+
'import("./index.mjs");\n');
|
|
171
|
+
console.log(`[deploy] Prepared Amplify runtime env with ${runtimeEnv.length} declared key(s).`);
|
|
172
|
+
}
|
|
50
173
|
export function generateCloudflareModuleWorkerEntry() {
|
|
51
174
|
return `let handler;
|
|
52
175
|
|
|
@@ -666,6 +789,7 @@ export function generateWorkerEntry(routes, pluginPaths, defaultPluginStems = []
|
|
|
666
789
|
// deployment-wide SSR cache policy is baked in from this build's env.
|
|
667
790
|
const ssrCacheHeaders = resolveSsrCacheHeaders();
|
|
668
791
|
const ssrCacheKeyHeaders = resolveSsrCacheKeyHeaders();
|
|
792
|
+
const ssrAuthRedirectScript = getSsrAuthRedirectScript(frameworkSessionHintCookieName(resolveAuthCookieNamespace().frameworkCookieName));
|
|
669
793
|
const routeImports = [];
|
|
670
794
|
const routeRegistrations = [];
|
|
671
795
|
for (let i = 0; i < routes.length; i++) {
|
|
@@ -1164,6 +1288,7 @@ function injectHeadScript(html, script) {
|
|
|
1164
1288
|
const SSR_CACHE_HEADERS = ${JSON.stringify(ssrCacheHeaders)};
|
|
1165
1289
|
const SSR_CACHE_KEY_HEADERS = ${JSON.stringify(ssrCacheKeyHeaders)};
|
|
1166
1290
|
const SSR_QUERY_CACHE_KEY_HEADER = ${JSON.stringify(SSR_QUERY_CACHE_KEY_HEADER)};
|
|
1291
|
+
const SSR_AUTH_REDIRECT_SCRIPT = ${JSON.stringify(ssrAuthRedirectScript)};
|
|
1167
1292
|
const DEFAULT_SPECULATION_RULES_PATH = ${JSON.stringify(DEFAULT_SPECULATION_RULES_PATH)};
|
|
1168
1293
|
const IMMUTABLE_ASSET_CACHE_CONTROL = ${JSON.stringify(IMMUTABLE_ASSET_CACHE_CONTROL)};
|
|
1169
1294
|
const IMMUTABLE_ASSET_PATHS = new Set(${JSON.stringify([...new Set(immutableAssetPaths)].sort())});
|
|
@@ -1302,6 +1427,7 @@ async function rewriteMountedResponse(response, basePath, pathname, request) {
|
|
|
1302
1427
|
getPostHogClientConfigScript(),
|
|
1303
1428
|
getRealtimeClientConfigScript(),
|
|
1304
1429
|
getAppOriginClientConfigScript(),
|
|
1430
|
+
pathname === "/" ? SSR_AUTH_REDIRECT_SCRIPT : null,
|
|
1305
1431
|
]
|
|
1306
1432
|
.filter(Boolean)
|
|
1307
1433
|
.join("") || null;
|
|
@@ -1442,7 +1568,7 @@ async function getHandler() {
|
|
|
1442
1568
|
headers: {
|
|
1443
1569
|
"Access-Control-Allow-Origin": "*",
|
|
1444
1570
|
"Access-Control-Allow-Methods": "GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS",
|
|
1445
|
-
"Access-Control-Allow-Headers": "Content-Type,Authorization,X-Requested-With,X-Request-Source,X-Agent-Native-CSRF,X-User-Timezone,X-Agent-Native-Session-Id,X-Agent-Native-Client-Platform,X-Agent-Native-Desktop-Verifier,X-Agent-Native-Tool-Bridge,X-Agent-Native-Tool-Id,X-Agent-Native-Frontend,X-Agent-Native-Client-Compatibility,X-Agent-Native-Build-Id,X-Agent-Native-Embed-Target",
|
|
1571
|
+
"Access-Control-Allow-Headers": "Content-Type,Authorization,X-Requested-With,X-Request-Source,X-Agent-Native-CSRF,X-User-Timezone,X-Agent-Native-Session-Id,X-Agent-Native-Client-Platform,X-Agent-Native-Desktop-Verifier,X-Agent-Native-Test-Traffic,X-Agent-Native-Tool-Bridge,X-Agent-Native-Tool-Id,X-Agent-Native-Frontend,X-Agent-Native-Client-Compatibility,X-Agent-Native-Build-Id,X-Agent-Native-Embed-Target",
|
|
1446
1572
|
},
|
|
1447
1573
|
});
|
|
1448
1574
|
}
|
|
@@ -1626,6 +1752,41 @@ const EMPTY_REACT_ROUTER_TURBO_STREAM = '[{"_1":2,"_3":-5,"_4":-5},"loaderData",
|
|
|
1626
1752
|
// Manifest fallbacks cannot execute server loaders, so root loaders get the
|
|
1627
1753
|
// framework's default locale shape to keep hydration from reading undefined.
|
|
1628
1754
|
const DEFAULT_ROOT_LOADER_REACT_ROUTER_TURBO_STREAM = '[{"_1":2,"_3":-5,"_4":-5},"loaderData",{"_5":6},"actionData","errors","root",{"_7":8,"_9":10,"_11":12,"_13":14},"locale","en-US","preference",{"_7":15},"dir","ltr","messages",{},"system"]\n';
|
|
1755
|
+
const STATIC_SHELL_CUBE_DELAYS = [90, 180, 270, 0, 90, 180, 90, 180, 270];
|
|
1756
|
+
const STATIC_SHELL_LOADING_MARKUP = [
|
|
1757
|
+
'<div style="display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;width:100%">',
|
|
1758
|
+
'<div style="display:flex;align-items:center;gap:12px">',
|
|
1759
|
+
'<svg aria-label="Loading" role="status" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" class="size-6" data-agent-native-cube-loader="true">',
|
|
1760
|
+
`<style>
|
|
1761
|
+
@keyframes an-cube-pulse {
|
|
1762
|
+
0%, 100% { opacity: 0.15; }
|
|
1763
|
+
50% { opacity: 0.95; }
|
|
1764
|
+
}
|
|
1765
|
+
.an-cube-cell {
|
|
1766
|
+
animation: an-cube-pulse 650ms ease-in-out infinite;
|
|
1767
|
+
fill: currentColor;
|
|
1768
|
+
opacity: 0.15;
|
|
1769
|
+
}
|
|
1770
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1771
|
+
.an-cube-cell { animation: none; }
|
|
1772
|
+
}
|
|
1773
|
+
</style>`,
|
|
1774
|
+
...STATIC_SHELL_CUBE_DELAYS.map((delay, index) => `<rect class="an-cube-cell" x="${2.5 + (index % 3) * 7}" y="${2.5 + Math.floor(index / 3) * 7}" width="5" height="5" rx="1" style="animation-delay:calc(${delay}ms - var(--an-cube-loader-phase, 0ms))"></rect>`),
|
|
1775
|
+
'</svg><span data-agent-native-loading-label="true" class="agent-running-shimmer agent-loading-label" style="font-family:ui-sans-serif, system-ui, sans-serif;font-size:16px;font-weight:500;opacity:0.65">Churning</span>',
|
|
1776
|
+
`<\/div><style>
|
|
1777
|
+
html {
|
|
1778
|
+
background: hsl(var(--background, 0 0% 100%));
|
|
1779
|
+
color: hsl(var(--foreground, 240 10% 3.9%));
|
|
1780
|
+
}
|
|
1781
|
+
@media (prefers-color-scheme: dark) {
|
|
1782
|
+
html {
|
|
1783
|
+
background: hsl(var(--background, 240 10% 3.9%));
|
|
1784
|
+
color: hsl(var(--foreground, 0 0% 98%));
|
|
1785
|
+
}
|
|
1786
|
+
}
|
|
1787
|
+
</style></div>`,
|
|
1788
|
+
].join("");
|
|
1789
|
+
const STATIC_SHELL_LOADING_LABEL_SCRIPT = `<script>(function(){var now=window.performance.now();var loader=document.querySelector('[data-agent-native-cube-loader]');if(loader)loader.style.setProperty('--an-cube-loader-phase',(now%650)+'ms');var labels=${JSON.stringify(LOADING_LABELS)};var index=Math.floor(Math.random()*labels.length);window.__agentNativeLoadingLabelIndex=index;var label=document.querySelector('[data-agent-native-loading-label]');if(label){label.textContent=labels[index];label.style.animationDelay='-'+now%2600+'ms';}})();</script>`;
|
|
1629
1790
|
export function generateCloudflarePagesStaticShellFromManifest(manifest, basePath = normalizeConfiguredAppBasePath()) {
|
|
1630
1791
|
const rootRoute = manifest.routes.root;
|
|
1631
1792
|
if (!rootRoute) {
|
|
@@ -1648,8 +1809,7 @@ export function generateCloudflarePagesStaticShellFromManifest(manifest, basePat
|
|
|
1648
1809
|
const encodedInitialState = rootRoute.hasLoader
|
|
1649
1810
|
? DEFAULT_ROOT_LOADER_REACT_ROUTER_TURBO_STREAM
|
|
1650
1811
|
: EMPTY_REACT_ROUTER_TURBO_STREAM;
|
|
1651
|
-
|
|
1652
|
-
return `<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/><link rel="icon" type="image/svg+xml" href="/favicon.svg"/>${modulePreloads}${stylesheets}</head><body><div style="display:flex;align-items:center;justify-content:center;height:100vh;width:100%"><svg role="status" aria-label="Loading" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="animation:an-spin 1s linear infinite;opacity:0.7"><path d="M21 12a9 9 0 1 1-6.219-8.56"></path></svg><style>@keyframes an-spin { to { transform: rotate(360deg) } } @media (prefers-color-scheme: dark) { html { background: #09090b; color: #fafafa } }</style></div><script>window.__reactRouterContext = ${JSON.stringify(context)};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamController = controller;}}).pipeThrough(new TextEncoderStream());</script><script type="module" async="">${routeModuleScript}</script><!--$--><script>window.__reactRouterContext.streamController.enqueue(${JSON.stringify(encodedInitialState)});</script><!--$--><script>window.__reactRouterContext.streamController.close();</script><!--/$--><!--/$--></body></html>`;
|
|
1812
|
+
return `<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/><link rel="icon" type="image/svg+xml" href="/favicon.svg"/>${modulePreloads}${stylesheets}</head><body>${STATIC_SHELL_LOADING_MARKUP}${STATIC_SHELL_LOADING_LABEL_SCRIPT}<script>window.__reactRouterContext = ${JSON.stringify(context)};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamController = controller;}}).pipeThrough(new TextEncoderStream());</script><script type="module" async="">${routeModuleScript}</script><!--$--><script>window.__reactRouterContext.streamController.enqueue(${JSON.stringify(encodedInitialState)});</script><!--$--><script>window.__reactRouterContext.streamController.close();</script><!--/$--><!--/$--></body></html>`;
|
|
1653
1813
|
}
|
|
1654
1814
|
function writeCloudflarePagesStaticShell({ serverDir, distDir, tmpDir, }) {
|
|
1655
1815
|
const serverEntry = path.join(serverDir, "index.js");
|
|
@@ -2125,6 +2285,27 @@ const PACKAGE_DEPENDENCY_FIELDS = [
|
|
|
2125
2285
|
"devDependencies",
|
|
2126
2286
|
"peerDependencies",
|
|
2127
2287
|
];
|
|
2288
|
+
const RUNTIME_PACKAGE_DEPENDENCY_FIELDS = [
|
|
2289
|
+
"dependencies",
|
|
2290
|
+
"optionalDependencies",
|
|
2291
|
+
];
|
|
2292
|
+
const AGENT_NATIVE_BUILD_ENGINE_PACKAGES_ENV_VAR = "AGENT_NATIVE_BUILD_ENGINE_PACKAGES";
|
|
2293
|
+
function resolveDeclaredRuntimePackageNames(projectCwd) {
|
|
2294
|
+
const manifest = readPackageManifest(projectCwd);
|
|
2295
|
+
const packageNames = new Set();
|
|
2296
|
+
for (const field of RUNTIME_PACKAGE_DEPENDENCY_FIELDS) {
|
|
2297
|
+
const dependencies = manifest?.[field];
|
|
2298
|
+
if (!dependencies ||
|
|
2299
|
+
typeof dependencies !== "object" ||
|
|
2300
|
+
Array.isArray(dependencies)) {
|
|
2301
|
+
continue;
|
|
2302
|
+
}
|
|
2303
|
+
for (const packageName of Object.keys(dependencies)) {
|
|
2304
|
+
packageNames.add(packageName);
|
|
2305
|
+
}
|
|
2306
|
+
}
|
|
2307
|
+
return [...packageNames].sort();
|
|
2308
|
+
}
|
|
2128
2309
|
// Serverless functions only ever run on 64-bit Linux. The darwin/win32/android
|
|
2129
2310
|
// and 32-bit-arm prebuilds of these native packages are ~100MB that can never
|
|
2130
2311
|
// execute there, and Netlify copies the whole server dir again for every extra
|
|
@@ -3305,6 +3486,48 @@ export function stubLocalOnlySqliteDriverForServerless(serverDir) {
|
|
|
3305
3486
|
`${(freed / 1024 / 1024).toFixed(1)}MB of local-only SQLite driver removed.`);
|
|
3306
3487
|
return freed;
|
|
3307
3488
|
}
|
|
3489
|
+
/**
|
|
3490
|
+
* Nitro bundles the Vite SSR driver's dynamic import into a private `_libs`
|
|
3491
|
+
* chunk when Amplify uses `noExternals: true`, so the package-tree stub above
|
|
3492
|
+
* cannot see it. Replace that generated chunk after Nitro emits it.
|
|
3493
|
+
*/
|
|
3494
|
+
export function stubBundledLocalOnlySqliteDriverForServerless(serverDir) {
|
|
3495
|
+
const libsDir = path.join(serverDir, "_libs");
|
|
3496
|
+
if (!fs.existsSync(libsDir))
|
|
3497
|
+
return 0;
|
|
3498
|
+
const stubSource = [
|
|
3499
|
+
"class BetterSqlite3NotAvailableInServerless {",
|
|
3500
|
+
" constructor() {",
|
|
3501
|
+
" throw new Error(",
|
|
3502
|
+
' "better-sqlite3 is not available in a serverless deployment. " +',
|
|
3503
|
+
' "DATABASE_URL resolved to a file-backed SQLite database, whose " +',
|
|
3504
|
+
' "filesystem is ephemeral and not shared between containers. " +',
|
|
3505
|
+
' "Point DATABASE_URL at Postgres or libSQL/Turso."',
|
|
3506
|
+
" );",
|
|
3507
|
+
" }",
|
|
3508
|
+
"}",
|
|
3509
|
+
"const BetterSqlite3Module = BetterSqlite3NotAvailableInServerless;",
|
|
3510
|
+
"BetterSqlite3Module.SqliteError = class SqliteError extends Error {};",
|
|
3511
|
+
"export const t = () => BetterSqlite3Module;",
|
|
3512
|
+
"export default BetterSqlite3Module;",
|
|
3513
|
+
"export const Database = BetterSqlite3Module;",
|
|
3514
|
+
"",
|
|
3515
|
+
].join("\n");
|
|
3516
|
+
let replaced = 0;
|
|
3517
|
+
for (const entry of fs.readdirSync(libsDir, { withFileTypes: true })) {
|
|
3518
|
+
if (!entry.isFile() ||
|
|
3519
|
+
!entry.name.startsWith("better-sqlite3") ||
|
|
3520
|
+
!entry.name.endsWith(".mjs")) {
|
|
3521
|
+
continue;
|
|
3522
|
+
}
|
|
3523
|
+
fs.writeFileSync(path.join(libsDir, entry.name), stubSource);
|
|
3524
|
+
replaced++;
|
|
3525
|
+
}
|
|
3526
|
+
if (replaced > 0) {
|
|
3527
|
+
console.log(`[deploy] Stubbed ${replaced} bundled better-sqlite3 chunk(s) for serverless output.`);
|
|
3528
|
+
}
|
|
3529
|
+
return replaced;
|
|
3530
|
+
}
|
|
3308
3531
|
function netlifyFunctionSizeBudget(functionDir) {
|
|
3309
3532
|
const allowance = (hasBundledServerlessBrowserRuntime(functionDir)
|
|
3310
3533
|
? NETLIFY_BROWSER_RUNTIME_SIZE_ALLOWANCE_BYTES
|
|
@@ -4125,11 +4348,13 @@ export function resolveNitroBundledYjsEntry() {
|
|
|
4125
4348
|
return entry;
|
|
4126
4349
|
}
|
|
4127
4350
|
/**
|
|
4128
|
-
* Edge runtimes have no node_modules
|
|
4129
|
-
*
|
|
4351
|
+
* Edge runtimes have no node_modules. Amplify uses a self-contained Nitro
|
|
4352
|
+
* bundle to avoid its monorepo dependency-tracing pass; other Node/serverless
|
|
4353
|
+
* outputs receive the small set above through the controlled post-build pass.
|
|
4130
4354
|
*/
|
|
4131
4355
|
export function nitroNoExternalsForPreset(targetPreset) {
|
|
4132
4356
|
return targetPreset.startsWith("cloudflare") ||
|
|
4357
|
+
isAwsAmplifyPreset(targetPreset) ||
|
|
4133
4358
|
targetPreset.startsWith("deno")
|
|
4134
4359
|
? true
|
|
4135
4360
|
: targetPreset === "netlify" ||
|
|
@@ -4184,7 +4409,7 @@ function createBrowserOnlyServerStubPlugin() {
|
|
|
4184
4409
|
},
|
|
4185
4410
|
};
|
|
4186
4411
|
}
|
|
4187
|
-
export function resolveNitroBuildReplacements(env = process.env, deploymentEnvironment) {
|
|
4412
|
+
export function resolveNitroBuildReplacements(env = process.env, deploymentEnvironment, projectCwd = cwd) {
|
|
4188
4413
|
const configuredDeploymentEnvironment = deploymentEnvironment?.trim() ||
|
|
4189
4414
|
env.AGENT_NATIVE_DEPLOYMENT_ENVIRONMENT?.trim();
|
|
4190
4415
|
return {
|
|
@@ -4207,6 +4432,11 @@ export function resolveNitroBuildReplacements(env = process.env, deploymentEnvir
|
|
|
4207
4432
|
"process.env.AGENT_NATIVE_RELEASE_MIGRATIONS": JSON.stringify(env.AGENT_NATIVE_RELEASE_MIGRATIONS?.trim() || ""),
|
|
4208
4433
|
"process.env.AGENT_NATIVE_BETA_SCHEMA_OWNER": JSON.stringify(env.AGENT_NATIVE_BETA_SCHEMA_OWNER?.trim() || ""),
|
|
4209
4434
|
"process.env.AGENT_NATIVE_BUILD_DEPLOY_CONTEXT": JSON.stringify(env.CONTEXT?.trim() || env.NETLIFY_CONTEXT?.trim() || ""),
|
|
4435
|
+
// Nitro's serverless bundle inlines optional provider packages into
|
|
4436
|
+
// relative chunks. The deployed Function cannot use require.resolve to
|
|
4437
|
+
// see those chunks, so carry the app's runtime dependency boundary into
|
|
4438
|
+
// the bundle as positive package evidence.
|
|
4439
|
+
[`process.env.${AGENT_NATIVE_BUILD_ENGINE_PACKAGES_ENV_VAR}`]: JSON.stringify(JSON.stringify(resolveDeclaredRuntimePackageNames(projectCwd))),
|
|
4210
4440
|
// Whether the recurring-jobs scheduled function exists is decided HERE, by
|
|
4211
4441
|
// the build env. `scheduledTriggerAvailability` cannot re-derive it later —
|
|
4212
4442
|
// a pipeline that sets the kill switch only for the build leaves no runtime
|
|
@@ -4298,6 +4528,9 @@ export default bundle;
|
|
|
4298
4528
|
rootDir: cwd,
|
|
4299
4529
|
dev: false,
|
|
4300
4530
|
preset,
|
|
4531
|
+
...(isAwsAmplifyPreset(preset)
|
|
4532
|
+
? { awsAmplify: { runtime: "nodejs24.x" } }
|
|
4533
|
+
: {}),
|
|
4301
4534
|
baseURL: appBasePath || "/",
|
|
4302
4535
|
minify: true,
|
|
4303
4536
|
serverDir: "./server",
|
|
@@ -4336,6 +4569,16 @@ export default bundle;
|
|
|
4336
4569
|
? [createCloudflareModuleStubPlugin()]
|
|
4337
4570
|
: []),
|
|
4338
4571
|
createBrowserOnlyServerStubPlugin(),
|
|
4572
|
+
...(isAwsAmplifyPreset(preset)
|
|
4573
|
+
? [
|
|
4574
|
+
{
|
|
4575
|
+
name: "agent-native-amplify-yjs-resolver",
|
|
4576
|
+
resolveId(id) {
|
|
4577
|
+
return id === "yjs" ? resolveNitroBundledYjsEntry() : null;
|
|
4578
|
+
},
|
|
4579
|
+
},
|
|
4580
|
+
]
|
|
4581
|
+
: []),
|
|
4339
4582
|
],
|
|
4340
4583
|
},
|
|
4341
4584
|
...(providedPluginsNitroPlugin
|
|
@@ -4343,9 +4586,9 @@ export default bundle;
|
|
|
4343
4586
|
: {}),
|
|
4344
4587
|
routeRules: mcpEmbedStaticAssetRouteRules(appBasePath),
|
|
4345
4588
|
// Edge presets (cloudflare, deno) bundle all deps because node_modules are
|
|
4346
|
-
// unavailable at runtime.
|
|
4347
|
-
//
|
|
4348
|
-
//
|
|
4589
|
+
// unavailable at runtime. Amplify also uses one self-contained bundle to
|
|
4590
|
+
// avoid its monorepo dependency-tracing pass; other Node/serverless
|
|
4591
|
+
// presets externalize Yjs above, then emit one portable runtime module.
|
|
4349
4592
|
noExternals: nitroNoExternalsForPreset(preset),
|
|
4350
4593
|
});
|
|
4351
4594
|
await runNitroBuildPipeline({
|
|
@@ -4363,13 +4606,19 @@ export default bundle;
|
|
|
4363
4606
|
if (isCloudflareModulePreset(preset)) {
|
|
4364
4607
|
configureCloudflareModuleWorkerOutput(nitro.options.output.serverDir);
|
|
4365
4608
|
}
|
|
4366
|
-
if (preset === "netlify" ||
|
|
4609
|
+
if (preset === "netlify" ||
|
|
4610
|
+
preset === "vercel" ||
|
|
4611
|
+
preset === "aws-lambda" ||
|
|
4612
|
+
isAwsAmplifyPreset(preset)) {
|
|
4367
4613
|
copyInstalledLibsqlNativePackages(nitro.options.output.serverDir);
|
|
4368
4614
|
copyInstalledResvgPackages(nitro.options.output.serverDir);
|
|
4369
4615
|
copyInstalledFfmpegStaticPackage(nitro.options.output.serverDir);
|
|
4370
4616
|
copyInstalledBrowserRuntimePackages(nitro.options.output.serverDir);
|
|
4371
4617
|
sanitizeServerlessFunctionPackageManifest(nitro.options.output.serverDir);
|
|
4372
4618
|
stubLocalOnlySqliteDriverForServerless(nitro.options.output.serverDir);
|
|
4619
|
+
if (isAwsAmplifyPreset(preset)) {
|
|
4620
|
+
stubBundledLocalOnlySqliteDriverForServerless(nitro.options.output.serverDir);
|
|
4621
|
+
}
|
|
4373
4622
|
// Before the Netlify block below clones this dir into the extra functions,
|
|
4374
4623
|
// so they inherit the pruned bundle instead of a second full copy.
|
|
4375
4624
|
pruneServerlessFunctionDeadWeight(nitro.options.output.serverDir);
|
|
@@ -4413,6 +4662,9 @@ export default bundle;
|
|
|
4413
4662
|
runAppServerlessFunctionPruning(cwd);
|
|
4414
4663
|
assertSingleTemplateNetlifyBuildOutput(cwd);
|
|
4415
4664
|
}
|
|
4665
|
+
if (isAwsAmplifyPreset(preset)) {
|
|
4666
|
+
configureAwsAmplifyRuntimeOutput(nitro.options.output.serverDir, cwd);
|
|
4667
|
+
}
|
|
4416
4668
|
// Resolve remaining bare npm imports by bundling them into _libs/.
|
|
4417
4669
|
// Nitro sometimes leaves small packages as externals even with noExternals.
|
|
4418
4670
|
if (preset.startsWith("cloudflare") || preset.startsWith("deno")) {
|
package/dist/index.browser.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export * from "./config.js";
|
|
|
2
2
|
export { addContextToAgentChat, appendAgentChatContextToMessage, clearAgentChatContext, formatAgentChatContextItemsForPrompt, listAgentChatContext, refreshAgentChatContext, removeAgentChatContextItem, sendToAgentChat, sendToAgentChatAndConfirm, setAgentChatContextItem, setContextToAgentChat, isEmbedMcpChatBridgeActive, useAgentChatContext, useAgentChatGenerating, useDevMode, useSendToAgentChat, AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES, getMcpAppHostContext, openMcpAppHostLink, requestMcpAppDisplayMode, sendMcpAppHostMessage, updateMcpAppModelContext, useMcpAppHostContext, CodeRequiredDialog, AgentNativeI18nProvider, LanguagePicker, getLocaleInitScript, localeDirection, normalizeLocaleCode, normalizeLocalePreference, normalizeLocalizationPreference, resolveLocaleFromCandidates, resolveLocaleFromPreference, useFormatters, useLocale, useT, DEFAULT_LOCALE, LOCALE_HYDRATION_GLOBAL, LOCALE_METADATA, LOCALE_STORAGE_KEY, SUPPORTED_LOCALES, useDbSync, useFileWatcher, useSession, cn, ApiKeySettings, type AgentChatContextItem, type AgentChatContextMessage, type AgentChatContextMutationOptions, type AgentChatContextRemoveOptions, type AgentChatContextSetOptions, type AgentChatContextState, type AgentChatMessage, type AgentNativeMcpAppHostMessageType, type McpAppDisplayMode, type McpAppHostChatMessage, type McpAppHostCapabilities, type McpAppHostContext, type McpAppHostContextSnapshot, type McpAppModelContextContentPart, type McpAppModelContextUpdate, type CodeRequiredDialogProps, type AuthSession, type UseAgentChatContextResult, type AgentNativeI18nCatalog, type AgentNativeI18nProviderProps, type LocaleCode, type LocaleHydrationPayload, type LocaleMessages, type LocaleMetadata, type LocalePreference, type LocalizationPreference, } from "./client/index.js";
|
|
3
3
|
export { agentChat } from "./shared/index.js";
|
|
4
4
|
export { parseArgs, camelCaseArgs } from "./scripts/parse-args.js";
|
|
5
|
-
export { AgentNativeWebMcpUnsupportedError, createAgentNativeWebMcpClient, createAgentNativeWebMcpRegistration, isAgentNativeWebMcpSupported, type AgentNativeWebMcpApprovalRequest, type AgentNativeWebMcpClient, type AgentNativeWebMcpClientOptions, type AgentNativeWebMcpRegistration, type AgentNativeWebMcpRegistrationOptions, type AgentNativeWebMcpTool, type AgentNativeWebMcpToolAnnotations, type AgentNativeWebMcpToolExecutionOptions, type AgentNativeWebMcpToolResult, } from "./client/webmcp.js";
|
|
5
|
+
export { AgentNativeWebMcpUnsupportedError, createAgentNativeWebMcpClient, createAgentNativeWebMcpRegistration, createAgentNativeServerActionWebMcpRegistration, isAgentNativeWebMcpSupported, type AgentNativeWebMcpApprovalRequest, type AgentNativeWebMcpClient, type AgentNativeWebMcpClientOptions, type AgentNativeWebMcpRegistration, type AgentNativeWebMcpRegistrationOptions, type AgentNativeWebMcpTool, type AgentNativeWebMcpToolAnnotations, type AgentNativeWebMcpToolExecutionOptions, type AgentNativeWebMcpToolResult, } from "./client/webmcp.js";
|
|
6
6
|
export { defineAction, fail, type FailOptions, ActionContractError, isActionContractError, type ActionContractErrorOptions, AgentActionStopError, isAgentActionStopError, type ActionHttpConfig, type AgentActionStopOptions, MCP_APP_EXTENSION_ID, MCP_APP_MIME_TYPE, MCP_APP_RESOURCE_URI_META_KEY, type ActionMcpAppConfig, type ActionMcpAppCsp, type ActionMcpAppCspBuilder, type ActionMcpAppHtmlBuilder, type ActionMcpAppPermissions, type ActionMcpAppResourceConfig, type ActionMcpAppResourceMeta, } from "./action.js";
|
|
7
7
|
export { isEmailDerivedName, normalizeUserProfileName, resolveUserProfileName, USER_PROFILE_SETTING_KEY, type UserProfile, } from "./user-profile/index.js";
|
|
8
8
|
export { ACTION_CHAT_UI_DATA_CHART_RENDERER, ACTION_CHAT_UI_DATA_INSIGHTS_RENDERER, ACTION_CHAT_UI_DATA_TABLE_RENDERER, ACTION_CHAT_UI_DATA_WIDGET_RENDERER, ACTION_CHAT_UI_INLINE_EXTENSION_RENDERER, ACTION_CHAT_UI_WORKSPACE_FILE_RENDERER, type ActionChatUIConfig, } from "./action-ui.js";
|
package/dist/index.browser.js
CHANGED
|
@@ -8,7 +8,7 @@ export { addContextToAgentChat, appendAgentChatContextToMessage, clearAgentChatC
|
|
|
8
8
|
export { agentChat } from "./shared/index.js";
|
|
9
9
|
// Pure utilities (no Node.js deps — safe for browser and SSR)
|
|
10
10
|
export { parseArgs, camelCaseArgs } from "./scripts/parse-args.js";
|
|
11
|
-
export { AgentNativeWebMcpUnsupportedError, createAgentNativeWebMcpClient, createAgentNativeWebMcpRegistration, isAgentNativeWebMcpSupported, } from "./client/webmcp.js";
|
|
11
|
+
export { AgentNativeWebMcpUnsupportedError, createAgentNativeWebMcpClient, createAgentNativeWebMcpRegistration, createAgentNativeServerActionWebMcpRegistration, isAgentNativeWebMcpSupported, } from "./client/webmcp.js";
|
|
12
12
|
// defineAction — used by template actions, no Node.js deps
|
|
13
13
|
export { defineAction, fail, ActionContractError, isActionContractError, AgentActionStopError, isAgentActionStopError, MCP_APP_EXTENSION_ID, MCP_APP_MIME_TYPE, MCP_APP_RESOURCE_URI_META_KEY, } from "./action.js";
|
|
14
14
|
export { isEmailDerivedName, normalizeUserProfileName, resolveUserProfileName, USER_PROFILE_SETTING_KEY, } from "./user-profile/index.js";
|