@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
|
@@ -23,6 +23,7 @@ import { assertRequestActionSurfaceIsolation, getRequestRunContext, ensureReques
|
|
|
23
23
|
import { fireInternalDispatch } from "../server/self-dispatch.js";
|
|
24
24
|
import { ANALYTICS_CLIENT_PLATFORM_BODY_FIELD } from "../shared/analytics-platform.js";
|
|
25
25
|
import { isReasoningEffort, normalizeReasoningEffortForRequest, stepDownReasoningEffort, } from "../shared/reasoning-effort.js";
|
|
26
|
+
import { SYNTHETIC_TRAFFIC_BETA_E2E, SYNTHETIC_TRAFFIC_HEADER, } from "../shared/test-traffic.js";
|
|
26
27
|
import { actionPreparationContinuationNote } from "./action-continuation-guidance.js";
|
|
27
28
|
import { drainAgentWarnings, formatAgentWarningsForToolResult, } from "./action-warnings.js";
|
|
28
29
|
import { buildSystemManifestSections, readContextXraySystemSections, } from "./context-xray/manifest.js";
|
|
@@ -41,7 +42,7 @@ import { filterHostedHarnessToolNames, normalizeHostedHarnessRuntime, } from "./
|
|
|
41
42
|
import { getDefaultMaxIterations, getDefaultMaxRunInputTokens, MAX_AGENT_MAX_ITERATIONS, MIN_AGENT_MAX_ITERATIONS, normalizeMaxIterations, normalizeMaxRunInputTokens, readAgentLoopSettings, } from "./loop-settings.js";
|
|
42
43
|
import { maybeCompactThread, buildObservationalContext, hasObservationalMemory, serializeObservationalMemoryBlock, } from "./observational-memory/index.js";
|
|
43
44
|
import { ProcessorChain, TripWire, toolCallsFromContent, } from "./processors.js";
|
|
44
|
-
import { startRun, subscribeToRun, getActiveRunForThread, getActiveRunForThreadAsync, getRun, abortRun, abortRunDurably, abortTurnDurably, tryClaimRunSlot, isHostedRuntime, resolveRunSoftTimeoutMs, resolveRunToolTimeoutCeilingMs, endsAfterCompletedToolWithoutAssistantFinal, } from "./run-manager.js";
|
|
45
|
+
import { startRun, subscribeToRun, getActiveRunForThread, getActiveRunForThreadAsync, getRun, abortRun, abortRunDurably, abortTurnDurably, tryClaimRunSlot, isHostedRuntime, resolveRunSoftTimeoutMs, resolveRunToolTimeoutCeilingMs, endsAfterCompletedToolWithoutAssistantFinal, endsDuringActionPreparation, } from "./run-manager.js";
|
|
45
46
|
import { writeLedgerEntry, readLedgerEntry, clearLedgerForThread, insertRun, insertRunEvent, isTurnAborted, markRunAborted, updateRunHeartbeat, updateRunStatusIfRunning, setRunError, setRunTerminalReason, claimBackgroundRun, readBackgroundRunClaim, recordRunDiagnostic, countRunsForTurn, RUN_DIAG_STAGE, UNCLAIMED_BACKGROUND_RUN_GRACE_MS, turnRunLedgerExhausted, } from "./run-store.js";
|
|
46
47
|
import { buildCurrentTimeUserContext } from "./runtime-context.js";
|
|
47
48
|
import { consumeAgentToolApproval, createAgentToolApproval, isAgentToolAlwaysAllowed, resolveAgentToolApprovalTurnId, } from "./tool-approval-store.js";
|
|
@@ -230,6 +231,18 @@ function normalizeBrowserTabId(value) {
|
|
|
230
231
|
const trimmed = value.trim();
|
|
231
232
|
return SAFE_BROWSER_TAB_ID_RE.test(trimmed) ? trimmed : undefined;
|
|
232
233
|
}
|
|
234
|
+
/**
|
|
235
|
+
* The usage label is caller-supplied (a template surface, an MCP host, an
|
|
236
|
+
* extension), and it lands in a usage row AND in a trace span name. Bound it
|
|
237
|
+
* and strip control characters here so a client cannot turn either into a
|
|
238
|
+
* payload channel.
|
|
239
|
+
*/
|
|
240
|
+
function normalizeUsageLabel(value) {
|
|
241
|
+
if (typeof value !== "string")
|
|
242
|
+
return undefined;
|
|
243
|
+
const trimmed = value.replace(/[\u0000-\u001f\u007f]/g, " ").trim();
|
|
244
|
+
return trimmed ? trimmed.slice(0, 120) : undefined;
|
|
245
|
+
}
|
|
233
246
|
function normalizeChatScope(value) {
|
|
234
247
|
if (value == null)
|
|
235
248
|
return null;
|
|
@@ -272,14 +285,15 @@ export async function getOwnerApiKey(provider, ownerEmail) {
|
|
|
272
285
|
if (!ownerEmail)
|
|
273
286
|
return undefined;
|
|
274
287
|
const secretKey = PROVIDER_TO_ENV[provider] ?? `${provider.toUpperCase()}_API_KEY`;
|
|
288
|
+
const syntheticTraffic = getRequestContext()?.isSyntheticTraffic === true;
|
|
275
289
|
try {
|
|
276
290
|
const { readAppSecret } = await import("../secrets/storage.js");
|
|
277
291
|
const refs = [{ scope: "user", scopeId: ownerEmail }];
|
|
278
292
|
const orgId = getRequestOrgId();
|
|
279
|
-
if (orgId) {
|
|
293
|
+
if (orgId && !syntheticTraffic) {
|
|
280
294
|
refs.push({ scope: "org", scopeId: orgId }, { scope: "workspace", scopeId: orgId });
|
|
281
295
|
}
|
|
282
|
-
else {
|
|
296
|
+
else if (!syntheticTraffic) {
|
|
283
297
|
refs.push({ scope: "workspace", scopeId: `solo:${ownerEmail}` });
|
|
284
298
|
}
|
|
285
299
|
for (const ref of refs) {
|
|
@@ -298,8 +312,13 @@ export async function getOwnerApiKey(provider, ownerEmail) {
|
|
|
298
312
|
}
|
|
299
313
|
}
|
|
300
314
|
catch {
|
|
301
|
-
// app_secrets table not ready —
|
|
315
|
+
// app_secrets table not ready — only non-synthetic traffic may fall through
|
|
316
|
+
// to legacy lookup. A synthetic run must never bill an alternate key.
|
|
317
|
+
if (syntheticTraffic)
|
|
318
|
+
return undefined;
|
|
302
319
|
}
|
|
320
|
+
if (syntheticTraffic)
|
|
321
|
+
return undefined;
|
|
303
322
|
try {
|
|
304
323
|
const { getSetting } = await import("../settings/store.js");
|
|
305
324
|
const stored = await getSetting(`user-api-key:${provider}:${ownerEmail}`);
|
|
@@ -827,6 +846,10 @@ const FOREGROUND_FIRST_MODEL_EVENT_TIMEOUT_MS = 25_000;
|
|
|
827
846
|
// ceiling and steps effort down a tier) instead of re-issuing the
|
|
828
847
|
// exact same doomed request twice.
|
|
829
848
|
const EMPTY_FINAL_RESPONSE_RETRY_LIMIT = 2;
|
|
849
|
+
// A `max_tokens` stop with tool-call parts present is a tool call cut off
|
|
850
|
+
// mid-arguments. Same escalation shape as the empty-final retry: each attempt
|
|
851
|
+
// raises the ceiling, so re-issuing is not re-issuing the same doomed request.
|
|
852
|
+
const TRUNCATED_TOOL_CALL_RETRY_LIMIT = 2;
|
|
830
853
|
const MAIN_CHAT_INTERNAL_CONTINUATION_LIMIT = 6;
|
|
831
854
|
const RUN_BUDGET_EXHAUSTED_ERROR_CODE = "run_budget_exhausted";
|
|
832
855
|
const RUN_BUDGET_EXHAUSTED_MESSAGE = "I ran out of time before finishing this step. " +
|
|
@@ -1523,6 +1546,13 @@ export async function callConnectedAgentReference(input) {
|
|
|
1523
1546
|
userEmail: callerAuth.userEmail,
|
|
1524
1547
|
orgDomain: callerAuth.orgDomain,
|
|
1525
1548
|
orgSecret: callerAuth.orgSecret,
|
|
1549
|
+
...(getRequestContext()?.isSyntheticTraffic === true
|
|
1550
|
+
? {
|
|
1551
|
+
transportHeaders: {
|
|
1552
|
+
[SYNTHETIC_TRAFFIC_HEADER]: SYNTHETIC_TRAFFIC_BETA_E2E,
|
|
1553
|
+
},
|
|
1554
|
+
}
|
|
1555
|
+
: {}),
|
|
1526
1556
|
onUpdate: relay.observePollUpdate,
|
|
1527
1557
|
});
|
|
1528
1558
|
const responseText = userFacingLlmCredentialError(response, {
|
|
@@ -2954,14 +2984,22 @@ function schemaErrorPropertyNames(error) {
|
|
|
2954
2984
|
* actions have echoed the expected signature since `wrapWithValidation`; this
|
|
2955
2985
|
* gives the raw path the same answer from the same helper.
|
|
2956
2986
|
*/
|
|
2957
|
-
function toolInputSchemaErrorResult(toolName, input, error, parameters
|
|
2987
|
+
function toolInputSchemaErrorResult(toolName, input, error, parameters,
|
|
2988
|
+
/**
|
|
2989
|
+
* The model response carrying this call stopped at the output-token cap, so
|
|
2990
|
+
* the arguments are truncated rather than wrong. Telling the model to match
|
|
2991
|
+
* the schema here is what makes it re-send the same oversized payload.
|
|
2992
|
+
*/
|
|
2993
|
+
outputCapTruncated = false) {
|
|
2958
2994
|
const signature = describeToolParameterSignature(parameters, schemaErrorPropertyNames(error));
|
|
2959
2995
|
return (`Invalid action parameters for ${toolName}: ${sanitizeToolErrorText(error)}. ` +
|
|
2960
2996
|
`Received: ${stringifyToolInput(input)}. ` +
|
|
2961
2997
|
(signature
|
|
2962
2998
|
? `Expected: ${signature} (where * = required, ? = optional). `
|
|
2963
2999
|
: "") +
|
|
2964
|
-
|
|
3000
|
+
(outputCapTruncated
|
|
3001
|
+
? "The tool was not executed: the response hit the model output-token cap before these arguments finished, so they are truncated, not wrong. Retry with a smaller payload — split the work across several calls, or shorten the longest field."
|
|
3002
|
+
: "The tool was not executed; retry with arguments that match the tool schema."));
|
|
2965
3003
|
}
|
|
2966
3004
|
const rawToolInputAjv = new Ajv({
|
|
2967
3005
|
strict: false,
|
|
@@ -3318,7 +3356,14 @@ export async function runAgentLoop(opts) {
|
|
|
3318
3356
|
added.push(name);
|
|
3319
3357
|
}
|
|
3320
3358
|
if (added.length > 0) {
|
|
3321
|
-
|
|
3359
|
+
const expandedTools = (availableTools ?? tools).filter((tool) => activeToolNames.has(tool.name));
|
|
3360
|
+
const prioritizedNames = new Set(names);
|
|
3361
|
+
// Provider adapters cap the schema list; keep search results in the
|
|
3362
|
+
// prefix so the next request can actually call what it discovered.
|
|
3363
|
+
activeTools = [
|
|
3364
|
+
...expandedTools.filter((tool) => prioritizedNames.has(tool.name)),
|
|
3365
|
+
...expandedTools.filter((tool) => !prioritizedNames.has(tool.name)),
|
|
3366
|
+
];
|
|
3322
3367
|
}
|
|
3323
3368
|
if (!reportedExpandedToolSchemaBytes &&
|
|
3324
3369
|
expandedToolSchemaBytes > EXPANDED_TOOL_SCHEMA_WARN_BYTES) {
|
|
@@ -3428,6 +3473,7 @@ export async function runAgentLoop(opts) {
|
|
|
3428
3473
|
}
|
|
3429
3474
|
let finalGuardRetries = 0;
|
|
3430
3475
|
let emptyFinalResponseRetries = 0;
|
|
3476
|
+
let truncatedToolCallRetries = 0;
|
|
3431
3477
|
let iterations = 0;
|
|
3432
3478
|
// `loop_limit` and `done` share one terminal-event slot in run-manager, so a
|
|
3433
3479
|
// trailing `done` would overwrite the boundary the continuation logic reads.
|
|
@@ -4174,6 +4220,37 @@ export async function runAgentLoop(opts) {
|
|
|
4174
4220
|
// permanently disabled for the rest of a long multi-step run.
|
|
4175
4221
|
finalGuardRetries = 0;
|
|
4176
4222
|
emptyFinalResponseRetries = 0;
|
|
4223
|
+
// A `max_tokens` stop is only recognised as truncation in the
|
|
4224
|
+
// `toolCallParts.length === 0` branch above. A tool call cut off
|
|
4225
|
+
// mid-arguments still arrives AS a tool-call part, so without this the
|
|
4226
|
+
// turn reads as a normal one: the partial arguments fail schema
|
|
4227
|
+
// validation, the model is told to "retry with arguments that match the
|
|
4228
|
+
// tool schema", and it re-issues the same oversized payload against the
|
|
4229
|
+
// same ceiling until the identical-error stop fires. The tool never runs
|
|
4230
|
+
// and nothing in the transcript says the response was truncated.
|
|
4231
|
+
//
|
|
4232
|
+
// The tool calls still execute — the assistant turn carrying them is
|
|
4233
|
+
// already in `messages`, and every tool_use needs its tool_result — but
|
|
4234
|
+
// the retry gets a raised ceiling and the error text below names the real
|
|
4235
|
+
// cause.
|
|
4236
|
+
const toolCallTruncatedByOutputCap = terminalStopReason === "max_tokens";
|
|
4237
|
+
if (toolCallTruncatedByOutputCap) {
|
|
4238
|
+
if (truncatedToolCallRetries < TRUNCATED_TOOL_CALL_RETRY_LIMIT) {
|
|
4239
|
+
truncatedToolCallRetries += 1;
|
|
4240
|
+
effectiveMaxOutputTokens =
|
|
4241
|
+
resolveEmptyResponseRetryMaxOutputTokens(model);
|
|
4242
|
+
}
|
|
4243
|
+
else {
|
|
4244
|
+
// Retries spent. The raised ceiling was lent to those attempts, not to
|
|
4245
|
+
// the rest of the run — leaving it in place kept every later request
|
|
4246
|
+
// above the configured cap.
|
|
4247
|
+
effectiveMaxOutputTokens = opts.maxOutputTokens;
|
|
4248
|
+
}
|
|
4249
|
+
}
|
|
4250
|
+
else {
|
|
4251
|
+
truncatedToolCallRetries = 0;
|
|
4252
|
+
effectiveMaxOutputTokens = opts.maxOutputTokens;
|
|
4253
|
+
}
|
|
4177
4254
|
flushUnstreamedAssistantText();
|
|
4178
4255
|
let requestedActionStop = null;
|
|
4179
4256
|
// An `endsTurn` action ran and handed control to the user. Distinct from
|
|
@@ -4711,7 +4788,7 @@ export async function runAgentLoop(opts) {
|
|
|
4711
4788
|
try {
|
|
4712
4789
|
const toolCallSchemaError = toolCallErrors.get(toolCall.id);
|
|
4713
4790
|
if (toolCallSchemaError && !toolInputNormalized) {
|
|
4714
|
-
const result = finalizeToolErrorResult(toolInputSchemaErrorResult(toolCall.name, toolCallSchemaError.input, toolCallSchemaError.error, actionEntry?.tool.parameters));
|
|
4791
|
+
const result = finalizeToolErrorResult(toolInputSchemaErrorResult(toolCall.name, toolCallSchemaError.input, toolCallSchemaError.error, actionEntry?.tool.parameters, toolCallTruncatedByOutputCap));
|
|
4715
4792
|
emitToolDone({
|
|
4716
4793
|
type: "tool_done",
|
|
4717
4794
|
id: toolCall.id,
|
|
@@ -4733,7 +4810,7 @@ export async function runAgentLoop(opts) {
|
|
|
4733
4810
|
}
|
|
4734
4811
|
const rawToolInputError = validateRawToolInput(actionEntry, toolCall.input);
|
|
4735
4812
|
if (rawToolInputError) {
|
|
4736
|
-
const result = finalizeToolErrorResult(toolInputSchemaErrorResult(toolCall.name, toolCall.input, rawToolInputError, actionEntry.tool.parameters));
|
|
4813
|
+
const result = finalizeToolErrorResult(toolInputSchemaErrorResult(toolCall.name, toolCall.input, rawToolInputError, actionEntry.tool.parameters, toolCallTruncatedByOutputCap));
|
|
4737
4814
|
emitToolDone({
|
|
4738
4815
|
type: "tool_done",
|
|
4739
4816
|
id: toolCall.id,
|
|
@@ -5508,7 +5585,8 @@ export function backgroundContinuationReasonForRun(run) {
|
|
|
5508
5585
|
if (last?.type === "error" && isRecoverableContinuationError(last)) {
|
|
5509
5586
|
return continuationReasonForResumableError(new EngineError(last.error, { errorCode: last.errorCode }));
|
|
5510
5587
|
}
|
|
5511
|
-
if (endsAfterCompletedToolWithoutAssistantFinal(run)
|
|
5588
|
+
if (endsAfterCompletedToolWithoutAssistantFinal(run) ||
|
|
5589
|
+
endsDuringActionPreparation(run)) {
|
|
5512
5590
|
return "stream_ended";
|
|
5513
5591
|
}
|
|
5514
5592
|
return "run_timeout";
|
|
@@ -5613,7 +5691,8 @@ export async function runAgentLoopWithMainChatInternalContinuations(opts) {
|
|
|
5613
5691
|
}
|
|
5614
5692
|
function endsAtContinuationBoundary(run) {
|
|
5615
5693
|
return (endsAtInternalContinuationBoundary(run) ||
|
|
5616
|
-
endsAfterCompletedToolWithoutAssistantFinal(run)
|
|
5694
|
+
endsAfterCompletedToolWithoutAssistantFinal(run) ||
|
|
5695
|
+
endsDuringActionPreparation(run));
|
|
5617
5696
|
}
|
|
5618
5697
|
// Defined in `app-config/run-lifecycle-invariants.ts`, the neutral home for
|
|
5619
5698
|
// lifecycle bounds that participate in a cross-module relationship: the durable
|
|
@@ -6513,7 +6592,12 @@ export function createProductionAgentHandler(options) {
|
|
|
6513
6592
|
return { error: "Invalid request body" };
|
|
6514
6593
|
}
|
|
6515
6594
|
}
|
|
6516
|
-
const { message, history = [], structuredHistory, references = [], threadId, attachments, displayMessage, queuedMessageId, internalContinuation, turnId: requestTurnId, model: requestModel, engine: requestEngine, effort: requestEffort, browserTabId, scope, harness: requestHarness, trackInRunsTray, } = body;
|
|
6595
|
+
const { message, history = [], structuredHistory, references = [], threadId, attachments, displayMessage, parentId, queuedMessageId, internalContinuation, turnId: requestTurnId, model: requestModel, engine: requestEngine, effort: requestEffort, browserTabId, scope, harness: requestHarness, trackInRunsTray, } = body;
|
|
6596
|
+
const requestParentId = parentId === null
|
|
6597
|
+
? null
|
|
6598
|
+
: typeof parentId === "string" && parentId.trim()
|
|
6599
|
+
? parentId.trim()
|
|
6600
|
+
: undefined;
|
|
6517
6601
|
setupMark("bodyParsed");
|
|
6518
6602
|
// Durable-background marker. Present ONLY when this handler was re-entered
|
|
6519
6603
|
// as the Netlify background worker via the `_process-run` self-dispatch
|
|
@@ -6859,6 +6943,7 @@ export function createProductionAgentHandler(options) {
|
|
|
6859
6943
|
const model = normalizeModelForEngine(engine, modelCandidate);
|
|
6860
6944
|
let effectiveModel = model;
|
|
6861
6945
|
let modelSelectionSource = modelSelection.source;
|
|
6946
|
+
const turnUsageLabel = normalizeUsageLabel(body.usageLabel);
|
|
6862
6947
|
let experimentAssignments = [];
|
|
6863
6948
|
// Database-backed experiments remain available to app operators.
|
|
6864
6949
|
try {
|
|
@@ -8303,8 +8388,16 @@ export function createProductionAgentHandler(options) {
|
|
|
8303
8388
|
threadId: threadId ?? null,
|
|
8304
8389
|
userId: ownerEmail,
|
|
8305
8390
|
config: obsConfig,
|
|
8391
|
+
// A caller that named its turn (a template surface, an MCP
|
|
8392
|
+
// host, a background send) gets that name in the trace list;
|
|
8393
|
+
// a plain chat turn stays `agent_run` so the common case
|
|
8394
|
+
// still aggregates.
|
|
8395
|
+
spanName: turnUsageLabel && turnUsageLabel !== "chat"
|
|
8396
|
+
? `agent_run:${turnUsageLabel}`
|
|
8397
|
+
: undefined,
|
|
8306
8398
|
metadata: {
|
|
8307
8399
|
modelSelectionSource,
|
|
8400
|
+
...(turnUsageLabel ? { label: turnUsageLabel } : {}),
|
|
8308
8401
|
...(experimentAssignments.length > 0
|
|
8309
8402
|
? { experimentAssignments }
|
|
8310
8403
|
: {}),
|
|
@@ -8369,7 +8462,7 @@ export function createProductionAgentHandler(options) {
|
|
|
8369
8462
|
cacheReadTokens: turnUsage.cacheReadTokens,
|
|
8370
8463
|
cacheWriteTokens: turnUsage.cacheWriteTokens,
|
|
8371
8464
|
model: turnUsage.model,
|
|
8372
|
-
label:
|
|
8465
|
+
label: turnUsageLabel || "chat",
|
|
8373
8466
|
// token_usage has had run_id/thread_id/task_id since it was
|
|
8374
8467
|
// created and every row was NULL on all three, so no spend could
|
|
8375
8468
|
// be tied back to a run, thread, or outcome.
|
|
@@ -8410,6 +8503,7 @@ export function createProductionAgentHandler(options) {
|
|
|
8410
8503
|
// assistant message. Falls back to the runId (turn == run) when the
|
|
8411
8504
|
// client doesn't supply a turnId.
|
|
8412
8505
|
turnId: effectiveTurnId,
|
|
8506
|
+
parentId: requestParentId,
|
|
8413
8507
|
waitUntil: getRequestRunContext()?.waitUntil,
|
|
8414
8508
|
// A durable background worker reaches this same call site, so keying
|
|
8415
8509
|
// only on the foreground self-chain flag stamped every worker run
|
|
@@ -3,6 +3,8 @@ import type { AgentChatEvent, RunEvent, RunStatus } from "./types.js";
|
|
|
3
3
|
export interface ActiveRun {
|
|
4
4
|
runId: string;
|
|
5
5
|
threadId: string;
|
|
6
|
+
/** Parent message for the assistant-ui branch this run is answering. */
|
|
7
|
+
parentId?: string | null;
|
|
6
8
|
/** Logical-turn identity (see StartRunOptions.turnId). Defaults to runId. */
|
|
7
9
|
turnId: string;
|
|
8
10
|
events: RunEvent[];
|
|
@@ -208,6 +210,8 @@ export interface StartRunOptions {
|
|
|
208
210
|
* share one `turnId` so the durable assistant message can be folded across
|
|
209
211
|
* them instead of dropped per-run. Defaults to the runId (turn == run). */
|
|
210
212
|
turnId?: string;
|
|
213
|
+
/** Parent message for the assistant-ui branch this run is answering. */
|
|
214
|
+
parentId?: string | null;
|
|
211
215
|
/**
|
|
212
216
|
* Opt into the durable-background-function soft-timeout regime for THIS run
|
|
213
217
|
* only. When true, `resolveRunSoftTimeoutMs` lifts the hosted ceiling from
|
|
@@ -361,6 +365,11 @@ export declare function resolveBackgroundAutomationSoftTimeoutMs(overrideMs?: nu
|
|
|
361
365
|
* the same boundary evidence.
|
|
362
366
|
*/
|
|
363
367
|
export declare function endsAfterCompletedToolWithoutAssistantFinal(run: ActiveRun): boolean;
|
|
368
|
+
/**
|
|
369
|
+
* A model can emit a lead-in before it starts assembling an action input. If
|
|
370
|
+
* the run ends in that preparation phase, `done` is not a successful turn.
|
|
371
|
+
*/
|
|
372
|
+
export declare function endsDuringActionPreparation(run: ActiveRun): boolean;
|
|
364
373
|
/**
|
|
365
374
|
* Start a new agent run in the background.
|
|
366
375
|
* `runFn` receives a `send` callback and an `AbortSignal`.
|
|
@@ -484,6 +484,33 @@ export function endsAfterCompletedToolWithoutAssistantFinal(run) {
|
|
|
484
484
|
}
|
|
485
485
|
return completedToolAfterLastAssistantText;
|
|
486
486
|
}
|
|
487
|
+
/**
|
|
488
|
+
* A model can emit a lead-in before it starts assembling an action input. If
|
|
489
|
+
* the run ends in that preparation phase, `done` is not a successful turn.
|
|
490
|
+
*/
|
|
491
|
+
export function endsDuringActionPreparation(run) {
|
|
492
|
+
let preparingAction = false;
|
|
493
|
+
for (const { event } of run.events) {
|
|
494
|
+
if (isPreparingActionActivityEvent(event) ||
|
|
495
|
+
event.type === "tool_input_start" ||
|
|
496
|
+
event.type === "tool_input_delta") {
|
|
497
|
+
preparingAction = true;
|
|
498
|
+
continue;
|
|
499
|
+
}
|
|
500
|
+
if ((event.type === "text" && event.text.trim().length > 0) ||
|
|
501
|
+
event.type === "tool_start" ||
|
|
502
|
+
event.type === "tool_done" ||
|
|
503
|
+
event.type === "approval_required" ||
|
|
504
|
+
event.type === "clear" ||
|
|
505
|
+
event.type === "error" ||
|
|
506
|
+
event.type === "missing_api_key" ||
|
|
507
|
+
event.type === "auto_continue" ||
|
|
508
|
+
event.type === "loop_limit") {
|
|
509
|
+
preparingAction = false;
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
return preparingAction;
|
|
513
|
+
}
|
|
487
514
|
function terminalEventForcesErroredStatus(event) {
|
|
488
515
|
return event?.type === "error" || event?.type === "missing_api_key";
|
|
489
516
|
}
|
|
@@ -734,6 +761,7 @@ export function startRun(runId, threadId, runFn, onComplete, options) {
|
|
|
734
761
|
const run = {
|
|
735
762
|
runId,
|
|
736
763
|
threadId,
|
|
764
|
+
...(options?.parentId !== undefined ? { parentId: options.parentId } : {}),
|
|
737
765
|
turnId: options?.turnId ?? runId,
|
|
738
766
|
events: [],
|
|
739
767
|
status: "running",
|
|
@@ -1565,19 +1593,20 @@ export function startRun(runId, threadId, runFn, onComplete, options) {
|
|
|
1565
1593
|
terminalEventForcesErroredStatus(terminalEvent)
|
|
1566
1594
|
? "errored"
|
|
1567
1595
|
: "completed";
|
|
1568
|
-
const
|
|
1569
|
-
endsAfterCompletedToolWithoutAssistantFinal(run)
|
|
1596
|
+
const shouldAutoContinueAfterUnfinishedTurn = finalStatus === "completed" &&
|
|
1597
|
+
(endsAfterCompletedToolWithoutAssistantFinal(run) ||
|
|
1598
|
+
endsDuringActionPreparation(run)) &&
|
|
1570
1599
|
(!terminalEventForCompletion ||
|
|
1571
1600
|
(terminalEventForCompletion.event.type === "done" &&
|
|
1572
1601
|
terminalEventForCompletion.event.reason !== "user"));
|
|
1573
|
-
const
|
|
1602
|
+
const unfinishedTurnContinuationEvent = shouldAutoContinueAfterUnfinishedTurn
|
|
1574
1603
|
? {
|
|
1575
1604
|
type: "auto_continue",
|
|
1576
1605
|
reason: "stream_ended",
|
|
1577
1606
|
}
|
|
1578
1607
|
: null;
|
|
1579
|
-
if (
|
|
1580
|
-
terminalEvent =
|
|
1608
|
+
if (unfinishedTurnContinuationEvent) {
|
|
1609
|
+
terminalEvent = unfinishedTurnContinuationEvent;
|
|
1581
1610
|
}
|
|
1582
1611
|
const terminalReason = terminalReasonForRun(finalStatus, terminalEvent, run.abortReason, completionError);
|
|
1583
1612
|
// A run that stopped at a continuation boundary did not finish, so it is
|
|
@@ -1607,7 +1636,7 @@ export function startRun(runId, threadId, runFn, onComplete, options) {
|
|
|
1607
1636
|
// client would never see the terminal/continuation signal. We always
|
|
1608
1637
|
// re-stamp the seq at emit time (max-seq+1) just below.
|
|
1609
1638
|
const terminalEventToEmit = finalStatus === "completed"
|
|
1610
|
-
? (
|
|
1639
|
+
? (unfinishedTurnContinuationEvent ??
|
|
1611
1640
|
terminalEventForCompletion?.event ?? { type: "done" })
|
|
1612
1641
|
: terminalEventForCompletion?.event.type === "error" ||
|
|
1613
1642
|
terminalEventForCompletion?.event.type === "missing_api_key"
|
|
@@ -35,6 +35,10 @@ interface BuildAssistantMessageOptions {
|
|
|
35
35
|
*/
|
|
36
36
|
turnId?: string;
|
|
37
37
|
runDurationMs?: number;
|
|
38
|
+
scope?: {
|
|
39
|
+
type: string;
|
|
40
|
+
id: string;
|
|
41
|
+
} | null;
|
|
38
42
|
}
|
|
39
43
|
type AssistantMessage = NonNullable<ReturnType<typeof buildAssistantMessage>>;
|
|
40
44
|
type UserMessage = ReturnType<typeof buildUserMessage>;
|
|
@@ -163,7 +167,7 @@ export declare function upsertUserMessage(repo: any, userMsg: UserMessage): any;
|
|
|
163
167
|
* any assistant content as proof that the frontend already saved the final
|
|
164
168
|
* turn.
|
|
165
169
|
*/
|
|
166
|
-
export declare function upsertAssistantMessage(repo: any, assistantMsg: AssistantMessage): any;
|
|
170
|
+
export declare function upsertAssistantMessage(repo: any, assistantMsg: AssistantMessage, parentId?: string | null): any;
|
|
167
171
|
/**
|
|
168
172
|
* Fold a continuation run's assistant message onto the single durable message
|
|
169
173
|
* for its logical turn (identified by `turnId`), so a turn that spans several
|
|
@@ -183,6 +187,7 @@ export declare function upsertAssistantMessage(repo: any, assistantMsg: Assistan
|
|
|
183
187
|
export declare function foldAssistantTurn(repo: any, assistantMsg: AssistantMessage, options: {
|
|
184
188
|
turnId?: string;
|
|
185
189
|
runId?: string;
|
|
190
|
+
parentId?: string | null;
|
|
186
191
|
}): any;
|
|
187
192
|
export declare function normalizeThreadTitle(value: unknown): string;
|
|
188
193
|
/**
|
|
@@ -251,6 +251,12 @@ export function buildAssistantMessage(events, runId, options = {}) {
|
|
|
251
251
|
const custom = {};
|
|
252
252
|
if (options.turnId)
|
|
253
253
|
custom.turnId = options.turnId;
|
|
254
|
+
if (options.scope?.type && options.scope.id) {
|
|
255
|
+
custom.chatScope = {
|
|
256
|
+
type: options.scope.type,
|
|
257
|
+
id: options.scope.id,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
254
260
|
if (runId)
|
|
255
261
|
custom.foldedRunIds = [runId];
|
|
256
262
|
if (typeof options.runDurationMs === "number" &&
|
|
@@ -1460,22 +1466,29 @@ function shouldReplaceLastAssistant(lastMessage, assistantMsg) {
|
|
|
1460
1466
|
* any assistant content as proof that the frontend already saved the final
|
|
1461
1467
|
* turn.
|
|
1462
1468
|
*/
|
|
1463
|
-
export function upsertAssistantMessage(repo, assistantMsg) {
|
|
1469
|
+
export function upsertAssistantMessage(repo, assistantMsg, parentId) {
|
|
1464
1470
|
const nextRepo = normalizeThreadRepository(repo);
|
|
1465
1471
|
const lastIndex = nextRepo.messages.length - 1;
|
|
1466
1472
|
const lastEntry = lastIndex >= 0 ? nextRepo.messages[lastIndex] : undefined;
|
|
1467
1473
|
const lastMsg = getStoredMessage(lastEntry);
|
|
1468
1474
|
const lastRole = lastMsg?.role;
|
|
1475
|
+
const lastParentId = lastEntry ? getStoredParentId(lastEntry) : undefined;
|
|
1469
1476
|
if (lastRole === "assistant" &&
|
|
1477
|
+
(parentId === undefined || lastParentId === parentId) &&
|
|
1470
1478
|
shouldReplaceLastAssistant(lastMsg, assistantMsg)) {
|
|
1471
1479
|
nextRepo.messages[lastIndex] = { ...lastEntry, message: assistantMsg };
|
|
1472
1480
|
nextRepo.headId = assistantMsg.id;
|
|
1473
1481
|
return nextRepo;
|
|
1474
1482
|
}
|
|
1475
|
-
const
|
|
1483
|
+
const fallbackParentId = nextRepo.messages.length > 0
|
|
1476
1484
|
? (messageId(getStoredMessage(nextRepo.messages[nextRepo.messages.length - 1])) ?? null)
|
|
1477
1485
|
: null;
|
|
1478
|
-
|
|
1486
|
+
const resolvedParentId = parentId === null ||
|
|
1487
|
+
(typeof parentId === "string" &&
|
|
1488
|
+
nextRepo.messages.some((entry) => messageId(getStoredMessage(entry)) === parentId))
|
|
1489
|
+
? parentId
|
|
1490
|
+
: fallbackParentId;
|
|
1491
|
+
nextRepo.messages.push({ message: assistantMsg, parentId: resolvedParentId });
|
|
1479
1492
|
nextRepo.headId = assistantMsg.id;
|
|
1480
1493
|
return nextRepo;
|
|
1481
1494
|
}
|
|
@@ -1555,12 +1568,14 @@ export function foldAssistantTurn(repo, assistantMsg, options) {
|
|
|
1555
1568
|
const turnId = options.turnId;
|
|
1556
1569
|
const runId = options.runId;
|
|
1557
1570
|
if (!turnId)
|
|
1558
|
-
return upsertAssistantMessage(repo, assistantMsg);
|
|
1571
|
+
return upsertAssistantMessage(repo, assistantMsg, options.parentId);
|
|
1559
1572
|
const nextRepo = normalizeThreadRepository(repo);
|
|
1560
1573
|
const lastIndex = nextRepo.messages.length - 1;
|
|
1561
1574
|
const lastEntry = lastIndex >= 0 ? nextRepo.messages[lastIndex] : undefined;
|
|
1562
1575
|
const lastMsg = getStoredMessage(lastEntry);
|
|
1563
1576
|
const sameTurn = lastMsg?.role === "assistant" &&
|
|
1577
|
+
(options.parentId === undefined ||
|
|
1578
|
+
getStoredParentId(lastEntry) === options.parentId) &&
|
|
1564
1579
|
(turnIdOf(lastMsg) === turnId ||
|
|
1565
1580
|
// A message the client wrote for one of this turn's runs before it
|
|
1566
1581
|
// carried a turnId stamp.
|
|
@@ -1569,7 +1584,7 @@ export function foldAssistantTurn(repo, assistantMsg, options) {
|
|
|
1569
1584
|
// First chunk of this turn (or the previous assistant belongs to an
|
|
1570
1585
|
// earlier turn) — append as a fresh message; buildAssistantMessage already
|
|
1571
1586
|
// stamped turnId + foldedRunIds onto it.
|
|
1572
|
-
return upsertAssistantMessage(repo, assistantMsg);
|
|
1587
|
+
return upsertAssistantMessage(repo, assistantMsg, options.parentId);
|
|
1573
1588
|
}
|
|
1574
1589
|
const existingContent = Array.isArray(lastMsg.content) ? lastMsg.content : [];
|
|
1575
1590
|
const incomingContent = Array.isArray(assistantMsg.content)
|
package/dist/agent/types.d.ts
CHANGED
|
@@ -174,6 +174,8 @@ export interface AgentChatRequest {
|
|
|
174
174
|
structuredHistory?: AgentChatStructuredMessage[];
|
|
175
175
|
references?: AgentChatReference[];
|
|
176
176
|
threadId?: string;
|
|
177
|
+
/** Parent message for assistant-ui sends and regenerations. */
|
|
178
|
+
parentId?: string | null;
|
|
177
179
|
attachments?: AgentChatAttachment[];
|
|
178
180
|
/** Internal retry/continuation requests should not create visible user turns. */
|
|
179
181
|
internalContinuation?: boolean;
|
|
@@ -11,8 +11,12 @@ export declare const agentConfig: z.ZodObject<{
|
|
|
11
11
|
engine: z.ZodOptional<z.ZodString>;
|
|
12
12
|
model: z.ZodOptional<z.ZodString>;
|
|
13
13
|
builtInEngines: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
14
|
+
buildEnginePackages: z.ZodOptional<z.ZodString>;
|
|
14
15
|
mode: z.ZodOptional<z.ZodString>;
|
|
15
16
|
preferBringYourOwnKey: z.ZodDefault<z.ZodBoolean>;
|
|
17
|
+
maxOutputTokens: z.ZodOptional<z.ZodNumber>;
|
|
18
|
+
mainChatMaxOutputTokens: z.ZodDefault<z.ZodNumber>;
|
|
19
|
+
emptyResponseRetryMaxOutputTokens: z.ZodDefault<z.ZodNumber>;
|
|
16
20
|
sourceSweepToolCallThreshold: z.ZodDefault<z.ZodNumber>;
|
|
17
21
|
runSoftTimeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
18
22
|
completedRunRetentionMs: z.ZodOptional<z.ZodNumber>;
|
package/dist/app-config/agent.js
CHANGED
|
@@ -32,6 +32,14 @@ export const agentConfig = z.object({
|
|
|
32
32
|
env: ["AGENT_BUILT_IN_ENGINES"],
|
|
33
33
|
doc: 'Built-in engines to register, e.g. ["ai-sdk:openai"]. Unset registers every built-in.',
|
|
34
34
|
}),
|
|
35
|
+
buildEnginePackages: z
|
|
36
|
+
.string()
|
|
37
|
+
.min(1)
|
|
38
|
+
.optional()
|
|
39
|
+
.meta({
|
|
40
|
+
env: ["AGENT_NATIVE_BUILD_ENGINE_PACKAGES"],
|
|
41
|
+
doc: "Build-derived JSON list of runtime packages available to bundled agent engines.",
|
|
42
|
+
}),
|
|
35
43
|
mode: z
|
|
36
44
|
.string()
|
|
37
45
|
.min(1)
|
|
@@ -47,6 +55,42 @@ export const agentConfig = z.object({
|
|
|
47
55
|
env: ["AGENT_ENGINE_PREFER_BYO_KEY"],
|
|
48
56
|
doc: "Skip the Builder-managed engine and select a directly configured provider key first.",
|
|
49
57
|
}),
|
|
58
|
+
// ── Output-token budget ─────────────────────────────────────────────────
|
|
59
|
+
//
|
|
60
|
+
// Every value here is a CEILING on one request's completion, not a spend:
|
|
61
|
+
// an unused ceiling costs nothing, while a ceiling that is too low truncates
|
|
62
|
+
// the answer — and on reasoning models extended thinking can consume the
|
|
63
|
+
// whole budget, leaving an empty visible response. Each is clamped down to
|
|
64
|
+
// the model's documented ceiling by `agent/engine/output-tokens.ts`, which
|
|
65
|
+
// is the only reader; the constants there carry the same numbers and
|
|
66
|
+
// `output-tokens.spec.ts` pins the two together.
|
|
67
|
+
maxOutputTokens: z
|
|
68
|
+
.number()
|
|
69
|
+
.int()
|
|
70
|
+
.positive()
|
|
71
|
+
.optional()
|
|
72
|
+
.meta({
|
|
73
|
+
env: ["AGENT_MAX_OUTPUT_TOKENS"],
|
|
74
|
+
doc: "Completion-token ceiling for engine calls that do not pass one explicitly. Unset uses the per-engine defaults.",
|
|
75
|
+
}),
|
|
76
|
+
mainChatMaxOutputTokens: z
|
|
77
|
+
.number()
|
|
78
|
+
.int()
|
|
79
|
+
.positive()
|
|
80
|
+
.default(64_000)
|
|
81
|
+
.meta({
|
|
82
|
+
env: ["AGENT_MAIN_CHAT_MAX_OUTPUT_TOKENS"],
|
|
83
|
+
doc: "Completion-token ceiling for the first attempt of an interactive chat turn.",
|
|
84
|
+
}),
|
|
85
|
+
emptyResponseRetryMaxOutputTokens: z
|
|
86
|
+
.number()
|
|
87
|
+
.int()
|
|
88
|
+
.positive()
|
|
89
|
+
.default(128_000)
|
|
90
|
+
.meta({
|
|
91
|
+
env: ["AGENT_EMPTY_RESPONSE_RETRY_MAX_OUTPUT_TOKENS"],
|
|
92
|
+
doc: "Completion-token ceiling used when retrying a turn that came back with an empty final response. Must be at or above mainChatMaxOutputTokens to raise anything.",
|
|
93
|
+
}),
|
|
50
94
|
sourceSweepToolCallThreshold: z
|
|
51
95
|
.number()
|
|
52
96
|
.int()
|
|
@@ -2,5 +2,6 @@ import { z } from "zod";
|
|
|
2
2
|
/** Inbound integration webhook policy. */
|
|
3
3
|
export declare const integrationsConfig: z.ZodObject<{
|
|
4
4
|
allowUnverifiedWebhooks: z.ZodDefault<z.ZodBoolean>;
|
|
5
|
+
webhookBaseUrl: z.ZodOptional<z.ZodString>;
|
|
5
6
|
platforms: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
6
7
|
}, z.core.$strip>;
|
|
@@ -8,6 +8,14 @@ export const integrationsConfig = z.object({
|
|
|
8
8
|
env: ["AGENT_NATIVE_ALLOW_UNVERIFIED_WEBHOOKS"],
|
|
9
9
|
doc: "Skip inbound webhook signature verification. Development only — every adapter that reads this treats it as a bypass of sender authentication.",
|
|
10
10
|
}),
|
|
11
|
+
webhookBaseUrl: z
|
|
12
|
+
.string()
|
|
13
|
+
.min(1)
|
|
14
|
+
.optional()
|
|
15
|
+
.meta({
|
|
16
|
+
env: ["WEBHOOK_BASE_URL"],
|
|
17
|
+
doc: "Optional public base URL for self-callback and webhook targets.",
|
|
18
|
+
}),
|
|
11
19
|
// Blank counts as unset everywhere in the env layer, so this cannot express
|
|
12
20
|
// "mount no platforms" — refuse the whole slot with `plugins.disabled`
|
|
13
21
|
// instead.
|
|
@@ -4,6 +4,10 @@ export const migrationConfig = z.object({
|
|
|
4
4
|
env: "AGENT_NATIVE_RELEASE_MIGRATIONS",
|
|
5
5
|
doc: "Treat database migrations as release-owned so request runtimes only probe an already-prepared schema.",
|
|
6
6
|
}),
|
|
7
|
+
deployContext: z.string().trim().min(1).optional().meta({
|
|
8
|
+
env: "CONTEXT",
|
|
9
|
+
doc: "Netlify deploy context for the build. Only 'production' owns production schema, so only that context refuses to migrate a local database.",
|
|
10
|
+
}),
|
|
7
11
|
betaSchemaOwner: z.string().trim().min(1).optional().meta({
|
|
8
12
|
env: "AGENT_NATIVE_BETA_SCHEMA_OWNER",
|
|
9
13
|
doc: "Schema owner marker embedded in a prebuilt beta server bundle.",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
/**
|
|
3
|
-
* Agent trace capture.
|
|
3
|
+
* Agent trace capture, plus the MCP server's own instrumentation switches.
|
|
4
4
|
*
|
|
5
5
|
* These were an `observability-config` settings row, which nothing in core ever
|
|
6
6
|
* wrote — the only "UI" was a snippet in the docs telling app authors to write
|
|
@@ -19,6 +19,9 @@ export declare const observabilityConfig: z.ZodObject<{
|
|
|
19
19
|
capturePrompts: z.ZodDefault<z.ZodBoolean>;
|
|
20
20
|
captureToolArgs: z.ZodDefault<z.ZodBoolean>;
|
|
21
21
|
captureToolResults: z.ZodDefault<z.ZodBoolean>;
|
|
22
|
+
mcpEvents: z.ZodDefault<z.ZodBoolean>;
|
|
23
|
+
mcpCaptureParameters: z.ZodDefault<z.ZodBoolean>;
|
|
24
|
+
mcpDebugInitialize: z.ZodDefault<z.ZodBoolean>;
|
|
22
25
|
captureLlmSpans: z.ZodDefault<z.ZodBoolean>;
|
|
23
26
|
evalSampleRate: z.ZodDefault<z.ZodNumber>;
|
|
24
27
|
inferredSentimentEnabled: z.ZodOptional<z.ZodBoolean>;
|