@agent-native/core 0.129.2 → 0.130.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 (634) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +78 -0
  3. package/corpus/core/docs/content/cloneable-saas.mdx +114 -0
  4. package/corpus/core/docs/content/creating-templates.mdx +28 -2
  5. package/corpus/core/docs/content/syncing-template-changes.mdx +7 -0
  6. package/corpus/core/docs/content/template-clips-developers.mdx +12 -5
  7. package/corpus/core/docs/content/template-dispatch-developers.mdx +1 -1
  8. package/corpus/core/docs/content/template-dispatch.mdx +1 -1
  9. package/corpus/core/package.json +1 -1
  10. package/corpus/core/src/action-ui.ts +1 -0
  11. package/corpus/core/src/action.ts +5 -1
  12. package/corpus/core/src/agent/engine/ai-sdk-engine.ts +15 -5
  13. package/corpus/core/src/agent/harness/runner.ts +5 -0
  14. package/corpus/core/src/agent/production-agent.ts +33 -0
  15. package/corpus/core/src/agent/run-loop-with-resume.ts +5 -0
  16. package/corpus/core/src/agent/run-manager.ts +126 -1
  17. package/corpus/core/src/agent/thread-data-builder.ts +47 -2
  18. package/corpus/core/src/agent/types.ts +2 -0
  19. package/corpus/core/src/chat-threads/store.ts +4 -5
  20. package/corpus/core/src/cli/create.ts +1139 -65
  21. package/corpus/core/src/cli/design-connect.ts +3 -7
  22. package/corpus/core/src/cli/index.ts +5 -3
  23. package/corpus/core/src/cli/skills-content/design-visual-edit-skill.ts +83 -47
  24. package/corpus/core/src/client/AssistantChat.tsx +27 -16
  25. package/corpus/core/src/client/agent-chat-adapter.ts +24 -0
  26. package/corpus/core/src/client/blocks/library/wireframe-kit.tsx +17 -2
  27. package/corpus/core/src/client/chat/index.ts +1 -0
  28. package/corpus/core/src/client/chat/message-components.tsx +104 -1
  29. package/corpus/core/src/client/chat/run-recovery.tsx +15 -3
  30. package/corpus/core/src/client/chat/widgets/DataTableWidget.tsx +10 -29
  31. package/corpus/core/src/client/chat/widgets/WorkspaceFileWidget.tsx +71 -0
  32. package/corpus/core/src/client/chat/widgets/builtin-tool-renderers.tsx +22 -0
  33. package/corpus/core/src/client/chat/widgets/workspace-file-result.ts +49 -0
  34. package/corpus/core/src/client/embed-auth.ts +2 -0
  35. package/corpus/core/src/client/org/InvitationBanner.tsx +14 -1
  36. package/corpus/core/src/client/org/OrgSwitcher.tsx +23 -0
  37. package/corpus/core/src/client/org/TeamPage.tsx +130 -0
  38. package/corpus/core/src/client/org/WorkspaceNotice.tsx +85 -0
  39. package/corpus/core/src/client/org/hooks.ts +14 -0
  40. package/corpus/core/src/client/org/index.ts +2 -0
  41. package/corpus/core/src/client/resources/McpIntegrationDialog.tsx +27 -40
  42. package/corpus/core/src/client/resources/ResourcesPanel.tsx +134 -51
  43. package/corpus/core/src/client/resources/mcp-integration-catalog.ts +7 -0
  44. package/corpus/core/src/client/resources/use-resources.ts +6 -0
  45. package/corpus/core/src/client/use-action.ts +3 -1
  46. package/corpus/core/src/client/widgets/index.ts +1 -0
  47. package/corpus/core/src/coding-tools/run-code.ts +2 -1
  48. package/corpus/core/src/db/client.ts +28 -4
  49. package/corpus/core/src/deploy/build.ts +31 -3
  50. package/corpus/core/src/eject/remote-mcp-presets.ts +1 -1
  51. package/corpus/core/src/index.browser.ts +1 -0
  52. package/corpus/core/src/index.ts +1 -0
  53. package/corpus/core/src/integrations/a2a-continuation-processor.ts +481 -122
  54. package/corpus/core/src/integrations/a2a-continuations-store.ts +345 -14
  55. package/corpus/core/src/integrations/adapters/slack.ts +243 -53
  56. package/corpus/core/src/integrations/google-docs-poller.ts +3 -0
  57. package/corpus/core/src/integrations/integration-campaign-recovery.ts +4 -1
  58. package/corpus/core/src/integrations/plugin.ts +39 -21
  59. package/corpus/core/src/integrations/task-queue-stats.ts +146 -0
  60. package/corpus/core/src/integrations/types.ts +25 -4
  61. package/corpus/core/src/integrations/webhook-handler.ts +46 -16
  62. package/corpus/core/src/jobs/scheduler.ts +4 -0
  63. package/corpus/core/src/localization/default-messages.ts +3 -2
  64. package/corpus/core/src/observability/traces.ts +48 -12
  65. package/corpus/core/src/org/handlers.ts +52 -1
  66. package/corpus/core/src/org/migrations.ts +4 -0
  67. package/corpus/core/src/org/plugin.ts +14 -0
  68. package/corpus/core/src/org/schema.ts +1 -0
  69. package/corpus/core/src/org/types.ts +8 -0
  70. package/corpus/core/src/org/workspace-url.ts +74 -0
  71. package/corpus/core/src/resources/handlers.ts +35 -5
  72. package/corpus/core/src/scripts/runner.ts +183 -5
  73. package/corpus/core/src/server/action-routes.ts +32 -2
  74. package/corpus/core/src/server/agent-chat-plugin.ts +29 -0
  75. package/corpus/core/src/server/agent-teams.ts +10 -1
  76. package/corpus/core/src/server/auth.ts +33 -7
  77. package/corpus/core/src/server/embed-route.ts +9 -0
  78. package/corpus/core/src/server/embed-session.ts +62 -3
  79. package/corpus/core/src/server/open-route.ts +20 -6
  80. package/corpus/core/src/server/prompts/framework-core-compact.ts +1 -1
  81. package/corpus/core/src/server/prompts/framework-core.ts +1 -0
  82. package/corpus/core/src/server/request-context.ts +36 -1
  83. package/corpus/core/src/shared/embed-auth.ts +1 -0
  84. package/corpus/core/src/shared/html-document.ts +115 -0
  85. package/corpus/core/src/shared/index.ts +1 -0
  86. package/corpus/core/src/sharing/access.ts +8 -1
  87. package/corpus/core/src/sharing/registry.ts +11 -2
  88. package/corpus/core/src/workspace-files/actions.ts +100 -0
  89. package/corpus/core/src/workspace-files/tool.ts +4 -0
  90. package/corpus/templates/analytics/.agents/skills/analysis-workspace/SKILL.md +4 -0
  91. package/corpus/templates/analytics/.agents/skills/hubspot/SKILL.md +9 -1
  92. package/corpus/templates/analytics/AGENTS.md +17 -24
  93. package/corpus/templates/analytics/actions/data-source-status.ts +11 -1
  94. package/corpus/templates/analytics/app/i18n-data.ts +34 -0
  95. package/corpus/templates/analytics/app/lib/data-source-status.ts +86 -0
  96. package/corpus/templates/analytics/app/lib/native-mcp-exclusions.ts +9 -0
  97. package/corpus/templates/analytics/app/pages/DataSources.tsx +184 -20
  98. package/corpus/templates/analytics/changelog/2026-07-28-native-analytics-data-sources-no-longer-show-duplicate-mc.md +6 -0
  99. package/corpus/templates/analytics/changelog/2026-07-29-exports-now-appear-in-chat-with-a-direct-download-instead-of.md +6 -0
  100. package/corpus/templates/analytics/changelog/2026-07-29-queued-chat-prompts-no-longer-resend-after-analytics-navigat.md +6 -0
  101. package/corpus/templates/analytics/changelog/2026-07-29-scheduled-dashboard-emails-load-every-panel-reliably-without.md +6 -0
  102. package/corpus/templates/analytics/scripts/emit-netlify-dashboard-report-cron.ts +6 -3
  103. package/corpus/templates/analytics/server/lib/credential-keys.ts +1 -1
  104. package/corpus/templates/analytics/server/lib/hubspot.ts +1 -1
  105. package/corpus/templates/analytics/server/lib/provider-credentials.ts +55 -1
  106. package/corpus/templates/analytics/server/plugins/agent-chat.ts +123 -27
  107. package/corpus/templates/analytics/server/routes/[...page].get.ts +2 -7
  108. package/corpus/templates/analytics/vite.config.ts +7 -0
  109. package/corpus/templates/brain/actions/list-connection-providers.ts +100 -2
  110. package/corpus/templates/brain/app/lib/brain.ts +10 -0
  111. package/corpus/templates/brain/app/routes/sources.tsx +15 -4
  112. package/corpus/templates/brain/changelog/2026-07-29-brain-automatically-retries-failed-source-syncs-and-guides-y.md +6 -0
  113. package/corpus/templates/brain/jobs/process-ingest-queue.ts +13 -0
  114. package/corpus/templates/brain/server/jobs/sync-sources.ts +27 -22
  115. package/corpus/templates/brain/server/plugins/agent-chat.ts +2 -1
  116. package/corpus/templates/brain/server/routes/api/brain/queue/run.post.ts +7 -1
  117. package/corpus/templates/clips/AGENTS.md +1 -1
  118. package/corpus/templates/clips/actions/create-recording-agent-link.ts +11 -1
  119. package/corpus/templates/clips/actions/update-comment.ts +68 -0
  120. package/corpus/templates/clips/app/components/editor/editor-layout.tsx +0 -1
  121. package/corpus/templates/clips/app/components/player/comments-panel.tsx +221 -65
  122. package/corpus/templates/clips/app/components/player/video-player.tsx +101 -27
  123. package/corpus/templates/clips/app/i18n/en-US.ts +2 -1
  124. package/corpus/templates/clips/app/routes/bug-report.done.tsx +48 -27
  125. package/corpus/templates/clips/app/routes/bug-report.tsx +43 -4
  126. package/corpus/templates/clips/app/routes/record.tsx +2 -0
  127. package/corpus/templates/clips/changelog/2026-07-29-clip-playback-now-recovers-instead-of-getting-stuck-when-a-b.md +6 -0
  128. package/corpus/templates/clips/changelog/2026-07-29-comments-can-now-be-edited-after-posting.md +6 -0
  129. package/corpus/templates/clips/changelog/2026-07-29-download-actions-now-use-a-shorter-clearer-label.md +6 -0
  130. package/corpus/templates/clips/changelog/2026-07-29-embedded-bug-reports-now-return-a-temporary-agent-readable.md +6 -0
  131. package/corpus/templates/clips/shared/bug-report.ts +99 -0
  132. package/corpus/templates/content/actions/_content-database-personal-view.ts +7 -1
  133. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +5 -2
  134. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +20 -8
  135. package/corpus/templates/content/changelog/2026-07-29-missing-databases-no-longer-trigger-repeated-personal-view-e.md +6 -0
  136. package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +83 -47
  137. package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +474 -55
  138. package/corpus/templates/design/.generated/bridge/embedded-wheel.generated.ts +3 -0
  139. package/corpus/templates/design/.generated/bridge/hit-test.generated.ts +18 -1
  140. package/corpus/templates/design/.generated/bridge/source-location.generated.ts +348 -0
  141. package/corpus/templates/design/actions/add-localhost-screens.ts +2 -7
  142. package/corpus/templates/design/actions/apply-visual-edit.ts +7 -1
  143. package/corpus/templates/design/actions/connect-localhost.ts +5 -9
  144. package/corpus/templates/design/actions/create-component.ts +16 -13
  145. package/corpus/templates/design/actions/grant-localhost-write-consent.ts +2 -7
  146. package/corpus/templates/design/actions/list-design-source-capabilities.ts +4 -7
  147. package/corpus/templates/design/actions/list-local-files.ts +26 -50
  148. package/corpus/templates/design/actions/list-localhost-connections.ts +2 -7
  149. package/corpus/templates/design/actions/migrate-board-objects-to-file.ts +2 -2
  150. package/corpus/templates/design/actions/open-visual-edit.ts +234 -135
  151. package/corpus/templates/design/actions/read-local-file.ts +26 -50
  152. package/corpus/templates/design/actions/request-localhost-write-consent.ts +2 -7
  153. package/corpus/templates/design/actions/write-local-file.ts +31 -73
  154. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +307 -133
  155. package/corpus/templates/design/app/components/design/EditPanel.tsx +94 -22
  156. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +137 -60
  157. package/corpus/templates/design/app/components/design/ResponsiveInteractBar.tsx +75 -14
  158. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +755 -97
  159. package/corpus/templates/design/app/components/design/bridge/embedded-wheel.bridge.ts +8 -0
  160. package/corpus/templates/design/app/components/design/bridge/hit-test.bridge.ts +24 -1
  161. package/corpus/templates/design/app/components/design/bridge/source-location.bridge.ts +530 -0
  162. package/corpus/templates/design/app/components/design/code-workbench/CodeWorkbenchLoader.tsx +278 -0
  163. package/corpus/templates/design/app/components/design/code-workbench/editor/MonacoHost.tsx +32 -12
  164. package/corpus/templates/design/app/components/design/code-workbench/editor/monaco-setup.ts +14 -3
  165. package/corpus/templates/design/app/components/design/code-workbench/explorer/ExplorerView.tsx +87 -24
  166. package/corpus/templates/design/app/components/design/code-workbench/explorer/FileTree.tsx +36 -0
  167. package/corpus/templates/design/app/components/design/code-workbench/store.tsx +2 -1
  168. package/corpus/templates/design/app/components/design/code-workbench/workspace/localhost-provider.ts +48 -8
  169. package/corpus/templates/design/app/components/design/design-canvas/content-size-report.ts +3 -13
  170. package/corpus/templates/design/app/components/design/design-canvas/embedded-frame.ts +4 -2
  171. package/corpus/templates/design/app/components/design/design-canvas/hit-test.ts +3 -13
  172. package/corpus/templates/design/app/components/design/edit-panel/element-classification.ts +3 -1
  173. package/corpus/templates/design/app/components/design/edit-panel/inspect-code-source.ts +93 -0
  174. package/corpus/templates/design/app/components/design/multi-screen/board-surface-html.ts +4 -2
  175. package/corpus/templates/design/app/components/design/multi-screen/cross-screen-drop.ts +35 -0
  176. package/corpus/templates/design/app/components/design/multi-screen/iframe-targeting.ts +24 -0
  177. package/corpus/templates/design/app/components/design/multi-screen/types.ts +9 -0
  178. package/corpus/templates/design/app/components/design/types.ts +29 -0
  179. package/corpus/templates/design/app/components/layout/Layout.tsx +7 -4
  180. package/corpus/templates/design/app/hooks/use-navigation-state.ts +3 -0
  181. package/corpus/templates/design/app/i18n-data.ts +153 -46
  182. package/corpus/templates/design/app/i18n-responsive-interact.ts +12 -12
  183. package/corpus/templates/design/app/lib/design-editor-route.ts +23 -0
  184. package/corpus/templates/design/app/pages/VisualEdit.tsx +19 -6
  185. package/corpus/templates/design/app/pages/design-editor/action-error.ts +19 -0
  186. package/corpus/templates/design/app/pages/design-editor/canvas-primitive-insert.ts +29 -0
  187. package/corpus/templates/design/app/pages/design-editor/clone-and-pen-edit.ts +6 -0
  188. package/corpus/templates/design/app/pages/design-editor/code-layer-state.ts +277 -15
  189. package/corpus/templates/design/app/pages/design-editor/editor-state.ts +75 -9
  190. package/corpus/templates/design/app/pages/design-editor/layer-state-scope.ts +28 -0
  191. package/corpus/templates/design/app/pages/design-editor/live-screen-layer-drop.ts +41 -0
  192. package/corpus/templates/design/app/pages/design-editor/pending-edits.ts +496 -41
  193. package/corpus/templates/design/app/pages/design-editor/pending-live-edit-unload-guard.ts +27 -0
  194. package/corpus/templates/design/app/pages/design-editor/pending-structure-verification.ts +10 -0
  195. package/corpus/templates/design/app/pages/design-editor/react-semantic-handoff.ts +168 -9
  196. package/corpus/templates/design/app/pages/design-editor/responsive-interact.ts +41 -3
  197. package/corpus/templates/design/app/pages/design-editor/screen-command-utils.ts +5 -0
  198. package/corpus/templates/design/app/pages/design-editor/selection-state.ts +42 -13
  199. package/corpus/templates/design/app/pages/design-editor/source-location.ts +180 -0
  200. package/corpus/templates/design/app/pages/design-editor/tool-state.ts +17 -0
  201. package/corpus/templates/design/app/public-routes.ts +1 -0
  202. package/corpus/templates/design/app/routes/visual-edit.$id.tsx +15 -0
  203. package/corpus/templates/design/changelog/2026-06-29-screen-overview-is-easier-to-find-and-named-screens-open-dir.md +1 -1
  204. package/corpus/templates/design/changelog/2026-07-28-deleting-a-selected-element-now-removes-it-from-the-live-pre.md +6 -0
  205. package/corpus/templates/design/changelog/2026-07-28-deleting-an-element-on-a-connected-localhost-screen-now-queu.md +6 -0
  206. package/corpus/templates/design/changelog/2026-07-28-interact-mode-now-shows-a-responsive-device-preview-with-pre.md +6 -0
  207. package/corpus/templates/design/changelog/2026-07-28-layer-hide-and-lock-now-apply-to-the-live-preview-instead-of.md +6 -0
  208. package/corpus/templates/design/changelog/2026-07-28-layers-panel-selections-on-a-connected-localhost-screen-can-.md +6 -0
  209. package/corpus/templates/design/changelog/2026-07-28-locked-layers-now-show-a-subtle-dashed-outline-in-the-live-p.md +6 -0
  210. package/corpus/templates/design/changelog/2026-07-28-the-apply-design-updates-button-now-counts-pending-live-text.md +6 -0
  211. package/corpus/templates/design/changelog/2026-07-28-the-design-canvas-no-longer-stalls-on-a-render-loop-while-a-.md +6 -0
  212. package/corpus/templates/design/changelog/2026-07-28-visual-edit-on-a-local-dev-server-no-longer-requires-signing.md +6 -0
  213. package/corpus/templates/design/changelog/2026-07-28-visual-edits-on-a-react-19-app-no-longer-report-a-source-lin.md +6 -0
  214. package/corpus/templates/design/changelog/2026-07-29-an-edit-that-cannot-be-written-to-source-now-names-the-reaso.md +6 -0
  215. package/corpus/templates/design/changelog/2026-07-29-applying-a-primitive-dropped-onto-a-connected-localhost-scre.md +6 -0
  216. package/corpus/templates/design/changelog/2026-07-29-changing-a-style-in-the-inspector-now-updates-a-connected-lo.md +6 -0
  217. package/corpus/templates/design/changelog/2026-07-29-choosing-edit-or-annotate-from-a-focused-screen-now-returns-.md +6 -0
  218. package/corpus/templates/design/changelog/2026-07-29-concurrent-source-edits-now-return-a-clear-conflict-response.md +6 -0
  219. package/corpus/templates/design/changelog/2026-07-29-creating-a-component-from-an-element-that-repeats-in-the-sou.md +6 -0
  220. package/corpus/templates/design/changelog/2026-07-29-deleting-an-element-you-just-dropped-onto-a-live-screen-no-l.md +6 -0
  221. package/corpus/templates/design/changelog/2026-07-29-dragging-a-layer-across-screens-no-longer-dies-when-the-poin.md +6 -0
  222. package/corpus/templates/design/changelog/2026-07-29-dragging-an-element-from-a-stored-screen-into-a-live-localho.md +6 -0
  223. package/corpus/templates/design/changelog/2026-07-29-drawing-a-box-on-the-canvas-and-dragging-it-into-a-connected.md +6 -0
  224. package/corpus/templates/design/changelog/2026-07-29-fixed-a-loading-screen-flicker-when-reopening-designs-with-a.md +6 -0
  225. package/corpus/templates/design/changelog/2026-07-29-interact-mode-has-edit-and-annotate-buttons-again-so-you-can.md +6 -0
  226. package/corpus/templates/design/changelog/2026-07-29-layer-groups-can-be-dropped-onto-live-localhost-screens.md +6 -0
  227. package/corpus/templates/design/changelog/2026-07-29-localhost-source-errors-now-say-what-actually-went-wrong-whi.md +6 -0
  228. package/corpus/templates/design/changelog/2026-07-29-opening-or-refreshing-a-live-localhost-screen-in-single-scre.md +6 -0
  229. package/corpus/templates/design/changelog/2026-07-29-redo-after-undoing-a-drop-onto-a-live-screen-puts-the-elemen.md +6 -0
  230. package/corpus/templates/design/changelog/2026-07-29-shapes-can-be-drawn-directly-onto-live-localhost-screens.md +6 -0
  231. package/corpus/templates/design/changelog/2026-07-29-shapes-drawn-on-the-canvas-board-now-appear-immediately-inst.md +6 -0
  232. package/corpus/templates/design/changelog/2026-07-29-style-edits-on-a-running-localhost-screen-now-preview-live-a.md +6 -0
  233. package/corpus/templates/design/changelog/2026-07-29-the-apply-design-updates-control-now-appears-as-a-clean-conn.md +6 -0
  234. package/corpus/templates/design/changelog/2026-07-29-visual-edits-on-a-mapped-component-instance-now-tell-the-age.md +6 -0
  235. package/corpus/templates/design/server/lib/design-data-access.ts +21 -7
  236. package/corpus/templates/design/server/lib/localhost-connection.ts +240 -0
  237. package/corpus/templates/design/server/routes/[...page].get.ts +2 -5
  238. package/corpus/templates/design/server/source-workspace.ts +2 -0
  239. package/corpus/templates/design/shared/code-layer.ts +43 -0
  240. package/corpus/templates/design/shared/html-content.ts +26 -0
  241. package/corpus/templates/design/shared/html-integrity.ts +21 -1
  242. package/corpus/templates/design/shared/local-jsx-visual-edit.ts +15 -0
  243. package/corpus/templates/design/shared/source-mode.ts +76 -0
  244. package/corpus/templates/dispatch/changelog/2026-07-26-slack-replies-recover-after-connected-app-updates.md +6 -0
  245. package/corpus/templates/dispatch/changelog/2026-07-29-workspace-members-without-admin-access-now-see-a-clear-permi.md +6 -0
  246. package/corpus/templates/dispatch/server/lib/usage-metrics.ts +2 -1
  247. package/corpus/templates/plan/app/lib/plan-annotation-runtime.ts +3 -4
  248. package/corpus/templates/plan/server/routes/[...page].get.ts +2 -5
  249. package/corpus/templates/slides/.agents/skills/design-systems/SKILL.md +15 -0
  250. package/corpus/templates/slides/actions/delete-design-system.ts +145 -0
  251. package/corpus/templates/slides/actions/list-design-systems.ts +94 -2
  252. package/corpus/templates/slides/actions/patch-deck.ts +29 -17
  253. package/corpus/templates/slides/app/components/design-system/DesignSystemCard.tsx +43 -1
  254. package/corpus/templates/slides/app/hooks/use-design-systems.ts +2 -0
  255. package/corpus/templates/slides/app/i18n/en-US.ts +7 -0
  256. package/corpus/templates/slides/app/pages/DesignSystems.tsx +56 -1
  257. package/corpus/templates/slides/changelog/2026-07-28-delete-a-design-system-you-own-from-the-design-systems-page-.md +6 -0
  258. package/corpus/toolkit/CHANGELOG.md +6 -0
  259. package/corpus/toolkit/package.json +1 -1
  260. package/corpus/toolkit/src/composer/ComposerPlusMenu.tsx +3 -2
  261. package/dist/action-ui.d.ts +1 -0
  262. package/dist/action-ui.d.ts.map +1 -1
  263. package/dist/action-ui.js +1 -0
  264. package/dist/action-ui.js.map +1 -1
  265. package/dist/action.d.ts +5 -1
  266. package/dist/action.d.ts.map +1 -1
  267. package/dist/action.js.map +1 -1
  268. package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
  269. package/dist/agent/engine/ai-sdk-engine.js +13 -5
  270. package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
  271. package/dist/agent/harness/runner.d.ts.map +1 -1
  272. package/dist/agent/harness/runner.js +5 -0
  273. package/dist/agent/harness/runner.js.map +1 -1
  274. package/dist/agent/production-agent.d.ts +16 -0
  275. package/dist/agent/production-agent.d.ts.map +1 -1
  276. package/dist/agent/production-agent.js +18 -1
  277. package/dist/agent/production-agent.js.map +1 -1
  278. package/dist/agent/run-loop-with-resume.d.ts.map +1 -1
  279. package/dist/agent/run-loop-with-resume.js +6 -0
  280. package/dist/agent/run-loop-with-resume.js.map +1 -1
  281. package/dist/agent/run-manager.d.ts +14 -0
  282. package/dist/agent/run-manager.d.ts.map +1 -1
  283. package/dist/agent/run-manager.js +91 -1
  284. package/dist/agent/run-manager.js.map +1 -1
  285. package/dist/agent/thread-data-builder.d.ts +3 -0
  286. package/dist/agent/thread-data-builder.d.ts.map +1 -1
  287. package/dist/agent/thread-data-builder.js +35 -3
  288. package/dist/agent/thread-data-builder.js.map +1 -1
  289. package/dist/agent/types.d.ts +2 -0
  290. package/dist/agent/types.d.ts.map +1 -1
  291. package/dist/agent/types.js.map +1 -1
  292. package/dist/chat-threads/store.d.ts.map +1 -1
  293. package/dist/chat-threads/store.js +4 -6
  294. package/dist/chat-threads/store.js.map +1 -1
  295. package/dist/cli/create.d.ts +66 -6
  296. package/dist/cli/create.d.ts.map +1 -1
  297. package/dist/cli/create.js +765 -66
  298. package/dist/cli/create.js.map +1 -1
  299. package/dist/cli/design-connect.d.ts.map +1 -1
  300. package/dist/cli/design-connect.js +2 -7
  301. package/dist/cli/design-connect.js.map +1 -1
  302. package/dist/cli/index.js +5 -3
  303. package/dist/cli/index.js.map +1 -1
  304. package/dist/cli/skills-content/design-visual-edit-skill.d.ts +1 -1
  305. package/dist/cli/skills-content/design-visual-edit-skill.d.ts.map +1 -1
  306. package/dist/cli/skills-content/design-visual-edit-skill.js +83 -47
  307. package/dist/cli/skills-content/design-visual-edit-skill.js.map +1 -1
  308. package/dist/client/AssistantChat.d.ts.map +1 -1
  309. package/dist/client/AssistantChat.js +16 -9
  310. package/dist/client/AssistantChat.js.map +1 -1
  311. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  312. package/dist/client/agent-chat-adapter.js +21 -0
  313. package/dist/client/agent-chat-adapter.js.map +1 -1
  314. package/dist/client/blocks/library/wireframe-kit.d.ts +2 -0
  315. package/dist/client/blocks/library/wireframe-kit.d.ts.map +1 -1
  316. package/dist/client/blocks/library/wireframe-kit.js +8 -2
  317. package/dist/client/blocks/library/wireframe-kit.js.map +1 -1
  318. package/dist/client/chat/index.d.ts +1 -1
  319. package/dist/client/chat/index.d.ts.map +1 -1
  320. package/dist/client/chat/index.js +1 -1
  321. package/dist/client/chat/index.js.map +1 -1
  322. package/dist/client/chat/message-components.d.ts +17 -0
  323. package/dist/client/chat/message-components.d.ts.map +1 -1
  324. package/dist/client/chat/message-components.js +24 -2
  325. package/dist/client/chat/message-components.js.map +1 -1
  326. package/dist/client/chat/run-recovery.d.ts +6 -0
  327. package/dist/client/chat/run-recovery.d.ts.map +1 -1
  328. package/dist/client/chat/run-recovery.js +13 -3
  329. package/dist/client/chat/run-recovery.js.map +1 -1
  330. package/dist/client/chat/widgets/DataTableWidget.d.ts.map +1 -1
  331. package/dist/client/chat/widgets/DataTableWidget.js +2 -3
  332. package/dist/client/chat/widgets/DataTableWidget.js.map +1 -1
  333. package/dist/client/chat/widgets/WorkspaceFileWidget.d.ts +5 -0
  334. package/dist/client/chat/widgets/WorkspaceFileWidget.d.ts.map +1 -0
  335. package/dist/client/chat/widgets/WorkspaceFileWidget.js +34 -0
  336. package/dist/client/chat/widgets/WorkspaceFileWidget.js.map +1 -0
  337. package/dist/client/chat/widgets/builtin-tool-renderers.d.ts.map +1 -1
  338. package/dist/client/chat/widgets/builtin-tool-renderers.js +13 -1
  339. package/dist/client/chat/widgets/builtin-tool-renderers.js.map +1 -1
  340. package/dist/client/chat/widgets/workspace-file-result.d.ts +12 -0
  341. package/dist/client/chat/widgets/workspace-file-result.d.ts.map +1 -0
  342. package/dist/client/chat/widgets/workspace-file-result.js +34 -0
  343. package/dist/client/chat/widgets/workspace-file-result.js.map +1 -0
  344. package/dist/client/embed-auth.d.ts.map +1 -1
  345. package/dist/client/embed-auth.js +2 -1
  346. package/dist/client/embed-auth.js.map +1 -1
  347. package/dist/client/org/InvitationBanner.d.ts +5 -2
  348. package/dist/client/org/InvitationBanner.d.ts.map +1 -1
  349. package/dist/client/org/InvitationBanner.js +9 -2
  350. package/dist/client/org/InvitationBanner.js.map +1 -1
  351. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  352. package/dist/client/org/OrgSwitcher.js +3 -2
  353. package/dist/client/org/OrgSwitcher.js.map +1 -1
  354. package/dist/client/org/TeamPage.d.ts.map +1 -1
  355. package/dist/client/org/TeamPage.js +27 -3
  356. package/dist/client/org/TeamPage.js.map +1 -1
  357. package/dist/client/org/WorkspaceNotice.d.ts +18 -0
  358. package/dist/client/org/WorkspaceNotice.d.ts.map +1 -0
  359. package/dist/client/org/WorkspaceNotice.js +56 -0
  360. package/dist/client/org/WorkspaceNotice.js.map +1 -0
  361. package/dist/client/org/hooks.d.ts +1 -0
  362. package/dist/client/org/hooks.d.ts.map +1 -1
  363. package/dist/client/org/hooks.js +12 -0
  364. package/dist/client/org/hooks.js.map +1 -1
  365. package/dist/client/org/index.d.ts +2 -1
  366. package/dist/client/org/index.d.ts.map +1 -1
  367. package/dist/client/org/index.js +2 -1
  368. package/dist/client/org/index.js.map +1 -1
  369. package/dist/client/resources/McpIntegrationDialog.d.ts.map +1 -1
  370. package/dist/client/resources/McpIntegrationDialog.js +8 -12
  371. package/dist/client/resources/McpIntegrationDialog.js.map +1 -1
  372. package/dist/client/resources/ResourcesPanel.d.ts +3 -0
  373. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  374. package/dist/client/resources/ResourcesPanel.js +49 -20
  375. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  376. package/dist/client/resources/mcp-integration-catalog.d.ts +1 -0
  377. package/dist/client/resources/mcp-integration-catalog.d.ts.map +1 -1
  378. package/dist/client/resources/mcp-integration-catalog.js +3 -0
  379. package/dist/client/resources/mcp-integration-catalog.js.map +1 -1
  380. package/dist/client/resources/use-resources.d.ts +1 -0
  381. package/dist/client/resources/use-resources.d.ts.map +1 -1
  382. package/dist/client/resources/use-resources.js +3 -0
  383. package/dist/client/resources/use-resources.js.map +1 -1
  384. package/dist/client/use-action.d.ts +3 -1
  385. package/dist/client/use-action.d.ts.map +1 -1
  386. package/dist/client/use-action.js +3 -1
  387. package/dist/client/use-action.js.map +1 -1
  388. package/dist/client/widgets/index.d.ts +1 -1
  389. package/dist/client/widgets/index.d.ts.map +1 -1
  390. package/dist/client/widgets/index.js +1 -1
  391. package/dist/client/widgets/index.js.map +1 -1
  392. package/dist/coding-tools/run-code.js +2 -1
  393. package/dist/coding-tools/run-code.js.map +1 -1
  394. package/dist/collab/awareness.d.ts +2 -2
  395. package/dist/collab/awareness.d.ts.map +1 -1
  396. package/dist/collab/struct-routes.d.ts +1 -1
  397. package/dist/db/client.d.ts +1 -0
  398. package/dist/db/client.d.ts.map +1 -1
  399. package/dist/db/client.js +24 -3
  400. package/dist/db/client.js.map +1 -1
  401. package/dist/deploy/build.d.ts.map +1 -1
  402. package/dist/deploy/build.js +25 -3
  403. package/dist/deploy/build.js.map +1 -1
  404. package/dist/eject/remote-mcp-presets.js +1 -1
  405. package/dist/eject/remote-mcp-presets.js.map +1 -1
  406. package/dist/index.browser.d.ts +1 -1
  407. package/dist/index.browser.d.ts.map +1 -1
  408. package/dist/index.browser.js +1 -1
  409. package/dist/index.browser.js.map +1 -1
  410. package/dist/index.d.ts +1 -1
  411. package/dist/index.d.ts.map +1 -1
  412. package/dist/index.js +1 -1
  413. package/dist/index.js.map +1 -1
  414. package/dist/integrations/a2a-continuation-processor.d.ts +5 -0
  415. package/dist/integrations/a2a-continuation-processor.d.ts.map +1 -1
  416. package/dist/integrations/a2a-continuation-processor.js +293 -79
  417. package/dist/integrations/a2a-continuation-processor.js.map +1 -1
  418. package/dist/integrations/a2a-continuations-store.d.ts +23 -1
  419. package/dist/integrations/a2a-continuations-store.d.ts.map +1 -1
  420. package/dist/integrations/a2a-continuations-store.js +249 -15
  421. package/dist/integrations/a2a-continuations-store.js.map +1 -1
  422. package/dist/integrations/adapters/slack.d.ts.map +1 -1
  423. package/dist/integrations/adapters/slack.js +155 -31
  424. package/dist/integrations/adapters/slack.js.map +1 -1
  425. package/dist/integrations/google-docs-poller.d.ts.map +1 -1
  426. package/dist/integrations/google-docs-poller.js +4 -1
  427. package/dist/integrations/google-docs-poller.js.map +1 -1
  428. package/dist/integrations/integration-campaign-recovery.d.ts.map +1 -1
  429. package/dist/integrations/integration-campaign-recovery.js +3 -1
  430. package/dist/integrations/integration-campaign-recovery.js.map +1 -1
  431. package/dist/integrations/plugin.d.ts.map +1 -1
  432. package/dist/integrations/plugin.js +29 -12
  433. package/dist/integrations/plugin.js.map +1 -1
  434. package/dist/integrations/task-queue-stats.d.ts +12 -0
  435. package/dist/integrations/task-queue-stats.d.ts.map +1 -1
  436. package/dist/integrations/task-queue-stats.js +106 -0
  437. package/dist/integrations/task-queue-stats.js.map +1 -1
  438. package/dist/integrations/types.d.ts +24 -6
  439. package/dist/integrations/types.d.ts.map +1 -1
  440. package/dist/integrations/types.js.map +1 -1
  441. package/dist/integrations/webhook-handler.d.ts.map +1 -1
  442. package/dist/integrations/webhook-handler.js +35 -14
  443. package/dist/integrations/webhook-handler.js.map +1 -1
  444. package/dist/jobs/scheduler.js +4 -0
  445. package/dist/jobs/scheduler.js.map +1 -1
  446. package/dist/localization/default-messages.d.ts +3 -2
  447. package/dist/localization/default-messages.d.ts.map +1 -1
  448. package/dist/localization/default-messages.js +3 -2
  449. package/dist/localization/default-messages.js.map +1 -1
  450. package/dist/notifications/routes.d.ts +1 -1
  451. package/dist/observability/traces.d.ts.map +1 -1
  452. package/dist/observability/traces.js +27 -7
  453. package/dist/observability/traces.js.map +1 -1
  454. package/dist/org/handlers.d.ts +15 -0
  455. package/dist/org/handlers.d.ts.map +1 -1
  456. package/dist/org/handlers.js +45 -1
  457. package/dist/org/handlers.js.map +1 -1
  458. package/dist/org/migrations.d.ts.map +1 -1
  459. package/dist/org/migrations.js +4 -0
  460. package/dist/org/migrations.js.map +1 -1
  461. package/dist/org/plugin.d.ts +1 -0
  462. package/dist/org/plugin.d.ts.map +1 -1
  463. package/dist/org/plugin.js +10 -1
  464. package/dist/org/plugin.js.map +1 -1
  465. package/dist/org/schema.d.ts +19 -0
  466. package/dist/org/schema.d.ts.map +1 -1
  467. package/dist/org/schema.js +1 -0
  468. package/dist/org/schema.js.map +1 -1
  469. package/dist/org/types.d.ts +8 -0
  470. package/dist/org/types.d.ts.map +1 -1
  471. package/dist/org/types.js.map +1 -1
  472. package/dist/org/workspace-url.d.ts +32 -0
  473. package/dist/org/workspace-url.d.ts.map +1 -0
  474. package/dist/org/workspace-url.js +63 -0
  475. package/dist/org/workspace-url.js.map +1 -0
  476. package/dist/provider-api/actions/custom-provider-registration.d.ts +11 -11
  477. package/dist/provider-api/actions/provider-api.d.ts +7 -7
  478. package/dist/resources/handlers.d.ts +3 -4
  479. package/dist/resources/handlers.d.ts.map +1 -1
  480. package/dist/resources/handlers.js +25 -5
  481. package/dist/resources/handlers.js.map +1 -1
  482. package/dist/scripts/runner.d.ts +17 -0
  483. package/dist/scripts/runner.d.ts.map +1 -1
  484. package/dist/scripts/runner.js +130 -5
  485. package/dist/scripts/runner.js.map +1 -1
  486. package/dist/secrets/routes.d.ts +9 -9
  487. package/dist/server/action-routes.d.ts.map +1 -1
  488. package/dist/server/action-routes.js +24 -2
  489. package/dist/server/action-routes.js.map +1 -1
  490. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  491. package/dist/server/agent-chat-plugin.js +26 -1
  492. package/dist/server/agent-chat-plugin.js.map +1 -1
  493. package/dist/server/agent-teams.d.ts.map +1 -1
  494. package/dist/server/agent-teams.js +10 -1
  495. package/dist/server/agent-teams.js.map +1 -1
  496. package/dist/server/auth.d.ts +22 -0
  497. package/dist/server/auth.d.ts.map +1 -1
  498. package/dist/server/auth.js +33 -7
  499. package/dist/server/auth.js.map +1 -1
  500. package/dist/server/embed-route.d.ts.map +1 -1
  501. package/dist/server/embed-route.js +6 -1
  502. package/dist/server/embed-route.js.map +1 -1
  503. package/dist/server/embed-session.d.ts +7 -0
  504. package/dist/server/embed-session.d.ts.map +1 -1
  505. package/dist/server/embed-session.js +46 -4
  506. package/dist/server/embed-session.js.map +1 -1
  507. package/dist/server/open-route.d.ts.map +1 -1
  508. package/dist/server/open-route.js +17 -7
  509. package/dist/server/open-route.js.map +1 -1
  510. package/dist/server/prompts/framework-core-compact.js +1 -1
  511. package/dist/server/prompts/framework-core-compact.js.map +1 -1
  512. package/dist/server/prompts/framework-core.d.ts.map +1 -1
  513. package/dist/server/prompts/framework-core.js +1 -0
  514. package/dist/server/prompts/framework-core.js.map +1 -1
  515. package/dist/server/request-context.d.ts +26 -0
  516. package/dist/server/request-context.d.ts.map +1 -1
  517. package/dist/server/request-context.js +18 -1
  518. package/dist/server/request-context.js.map +1 -1
  519. package/dist/shared/embed-auth.d.ts +1 -0
  520. package/dist/shared/embed-auth.d.ts.map +1 -1
  521. package/dist/shared/embed-auth.js +1 -0
  522. package/dist/shared/embed-auth.js.map +1 -1
  523. package/dist/shared/html-document.d.ts +12 -0
  524. package/dist/shared/html-document.d.ts.map +1 -0
  525. package/dist/shared/html-document.js +92 -0
  526. package/dist/shared/html-document.js.map +1 -0
  527. package/dist/shared/index.d.ts +1 -0
  528. package/dist/shared/index.d.ts.map +1 -1
  529. package/dist/shared/index.js +1 -0
  530. package/dist/shared/index.js.map +1 -1
  531. package/dist/sharing/access.d.ts +1 -0
  532. package/dist/sharing/access.d.ts.map +1 -1
  533. package/dist/sharing/access.js +8 -2
  534. package/dist/sharing/access.js.map +1 -1
  535. package/dist/sharing/registry.d.ts +3 -0
  536. package/dist/sharing/registry.d.ts.map +1 -1
  537. package/dist/sharing/registry.js.map +1 -1
  538. package/dist/workspace-files/actions.d.ts +28 -0
  539. package/dist/workspace-files/actions.d.ts.map +1 -0
  540. package/dist/workspace-files/actions.js +75 -0
  541. package/dist/workspace-files/actions.js.map +1 -0
  542. package/dist/workspace-files/tool.d.ts.map +1 -1
  543. package/dist/workspace-files/tool.js +4 -0
  544. package/dist/workspace-files/tool.js.map +1 -1
  545. package/docs/content/cloneable-saas.mdx +114 -0
  546. package/docs/content/creating-templates.mdx +28 -2
  547. package/docs/content/syncing-template-changes.mdx +7 -0
  548. package/docs/content/template-clips-developers.mdx +12 -5
  549. package/docs/content/template-dispatch-developers.mdx +1 -1
  550. package/docs/content/template-dispatch.mdx +1 -1
  551. package/package.json +2 -2
  552. package/src/action-ui.ts +1 -0
  553. package/src/action.ts +5 -1
  554. package/src/agent/engine/ai-sdk-engine.ts +15 -5
  555. package/src/agent/harness/runner.ts +5 -0
  556. package/src/agent/production-agent.ts +33 -0
  557. package/src/agent/run-loop-with-resume.ts +5 -0
  558. package/src/agent/run-manager.ts +126 -1
  559. package/src/agent/thread-data-builder.ts +47 -2
  560. package/src/agent/types.ts +2 -0
  561. package/src/chat-threads/store.ts +4 -5
  562. package/src/cli/create.ts +1139 -65
  563. package/src/cli/design-connect.ts +3 -7
  564. package/src/cli/index.ts +5 -3
  565. package/src/cli/skills-content/design-visual-edit-skill.ts +83 -47
  566. package/src/client/AssistantChat.tsx +27 -16
  567. package/src/client/agent-chat-adapter.ts +24 -0
  568. package/src/client/blocks/library/wireframe-kit.tsx +17 -2
  569. package/src/client/chat/index.ts +1 -0
  570. package/src/client/chat/message-components.tsx +104 -1
  571. package/src/client/chat/run-recovery.tsx +15 -3
  572. package/src/client/chat/widgets/DataTableWidget.tsx +10 -29
  573. package/src/client/chat/widgets/WorkspaceFileWidget.tsx +71 -0
  574. package/src/client/chat/widgets/builtin-tool-renderers.tsx +22 -0
  575. package/src/client/chat/widgets/workspace-file-result.ts +49 -0
  576. package/src/client/embed-auth.ts +2 -0
  577. package/src/client/org/InvitationBanner.tsx +14 -1
  578. package/src/client/org/OrgSwitcher.tsx +23 -0
  579. package/src/client/org/TeamPage.tsx +130 -0
  580. package/src/client/org/WorkspaceNotice.tsx +85 -0
  581. package/src/client/org/hooks.ts +14 -0
  582. package/src/client/org/index.ts +2 -0
  583. package/src/client/resources/McpIntegrationDialog.tsx +27 -40
  584. package/src/client/resources/ResourcesPanel.tsx +134 -51
  585. package/src/client/resources/mcp-integration-catalog.ts +7 -0
  586. package/src/client/resources/use-resources.ts +6 -0
  587. package/src/client/use-action.ts +3 -1
  588. package/src/client/widgets/index.ts +1 -0
  589. package/src/coding-tools/run-code.ts +2 -1
  590. package/src/db/client.ts +28 -4
  591. package/src/deploy/build.ts +31 -3
  592. package/src/eject/remote-mcp-presets.ts +1 -1
  593. package/src/index.browser.ts +1 -0
  594. package/src/index.ts +1 -0
  595. package/src/integrations/a2a-continuation-processor.ts +481 -122
  596. package/src/integrations/a2a-continuations-store.ts +345 -14
  597. package/src/integrations/adapters/slack.ts +243 -53
  598. package/src/integrations/google-docs-poller.ts +3 -0
  599. package/src/integrations/integration-campaign-recovery.ts +4 -1
  600. package/src/integrations/plugin.ts +39 -21
  601. package/src/integrations/task-queue-stats.ts +146 -0
  602. package/src/integrations/types.ts +25 -4
  603. package/src/integrations/webhook-handler.ts +46 -16
  604. package/src/jobs/scheduler.ts +4 -0
  605. package/src/localization/default-messages.ts +3 -2
  606. package/src/observability/traces.ts +48 -12
  607. package/src/org/handlers.ts +52 -1
  608. package/src/org/migrations.ts +4 -0
  609. package/src/org/plugin.ts +14 -0
  610. package/src/org/schema.ts +1 -0
  611. package/src/org/types.ts +8 -0
  612. package/src/org/workspace-url.ts +74 -0
  613. package/src/resources/handlers.ts +35 -5
  614. package/src/scripts/runner.ts +183 -5
  615. package/src/server/__snapshots__/agent-chat-plugin.surface.spec.ts.snap +2 -1
  616. package/src/server/action-routes.ts +32 -2
  617. package/src/server/agent-chat-plugin.ts +29 -0
  618. package/src/server/agent-teams.ts +10 -1
  619. package/src/server/auth.ts +33 -7
  620. package/src/server/embed-route.ts +9 -0
  621. package/src/server/embed-session.ts +62 -3
  622. package/src/server/open-route.ts +20 -6
  623. package/src/server/prompts/framework-core-compact.ts +1 -1
  624. package/src/server/prompts/framework-core.ts +1 -0
  625. package/src/server/request-context.ts +36 -1
  626. package/src/shared/embed-auth.ts +1 -0
  627. package/src/shared/html-document.ts +115 -0
  628. package/src/shared/index.ts +1 -0
  629. package/src/sharing/access.ts +8 -1
  630. package/src/sharing/registry.ts +11 -2
  631. package/src/workspace-files/actions.ts +100 -0
  632. package/src/workspace-files/tool.ts +4 -0
  633. package/corpus/templates/design/changelog/2026-07-28-interact-mode-can-preview-designs-in-responsive-device-sizes.md +0 -6
  634. package/corpus/templates/design/changelog/2026-07-28-interact-mode-now-opens-a-full-screen-responsive-preview-wit.md +0 -6
