@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.
Files changed (371) hide show
  1. package/agent-native.eject.json +9 -0
  2. package/corpus/README.md +1 -1
  3. package/corpus/templates/analytics/.agents/skills/provider-api/SKILL.md +19 -0
  4. package/corpus/templates/analytics/.agents/skills/turn-into-app/SKILL.md +296 -0
  5. package/corpus/templates/analytics/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
  6. package/corpus/templates/analytics/.agents/skills/turn-into-skill/SKILL.md +112 -0
  7. package/corpus/templates/analytics/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  8. package/corpus/templates/analytics/AGENTS.md +35 -38
  9. package/corpus/templates/analytics/actions/ensure-native-v2-dashboards.ts +1 -1
  10. package/corpus/templates/analytics/actions/list-dashboard-usage-stats.ts +17 -22
  11. package/corpus/templates/analytics/actions/migrate-first-party-analytics-to-bigquery.ts +1 -1
  12. package/corpus/templates/analytics/actions/navigate.ts +4 -5
  13. package/corpus/templates/analytics/actions/provider-api-register.ts +50 -0
  14. package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +44 -11
  15. package/corpus/templates/analytics/actions/test-custom-api-connection.ts +106 -0
  16. package/corpus/templates/analytics/app/components/CustomApiCard.tsx +430 -0
  17. package/corpus/templates/analytics/app/i18n-data.ts +680 -0
  18. package/corpus/templates/analytics/app/lib/native-mcp-exclusions.ts +6 -0
  19. package/corpus/templates/analytics/app/lib/sql-query.ts +33 -6
  20. package/corpus/templates/analytics/app/pages/DataSources.tsx +4 -0
  21. package/corpus/templates/analytics/changelog/2026-08-06-analytics-dashboards-load-reliably-during-background-data-sw.md +6 -0
  22. package/corpus/templates/analytics/changelog/2026-08-06-analytics-dashboards-remain-responsive-while-historical-data.md +6 -0
  23. package/corpus/templates/analytics/changelog/2026-08-06-analytics-query-results-now-render-as-a-table-with-csv-downl.md +6 -0
  24. package/corpus/templates/analytics/changelog/2026-08-06-connect-public-https-custom-apis-and-hand-tested-endpoints-t.md +6 -0
  25. package/corpus/templates/analytics/changelog/2026-08-06-durable-agent-worker-memory.md +6 -0
  26. package/corpus/templates/analytics/changelog/2026-08-06-live-dashboard-panels-use-the-shared-query-timeout.md +6 -0
  27. package/corpus/templates/analytics/changelog/2026-08-06-on-demand-billing-is-available-as-a-native-dashboard-with-ta.md +6 -0
  28. package/corpus/templates/analytics/changelog/2026-08-06-visible-dashboard-names-are-unique.md +6 -0
  29. package/corpus/templates/analytics/netlify.toml +7 -0
  30. package/corpus/templates/analytics/scripts/emit-netlify-dashboard-report-cron.ts +4 -0
  31. package/corpus/templates/analytics/server/db/index.ts +27 -0
  32. package/corpus/templates/analytics/server/db/schema.ts +10 -0
  33. package/corpus/templates/analytics/server/lib/dashboards-store.ts +227 -60
  34. package/corpus/templates/analytics/server/lib/first-party-analytics-backend.ts +156 -45
  35. package/corpus/templates/analytics/server/lib/native-v2-dashboards.ts +227 -1
  36. package/corpus/templates/analytics/server/plugins/agent-chat.ts +5 -0
  37. package/corpus/templates/analytics/server/plugins/analytics-rollup-backfill-jobs.ts +1 -0
  38. package/corpus/templates/analytics/server/plugins/db.ts +52 -18
  39. package/corpus/templates/assets/.agents/skills/asset-generation/SKILL.md +28 -2
  40. package/corpus/templates/assets/.agents/skills/image-generation/SKILL.md +16 -1
  41. package/corpus/templates/assets/.agents/skills/turn-into-app/SKILL.md +296 -0
  42. package/corpus/templates/assets/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
  43. package/corpus/templates/assets/.agents/skills/turn-into-skill/SKILL.md +112 -0
  44. package/corpus/templates/assets/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  45. package/corpus/templates/brain/.agents/skills/turn-into-app/SKILL.md +296 -0
  46. package/corpus/templates/brain/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
  47. package/corpus/templates/brain/.agents/skills/turn-into-skill/SKILL.md +112 -0
  48. package/corpus/templates/brain/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  49. package/corpus/templates/brain/actions/list-connection-providers.ts +24 -3
  50. package/corpus/templates/brain/app/lib/dispatch-links.ts +44 -0
  51. package/corpus/templates/brain/app/routes/sources.tsx +15 -7
  52. package/corpus/templates/brain/changelog/2026-08-06-brain-provider-setup-links-open-dispatch-correctly-in-standa.md +6 -0
  53. package/corpus/templates/brain/server/plugins/agent-chat.ts +1 -0
  54. package/corpus/templates/calendar/.agents/skills/event-management/SKILL.md +26 -0
  55. package/corpus/templates/calendar/.agents/skills/turn-into-app/SKILL.md +296 -0
  56. package/corpus/templates/calendar/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
  57. package/corpus/templates/calendar/.agents/skills/turn-into-skill/SKILL.md +112 -0
  58. package/corpus/templates/calendar/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  59. package/corpus/templates/calendar/AGENTS.md +11 -32
  60. package/corpus/templates/calendar/actions/update-event.ts +107 -1
  61. package/corpus/templates/calendar/app/components/calendar/EventCalendarSelect.tsx +83 -0
  62. package/corpus/templates/calendar/app/components/calendar/EventDetailPanel.tsx +57 -0
  63. package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +59 -73
  64. package/corpus/templates/calendar/app/hooks/use-events.ts +4 -1
  65. package/corpus/templates/calendar/app/i18n-data.ts +20 -0
  66. package/corpus/templates/calendar/changelog/2026-08-06-delegated-requests-continue-in-the-background.md +6 -0
  67. package/corpus/templates/calendar/changelog/2026-08-06-existing-events-can-move-between-connected-google-account-ca.md +6 -0
  68. package/corpus/templates/calendar/server/lib/google-calendar.ts +101 -0
  69. package/corpus/templates/calendar/server/plugins/agent-chat.ts +7 -1
  70. package/corpus/templates/chat/.agents/skills/turn-into-app/SKILL.md +296 -0
  71. package/corpus/templates/chat/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
  72. package/corpus/templates/chat/.agents/skills/turn-into-skill/SKILL.md +112 -0
  73. package/corpus/templates/chat/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  74. package/corpus/templates/clips/.agents/skills/turn-into-app/SKILL.md +296 -0
  75. package/corpus/templates/clips/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
  76. package/corpus/templates/clips/.agents/skills/turn-into-skill/SKILL.md +112 -0
  77. package/corpus/templates/clips/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  78. package/corpus/templates/clips/app/components/editor/editor-layout.tsx +9 -24
  79. package/corpus/templates/clips/app/components/editor/timeline-geometry.ts +15 -0
  80. package/corpus/templates/clips/app/components/editor/waveform.tsx +4 -17
  81. package/corpus/templates/clips/app/components/player/delete-recording-menu.tsx +14 -3
  82. package/corpus/templates/clips/app/components/player/player-controls.tsx +0 -3
  83. package/corpus/templates/clips/app/components/player/scrubber.tsx +2 -33
  84. package/corpus/templates/clips/app/components/player/video-player.tsx +58 -11
  85. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +28 -38
  86. package/corpus/templates/clips/app/routes/share.$shareId.tsx +21 -27
  87. package/corpus/templates/clips/changelog/2026-08-06-clips-recovers-from-stalled-recording-setup-without-requirin.md +6 -0
  88. package/corpus/templates/clips/changelog/2026-08-06-clips-starts-faster-after-a-deploy-or-idle-period-startup-no.md +6 -0
  89. package/corpus/templates/clips/changelog/2026-08-06-deleting-a-recording-returns-cleanly-to-the-library-and-fit-.md +6 -0
  90. package/corpus/templates/clips/changelog/2026-08-06-hide-clip-insights-from-viewers-without-analytics-access.md +6 -0
  91. package/corpus/templates/clips/changelog/2026-08-06-trimmed-clips-play-on-a-clean-timeline-without-cut-markers.md +6 -0
  92. package/corpus/templates/clips/desktop/src/app.tsx +48 -20
  93. package/corpus/templates/clips/desktop/src/lib/recorder.ts +275 -74
  94. package/corpus/templates/clips/desktop/src/lib/recording-start-guard.ts +84 -0
  95. package/corpus/templates/clips/desktop/src/overlays/toolbar.tsx +14 -4
  96. package/corpus/templates/clips/server/plugins/db.ts +214 -26
  97. package/corpus/templates/content/.agents/skills/turn-into-app/SKILL.md +296 -0
  98. package/corpus/templates/content/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
  99. package/corpus/templates/content/.agents/skills/turn-into-skill/SKILL.md +112 -0
  100. package/corpus/templates/content/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  101. package/corpus/templates/crm/.agents/skills/turn-into-app/SKILL.md +296 -0
  102. package/corpus/templates/crm/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
  103. package/corpus/templates/crm/.agents/skills/turn-into-skill/SKILL.md +112 -0
  104. package/corpus/templates/crm/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  105. package/corpus/templates/crm/changelog/2026-08-06-crm-starts-faster-after-a-deploy-or-idle-period-one-time-dat.md +6 -0
  106. package/corpus/templates/crm/server/plugins/db.ts +11 -8
  107. package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +36 -1
  108. package/corpus/templates/design/.agents/skills/turn-into-app/SKILL.md +296 -0
  109. package/corpus/templates/design/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
  110. package/corpus/templates/design/.agents/skills/turn-into-skill/SKILL.md +112 -0
  111. package/corpus/templates/design/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  112. package/corpus/templates/design/actions/import-from-url.ts +1 -1
  113. package/corpus/templates/design/app/components/design/LayersPanel.tsx +27 -18
  114. package/corpus/templates/design/app/pages/Index.tsx +6 -2
  115. package/corpus/templates/design/changelog/2026-08-05-deleting-a-design-from-the-home-page-no-longer-leaves-the-ap.md +6 -0
  116. package/corpus/templates/design/changelog/2026-08-05-renaming-a-layer-now-focuses-its-name-field-automatically.md +6 -0
  117. package/corpus/templates/design/server/plugins/agent-chat.ts +2 -0
  118. package/corpus/templates/dispatch/.agents/skills/turn-into-app/SKILL.md +296 -0
  119. package/corpus/templates/dispatch/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
  120. package/corpus/templates/dispatch/.agents/skills/turn-into-skill/SKILL.md +112 -0
  121. package/corpus/templates/dispatch/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  122. package/corpus/templates/dispatch/AGENTS.md +8 -1
  123. package/corpus/templates/dispatch/app/dispatch-extensions.tsx +1 -0
  124. package/corpus/templates/dispatch/app/hooks/use-navigation-state.ts +30 -15
  125. package/corpus/templates/dispatch/app/i18n-data.ts +131 -0
  126. package/corpus/templates/dispatch/app/routes/admin._index.tsx +4 -0
  127. package/corpus/templates/dispatch/app/routes/admin.agents.tsx +1 -0
  128. package/corpus/templates/dispatch/app/routes/admin.approvals.tsx +1 -0
  129. package/corpus/templates/dispatch/app/routes/admin.apps.$appId.tsx +1 -0
  130. package/corpus/templates/dispatch/app/routes/admin.apps.tsx +1 -0
  131. package/corpus/templates/dispatch/app/routes/admin.audit.tsx +1 -0
  132. package/corpus/templates/dispatch/app/routes/admin.automations.tsx +1 -0
  133. package/corpus/templates/dispatch/app/routes/admin.destinations.tsx +4 -0
  134. package/corpus/templates/dispatch/app/routes/admin.dreams.tsx +1 -0
  135. package/corpus/templates/dispatch/app/routes/admin.identities.tsx +1 -0
  136. package/corpus/templates/dispatch/app/routes/admin.integrations.tsx +4 -0
  137. package/corpus/templates/dispatch/app/routes/admin.messaging.tsx +1 -0
  138. package/corpus/templates/dispatch/app/routes/admin.metrics.tsx +1 -0
  139. package/corpus/templates/dispatch/app/routes/admin.new-app.tsx +1 -0
  140. package/corpus/templates/dispatch/app/routes/admin.operations.tsx +1 -0
  141. package/corpus/templates/dispatch/app/routes/admin.thread-debug.tsx +4 -0
  142. package/corpus/templates/dispatch/app/routes/admin.transactional-email.$appId.$id.tsx +4 -0
  143. package/corpus/templates/dispatch/app/routes/admin.transactional-email.tsx +4 -0
  144. package/corpus/templates/dispatch/app/routes/admin.tsx +1 -0
  145. package/corpus/templates/dispatch/app/routes/admin.vault.tsx +1 -0
  146. package/corpus/templates/dispatch/app/routes/admin.workspace.tsx +1 -0
  147. package/corpus/templates/dispatch/changelog/2026-08-06-dispatch-keeps-everyday-navigation-focused-while-management-.md +6 -0
  148. package/corpus/templates/dispatch/changelog/2026-08-06-ready-workspace-apps-stay-one-click-away-in-a-compact-dispat.md +6 -0
  149. package/corpus/templates/dispatch/changelog/2026-08-06-shared-vault-values-and-management-are-now-restricted-to-wor.md +6 -0
  150. package/corpus/templates/factory/.agents/skills/turn-into-app/SKILL.md +296 -0
  151. package/corpus/templates/factory/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
  152. package/corpus/templates/factory/.agents/skills/turn-into-skill/SKILL.md +112 -0
  153. package/corpus/templates/factory/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  154. package/corpus/templates/forms/.agents/skills/turn-into-app/SKILL.md +296 -0
  155. package/corpus/templates/forms/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
  156. package/corpus/templates/forms/.agents/skills/turn-into-skill/SKILL.md +112 -0
  157. package/corpus/templates/forms/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  158. package/corpus/templates/forms/changelog/2026-08-06-delegated-requests-continue-in-the-background.md +6 -0
  159. package/corpus/templates/forms/server/plugins/agent-chat.ts +4 -0
  160. package/corpus/templates/macros/.agents/skills/turn-into-app/SKILL.md +296 -0
  161. package/corpus/templates/macros/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
  162. package/corpus/templates/macros/.agents/skills/turn-into-skill/SKILL.md +112 -0
  163. package/corpus/templates/macros/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  164. package/corpus/templates/mail/.agents/skills/turn-into-app/SKILL.md +296 -0
  165. package/corpus/templates/mail/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
  166. package/corpus/templates/mail/.agents/skills/turn-into-skill/SKILL.md +112 -0
  167. package/corpus/templates/mail/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  168. package/corpus/templates/mail/changelog/2026-08-06-delegated-requests-continue-in-the-background.md +6 -0
  169. package/corpus/templates/mail/server/plugins/agent-chat.ts +6 -0
  170. package/corpus/templates/plan/.agents/skills/turn-into-app/SKILL.md +296 -0
  171. package/corpus/templates/plan/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
  172. package/corpus/templates/plan/.agents/skills/turn-into-skill/SKILL.md +112 -0
  173. package/corpus/templates/plan/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  174. package/corpus/templates/slides/.agents/skills/create-deck/SKILL.md +48 -5
  175. package/corpus/templates/slides/.agents/skills/design-systems/SKILL.md +37 -1
  176. package/corpus/templates/slides/.agents/skills/image-generation-via-a2a/SKILL.md +6 -0
  177. package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +15 -2
  178. package/corpus/templates/slides/.agents/skills/slide-images/SKILL.md +29 -24
  179. package/corpus/templates/slides/.agents/skills/turn-into-app/SKILL.md +296 -0
  180. package/corpus/templates/slides/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
  181. package/corpus/templates/slides/.agents/skills/turn-into-skill/SKILL.md +112 -0
  182. package/corpus/templates/slides/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  183. package/corpus/templates/slides/AGENTS.md +17 -21
  184. package/corpus/templates/slides/_gitignore +1 -0
  185. package/corpus/templates/slides/actions/export-pptx.ts +470 -36
  186. package/corpus/templates/slides/actions/get-deck.ts +12 -0
  187. package/corpus/templates/slides/actions/import-file.ts +175 -139
  188. package/corpus/templates/slides/actions/import-google-slides-reference.ts +271 -12
  189. package/corpus/templates/slides/actions/import-pptx.ts +193 -68
  190. package/corpus/templates/slides/actions/patch-deck.ts +51 -0
  191. package/corpus/templates/slides/actions/update-slide.ts +29 -3
  192. package/corpus/templates/slides/app/components/deck/DeckCard.tsx +10 -13
  193. package/corpus/templates/slides/app/components/editor/AddSlidePopover.tsx +5 -1
  194. package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +25 -12
  195. package/corpus/templates/slides/app/components/editor/ExportMenu.tsx +112 -57
  196. package/corpus/templates/slides/app/components/editor/GoogleDriveConnectionCta.tsx +202 -0
  197. package/corpus/templates/slides/app/components/editor/GoogleSlidesReferenceImport.tsx +26 -14
  198. package/corpus/templates/slides/app/components/editor/PromptDialog.tsx +173 -0
  199. package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +182 -141
  200. package/corpus/templates/slides/app/components/editor/canvas-interactions/index.ts +1 -0
  201. package/corpus/templates/slides/app/components/editor/canvas-interactions/slides-canvas-adapter.ts +18 -0
  202. package/corpus/templates/slides/app/components/editor/slide-text-targets.ts +85 -0
  203. package/corpus/templates/slides/app/components/layout/Layout.tsx +3 -0
  204. package/corpus/templates/slides/app/components/onboarding/FirstDeckOnboardingFlow.tsx +15 -0
  205. package/corpus/templates/slides/app/components/presentation/PresentationView.tsx +27 -1
  206. package/corpus/templates/slides/app/i18n/en-US.ts +1 -0
  207. package/corpus/templates/slides/app/lib/create-deck-generation.ts +72 -11
  208. package/corpus/templates/slides/app/lib/deck-preview-frame.ts +15 -0
  209. package/corpus/templates/slides/app/lib/deck-share-links.ts +9 -0
  210. package/corpus/templates/slides/app/lib/export-pptx-client.ts +89 -0
  211. package/corpus/templates/slides/app/lib/import-uploaded-deck.ts +89 -0
  212. package/corpus/templates/slides/app/lib/slide-animation-elements.ts +3 -0
  213. package/corpus/templates/slides/app/pages/Index.tsx +172 -15
  214. package/corpus/templates/slides/changelog/2026-08-06-clicking-the-gray-canvas-around-a-slide-clears-its-selection.md +6 -0
  215. package/corpus/templates/slides/changelog/2026-08-06-deck-thumbnails-keep-a-consistent-listing-frame-across-aspec.md +6 -0
  216. package/corpus/templates/slides/changelog/2026-08-06-deep-linked-decks-open-directly-instead-of-being-interrupted.md +6 -0
  217. package/corpus/templates/slides/changelog/2026-08-06-google-slides-exports-now-show-clear-import-steps-when-direc.md +6 -0
  218. package/corpus/templates/slides/changelog/2026-08-06-import-pdf-google-slides-and-powerpoint-decks-directly-from-.md +6 -0
  219. package/corpus/templates/slides/changelog/2026-08-06-imported-powerpoint-exports-keep-text-and-images-editable-an.md +6 -0
  220. package/corpus/templates/slides/changelog/2026-08-06-presentation-prompts-continue-adding-rendered-slides-until-t.md +6 -0
  221. package/corpus/templates/slides/changelog/2026-08-06-public-decks-now-share-read-only-presentation-links-by-defau.md +6 -0
  222. package/corpus/templates/slides/changelog/2026-08-06-slides-offers-a-direct-connect-google-button-when-a-drive-co.md +6 -0
  223. package/corpus/templates/slides/changelog/2026-08-06-slides-preserve-uploaded-pdf-layouts-accept-larger-reference.md +6 -0
  224. package/corpus/templates/slides/changelog/2026-08-06-styled-words-stay-part-of-their-text-box-instead-of-becoming.md +6 -0
  225. package/corpus/templates/slides/changelog/2026-08-06-uploaded-decks-keep-their-slides-and-visuals-when-you-improv.md +6 -0
  226. package/corpus/templates/slides/server/handlers/google-docs-auth.ts +7 -20
  227. package/corpus/templates/slides/server/handlers/import/html-converter.ts +247 -13
  228. package/corpus/templates/slides/server/handlers/import/pptx-assets.ts +67 -0
  229. package/corpus/templates/slides/server/handlers/import/pptx-parser.ts +2 -0
  230. package/corpus/templates/slides/server/handlers/uploads.ts +7 -3
  231. package/corpus/templates/slides/server/lib/chat-attachments.ts +7 -4
  232. package/corpus/templates/slides/server/lib/emails.ts +7 -2
  233. package/corpus/templates/slides/server/lib/google-docs-error.ts +50 -0
  234. package/corpus/templates/slides/server/lib/google-docs-oauth.ts +1 -0
  235. package/corpus/templates/slides/server/lib/import-asset-storage.ts +127 -0
  236. package/corpus/templates/slides/server/lib/source-import.ts +167 -0
  237. package/corpus/templates/slides/server/plugins/agent-chat.ts +12 -3
  238. package/corpus/templates/slides/server/routes/api/import-assets/[token].get.ts +70 -0
  239. package/corpus/templates/slides/shared/upload-types.ts +3 -0
  240. package/corpus/templates/tasks/.agents/skills/turn-into-app/SKILL.md +296 -0
  241. package/corpus/templates/tasks/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
  242. package/corpus/templates/tasks/.agents/skills/turn-into-skill/SKILL.md +112 -0
  243. package/corpus/templates/tasks/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  244. package/dist/agent/production-agent.d.ts +17 -0
  245. package/dist/agent/production-agent.js +72 -1
  246. package/dist/cli/agent-plugin.d.ts +112 -0
  247. package/dist/cli/agent-plugin.js +1081 -0
  248. package/dist/cli/app-skill.js +39 -1
  249. package/dist/cli/code-agent-executor.d.ts +3 -0
  250. package/dist/cli/code-agent-executor.js +51 -13
  251. package/dist/cli/index.js +13 -0
  252. package/dist/cli/templates-meta.js +1 -1
  253. package/dist/client/AgentPanel.d.ts +3 -1
  254. package/dist/client/AgentPanel.js +9 -2
  255. package/dist/client/AssistantChat.d.ts +8 -0
  256. package/dist/client/AssistantChat.js +23 -8
  257. package/dist/client/NewWorkspaceAppFlow.js +1 -0
  258. package/dist/client/agent-chat-adapter.js +123 -4
  259. package/dist/client/assistant-ui-recovery.d.ts +2 -1
  260. package/dist/client/assistant-ui-recovery.js +7 -3
  261. package/dist/client/onboarding/FirstRunOnboarding.js +11 -4
  262. package/dist/client/org/TeamPage.js +1 -1
  263. package/dist/client/require-session.js +1 -1
  264. package/dist/client/resources/McpConnectionSuggestion.d.ts +1 -0
  265. package/dist/client/resources/McpConnectionSuggestion.js +27 -10
  266. package/dist/client/resources/McpIntegrationDialog.js +77 -45
  267. package/dist/client/resources/mcp-integration-catalog.d.ts +13 -1
  268. package/dist/client/resources/mcp-integration-catalog.js +255 -2
  269. package/dist/client/resources/mcp-integration-logos.js +18 -2
  270. package/dist/client/settings/AccountSettingsCard.js +2 -1
  271. package/dist/collab/struct-routes.d.ts +1 -1
  272. package/dist/db/client.d.ts +9 -0
  273. package/dist/db/client.js +51 -16
  274. package/dist/db/create-get-db.js +2 -2
  275. package/dist/db/ddl-guard.d.ts +11 -10
  276. package/dist/db/ddl-guard.js +40 -12
  277. package/dist/deploy/build.d.ts +2 -0
  278. package/dist/deploy/build.js +97 -4
  279. package/dist/deploy/workspace-deploy.js +0 -2
  280. package/dist/file-upload/actions/upload-image.d.ts +1 -1
  281. package/dist/guards/no-env-credentials.js +9 -0
  282. package/dist/ingestion/index.d.ts +1 -1
  283. package/dist/ingestion/pptx.d.ts +68 -0
  284. package/dist/ingestion/pptx.js +660 -213
  285. package/dist/integrations/plugin.js +9 -6
  286. package/dist/jobs/scheduler.js +79 -23
  287. package/dist/localization/default-messages.d.ts +54 -0
  288. package/dist/localization/default-messages.js +57 -2
  289. package/dist/mcp/screen-memory-stdio.d.ts +7 -7
  290. package/dist/mcp-client/oauth-routes.d.ts +2 -0
  291. package/dist/mcp-client/oauth-routes.js +73 -6
  292. package/dist/observability/routes.d.ts +5 -5
  293. package/dist/onboarding/app-profile.js +11 -0
  294. package/dist/progress/routes.d.ts +1 -1
  295. package/dist/resources/handlers.d.ts +1 -1
  296. package/dist/resources/store.js +15 -1
  297. package/dist/scripts/call-agent.js +34 -4
  298. package/dist/secrets/routes.d.ts +3 -3
  299. package/dist/server/agent-chat/action-filters-a2a.d.ts +1 -1
  300. package/dist/server/agent-chat/action-filters-a2a.js +36 -1
  301. package/dist/server/agent-chat-plugin.js +29 -8
  302. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  303. package/dist/server/auth.js +47 -11
  304. package/dist/server/better-auth-instance.js +5 -3
  305. package/dist/server/core-routes-plugin.d.ts +8 -1
  306. package/dist/server/core-routes-plugin.js +28 -3
  307. package/dist/server/credential-provider.d.ts +3 -3
  308. package/dist/server/credential-provider.js +90 -4
  309. package/dist/server/onboarding-html.d.ts +2 -0
  310. package/dist/server/onboarding-html.js +115 -29
  311. package/dist/server/realtime-token.d.ts +1 -1
  312. package/dist/server/self-dispatch.d.ts +5 -4
  313. package/dist/server/self-dispatch.js +25 -14
  314. package/dist/server/ssr-handler.d.ts +1 -1
  315. package/dist/server/ssr-handler.js +1 -1
  316. package/dist/server/transcribe-voice.d.ts +1 -1
  317. package/dist/shared/cache-control.d.ts +26 -2
  318. package/dist/shared/cache-control.js +43 -2
  319. package/dist/shared/password-policy.d.ts +3 -0
  320. package/dist/shared/password-policy.js +3 -0
  321. package/dist/sharing/actions/set-resource-visibility.js +16 -4
  322. package/dist/sharing/registry.d.ts +14 -0
  323. package/dist/styles/agent-native.css +6 -0
  324. package/dist/templates/chat/.agents/skills/turn-into-app/SKILL.md +296 -0
  325. package/dist/templates/chat/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
  326. package/dist/templates/chat/.agents/skills/turn-into-skill/SKILL.md +112 -0
  327. package/dist/templates/chat/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  328. package/dist/templates/default/.agents/skills/turn-into-app/SKILL.md +296 -0
  329. package/dist/templates/default/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
  330. package/dist/templates/default/.agents/skills/turn-into-skill/SKILL.md +112 -0
  331. package/dist/templates/default/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  332. package/dist/templates/headless/.agents/skills/turn-into-app/SKILL.md +296 -0
  333. package/dist/templates/headless/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
  334. package/dist/templates/headless/.agents/skills/turn-into-skill/SKILL.md +112 -0
  335. package/dist/templates/headless/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  336. package/dist/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +6 -0
  337. package/dist/templates/workspace-core/.agents/skills/performance/SKILL.md +51 -0
  338. package/dist/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +296 -0
  339. package/dist/templates/workspace-core/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
  340. package/dist/templates/workspace-core/.agents/skills/turn-into-skill/SKILL.md +112 -0
  341. package/dist/templates/workspace-core/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  342. package/dist/templates/workspace-root/AGENTS.md +7 -0
  343. package/dist/user-profile/actions/change-password.js +8 -3
  344. package/dist/user-profile/actions/set-password.js +5 -1
  345. package/dist/vite/action-types-plugin.js +59 -0
  346. package/docs/content/creating-templates.mdx +1 -1
  347. package/docs/content/getting-started-actions.mdx +38 -189
  348. package/docs/content/getting-started-database.mdx +80 -164
  349. package/docs/content/getting-started-pages.mdx +44 -155
  350. package/docs/content/getting-started.mdx +26 -106
  351. package/docs/content/skills-guide.mdx +13 -0
  352. package/package.json +6 -2
  353. package/src/templates/chat/.agents/skills/turn-into-app/SKILL.md +296 -0
  354. package/src/templates/chat/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
  355. package/src/templates/chat/.agents/skills/turn-into-skill/SKILL.md +112 -0
  356. package/src/templates/chat/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  357. package/src/templates/default/.agents/skills/turn-into-app/SKILL.md +296 -0
  358. package/src/templates/default/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
  359. package/src/templates/default/.agents/skills/turn-into-skill/SKILL.md +112 -0
  360. package/src/templates/default/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  361. package/src/templates/headless/.agents/skills/turn-into-app/SKILL.md +296 -0
  362. package/src/templates/headless/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
  363. package/src/templates/headless/.agents/skills/turn-into-skill/SKILL.md +112 -0
  364. package/src/templates/headless/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  365. package/src/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +6 -0
  366. package/src/templates/workspace-core/.agents/skills/performance/SKILL.md +51 -0
  367. package/src/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +296 -0
  368. package/src/templates/workspace-core/.agents/skills/turn-into-app/agents/openai.yaml +4 -0
  369. package/src/templates/workspace-core/.agents/skills/turn-into-skill/SKILL.md +112 -0
  370. package/src/templates/workspace-core/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  371. package/src/templates/workspace-root/AGENTS.md +7 -0
@@ -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, or when `information_schema` is unreadable —
37
- * the conservative answer "not known to exist" makes the caller fall through to
38
- * its idempotent `CREATE TABLE IF NOT EXISTS`, preserving today's behaviour.
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
- // information_schema unreadable (permissions / non-standard backend) —
61
- // report "unknown" so the caller falls back to IF NOT EXISTS.
62
- return false;
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, or when `information_schema` is unreadable.
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
- return false;
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, or when `pg_indexes` is unreadable.
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
- return false;
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
- if (await probe())
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
- if (await probe())
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
  }
@@ -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;
@@ -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";
@@ -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;