@agent-native/core 0.141.7 → 0.144.1
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/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 +35 -38
- 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 +1 -1
- package/corpus/templates/analytics/actions/navigate.ts +4 -5
- package/corpus/templates/analytics/actions/provider-api-register.ts +50 -0
- package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +44 -11
- package/corpus/templates/analytics/actions/test-custom-api-connection.ts +106 -0
- package/corpus/templates/analytics/app/components/CustomApiCard.tsx +430 -0
- package/corpus/templates/analytics/app/i18n-data.ts +680 -0
- 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/DataSources.tsx +4 -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/netlify.toml +7 -0
- package/corpus/templates/analytics/scripts/emit-netlify-dashboard-report-cron.ts +4 -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/dashboards-store.ts +227 -60
- package/corpus/templates/analytics/server/lib/first-party-analytics-backend.ts +156 -45
- package/corpus/templates/analytics/server/lib/native-v2-dashboards.ts +227 -1
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +5 -0
- 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 +28 -2
- package/corpus/templates/assets/.agents/skills/image-generation/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/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/sources.tsx +15 -7
- 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/hooks/use-events.ts +4 -1
- package/corpus/templates/calendar/app/i18n-data.ts +20 -0
- 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/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/player/delete-recording-menu.tsx +14 -3
- package/corpus/templates/clips/app/components/player/player-controls.tsx +0 -3
- package/corpus/templates/clips/app/components/player/scrubber.tsx +2 -33
- package/corpus/templates/clips/app/components/player/video-player.tsx +58 -11
- 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/changelog/2026-08-06-trimmed-clips-play-on-a-clean-timeline-without-cut-markers.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/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/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/import-from-url.ts +1 -1
- package/corpus/templates/design/app/components/design/LayersPanel.tsx +27 -18
- package/corpus/templates/design/app/pages/Index.tsx +6 -2
- 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/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/AGENTS.md +8 -1
- package/corpus/templates/dispatch/app/dispatch-extensions.tsx +1 -0
- package/corpus/templates/dispatch/app/hooks/use-navigation-state.ts +30 -15
- package/corpus/templates/dispatch/app/i18n-data.ts +131 -0
- package/corpus/templates/dispatch/app/routes/admin._index.tsx +4 -0
- package/corpus/templates/dispatch/app/routes/admin.agents.tsx +1 -0
- package/corpus/templates/dispatch/app/routes/admin.approvals.tsx +1 -0
- package/corpus/templates/dispatch/app/routes/admin.apps.$appId.tsx +1 -0
- package/corpus/templates/dispatch/app/routes/admin.apps.tsx +1 -0
- package/corpus/templates/dispatch/app/routes/admin.audit.tsx +1 -0
- package/corpus/templates/dispatch/app/routes/admin.automations.tsx +1 -0
- package/corpus/templates/dispatch/app/routes/admin.destinations.tsx +4 -0
- package/corpus/templates/dispatch/app/routes/admin.dreams.tsx +1 -0
- package/corpus/templates/dispatch/app/routes/admin.identities.tsx +1 -0
- package/corpus/templates/dispatch/app/routes/admin.integrations.tsx +4 -0
- package/corpus/templates/dispatch/app/routes/admin.messaging.tsx +1 -0
- package/corpus/templates/dispatch/app/routes/admin.metrics.tsx +1 -0
- package/corpus/templates/dispatch/app/routes/admin.new-app.tsx +1 -0
- package/corpus/templates/dispatch/app/routes/admin.operations.tsx +1 -0
- package/corpus/templates/dispatch/app/routes/admin.thread-debug.tsx +4 -0
- package/corpus/templates/dispatch/app/routes/admin.transactional-email.$appId.$id.tsx +4 -0
- package/corpus/templates/dispatch/app/routes/admin.transactional-email.tsx +4 -0
- package/corpus/templates/dispatch/app/routes/admin.tsx +1 -0
- package/corpus/templates/dispatch/app/routes/admin.vault.tsx +1 -0
- package/corpus/templates/dispatch/app/routes/admin.workspace.tsx +1 -0
- package/corpus/templates/dispatch/changelog/2026-08-06-dispatch-keeps-everyday-navigation-focused-while-management-.md +6 -0
- 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/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/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/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/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/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/slides/.agents/skills/create-deck/SKILL.md +48 -5
- package/corpus/templates/slides/.agents/skills/design-systems/SKILL.md +37 -1
- 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 +17 -21
- package/corpus/templates/slides/_gitignore +1 -0
- package/corpus/templates/slides/actions/export-pptx.ts +470 -36
- package/corpus/templates/slides/actions/get-deck.ts +12 -0
- package/corpus/templates/slides/actions/import-file.ts +175 -139
- package/corpus/templates/slides/actions/import-google-slides-reference.ts +271 -12
- package/corpus/templates/slides/actions/import-pptx.ts +193 -68
- package/corpus/templates/slides/actions/patch-deck.ts +51 -0
- package/corpus/templates/slides/actions/update-slide.ts +29 -3
- package/corpus/templates/slides/app/components/deck/DeckCard.tsx +10 -13
- 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 +173 -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 +15 -0
- package/corpus/templates/slides/app/components/presentation/PresentationView.tsx +27 -1
- package/corpus/templates/slides/app/i18n/en-US.ts +1 -0
- package/corpus/templates/slides/app/lib/create-deck-generation.ts +72 -11
- 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/import-uploaded-deck.ts +89 -0
- package/corpus/templates/slides/app/lib/slide-animation-elements.ts +3 -0
- package/corpus/templates/slides/app/pages/Index.tsx +172 -15
- 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/changelog/2026-08-06-uploaded-decks-keep-their-slides-and-visuals-when-you-improv.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 +247 -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 +7 -4
- 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/lib/source-import.ts +167 -0
- package/corpus/templates/slides/server/plugins/agent-chat.ts +12 -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/dist/agent/production-agent.d.ts +17 -0
- package/dist/agent/production-agent.js +72 -1
- 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.js +123 -4
- package/dist/client/assistant-ui-recovery.d.ts +2 -1
- package/dist/client/assistant-ui-recovery.js +7 -3
- package/dist/client/onboarding/FirstRunOnboarding.js +11 -4
- package/dist/client/org/TeamPage.js +1 -1
- package/dist/client/require-session.js +1 -1
- 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/settings/AccountSettingsCard.js +2 -1
- package/dist/collab/struct-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/file-upload/actions/upload-image.d.ts +1 -1
- 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/integrations/plugin.js +9 -6
- package/dist/jobs/scheduler.js +79 -23
- package/dist/localization/default-messages.d.ts +54 -0
- package/dist/localization/default-messages.js +57 -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 +73 -6
- package/dist/observability/routes.d.ts +5 -5
- package/dist/onboarding/app-profile.js +11 -0
- package/dist/progress/routes.d.ts +1 -1
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/resources/store.js +15 -1
- package/dist/scripts/call-agent.js +34 -4
- package/dist/secrets/routes.d.ts +3 -3
- 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 +47 -11
- 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/onboarding-html.d.ts +2 -0
- package/dist/server/onboarding-html.js +115 -29
- 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/transcribe-voice.d.ts +1 -1
- package/dist/shared/cache-control.d.ts +26 -2
- package/dist/shared/cache-control.js +43 -2
- package/dist/shared/password-policy.d.ts +3 -0
- package/dist/shared/password-policy.js +3 -0
- 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/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/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/creating-templates.mdx +1 -1
- package/docs/content/getting-started-actions.mdx +38 -189
- package/docs/content/getting-started-database.mdx +80 -164
- package/docs/content/getting-started-pages.mdx +44 -155
- package/docs/content/getting-started.mdx +26 -106
- package/docs/content/skills-guide.mdx +13 -0
- 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/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/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/dist/db/ddl-guard.js
CHANGED
|
@@ -33,9 +33,9 @@ const PLAIN_IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
|
33
33
|
/**
|
|
34
34
|
* True when running against Postgres AND the given table already exists in the
|
|
35
35
|
* `public` schema. Returns `false` on SQLite (callers gate their own behaviour
|
|
36
|
-
* there), for invalid identifiers,
|
|
37
|
-
*
|
|
38
|
-
*
|
|
36
|
+
* there), for invalid identifiers, and `undefined` when `information_schema`
|
|
37
|
+
* is unreadable. Unknown must stay distinct from absent: treating a timed-out
|
|
38
|
+
* probe as missing starts a DDL lock storm on a busy serverless database.
|
|
39
39
|
*
|
|
40
40
|
* This is a plain read (no lock), so it never blocks on an `ACCESS EXCLUSIVE`
|
|
41
41
|
* lock the way `CREATE`/`ALTER` would.
|
|
@@ -57,15 +57,17 @@ export async function pgTableExists(table, injectedClient, dialectIsPostgres) {
|
|
|
57
57
|
return rows.length > 0;
|
|
58
58
|
}
|
|
59
59
|
catch {
|
|
60
|
-
//
|
|
61
|
-
//
|
|
62
|
-
|
|
60
|
+
// coercion-ok: undefined is a typed unreadable state; callers throw rather
|
|
61
|
+
// than issuing DDL against an unverified schema.
|
|
62
|
+
// A failed probe is not evidence that the table is absent. Let the caller
|
|
63
|
+
// fail loudly rather than issuing DDL against a database it cannot read.
|
|
64
|
+
return undefined;
|
|
63
65
|
}
|
|
64
66
|
}
|
|
65
67
|
/**
|
|
66
68
|
* True when running against Postgres AND the given column already exists on the
|
|
67
69
|
* given table in the `public` schema. Returns `false` on SQLite, for invalid
|
|
68
|
-
* identifiers,
|
|
70
|
+
* identifiers, and `undefined` when `information_schema` is unreadable.
|
|
69
71
|
*
|
|
70
72
|
* Plain read — no lock taken.
|
|
71
73
|
*/
|
|
@@ -86,13 +88,15 @@ export async function pgColumnExists(table, column, injectedClient) {
|
|
|
86
88
|
return rows.length > 0;
|
|
87
89
|
}
|
|
88
90
|
catch {
|
|
89
|
-
|
|
91
|
+
// coercion-ok: undefined distinguishes an unreadable schema probe from an
|
|
92
|
+
// absent column, and ensureSchemaObject fails closed on it.
|
|
93
|
+
return undefined;
|
|
90
94
|
}
|
|
91
95
|
}
|
|
92
96
|
/**
|
|
93
97
|
* True when running against Postgres AND an index with the given name already
|
|
94
98
|
* exists in the `public` schema. Returns `false` on SQLite, for invalid
|
|
95
|
-
* identifiers,
|
|
99
|
+
* identifiers, and `undefined` when `pg_indexes` is unreadable.
|
|
96
100
|
*
|
|
97
101
|
* `CREATE INDEX` (without CONCURRENTLY) takes a `SHARE` lock that blocks
|
|
98
102
|
* writes, so on a fresh background-worker process behind a concurrent
|
|
@@ -114,7 +118,9 @@ export async function pgIndexExists(indexName, injectedClient, dialectIsPostgres
|
|
|
114
118
|
return rows.length > 0;
|
|
115
119
|
}
|
|
116
120
|
catch {
|
|
117
|
-
|
|
121
|
+
// coercion-ok: undefined distinguishes an unreadable schema probe from an
|
|
122
|
+
// absent index, and ensureSchemaObject fails closed on it.
|
|
123
|
+
return undefined;
|
|
118
124
|
}
|
|
119
125
|
}
|
|
120
126
|
/**
|
|
@@ -145,8 +151,12 @@ export async function pgIndexExists(indexName, injectedClient, dialectIsPostgres
|
|
|
145
151
|
*/
|
|
146
152
|
export async function ensureSchemaObject(options) {
|
|
147
153
|
const { probe, ddl, label, lockTimeout, injectedClient, dialectIsPostgres } = options;
|
|
148
|
-
|
|
154
|
+
const initiallyExists = await probe();
|
|
155
|
+
if (initiallyExists === true)
|
|
149
156
|
return false;
|
|
157
|
+
if (initiallyExists === undefined) {
|
|
158
|
+
throw new Error(`ensureSchemaObject: could not probe required schema "${label}"; refusing to issue DDL`);
|
|
159
|
+
}
|
|
150
160
|
const ran = await runGuardedDdl(ddl, {
|
|
151
161
|
lockTimeout,
|
|
152
162
|
injectedClient,
|
|
@@ -157,8 +167,12 @@ export async function ensureSchemaObject(options) {
|
|
|
157
167
|
// The DDL was swallowed by a lock-timeout. The object is virtually always
|
|
158
168
|
// already correct by the time a contended boot retries (a concurrent
|
|
159
169
|
// connection created it), so re-probe before giving up.
|
|
160
|
-
|
|
170
|
+
const existsAfterTimeout = await probe();
|
|
171
|
+
if (existsAfterTimeout === true)
|
|
161
172
|
return true;
|
|
173
|
+
if (existsAfterTimeout === undefined) {
|
|
174
|
+
throw new Error(`ensureSchemaObject: could not re-probe required schema "${label}" after a lock-timed-out DDL`);
|
|
175
|
+
}
|
|
162
176
|
// Still missing after a swallowed timeout: do NOT memoize success with absent
|
|
163
177
|
// schema. Throw so the caller's init promise rejects and the next call
|
|
164
178
|
// retries, rather than leaving ensureTable "initialized" against a table/
|
|
@@ -243,12 +257,26 @@ export async function runGuardedDdl(ddl, options = {}) {
|
|
|
243
257
|
return true;
|
|
244
258
|
}
|
|
245
259
|
const lockTimeout = options.lockTimeout ?? "3s";
|
|
260
|
+
// Comfortably longer than any DDL this guard runs (it only ever executes
|
|
261
|
+
// statements already probed as necessary), so it can only fire on a
|
|
262
|
+
// transaction nobody is driving any more.
|
|
263
|
+
const idleInTransactionTimeout = options.idleInTransactionTimeout ?? "30s";
|
|
246
264
|
try {
|
|
247
265
|
if (typeof client.transaction === "function") {
|
|
248
266
|
await client.transaction(async (tx) => {
|
|
249
267
|
// SET LOCAL is transaction-scoped: it reverts on COMMIT/ROLLBACK and
|
|
250
268
|
// never persists on the pooled connection.
|
|
251
269
|
await tx.execute(`SET LOCAL lock_timeout = '${lockTimeout}'`);
|
|
270
|
+
// A serverless worker that is killed mid-transaction — OOM, function
|
|
271
|
+
// wall, cold-start reap — never reaches COMMIT or ROLLBACK, and the
|
|
272
|
+
// pooled connection goes back to the pool still inside this
|
|
273
|
+
// transaction, holding its locks until something reaps it. Nothing
|
|
274
|
+
// does. Measured in production: 11 sessions stuck `idle in
|
|
275
|
+
// transaction` for up to 283s, every one of them last executing the
|
|
276
|
+
// SET LOCAL above, while ordinary queries on that database went from
|
|
277
|
+
// ~1.5s to 5-7s. Postgres reaps these itself when told to, and the
|
|
278
|
+
// timeout is the only part of this that survives the process dying.
|
|
279
|
+
await tx.execute(`SET LOCAL idle_in_transaction_session_timeout = '${idleInTransactionTimeout}'`);
|
|
252
280
|
await tx.execute(ddl);
|
|
253
281
|
});
|
|
254
282
|
}
|
package/dist/deploy/build.d.ts
CHANGED
|
@@ -74,6 +74,8 @@ export { copyDir };
|
|
|
74
74
|
export declare function isServerlessNativePlatformPackage(packageName: string): boolean;
|
|
75
75
|
type ServerlessFfmpegStaticArch = "arm64" | "x64";
|
|
76
76
|
export declare function shouldBundleFfmpegStaticForServerless(hostPlatform?: NodeJS.Platform, hostArch?: NodeJS.Architecture, targetArch?: ServerlessFfmpegStaticArch | null): boolean;
|
|
77
|
+
export declare function findInstalledPackageRoot(packageName: string, nodeModulesRoots: string[], fromPackageDir?: string): string | null;
|
|
78
|
+
export declare function copyInstalledBrowserRuntimePackages(serverDir: string | undefined, projectCwd?: string): number;
|
|
77
79
|
export declare function findInstalledFfmpegStaticPackage(nodeModulesRoots: string[]): string | null;
|
|
78
80
|
export declare function findInstalledResvgPackages(nodeModulesRoots: string[]): Array<{
|
|
79
81
|
packageName: string;
|
package/dist/deploy/build.js
CHANGED
|
@@ -1920,6 +1920,10 @@ const LIBSQL_NATIVE_PACKAGE_NAMES = [
|
|
|
1920
1920
|
const FFMPEG_STATIC_PACKAGE_NAME = "ffmpeg-static";
|
|
1921
1921
|
const RESVG_SCOPE = "@resvg";
|
|
1922
1922
|
const RESVG_PACKAGE_PREFIX = "resvg-js";
|
|
1923
|
+
const SERVERLESS_BROWSER_RUNTIME_PACKAGES = [
|
|
1924
|
+
"@sparticuz/chromium",
|
|
1925
|
+
"playwright-core",
|
|
1926
|
+
];
|
|
1923
1927
|
// Serverless functions only ever run on 64-bit Linux. The darwin/win32/android
|
|
1924
1928
|
// and 32-bit-arm prebuilds of these native packages are ~100MB that can never
|
|
1925
1929
|
// execute there, and Netlify copies the whole server dir again for every extra
|
|
@@ -1978,6 +1982,98 @@ function nodeModulesAncestors(startDir) {
|
|
|
1978
1982
|
}
|
|
1979
1983
|
return dirs;
|
|
1980
1984
|
}
|
|
1985
|
+
function readPackageManifest(packageDir) {
|
|
1986
|
+
const packageJsonPath = path.join(packageDir, "package.json");
|
|
1987
|
+
if (!fs.existsSync(packageJsonPath))
|
|
1988
|
+
return null;
|
|
1989
|
+
const manifest = JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
|
|
1990
|
+
if (!manifest || typeof manifest !== "object" || Array.isArray(manifest)) {
|
|
1991
|
+
return null;
|
|
1992
|
+
}
|
|
1993
|
+
return manifest;
|
|
1994
|
+
}
|
|
1995
|
+
function packageRootFromResolvedPath(packageName, resolvedPath) {
|
|
1996
|
+
let current = path.dirname(resolvedPath);
|
|
1997
|
+
while (true) {
|
|
1998
|
+
const manifest = readPackageManifest(current);
|
|
1999
|
+
if (manifest?.name === packageName)
|
|
2000
|
+
return current;
|
|
2001
|
+
const parent = path.dirname(current);
|
|
2002
|
+
if (parent === current)
|
|
2003
|
+
return null;
|
|
2004
|
+
current = parent;
|
|
2005
|
+
}
|
|
2006
|
+
}
|
|
2007
|
+
export function findInstalledPackageRoot(packageName, nodeModulesRoots, fromPackageDir) {
|
|
2008
|
+
if (fromPackageDir) {
|
|
2009
|
+
try {
|
|
2010
|
+
const requireFromPackage = createRequire(path.join(fromPackageDir, "package.json"));
|
|
2011
|
+
const resolvedPath = requireFromPackage.resolve(packageName);
|
|
2012
|
+
const resolvedRoot = packageRootFromResolvedPath(packageName, resolvedPath);
|
|
2013
|
+
if (resolvedRoot)
|
|
2014
|
+
return resolvedRoot;
|
|
2015
|
+
// coercion-ok: resolution failure means this optional store lookup is absent.
|
|
2016
|
+
}
|
|
2017
|
+
catch {
|
|
2018
|
+
// The dependency may be available only through the workspace pnpm store.
|
|
2019
|
+
}
|
|
2020
|
+
}
|
|
2021
|
+
const packagePath = packageName.split("/");
|
|
2022
|
+
const pnpmPrefix = `${packageName.replace("/", "+")}@`;
|
|
2023
|
+
for (const root of nodeModulesRoots) {
|
|
2024
|
+
const direct = path.join(root, ...packagePath);
|
|
2025
|
+
if (readPackageManifest(direct)?.name === packageName)
|
|
2026
|
+
return direct;
|
|
2027
|
+
const pnpmRoot = path.join(root, ".pnpm");
|
|
2028
|
+
if (!fs.existsSync(pnpmRoot))
|
|
2029
|
+
continue;
|
|
2030
|
+
for (const entry of fs.readdirSync(pnpmRoot)) {
|
|
2031
|
+
if (!entry.startsWith(pnpmPrefix))
|
|
2032
|
+
continue;
|
|
2033
|
+
const nested = path.join(pnpmRoot, entry, "node_modules", ...packagePath);
|
|
2034
|
+
if (readPackageManifest(nested)?.name === packageName)
|
|
2035
|
+
return nested;
|
|
2036
|
+
}
|
|
2037
|
+
}
|
|
2038
|
+
return null;
|
|
2039
|
+
}
|
|
2040
|
+
function copyRuntimePackageTree(packageName, packageDir, serverDir, nodeModulesRoots, copiedPackages) {
|
|
2041
|
+
if (copiedPackages.has(packageName))
|
|
2042
|
+
return 0;
|
|
2043
|
+
copiedPackages.add(packageName);
|
|
2044
|
+
const destination = path.join(serverDir, "node_modules", ...packageName.split("/"));
|
|
2045
|
+
copyDir(packageDir, destination);
|
|
2046
|
+
const manifest = readPackageManifest(packageDir);
|
|
2047
|
+
const dependencies = manifest?.dependencies;
|
|
2048
|
+
if (!dependencies || typeof dependencies !== "object")
|
|
2049
|
+
return 1;
|
|
2050
|
+
let copiedCount = 1;
|
|
2051
|
+
for (const dependencyName of Object.keys(dependencies)) {
|
|
2052
|
+
const dependencyDir = findInstalledPackageRoot(dependencyName, nodeModulesRoots, packageDir);
|
|
2053
|
+
if (!dependencyDir) {
|
|
2054
|
+
throw new Error(`[deploy] Could not resolve ${dependencyName}, required by ${packageName}, for the serverless browser runtime.`);
|
|
2055
|
+
}
|
|
2056
|
+
copiedCount += copyRuntimePackageTree(dependencyName, dependencyDir, serverDir, nodeModulesRoots, copiedPackages);
|
|
2057
|
+
}
|
|
2058
|
+
return copiedCount;
|
|
2059
|
+
}
|
|
2060
|
+
export function copyInstalledBrowserRuntimePackages(serverDir, projectCwd = cwd) {
|
|
2061
|
+
if (!serverDir || !fs.existsSync(serverDir))
|
|
2062
|
+
return 0;
|
|
2063
|
+
const nodeModulesRoots = nodeModulesAncestors(projectCwd);
|
|
2064
|
+
const copiedPackages = new Set();
|
|
2065
|
+
let copiedCount = 0;
|
|
2066
|
+
for (const packageName of SERVERLESS_BROWSER_RUNTIME_PACKAGES) {
|
|
2067
|
+
const packageDir = findInstalledPackageRoot(packageName, nodeModulesRoots);
|
|
2068
|
+
if (!packageDir)
|
|
2069
|
+
continue;
|
|
2070
|
+
copiedCount += copyRuntimePackageTree(packageName, packageDir, serverDir, nodeModulesRoots, copiedPackages);
|
|
2071
|
+
}
|
|
2072
|
+
if (copiedCount > 0) {
|
|
2073
|
+
console.log(`[deploy] Copied ${copiedCount} serverless browser runtime package(s) into the server bundle.`);
|
|
2074
|
+
}
|
|
2075
|
+
return copiedCount;
|
|
2076
|
+
}
|
|
1981
2077
|
function findInstalledLibsqlNativePackage(nodeModulesRoots, packageName) {
|
|
1982
2078
|
for (const root of nodeModulesRoots) {
|
|
1983
2079
|
const direct = path.join(root, "@libsql", packageName);
|
|
@@ -2135,8 +2231,6 @@ const BACKGROUND_WARM_PATH = ${backgroundWarmPath};
|
|
|
2135
2231
|
const REQUEST_TIMEOUT_MS = 25_000;
|
|
2136
2232
|
|
|
2137
2233
|
function siteOrigin(request) {
|
|
2138
|
-
const configured = process.env.URL || process.env.DEPLOY_URL;
|
|
2139
|
-
if (configured) return configured;
|
|
2140
2234
|
return new URL(request.url).origin;
|
|
2141
2235
|
}
|
|
2142
2236
|
|
|
@@ -2228,8 +2322,6 @@ const PROCESSOR_ROUTE = ${JSON.stringify(AGENT_BACKGROUND_PROCESSOR_ROUTE)};
|
|
|
2228
2322
|
const PROCESSOR_ROUTE_FIELD = ${JSON.stringify(AGENT_BACKGROUND_PROCESSOR_ROUTE_FIELD)};
|
|
2229
2323
|
|
|
2230
2324
|
function siteOrigin(request) {
|
|
2231
|
-
const configured = process.env.URL || process.env.DEPLOY_URL;
|
|
2232
|
-
if (configured) return configured;
|
|
2233
2325
|
return new URL(request.url).origin;
|
|
2234
2326
|
}
|
|
2235
2327
|
|
|
@@ -3436,6 +3528,7 @@ export default bundle;
|
|
|
3436
3528
|
copyInstalledLibsqlNativePackages(nitro.options.output.serverDir);
|
|
3437
3529
|
copyInstalledResvgPackages(nitro.options.output.serverDir);
|
|
3438
3530
|
copyInstalledFfmpegStaticPackage(nitro.options.output.serverDir);
|
|
3531
|
+
copyInstalledBrowserRuntimePackages(nitro.options.output.serverDir);
|
|
3439
3532
|
sanitizeServerlessFunctionPackageManifest(nitro.options.output.serverDir);
|
|
3440
3533
|
bundleYjsRuntimeForServerlessOutput(nitro.options.output.serverDir, cwd);
|
|
3441
3534
|
}
|
|
@@ -501,8 +501,6 @@ const PROCESSOR_ROUTE = ${JSON.stringify(AGENT_BACKGROUND_PROCESSOR_ROUTE)};
|
|
|
501
501
|
const PROCESSOR_ROUTE_FIELD = ${JSON.stringify(AGENT_BACKGROUND_PROCESSOR_ROUTE_FIELD)};
|
|
502
502
|
|
|
503
503
|
function siteOrigin(request) {
|
|
504
|
-
const configured = process.env.URL || process.env.DEPLOY_URL;
|
|
505
|
-
if (configured) return configured;
|
|
506
504
|
return new URL(request.url).origin;
|
|
507
505
|
}
|
|
508
506
|
|
|
@@ -17,11 +17,11 @@ declare const _default: import("../../action.js").ActionDefinition<{
|
|
|
17
17
|
id?: undefined;
|
|
18
18
|
provider?: undefined;
|
|
19
19
|
} | {
|
|
20
|
+
error?: undefined;
|
|
20
21
|
configured?: undefined;
|
|
21
22
|
connectPath?: undefined;
|
|
22
23
|
url: string;
|
|
23
24
|
id: string;
|
|
24
25
|
provider: string;
|
|
25
|
-
error?: undefined;
|
|
26
26
|
}>;
|
|
27
27
|
export default _default;
|
|
@@ -34,6 +34,15 @@
|
|
|
34
34
|
import { lineColForOffset, readFileSafe, relPosix, walk, } from "./scan-utils.js";
|
|
35
35
|
const ALLOWLIST_EXACT = new Set([
|
|
36
36
|
"DATABASE_URL",
|
|
37
|
+
// Direct (non-pooler) connection to the same database as DATABASE_URL, used by
|
|
38
|
+
// drizzle-kit for migrations. Builder-hosted apps get it unprefixed; the
|
|
39
|
+
// NETLIFY_DATABASE_URL_UNPOOLED spelling is covered by the NETLIFY_ prefix.
|
|
40
|
+
"DATABASE_URL_UNPOOLED",
|
|
41
|
+
// Builder/Fusion deploy metadata: which branch kind the app was built for.
|
|
42
|
+
// Exact, not a FUSION_ prefix — a prefix would let an app secret named
|
|
43
|
+
// FUSION_STRIPE_SECRET_KEY through, and this is the only FUSION_ key any
|
|
44
|
+
// generated app code reads.
|
|
45
|
+
"FUSION_BRANCH_KIND",
|
|
37
46
|
"DATABASE_AUTH_TOKEN",
|
|
38
47
|
"NODE_ENV",
|
|
39
48
|
"CI",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { acquireIngestionLease, assertInventoryComplete, consumeIngestionBudget, createIngestionBudgetState, createIngestionCheckpoint, ingestionBudgetStopReason, releaseIngestionLease, renewIngestionLease, type AcquireIngestionLeaseInput, type AcquireIngestionLeaseResult, type IngestionBudgetLimits, type IngestionBudgetState, type IngestionBudgetStopReason, type IngestionCheckpoint, type IngestionLease, type IngestionPhase, } from "./orchestration.js";
|
|
2
2
|
export { detectOfficeDocumentType, normalizeDocumentText, parseOfficeDocument, type OfficeDocumentAst, type OfficeDocumentParser, type OfficeDocumentPart, type OfficeDocumentType, type ParsedOfficeDocument, type ParseOfficeDocumentInput, } from "./office.js";
|
|
3
|
-
export { parsePptxPresentation, type ParsedPptxImage, type ParsedPptxPresentation, type ParsedPptxSlide, type ParsedPptxTextRun, } from "./pptx.js";
|
|
3
|
+
export { parsePptxPresentation, type ParsedPptxImage, type ParsedPptxElement, type ParsedPptxGrid, type ParsedPptxParagraph, type ParsedPptxPresentation, type ParsedPptxSlide, type ParsedPptxTextRun, } from "./pptx.js";
|
|
4
4
|
export { extractDocxSections, parseDocxDocument, sanitizeInertDocumentHtml, type ParsedDocxDocument, type ParsedDocxSection, } from "./docx.js";
|
|
5
5
|
export { compositeFigmaColors, extractFigmaTopLevelFrames, figmaColorToHex, figmaContrastRatio, summarizeFigmaFrame, summarizeFigmaNode, type FigmaContextNode, type FigmaFrameSummary, type FigmaRgba, type SummarizeFigmaNodeResult, } from "./figma.js";
|
|
6
6
|
export { cssBlendMode, gradientAngleDegreesFromHandles, gradientGeometryFromTransform, handlePositionsFromArrayTransform, handlePositionsFromObjectTransform, invert2x3, mat2x3FromArray, remapLinearStopPosition, resolveGradientHandles, vectorLength, type BlendModeResult, type BlendVerdict, type GradientGeometry, type GradientHandles, type GradientKind, type Mat2x3Array, type Mat2x3Object, type Vec2, } from "./figma-paint-math.js";
|
package/dist/ingestion/pptx.d.ts
CHANGED
|
@@ -4,7 +4,48 @@ export interface ParsedPptxTextRun {
|
|
|
4
4
|
italic?: boolean;
|
|
5
5
|
fontSize?: number;
|
|
6
6
|
color?: string;
|
|
7
|
+
fontFamily?: string;
|
|
8
|
+
underline?: boolean;
|
|
7
9
|
}
|
|
10
|
+
export interface ParsedPptxParagraph {
|
|
11
|
+
runs: ParsedPptxTextRun[];
|
|
12
|
+
alignment?: "left" | "center" | "right" | "justify";
|
|
13
|
+
bulletChar?: string;
|
|
14
|
+
bulletColor?: string;
|
|
15
|
+
bulletFontFamily?: string;
|
|
16
|
+
bulletSize?: number;
|
|
17
|
+
level?: number;
|
|
18
|
+
marginLeftEmu?: number;
|
|
19
|
+
indentEmu?: number;
|
|
20
|
+
lineSpacing?: number;
|
|
21
|
+
spaceBeforePt?: number;
|
|
22
|
+
spaceAfterPt?: number;
|
|
23
|
+
}
|
|
24
|
+
export interface ParsedPptxElement {
|
|
25
|
+
id: string;
|
|
26
|
+
name?: string;
|
|
27
|
+
placeholderType?: string;
|
|
28
|
+
kind: "text" | "image" | "shape";
|
|
29
|
+
x: number;
|
|
30
|
+
y: number;
|
|
31
|
+
width: number;
|
|
32
|
+
height: number;
|
|
33
|
+
rotation?: number;
|
|
34
|
+
shapeType?: string;
|
|
35
|
+
fill?: string;
|
|
36
|
+
lineColor?: string;
|
|
37
|
+
lineWidth?: number;
|
|
38
|
+
padding?: {
|
|
39
|
+
left: number;
|
|
40
|
+
right: number;
|
|
41
|
+
top: number;
|
|
42
|
+
bottom: number;
|
|
43
|
+
};
|
|
44
|
+
verticalAlign?: "top" | "middle" | "bottom";
|
|
45
|
+
paragraphs?: ParsedPptxParagraph[];
|
|
46
|
+
image?: ParsedPptxImage;
|
|
47
|
+
}
|
|
48
|
+
export type ParsedPptxTransition = "instant" | "none" | "fade" | "slide" | "zoom";
|
|
8
49
|
export interface ParsedPptxImage {
|
|
9
50
|
data: Uint8Array;
|
|
10
51
|
mimeType: string;
|
|
@@ -13,12 +54,38 @@ export interface ParsedPptxImage {
|
|
|
13
54
|
aspectRatio?: number;
|
|
14
55
|
/** True when the picture shape covers at least ~85% of the slide's width and height — a full-bleed background photo rather than an inset card image. */
|
|
15
56
|
fullBleed?: boolean;
|
|
57
|
+
crop?: {
|
|
58
|
+
left: number;
|
|
59
|
+
top: number;
|
|
60
|
+
right: number;
|
|
61
|
+
bottom: number;
|
|
62
|
+
};
|
|
16
63
|
}
|
|
17
64
|
export interface ParsedPptxSlide {
|
|
18
65
|
texts: ParsedPptxTextRun[];
|
|
19
66
|
images: ParsedPptxImage[];
|
|
67
|
+
elements: ParsedPptxElement[];
|
|
68
|
+
widthEmu?: number;
|
|
69
|
+
heightEmu?: number;
|
|
70
|
+
backgroundColor?: string;
|
|
71
|
+
/** A decorative grid inherited from the slide master, when one is present. */
|
|
72
|
+
backgroundGrid?: ParsedPptxGrid;
|
|
20
73
|
notes?: string;
|
|
21
74
|
layoutHint?: string;
|
|
75
|
+
transition?: ParsedPptxTransition;
|
|
76
|
+
splitByParagraph?: boolean;
|
|
77
|
+
}
|
|
78
|
+
export interface ParsedPptxGrid {
|
|
79
|
+
color: string;
|
|
80
|
+
stepXEmu: number;
|
|
81
|
+
stepYEmu: number;
|
|
82
|
+
offsetXEmu: number;
|
|
83
|
+
offsetYEmu: number;
|
|
84
|
+
lineWidthEmu: number;
|
|
85
|
+
}
|
|
86
|
+
export interface ParsedPptxSlideMetadata {
|
|
87
|
+
transition?: ParsedPptxTransition;
|
|
88
|
+
splitByParagraph?: boolean;
|
|
22
89
|
}
|
|
23
90
|
export interface ParsedPptxPresentation {
|
|
24
91
|
title: string;
|
|
@@ -29,3 +96,4 @@ export interface ParsedPptxPresentation {
|
|
|
29
96
|
};
|
|
30
97
|
}
|
|
31
98
|
export declare function parsePptxPresentation(fileBuffer: Uint8Array): Promise<ParsedPptxPresentation>;
|
|
99
|
+
export declare function parsePptxSlideMetadata(value: unknown): ParsedPptxSlideMetadata;
|