@@ -280,6 +280,14 @@ declare var __EDITING_SAFETY_ENABLED__: boolean;
280
280
  if (e.data.type === "embedded-canvas-gesture-mode") {
281
281
  wheelEnabled = !!e.data.wheelEnabled;
282
282
  spaceKeyForwardingEnabled = !!e.data.spaceKeyForwardingEnabled;
283
+ // Live-updatable so entering/leaving Interact does not change this
284
+ // script's text. The host keys its bridge registration on a hash of the
285
+ // script, so baking the mode in meant every Interact toggle minted a new
286
+ // key, forced a re-register, and left the canvas on "Preparing editable
287
+ // preview..." until that round trip finished.
288
+ if (typeof e.data.editingSafetyEnabled === "boolean") {
289
+ editingSafetyEnabled = e.data.editingSafetyEnabled;
290
+ }
283
291
  }
284
292
  }
285
293
 
@@ -689,7 +689,30 @@
689
689
  cursor = parent;
690
690
  }
691
691
 
692
- return absolutePrimitiveContainerTargetForPoint(clientX, clientY);
692
+ var absoluteTarget = absolutePrimitiveContainerTargetForPoint(
693
+ clientX,
694
+ clientY,
695
+ );
696
+ if (absoluteTarget) return absoluteTarget;
697
+ // Everything above resolves only auto-layout (flex/grid) ancestors and
698
+ // absolute primitive containers, so an ordinary block-layout page answers
699
+ // every hit-test with no anchor at all and the host rejects each drop onto
700
+ // it as "anchor-unresolved". Block flow still has a well-defined insertion
701
+ // point, so fall back to appending into the nearest block container under
702
+ // the pointer rather than reporting no target.
703
+ var blockCursor: Element | null = hit;
704
+ while (blockCursor) {
705
+ if (isContainerDropTarget(blockCursor)) {
706
+ return {
707
+ anchor: blockCursor,
708
+ placement: "inside",
709
+ axis: "y",
710
+ dropMode: "flow-insert",
711
+ };
712
+ }
713
+ blockCursor = blockCursor.parentElement;
714
+ }
715
+ return null;
693
716
  }
