@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
package/dist/index.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export { AutomationConnectorError, createAutomationCallbackHandler, createAutoma
|
|
|
14
14
|
export { defineFeatureFlag, defineFeatureFlags, evaluateFeatureFlag, getFeatureFlagDefinition, getFeatureFlagRules, hasActiveFeatureFlagRollout, isFeatureFlagEnabled, listFeatureFlags, registerFeatureFlags, type FeatureFlagDefinition, type FeatureFlagMode, type FeatureFlagRules, type FeatureFlagScope, } from "./feature-flags/index.js";
|
|
15
15
|
export { createFeatureFlagA2AActionRouteAuth, createFeatureFlagsPlugin, } from "./feature-flags/server.js";
|
|
16
16
|
export { createServer, createSSEHandler, defineNitroPlugin, autoMountAuth, getSession, type CreateServerOptions, type SSEHandlerOptions, type AuthSession, type AuthOptions, } from "./server/index.js";
|
|
17
|
-
export { agentChat, type AgentChatCallOptions, type AgentChatResponse, } from "./shared/index.js";
|
|
17
|
+
export { agentChat, isQaTestEmail, type AgentChatCallOptions, type AgentChatResponse, } from "./shared/index.js";
|
|
18
18
|
export { EMBED_MODE_QUERY_PARAM, EMBED_SESSION_COOKIE, EMBED_START_PATH, EMBED_TOKEN_QUERY_PARAM, } from "./shared/embed-auth.js";
|
|
19
19
|
export { AGENT_WEB_CRAWLER_CATEGORIES, AGENT_WEB_CRAWLER_USER_AGENTS, DEFAULT_AGENT_WEB_CRAWLER_POLICY, absoluteUrl, agentWebConfigFromPackageJson, buildAgentWebStaticFiles, buildBaseJsonLd, buildLlmsFullTxt, buildLlmsTxt, buildMarkdownResponseHeaders, buildPageJsonLd, buildRobotsTxt, buildSitemapXml, deriveAgentWebPublicRoutes, estimateMarkdownTokens, markdownFilePathForPage, markdownUrlForPage, normalizeAgentWebConfig, pathPatternMatches, resolveAgentWebCrawlerPolicy, type AgentWebConfig, type AgentWebCrawlerCategory, type AgentWebCrawlerDecision, type AgentWebCrawlerOverrides, type AgentWebCrawlerPolicy, type AgentWebInputConfig, type AgentWebPage, type AgentWebStaticFile, type BuildAgentWebStaticFilesOptions, type DeriveAgentWebPublicRoutesOptions, type MarkdownResponseHeadersOptions, } from "./agent-web/index.js";
|
|
20
20
|
export { recordUsage, getUsageSummary, getUserUsageCents, calculateCost, usageBillingForEngine, builderCreditsFromCostCents, BUILDER_AGENT_CREDIT_MARGIN_MULTIPLIER, BUILDER_AGENT_CREDITS_PER_USD, BUILDER_CREDIT_USAGE_BILLING, USD_USAGE_BILLING, type UsageRecord, type UsageCostSource, type UsageCostAggregate, type UsageSummary, type UsageBillingMode, type UsageBillingUnit, type UsageBucket, type DailyBucket, type UsageRecentEntry, } from "./usage/store.js";
|
package/dist/index.js
CHANGED
|
@@ -39,7 +39,7 @@ export { createServer, createSSEHandler, defineNitroPlugin, autoMountAuth, getSe
|
|
|
39
39
|
//
|
|
40
40
|
// import { useDbSync, cn } from "@agent-native/core/client";
|
|
41
41
|
// Shared (isomorphic)
|
|
42
|
-
export { agentChat, } from "./shared/index.js";
|
|
42
|
+
export { agentChat, isQaTestEmail, } from "./shared/index.js";
|
|
43
43
|
export { EMBED_MODE_QUERY_PARAM, EMBED_SESSION_COOKIE, EMBED_START_PATH, EMBED_TOKEN_QUERY_PARAM, } from "./shared/embed-auth.js";
|
|
44
44
|
// Agent Web surfaces
|
|
45
45
|
export { AGENT_WEB_CRAWLER_CATEGORIES, AGENT_WEB_CRAWLER_USER_AGENTS, DEFAULT_AGENT_WEB_CRAWLER_POLICY, absoluteUrl, agentWebConfigFromPackageJson, buildAgentWebStaticFiles, buildBaseJsonLd, buildLlmsFullTxt, buildLlmsTxt, buildMarkdownResponseHeaders, buildPageJsonLd, buildRobotsTxt, buildSitemapXml, deriveAgentWebPublicRoutes, estimateMarkdownTokens, markdownFilePathForPage, markdownUrlForPage, normalizeAgentWebConfig, pathPatternMatches, resolveAgentWebCrawlerPolicy, } from "./agent-web/index.js";
|
package/dist/ingestion/media.js
CHANGED
|
@@ -196,8 +196,13 @@ export async function readBoundedResponseBytes(response, maxBytes) {
|
|
|
196
196
|
if (Number.isFinite(contentLength) && contentLength > maxBytes) {
|
|
197
197
|
throw new Error(`Remote artifact exceeds ${maxBytes} bytes.`);
|
|
198
198
|
}
|
|
199
|
-
if (!response.body)
|
|
200
|
-
|
|
199
|
+
if (!response.body) {
|
|
200
|
+
const bytes = new Uint8Array(await response.arrayBuffer());
|
|
201
|
+
if (bytes.byteLength > maxBytes) {
|
|
202
|
+
throw new Error(`Remote artifact exceeds ${maxBytes} bytes.`);
|
|
203
|
+
}
|
|
204
|
+
return bytes;
|
|
205
|
+
}
|
|
201
206
|
const reader = response.body.getReader();
|
|
202
207
|
const chunks = [];
|
|
203
208
|
let total = 0;
|
|
@@ -83,13 +83,11 @@ export async function saveIntegrationConfigIfUnchanged(platform, configData, con
|
|
|
83
83
|
await ensureTable();
|
|
84
84
|
const client = getDbExec();
|
|
85
85
|
const nextRaw = JSON.stringify(configData);
|
|
86
|
-
const timestamp = Date.now();
|
|
87
86
|
const result = expected
|
|
88
87
|
? await client.execute({
|
|
89
|
-
sql: `UPDATE integration_configs SET config_data = ?, updated_at =
|
|
88
|
+
sql: `UPDATE integration_configs SET config_data = ?, updated_at = updated_at + 1 WHERE platform = ? AND config_key = ? AND config_data = ? AND updated_at = ?`,
|
|
90
89
|
args: [
|
|
91
90
|
nextRaw,
|
|
92
|
-
timestamp,
|
|
93
91
|
platform,
|
|
94
92
|
configKey,
|
|
95
93
|
JSON.stringify(expected.configData),
|
|
@@ -100,7 +98,7 @@ export async function saveIntegrationConfigIfUnchanged(platform, configData, con
|
|
|
100
98
|
sql: isPostgres()
|
|
101
99
|
? `INSERT INTO integration_configs (platform, config_key, config_data, owner, updated_at) VALUES (?, ?, ?, ?, ?) ON CONFLICT (platform, config_key) DO NOTHING`
|
|
102
100
|
: `INSERT OR IGNORE INTO integration_configs (platform, config_key, config_data, owner, updated_at) VALUES (?, ?, ?, ?, ?)`,
|
|
103
|
-
args: [platform, configKey, nextRaw, owner ?? null,
|
|
101
|
+
args: [platform, configKey, nextRaw, owner ?? null, Date.now()],
|
|
104
102
|
});
|
|
105
103
|
if (result.rowsAffected === 0)
|
|
106
104
|
return false;
|
|
@@ -31,7 +31,7 @@ export interface GoogleDocsPollerOptions {
|
|
|
31
31
|
*
|
|
32
32
|
* Returns true if the watch was registered successfully.
|
|
33
33
|
*/
|
|
34
|
-
export declare function registerWatch(webhookUrl: string, expectedChannelId?: string): Promise<boolean>;
|
|
34
|
+
export declare function registerWatch(webhookUrl: string, expectedChannelId?: string, expectedPollerGeneration?: number): Promise<boolean>;
|
|
35
35
|
export declare function verifyGoogleDocsPushNotification(headers: GoogleDocsPushHeaders): Promise<boolean>;
|
|
36
36
|
export declare function stopGoogleDocsWatchChannel(accessToken: string, channelId: unknown, resourceId: unknown): Promise<boolean>;
|
|
37
37
|
/**
|
|
@@ -28,6 +28,7 @@ let pollerJob = null;
|
|
|
28
28
|
// arming itself afterwards.
|
|
29
29
|
let pollerStartTimer = null;
|
|
30
30
|
let activeOptions = null;
|
|
31
|
+
let pollerGeneration = 0;
|
|
31
32
|
// ─── Watch Channel Management ───────────────────────────────────────────────
|
|
32
33
|
/** How long a watch channel lasts (Google max is ~24h, we use 23h to renew early) */
|
|
33
34
|
const WATCH_CHANNEL_TTL_MS = 23 * 60 * 60 * 1000;
|
|
@@ -35,6 +36,9 @@ const WATCH_RETRY_MS = 5 * 60 * 1000;
|
|
|
35
36
|
const WATCH_STOP_CLAIM_TTL_MS = WATCH_RETRY_MS - 30 * 1000;
|
|
36
37
|
let watchRenewalTimer = null;
|
|
37
38
|
const watchCleanupTimers = new Map();
|
|
39
|
+
function isCurrentPollerGeneration(generation) {
|
|
40
|
+
return generation === undefined || generation === pollerGeneration;
|
|
41
|
+
}
|
|
38
42
|
function unrefTimer(timer) {
|
|
39
43
|
if (typeof timer === "object" && timer !== null && "unref" in timer) {
|
|
40
44
|
timer.unref();
|
|
@@ -80,13 +84,40 @@ function scheduleOrphanedWatchCleanup(channel, delayMs = WATCH_RETRY_MS) {
|
|
|
80
84
|
unrefTimer(timer);
|
|
81
85
|
watchCleanupTimers.set(channel.id, timer);
|
|
82
86
|
}
|
|
87
|
+
async function cleanupRegisteredWatch(accessToken, channel) {
|
|
88
|
+
let currentConfig = null;
|
|
89
|
+
try {
|
|
90
|
+
currentConfig = await getIntegrationConfig(PLATFORM, "watch-channel");
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
console.warn("[google-docs] Could not read watch config during cleanup; continuing with provider stop", err);
|
|
94
|
+
}
|
|
95
|
+
const stopped = await stopGoogleDocsWatchChannel(accessToken, channel.id, channel.resourceId);
|
|
96
|
+
if (!stopped) {
|
|
97
|
+
scheduleOrphanedWatchCleanup(channel);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (currentConfig?.configData?.channelId === channel.id) {
|
|
101
|
+
try {
|
|
102
|
+
await saveIntegrationConfigIfUnchanged(PLATFORM, {}, "watch-channel", currentConfig);
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
console.warn("[google-docs] Could not clear watch config after provider stop", err);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
83
109
|
/**
|
|
84
110
|
* Register a Google Drive changes.watch channel so Google pushes
|
|
85
111
|
* notifications to our webhook instead of us polling.
|
|
86
112
|
*
|
|
87
113
|
* Returns true if the watch was registered successfully.
|
|
88
114
|
*/
|
|
89
|
-
export async function registerWatch(webhookUrl, expectedChannelId) {
|
|
115
|
+
export async function registerWatch(webhookUrl, expectedChannelId, expectedPollerGeneration) {
|
|
116
|
+
if (!isCurrentPollerGeneration(expectedPollerGeneration))
|
|
117
|
+
return false;
|
|
118
|
+
const integrationConfig = await getIntegrationConfig(PLATFORM);
|
|
119
|
+
if (!integrationConfig?.configData?.enabled)
|
|
120
|
+
return false;
|
|
90
121
|
const accessToken = await getServiceAccountAccessToken();
|
|
91
122
|
if (!accessToken)
|
|
92
123
|
return false;
|
|
@@ -96,6 +127,8 @@ export async function registerWatch(webhookUrl, expectedChannelId) {
|
|
|
96
127
|
pageToken = await getStartPageToken(accessToken);
|
|
97
128
|
await setPageToken(pageToken);
|
|
98
129
|
}
|
|
130
|
+
if (!isCurrentPollerGeneration(expectedPollerGeneration))
|
|
131
|
+
return false;
|
|
99
132
|
const channelId = `gdocs-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
100
133
|
const expiration = Date.now() + WATCH_CHANNEL_TTL_MS;
|
|
101
134
|
const { token: channelToken, tokenHash: channelTokenHash } = createGoogleDocsChannelAuth();
|
|
@@ -108,6 +141,8 @@ export async function registerWatch(webhookUrl, expectedChannelId) {
|
|
|
108
141
|
currentConfig?.configData?.channelId !== expectedChannelId) {
|
|
109
142
|
return false;
|
|
110
143
|
}
|
|
144
|
+
if (!isCurrentPollerGeneration(expectedPollerGeneration))
|
|
145
|
+
return false;
|
|
111
146
|
const res = await fetch("https://www.googleapis.com/drive/v3/changes/watch", {
|
|
112
147
|
method: "POST",
|
|
113
148
|
headers: {
|
|
@@ -130,6 +165,15 @@ export async function registerWatch(webhookUrl, expectedChannelId) {
|
|
|
130
165
|
}
|
|
131
166
|
const data = (await res.json());
|
|
132
167
|
registeredChannel = { id: data.id, resourceId: data.resourceId };
|
|
168
|
+
if (!isCurrentPollerGeneration(expectedPollerGeneration)) {
|
|
169
|
+
await cleanupRegisteredWatch(accessToken, registeredChannel);
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
const enabledAfterRegistration = await getIntegrationConfig(PLATFORM);
|
|
173
|
+
if (!enabledAfterRegistration?.configData?.enabled) {
|
|
174
|
+
await cleanupRegisteredWatch(accessToken, registeredChannel);
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
133
177
|
// Promote only if no other registration changed the active channel while
|
|
134
178
|
// this request was in flight. Stop this orphaned channel if it lost.
|
|
135
179
|
const promoted = await saveIntegrationConfigIfUnchanged(PLATFORM, {
|
|
@@ -140,16 +184,19 @@ export async function registerWatch(webhookUrl, expectedChannelId) {
|
|
|
140
184
|
webhookUrl,
|
|
141
185
|
}, "watch-channel", currentConfig);
|
|
142
186
|
if (!promoted) {
|
|
143
|
-
|
|
144
|
-
if (!stopped) {
|
|
145
|
-
scheduleOrphanedWatchCleanup({
|
|
146
|
-
id: data.id,
|
|
147
|
-
resourceId: data.resourceId,
|
|
148
|
-
});
|
|
149
|
-
}
|
|
187
|
+
await cleanupRegisteredWatch(accessToken, registeredChannel);
|
|
150
188
|
console.warn(`[google-docs] Watch registration lost a concurrent update (channel: ${data.id})`);
|
|
151
189
|
return false;
|
|
152
190
|
}
|
|
191
|
+
if (!isCurrentPollerGeneration(expectedPollerGeneration)) {
|
|
192
|
+
await cleanupRegisteredWatch(accessToken, registeredChannel);
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
const enabledBeforeScheduling = await getIntegrationConfig(PLATFORM);
|
|
196
|
+
if (!enabledBeforeScheduling?.configData?.enabled) {
|
|
197
|
+
await cleanupRegisteredWatch(accessToken, registeredChannel);
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
153
200
|
const previousChannelId = currentConfig?.configData?.channelId;
|
|
154
201
|
if (typeof previousChannelId === "string" &&
|
|
155
202
|
previousChannelId !== data.id) {
|
|
@@ -164,17 +211,18 @@ export async function registerWatch(webhookUrl, expectedChannelId) {
|
|
|
164
211
|
});
|
|
165
212
|
}
|
|
166
213
|
}
|
|
214
|
+
if (!isCurrentPollerGeneration(expectedPollerGeneration)) {
|
|
215
|
+
await cleanupRegisteredWatch(accessToken, registeredChannel);
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
167
218
|
console.log(`[google-docs] Watch registered (channel: ${data.id}, expires: ${new Date(parseInt(data.expiration)).toISOString()})`);
|
|
168
219
|
// Schedule renewal before expiration
|
|
169
|
-
scheduleWatchRenewal(webhookUrl, undefined, data.id);
|
|
220
|
+
scheduleWatchRenewal(webhookUrl, undefined, data.id, expectedPollerGeneration);
|
|
170
221
|
return true;
|
|
171
222
|
}
|
|
172
223
|
catch (err) {
|
|
173
224
|
if (registeredChannel) {
|
|
174
|
-
|
|
175
|
-
if (!stopped) {
|
|
176
|
-
scheduleOrphanedWatchCleanup(registeredChannel);
|
|
177
|
-
}
|
|
225
|
+
await cleanupRegisteredWatch(accessToken, registeredChannel);
|
|
178
226
|
}
|
|
179
227
|
console.error("[google-docs] Watch registration error:", err);
|
|
180
228
|
return false;
|
|
@@ -258,31 +306,53 @@ export async function stopGoogleDocsWatchChannel(accessToken, channelId, resourc
|
|
|
258
306
|
/**
|
|
259
307
|
* Schedule automatic watch renewal before the channel expires.
|
|
260
308
|
*/
|
|
261
|
-
function scheduleWatchRenewal(webhookUrl, delayMs = WATCH_CHANNEL_TTL_MS - 60 * 60 * 1000, expectedChannelId) {
|
|
309
|
+
function scheduleWatchRenewal(webhookUrl, delayMs = WATCH_CHANNEL_TTL_MS - 60 * 60 * 1000, expectedChannelId, expectedPollerGeneration) {
|
|
310
|
+
if (!isCurrentPollerGeneration(expectedPollerGeneration))
|
|
311
|
+
return;
|
|
262
312
|
if (watchRenewalTimer)
|
|
263
313
|
clearTimeout(watchRenewalTimer);
|
|
264
314
|
watchRenewalTimer = setTimeout(async () => {
|
|
265
315
|
watchRenewalTimer = null;
|
|
316
|
+
if (!isCurrentPollerGeneration(expectedPollerGeneration))
|
|
317
|
+
return;
|
|
266
318
|
try {
|
|
267
319
|
console.log("[google-docs] Renewing watch channel...");
|
|
268
|
-
if (await registerWatch(webhookUrl, expectedChannelId))
|
|
320
|
+
if (await registerWatch(webhookUrl, expectedChannelId, expectedPollerGeneration)) {
|
|
269
321
|
return;
|
|
270
|
-
if (expectedChannelId !== undefined) {
|
|
271
|
-
const currentConfig = await getIntegrationConfig(PLATFORM, "watch-channel");
|
|
272
|
-
if (currentConfig?.configData?.channelId !== expectedChannelId) {
|
|
273
|
-
return;
|
|
274
|
-
}
|
|
275
322
|
}
|
|
323
|
+
if (!(await shouldRetryWatchRenewal(expectedChannelId)))
|
|
324
|
+
return;
|
|
325
|
+
if (!isCurrentPollerGeneration(expectedPollerGeneration))
|
|
326
|
+
return;
|
|
276
327
|
console.warn(`[google-docs] Could not register the replacement watch; retrying in ${WATCH_RETRY_MS / 60_000} minutes`);
|
|
277
|
-
scheduleWatchRenewal(webhookUrl, WATCH_RETRY_MS, expectedChannelId);
|
|
328
|
+
scheduleWatchRenewal(webhookUrl, WATCH_RETRY_MS, expectedChannelId, expectedPollerGeneration);
|
|
278
329
|
}
|
|
279
330
|
catch (err) {
|
|
280
331
|
console.warn(`[google-docs] Watch renewal failed; retrying in ${WATCH_RETRY_MS / 60_000} minutes`, err);
|
|
281
|
-
|
|
332
|
+
if (!isCurrentPollerGeneration(expectedPollerGeneration))
|
|
333
|
+
return;
|
|
334
|
+
try {
|
|
335
|
+
if (!(await shouldRetryWatchRenewal(expectedChannelId)))
|
|
336
|
+
return;
|
|
337
|
+
}
|
|
338
|
+
catch (configErr) {
|
|
339
|
+
console.warn("[google-docs] Could not verify the current watch before retrying", configErr);
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
scheduleWatchRenewal(webhookUrl, WATCH_RETRY_MS, expectedChannelId, expectedPollerGeneration);
|
|
282
343
|
}
|
|
283
344
|
}, delayMs);
|
|
284
345
|
unrefTimer(watchRenewalTimer);
|
|
285
346
|
}
|
|
347
|
+
async function shouldRetryWatchRenewal(expectedChannelId) {
|
|
348
|
+
const integrationConfig = await getIntegrationConfig(PLATFORM);
|
|
349
|
+
if (!integrationConfig?.configData?.enabled)
|
|
350
|
+
return false;
|
|
351
|
+
if (expectedChannelId === undefined)
|
|
352
|
+
return true;
|
|
353
|
+
const currentConfig = await getIntegrationConfig(PLATFORM, "watch-channel");
|
|
354
|
+
return currentConfig?.configData?.channelId === expectedChannelId;
|
|
355
|
+
}
|
|
286
356
|
function scheduleWatchCleanupRetry(expectedClaimId, delayMs = WATCH_RETRY_MS) {
|
|
287
357
|
if (watchRenewalTimer)
|
|
288
358
|
clearTimeout(watchRenewalTimer);
|
|
@@ -619,9 +689,12 @@ export async function startGoogleDocsPoller(options) {
|
|
|
619
689
|
console.warn("[google-docs] Already running");
|
|
620
690
|
return;
|
|
621
691
|
}
|
|
692
|
+
const generation = ++pollerGeneration;
|
|
622
693
|
activeOptions = options;
|
|
623
694
|
// Check if integration is enabled before trying to register watch
|
|
624
695
|
const config = await getIntegrationConfig(PLATFORM);
|
|
696
|
+
if (!isCurrentPollerGeneration(generation))
|
|
697
|
+
return;
|
|
625
698
|
if (!config?.configData?.enabled) {
|
|
626
699
|
// Still start the poll loop so it picks up when enabled later
|
|
627
700
|
startPollLoop(options, options.intervalMs ?? 30_000);
|
|
@@ -631,7 +704,9 @@ export async function startGoogleDocsPoller(options) {
|
|
|
631
704
|
const webhookUrl = options.webhookUrl;
|
|
632
705
|
let pushMode = false;
|
|
633
706
|
if (webhookUrl) {
|
|
634
|
-
pushMode = await registerWatch(webhookUrl);
|
|
707
|
+
pushMode = await registerWatch(webhookUrl, undefined, generation);
|
|
708
|
+
if (!isCurrentPollerGeneration(generation))
|
|
709
|
+
return;
|
|
635
710
|
if (pushMode) {
|
|
636
711
|
console.log("[google-docs] Push mode active — using Drive webhooks");
|
|
637
712
|
// In push mode, still poll slowly as a safety net (every 5 min)
|
|
@@ -695,6 +770,8 @@ function startPollLoop(options, intervalMs) {
|
|
|
695
770
|
* Stop the Google Docs integration.
|
|
696
771
|
*/
|
|
697
772
|
export async function stopGoogleDocsPoller() {
|
|
773
|
+
pollerGeneration += 1;
|
|
774
|
+
activeOptions = null;
|
|
698
775
|
if (pollerStartTimer) {
|
|
699
776
|
clearTimeout(pollerStartTimer);
|
|
700
777
|
pollerStartTimer = null;
|
|
@@ -722,5 +799,4 @@ export async function stopGoogleDocsPoller() {
|
|
|
722
799
|
console.warn(`[google-docs] Watch cleanup failed; retrying in ${WATCH_RETRY_MS / 60_000} minutes`, err);
|
|
723
800
|
scheduleWatchCleanupRetry(undefined);
|
|
724
801
|
}
|
|
725
|
-
activeOptions = null;
|
|
726
802
|
}
|
|
@@ -29,7 +29,7 @@ import { createComputerApprovalRequest, decideComputerApproval, listComputerAppr
|
|
|
29
29
|
import { ComputerSupervisionError } from "./computer-supervision.js";
|
|
30
30
|
import { getIntegrationConfig, saveIntegrationConfig } from "./config-store.js";
|
|
31
31
|
import { claimIntegrationControl } from "./controls-store.js";
|
|
32
|
-
import { startGoogleDocsPoller, handlePushNotification, verifyGoogleDocsPushNotification, } from "./google-docs-poller.js";
|
|
32
|
+
import { startGoogleDocsPoller, stopGoogleDocsPoller, handlePushNotification, verifyGoogleDocsPushNotification, } from "./google-docs-poller.js";
|
|
33
33
|
import { IntegrationIdentityDeclinedError, resolveDefaultIntegrationExecutionContext, } from "./identity.js";
|
|
34
34
|
import { disconnectIntegrationInstallation, listIntegrationInstallations, resolveIntegrationTokenBundle, updateIntegrationInstallation, upsertIntegrationInstallation, } from "./installations-store.js";
|
|
35
35
|
import { recoverDueIntegrationCampaigns } from "./integration-campaign-recovery.js";
|
|
@@ -600,6 +600,34 @@ export function createIntegrationsPlugin(options) {
|
|
|
600
600
|
const initialToolNames = Object.keys(localActions);
|
|
601
601
|
const h3 = getH3App(nitroApp);
|
|
602
602
|
const P = `${FRAMEWORK_ROUTE_PREFIX}/integrations`;
|
|
603
|
+
let googleDocsPollerTransition = Promise.resolve();
|
|
604
|
+
const runGoogleDocsPollerTransition = (operation) => {
|
|
605
|
+
const previous = googleDocsPollerTransition;
|
|
606
|
+
let release;
|
|
607
|
+
googleDocsPollerTransition = new Promise((resolve) => {
|
|
608
|
+
release = resolve;
|
|
609
|
+
});
|
|
610
|
+
return previous
|
|
611
|
+
.catch(() => undefined)
|
|
612
|
+
.then(operation)
|
|
613
|
+
.finally(release);
|
|
614
|
+
};
|
|
615
|
+
const createGoogleDocsPollerOptions = (event) => {
|
|
616
|
+
const configuredBaseUrl = getAppConfig().integrations.webhookBaseUrl;
|
|
617
|
+
const baseUrl = configuredBaseUrl || (event ? getBaseUrl(event) : undefined);
|
|
618
|
+
const webhookUrl = baseUrl
|
|
619
|
+
? `${withConfiguredAppBasePath(baseUrl)}${P}/google-docs/webhook`
|
|
620
|
+
: undefined;
|
|
621
|
+
return {
|
|
622
|
+
systemPrompt: baseSystemPrompt,
|
|
623
|
+
actions,
|
|
624
|
+
initialToolNames,
|
|
625
|
+
model: model ?? "",
|
|
626
|
+
apiKey: getApiKey(),
|
|
627
|
+
ownerEmail: "integration@google-docs",
|
|
628
|
+
webhookUrl,
|
|
629
|
+
};
|
|
630
|
+
};
|
|
603
631
|
// Routes mounted under a platform's own name rather than reached through
|
|
604
632
|
// the `/:platform/...` catch-all. The catch-all 404s a platform the
|
|
605
633
|
// allow-list dropped because it resolves an adapter first; these are
|
|
@@ -2427,6 +2455,14 @@ export function createIntegrationsPlugin(options) {
|
|
|
2427
2455
|
setResponseStatus(event, 401);
|
|
2428
2456
|
return { ok: false, error: "unauthorized" };
|
|
2429
2457
|
}
|
|
2458
|
+
const config = await getIntegrationConfig(platform);
|
|
2459
|
+
if (!config?.configData?.enabled) {
|
|
2460
|
+
setResponseStatus(event, 404);
|
|
2461
|
+
return {
|
|
2462
|
+
ok: false,
|
|
2463
|
+
error: `Integration ${platform} is not enabled`,
|
|
2464
|
+
};
|
|
2465
|
+
}
|
|
2430
2466
|
handlePushNotification().catch((err) => {
|
|
2431
2467
|
console.error("[google-docs] Push handler error:", err);
|
|
2432
2468
|
});
|
|
@@ -2635,6 +2671,9 @@ export function createIntegrationsPlugin(options) {
|
|
|
2635
2671
|
// the row itself remains deployment-wide.
|
|
2636
2672
|
const session = await getSession(event).catch(() => null);
|
|
2637
2673
|
await saveIntegrationConfig(platform, { enabled: true }, "default", session?.email);
|
|
2674
|
+
if (platform === "google-docs") {
|
|
2675
|
+
await runGoogleDocsPollerTransition(() => startGoogleDocsPoller(createGoogleDocsPollerOptions(event)));
|
|
2676
|
+
}
|
|
2638
2677
|
return { ok: true, platform, enabled: true };
|
|
2639
2678
|
}
|
|
2640
2679
|
// ─── POST /:platform/disable ───────────────────────────
|
|
@@ -2644,6 +2683,9 @@ export function createIntegrationsPlugin(options) {
|
|
|
2644
2683
|
return { error: adminCheck.error };
|
|
2645
2684
|
const session = await getSession(event).catch(() => null);
|
|
2646
2685
|
await saveIntegrationConfig(platform, { enabled: false }, "default", session?.email);
|
|
2686
|
+
if (platform === "google-docs") {
|
|
2687
|
+
await runGoogleDocsPollerTransition(stopGoogleDocsPoller);
|
|
2688
|
+
}
|
|
2647
2689
|
return { ok: true, platform, enabled: false };
|
|
2648
2690
|
}
|
|
2649
2691
|
// ─── POST /:platform/setup ─────────────────────────────
|
|
@@ -2718,7 +2760,7 @@ export function createIntegrationsPlugin(options) {
|
|
|
2718
2760
|
// processor killed mid-flight). No-ops gracefully if the queue table
|
|
2719
2761
|
// hasn't been created yet on this deployment.
|
|
2720
2762
|
startPendingTasksRetryJob({
|
|
2721
|
-
webhookBaseUrl:
|
|
2763
|
+
webhookBaseUrl: getAppConfig().integrations.webhookBaseUrl,
|
|
2722
2764
|
});
|
|
2723
2765
|
startA2AContinuationRetryJob(adapterMap);
|
|
2724
2766
|
startRemoteCommandsRetryJob();
|
|
@@ -2732,19 +2774,7 @@ export function createIntegrationsPlugin(options) {
|
|
|
2732
2774
|
// resolved. We pass it as a special option; the poller will attempt
|
|
2733
2775
|
// to register a watch when the first request reveals the base URL,
|
|
2734
2776
|
// or use the WEBHOOK_BASE_URL env var if set.
|
|
2735
|
-
|
|
2736
|
-
const webhookUrl = baseUrl
|
|
2737
|
-
? `${withConfiguredAppBasePath(baseUrl)}${P}/google-docs/webhook`
|
|
2738
|
-
: undefined;
|
|
2739
|
-
void startGoogleDocsPoller({
|
|
2740
|
-
systemPrompt: baseSystemPrompt,
|
|
2741
|
-
actions,
|
|
2742
|
-
initialToolNames,
|
|
2743
|
-
model: model ?? "",
|
|
2744
|
-
apiKey: getApiKey(),
|
|
2745
|
-
ownerEmail: "integration@google-docs",
|
|
2746
|
-
webhookUrl,
|
|
2747
|
-
});
|
|
2777
|
+
void runGoogleDocsPollerTransition(() => startGoogleDocsPoller(createGoogleDocsPollerOptions()));
|
|
2748
2778
|
}, 2000);
|
|
2749
2779
|
}
|
|
2750
2780
|
}
|
|
@@ -14,6 +14,7 @@ import { createThread, getThread, grantThreadUserShare, setThreadSourceIfMissing
|
|
|
14
14
|
import { updateThreadData } from "../chat-threads/store.js";
|
|
15
15
|
import { getOrgA2ASecret, resolveOrgIdForEmail } from "../org/context.js";
|
|
16
16
|
import { withConfiguredAppBasePath } from "../server/app-base-path.js";
|
|
17
|
+
import { getAppProductionUrl } from "../server/app-url.js";
|
|
17
18
|
import { runWithRequestContext } from "../server/request-context.js";
|
|
18
19
|
import { resolveSelfDispatchBaseUrl } from "../server/self-dispatch.js";
|
|
19
20
|
import { normalizeReasoningEffortForRequest } from "../shared/reasoning-effort.js";
|
|
@@ -969,7 +970,7 @@ async function processIncomingMessage(incoming, options, opts = {}) {
|
|
|
969
970
|
// fallback. A completed write must not be reported as though nothing
|
|
970
971
|
// happened merely because the model ran out of time before its prose
|
|
971
972
|
// summary. Read-only and unverified tool results do not qualify.
|
|
972
|
-
const baseUrl =
|
|
973
|
+
const baseUrl = getAppProductionUrl(undefined, { fallback: "" });
|
|
973
974
|
const appBaseUrl = baseUrl ? withConfiguredAppBasePath(baseUrl) : "";
|
|
974
975
|
const toolResults = collectToolResultSummaries(completedRun);
|
|
975
976
|
const verifiedMutationReceipt = buildA2AVerifiedMutationReceipt(collectCompletedMutationToolResultSummaries(completedRun), { baseUrl: appBaseUrl || undefined });
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { collectFinalResponseTextFromAgentEvents } from "../a2a/response-text.js";
|
|
2
2
|
import { getStoredModelForEngine, normalizeModelForEngine, resolveEngine, } from "../agent/engine/index.js";
|
|
3
|
+
import { resolveMainChatMaxOutputTokens } from "../agent/engine/output-tokens.js";
|
|
3
4
|
import { actionsToEngineTools, filterInitialEngineTools, getOwnerActiveApiKey, } from "../agent/production-agent.js";
|
|
4
5
|
import { runAgentLoopDirectWithSoftTimeout } from "../agent/run-loop-with-resume.js";
|
|
5
6
|
import { abortRun, resolveBackgroundAutomationSoftTimeoutMs, resolveBackgroundRunHardTimeoutMs, startRun, } from "../agent/run-manager.js";
|
|
@@ -454,6 +455,14 @@ async function executeBackgroundAutomation(options, deps, historyId, runIdRef) {
|
|
|
454
455
|
runId,
|
|
455
456
|
maxIterations: automation.meta.maxIterations,
|
|
456
457
|
maxRunInputTokens: automation.meta.maxRunInputTokens,
|
|
458
|
+
// Same model-aware ceiling the interactive paths pass (see
|
|
459
|
+
// agent-teams.ts and webhook-handler.ts). Without it a scheduled
|
|
460
|
+
// run silently inherits the flat per-engine default — a LOWER
|
|
461
|
+
// budget than chat, on exactly the runs that produce the largest
|
|
462
|
+
// single tool call (a digest, a dashboard, a batch insert), and
|
|
463
|
+
// the truncation surfaces as an unexplained invalid-arguments
|
|
464
|
+
// retry loop rather than as a budget problem.
|
|
465
|
+
maxOutputTokens: resolveMainChatMaxOutputTokens(model),
|
|
457
466
|
};
|
|
458
467
|
// Same adapter A2A uses: bridge this runner's multi-argument shape
|
|
459
468
|
// to the single-argument `runAgentLoop` `instrumentAgentLoop`
|
|
@@ -475,10 +484,17 @@ async function executeBackgroundAutomation(options, deps, historyId, runIdRef) {
|
|
|
475
484
|
// makes it visible to per-user observability reads.
|
|
476
485
|
userId: ownerEmail,
|
|
477
486
|
config,
|
|
478
|
-
|
|
487
|
+
// The trace list column is a name, so it has to say WHICH
|
|
488
|
+
// automation ran; a constant here made every scheduled run
|
|
489
|
+
// in LLM analytics indistinguishable from every other one.
|
|
490
|
+
spanName: `background_automation_run:${automation.name}`,
|
|
479
491
|
metadata: {
|
|
480
492
|
automation: automation.name,
|
|
481
493
|
trigger: "background_automation",
|
|
494
|
+
// `recurring-job:` / `manual-automation:` / `automation:`
|
|
495
|
+
// — what actually started this run, which the span name
|
|
496
|
+
// alone does not say.
|
|
497
|
+
label: usageLabel,
|
|
482
498
|
scope: orgId ? "organization" : "personal",
|
|
483
499
|
},
|
|
484
500
|
});
|
|
@@ -41,6 +41,25 @@ const messages = {
|
|
|
41
41
|
"onboarding.roleOther": "أخرى",
|
|
42
42
|
"onboarding.skipForNow": "تخطي الآن",
|
|
43
43
|
"onboarding.saveRoleError": "تعذر حفظ دورك.",
|
|
44
|
+
"onboarding.builderActivateCredits": "تفعيل أرصدة Builder.io المجانية",
|
|
45
|
+
"onboarding.builderConnectCredits": "الاتصال بأرصدة Builder.io المجانية",
|
|
46
|
+
"onboarding.builderActivateDescription": "أنشئ حساب Builder.io الخاص بك أو أعد استخدامه وفعّل أرصدته المجانية بنقرة واحدة.",
|
|
47
|
+
"onboarding.builderActiveCredits": "مضمّنة مع أرصدة Builder.io المجانية النشطة",
|
|
48
|
+
"onboarding.builderCredits": "مضمّنة مع أرصدة Builder.io المجانية",
|
|
49
|
+
"onboarding.builderActivateTitle": "تفعيل الأرصدة المجانية",
|
|
50
|
+
"onboarding.builderAccountExistsTitle": "لديك حساب Builder.io بالفعل",
|
|
51
|
+
"onboarding.builderAccountExistsDescription": "سجّل الدخول لربطه.",
|
|
52
|
+
"onboarding.builderActivationDescription": "سننشئ حساب Builder.io الخاص بك تلقائيًا بنقرة واحدة.",
|
|
53
|
+
"onboarding.builderCreateAndActivate": "إنشاء وتفعيل",
|
|
54
|
+
"onboarding.builderConsentPrefix": "بمتابعة العملية، فإنك توافق على",
|
|
55
|
+
"onboarding.builderTerms": "الشروط",
|
|
56
|
+
"onboarding.builderPrivacy": "الخصوصية",
|
|
57
|
+
"onboarding.builderConsentAnd": "و",
|
|
58
|
+
"onboarding.builderExistingAccount": "لدي حساب Builder.io",
|
|
59
|
+
"onboarding.builderActivating": "جارٍ تفعيل أرصدة Builder.io المجانية",
|
|
60
|
+
"onboarding.builderConnecting": "جارٍ الاتصال بأرصدة Builder.io المجانية",
|
|
61
|
+
"onboarding.builderProvisioningDescription": "جارٍ إنشاء حساب Builder.io الخاص بك أو إعادة استخدامه. يستغرق ذلك عادةً بضع ثوانٍ.",
|
|
62
|
+
"onboarding.builderConnectionDescription": "أكمل الاتصال بنقرة واحدة في النافذة الجديدة.",
|
|
44
63
|
"aboutAgentNative.title": "حول Agent-Native",
|
|
45
64
|
"aboutAgentNative.version": "الإصدار",
|
|
46
65
|
"aboutAgentNative.environment": "البيئة",
|
|
@@ -41,6 +41,25 @@ const messages = {
|
|
|
41
41
|
"onboarding.roleOther": "Andere",
|
|
42
42
|
"onboarding.skipForNow": "Vorerst überspringen",
|
|
43
43
|
"onboarding.saveRoleError": "Deine Rolle konnte nicht gespeichert werden.",
|
|
44
|
+
"onboarding.builderActivateCredits": "Builder.io-Gratiscredits aktivieren",
|
|
45
|
+
"onboarding.builderConnectCredits": "Builder.io-Gratiscredits verbinden",
|
|
46
|
+
"onboarding.builderActivateDescription": "Erstelle oder verwende dein Builder.io-Konto erneut und aktiviere seine Gratiscredits mit einem Klick.",
|
|
47
|
+
"onboarding.builderActiveCredits": "In aktiven Builder.io-Gratiscredits enthalten",
|
|
48
|
+
"onboarding.builderCredits": "In Builder.io-Gratiscredits enthalten",
|
|
49
|
+
"onboarding.builderActivateTitle": "Gratiscredits aktivieren",
|
|
50
|
+
"onboarding.builderAccountExistsTitle": "Du hast bereits ein Builder.io-Konto",
|
|
51
|
+
"onboarding.builderAccountExistsDescription": "Melde dich an, um es zu verbinden.",
|
|
52
|
+
"onboarding.builderActivationDescription": "Wir erstellen dein Builder.io-Konto automatisch für dich mit einem Klick.",
|
|
53
|
+
"onboarding.builderCreateAndActivate": "Erstellen und aktivieren",
|
|
54
|
+
"onboarding.builderConsentPrefix": "Wenn du fortfährst, stimmst du den",
|
|
55
|
+
"onboarding.builderTerms": "Nutzungsbedingungen",
|
|
56
|
+
"onboarding.builderPrivacy": "Datenschutzbestimmungen",
|
|
57
|
+
"onboarding.builderConsentAnd": "und",
|
|
58
|
+
"onboarding.builderExistingAccount": "Ich habe ein Builder.io-Konto",
|
|
59
|
+
"onboarding.builderActivating": "Builder.io-Gratiscredits werden aktiviert",
|
|
60
|
+
"onboarding.builderConnecting": "Builder.io-Gratiscredits werden verbunden",
|
|
61
|
+
"onboarding.builderProvisioningDescription": "Dein Builder.io-Konto wird erstellt oder wiederverwendet. Das dauert normalerweise ein paar Sekunden.",
|
|
62
|
+
"onboarding.builderConnectionDescription": "Schließe die Verbindung mit einem Klick im neuen Fenster ab.",
|
|
44
63
|
"aboutAgentNative.title": "Über Agent-Native",
|
|
45
64
|
"aboutAgentNative.version": "Version",
|
|
46
65
|
"aboutAgentNative.environment": "Umgebung",
|
|
@@ -41,6 +41,25 @@ declare const messages: {
|
|
|
41
41
|
readonly "onboarding.roleOther": "Other";
|
|
42
42
|
readonly "onboarding.skipForNow": "Skip for now";
|
|
43
43
|
readonly "onboarding.saveRoleError": "Could not save your role.";
|
|
44
|
+
readonly "onboarding.builderActivateCredits": "Activate Builder.io free credits";
|
|
45
|
+
readonly "onboarding.builderConnectCredits": "Connect Builder.io free credits";
|
|
46
|
+
readonly "onboarding.builderActivateDescription": "Create or reuse your Builder.io account and activate its free credits in one click.";
|
|
47
|
+
readonly "onboarding.builderActiveCredits": "Included with active Builder.io free credits";
|
|
48
|
+
readonly "onboarding.builderCredits": "Included with Builder.io free credits";
|
|
49
|
+
readonly "onboarding.builderActivateTitle": "Activate free credits";
|
|
50
|
+
readonly "onboarding.builderAccountExistsTitle": "You already have a Builder.io account";
|
|
51
|
+
readonly "onboarding.builderAccountExistsDescription": "Log in to connect it.";
|
|
52
|
+
readonly "onboarding.builderActivationDescription": "We'll automatically create your Builder.io account for you in one click.";
|
|
53
|
+
readonly "onboarding.builderCreateAndActivate": "Create and activate";
|
|
54
|
+
readonly "onboarding.builderConsentPrefix": "By continuing, you agree to Builder.io's";
|
|
55
|
+
readonly "onboarding.builderTerms": "Terms";
|
|
56
|
+
readonly "onboarding.builderPrivacy": "Privacy";
|
|
57
|
+
readonly "onboarding.builderConsentAnd": "and";
|
|
58
|
+
readonly "onboarding.builderExistingAccount": "I have a Builder.io account";
|
|
59
|
+
readonly "onboarding.builderActivating": "Activating Builder.io free credits";
|
|
60
|
+
readonly "onboarding.builderConnecting": "Connecting Builder.io free credits";
|
|
61
|
+
readonly "onboarding.builderProvisioningDescription": "Creating or reusing your Builder.io account. This usually takes a few seconds.";
|
|
62
|
+
readonly "onboarding.builderConnectionDescription": "Finish the one-click connection in the new window.";
|
|
44
63
|
readonly "aboutAgentNative.title": "About Agent-Native";
|
|
45
64
|
readonly "aboutAgentNative.version": "Version";
|
|
46
65
|
readonly "aboutAgentNative.environment": "Environment";
|
|
@@ -41,6 +41,25 @@ const messages = {
|
|
|
41
41
|
"onboarding.roleOther": "Other",
|
|
42
42
|
"onboarding.skipForNow": "Skip for now",
|
|
43
43
|
"onboarding.saveRoleError": "Could not save your role.",
|
|
44
|
+
"onboarding.builderActivateCredits": "Activate Builder.io free credits",
|
|
45
|
+
"onboarding.builderConnectCredits": "Connect Builder.io free credits",
|
|
46
|
+
"onboarding.builderActivateDescription": "Create or reuse your Builder.io account and activate its free credits in one click.",
|
|
47
|
+
"onboarding.builderActiveCredits": "Included with active Builder.io free credits",
|
|
48
|
+
"onboarding.builderCredits": "Included with Builder.io free credits",
|
|
49
|
+
"onboarding.builderActivateTitle": "Activate free credits",
|
|
50
|
+
"onboarding.builderAccountExistsTitle": "You already have a Builder.io account",
|
|
51
|
+
"onboarding.builderAccountExistsDescription": "Log in to connect it.",
|
|
52
|
+
"onboarding.builderActivationDescription": "We'll automatically create your Builder.io account for you in one click.",
|
|
53
|
+
"onboarding.builderCreateAndActivate": "Create and activate",
|
|
54
|
+
"onboarding.builderConsentPrefix": "By continuing, you agree to Builder.io's",
|
|
55
|
+
"onboarding.builderTerms": "Terms",
|
|
56
|
+
"onboarding.builderPrivacy": "Privacy",
|
|
57
|
+
"onboarding.builderConsentAnd": "and",
|
|
58
|
+
"onboarding.builderExistingAccount": "I have a Builder.io account",
|
|
59
|
+
"onboarding.builderActivating": "Activating Builder.io free credits",
|
|
60
|
+
"onboarding.builderConnecting": "Connecting Builder.io free credits",
|
|
61
|
+
"onboarding.builderProvisioningDescription": "Creating or reusing your Builder.io account. This usually takes a few seconds.",
|
|
62
|
+
"onboarding.builderConnectionDescription": "Finish the one-click connection in the new window.",
|
|
44
63
|
"aboutAgentNative.title": "About Agent-Native",
|
|
45
64
|
"aboutAgentNative.version": "Version",
|
|
46
65
|
"aboutAgentNative.environment": "Environment",
|
|
@@ -41,6 +41,25 @@ const messages = {
|
|
|
41
41
|
"onboarding.roleOther": "Otro",
|
|
42
42
|
"onboarding.skipForNow": "Omitir por ahora",
|
|
43
43
|
"onboarding.saveRoleError": "No se pudo guardar tu rol.",
|
|
44
|
+
"onboarding.builderActivateCredits": "Activar créditos gratuitos de Builder.io",
|
|
45
|
+
"onboarding.builderConnectCredits": "Conectar créditos gratuitos de Builder.io",
|
|
46
|
+
"onboarding.builderActivateDescription": "Crea o reutiliza tu cuenta de Builder.io y activa sus créditos gratuitos con un solo clic.",
|
|
47
|
+
"onboarding.builderActiveCredits": "Incluido con créditos gratuitos activos de Builder.io",
|
|
48
|
+
"onboarding.builderCredits": "Incluido con los créditos gratuitos de Builder.io",
|
|
49
|
+
"onboarding.builderActivateTitle": "Activar créditos gratuitos",
|
|
50
|
+
"onboarding.builderAccountExistsTitle": "Ya tienes una cuenta de Builder.io",
|
|
51
|
+
"onboarding.builderAccountExistsDescription": "Inicia sesión para conectarla.",
|
|
52
|
+
"onboarding.builderActivationDescription": "Crearemos automáticamente tu cuenta de Builder.io con un solo clic.",
|
|
53
|
+
"onboarding.builderCreateAndActivate": "Crear y activar",
|
|
54
|
+
"onboarding.builderConsentPrefix": "Al continuar, aceptas los",
|
|
55
|
+
"onboarding.builderTerms": "Términos",
|
|
56
|
+
"onboarding.builderPrivacy": "Privacidad",
|
|
57
|
+
"onboarding.builderConsentAnd": "y",
|
|
58
|
+
"onboarding.builderExistingAccount": "Tengo una cuenta de Builder.io",
|
|
59
|
+
"onboarding.builderActivating": "Activando los créditos gratuitos de Builder.io",
|
|
60
|
+
"onboarding.builderConnecting": "Conectando los créditos gratuitos de Builder.io",
|
|
61
|
+
"onboarding.builderProvisioningDescription": "Creando o reutilizando tu cuenta de Builder.io. Esto suele tardar unos segundos.",
|
|
62
|
+
"onboarding.builderConnectionDescription": "Finaliza la conexión con un clic en la nueva ventana.",
|
|
44
63
|
"aboutAgentNative.title": "Acerca de Agent-Native",
|
|
45
64
|
"aboutAgentNative.version": "Versión",
|
|
46
65
|
"aboutAgentNative.environment": "Entorno",
|