@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
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Forms in a Multi-App Workspace"
|
|
3
|
+
description: "How Forms connects to Dispatch and other apps, and the two real mechanisms other apps use to act on a form or send data into it."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Forms in a Multi-App Workspace
|
|
7
|
+
|
|
8
|
+
Forms is one app among many in a [Dispatch](/docs/template-dispatch) workspace. This page covers what that actually means in practice: how the connection works, and concrete ways other apps can act on a form or send data into it. See [Forms](/docs/template-forms) for the overview.
|
|
9
|
+
|
|
10
|
+
## How Forms connects to Dispatch
|
|
11
|
+
|
|
12
|
+
Whether this is automatic depends on how Forms and Dispatch were set up together, not on whether either one is hosted or running locally.
|
|
13
|
+
|
|
14
|
+
### Same workspace: automatic
|
|
15
|
+
|
|
16
|
+
If Forms and Dispatch were generated or added together into one Agent-Native workspace (via `create` or `add-app`) and deployed as one unit, they already share one `.env`, one `A2A_SECRET`, and one workspace registry. Discovery and authenticated A2A calling both just work, with nothing to set up, whether that workspace is running on your machine or in production. This is the expected setup for a real multi-app product built on Forms.
|
|
17
|
+
|
|
18
|
+
### Separate deployments: one manual step
|
|
19
|
+
|
|
20
|
+
If Forms and Dispatch are two independently created Agent-Native projects, they don't share a secret and can't call each other yet. Connecting them takes one manual step on each side: add a `remote-agents/<id>.json` resource with a shared secret, from Settings → Connected Agents, the Agent page's Connections tab, or Dispatch → Agents → Add external agent. See [A2A Protocol](/docs/a2a-protocol) for the full walkthrough.
|
|
21
|
+
|
|
22
|
+
To check which situation you're in, ask either app's agent "what apps can you see?" If Forms is missing from Dispatch's answer, you're in the second case.
|
|
23
|
+
|
|
24
|
+
## Integration strategies
|
|
25
|
+
|
|
26
|
+
**Natural-language delegation through Dispatch.** A sibling app doesn't need a special integration to work with Forms. It can hand Forms' agent a plain-English request, like "how many responses does the beta signup form have," the same way you would in chat, and Forms answers or acts on it directly. This is the real mechanism behind something like a question that arrives in Slack or Mail turning into a real answer from Forms: Dispatch (or the app that received the message) delegates the request to Forms' agent, and Forms handles it like any other prompt.
|
|
27
|
+
|
|
28
|
+
**Other apps submitting into a form directly.** Forms doesn't need A2A or Dispatch at all for another app to send it data. Any app can send a plain web request to a form's public submit address, the same way an anonymous respondent filling out the public page does. The framework's own feedback button works exactly this way. It sends a submission to a deployed Forms app from inside another app's sidebar, along with which page and which app the feedback came from, and Forms records it as a normal response. This means any app in your workspace can send structured data into a form without an A2A connection at all, just a plain web request.
|
|
29
|
+
|
|
30
|
+
**Staying decoupled.** Whether Forms is answering a delegated question or receiving a direct submission, it never needs to know the calling app's credentials, and the calling app never needs to know anything about how Forms stores its data. Delegation goes through the agent like any other prompt, and a direct submission goes through the same public address a human respondent would use.
|
|
31
|
+
|
|
32
|
+
## What's next
|
|
33
|
+
|
|
34
|
+
- [**Forms**](/docs/template-forms) — the overview and what it replaces
|
|
35
|
+
- [**Features**](/docs/template-forms-features) — every feature area, with setup steps for each
|
|
36
|
+
- [**Talk to the Agent**](/docs/template-forms-agent) — every prompt by task and how the agent sees your screen
|
|
37
|
+
- [**Developer Guide**](/docs/template-forms-developers) — every action and the data model behind these features
|
|
38
|
+
- [**Dispatch**](/docs/template-dispatch) — the workspace control plane these patterns run under
|
|
39
|
+
- [**A2A Protocol**](/docs/a2a-protocol) — how apps discover, authenticate with, and call each other
|
|
40
|
+
- [**Multi-App Workspace**](/docs/multi-app-workspace) — the general pattern of composing first-party apps instead of nesting them
|
|
@@ -1,26 +1,31 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "Forms"
|
|
3
|
-
description: "
|
|
3
|
+
description: "An agent-powered form builder that replaces Typeform and Google Forms with one app you own. Describe the form you want in chat, publish a protected link, and watch responses get routed, exported, and summarized automatically."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Forms
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Forms is a form builder for anyone who needs to collect information without writing code. Use it for signups, feedback, registrations, or surveys. Describe the form you want to the agent, fine-tune it visually when you want more direct control, and publish a link that anyone can fill out.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
<Cards columns={1}>
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
<Screen
|
|
14
|
-
surface="desktop"
|
|
15
|
-
html={
|
|
16
|
-
"<div style='min-height:560px;box-sizing:border-box;display:flex;align-items:center;justify-content:center;padding:56px 40px'><div style='display:flex;flex-direction:column;align-items:center;justify-content:center;gap:24px;width:min(700px,92%);min-height:420px'><div style='text-align:center'><h1 style='margin:0'>Ask Forms</h1><p class='wf-muted' style='margin:10px 0 0'>Describe the form you want. Fine-tune it visually once it exists.</p></div><div class='wf-card' style='width:100%;min-height:140px;display:flex;flex-direction:column;gap:18px'><span class='wf-muted'>Create a beta signup form with role, team size, and priority use case</span><div style='flex:1'></div><div style='display:flex;align-items:center;gap:10px'><div style='flex:1'></div><button class='primary'>↑</button></div></div><div style='display:flex;gap:8px;flex-wrap:wrap;justify-content:center'><span class='wf-pill'>Post responses to Slack</span><span class='wf-pill'>Summarize this week's submissions</span><span class='wf-pill'>Make this form shorter</span></div></div></div>"
|
|
17
|
-
}
|
|
18
|
-
/>
|
|
19
|
-
</WireframeBlock>
|
|
12
|
+
### [Try it out now →](https://forms.agent-native.com)
|
|
20
13
|
|
|
21
|
-
|
|
14
|
+
See Forms live and publish a real form.
|
|
22
15
|
|
|
23
|
-
|
|
16
|
+
</Cards>
|
|
17
|
+
|
|
18
|
+
<Video
|
|
19
|
+
src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F70338a3cf0cc402580858a409dd5bd6a?alt=media&token=f2c7c8e9-6cf3-4e03-865d-abc499d87ff6&apiKey=YJIGb4i01jvw0SRdL5Bt"
|
|
20
|
+
alt="A brief tour of the forms application."
|
|
21
|
+
caption="A brief tour of the forms application."
|
|
22
|
+
autoplay={true}
|
|
23
|
+
loop={true}
|
|
24
|
+
/>
|
|
25
|
+
|
|
26
|
+
Every new session opens on **Ask Forms**, a chat where you describe what you want. The agent creates the form for you. You can then move into the visual editor any time you want to adjust fields, validation, or publishing settings by hand. Both ways of editing update the same form, so nothing gets out of sync.
|
|
27
|
+
|
|
28
|
+
<Diagram id="doc-block-forms2" title="Build, publish, collect" summary={"The agent and the visual editor edit the same form. Anyone can open the public fill page without signing in, and new submissions are sent to your destinations automatically."}>
|
|
24
29
|
|
|
25
30
|
```html
|
|
26
31
|
<div class="diagram-flow">
|
|
@@ -85,38 +90,46 @@ Every new session opens on **Ask Forms**, a chat where you describe what you wan
|
|
|
85
90
|
|
|
86
91
|
</Diagram>
|
|
87
92
|
|
|
88
|
-
## What
|
|
93
|
+
## What it replaces
|
|
94
|
+
|
|
95
|
+
<Comparison>
|
|
89
96
|
|
|
90
|
-
|
|
91
|
-
- **Fine-tune visually.** Edit labels, placeholders, required state, options, and field order from the builder UI when you want direct control.
|
|
92
|
-
- **Publish and protect a public form.** Share a public link, and turn on captcha protection or fully anonymous responses when you need them — see [Building and publishing a form](/docs/template-forms-building-publishing).
|
|
93
|
-
- **Review responses and ask for insights.** "Summarize this week's submissions," "chart submissions by day" — see [Responses, insights, and destinations](/docs/template-forms-responses).
|
|
94
|
-
- **Route submissions automatically.** Send new responses to Slack, Discord, Google Sheets, or a webhook the moment they arrive.
|
|
97
|
+
### Before
|
|
95
98
|
|
|
96
|
-
|
|
99
|
+
- Typeform, Google Forms, or a form built by hand for collecting responses
|
|
100
|
+
- Copying new submissions into Slack or a spreadsheet by hand
|
|
101
|
+
- A separate tool just to summarize what came back
|
|
102
|
+
- Setting up a Zapier automation to get responses into Sheets or a webhook
|
|
97
103
|
|
|
98
|
-
|
|
104
|
+
### After
|
|
99
105
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
106
|
+
- One form that the agent and the visual editor both update
|
|
107
|
+
- New responses are sent to Slack, Discord, Sheets, or a webhook the moment they arrive
|
|
108
|
+
- Ask for a summary and get a chart, a table, or both, without a separate tool
|
|
109
|
+
- Conditional fields, spam protection, and anonymous mode are all built into the same builder
|
|
104
110
|
|
|
105
|
-
|
|
111
|
+
</Comparison>
|
|
112
|
+
|
|
113
|
+
## Forms in a multi-app workspace
|
|
114
|
+
|
|
115
|
+
If you run Forms alongside other apps in [Dispatch](/docs/template-dispatch), a form is no longer just a page you open by hand. The Forms agent can pass along questions that belong to another app, and other apps can send responses into your form directly, the same way the framework's own feedback button does. See [Forms in a Multi-App Workspace](/docs/template-forms-integrations) for how this works.
|
|
116
|
+
|
|
117
|
+
## What you can do with it
|
|
106
118
|
|
|
107
|
-
- "Create a
|
|
108
|
-
-
|
|
109
|
-
-
|
|
110
|
-
- "
|
|
111
|
-
-
|
|
112
|
-
- "Summarize this week's submissions and group them by customer segment."
|
|
113
|
-
- "Make this form shorter without losing the fields we need for routing."
|
|
119
|
+
- **Build forms conversationally.** Try prompts like "Create a contact form," "add an NPS score question," or "make the email field required." See [the available field types](/docs/template-forms-features#field-types).
|
|
120
|
+
- **Fine-tune visually.** Edit labels, placeholders, required fields, options, and field order right in the form builder when you want more direct control.
|
|
121
|
+
- **Publish and protect a public form.** Share a public link, and turn on spam protection or fully anonymous responses when you need them. See [Features](/docs/template-forms-features).
|
|
122
|
+
- **Review responses and ask for insights.** Try prompts like "Summarize this week's submissions" or "Chart submissions by day." See [Features](/docs/template-forms-features#response-insights).
|
|
123
|
+
- **Route submissions automatically.** Paste in a Slack, Discord, Google Sheets, or generic webhook URL, and new responses are sent there the moment they arrive.
|
|
114
124
|
|
|
115
125
|
## What's next
|
|
116
126
|
|
|
117
|
-
- [**
|
|
118
|
-
- [**
|
|
119
|
-
- [**Forms
|
|
127
|
+
- [**Features**](/docs/template-forms-features) — field types, conditional logic, publishing, protections, responses, insights, and routing, with setup steps for each
|
|
128
|
+
- [**Talk to the Agent**](/docs/template-forms-agent) — prompts by task and how the agent sees your screen
|
|
129
|
+
- [**Forms in a Multi-App Workspace**](/docs/template-forms-integrations) — delegation and the public submit endpoint other apps use
|
|
130
|
+
- [**Developer Guide**](/docs/template-forms-developers) — the SQL schema, action reference, and routes, for developers
|
|
120
131
|
- [**Templates**](/docs/cloneable-saas) — the Cloneable SaaS model
|
|
132
|
+
- [**Getting Started**](/docs/getting-started) — the framework fundamentals: actions, application state, and live sync
|
|
121
133
|
- [**Actions**](/docs/actions-overview) — the action system powering the builder
|
|
122
134
|
- [**Messaging**](/docs/messaging) — Slack and other submission destinations
|
|
135
|
+
- [**Sharing**](/docs/sharing) — the share-grant model form shares build on
|
|
@@ -69,7 +69,7 @@ Every operation is a TypeScript file in `templates/mail/actions/`, auto-mounted
|
|
|
69
69
|
|
|
70
70
|
**Automations & Gmail filters**
|
|
71
71
|
|
|
72
|
-
- `manage-
|
|
72
|
+
- `manage-email-rules` / `trigger-automations` — agent-facing natural-language triage rules
|
|
73
73
|
- `create-automation` / `list-automations` / `update-automation` / `delete-automation` — UI-only, back the Settings automations list (same `automation_rules` table)
|
|
74
74
|
- `get-automation-settings` / `update-automation-settings` — UI-only, the engine/model used to evaluate rules
|
|
75
75
|
- `manage-gmail-filters` — native Gmail filters (list/create/replace/delete); Gmail has no update endpoint, so `replace` creates a new filter and deletes the old one
|
|
@@ -329,7 +329,7 @@ Emails flowing through the API have the shape `{ id, threadId, from, to, cc, sub
|
|
|
329
329
|
|
|
330
330
|
Mail is yours to change. Everything important lives in a handful of places — start there.
|
|
331
331
|
|
|
332
|
-
**Adding an agent capability.** Add a new file under `templates/mail/actions/` using `defineAction`. Your action becomes an agent tool, a CLI command (`pnpm action <name>`), and a typed frontend hook surface through `useActionQuery` / `useActionMutation`. Look at `templates/mail/actions/star-email.ts` for a short example or `templates/mail/actions/manage-
|
|
332
|
+
**Adding an agent capability.** Add a new file under `templates/mail/actions/` using `defineAction`. Your action becomes an agent tool, a CLI command (`pnpm action <name>`), and a typed frontend hook surface through `useActionQuery` / `useActionMutation`. Look at `templates/mail/actions/star-email.ts` for a short example or `templates/mail/actions/manage-email-rules.ts` for one with multiple sub-actions. See the [actions](/docs/actions-overview) docs for the full pattern.
|
|
333
333
|
|
|
334
334
|
**Changing the UI.** Routes are in `templates/mail/app/routes/` and components in `templates/mail/app/components/email/` and `templates/mail/app/components/layout/`. The app uses shadcn/ui primitives from `app/components/ui/` and Tabler Icons — stick to those.
|
|
335
335
|
|
|
@@ -337,7 +337,7 @@ Mail is yours to change. Everything important lives in a handful of places — s
|
|
|
337
337
|
|
|
338
338
|
**Changing data or settings.** Mail's own schema is in `templates/mail/server/db/schema.ts`. Settings reads and writes go through `readSetting`/`writeSetting` (or the per-user `getUserSetting`/`putUserSetting`) from `@agent-native/core/settings`. Application state (navigation, drafts, one-shot commands) uses `readAppState`/`writeAppState` from `@agent-native/core/application-state`.
|
|
339
339
|
|
|
340
|
-
**Adding a new automation action type.** Extend the action schema in `templates/mail/actions/manage-
|
|
340
|
+
**Adding a new automation action type.** Extend the action schema in `templates/mail/actions/manage-email-rules.ts` and the executor in `templates/mail/actions/trigger-automations.ts`.
|
|
341
341
|
|
|
342
342
|
**Adding a sidebar CRM integration.** Follow the pattern in `server/handlers/gong.ts`, `pylon.ts`, or `apollo.ts` for a read-only sidebar panel, or register a new provider in `MAIL_PROVIDER_API_IDS` (`server/lib/provider-api.ts`) to make it reachable through `provider-api-request` as well.
|
|
343
343
|
|
|
@@ -33,7 +33,7 @@ free the moment an app adopts the shared page.
|
|
|
33
33
|
| `useAgentSettingsTabs()` | Framework-provided agent, model, key, automation, and voice tabs that apps can mount. |
|
|
34
34
|
| `SettingsSearchEntry` | A deep-link target (label, keywords, tab, and hash) that makes a control findable. |
|
|
35
35
|
| `<LanguagePicker>` | Standard language selector for app settings. |
|
|
36
|
-
| `openAgentSettings()` |
|
|
36
|
+
| `openAgentSettings()` | Opens the canonical `/settings` page at the requested section. |
|
|
37
37
|
| Deep links | Stable links such as `/settings/integrations/secrets/OPENAI_API_KEY` and `/settings/integrations`. |
|
|
38
38
|
|
|
39
39
|
## Page Contract {#page-contract}
|
|
@@ -111,8 +111,8 @@ on so settings stay findable everywhere.
|
|
|
111
111
|
control so users can find settings by name instead of scanning tabs.
|
|
112
112
|
- Link to tabs by hash so setup prompts can send users to the exact missing
|
|
113
113
|
credential.
|
|
114
|
-
-
|
|
115
|
-
|
|
114
|
+
- Keep settings in the canonical `/settings` pages. Agent chat should remain
|
|
115
|
+
focused on conversation and never render settings inline.
|
|
116
116
|
|
|
117
117
|
## What's next
|
|
118
118
|
|
package/docs/content/webmcp.mdx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "WebMCP"
|
|
3
|
-
description: "
|
|
3
|
+
description: "Automatically expose Agent-Native actions to browser agents, register explicit client actions, and consume page-local WebMCP tools from Agent-Native chat."
|
|
4
4
|
search: "WebMCP browser tools modelContext registerTool getTools executeTool browser session"
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -15,24 +15,42 @@ discover them, and the browser mediates execution.
|
|
|
15
15
|
|
|
16
16
|
The framework supports both directions:
|
|
17
17
|
|
|
18
|
-
<!-- i18n-copy-ignore: oxfmt-only table alignment; no translated prose changed. -->
|
|
19
|
-
|
|
20
18
|
| You want to... | Use |
|
|
21
19
|
| ------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------- |
|
|
22
|
-
| Make
|
|
20
|
+
| Make backend actions available to a browser agent | Automatic on authenticated pages through `AppProviders` |
|
|
21
|
+
| Make page-local client actions available to a browser agent | `createAgentNativeWebMcpRegistration` |
|
|
23
22
|
| Let Agent-Native chat discover and call WebMCP tools in the current page | `createAgentNativeWebMcpClient` plus `webmcp` on `AgentNativeEmbedded` or `AgentNativeFrame` |
|
|
24
23
|
| Connect a headless or remote agent to an app | [MCP Server](/docs/mcp-protocol), [External Agents](/docs/external-agents), or [A2A](/docs/a2a-protocol) |
|
|
25
24
|
|
|
26
25
|
WebMCP is not a network MCP server and does not make a closed app globally
|
|
27
26
|
discoverable. A consuming agent needs an open, connected browser page and the
|
|
28
|
-
page must
|
|
27
|
+
page must expose tools to it.
|
|
29
28
|
|
|
30
29
|
The browser API is experimental and may change. See the [Chrome WebMCP
|
|
31
30
|
Imperative API](https://developer.chrome.com/docs/ai/webmcp/imperative-api) and
|
|
32
31
|
the [WebMCP specification](https://webmachinelearning.github.io/webmcp/) for
|
|
33
32
|
the current browser contract.
|
|
34
33
|
|
|
35
|
-
##
|
|
34
|
+
## Automatic backend actions
|
|
35
|
+
|
|
36
|
+
On an authenticated app page, `AppProviders` automatically registers eligible
|
|
37
|
+
backend actions with `document.modelContext`. The tools are derived from the
|
|
38
|
+
same action registry used by the in-app agent and execute through the same
|
|
39
|
+
validated, authenticated server dispatcher. This includes agent-only actions
|
|
40
|
+
declared with `http: false`; WebMCP does not turn those actions into public HTTP
|
|
41
|
+
APIs.
|
|
42
|
+
|
|
43
|
+
An action is eligible when `agentTool` is not `false` and `needsApproval` is
|
|
44
|
+
not declared. The latter is a fail-closed boundary: the server action approval
|
|
45
|
+
contract belongs to the agent loop and cannot be delegated to a browser hint.
|
|
46
|
+
Public paths, signed-out pages, and `sessionBypass` surfaces do not register
|
|
47
|
+
backend action tools. Browsers without `document.modelContext` simply keep the
|
|
48
|
+
normal app behavior.
|
|
49
|
+
|
|
50
|
+
No per-app WebMCP list or new `defineAction` metadata is required. Change the
|
|
51
|
+
existing action definition when its exposure should change.
|
|
52
|
+
|
|
53
|
+
## Explicit page-local actions
|
|
36
54
|
|
|
37
55
|
Register only the actions that should be available to a page agent. The
|
|
38
56
|
framework removes the action's local `run` function from the descriptor and
|
|
@@ -181,10 +199,10 @@ remote or headless tool calls, and use A2A when another app's agent should
|
|
|
181
199
|
receive work and reason over it. WebMCP is an opt-in browser bridge, not a
|
|
182
200
|
replacement for either network protocol.
|
|
183
201
|
|
|
184
|
-
The framework
|
|
185
|
-
|
|
186
|
-
retain normal MCP or A2A exposure for
|
|
187
|
-
open browser page.
|
|
202
|
+
The framework automatically projects eligible backend actions and still lets a
|
|
203
|
+
page register explicit client-only capabilities. Keep server-side approval
|
|
204
|
+
actions on the agent loop, and retain normal MCP or A2A exposure for
|
|
205
|
+
capabilities that must work without an open browser page.
|
|
188
206
|
|
|
189
207
|
## Compatibility and safety
|
|
190
208
|
|
|
@@ -195,7 +213,8 @@ open browser page.
|
|
|
195
213
|
- Treat descriptions, schemas, annotations, and results as page-provided
|
|
196
214
|
data. The framework validates and bounds them, but agents should still treat
|
|
197
215
|
`untrustedContentHint` results as untrusted content.
|
|
198
|
-
-
|
|
199
|
-
remain
|
|
216
|
+
- Automatic registrations are aborted when the private app shell unmounts. Use
|
|
217
|
+
`stop()` for explicit page-local registrations so stale tools do not remain
|
|
218
|
+
available.
|
|
200
219
|
- Keep server MCP and A2A endpoints for remote access. WebMCP only reaches the
|
|
201
220
|
tools registered in a connected browser context.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/core",
|
|
3
|
-
"version": "0.176.
|
|
3
|
+
"version": "0.176.2-nightly-20260831184159",
|
|
4
4
|
"description": "Framework for agent-native application development — where AI agents and UI share SQL state, actions, and context",
|
|
5
5
|
"homepage": "https://github.com/BuilderIO/agent-native#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -435,8 +435,8 @@
|
|
|
435
435
|
"y-protocols": "^1.0.7",
|
|
436
436
|
"yjs": "^13.6.32",
|
|
437
437
|
"zod": "^4.3.6",
|
|
438
|
-
"@agent-native/recap-cli": "0.5.
|
|
439
|
-
"@agent-native/toolkit": "^0.
|
|
438
|
+
"@agent-native/recap-cli": "0.5.21",
|
|
439
|
+
"@agent-native/toolkit": "^0.19.0-nightly-20260831184159"
|
|
440
440
|
},
|
|
441
441
|
"devDependencies": {
|
|
442
442
|
"@ai-sdk/anthropic": "^3.0.71",
|
|
@@ -68,6 +68,10 @@ is the target: a surface full of information and nearly empty of narration. So
|
|
|
68
68
|
"make it minimal" is never satisfied by removing data or by burying it behind
|
|
69
69
|
extra clicks, and never blocked by deleting a sentence.
|
|
70
70
|
|
|
71
|
+
Keep on-screen text and badging minimal: show the shortest label needed for the
|
|
72
|
+
next action, remove decorative or duplicate status chips, and put context in a
|
|
73
|
+
tooltip or progressive disclosure when it is not needed to decide.
|
|
74
|
+
|
|
71
75
|
Do not add, unless asked:
|
|
72
76
|
|
|
73
77
|
- A page title that repeats the nav item or route the user just clicked, or a
|
|
@@ -31,6 +31,53 @@ standard workspace connections and org/workspace vault scopes; never put them
|
|
|
31
31
|
in `.env` or deployment environment variables, and never add a provider-specific
|
|
32
32
|
action or startup bootstrap just to write a credential for one organization.
|
|
33
33
|
|
|
34
|
+
## Google OAuth triage
|
|
35
|
+
|
|
36
|
+
| Observation | Meaning | Next action |
|
|
37
|
+
| --- | --- | --- |
|
|
38
|
+
| `invalid_grant` from a deliberately fake code | Google accepted the client pair and rejected only the code | Do not rotate credentials; check flow state and callback registration |
|
|
39
|
+
| `invalid_client` | Google rejected the client id/secret pair | Verify the exact pair and deployment source before rotating |
|
|
40
|
+
| `redirect_uri_mismatch` | The client, host, callback path, and Google registration disagree | Compare that exact tuple in Google Cloud Console; publish a new deploy if site-scoped or build-time configuration changes |
|
|
41
|
+
|
|
42
|
+
Do not reason about this from memory. The probe checks both contracts: the
|
|
43
|
+
unqualified `/health/google` endpoint reports the sign-in contract, while
|
|
44
|
+
`/health/google?client=managed` reports deployment-level managed OAuth. It asks
|
|
45
|
+
Google directly whether each live `(client_id, redirect_uri)` pair is
|
|
46
|
+
registered:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
pnpm check:google-redirect-uris -- --env all
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The sign-in health path calls `checkGoogleSignInCredential()`, which prefers
|
|
53
|
+
the active Better Auth pair and otherwise uses `resolveGoogleSignInCredentials()`
|
|
54
|
+
from `packages/core/src/server/google-oauth-credentials.ts`. Managed health
|
|
55
|
+
calls `checkGoogleManagedCredential()`, which resolves
|
|
56
|
+
`["GOOGLE_CLIENT_ID", "GOOGLE_CLIENT_SECRET"]` through `resolveSecretPair()` in
|
|
57
|
+
`packages/core/src/server/credential-provider.ts`. App provider handlers use
|
|
58
|
+
`resolveGoogleProviderCredentialCandidatesWithReader()` with `resolveSecret`
|
|
59
|
+
under request context. These are separate flows and can intentionally land on
|
|
60
|
+
different Google clients, so a clean result for one says nothing about the
|
|
61
|
+
other. Read both contracts before changing anything:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
curl -s https://HOST/_agent-native/health/google | jq '{clientId,mismatchedPairs,credentialSource}'
|
|
65
|
+
curl -s "https://HOST/_agent-native/health/google?client=managed" | jq '{clientId,mismatchedPairs,credentialSource}'
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Different `clientId` values across those two, or `mismatchedPairs: true`, is a
|
|
69
|
+
divergence to understand, not damage to undo. Never repair it by rotating a
|
|
70
|
+
secret: writing a fresh value into whichever namespace the failing flow does
|
|
71
|
+
not read verifies clean and changes nothing. Do not collapse the namespaces
|
|
72
|
+
without first confirming which flow uses which client; separate sign-in and
|
|
73
|
+
managed clients on one host can be deliberate. For prebuilt Netlify deploys,
|
|
74
|
+
uploaded Functions read site-scoped secrets at runtime, and the health route
|
|
75
|
+
resolves them per request. The build may receive masked placeholder values.
|
|
76
|
+
After changing a site-scoped env var, publish a new deploy before verifying
|
|
77
|
+
live behavior. Call it a rebuild when the changed value is baked into build
|
|
78
|
+
output or static assets; a runtime-only secret does not need to be baked into
|
|
79
|
+
the bundle.
|
|
80
|
+
|
|
34
81
|
## Credential Modeling Preflight
|
|
35
82
|
|
|
36
83
|
Before registering a provider's fields, inspect the workspace/provider connection
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# Chat — Agent Guide
|
|
2
2
|
|
|
3
|
-
Chat is the minimal chat-first agent-native app.
|
|
4
|
-
|
|
5
|
-
needs durable UI around
|
|
3
|
+
Chat is the minimal chat-first agent-native app. The public root is a marketing
|
|
4
|
+
surface; the authenticated chat app starts at `/home`. Actions carry the real
|
|
5
|
+
capabilities, and screens exist only where a workflow needs durable UI around
|
|
6
|
+
the conversation.
|
|
6
7
|
|
|
7
8
|
## Skills
|
|
8
9
|
|
|
@@ -46,7 +47,7 @@ brand. Its `app.name` is used in transactional emails, and its optional
|
|
|
46
47
|
## Application State
|
|
47
48
|
|
|
48
49
|
- `navigation` describes the current view and selected entity ids. The default
|
|
49
|
-
chat view is `chat` at
|
|
50
|
+
chat view is `chat` at `/home`; `/` is the public SSR marketing page.
|
|
50
51
|
- `navigate` moves the UI when the app supports it.
|
|
51
52
|
- `view-screen` is the first tool to call when the user's visible context
|
|
52
53
|
matters.
|
|
@@ -10,7 +10,7 @@ import { useLocation } from "react-router";
|
|
|
10
10
|
import { APP_TITLE } from "@/lib/app-config";
|
|
11
11
|
|
|
12
12
|
const pageTitleKeys: Record<string, string> = {
|
|
13
|
-
"/": "navigation.chat",
|
|
13
|
+
"/home": "navigation.chat",
|
|
14
14
|
"/observability": "navigation.observability",
|
|
15
15
|
"/agent": "settings.agentTitle",
|
|
16
16
|
"/settings": "navigation.settings",
|
|
@@ -38,7 +38,7 @@ const SIDEBAR_COLLAPSE_KEY = "chat.sidebar.collapsed";
|
|
|
38
38
|
*/
|
|
39
39
|
function routeOwnsToolbar(pathname: string): boolean {
|
|
40
40
|
return (
|
|
41
|
-
pathname === "/" ||
|
|
41
|
+
pathname === "/home" ||
|
|
42
42
|
pathname.startsWith("/chat/") ||
|
|
43
43
|
pathname === "/database" ||
|
|
44
44
|
pathname.startsWith("/extensions")
|
|
@@ -52,7 +52,7 @@ export function Layout({ children }: LayoutProps) {
|
|
|
52
52
|
const [mobileSidebarOpen, setMobileSidebarOpen] = useState(false);
|
|
53
53
|
const [sidebarCollapsed, setSidebarCollapsed] = useState(true);
|
|
54
54
|
const isChatRoute =
|
|
55
|
-
location.pathname === "/" || location.pathname.startsWith("/chat/");
|
|
55
|
+
location.pathname === "/home" || location.pathname.startsWith("/chat/");
|
|
56
56
|
const chatHomeHandoffActive = useAgentChatHomeHandoff({
|
|
57
57
|
storageKey: "chat",
|
|
58
58
|
activePath: location.pathname,
|
|
@@ -61,7 +61,8 @@ export function Layout({ children }: LayoutProps) {
|
|
|
61
61
|
const chatHomeHandoffPending = isAgentChatHomeHandoffActive("chat");
|
|
62
62
|
useAgentChatHomeHandoffLinks({
|
|
63
63
|
storageKey: "chat",
|
|
64
|
-
isChatPath: (pathname) =>
|
|
64
|
+
isChatPath: (pathname) =>
|
|
65
|
+
pathname === "/home" || pathname.startsWith("/chat/"),
|
|
65
66
|
requireActiveHandoff: true,
|
|
66
67
|
});
|
|
67
68
|
|
|
@@ -100,7 +101,7 @@ export function Layout({ children }: LayoutProps) {
|
|
|
100
101
|
const ownsToolbar = routeOwnsToolbar(location.pathname);
|
|
101
102
|
function openAskAgentFullscreen() {
|
|
102
103
|
focusAgentChat();
|
|
103
|
-
navigateWithAgentChatViewTransition(navigate, "/");
|
|
104
|
+
navigateWithAgentChatViewTransition(navigate, "/home");
|
|
104
105
|
}
|
|
105
106
|
|
|
106
107
|
const contentFrame = (
|
|
@@ -3,11 +3,10 @@ import {
|
|
|
3
3
|
useChatThreads,
|
|
4
4
|
type ChatThreadSummary,
|
|
5
5
|
} from "@agent-native/core/client/agent-chat";
|
|
6
|
-
import { appPath } from "@agent-native/core/client/api-path";
|
|
7
6
|
import { useT } from "@agent-native/core/client/i18n";
|
|
8
7
|
import { openCommandMenu } from "@agent-native/core/client/navigation";
|
|
9
8
|
import { OrgSwitcher } from "@agent-native/core/client/org";
|
|
10
|
-
import { FeedbackButton } from "@agent-native/core/client/ui";
|
|
9
|
+
import { AgentNativeIcon, FeedbackButton } from "@agent-native/core/client/ui";
|
|
11
10
|
import { SidebarFooterActions } from "@agent-native/toolkit/app-shell";
|
|
12
11
|
import {
|
|
13
12
|
ChatHistoryRail,
|
|
@@ -36,7 +35,7 @@ const navItems = [
|
|
|
36
35
|
{
|
|
37
36
|
icon: IconMessageCircle,
|
|
38
37
|
labelKey: "navigation.chat",
|
|
39
|
-
href: "/",
|
|
38
|
+
href: "/home",
|
|
40
39
|
view: "chat",
|
|
41
40
|
},
|
|
42
41
|
];
|
|
@@ -150,7 +149,7 @@ function ChatThreadsSection({ open }: { open: boolean }) {
|
|
|
150
149
|
);
|
|
151
150
|
const displayedActiveThreadId =
|
|
152
151
|
threadIdFromPath(location.pathname) ??
|
|
153
|
-
(location.pathname === "/" ? null : activeThreadId);
|
|
152
|
+
(location.pathname === "/home" ? null : activeThreadId);
|
|
154
153
|
const chatItems = useMemo<ChatHistoryItem[]>(
|
|
155
154
|
() =>
|
|
156
155
|
visibleThreads.map((thread) => ({
|
|
@@ -190,7 +189,7 @@ function ChatThreadsSection({ open }: { open: boolean }) {
|
|
|
190
189
|
persistActiveThreadId(threadId);
|
|
191
190
|
navigateWithAgentChatViewTransition(
|
|
192
191
|
navigate,
|
|
193
|
-
options?.isNew ? "/" : chatThreadPath(threadId),
|
|
192
|
+
options?.isNew ? "/home" : chatThreadPath(threadId),
|
|
194
193
|
);
|
|
195
194
|
window.requestAnimationFrame(() => {
|
|
196
195
|
window.dispatchEvent(
|
|
@@ -275,7 +274,7 @@ export function Sidebar({
|
|
|
275
274
|
const navigate = useNavigate();
|
|
276
275
|
const t = useT();
|
|
277
276
|
const isChatRoute =
|
|
278
|
-
location.pathname === "/" || location.pathname.startsWith("/chat/");
|
|
277
|
+
location.pathname === "/home" || location.pathname.startsWith("/chat/");
|
|
279
278
|
const ToggleIcon = collapsed
|
|
280
279
|
? IconLayoutSidebarLeftExpand
|
|
281
280
|
: IconLayoutSidebarLeftCollapse;
|
|
@@ -357,7 +356,7 @@ export function Sidebar({
|
|
|
357
356
|
)}
|
|
358
357
|
>
|
|
359
358
|
<Link
|
|
360
|
-
to="/"
|
|
359
|
+
to="/home"
|
|
361
360
|
onClick={(event) => {
|
|
362
361
|
if (
|
|
363
362
|
!collapsible ||
|
|
@@ -387,21 +386,9 @@ export function Sidebar({
|
|
|
387
386
|
: undefined
|
|
388
387
|
}
|
|
389
388
|
>
|
|
390
|
-
<
|
|
391
|
-
src={appPath("/agent-native-icon-light.svg")}
|
|
392
|
-
alt=""
|
|
389
|
+
<AgentNativeIcon
|
|
393
390
|
aria-hidden="true"
|
|
394
|
-
|
|
395
|
-
height={16}
|
|
396
|
-
className="block h-4 w-7 shrink-0 object-contain object-center dark:hidden"
|
|
397
|
-
/>
|
|
398
|
-
<img
|
|
399
|
-
src={appPath("/agent-native-icon-dark.svg")}
|
|
400
|
-
alt=""
|
|
401
|
-
aria-hidden="true"
|
|
402
|
-
width={28}
|
|
403
|
-
height={16}
|
|
404
|
-
className="hidden h-4 w-7 shrink-0 object-contain object-center dark:block"
|
|
391
|
+
className="h-3.5 w-6 shrink-0 text-sidebar-accent-foreground"
|
|
405
392
|
/>
|
|
406
393
|
<div className={cn("min-w-0", collapsed && "sr-only")}>
|
|
407
394
|
<p className="truncate text-sm font-semibold text-sidebar-accent-foreground">
|
|
@@ -421,7 +408,7 @@ export function Sidebar({
|
|
|
421
408
|
{navItems.map((item) => {
|
|
422
409
|
const Icon = item.icon;
|
|
423
410
|
const isActive =
|
|
424
|
-
item.href === "/"
|
|
411
|
+
item.href === "/home"
|
|
425
412
|
? isChatRoute
|
|
426
413
|
: location.pathname.startsWith(item.href);
|
|
427
414
|
const link = (
|
|
@@ -429,7 +416,7 @@ export function Sidebar({
|
|
|
429
416
|
to={item.href}
|
|
430
417
|
onClick={(event) => {
|
|
431
418
|
if (
|
|
432
|
-
item.href === "/" &&
|
|
419
|
+
item.href === "/home" &&
|
|
433
420
|
!isChatRoute &&
|
|
434
421
|
!event.metaKey &&
|
|
435
422
|
!event.ctrlKey &&
|
|
@@ -437,7 +424,7 @@ export function Sidebar({
|
|
|
437
424
|
!event.altKey
|
|
438
425
|
) {
|
|
439
426
|
event.preventDefault();
|
|
440
|
-
navigateWithAgentChatViewTransition(navigate, "/");
|
|
427
|
+
navigateWithAgentChatViewTransition(navigate, "/home");
|
|
441
428
|
}
|
|
442
429
|
}}
|
|
443
430
|
className={navClass({ isActive })}
|
|
@@ -505,7 +492,11 @@ export function Sidebar({
|
|
|
505
492
|
})}
|
|
506
493
|
</nav>
|
|
507
494
|
|
|
508
|
-
<div
|
|
495
|
+
<div
|
|
496
|
+
className={cn(
|
|
497
|
+
collapsed ? "px-1 py-1 empty:hidden" : "px-3 py-2 empty:hidden",
|
|
498
|
+
)}
|
|
499
|
+
>
|
|
509
500
|
<OrgSwitcher
|
|
510
501
|
reserveSpace
|
|
511
502
|
className={
|
|
@@ -55,7 +55,7 @@ function pathForView(view?: string): string {
|
|
|
55
55
|
case "chat":
|
|
56
56
|
case "home":
|
|
57
57
|
case "ask":
|
|
58
|
-
return "/";
|
|
58
|
+
return "/home";
|
|
59
59
|
case "database":
|
|
60
60
|
return "/database";
|
|
61
61
|
case "extensions":
|
|
@@ -69,16 +69,16 @@ function pathForView(view?: string): string {
|
|
|
69
69
|
case "team":
|
|
70
70
|
return "/settings/organization";
|
|
71
71
|
default:
|
|
72
|
-
return "/";
|
|
72
|
+
return "/home";
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
function pathForCommand(command: any): string {
|
|
77
77
|
const path = pathForView(command?.view);
|
|
78
|
-
if (path !== "/") return path;
|
|
78
|
+
if (path !== "/home") return path;
|
|
79
79
|
const threadId =
|
|
80
80
|
typeof command?.threadId === "string" ? command.threadId.trim() : "";
|
|
81
|
-
return threadId ? `/chat/${encodeURIComponent(threadId)}` :
|
|
81
|
+
return threadId ? `/chat/${encodeURIComponent(threadId)}` : path;
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
function routerPath(path: string): string {
|
|
@@ -92,5 +92,5 @@ function routerPath(path: string): string {
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
function isChatPath(pathname: string): boolean {
|
|
95
|
-
return pathname === "/" || pathname.startsWith("/chat/");
|
|
95
|
+
return pathname === "/home" || pathname.startsWith("/chat/");
|
|
96
96
|
}
|