@agent-native/core 0.141.6 → 0.144.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent-native.eject.json +9 -0
- package/corpus/README.md +1 -1
- package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +3 -14
- package/corpus/templates/analytics/.agents/skills/data-querying/SKILL.md +11 -6
- package/corpus/templates/analytics/.agents/skills/prometheus/SKILL.md +5 -5
- package/corpus/templates/analytics/.agents/skills/provider-api/SKILL.md +19 -0
- package/corpus/templates/analytics/.agents/skills/turn-into-app/SKILL.md +296 -0
- package/corpus/templates/analytics/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
- package/corpus/templates/analytics/.agents/skills/turn-into-skill/SKILL.md +112 -0
- package/corpus/templates/analytics/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
- package/corpus/templates/analytics/AGENTS.md +37 -40
- package/corpus/templates/analytics/actions/compose-dashboard.ts +1 -1
- package/corpus/templates/analytics/actions/ensure-native-v2-dashboards.ts +1 -1
- package/corpus/templates/analytics/actions/list-dashboard-usage-stats.ts +17 -22
- package/corpus/templates/analytics/actions/migrate-first-party-analytics-to-bigquery.ts +135 -0
- package/corpus/templates/analytics/actions/navigate.ts +5 -6
- package/corpus/templates/analytics/actions/provider-api-register.ts +50 -0
- package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +46 -13
- package/corpus/templates/analytics/actions/test-custom-api-connection.ts +106 -0
- package/corpus/templates/analytics/actions/update-dashboard.ts +0 -1
- package/corpus/templates/analytics/actions/view-screen.ts +0 -20
- package/corpus/templates/analytics/app/components/CustomApiCard.tsx +430 -0
- package/corpus/templates/analytics/app/components/layout/Header.tsx +0 -1
- package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +5 -5
- package/corpus/templates/analytics/app/i18n-data.ts +682 -90
- package/corpus/templates/analytics/app/lib/native-mcp-exclusions.ts +6 -0
- package/corpus/templates/analytics/app/lib/sql-query.ts +33 -6
- package/corpus/templates/analytics/app/pages/Agents.tsx +0 -3
- package/corpus/templates/analytics/app/pages/DataSources.tsx +4 -0
- package/corpus/templates/analytics/app/pages/Settings.tsx +22 -43
- package/corpus/templates/analytics/app/pages/settings/settings-search.ts +23 -20
- package/corpus/templates/analytics/app/routes/extensions._index.tsx +1 -1
- package/corpus/templates/analytics/app/routes/settings.$.tsx +1 -0
- package/corpus/templates/analytics/app/routes/team.tsx +1 -1
- package/corpus/templates/analytics/changelog/2026-08-05-settings-no-longer-includes-an-unnecessary-about-section.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-06-analytics-dashboards-load-reliably-during-background-data-sw.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-06-analytics-dashboards-remain-responsive-while-historical-data.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-06-analytics-query-results-now-render-as-a-table-with-csv-downl.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-06-connect-public-https-custom-apis-and-hand-tested-endpoints-t.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-06-durable-agent-worker-memory.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-06-live-dashboard-panels-use-the-shared-query-timeout.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-06-on-demand-billing-is-available-as-a-native-dashboard-with-ta.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-06-visible-dashboard-names-are-unique.md +6 -0
- package/corpus/templates/analytics/docs/schemas/first-party-analytics.md +1 -1
- package/corpus/templates/analytics/netlify.toml +7 -0
- package/corpus/templates/analytics/scripts/emit-netlify-dashboard-report-cron.ts +4 -0
- package/corpus/templates/analytics/scripts/first-party-analytics-bigquery.sql +104 -0
- package/corpus/templates/analytics/server/db/index.ts +27 -0
- package/corpus/templates/analytics/server/db/schema.ts +10 -0
- package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +0 -2
- package/corpus/templates/analytics/server/lib/dashboards-store.ts +227 -60
- package/corpus/templates/analytics/server/lib/first-party-analytics-backend.ts +1147 -0
- package/corpus/templates/analytics/server/lib/first-party-analytics-health.ts +34 -15
- package/corpus/templates/analytics/server/lib/first-party-analytics.ts +57 -4
- package/corpus/templates/analytics/server/lib/native-v2-dashboards.ts +227 -1
- package/corpus/templates/analytics/server/lib/real-data-actions.ts +1 -3
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +7 -4
- package/corpus/templates/analytics/server/plugins/analytics-rollup-backfill-jobs.ts +1 -0
- package/corpus/templates/analytics/server/plugins/db.ts +52 -18
- package/corpus/templates/assets/.agents/skills/asset-generation/SKILL.md +36 -8
- package/corpus/templates/assets/.agents/skills/image-generation/SKILL.md +16 -1
- package/corpus/templates/assets/.agents/skills/library-management/SKILL.md +16 -1
- package/corpus/templates/assets/.agents/skills/turn-into-app/SKILL.md +296 -0
- package/corpus/templates/assets/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
- package/corpus/templates/assets/.agents/skills/turn-into-skill/SKILL.md +112 -0
- package/corpus/templates/assets/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
- package/corpus/templates/assets/AGENTS.md +1 -0
- package/corpus/templates/assets/actions/_helpers.ts +12 -0
- package/corpus/templates/assets/actions/generate-image.ts +9 -3
- package/corpus/templates/assets/actions/import-style-from-url.ts +115 -0
- package/corpus/templates/assets/app/hooks/use-navigation-state.ts +3 -1
- package/corpus/templates/assets/app/routes/extensions._index.tsx +1 -1
- package/corpus/templates/assets/app/routes/settings.$.tsx +1 -0
- package/corpus/templates/assets/app/routes/settings.tsx +5 -0
- package/corpus/templates/assets/app/routes/team.tsx +1 -1
- package/corpus/templates/assets/changelog/2026-08-05-brand-kits-can-import-a-website-s-hydrated-visual-language-a.md +6 -0
- package/corpus/templates/assets/changelog/2026-08-05-generated-images-now-hand-off-embeddable-previews-to-other-w.md +6 -0
- package/corpus/templates/assets/server/lib/generation.ts +58 -0
- package/corpus/templates/assets/shared/api.ts +12 -0
- package/corpus/templates/brain/.agents/skills/turn-into-app/SKILL.md +296 -0
- package/corpus/templates/brain/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
- package/corpus/templates/brain/.agents/skills/turn-into-skill/SKILL.md +112 -0
- package/corpus/templates/brain/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
- package/corpus/templates/brain/actions/list-connection-providers.ts +24 -3
- package/corpus/templates/brain/app/lib/dispatch-links.ts +44 -0
- package/corpus/templates/brain/app/routes/extensions._index.tsx +1 -1
- package/corpus/templates/brain/app/routes/sources.tsx +15 -7
- package/corpus/templates/brain/app/routes/team.tsx +1 -1
- package/corpus/templates/brain/app/routes.ts +1 -1
- package/corpus/templates/brain/changelog/2026-08-06-brain-provider-setup-links-open-dispatch-correctly-in-standa.md +6 -0
- package/corpus/templates/brain/server/plugins/agent-chat.ts +1 -0
- package/corpus/templates/calendar/.agents/skills/event-management/SKILL.md +26 -0
- package/corpus/templates/calendar/.agents/skills/turn-into-app/SKILL.md +296 -0
- package/corpus/templates/calendar/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
- package/corpus/templates/calendar/.agents/skills/turn-into-skill/SKILL.md +112 -0
- package/corpus/templates/calendar/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
- package/corpus/templates/calendar/AGENTS.md +11 -32
- package/corpus/templates/calendar/actions/update-event.ts +107 -1
- package/corpus/templates/calendar/app/components/calendar/EventCalendarSelect.tsx +83 -0
- package/corpus/templates/calendar/app/components/calendar/EventDetailPanel.tsx +57 -0
- package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +59 -73
- package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +3 -1
- package/corpus/templates/calendar/app/hooks/use-events.ts +4 -1
- package/corpus/templates/calendar/app/i18n-data.ts +20 -0
- package/corpus/templates/calendar/app/routes/_app.extensions._index.tsx +1 -1
- package/corpus/templates/calendar/app/routes/_app.settings.$.tsx +1 -0
- package/corpus/templates/calendar/app/routes/_app.team.tsx +1 -1
- package/corpus/templates/calendar/changelog/2026-08-06-delegated-requests-continue-in-the-background.md +6 -0
- package/corpus/templates/calendar/changelog/2026-08-06-existing-events-can-move-between-connected-google-account-ca.md +6 -0
- package/corpus/templates/calendar/server/lib/google-calendar.ts +101 -0
- package/corpus/templates/calendar/server/plugins/agent-chat.ts +7 -1
- package/corpus/templates/chat/.agents/skills/turn-into-app/SKILL.md +296 -0
- package/corpus/templates/chat/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
- package/corpus/templates/chat/.agents/skills/turn-into-skill/SKILL.md +112 -0
- package/corpus/templates/chat/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
- package/corpus/templates/chat/app/components/layout/Layout.tsx +1 -1
- package/corpus/templates/chat/app/hooks/use-navigation-state.ts +1 -1
- package/corpus/templates/chat/app/root.tsx +1 -1
- package/corpus/templates/chat/app/routes/agent.tsx +7 -7
- package/corpus/templates/chat/app/routes/extensions._index.tsx +1 -1
- package/corpus/templates/chat/app/routes/settings.$.tsx +1 -0
- package/corpus/templates/chat/app/routes/team.tsx +1 -1
- package/corpus/templates/clips/.agents/skills/turn-into-app/SKILL.md +296 -0
- package/corpus/templates/clips/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
- package/corpus/templates/clips/.agents/skills/turn-into-skill/SKILL.md +112 -0
- package/corpus/templates/clips/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
- package/corpus/templates/clips/app/components/editor/editor-layout.tsx +9 -24
- package/corpus/templates/clips/app/components/editor/timeline-geometry.ts +15 -0
- package/corpus/templates/clips/app/components/editor/waveform.tsx +4 -17
- package/corpus/templates/clips/app/components/library/library-layout.tsx +1 -1
- package/corpus/templates/clips/app/components/player/delete-recording-menu.tsx +14 -3
- package/corpus/templates/clips/app/components/player/transcript-panel.tsx +1 -1
- package/corpus/templates/clips/app/components/recorder/storage-setup-card.tsx +1 -1
- package/corpus/templates/clips/app/routes/_app.extensions._index.tsx +1 -1
- package/corpus/templates/clips/app/routes/_app.settings.$.tsx +1 -0
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +28 -38
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +21 -27
- package/corpus/templates/clips/changelog/2026-08-06-clips-recovers-from-stalled-recording-setup-without-requirin.md +6 -0
- package/corpus/templates/clips/changelog/2026-08-06-clips-starts-faster-after-a-deploy-or-idle-period-startup-no.md +6 -0
- package/corpus/templates/clips/changelog/2026-08-06-deleting-a-recording-returns-cleanly-to-the-library-and-fit-.md +6 -0
- package/corpus/templates/clips/changelog/2026-08-06-hide-clip-insights-from-viewers-without-analytics-access.md +6 -0
- package/corpus/templates/clips/desktop/src/app.tsx +48 -20
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +275 -74
- package/corpus/templates/clips/desktop/src/lib/recording-start-guard.ts +84 -0
- package/corpus/templates/clips/desktop/src/overlays/toolbar.tsx +14 -4
- package/corpus/templates/clips/server/plugins/db.ts +214 -26
- package/corpus/templates/content/.agents/skills/turn-into-app/SKILL.md +296 -0
- package/corpus/templates/content/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
- package/corpus/templates/content/.agents/skills/turn-into-skill/SKILL.md +112 -0
- package/corpus/templates/content/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
- package/corpus/templates/content/app/routes/_app.extensions._index.tsx +1 -1
- package/corpus/templates/content/app/routes/_app.settings.$.tsx +1 -0
- package/corpus/templates/content/app/routes/_app.team.tsx +1 -1
- package/corpus/templates/content/e2e/global-setup.ts +1 -1
- package/corpus/templates/crm/.agents/skills/turn-into-app/SKILL.md +296 -0
- package/corpus/templates/crm/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
- package/corpus/templates/crm/.agents/skills/turn-into-skill/SKILL.md +112 -0
- package/corpus/templates/crm/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
- package/corpus/templates/crm/changelog/2026-08-06-crm-starts-faster-after-a-deploy-or-idle-period-one-time-dat.md +6 -0
- package/corpus/templates/crm/server/plugins/db.ts +11 -8
- package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +36 -1
- package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +6 -1
- package/corpus/templates/design/.agents/skills/turn-into-app/SKILL.md +296 -0
- package/corpus/templates/design/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
- package/corpus/templates/design/.agents/skills/turn-into-skill/SKILL.md +112 -0
- package/corpus/templates/design/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
- package/corpus/templates/design/actions/analyze-brand-assets.ts +7 -7
- package/corpus/templates/design/actions/import-from-url.ts +6 -5
- package/corpus/templates/design/app/components/design/LayersPanel.tsx +27 -18
- package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +2 -2
- package/corpus/templates/design/app/pages/Index.tsx +6 -2
- package/corpus/templates/design/app/routes/extensions._index.tsx +1 -1
- package/corpus/templates/design/app/routes/settings.$.tsx +1 -0
- package/corpus/templates/design/app/routes/team.tsx +1 -1
- package/corpus/templates/design/changelog/2026-08-05-deleting-a-design-from-the-home-page-no-longer-leaves-the-ap.md +6 -0
- package/corpus/templates/design/changelog/2026-08-05-renaming-a-layer-now-focuses-its-name-field-automatically.md +6 -0
- package/corpus/templates/design/changelog/2026-08-05-website-url-imports-now-capture-hydrated-browser-computed-de.md +6 -0
- package/corpus/templates/design/e2e/global-setup.ts +1 -1
- package/corpus/templates/design/server/plugins/agent-chat.ts +2 -0
- package/corpus/templates/dispatch/.agents/skills/turn-into-app/SKILL.md +296 -0
- package/corpus/templates/dispatch/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
- package/corpus/templates/dispatch/.agents/skills/turn-into-skill/SKILL.md +112 -0
- package/corpus/templates/dispatch/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
- package/corpus/templates/dispatch/app/hooks/use-navigation-state.ts +1 -1
- package/corpus/templates/dispatch/app/routes/settings.$.tsx +1 -0
- package/corpus/templates/dispatch/app/routes/team.tsx +1 -1
- package/corpus/templates/dispatch/changelog/2026-08-06-ready-workspace-apps-stay-one-click-away-in-a-compact-dispat.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-08-06-shared-vault-values-and-management-are-now-restricted-to-wor.md +6 -0
- package/corpus/templates/factory/.agents/skills/turn-into-app/SKILL.md +296 -0
- package/corpus/templates/factory/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
- package/corpus/templates/factory/.agents/skills/turn-into-skill/SKILL.md +112 -0
- package/corpus/templates/factory/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
- package/corpus/templates/factory/app/hooks/use-navigation-state.ts +1 -1
- package/corpus/templates/factory/app/routes/extensions._index.tsx +1 -1
- package/corpus/templates/factory/app/routes/settings.$.tsx +1 -0
- package/corpus/templates/factory/app/routes/team.tsx +1 -1
- package/corpus/templates/forms/.agents/skills/turn-into-app/SKILL.md +296 -0
- package/corpus/templates/forms/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
- package/corpus/templates/forms/.agents/skills/turn-into-skill/SKILL.md +112 -0
- package/corpus/templates/forms/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
- package/corpus/templates/forms/app/routes/_app.extensions._index.tsx +1 -1
- package/corpus/templates/forms/app/routes/_app.settings.$.tsx +1 -0
- package/corpus/templates/forms/app/routes/_app.team.tsx +1 -1
- package/corpus/templates/forms/changelog/2026-08-06-delegated-requests-continue-in-the-background.md +6 -0
- package/corpus/templates/forms/server/plugins/agent-chat.ts +4 -0
- package/corpus/templates/forms/shared/navigation.ts +1 -1
- package/corpus/templates/macros/.agents/skills/turn-into-app/SKILL.md +296 -0
- package/corpus/templates/macros/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
- package/corpus/templates/macros/.agents/skills/turn-into-skill/SKILL.md +112 -0
- package/corpus/templates/macros/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
- package/corpus/templates/macros/app/routes/extensions._index.tsx +1 -1
- package/corpus/templates/macros/app/routes/settings.$.tsx +1 -0
- package/corpus/templates/macros/app/routes/team.tsx +1 -1
- package/corpus/templates/mail/.agents/skills/turn-into-app/SKILL.md +296 -0
- package/corpus/templates/mail/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
- package/corpus/templates/mail/.agents/skills/turn-into-skill/SKILL.md +112 -0
- package/corpus/templates/mail/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
- package/corpus/templates/mail/app/routes/extensions._index.tsx +1 -1
- package/corpus/templates/mail/app/routes/settings.$.tsx +1 -0
- package/corpus/templates/mail/changelog/2026-08-06-delegated-requests-continue-in-the-background.md +6 -0
- package/corpus/templates/mail/server/plugins/agent-chat.ts +6 -0
- package/corpus/templates/plan/.agents/skills/turn-into-app/SKILL.md +296 -0
- package/corpus/templates/plan/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
- package/corpus/templates/plan/.agents/skills/turn-into-skill/SKILL.md +112 -0
- package/corpus/templates/plan/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
- package/corpus/templates/plan/app/hooks/use-navigation-state.ts +1 -1
- package/corpus/templates/plan/app/routes/extensions._index.tsx +1 -1
- package/corpus/templates/plan/app/routes/settings.$.tsx +1 -0
- package/corpus/templates/plan/app/routes/team.tsx +1 -1
- package/corpus/templates/slides/.agents/skills/create-deck/SKILL.md +48 -5
- package/corpus/templates/slides/.agents/skills/design-systems/SKILL.md +40 -2
- package/corpus/templates/slides/.agents/skills/image-generation-via-a2a/SKILL.md +6 -0
- package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +15 -2
- package/corpus/templates/slides/.agents/skills/slide-images/SKILL.md +29 -24
- package/corpus/templates/slides/.agents/skills/turn-into-app/SKILL.md +296 -0
- package/corpus/templates/slides/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
- package/corpus/templates/slides/.agents/skills/turn-into-skill/SKILL.md +112 -0
- package/corpus/templates/slides/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
- package/corpus/templates/slides/AGENTS.md +7 -9
- package/corpus/templates/slides/_gitignore +1 -0
- package/corpus/templates/slides/actions/analyze-brand-assets.ts +7 -7
- package/corpus/templates/slides/actions/export-pptx.ts +402 -36
- package/corpus/templates/slides/actions/import-file.ts +46 -85
- package/corpus/templates/slides/actions/import-from-url.ts +6 -6
- package/corpus/templates/slides/actions/import-google-slides-reference.ts +271 -12
- package/corpus/templates/slides/actions/import-pptx.ts +85 -60
- package/corpus/templates/slides/app/components/deck/DeckCard.tsx +10 -13
- package/corpus/templates/slides/app/components/design-system/DesignSystemSetup.tsx +1 -1
- package/corpus/templates/slides/app/components/editor/AddSlidePopover.tsx +5 -1
- package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +25 -12
- package/corpus/templates/slides/app/components/editor/ExportMenu.tsx +112 -57
- package/corpus/templates/slides/app/components/editor/GoogleDriveConnectionCta.tsx +202 -0
- package/corpus/templates/slides/app/components/editor/GoogleSlidesReferenceImport.tsx +26 -14
- package/corpus/templates/slides/app/components/editor/PromptDialog.tsx +176 -0
- package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +182 -141
- package/corpus/templates/slides/app/components/editor/canvas-interactions/index.ts +1 -0
- package/corpus/templates/slides/app/components/editor/canvas-interactions/slides-canvas-adapter.ts +18 -0
- package/corpus/templates/slides/app/components/editor/slide-text-targets.ts +85 -0
- package/corpus/templates/slides/app/components/layout/Layout.tsx +3 -0
- package/corpus/templates/slides/app/components/onboarding/FirstDeckOnboardingFlow.tsx +13 -3
- package/corpus/templates/slides/app/components/presentation/PresentationView.tsx +27 -1
- package/corpus/templates/slides/app/context/DeckContext.tsx +71 -20
- package/corpus/templates/slides/app/global.css +6 -0
- package/corpus/templates/slides/app/i18n/en-US.ts +1 -0
- package/corpus/templates/slides/app/lib/create-deck-generation.ts +10 -6
- package/corpus/templates/slides/app/lib/deck-preview-frame.ts +15 -0
- package/corpus/templates/slides/app/lib/deck-share-links.ts +9 -0
- package/corpus/templates/slides/app/lib/export-pptx-client.ts +89 -0
- package/corpus/templates/slides/app/lib/slide-animation-elements.ts +3 -0
- package/corpus/templates/slides/app/pages/DeckEditor.tsx +17 -0
- package/corpus/templates/slides/app/pages/Index.tsx +107 -6
- package/corpus/templates/slides/app/routes/extensions._index.tsx +1 -1
- package/corpus/templates/slides/app/routes/settings.$.tsx +1 -0
- package/corpus/templates/slides/app/routes/team.tsx +1 -1
- package/corpus/templates/slides/changelog/2026-08-05-failed-deck-creation-and-reference-uploads-now-recover-clean.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-05-slides-recover-completed-generation-results-after-a-sync-hic.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-05-website-url-imports-now-capture-hydrated-browser-computed-st.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-06-clicking-the-gray-canvas-around-a-slide-clears-its-selection.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-06-deck-thumbnails-keep-a-consistent-listing-frame-across-aspec.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-06-deep-linked-decks-open-directly-instead-of-being-interrupted.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-06-google-slides-exports-now-show-clear-import-steps-when-direc.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-06-import-pdf-google-slides-and-powerpoint-decks-directly-from-.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-06-imported-powerpoint-exports-keep-text-and-images-editable-an.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-06-presentation-prompts-continue-adding-rendered-slides-until-t.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-06-public-decks-now-share-read-only-presentation-links-by-defau.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-06-slides-offers-a-direct-connect-google-button-when-a-drive-co.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-06-slides-preserve-uploaded-pdf-layouts-accept-larger-reference.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-06-styled-words-stay-part-of-their-text-box-instead-of-becoming.md +6 -0
- package/corpus/templates/slides/server/handlers/google-docs-auth.ts +7 -20
- package/corpus/templates/slides/server/handlers/import/html-converter.ts +236 -13
- package/corpus/templates/slides/server/handlers/import/pptx-assets.ts +67 -0
- package/corpus/templates/slides/server/handlers/import/pptx-parser.ts +2 -0
- package/corpus/templates/slides/server/handlers/uploads.ts +7 -3
- package/corpus/templates/slides/server/lib/chat-attachments.ts +6 -3
- package/corpus/templates/slides/server/lib/emails.ts +7 -2
- package/corpus/templates/slides/server/lib/google-docs-error.ts +50 -0
- package/corpus/templates/slides/server/lib/google-docs-oauth.ts +1 -0
- package/corpus/templates/slides/server/lib/import-asset-storage.ts +127 -0
- package/corpus/templates/slides/server/plugins/agent-chat.ts +4 -3
- package/corpus/templates/slides/server/routes/api/import-assets/[token].get.ts +70 -0
- package/corpus/templates/slides/shared/upload-types.ts +3 -0
- package/corpus/templates/tasks/.agents/skills/turn-into-app/SKILL.md +296 -0
- package/corpus/templates/tasks/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
- package/corpus/templates/tasks/.agents/skills/turn-into-skill/SKILL.md +112 -0
- package/corpus/templates/tasks/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
- package/corpus/templates/tasks/app/components/layout/Header.tsx +3 -1
- package/corpus/templates/tasks/app/routes/extensions._index.tsx +1 -1
- package/corpus/templates/tasks/app/routes/settings.$.tsx +1 -0
- package/dist/agent/engine/ai-sdk-engine.js +49 -3
- package/dist/agent/production-agent.d.ts +18 -0
- package/dist/agent/production-agent.js +80 -1
- package/dist/agent/types.d.ts +7 -0
- package/dist/cli/agent-plugin.d.ts +112 -0
- package/dist/cli/agent-plugin.js +1081 -0
- package/dist/cli/app-skill.js +39 -1
- package/dist/cli/code-agent-executor.d.ts +3 -0
- package/dist/cli/code-agent-executor.js +51 -13
- package/dist/cli/index.js +13 -0
- package/dist/cli/templates-meta.js +1 -1
- package/dist/client/AgentPanel.d.ts +3 -1
- package/dist/client/AgentPanel.js +9 -2
- package/dist/client/AssistantChat.d.ts +8 -0
- package/dist/client/AssistantChat.js +23 -8
- package/dist/client/NewWorkspaceAppFlow.js +1 -0
- package/dist/client/agent-chat-adapter.d.ts +1 -1
- package/dist/client/agent-chat-adapter.js +153 -7
- package/dist/client/agent-page/AgentWorkspaceContent.d.ts +1 -1
- package/dist/client/agent-page/AgentWorkspaceContent.js +13 -13
- package/dist/client/assistant-ui-recovery.d.ts +2 -1
- package/dist/client/assistant-ui-recovery.js +7 -3
- package/dist/client/chat/run-recovery.js +5 -1
- package/dist/client/embed-auth.js +6 -2
- package/dist/client/error-format.js +12 -0
- package/dist/client/integrations/IntegrationsPanel.js +40 -6
- package/dist/client/onboarding/FirstRunOnboarding.js +11 -4
- package/dist/client/org/OrgSwitcher.js +2 -2
- package/dist/client/org/TeamPage.js +92 -72
- package/dist/client/require-session.d.ts +1 -1
- package/dist/client/require-session.js +4 -4
- package/dist/client/resources/McpConnectionSuggestion.d.ts +1 -0
- package/dist/client/resources/McpConnectionSuggestion.js +27 -10
- package/dist/client/resources/McpIntegrationDialog.js +77 -45
- package/dist/client/resources/mcp-integration-catalog.d.ts +13 -1
- package/dist/client/resources/mcp-integration-catalog.js +255 -2
- package/dist/client/resources/mcp-integration-logos.js +18 -2
- package/dist/client/resources/use-mcp-servers.d.ts +5 -0
- package/dist/client/resources/use-mcp-servers.js +36 -0
- package/dist/client/settings/AccountSettingsCard.js +42 -36
- package/dist/client/settings/AutomationsSection.js +1 -1
- package/dist/client/settings/DemoModeSection.d.ts +3 -1
- package/dist/client/settings/DemoModeSection.js +4 -1
- package/dist/client/settings/ExtensionsSettingsContent.js +1 -1
- package/dist/client/settings/SchedulingTimezoneField.d.ts +3 -1
- package/dist/client/settings/SchedulingTimezoneField.js +9 -5
- package/dist/client/settings/SettingsPanel.d.ts +4 -1
- package/dist/client/settings/SettingsPanel.js +21 -21
- package/dist/client/settings/SettingsTabsPage.d.ts +2 -2
- package/dist/client/settings/SettingsTabsPage.js +98 -45
- package/dist/client/settings/VoiceTranscriptionSection.js +6 -1
- package/dist/client/settings/useSettingsPanelController.js +47 -8
- package/dist/collab/routes.d.ts +1 -1
- package/dist/db/client.d.ts +9 -0
- package/dist/db/client.js +51 -16
- package/dist/db/create-get-db.js +2 -2
- package/dist/db/ddl-guard.d.ts +11 -10
- package/dist/db/ddl-guard.js +40 -12
- package/dist/deploy/build.d.ts +2 -0
- package/dist/deploy/build.js +97 -4
- package/dist/deploy/workspace-deploy.js +0 -2
- package/dist/guards/no-env-credentials.js +9 -0
- package/dist/ingestion/index.d.ts +1 -1
- package/dist/ingestion/pptx.d.ts +68 -0
- package/dist/ingestion/pptx.js +660 -213
- package/dist/ingestion/website.d.ts +30 -0
- package/dist/integrations/plugin.js +9 -6
- package/dist/localization/default-messages.d.ts +59 -0
- package/dist/localization/default-messages.js +62 -2
- package/dist/mcp/screen-memory-stdio.d.ts +7 -7
- package/dist/mcp-client/oauth-routes.d.ts +2 -0
- package/dist/mcp-client/oauth-routes.js +74 -7
- package/dist/mcp-client/routes.d.ts +1 -0
- package/dist/mcp-client/routes.js +49 -0
- package/dist/navigation/index.js +16 -5
- package/dist/notifications/routes.d.ts +1 -1
- package/dist/observability/routes.d.ts +3 -3
- package/dist/onboarding/app-profile.js +11 -0
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +13 -13
- package/dist/provider-api/actions/provider-api.d.ts +11 -11
- package/dist/resources/store.js +15 -1
- package/dist/scripts/call-agent.js +45 -4
- package/dist/secrets/routes.d.ts +6 -6
- package/dist/server/agent-chat/action-filters-a2a.d.ts +1 -1
- package/dist/server/agent-chat/action-filters-a2a.js +36 -1
- package/dist/server/agent-chat-plugin.js +29 -8
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/auth.js +55 -17
- package/dist/server/better-auth-instance.js +5 -3
- package/dist/server/core-routes-plugin.d.ts +8 -1
- package/dist/server/core-routes-plugin.js +28 -3
- package/dist/server/credential-provider.d.ts +3 -3
- package/dist/server/credential-provider.js +90 -4
- package/dist/server/identity-sso.js +2 -1
- package/dist/server/onboarding-html.d.ts +2 -0
- package/dist/server/onboarding-html.js +171 -62
- package/dist/server/realtime-token.d.ts +1 -1
- package/dist/server/self-dispatch.d.ts +5 -4
- package/dist/server/self-dispatch.js +25 -14
- package/dist/server/ssr-handler.d.ts +1 -1
- package/dist/server/ssr-handler.js +1 -1
- package/dist/server/workspace-provider-oauth.js +1 -1
- package/dist/setup-connections/onboarding.js +1 -1
- package/dist/shared/cache-control.d.ts +26 -2
- package/dist/shared/cache-control.js +43 -2
- package/dist/shared/index.d.ts +1 -1
- package/dist/shared/index.js +1 -1
- package/dist/shared/password-policy.d.ts +3 -0
- package/dist/shared/password-policy.js +3 -0
- package/dist/shared/sign-in-journey.d.ts +5 -2
- package/dist/shared/sign-in-journey.js +10 -4
- package/dist/sharing/actions/set-resource-visibility.js +16 -4
- package/dist/sharing/registry.d.ts +14 -0
- package/dist/styles/agent-native.css +6 -0
- package/dist/templates/chat/.agents/skills/turn-into-app/SKILL.md +296 -0
- package/dist/templates/chat/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
- package/dist/templates/chat/.agents/skills/turn-into-skill/SKILL.md +112 -0
- package/dist/templates/chat/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
- package/dist/templates/chat/app/components/layout/Layout.tsx +1 -1
- package/dist/templates/chat/app/hooks/use-navigation-state.ts +1 -1
- package/dist/templates/chat/app/root.tsx +1 -1
- package/dist/templates/chat/app/routes/agent.tsx +7 -7
- package/dist/templates/chat/app/routes/extensions._index.tsx +1 -1
- package/dist/templates/chat/app/routes/settings.$.tsx +1 -0
- package/dist/templates/chat/app/routes/team.tsx +1 -1
- package/dist/templates/default/.agents/skills/turn-into-app/SKILL.md +296 -0
- package/dist/templates/default/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
- package/dist/templates/default/.agents/skills/turn-into-skill/SKILL.md +112 -0
- package/dist/templates/default/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
- package/dist/templates/headless/.agents/skills/turn-into-app/SKILL.md +296 -0
- package/dist/templates/headless/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
- package/dist/templates/headless/.agents/skills/turn-into-skill/SKILL.md +112 -0
- package/dist/templates/headless/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
- package/dist/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +6 -0
- package/dist/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +37 -6
- package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +4 -2
- package/dist/templates/workspace-core/.agents/skills/performance/SKILL.md +51 -0
- package/dist/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +296 -0
- package/dist/templates/workspace-core/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
- package/dist/templates/workspace-core/.agents/skills/turn-into-skill/SKILL.md +112 -0
- package/dist/templates/workspace-core/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
- package/dist/templates/workspace-root/AGENTS.md +7 -0
- package/dist/user-profile/actions/change-password.js +8 -3
- package/dist/user-profile/actions/set-password.js +5 -1
- package/dist/vite/action-types-plugin.js +59 -0
- package/docs/content/authentication.mdx +4 -5
- package/docs/content/skills-guide.mdx +13 -0
- package/docs/content/template-analytics-developers.mdx +1 -1
- package/docs/content/template-calendar-developers.mdx +1 -1
- package/docs/content/template-chat-developers.mdx +2 -2
- package/docs/content/template-content-developers.mdx +1 -1
- package/docs/content/template-mail-developers.mdx +1 -1
- package/docs/content/template-plan-developers.mdx +1 -1
- package/docs/content/toolkit-command-navigation.mdx +6 -6
- package/docs/content/toolkit-org-team.mdx +1 -1
- package/docs/content/toolkit-settings.mdx +8 -8
- package/docs/content/toolkit-setup-connections.mdx +1 -1
- package/package.json +6 -2
- package/src/templates/chat/.agents/skills/turn-into-app/SKILL.md +296 -0
- package/src/templates/chat/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
- package/src/templates/chat/.agents/skills/turn-into-skill/SKILL.md +112 -0
- package/src/templates/chat/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
- package/src/templates/chat/app/components/layout/Layout.tsx +1 -1
- package/src/templates/chat/app/hooks/use-navigation-state.ts +1 -1
- package/src/templates/chat/app/root.tsx +1 -1
- package/src/templates/chat/app/routes/agent.tsx +7 -7
- package/src/templates/chat/app/routes/extensions._index.tsx +1 -1
- package/src/templates/chat/app/routes/settings.$.tsx +1 -0
- package/src/templates/chat/app/routes/team.tsx +1 -1
- package/src/templates/default/.agents/skills/turn-into-app/SKILL.md +296 -0
- package/src/templates/default/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
- package/src/templates/default/.agents/skills/turn-into-skill/SKILL.md +112 -0
- package/src/templates/default/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
- package/src/templates/headless/.agents/skills/turn-into-app/SKILL.md +296 -0
- package/src/templates/headless/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
- package/src/templates/headless/.agents/skills/turn-into-skill/SKILL.md +112 -0
- package/src/templates/headless/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
- package/src/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +6 -0
- package/src/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +37 -6
- package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +4 -2
- package/src/templates/workspace-core/.agents/skills/performance/SKILL.md +51 -0
- package/src/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +296 -0
- package/src/templates/workspace-core/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
- package/src/templates/workspace-core/.agents/skills/turn-into-skill/SKILL.md +112 -0
- package/src/templates/workspace-core/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
- package/src/templates/workspace-root/AGENTS.md +7 -0
- package/corpus/templates/analytics/.agents/skills/dashboard-management/references/template-catalog-and-demo.md +0 -62
- package/corpus/templates/analytics/actions/install-dashboard-template.ts +0 -369
- package/corpus/templates/analytics/actions/list-dashboard-templates.ts +0 -47
- package/corpus/templates/analytics/actions/list-native-v2-dashboard-templates.ts +0 -34
- package/corpus/templates/analytics/app/routes/catalog.tsx +0 -240
- package/src/templates/default/actions/navigate.spec.ts +0 -53
|
@@ -59,6 +59,29 @@ function createAbortError(): Error {
|
|
|
59
59
|
return error;
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
+
function createDeadlineSignal(
|
|
63
|
+
parentSignal: AbortSignal | undefined,
|
|
64
|
+
timeoutMs: number,
|
|
65
|
+
): { signal: AbortSignal; cleanup: () => void } {
|
|
66
|
+
const controller = new AbortController();
|
|
67
|
+
const abortFromParent = () => controller.abort(parentSignal?.reason);
|
|
68
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
69
|
+
|
|
70
|
+
if (parentSignal?.aborted) {
|
|
71
|
+
abortFromParent();
|
|
72
|
+
} else {
|
|
73
|
+
parentSignal?.addEventListener("abort", abortFromParent, { once: true });
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return {
|
|
77
|
+
signal: controller.signal,
|
|
78
|
+
cleanup: () => {
|
|
79
|
+
clearTimeout(timer);
|
|
80
|
+
parentSignal?.removeEventListener("abort", abortFromParent);
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
|
|
62
85
|
function createSqlQueryRelease(pool: SqlQuerySlotPool): () => void {
|
|
63
86
|
let released = false;
|
|
64
87
|
return () => {
|
|
@@ -117,21 +140,25 @@ export async function executeSqlQuery(
|
|
|
117
140
|
signal?: AbortSignal,
|
|
118
141
|
options?: { reportScreenshot?: boolean },
|
|
119
142
|
): Promise<SqlQueryResult> {
|
|
120
|
-
const
|
|
143
|
+
const deadline = createDeadlineSignal(
|
|
144
|
+
signal,
|
|
145
|
+
DASHBOARD_REPORT_ACTION_TIMEOUT_MS,
|
|
146
|
+
);
|
|
147
|
+
let release: (() => void) | undefined;
|
|
121
148
|
let data: DashboardPanelQueryResponse;
|
|
122
149
|
try {
|
|
150
|
+
release = await acquireSqlQuerySlot(source, deadline.signal);
|
|
123
151
|
data = await callAction<DashboardPanelQueryResponse>(
|
|
124
152
|
"query-dashboard-panel",
|
|
125
153
|
{ query: sql, source },
|
|
126
154
|
{
|
|
127
|
-
signal,
|
|
128
|
-
|
|
129
|
-
? { timeoutMs: DASHBOARD_REPORT_ACTION_TIMEOUT_MS }
|
|
130
|
-
: {}),
|
|
155
|
+
signal: deadline.signal,
|
|
156
|
+
timeoutMs: DASHBOARD_REPORT_ACTION_TIMEOUT_MS,
|
|
131
157
|
},
|
|
132
158
|
);
|
|
133
159
|
} finally {
|
|
134
|
-
release();
|
|
160
|
+
release?.();
|
|
161
|
+
deadline.cleanup();
|
|
135
162
|
}
|
|
136
163
|
|
|
137
164
|
if (typeof data?.error === "string") {
|
|
@@ -489,9 +489,6 @@ export default function AgentsPage() {
|
|
|
489
489
|
</p>
|
|
490
490
|
</div>
|
|
491
491
|
<div className="flex shrink-0 items-center gap-2">
|
|
492
|
-
<Button variant="outline" size="sm" asChild>
|
|
493
|
-
<Link to="/catalog">{t("agents.openCatalog")}</Link>
|
|
494
|
-
</Button>
|
|
495
492
|
{canManageOrg ? (
|
|
496
493
|
<DropdownMenu>
|
|
497
494
|
<DropdownMenuTrigger asChild>
|
|
@@ -94,6 +94,8 @@ import {
|
|
|
94
94
|
type WalkthroughStep,
|
|
95
95
|
} from "@/lib/data-sources";
|
|
96
96
|
|
|
97
|
+
import { CustomApiCard } from "../components/CustomApiCard";
|
|
98
|
+
|
|
97
99
|
interface AnalyticsPublicKeyRow {
|
|
98
100
|
id: string;
|
|
99
101
|
name: string;
|
|
@@ -2099,6 +2101,8 @@ export default function DataSources() {
|
|
|
2099
2101
|
|
|
2100
2102
|
<GoogleSheetsExportCard statusData={statusData} />
|
|
2101
2103
|
|
|
2104
|
+
<CustomApiCard />
|
|
2105
|
+
|
|
2102
2106
|
{unknownFocusedSourceId && (
|
|
2103
2107
|
<div
|
|
2104
2108
|
role="status"
|
|
@@ -41,7 +41,6 @@ import { buildAnalyticsGeneralSettingsSearchEntries } from "./settings/settings-
|
|
|
41
41
|
|
|
42
42
|
export default function Settings() {
|
|
43
43
|
const t = useT();
|
|
44
|
-
const agentSettingsTabs = useAgentSettingsTabs();
|
|
45
44
|
const replayStorageStatus = useReplayStorageStatus();
|
|
46
45
|
const { data: analyticsPrefs, isLoading: analyticsPrefsLoading } =
|
|
47
46
|
useActionQuery<AnalyticsUserPrefs>("get-user-pref", {
|
|
@@ -122,6 +121,23 @@ export default function Settings() {
|
|
|
122
121
|
});
|
|
123
122
|
};
|
|
124
123
|
|
|
124
|
+
const agentAdditionalContent = (
|
|
125
|
+
<SettingsRow
|
|
126
|
+
id="bell-sound"
|
|
127
|
+
label={t("settings.bellSound")}
|
|
128
|
+
description={t("settings.bellSoundDescription")}
|
|
129
|
+
control={
|
|
130
|
+
<Switch
|
|
131
|
+
aria-label={t("settings.bellSound")}
|
|
132
|
+
checked={bellSoundEnabled}
|
|
133
|
+
disabled={analyticsPrefsLoading || saveAnalyticsPrefs.isPending}
|
|
134
|
+
onCheckedChange={saveBellSoundPreference}
|
|
135
|
+
/>
|
|
136
|
+
}
|
|
137
|
+
/>
|
|
138
|
+
);
|
|
139
|
+
const agentSettingsTabs = useAgentSettingsTabs({ agentAdditionalContent });
|
|
140
|
+
|
|
125
141
|
const extraTabs = useMemo<SettingsTabItem[]>(
|
|
126
142
|
() => [
|
|
127
143
|
{
|
|
@@ -130,7 +146,7 @@ export default function Settings() {
|
|
|
130
146
|
icon: IconBell,
|
|
131
147
|
keywords: "alerts rules notifications thresholds triggers monitoring",
|
|
132
148
|
content: (
|
|
133
|
-
<div className="
|
|
149
|
+
<div className="w-full">
|
|
134
150
|
<AlertRulesSettingsCard />
|
|
135
151
|
</div>
|
|
136
152
|
),
|
|
@@ -157,7 +173,7 @@ export default function Settings() {
|
|
|
157
173
|
extraTabs={extraTabs}
|
|
158
174
|
generalSearchEntries={generalSearchEntries}
|
|
159
175
|
general={
|
|
160
|
-
<div className="
|
|
176
|
+
<div className="w-full space-y-6">
|
|
161
177
|
<SettingsGroup className="bg-card border-border/50">
|
|
162
178
|
<SettingsRow
|
|
163
179
|
id="credentials"
|
|
@@ -171,18 +187,6 @@ export default function Settings() {
|
|
|
171
187
|
</Button>
|
|
172
188
|
}
|
|
173
189
|
/>
|
|
174
|
-
<SettingsRow
|
|
175
|
-
id="dashboard-templates"
|
|
176
|
-
label={t("settings.dashboardTemplates")}
|
|
177
|
-
description={t("settings.dashboardTemplatesDescription")}
|
|
178
|
-
control={
|
|
179
|
-
<Button variant="outline" size="sm" asChild>
|
|
180
|
-
<Link to="/catalog">
|
|
181
|
-
{t("settings.openDashboardTemplates")}
|
|
182
|
-
</Link>
|
|
183
|
-
</Button>
|
|
184
|
-
}
|
|
185
|
-
/>
|
|
186
190
|
<SettingsRow
|
|
187
191
|
id="language"
|
|
188
192
|
label={t("settings.languageTitle")}
|
|
@@ -207,21 +211,6 @@ export default function Settings() {
|
|
|
207
211
|
/>
|
|
208
212
|
}
|
|
209
213
|
/>
|
|
210
|
-
<SettingsRow
|
|
211
|
-
id="bell-sound"
|
|
212
|
-
label={t("settings.bellSound")}
|
|
213
|
-
description={t("settings.bellSoundDescription")}
|
|
214
|
-
control={
|
|
215
|
-
<Switch
|
|
216
|
-
aria-label={t("settings.bellSound")}
|
|
217
|
-
checked={bellSoundEnabled}
|
|
218
|
-
disabled={
|
|
219
|
-
analyticsPrefsLoading || saveAnalyticsPrefs.isPending
|
|
220
|
-
}
|
|
221
|
-
onCheckedChange={saveBellSoundPreference}
|
|
222
|
-
/>
|
|
223
|
-
}
|
|
224
|
-
/>
|
|
225
214
|
</SettingsGroup>
|
|
226
215
|
|
|
227
216
|
{replayStorageStatus.data?.configured ? (
|
|
@@ -242,29 +231,19 @@ export default function Settings() {
|
|
|
242
231
|
</CardContent>
|
|
243
232
|
</Card>
|
|
244
233
|
) : null}
|
|
245
|
-
|
|
246
|
-
<Card id="about" className="bg-card border-border/50 scroll-mt-16">
|
|
247
|
-
<CardHeader>
|
|
248
|
-
<CardTitle className="text-base">{t("settings.about")}</CardTitle>
|
|
249
|
-
</CardHeader>
|
|
250
|
-
<CardContent className="space-y-2 text-sm text-muted-foreground">
|
|
251
|
-
<p>{t("settings.aboutDescription")}</p>
|
|
252
|
-
<p>{t("settings.aboutUsage")}</p>
|
|
253
|
-
</CardContent>
|
|
254
|
-
</Card>
|
|
255
234
|
</div>
|
|
256
235
|
}
|
|
257
236
|
team={
|
|
258
|
-
<div className="
|
|
237
|
+
<div className="w-full">
|
|
259
238
|
<TeamPage
|
|
260
239
|
showTitle={false}
|
|
261
240
|
createOrgDescription="Set up a team to share dashboards and data sources with your colleagues."
|
|
262
|
-
className="
|
|
241
|
+
className="w-full"
|
|
263
242
|
/>
|
|
264
243
|
</div>
|
|
265
244
|
}
|
|
266
245
|
whatsNew={
|
|
267
|
-
<div className="
|
|
246
|
+
<div className="w-full">
|
|
268
247
|
<ChangelogSettingsCard markdown={changelog} />
|
|
269
248
|
</div>
|
|
270
249
|
}
|
|
@@ -2,6 +2,7 @@ import {
|
|
|
2
2
|
getAgentSettingsSearchTabs,
|
|
3
3
|
type SettingsSearchEntry,
|
|
4
4
|
} from "@agent-native/core/client/settings";
|
|
5
|
+
import { buildSettingsRoute } from "@agent-native/core/navigation";
|
|
5
6
|
|
|
6
7
|
interface SettingsCommandItem {
|
|
7
8
|
id: string;
|
|
@@ -12,6 +13,20 @@ interface SettingsCommandItem {
|
|
|
12
13
|
|
|
13
14
|
type Translate = (key: string) => string;
|
|
14
15
|
|
|
16
|
+
function buildSettingsEntryRoute(tabId: string, section?: string): string {
|
|
17
|
+
const normalizedSection = section?.replace(/^#/, "").trim();
|
|
18
|
+
if (!normalizedSection || normalizedSection === tabId) {
|
|
19
|
+
return buildSettingsRoute(tabId);
|
|
20
|
+
}
|
|
21
|
+
if (normalizedSection.startsWith("agent:")) {
|
|
22
|
+
return buildSettingsRoute(normalizedSection);
|
|
23
|
+
}
|
|
24
|
+
if (normalizedSection.startsWith(`${tabId}:`)) {
|
|
25
|
+
return buildSettingsRoute(normalizedSection);
|
|
26
|
+
}
|
|
27
|
+
return buildSettingsRoute(`${tabId}:${normalizedSection}`);
|
|
28
|
+
}
|
|
29
|
+
|
|
15
30
|
export function buildAnalyticsGeneralSettingsSearchEntries(
|
|
16
31
|
t: Translate,
|
|
17
32
|
replayStorageConfigured: boolean,
|
|
@@ -21,6 +36,7 @@ export function buildAnalyticsGeneralSettingsSearchEntries(
|
|
|
21
36
|
id: "analytics-account",
|
|
22
37
|
label: t("settings.account"),
|
|
23
38
|
keywords: "profile photo avatar email signed in identity",
|
|
39
|
+
tabId: "account",
|
|
24
40
|
hash: "account",
|
|
25
41
|
},
|
|
26
42
|
{
|
|
@@ -29,12 +45,6 @@ export function buildAnalyticsGeneralSettingsSearchEntries(
|
|
|
29
45
|
keywords: "data sources api keys manage credentials",
|
|
30
46
|
hash: "credentials",
|
|
31
47
|
},
|
|
32
|
-
{
|
|
33
|
-
id: "analytics-dashboard-templates",
|
|
34
|
-
label: t("settings.dashboardTemplates"),
|
|
35
|
-
keywords: "templates catalog dashboards",
|
|
36
|
-
hash: "dashboard-templates",
|
|
37
|
-
},
|
|
38
48
|
...(replayStorageConfigured
|
|
39
49
|
? [
|
|
40
50
|
{
|
|
@@ -57,18 +67,6 @@ export function buildAnalyticsGeneralSettingsSearchEntries(
|
|
|
57
67
|
keywords: "email notifications errors alerts javascript monitoring",
|
|
58
68
|
hash: "error-email-notifications",
|
|
59
69
|
},
|
|
60
|
-
{
|
|
61
|
-
id: "analytics-bell-sound",
|
|
62
|
-
label: t("settings.bellSound"),
|
|
63
|
-
keywords: "sound audio ding agent completion notification",
|
|
64
|
-
hash: "bell-sound",
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
id: "analytics-about",
|
|
68
|
-
label: t("settings.about"),
|
|
69
|
-
keywords: "about version info usage",
|
|
70
|
-
hash: "about",
|
|
71
|
-
},
|
|
72
70
|
];
|
|
73
71
|
}
|
|
74
72
|
|
|
@@ -118,18 +116,23 @@ export function buildAnalyticsSettingsCommandItems(
|
|
|
118
116
|
};
|
|
119
117
|
|
|
120
118
|
for (const tab of tabs) {
|
|
119
|
+
const entryHref = (entry: SettingsSearchEntry, tabId: string) => {
|
|
120
|
+
const hash = entry.hash?.replace(/^#/, "");
|
|
121
|
+
return buildSettingsEntryRoute(tabId, hash);
|
|
122
|
+
};
|
|
121
123
|
add({
|
|
122
124
|
id: `tab:${tab.id}`,
|
|
123
125
|
label: tab.label,
|
|
124
126
|
keywords: `${tab.keywords} settings`,
|
|
125
|
-
href:
|
|
127
|
+
href: buildSettingsRoute(tab.id),
|
|
126
128
|
});
|
|
127
129
|
for (const entry of tab.searchEntries ?? []) {
|
|
130
|
+
const tabId = entry.tabId ?? tab.id;
|
|
128
131
|
add({
|
|
129
132
|
id: entry.id,
|
|
130
133
|
label: entry.label,
|
|
131
134
|
keywords: `${entry.keywords ?? ""} ${entry.description ?? ""} ${tab.label} settings`,
|
|
132
|
-
href:
|
|
135
|
+
href: entryHref(entry, tabId),
|
|
133
136
|
});
|
|
134
137
|
}
|
|
135
138
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default, meta } from "./settings.js";
|
|
@@ -173,7 +173,7 @@ Agent Native observability panels belong in the canonical Agent Native dashboard
|
|
|
173
173
|
(`agent-native-templates-first-party`), including generation metrics, explicit
|
|
174
174
|
feedback sentiment, optional inferred message sentiment, and separate
|
|
175
175
|
by-main-model breakdowns. Do not publish or install a separate observability
|
|
176
|
-
dashboard
|
|
176
|
+
dashboard.
|
|
177
177
|
|
|
178
178
|
Example dashboard panel:
|
|
179
179
|
|
|
@@ -25,6 +25,13 @@ AGENT_CHAT_DURABLE_BACKGROUND = "true"
|
|
|
25
25
|
[functions."*"]
|
|
26
26
|
timeout = 75
|
|
27
27
|
|
|
28
|
+
# Recent durable Analytics runs recorded failed-worker RSS above 4 GB while
|
|
29
|
+
# Netlify Functions default to 1 GB. Give the long-running agent worker the
|
|
30
|
+
# highest supported allocation so memory pressure does not masquerade as a
|
|
31
|
+
# stale heartbeat; query and connection bounds remain the primary safeguards.
|
|
32
|
+
[functions.server-agent-background]
|
|
33
|
+
memory = "4gb"
|
|
34
|
+
|
|
28
35
|
[functions.dashboard-report-sweep-background]
|
|
29
36
|
timeout = 300
|
|
30
37
|
memory = "2gb"
|
|
@@ -83,6 +83,7 @@ function emitBackgroundWorker(token: string) {
|
|
|
83
83
|
rmSync(path.join(dest, "server.mjs"), { force: true });
|
|
84
84
|
|
|
85
85
|
const source = `globalThis.__AGENT_NATIVE_BACKGROUND_RUNTIME__ = true;
|
|
86
|
+
globalThis.__AGENT_NATIVE_LOW_CONNECTION_BACKGROUND_RUNTIME__ = true;
|
|
86
87
|
globalThis.__AGENT_NATIVE_DASHBOARD_REPORT_SCHEDULED_RUNTIME__ = true;
|
|
87
88
|
|
|
88
89
|
const CRON_TOKEN = ${JSON.stringify(token)};
|
|
@@ -227,6 +228,7 @@ function emitAlertBackgroundWorker(token: string) {
|
|
|
227
228
|
rmSync(path.join(dest, "server.mjs"), { force: true });
|
|
228
229
|
|
|
229
230
|
const source = `globalThis.__AGENT_NATIVE_BACKGROUND_RUNTIME__ = true;
|
|
231
|
+
globalThis.__AGENT_NATIVE_LOW_CONNECTION_BACKGROUND_RUNTIME__ = true;
|
|
230
232
|
globalThis.__AGENT_NATIVE_ANALYTICS_ALERT_SCHEDULED_RUNTIME__ = true;
|
|
231
233
|
|
|
232
234
|
const CRON_TOKEN = ${JSON.stringify(token)};
|
|
@@ -344,6 +346,7 @@ function emitUptimeBackgroundWorker(token: string) {
|
|
|
344
346
|
rmSync(path.join(dest, "server.mjs"), { force: true });
|
|
345
347
|
|
|
346
348
|
const source = `globalThis.__AGENT_NATIVE_BACKGROUND_RUNTIME__ = true;
|
|
349
|
+
globalThis.__AGENT_NATIVE_LOW_CONNECTION_BACKGROUND_RUNTIME__ = true;
|
|
347
350
|
globalThis.__AGENT_NATIVE_UPTIME_MONITOR_SCHEDULED_RUNTIME__ = true;
|
|
348
351
|
|
|
349
352
|
const CRON_TOKEN = ${JSON.stringify(token)};
|
|
@@ -443,6 +446,7 @@ function emitRollupBackgroundWorker(token: string) {
|
|
|
443
446
|
rmSync(path.join(dest, "server.mjs"), { force: true });
|
|
444
447
|
|
|
445
448
|
const source = `globalThis.__AGENT_NATIVE_BACKGROUND_RUNTIME__ = true;
|
|
449
|
+
globalThis.__AGENT_NATIVE_LOW_CONNECTION_BACKGROUND_RUNTIME__ = true;
|
|
446
450
|
globalThis.__AGENT_NATIVE_ANALYTICS_ROLLUP_BACKFILL_SCHEDULED_RUNTIME__ = true;
|
|
447
451
|
|
|
448
452
|
const CRON_TOKEN = ${JSON.stringify(token)};
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
-- Builder.io production first-party Analytics warehouse.
|
|
2
|
+
-- Run this once with the authenticated Builder Google Cloud account:
|
|
3
|
+
-- bq query --use_legacy_sql=false < templates/analytics/scripts/first-party-analytics-bigquery.sql
|
|
4
|
+
--
|
|
5
|
+
-- The raw table is append-only. The query view removes retry duplicates by the
|
|
6
|
+
-- stable Postgres event id, and the two aggregate views preserve the existing
|
|
7
|
+
-- dashboard SQL names without writing rollups back to Neon.
|
|
8
|
+
|
|
9
|
+
CREATE SCHEMA IF NOT EXISTS `builder-3b0a2.analytics`
|
|
10
|
+
OPTIONS (location = "US");
|
|
11
|
+
|
|
12
|
+
CREATE TABLE IF NOT EXISTS `builder-3b0a2.analytics.first_party_analytics_events_raw` (
|
|
13
|
+
id STRING NOT NULL,
|
|
14
|
+
public_key_id STRING,
|
|
15
|
+
event_name STRING NOT NULL,
|
|
16
|
+
user_id STRING,
|
|
17
|
+
anonymous_id STRING,
|
|
18
|
+
user_key STRING,
|
|
19
|
+
session_id STRING,
|
|
20
|
+
timestamp TIMESTAMP NOT NULL,
|
|
21
|
+
event_date DATE,
|
|
22
|
+
received_at TIMESTAMP NOT NULL,
|
|
23
|
+
url STRING,
|
|
24
|
+
path STRING,
|
|
25
|
+
hostname STRING,
|
|
26
|
+
referrer STRING,
|
|
27
|
+
app STRING,
|
|
28
|
+
template STRING,
|
|
29
|
+
signed_in STRING,
|
|
30
|
+
properties STRING NOT NULL,
|
|
31
|
+
context STRING NOT NULL,
|
|
32
|
+
owner_email STRING NOT NULL,
|
|
33
|
+
org_id STRING
|
|
34
|
+
)
|
|
35
|
+
PARTITION BY event_date
|
|
36
|
+
CLUSTER BY owner_email, org_id, event_name, app;
|
|
37
|
+
|
|
38
|
+
CREATE OR REPLACE VIEW `builder-3b0a2.analytics.first_party_analytics_events_raw_query` AS
|
|
39
|
+
SELECT * EXCEPT (_row_number)
|
|
40
|
+
FROM (
|
|
41
|
+
SELECT
|
|
42
|
+
raw.*,
|
|
43
|
+
ROW_NUMBER() OVER (PARTITION BY id ORDER BY received_at DESC) AS _row_number
|
|
44
|
+
FROM `builder-3b0a2.analytics.first_party_analytics_events_raw` AS raw
|
|
45
|
+
)
|
|
46
|
+
WHERE _row_number = 1;
|
|
47
|
+
|
|
48
|
+
CREATE OR REPLACE VIEW `builder-3b0a2.analytics.first_party_analytics_events_raw_daily_rollups` AS
|
|
49
|
+
WITH tenant_events AS (
|
|
50
|
+
SELECT
|
|
51
|
+
CASE
|
|
52
|
+
WHEN org_id IS NOT NULL AND org_id <> '' THEN CONCAT('org:', org_id)
|
|
53
|
+
ELSE CONCAT('user:', owner_email)
|
|
54
|
+
END AS tenant_key,
|
|
55
|
+
owner_email,
|
|
56
|
+
org_id,
|
|
57
|
+
event_date,
|
|
58
|
+
event_name,
|
|
59
|
+
COALESCE(app, '') AS app,
|
|
60
|
+
COALESCE(template, '') AS template
|
|
61
|
+
FROM `builder-3b0a2.analytics.first_party_analytics_events_raw_query`
|
|
62
|
+
WHERE event_date IS NOT NULL
|
|
63
|
+
)
|
|
64
|
+
SELECT
|
|
65
|
+
TO_HEX(SHA256(CONCAT(
|
|
66
|
+
tenant_key, '|', CAST(event_date AS STRING), '|', event_name, '|', app,
|
|
67
|
+
'|', template
|
|
68
|
+
))) AS id,
|
|
69
|
+
tenant_key,
|
|
70
|
+
ANY_VALUE(owner_email) AS owner_email,
|
|
71
|
+
ANY_VALUE(org_id) AS org_id,
|
|
72
|
+
event_date,
|
|
73
|
+
event_name,
|
|
74
|
+
app,
|
|
75
|
+
template,
|
|
76
|
+
COUNT(*) AS event_count
|
|
77
|
+
FROM tenant_events
|
|
78
|
+
GROUP BY tenant_key, event_date, event_name, app, template;
|
|
79
|
+
|
|
80
|
+
CREATE OR REPLACE VIEW `builder-3b0a2.analytics.first_party_analytics_events_raw_user_days` AS
|
|
81
|
+
WITH tenant_user_days AS (
|
|
82
|
+
SELECT
|
|
83
|
+
CASE
|
|
84
|
+
WHEN org_id IS NOT NULL AND org_id <> '' THEN CONCAT('org:', org_id)
|
|
85
|
+
ELSE CONCAT('user:', owner_email)
|
|
86
|
+
END AS tenant_key,
|
|
87
|
+
owner_email,
|
|
88
|
+
org_id,
|
|
89
|
+
event_date,
|
|
90
|
+
user_key
|
|
91
|
+
FROM `builder-3b0a2.analytics.first_party_analytics_events_raw_query`
|
|
92
|
+
WHERE event_date IS NOT NULL AND user_key IS NOT NULL AND user_key <> ''
|
|
93
|
+
)
|
|
94
|
+
SELECT
|
|
95
|
+
TO_HEX(SHA256(CONCAT(
|
|
96
|
+
tenant_key, '|', CAST(event_date AS STRING), '|', user_key
|
|
97
|
+
))) AS id,
|
|
98
|
+
tenant_key,
|
|
99
|
+
ANY_VALUE(owner_email) AS owner_email,
|
|
100
|
+
ANY_VALUE(org_id) AS org_id,
|
|
101
|
+
event_date,
|
|
102
|
+
user_key
|
|
103
|
+
FROM tenant_user_days
|
|
104
|
+
GROUP BY tenant_key, event_date, user_key;
|
|
@@ -29,6 +29,33 @@ registerShareableResource({
|
|
|
29
29
|
resourceKind: ANALYTICS_DASHBOARD_AGENT_RESOURCE_KIND,
|
|
30
30
|
getContextPath: () => ANALYTICS_DASHBOARD_AGENT_CONTEXT_ENDPOINT,
|
|
31
31
|
},
|
|
32
|
+
persistVisibilityChange: async ({
|
|
33
|
+
resource,
|
|
34
|
+
resourceId,
|
|
35
|
+
visibility,
|
|
36
|
+
update,
|
|
37
|
+
userEmail,
|
|
38
|
+
orgId,
|
|
39
|
+
}) => {
|
|
40
|
+
const { persistDashboardVisibilityChange } =
|
|
41
|
+
await import("../lib/dashboards-store.js");
|
|
42
|
+
await persistDashboardVisibilityChange(
|
|
43
|
+
{
|
|
44
|
+
id: resourceId,
|
|
45
|
+
title: resource.title,
|
|
46
|
+
orgId: resource.orgId ?? null,
|
|
47
|
+
},
|
|
48
|
+
visibility,
|
|
49
|
+
update,
|
|
50
|
+
{
|
|
51
|
+
email: userEmail ?? resource.ownerEmail,
|
|
52
|
+
orgId:
|
|
53
|
+
typeof update.orgId === "string"
|
|
54
|
+
? update.orgId
|
|
55
|
+
: (orgId ?? resource.orgId ?? null),
|
|
56
|
+
},
|
|
57
|
+
);
|
|
58
|
+
},
|
|
32
59
|
getDb,
|
|
33
60
|
});
|
|
34
61
|
|
|
@@ -43,6 +43,16 @@ export const dashboards = table("dashboards", {
|
|
|
43
43
|
...ownableColumns(),
|
|
44
44
|
});
|
|
45
45
|
|
|
46
|
+
/**
|
|
47
|
+
* Persistent per-name rows serialize concurrent create/rename checks. The row
|
|
48
|
+
* is deliberately independent of dashboard visibility: callers acquire the
|
|
49
|
+
* same lock before applying their access-scoped collision check.
|
|
50
|
+
*/
|
|
51
|
+
export const dashboardNameLocks = table("dashboard_name_locks", {
|
|
52
|
+
nameKey: text("name_key").primaryKey(),
|
|
53
|
+
createdAt: text("created_at").notNull().default(now()),
|
|
54
|
+
});
|
|
55
|
+
|
|
46
56
|
export const dashboardShares = createSharesTable("dashboard_shares");
|
|
47
57
|
|
|
48
58
|
/**
|
|
@@ -18,13 +18,11 @@ export const INITIAL_TOOL_NAMES = [
|
|
|
18
18
|
// while the agent lazily discovers the next mutating action.
|
|
19
19
|
"get-sql-dashboard",
|
|
20
20
|
"list-sql-dashboards",
|
|
21
|
-
"list-dashboard-templates",
|
|
22
21
|
"list-extensions",
|
|
23
22
|
"get-extension",
|
|
24
23
|
"update-dashboard",
|
|
25
24
|
"mutate-dashboard",
|
|
26
25
|
"compose-dashboard",
|
|
27
|
-
"install-dashboard-template",
|
|
28
26
|
"create-extension",
|
|
29
27
|
"update-extension",
|
|
30
28
|
"extension-data-set",
|