694
717
 
695
718
  function showInsertionGuideFor(
@@ -0,0 +1,530 @@
1
+ /**
2
+ * Source-location bridge — injected into a localhost dev-server iframe to
3
+ * resolve a DOM element to authored framework source evidence (file, line,
4
+ * column, component name), for precise agent edits instead of guesswork.
5
+ *
6
+ * This is the standalone request/reply extraction path. Keep its framework
7
+ * metadata parsing aligned with `editor-chrome.bridge.ts`, which wires the same
8
+ * provenance tiers into live selection and runtime-layer snapshots.
9
+ *
10
+ * Protocol (parent → iframe via postMessage):
11
+ * { type: 'agent-native:source-location-request', correlationId: string,
12
+ * nodeId?: string, selector?: string }
13
+ * Resolves the element by `[data-agent-native-node-id="nodeId"]` first,
14
+ * falling back to `selector` (a CSS selector) when nodeId is absent/unmatched.
15
+ *
16
+ * Reply (iframe → window.parent):
17
+ * { type: 'agent-native:source-location-result', correlationId: string,
18
+ * result: SourceLocationOutcome }
19
+ * See ../../../pages/design-editor/source-location.ts for the outcome shape
20
+ * (status: 'resolved' with sourceFile/line/column/componentName/owner* —
21
+ * never status: 'resolved' with any of those invented — or status:
22
+ * 'unavailable' with a reason. This file duplicates that module's stack
23
+ * parser inline (bridge files may not import anything, see below); keep
24
+ * the two in sync by hand if either changes.
25
+ *
26
+ * Element vs. owner source location
27
+ * ----------------------------------
28
+ * `sourceFile`/`line`/`column` are the element's OWN JSX authoring line — for
29
+ * a node inside a child component this is the child's file (e.g. a <button>
30
+ * inside Card.jsx resolves to Card.jsx), regardless of whether that parent
31
+ * component was instantiated once directly or many times via `.map()`.
32
+ * `ownerSourceFile`/`ownerLine`/`ownerColumn`/`ownerComponentName` locate
33
+ * where the nearest enclosing COMPONENT itself was instantiated — i.e. where
34
+ * the `<Card ...>` JSX was written in the parent. All `.map()`-produced
35
+ * siblings share that same owner location (the call site is authored once);
36
+ * `ownerKey` (the element's React `key`, when the parent supplied one) is the
37
+ * only source-derived signal that tells mapped siblings apart. This module
38
+ * does not invent per-instance DOM identity beyond that — that's
39
+ * `data-agent-native-node-id`'s job elsewhere in the bridge.
40
+ *
41
+ * Framework/version support
42
+ * -------------------------
43
+ * - React <=18: reads the structured `fiber._debugSource` field directly
44
+ * (`method: 'debug-source'`) — populated by the dev JSX transform
45
+ * (`jsxDEV`/classic pragma + `@babel/plugin-transform-react-jsx-source`),
46
+ * not by anything this bridge injects.
47
+ * - React 19: `_debugSource` was removed from the fiber. Falls back to
48
+ * parsing `fiber._debugStack.stack` (`method: 'debug-stack'`), the owner
49
+ * stack React 19 captures at element-creation time in dev builds. Requires
50
+ * the dev server to serve React's development build with owner stacks
51
+ * enabled (the Vite/Next.js/CRA dev default) — a production build strips
52
+ * this entirely and this bridge reports `unavailable`/`no-debug-info`
53
+ * rather than guess.
54
+ * - Vue: reads the dev compiler's `vnode.props.__v_inspector` location.
55
+ * - Svelte: reads the dev compiler's `element.__svelte_meta.loc` location.
56
+ * - Pre-existing `data-source-file`/`data-loc` attributes (a build-time
57
+ * transform's convention, not something this bridge writes) are read first
58
+ * and always win (`method: 'data-attribute'`) when present.
59
+ *
60
+ * Rules:
61
+ * • No import/require of any module (DOM globals only).
62
+ * • No references to outer/module scope (the code runs inside an iframe).
63
+ * • Wrap everything in a self-executing IIFE.
64
+ */
65
+ (function () {
66
+ var FIBER_KEY_PREFIXES = [
67
+ "__reactFiber$",
68
+ "__reactInternalInstance$",
69
+ "__reactInternalFiberCurrent$",
70
+ "__reactInternalFiber$",
71
+ ];
72
+
73
+ var NOISE_SEGMENTS: Record<string, true> = {
74
+ node_modules: true,
75
+ dist: true,
76
+ build: true,
77
+ ".next": true,
78
+ public: true,
79
+ };
80
+
81
+ function isNoisePath(path: string): boolean {
82
+ var segments = path.split("/");
83
+ for (var i = 0; i < segments.length; i += 1) {
84
+ if (NOISE_SEGMENTS[segments[i]!]) return true;
85
+ if (segments[i] === "_next" && segments[i + 1] === "static") return true;
86
+ }
87
+ return false;
88
+ }
89
+
90
+ function resolveFrameUrl(rawUrl: string): string | null {
91
+ if (rawUrl.indexOf("webpack-internal:///") === 0) {
92
+ var wPath = rawUrl
93
+ .slice("webpack-internal:///".length)
94
+ .replace(/^\.\//, "");
95
+ return wPath || null;
96
+ }
97
+ try {
98
+ var url = new URL(rawUrl);
99
+ var path = decodeURIComponent(url.pathname);
100
+ if (path.indexOf("/@fs/") === 0) {
101
+ path = path.slice("/@fs".length);
102
+ } else if (url.protocol !== "file:") {
103
+ path = path.replace(/^\/+/, "");
104
+ }
105
+ return path || null;
106
+ } catch (_err) {
107
+ return null;
108
+ }
109
+ }
110
+
111
+ // Keep in sync with parseReactStackFrame in
112
+ // ../../../pages/design-editor/source-location.ts.
113
+ var STACK_FRAME_RE =
114
+ /^\s*at\s+(?:([^\s(]+)\s+\()?([^()\s][^()]*?):(\d+):(\d+)\)?\s*$/;
115
+
116
+ function parseStackFrame(line: string): {
117
+ sourceFile: string;
118
+ line: number;
119
+ column: number;
120
+ functionName?: string;
121
+ } | null {
122
+ var match = STACK_FRAME_RE.exec(line);
123
+ if (!match) return null;
124
+ var functionName = match[1];
125
+ var rawUrl = match[2]!;
126
+ var sourceFile = resolveFrameUrl(rawUrl);
127
+ if (!sourceFile || isNoisePath(sourceFile)) return null;
128
+ var lineNumber = Number(match[3]);
129
+ var column = Number(match[4]);
130
+ if (!isFinite(lineNumber) || !isFinite(column)) return null;
131
+ return {
132
+ sourceFile: sourceFile,
133
+ line: lineNumber,
134
+ column: column,
135
+ functionName: functionName || undefined,
136
+ };
137
+ }
138
+
139
+ function extractFromDebugStack(stack: string): {
140
+ sourceFile: string;
141
+ line: number;
142
+ column: number;
143
+ functionName?: string;
144
+ } | null {
145
+ var lines = stack.split("\n");
146
+ for (var i = 0; i < lines.length; i += 1) {
147
+ var parsed = parseStackFrame(lines[i]!);
148
+ if (parsed) return parsed;
149
+ }
150
+ return null;
151
+ }
152
+
153
+ function getFiberFromDom(node: Element): any {
154
+ var keys = Object.keys(node);
155
+ for (var i = 0; i < keys.length; i += 1) {
156
+ for (var j = 0; j < FIBER_KEY_PREFIXES.length; j += 1) {
157
+ if (keys[i]!.indexOf(FIBER_KEY_PREFIXES[j]!) === 0) {
158
+ return (node as unknown as Record<string, any>)[keys[i]!];
159
+ }
160
+ }
161
+ }
162
+ return null;
163
+ }
164
+
165
+ // Bounded climb to the nearest DOM ancestor React actually tracks — covers
166
+ // the case where the exact selected node (e.g. a plain wrapper inserted by
167
+ // non-React code) has no fiber key of its own, without pretending an
168
+ // unrelated ancestor's source location belongs to a non-React element.
169
+ function findNearestFiber(el: Element): any {
170
+ var node: Element | null = el;
171
+ var attempts = 0;
172
+ while (node && attempts < 8) {
173
+ var fiber = getFiberFromDom(node);
174
+ if (fiber) return fiber;
175
+ node = node.parentElement;
176
+ attempts += 1;
177
+ }
178
+ return null;
179
+ }
180
+
181
+ function debugSourceOf(
182
+ fiber: any,
183
+ ): { sourceFile: string; line: number; column?: number } | null {
184
+ var source =
185
+ fiber._debugSource ||
186
+ (fiber._debugInfo && fiber._debugInfo.source) ||
187
+ (fiber.stateNode && fiber.stateNode._debugSource) ||
188
+ (fiber.elementType && fiber.elementType._debugSource);
189
+ if (source && source.fileName) {
190
+ return {
191
+ sourceFile: source.fileName,
192
+ line: source.lineNumber,
193
+ column: source.columnNumber,
194
+ };
195
+ }
196
+ var stack =
197
+ (fiber._debugStack && fiber._debugStack.stack) ||
198
+ (fiber._debugInfo && fiber._debugInfo.stack) ||
199
+ (fiber.stateNode &&
200
+ fiber.stateNode._debugStack &&
201
+ fiber.stateNode._debugStack.stack);
202
+ if (stack) {
203
+ var parsed = extractFromDebugStack(String(stack));
204
+ if (parsed) {
205
+ return {
206
+ sourceFile: parsed.sourceFile,
207
+ line: parsed.line,
208
+ column: parsed.column,
209
+ };
210
+ }
211
+ }
212
+ return null;
213
+ }
214
+
215
+ function hasStructuredDebugSource(fiber: any): boolean {
216
+ return !!(
217
+ fiber._debugSource ||
218
+ (fiber._debugInfo && fiber._debugInfo.source) ||
219
+ (fiber.stateNode && fiber.stateNode._debugSource) ||
220
+ (fiber.elementType && fiber.elementType._debugSource)
221
+ );
222
+ }
223
+
224
+ function isComponentFiber(fiber: any): boolean {
225
+ return typeof fiber.type === "function";
226
+ }
227
+
228
+ function componentNameOf(fiber: any): string | undefined {
229
+ var type = fiber.type;
230
+ return (type && (type.displayName || type.name)) || undefined;
231
+ }
232
+
233
+ type SourceLocationOutcome =
234
+ | {
235
+ status: "resolved";
236
+ framework?: "html" | "react" | "vue" | "svelte";
237
+ method:
238
+ | "data-attribute"
239
+ | "debug-source"
240
+ | "debug-stack"
241
+ | "vue-inspector"
242
+ | "svelte-meta";
243
+ sourceFile: string;
244
+ line: number;
245
+ column?: number;
246
+ componentName?: string;
247
+ ownerSourceFile?: string;
248
+ ownerLine?: number;
249
+ ownerColumn?: number;
250
+ ownerComponentName?: string;
251
+ // The owner site's own tier — an authored data-attribute element can
252
+ // still owe its owner line to a transformed React 19 owner stack.
253
+ ownerMethod?: "debug-source" | "debug-stack";
254
+ ownerKey?: string;
255
+ }
256
+ | {
257
+ status: "unavailable";
258
+ reason: "not-framework" | "no-debug-info" | "element-not-found";
259
+ };
260
+
261
+ function resolveFromDataAttributes(
262
+ el: Element,
263
+ ): SourceLocationOutcome | null {
264
+ var sourceFile = el.getAttribute("data-source-file");
265
+ var lineAttr = el.getAttribute("data-source-line");
266
+ var columnAttr = el.getAttribute("data-source-column");
267
+ var component = el.getAttribute("data-component-name");
268
+ var dataLoc = el.getAttribute("data-loc");
269
+ if (!sourceFile && dataLoc) {
270
+ var lastColon = dataLoc.lastIndexOf(":");
271
+ var lastPart = lastColon >= 0 ? dataLoc.slice(lastColon + 1) : "";
272
+ if (lastColon >= 0 && /^\d+$/.test(lastPart)) {
273
+ var before = dataLoc.slice(0, lastColon);
274
+ var prevColon = before.lastIndexOf(":");
275
+ var prevPart = prevColon >= 0 ? before.slice(prevColon + 1) : "";
276
+ var hasColumn = /^\d+$/.test(prevPart);
277
+ sourceFile = hasColumn ? before.slice(0, prevColon) : before;
278
+ lineAttr = hasColumn ? prevPart : lastPart;
279
+ columnAttr = hasColumn ? lastPart : columnAttr;
280
+ }
281
+ }
282
+ if (!sourceFile || !lineAttr) return null;
283
+ var line = Number(lineAttr);
284
+ if (!isFinite(line)) return null;
285
+ var column = columnAttr ? Number(columnAttr) : undefined;
286
+ return {
287
+ status: "resolved",
288
+ framework: "html",
289
+ method: "data-attribute",
290
+ sourceFile: sourceFile,
291
+ line: line,
292
+ column: isFinite(column as number) ? column : undefined,
293
+ componentName: component || undefined,
294
+ };
295
+ }
296
+
297
+ function resolveFromFiber(el: Element): SourceLocationOutcome {
298
+ var leafFiber = findNearestFiber(el);
299
+ if (!leafFiber) return { status: "unavailable", reason: "not-framework" };
300
+
301
+ var elementSource: {
302
+ sourceFile: string;
303
+ line: number;
304
+ column?: number;
305
+ } | null = null;
306
+ var elementMethod: "debug-source" | "debug-stack" | null = null;
307
+ var componentFiber: any = null;
308
+
309
+ var current = leafFiber;
310
+ var depth = 0;
311
+ while (current && depth < 12) {
312
+ if (!elementSource) {
313
+ var hasStructured = hasStructuredDebugSource(current);
314
+ var found = debugSourceOf(current);
315
+ if (found) {
316
+ elementSource = found;
317
+ elementMethod = hasStructured ? "debug-source" : "debug-stack";
318
+ }
319
+ }
320
+ if (
321
+ !componentFiber &&
322
+ current !== leafFiber &&
323
+ isComponentFiber(current)
324
+ ) {
325
+ componentFiber = current;
326
+ }
327
+ if (elementSource && componentFiber) break;
328
+ current = current.return || current.parent || current._debugOwner;
329
+ depth += 1;
330
+ }
331
+
332
+ if (!elementSource || !elementMethod) {
333
+ return { status: "unavailable", reason: "no-debug-info" };
334
+ }
335
+
336
+ var result: SourceLocationOutcome = {
337
+ status: "resolved",
338
+ framework: "react",
339
+ method: elementMethod,
340
+ sourceFile: elementSource.sourceFile,
341
+ line: elementSource.line,
342
+ column: elementSource.column,
343
+ };
344
+
345
+ if (componentFiber) {
346
+ (result as any).componentName = componentNameOf(componentFiber);
347
+ var ownerSource = debugSourceOf(componentFiber);
348
+ if (ownerSource) {
349
+ (result as any).ownerSourceFile = ownerSource.sourceFile;
350
+ (result as any).ownerLine = ownerSource.line;
351
+ (result as any).ownerColumn = ownerSource.column;
352
+ (result as any).ownerComponentName = (result as any).componentName;
353
+ (result as any).ownerMethod = hasStructuredDebugSource(componentFiber)
354
+ ? "debug-source"
355
+ : "debug-stack";
356
+ }
357
+ if (typeof componentFiber.key === "string" && componentFiber.key) {
358
+ (result as any).ownerKey = componentFiber.key;
359
+ }
360
+ }
361
+
362
+ return result;
363
+ }
364
+
365
+ function parseFrameworkDataLoc(
366
+ value: string,
367
+ ): { sourceFile: string; line: number; column?: number } | null {
368
+ var lastColon = value.lastIndexOf(":");
369
+ if (lastColon < 0) return null;
370
+ var lastPart = value.slice(lastColon + 1);
371
+ if (!/^\d+$/.test(lastPart)) return null;
372
+ var beforeLast = value.slice(0, lastColon);
373
+ var previousColon = beforeLast.lastIndexOf(":");
374
+ var previousPart =
375
+ previousColon >= 0 ? beforeLast.slice(previousColon + 1) : "";
376
+ var hasColumn = /^\d+$/.test(previousPart);
377
+ var sourceFile = (
378
+ hasColumn ? beforeLast.slice(0, previousColon) : beforeLast
379
+ ).trim();
380
+ var line = Number(hasColumn ? previousPart : lastPart);
381
+ var column = hasColumn ? Number(lastPart) : undefined;
382
+ if (!sourceFile || !isFinite(line)) return null;
383
+ if (column !== undefined && !isFinite(column)) return null;
384
+ return { sourceFile: sourceFile, line: line, column: column };
385
+ }
386
+
387
+ function resolveFromVue(el: Element): SourceLocationOutcome | null {
388
+ var node: any = el;
389
+ var sawVue = false;
390
+ for (var depth = 0; node && depth < 8; depth += 1) {
391
+ var vnode = node.__vnode;
392
+ var component = node.__vueParentComponent;
393
+ if (vnode || component) sawVue = true;
394
+ var inspector =
395
+ vnode && vnode.props && typeof vnode.props.__v_inspector === "string"
396
+ ? vnode.props.__v_inspector
397
+ : null;
398
+ if (inspector) {
399
+ var parsed = parseFrameworkDataLoc(inspector);
400
+ if (parsed) {
401
+ var type = (component && component.type) || (vnode && vnode.type);
402
+ return {
403
+ status: "resolved",
404
+ framework: "vue",
405
+ method: "vue-inspector",
406
+ sourceFile: parsed.sourceFile,
407
+ line: parsed.line,
408
+ column: parsed.column,
409
+ componentName:
410
+ type && (type.name || type.__name || type.displayName),
411
+ };
412
+ }
413
+ }
414
+ node = node.parentElement;
415
+ }
416
+ return sawVue ? { status: "unavailable", reason: "no-debug-info" } : null;
417
+ }
418
+
419
+ function resolveFromSvelte(el: Element): SourceLocationOutcome | null {
420
+ var node: any = el;
421
+ var sawSvelte = false;
422
+ for (var depth = 0; node && depth < 8; depth += 1) {
423
+ var meta = node.__svelte_meta;
424
+ if (meta) sawSvelte = true;
425
+ var loc = meta && meta.loc;
426
+ var sourceFile = loc && (loc.file || loc.filename);
427
+ var line = loc && Number(loc.line);
428
+ var column = loc && Number(loc.column);
429
+ if (sourceFile && isFinite(line)) {
430
+ return {
431
+ status: "resolved",
432
+ framework: "svelte",
433
+ method: "svelte-meta",
434
+ sourceFile: String(sourceFile),
435
+ line: line,
436
+ column: isFinite(column) ? column : undefined,
437
+ componentName:
438
+ typeof meta.component === "string"
439
+ ? meta.component
440
+ : typeof meta.name === "string"
441
+ ? meta.name
442
+ : undefined,
443
+ };
444
+ }
445
+ node = node.parentElement;
446
+ }
447
+ return sawSvelte
448
+ ? { status: "unavailable", reason: "no-debug-info" }
449
+ : null;
450
+ }
451
+
452
+ function resolveFromFramework(el: Element): SourceLocationOutcome {
453
+ var react = resolveFromFiber(el);
454
+ if (react.status === "resolved" || react.reason === "no-debug-info") {
455
+ return react;
456
+ }
457
+ var vue = resolveFromVue(el);
458
+ if (vue) return vue;
459
+ var svelte = resolveFromSvelte(el);
460
+ if (svelte) return svelte;
461
+ return { status: "unavailable", reason: "not-framework" };
462
+ }
463
+
464
+ function resolveSourceLocation(el: Element): SourceLocationOutcome {
465
+ var fromAttributes = resolveFromDataAttributes(el);
466
+ if (!fromAttributes) return resolveFromFramework(el);
467
+ // A build-time source plugin stamps the element's OWN location and never
468
+ // the owner call site, so keep walking Fiber for owner provenance instead
469
+ // of short-circuiting — the owner site is what separates `.map()` siblings.
470
+ var fromFiber = resolveFromFiber(el);
471
+ if (
472
+ fromAttributes.status === "resolved" &&
473
+ fromFiber.status === "resolved"
474
+ ) {
475
+ if (fromFiber.ownerSourceFile) {
476
+ fromAttributes.ownerSourceFile = fromFiber.ownerSourceFile;
477
+ fromAttributes.ownerLine = fromFiber.ownerLine;
478
+ fromAttributes.ownerColumn = fromFiber.ownerColumn;
479
+ fromAttributes.ownerComponentName = fromFiber.ownerComponentName;
480
+ fromAttributes.ownerMethod = fromFiber.ownerMethod;
481
+ }
482
+ if (fromFiber.ownerKey) fromAttributes.ownerKey = fromFiber.ownerKey;
483
+ if (!fromAttributes.componentName) {
484
+ fromAttributes.componentName = fromFiber.componentName;
485
+ }
486
+ fromAttributes.framework = fromFiber.framework;
487
+ }
488
+ return fromAttributes;
489
+ }
490
+
491
+ function findTarget(nodeId?: string, selector?: string): Element | null {
492
+ if (nodeId) {
493
+ var byId = document.querySelector(
494
+ '[data-agent-native-node-id="' + nodeId.replace(/"/g, '\\"') + '"]',
495
+ );
496
+ if (byId) return byId;
497
+ }
498
+ if (selector) {
499
+ try {
500
+ return document.querySelector(selector);
501
+ } catch (_err) {
502
+ return null;
503
+ }
504
+ }
505
+ return null;
506
+ }
507
+
508
+ window.addEventListener("message", function (e: MessageEvent) {
509
+ if (e.source !== window.parent) return;
510
+ if (!e.data || e.data.type !== "agent-native:source-location-request")
511
+ return;
512
+ var correlationId: string = e.data.correlationId || "";
513
+ var target = findTarget(e.data.nodeId, e.data.selector);
514
+ var result: SourceLocationOutcome = target
515
+ ? resolveSourceLocation(target)
516
+ : { status: "unavailable", reason: "element-not-found" };
517
+ try {
518
+ (window.parent as Window).postMessage(
519
+ {
520
+ type: "agent-native:source-location-result",
521
+ correlationId: correlationId,
522
+ result: result,
523
+ },
524
+ "*",
525
+ );
526
+ } catch (_err) {
527
+ // Cross-origin errors are silently swallowed.
528
+ }
529
+ });
530
+ })();