@agent-native/core 0.129.2 → 0.130.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (589) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +72 -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/google-docs-poller.ts +3 -0
  54. package/corpus/core/src/integrations/webhook-handler.ts +28 -11
  55. package/corpus/core/src/jobs/scheduler.ts +4 -0
  56. package/corpus/core/src/localization/default-messages.ts +3 -2
  57. package/corpus/core/src/observability/traces.ts +48 -12
  58. package/corpus/core/src/org/handlers.ts +52 -1
  59. package/corpus/core/src/org/migrations.ts +4 -0
  60. package/corpus/core/src/org/plugin.ts +14 -0
  61. package/corpus/core/src/org/schema.ts +1 -0
  62. package/corpus/core/src/org/types.ts +8 -0
  63. package/corpus/core/src/org/workspace-url.ts +74 -0
  64. package/corpus/core/src/resources/handlers.ts +35 -5
  65. package/corpus/core/src/scripts/runner.ts +183 -5
  66. package/corpus/core/src/server/action-routes.ts +32 -2
  67. package/corpus/core/src/server/agent-chat-plugin.ts +29 -0
  68. package/corpus/core/src/server/agent-teams.ts +10 -1
  69. package/corpus/core/src/server/auth.ts +33 -7
  70. package/corpus/core/src/server/embed-route.ts +9 -0
  71. package/corpus/core/src/server/embed-session.ts +62 -3
  72. package/corpus/core/src/server/open-route.ts +20 -6
  73. package/corpus/core/src/server/prompts/framework-core-compact.ts +1 -1
  74. package/corpus/core/src/server/prompts/framework-core.ts +1 -0
  75. package/corpus/core/src/server/request-context.ts +36 -1
  76. package/corpus/core/src/shared/embed-auth.ts +1 -0
  77. package/corpus/core/src/shared/html-document.ts +115 -0
  78. package/corpus/core/src/shared/index.ts +1 -0
  79. package/corpus/core/src/sharing/access.ts +8 -1
  80. package/corpus/core/src/sharing/registry.ts +11 -2
  81. package/corpus/core/src/workspace-files/actions.ts +100 -0
  82. package/corpus/core/src/workspace-files/tool.ts +4 -0
  83. package/corpus/templates/analytics/.agents/skills/analysis-workspace/SKILL.md +4 -0
  84. package/corpus/templates/analytics/.agents/skills/hubspot/SKILL.md +9 -1
  85. package/corpus/templates/analytics/AGENTS.md +17 -24
  86. package/corpus/templates/analytics/actions/data-source-status.ts +11 -1
  87. package/corpus/templates/analytics/app/i18n-data.ts +34 -0
  88. package/corpus/templates/analytics/app/lib/data-source-status.ts +86 -0
  89. package/corpus/templates/analytics/app/lib/native-mcp-exclusions.ts +9 -0
  90. package/corpus/templates/analytics/app/pages/DataSources.tsx +184 -20
  91. package/corpus/templates/analytics/changelog/2026-07-28-native-analytics-data-sources-no-longer-show-duplicate-mc.md +6 -0
  92. package/corpus/templates/analytics/changelog/2026-07-29-exports-now-appear-in-chat-with-a-direct-download-instead-of.md +6 -0
  93. package/corpus/templates/analytics/changelog/2026-07-29-queued-chat-prompts-no-longer-resend-after-analytics-navigat.md +6 -0
  94. package/corpus/templates/analytics/changelog/2026-07-29-scheduled-dashboard-emails-load-every-panel-reliably-without.md +6 -0
  95. package/corpus/templates/analytics/scripts/emit-netlify-dashboard-report-cron.ts +6 -3
  96. package/corpus/templates/analytics/server/lib/credential-keys.ts +1 -1
  97. package/corpus/templates/analytics/server/lib/hubspot.ts +1 -1
  98. package/corpus/templates/analytics/server/lib/provider-credentials.ts +55 -1
  99. package/corpus/templates/analytics/server/plugins/agent-chat.ts +123 -27
  100. package/corpus/templates/analytics/server/routes/[...page].get.ts +2 -7
  101. package/corpus/templates/analytics/vite.config.ts +7 -0
  102. package/corpus/templates/brain/actions/list-connection-providers.ts +100 -2
  103. package/corpus/templates/brain/app/lib/brain.ts +10 -0
  104. package/corpus/templates/brain/app/routes/sources.tsx +15 -4
  105. package/corpus/templates/brain/changelog/2026-07-29-brain-automatically-retries-failed-source-syncs-and-guides-y.md +6 -0
  106. package/corpus/templates/brain/jobs/process-ingest-queue.ts +13 -0
  107. package/corpus/templates/brain/server/jobs/sync-sources.ts +27 -22
  108. package/corpus/templates/brain/server/plugins/agent-chat.ts +2 -1
  109. package/corpus/templates/brain/server/routes/api/brain/queue/run.post.ts +7 -1
  110. package/corpus/templates/clips/AGENTS.md +1 -1
  111. package/corpus/templates/clips/actions/create-recording-agent-link.ts +11 -1
  112. package/corpus/templates/clips/actions/update-comment.ts +68 -0
  113. package/corpus/templates/clips/app/components/editor/editor-layout.tsx +0 -1
  114. package/corpus/templates/clips/app/components/player/comments-panel.tsx +221 -65
  115. package/corpus/templates/clips/app/components/player/video-player.tsx +101 -27
  116. package/corpus/templates/clips/app/i18n/en-US.ts +2 -1
  117. package/corpus/templates/clips/app/routes/bug-report.done.tsx +48 -27
  118. package/corpus/templates/clips/app/routes/bug-report.tsx +43 -4
  119. package/corpus/templates/clips/app/routes/record.tsx +2 -0
  120. package/corpus/templates/clips/changelog/2026-07-29-clip-playback-now-recovers-instead-of-getting-stuck-when-a-b.md +6 -0
  121. package/corpus/templates/clips/changelog/2026-07-29-comments-can-now-be-edited-after-posting.md +6 -0
  122. package/corpus/templates/clips/changelog/2026-07-29-download-actions-now-use-a-shorter-clearer-label.md +6 -0
  123. package/corpus/templates/clips/changelog/2026-07-29-embedded-bug-reports-now-return-a-temporary-agent-readable.md +6 -0
  124. package/corpus/templates/clips/shared/bug-report.ts +99 -0
  125. package/corpus/templates/content/actions/_content-database-personal-view.ts +7 -1
  126. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +5 -2
  127. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +20 -8
  128. package/corpus/templates/content/changelog/2026-07-29-missing-databases-no-longer-trigger-repeated-personal-view-e.md +6 -0
  129. package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +83 -47
  130. package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +474 -55
  131. package/corpus/templates/design/.generated/bridge/embedded-wheel.generated.ts +3 -0
  132. package/corpus/templates/design/.generated/bridge/hit-test.generated.ts +18 -1
  133. package/corpus/templates/design/.generated/bridge/source-location.generated.ts +348 -0
  134. package/corpus/templates/design/actions/add-localhost-screens.ts +2 -7
  135. package/corpus/templates/design/actions/apply-visual-edit.ts +7 -1
  136. package/corpus/templates/design/actions/connect-localhost.ts +5 -9
  137. package/corpus/templates/design/actions/create-component.ts +16 -13
  138. package/corpus/templates/design/actions/grant-localhost-write-consent.ts +2 -7
  139. package/corpus/templates/design/actions/list-design-source-capabilities.ts +4 -7
  140. package/corpus/templates/design/actions/list-local-files.ts +26 -50
  141. package/corpus/templates/design/actions/list-localhost-connections.ts +2 -7
  142. package/corpus/templates/design/actions/migrate-board-objects-to-file.ts +2 -2
  143. package/corpus/templates/design/actions/open-visual-edit.ts +234 -135
  144. package/corpus/templates/design/actions/read-local-file.ts +26 -50
  145. package/corpus/templates/design/actions/request-localhost-write-consent.ts +2 -7
  146. package/corpus/templates/design/actions/write-local-file.ts +31 -73
  147. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +307 -133
  148. package/corpus/templates/design/app/components/design/EditPanel.tsx +94 -22
  149. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +137 -60
  150. package/corpus/templates/design/app/components/design/ResponsiveInteractBar.tsx +75 -14
  151. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +755 -97
  152. package/corpus/templates/design/app/components/design/bridge/embedded-wheel.bridge.ts +8 -0
  153. package/corpus/templates/design/app/components/design/bridge/hit-test.bridge.ts +24 -1
  154. package/corpus/templates/design/app/components/design/bridge/source-location.bridge.ts +530 -0
  155. package/corpus/templates/design/app/components/design/code-workbench/CodeWorkbenchLoader.tsx +278 -0
  156. package/corpus/templates/design/app/components/design/code-workbench/editor/MonacoHost.tsx +32 -12
  157. package/corpus/templates/design/app/components/design/code-workbench/editor/monaco-setup.ts +14 -3
  158. package/corpus/templates/design/app/components/design/code-workbench/explorer/ExplorerView.tsx +87 -24
  159. package/corpus/templates/design/app/components/design/code-workbench/explorer/FileTree.tsx +36 -0
  160. package/corpus/templates/design/app/components/design/code-workbench/store.tsx +2 -1
  161. package/corpus/templates/design/app/components/design/code-workbench/workspace/localhost-provider.ts +48 -8
  162. package/corpus/templates/design/app/components/design/design-canvas/content-size-report.ts +3 -13
  163. package/corpus/templates/design/app/components/design/design-canvas/embedded-frame.ts +4 -2
  164. package/corpus/templates/design/app/components/design/design-canvas/hit-test.ts +3 -13
  165. package/corpus/templates/design/app/components/design/edit-panel/element-classification.ts +3 -1
  166. package/corpus/templates/design/app/components/design/edit-panel/inspect-code-source.ts +93 -0
  167. package/corpus/templates/design/app/components/design/multi-screen/board-surface-html.ts +4 -2
  168. package/corpus/templates/design/app/components/design/multi-screen/cross-screen-drop.ts +35 -0
  169. package/corpus/templates/design/app/components/design/multi-screen/iframe-targeting.ts +24 -0
  170. package/corpus/templates/design/app/components/design/multi-screen/types.ts +9 -0
  171. package/corpus/templates/design/app/components/design/types.ts +29 -0
  172. package/corpus/templates/design/app/components/layout/Layout.tsx +7 -4
  173. package/corpus/templates/design/app/hooks/use-navigation-state.ts +3 -0
  174. package/corpus/templates/design/app/i18n-data.ts +153 -46
  175. package/corpus/templates/design/app/i18n-responsive-interact.ts +12 -12
  176. package/corpus/templates/design/app/lib/design-editor-route.ts +23 -0
  177. package/corpus/templates/design/app/pages/VisualEdit.tsx +19 -6
  178. package/corpus/templates/design/app/pages/design-editor/action-error.ts +19 -0
  179. package/corpus/templates/design/app/pages/design-editor/canvas-primitive-insert.ts +29 -0
  180. package/corpus/templates/design/app/pages/design-editor/clone-and-pen-edit.ts +6 -0
  181. package/corpus/templates/design/app/pages/design-editor/code-layer-state.ts +277 -15
  182. package/corpus/templates/design/app/pages/design-editor/editor-state.ts +75 -9
  183. package/corpus/templates/design/app/pages/design-editor/layer-state-scope.ts +28 -0
  184. package/corpus/templates/design/app/pages/design-editor/live-screen-layer-drop.ts +41 -0
  185. package/corpus/templates/design/app/pages/design-editor/pending-edits.ts +496 -41
  186. package/corpus/templates/design/app/pages/design-editor/pending-live-edit-unload-guard.ts +27 -0
  187. package/corpus/templates/design/app/pages/design-editor/pending-structure-verification.ts +10 -0
  188. package/corpus/templates/design/app/pages/design-editor/react-semantic-handoff.ts +168 -9
  189. package/corpus/templates/design/app/pages/design-editor/responsive-interact.ts +41 -3
  190. package/corpus/templates/design/app/pages/design-editor/screen-command-utils.ts +5 -0
  191. package/corpus/templates/design/app/pages/design-editor/selection-state.ts +42 -13
  192. package/corpus/templates/design/app/pages/design-editor/source-location.ts +180 -0
  193. package/corpus/templates/design/app/pages/design-editor/tool-state.ts +17 -0
  194. package/corpus/templates/design/app/public-routes.ts +1 -0
  195. package/corpus/templates/design/app/routes/visual-edit.$id.tsx +15 -0
  196. package/corpus/templates/design/changelog/2026-06-29-screen-overview-is-easier-to-find-and-named-screens-open-dir.md +1 -1
  197. package/corpus/templates/design/changelog/2026-07-28-deleting-a-selected-element-now-removes-it-from-the-live-pre.md +6 -0
  198. package/corpus/templates/design/changelog/2026-07-28-deleting-an-element-on-a-connected-localhost-screen-now-queu.md +6 -0
  199. package/corpus/templates/design/changelog/2026-07-28-interact-mode-now-shows-a-responsive-device-preview-with-pre.md +6 -0
  200. package/corpus/templates/design/changelog/2026-07-28-layer-hide-and-lock-now-apply-to-the-live-preview-instead-of.md +6 -0
  201. package/corpus/templates/design/changelog/2026-07-28-layers-panel-selections-on-a-connected-localhost-screen-can-.md +6 -0
  202. package/corpus/templates/design/changelog/2026-07-28-locked-layers-now-show-a-subtle-dashed-outline-in-the-live-p.md +6 -0
  203. package/corpus/templates/design/changelog/2026-07-28-the-apply-design-updates-button-now-counts-pending-live-text.md +6 -0
  204. package/corpus/templates/design/changelog/2026-07-28-the-design-canvas-no-longer-stalls-on-a-render-loop-while-a-.md +6 -0
  205. package/corpus/templates/design/changelog/2026-07-28-visual-edit-on-a-local-dev-server-no-longer-requires-signing.md +6 -0
  206. package/corpus/templates/design/changelog/2026-07-28-visual-edits-on-a-react-19-app-no-longer-report-a-source-lin.md +6 -0
  207. package/corpus/templates/design/changelog/2026-07-29-an-edit-that-cannot-be-written-to-source-now-names-the-reaso.md +6 -0
  208. package/corpus/templates/design/changelog/2026-07-29-applying-a-primitive-dropped-onto-a-connected-localhost-scre.md +6 -0
  209. package/corpus/templates/design/changelog/2026-07-29-changing-a-style-in-the-inspector-now-updates-a-connected-lo.md +6 -0
  210. package/corpus/templates/design/changelog/2026-07-29-choosing-edit-or-annotate-from-a-focused-screen-now-returns-.md +6 -0
  211. package/corpus/templates/design/changelog/2026-07-29-concurrent-source-edits-now-return-a-clear-conflict-response.md +6 -0
  212. package/corpus/templates/design/changelog/2026-07-29-creating-a-component-from-an-element-that-repeats-in-the-sou.md +6 -0
  213. package/corpus/templates/design/changelog/2026-07-29-deleting-an-element-you-just-dropped-onto-a-live-screen-no-l.md +6 -0
  214. package/corpus/templates/design/changelog/2026-07-29-dragging-a-layer-across-screens-no-longer-dies-when-the-poin.md +6 -0
  215. package/corpus/templates/design/changelog/2026-07-29-dragging-an-element-from-a-stored-screen-into-a-live-localho.md +6 -0
  216. package/corpus/templates/design/changelog/2026-07-29-drawing-a-box-on-the-canvas-and-dragging-it-into-a-connected.md +6 -0
  217. package/corpus/templates/design/changelog/2026-07-29-fixed-a-loading-screen-flicker-when-reopening-designs-with-a.md +6 -0
  218. package/corpus/templates/design/changelog/2026-07-29-interact-mode-has-edit-and-annotate-buttons-again-so-you-can.md +6 -0
  219. package/corpus/templates/design/changelog/2026-07-29-layer-groups-can-be-dropped-onto-live-localhost-screens.md +6 -0
  220. package/corpus/templates/design/changelog/2026-07-29-localhost-source-errors-now-say-what-actually-went-wrong-whi.md +6 -0
  221. package/corpus/templates/design/changelog/2026-07-29-opening-or-refreshing-a-live-localhost-screen-in-single-scre.md +6 -0
  222. package/corpus/templates/design/changelog/2026-07-29-redo-after-undoing-a-drop-onto-a-live-screen-puts-the-elemen.md +6 -0
  223. package/corpus/templates/design/changelog/2026-07-29-shapes-can-be-drawn-directly-onto-live-localhost-screens.md +6 -0
  224. package/corpus/templates/design/changelog/2026-07-29-shapes-drawn-on-the-canvas-board-now-appear-immediately-inst.md +6 -0
  225. package/corpus/templates/design/changelog/2026-07-29-style-edits-on-a-running-localhost-screen-now-preview-live-a.md +6 -0
  226. package/corpus/templates/design/changelog/2026-07-29-the-apply-design-updates-control-now-appears-as-a-clean-conn.md +6 -0
  227. package/corpus/templates/design/changelog/2026-07-29-visual-edits-on-a-mapped-component-instance-now-tell-the-age.md +6 -0
  228. package/corpus/templates/design/server/lib/design-data-access.ts +21 -7
  229. package/corpus/templates/design/server/lib/localhost-connection.ts +240 -0
  230. package/corpus/templates/design/server/routes/[...page].get.ts +2 -5
  231. package/corpus/templates/design/server/source-workspace.ts +2 -0
  232. package/corpus/templates/design/shared/code-layer.ts +43 -0
  233. package/corpus/templates/design/shared/html-content.ts +26 -0
  234. package/corpus/templates/design/shared/html-integrity.ts +21 -1
  235. package/corpus/templates/design/shared/local-jsx-visual-edit.ts +15 -0
  236. package/corpus/templates/design/shared/source-mode.ts +76 -0
  237. package/corpus/templates/dispatch/changelog/2026-07-29-workspace-members-without-admin-access-now-see-a-clear-permi.md +6 -0
  238. package/corpus/templates/dispatch/server/lib/usage-metrics.ts +2 -1
  239. package/corpus/templates/plan/app/lib/plan-annotation-runtime.ts +3 -4
  240. package/corpus/templates/plan/server/routes/[...page].get.ts +2 -5
  241. package/corpus/templates/slides/actions/patch-deck.ts +29 -17
  242. package/corpus/toolkit/CHANGELOG.md +6 -0
  243. package/corpus/toolkit/package.json +1 -1
  244. package/corpus/toolkit/src/composer/ComposerPlusMenu.tsx +3 -2
  245. package/dist/action-ui.d.ts +1 -0
  246. package/dist/action-ui.d.ts.map +1 -1
  247. package/dist/action-ui.js +1 -0
  248. package/dist/action-ui.js.map +1 -1
  249. package/dist/action.d.ts +5 -1
  250. package/dist/action.d.ts.map +1 -1
  251. package/dist/action.js.map +1 -1
  252. package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
  253. package/dist/agent/engine/ai-sdk-engine.js +13 -5
  254. package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
  255. package/dist/agent/harness/runner.d.ts.map +1 -1
  256. package/dist/agent/harness/runner.js +5 -0
  257. package/dist/agent/harness/runner.js.map +1 -1
  258. package/dist/agent/production-agent.d.ts +16 -0
  259. package/dist/agent/production-agent.d.ts.map +1 -1
  260. package/dist/agent/production-agent.js +18 -1
  261. package/dist/agent/production-agent.js.map +1 -1
  262. package/dist/agent/run-loop-with-resume.d.ts.map +1 -1
  263. package/dist/agent/run-loop-with-resume.js +6 -0
  264. package/dist/agent/run-loop-with-resume.js.map +1 -1
  265. package/dist/agent/run-manager.d.ts +14 -0
  266. package/dist/agent/run-manager.d.ts.map +1 -1
  267. package/dist/agent/run-manager.js +91 -1
  268. package/dist/agent/run-manager.js.map +1 -1
  269. package/dist/agent/thread-data-builder.d.ts +3 -0
  270. package/dist/agent/thread-data-builder.d.ts.map +1 -1
  271. package/dist/agent/thread-data-builder.js +35 -3
  272. package/dist/agent/thread-data-builder.js.map +1 -1
  273. package/dist/agent/types.d.ts +2 -0
  274. package/dist/agent/types.d.ts.map +1 -1
  275. package/dist/agent/types.js.map +1 -1
  276. package/dist/chat-threads/store.d.ts.map +1 -1
  277. package/dist/chat-threads/store.js +4 -6
  278. package/dist/chat-threads/store.js.map +1 -1
  279. package/dist/cli/create.d.ts +66 -6
  280. package/dist/cli/create.d.ts.map +1 -1
  281. package/dist/cli/create.js +765 -66
  282. package/dist/cli/create.js.map +1 -1
  283. package/dist/cli/design-connect.d.ts.map +1 -1
  284. package/dist/cli/design-connect.js +2 -7
  285. package/dist/cli/design-connect.js.map +1 -1
  286. package/dist/cli/index.js +5 -3
  287. package/dist/cli/index.js.map +1 -1
  288. package/dist/cli/skills-content/design-visual-edit-skill.d.ts +1 -1
  289. package/dist/cli/skills-content/design-visual-edit-skill.d.ts.map +1 -1
  290. package/dist/cli/skills-content/design-visual-edit-skill.js +83 -47
  291. package/dist/cli/skills-content/design-visual-edit-skill.js.map +1 -1
  292. package/dist/client/AssistantChat.d.ts.map +1 -1
  293. package/dist/client/AssistantChat.js +16 -9
  294. package/dist/client/AssistantChat.js.map +1 -1
  295. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  296. package/dist/client/agent-chat-adapter.js +21 -0
  297. package/dist/client/agent-chat-adapter.js.map +1 -1
  298. package/dist/client/blocks/library/wireframe-kit.d.ts +2 -0
  299. package/dist/client/blocks/library/wireframe-kit.d.ts.map +1 -1
  300. package/dist/client/blocks/library/wireframe-kit.js +8 -2
  301. package/dist/client/blocks/library/wireframe-kit.js.map +1 -1
  302. package/dist/client/chat/index.d.ts +1 -1
  303. package/dist/client/chat/index.d.ts.map +1 -1
  304. package/dist/client/chat/index.js +1 -1
  305. package/dist/client/chat/index.js.map +1 -1
  306. package/dist/client/chat/message-components.d.ts +17 -0
  307. package/dist/client/chat/message-components.d.ts.map +1 -1
  308. package/dist/client/chat/message-components.js +24 -2
  309. package/dist/client/chat/message-components.js.map +1 -1
  310. package/dist/client/chat/run-recovery.d.ts +6 -0
  311. package/dist/client/chat/run-recovery.d.ts.map +1 -1
  312. package/dist/client/chat/run-recovery.js +13 -3
  313. package/dist/client/chat/run-recovery.js.map +1 -1
  314. package/dist/client/chat/widgets/DataTableWidget.d.ts.map +1 -1
  315. package/dist/client/chat/widgets/DataTableWidget.js +2 -3
  316. package/dist/client/chat/widgets/DataTableWidget.js.map +1 -1
  317. package/dist/client/chat/widgets/WorkspaceFileWidget.d.ts +5 -0
  318. package/dist/client/chat/widgets/WorkspaceFileWidget.d.ts.map +1 -0
  319. package/dist/client/chat/widgets/WorkspaceFileWidget.js +34 -0
  320. package/dist/client/chat/widgets/WorkspaceFileWidget.js.map +1 -0
  321. package/dist/client/chat/widgets/builtin-tool-renderers.d.ts.map +1 -1
  322. package/dist/client/chat/widgets/builtin-tool-renderers.js +13 -1
  323. package/dist/client/chat/widgets/builtin-tool-renderers.js.map +1 -1
  324. package/dist/client/chat/widgets/workspace-file-result.d.ts +12 -0
  325. package/dist/client/chat/widgets/workspace-file-result.d.ts.map +1 -0
  326. package/dist/client/chat/widgets/workspace-file-result.js +34 -0
  327. package/dist/client/chat/widgets/workspace-file-result.js.map +1 -0
  328. package/dist/client/embed-auth.d.ts.map +1 -1
  329. package/dist/client/embed-auth.js +2 -1
  330. package/dist/client/embed-auth.js.map +1 -1
  331. package/dist/client/org/InvitationBanner.d.ts +5 -2
  332. package/dist/client/org/InvitationBanner.d.ts.map +1 -1
  333. package/dist/client/org/InvitationBanner.js +9 -2
  334. package/dist/client/org/InvitationBanner.js.map +1 -1
  335. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  336. package/dist/client/org/OrgSwitcher.js +3 -2
  337. package/dist/client/org/OrgSwitcher.js.map +1 -1
  338. package/dist/client/org/TeamPage.d.ts.map +1 -1
  339. package/dist/client/org/TeamPage.js +27 -3
  340. package/dist/client/org/TeamPage.js.map +1 -1
  341. package/dist/client/org/WorkspaceNotice.d.ts +18 -0
  342. package/dist/client/org/WorkspaceNotice.d.ts.map +1 -0
  343. package/dist/client/org/WorkspaceNotice.js +56 -0
  344. package/dist/client/org/WorkspaceNotice.js.map +1 -0
  345. package/dist/client/org/hooks.d.ts +1 -0
  346. package/dist/client/org/hooks.d.ts.map +1 -1
  347. package/dist/client/org/hooks.js +12 -0
  348. package/dist/client/org/hooks.js.map +1 -1
  349. package/dist/client/org/index.d.ts +2 -1
  350. package/dist/client/org/index.d.ts.map +1 -1
  351. package/dist/client/org/index.js +2 -1
  352. package/dist/client/org/index.js.map +1 -1
  353. package/dist/client/resources/McpIntegrationDialog.d.ts.map +1 -1
  354. package/dist/client/resources/McpIntegrationDialog.js +8 -12
  355. package/dist/client/resources/McpIntegrationDialog.js.map +1 -1
  356. package/dist/client/resources/ResourcesPanel.d.ts +3 -0
  357. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  358. package/dist/client/resources/ResourcesPanel.js +49 -20
  359. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  360. package/dist/client/resources/mcp-integration-catalog.d.ts +1 -0
  361. package/dist/client/resources/mcp-integration-catalog.d.ts.map +1 -1
  362. package/dist/client/resources/mcp-integration-catalog.js +3 -0
  363. package/dist/client/resources/mcp-integration-catalog.js.map +1 -1
  364. package/dist/client/resources/use-resources.d.ts +1 -0
  365. package/dist/client/resources/use-resources.d.ts.map +1 -1
  366. package/dist/client/resources/use-resources.js +3 -0
  367. package/dist/client/resources/use-resources.js.map +1 -1
  368. package/dist/client/use-action.d.ts +3 -1
  369. package/dist/client/use-action.d.ts.map +1 -1
  370. package/dist/client/use-action.js +3 -1
  371. package/dist/client/use-action.js.map +1 -1
  372. package/dist/client/widgets/index.d.ts +1 -1
  373. package/dist/client/widgets/index.d.ts.map +1 -1
  374. package/dist/client/widgets/index.js +1 -1
  375. package/dist/client/widgets/index.js.map +1 -1
  376. package/dist/coding-tools/run-code.js +2 -1
  377. package/dist/coding-tools/run-code.js.map +1 -1
  378. package/dist/collab/awareness.d.ts +2 -2
  379. package/dist/collab/awareness.d.ts.map +1 -1
  380. package/dist/db/client.d.ts +1 -0
  381. package/dist/db/client.d.ts.map +1 -1
  382. package/dist/db/client.js +24 -3
  383. package/dist/db/client.js.map +1 -1
  384. package/dist/deploy/build.d.ts.map +1 -1
  385. package/dist/deploy/build.js +25 -3
  386. package/dist/deploy/build.js.map +1 -1
  387. package/dist/eject/remote-mcp-presets.js +1 -1
  388. package/dist/eject/remote-mcp-presets.js.map +1 -1
  389. package/dist/index.browser.d.ts +1 -1
  390. package/dist/index.browser.d.ts.map +1 -1
  391. package/dist/index.browser.js +1 -1
  392. package/dist/index.browser.js.map +1 -1
  393. package/dist/index.d.ts +1 -1
  394. package/dist/index.d.ts.map +1 -1
  395. package/dist/index.js +1 -1
  396. package/dist/index.js.map +1 -1
  397. package/dist/integrations/google-docs-poller.d.ts.map +1 -1
  398. package/dist/integrations/google-docs-poller.js +4 -1
  399. package/dist/integrations/google-docs-poller.js.map +1 -1
  400. package/dist/integrations/webhook-handler.d.ts.map +1 -1
  401. package/dist/integrations/webhook-handler.js +23 -11
  402. package/dist/integrations/webhook-handler.js.map +1 -1
  403. package/dist/jobs/scheduler.js +4 -0
  404. package/dist/jobs/scheduler.js.map +1 -1
  405. package/dist/localization/default-messages.d.ts +3 -2
  406. package/dist/localization/default-messages.d.ts.map +1 -1
  407. package/dist/localization/default-messages.js +3 -2
  408. package/dist/localization/default-messages.js.map +1 -1
  409. package/dist/notifications/routes.d.ts +1 -1
  410. package/dist/observability/routes.d.ts +3 -3
  411. package/dist/observability/traces.d.ts.map +1 -1
  412. package/dist/observability/traces.js +27 -7
  413. package/dist/observability/traces.js.map +1 -1
  414. package/dist/org/handlers.d.ts +15 -0
  415. package/dist/org/handlers.d.ts.map +1 -1
  416. package/dist/org/handlers.js +45 -1
  417. package/dist/org/handlers.js.map +1 -1
  418. package/dist/org/migrations.d.ts.map +1 -1
  419. package/dist/org/migrations.js +4 -0
  420. package/dist/org/migrations.js.map +1 -1
  421. package/dist/org/plugin.d.ts +1 -0
  422. package/dist/org/plugin.d.ts.map +1 -1
  423. package/dist/org/plugin.js +10 -1
  424. package/dist/org/plugin.js.map +1 -1
  425. package/dist/org/schema.d.ts +19 -0
  426. package/dist/org/schema.d.ts.map +1 -1
  427. package/dist/org/schema.js +1 -0
  428. package/dist/org/schema.js.map +1 -1
  429. package/dist/org/types.d.ts +8 -0
  430. package/dist/org/types.d.ts.map +1 -1
  431. package/dist/org/types.js.map +1 -1
  432. package/dist/org/workspace-url.d.ts +32 -0
  433. package/dist/org/workspace-url.d.ts.map +1 -0
  434. package/dist/org/workspace-url.js +63 -0
  435. package/dist/org/workspace-url.js.map +1 -0
  436. package/dist/progress/routes.d.ts +1 -1
  437. package/dist/provider-api/actions/custom-provider-registration.d.ts +11 -11
  438. package/dist/provider-api/actions/provider-api.d.ts +7 -7
  439. package/dist/resources/handlers.d.ts +2 -3
  440. package/dist/resources/handlers.d.ts.map +1 -1
  441. package/dist/resources/handlers.js +25 -5
  442. package/dist/resources/handlers.js.map +1 -1
  443. package/dist/scripts/runner.d.ts +17 -0
  444. package/dist/scripts/runner.d.ts.map +1 -1
  445. package/dist/scripts/runner.js +130 -5
  446. package/dist/scripts/runner.js.map +1 -1
  447. package/dist/server/action-routes.d.ts.map +1 -1
  448. package/dist/server/action-routes.js +24 -2
  449. package/dist/server/action-routes.js.map +1 -1
  450. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  451. package/dist/server/agent-chat-plugin.js +26 -1
  452. package/dist/server/agent-chat-plugin.js.map +1 -1
  453. package/dist/server/agent-teams.d.ts.map +1 -1
  454. package/dist/server/agent-teams.js +10 -1
  455. package/dist/server/agent-teams.js.map +1 -1
  456. package/dist/server/auth.d.ts +22 -0
  457. package/dist/server/auth.d.ts.map +1 -1
  458. package/dist/server/auth.js +33 -7
  459. package/dist/server/auth.js.map +1 -1
  460. package/dist/server/embed-route.d.ts.map +1 -1
  461. package/dist/server/embed-route.js +6 -1
  462. package/dist/server/embed-route.js.map +1 -1
  463. package/dist/server/embed-session.d.ts +7 -0
  464. package/dist/server/embed-session.d.ts.map +1 -1
  465. package/dist/server/embed-session.js +46 -4
  466. package/dist/server/embed-session.js.map +1 -1
  467. package/dist/server/open-route.d.ts.map +1 -1
  468. package/dist/server/open-route.js +17 -7
  469. package/dist/server/open-route.js.map +1 -1
  470. package/dist/server/prompts/framework-core-compact.js +1 -1
  471. package/dist/server/prompts/framework-core-compact.js.map +1 -1
  472. package/dist/server/prompts/framework-core.d.ts.map +1 -1
  473. package/dist/server/prompts/framework-core.js +1 -0
  474. package/dist/server/prompts/framework-core.js.map +1 -1
  475. package/dist/server/realtime-token.d.ts +1 -1
  476. package/dist/server/request-context.d.ts +26 -0
  477. package/dist/server/request-context.d.ts.map +1 -1
  478. package/dist/server/request-context.js +18 -1
  479. package/dist/server/request-context.js.map +1 -1
  480. package/dist/server/transcribe-voice.d.ts +1 -1
  481. package/dist/shared/embed-auth.d.ts +1 -0
  482. package/dist/shared/embed-auth.d.ts.map +1 -1
  483. package/dist/shared/embed-auth.js +1 -0
  484. package/dist/shared/embed-auth.js.map +1 -1
  485. package/dist/shared/html-document.d.ts +12 -0
  486. package/dist/shared/html-document.d.ts.map +1 -0
  487. package/dist/shared/html-document.js +92 -0
  488. package/dist/shared/html-document.js.map +1 -0
  489. package/dist/shared/index.d.ts +1 -0
  490. package/dist/shared/index.d.ts.map +1 -1
  491. package/dist/shared/index.js +1 -0
  492. package/dist/shared/index.js.map +1 -1
  493. package/dist/sharing/access.d.ts +1 -0
  494. package/dist/sharing/access.d.ts.map +1 -1
  495. package/dist/sharing/access.js +8 -2
  496. package/dist/sharing/access.js.map +1 -1
  497. package/dist/sharing/registry.d.ts +3 -0
  498. package/dist/sharing/registry.d.ts.map +1 -1
  499. package/dist/sharing/registry.js.map +1 -1
  500. package/dist/workspace-files/actions.d.ts +28 -0
  501. package/dist/workspace-files/actions.d.ts.map +1 -0
  502. package/dist/workspace-files/actions.js +75 -0
  503. package/dist/workspace-files/actions.js.map +1 -0
  504. package/dist/workspace-files/tool.d.ts.map +1 -1
  505. package/dist/workspace-files/tool.js +4 -0
  506. package/dist/workspace-files/tool.js.map +1 -1
  507. package/docs/content/cloneable-saas.mdx +114 -0
  508. package/docs/content/creating-templates.mdx +28 -2
  509. package/docs/content/syncing-template-changes.mdx +7 -0
  510. package/docs/content/template-clips-developers.mdx +12 -5
  511. package/docs/content/template-dispatch-developers.mdx +1 -1
  512. package/docs/content/template-dispatch.mdx +1 -1
  513. package/package.json +2 -2
  514. package/src/action-ui.ts +1 -0
  515. package/src/action.ts +5 -1
  516. package/src/agent/engine/ai-sdk-engine.ts +15 -5
  517. package/src/agent/harness/runner.ts +5 -0
  518. package/src/agent/production-agent.ts +33 -0
  519. package/src/agent/run-loop-with-resume.ts +5 -0
  520. package/src/agent/run-manager.ts +126 -1
  521. package/src/agent/thread-data-builder.ts +47 -2
  522. package/src/agent/types.ts +2 -0
  523. package/src/chat-threads/store.ts +4 -5
  524. package/src/cli/create.ts +1139 -65
  525. package/src/cli/design-connect.ts +3 -7
  526. package/src/cli/index.ts +5 -3
  527. package/src/cli/skills-content/design-visual-edit-skill.ts +83 -47
  528. package/src/client/AssistantChat.tsx +27 -16
  529. package/src/client/agent-chat-adapter.ts +24 -0
  530. package/src/client/blocks/library/wireframe-kit.tsx +17 -2
  531. package/src/client/chat/index.ts +1 -0
  532. package/src/client/chat/message-components.tsx +104 -1
  533. package/src/client/chat/run-recovery.tsx +15 -3
  534. package/src/client/chat/widgets/DataTableWidget.tsx +10 -29
  535. package/src/client/chat/widgets/WorkspaceFileWidget.tsx +71 -0
  536. package/src/client/chat/widgets/builtin-tool-renderers.tsx +22 -0
  537. package/src/client/chat/widgets/workspace-file-result.ts +49 -0
  538. package/src/client/embed-auth.ts +2 -0
  539. package/src/client/org/InvitationBanner.tsx +14 -1
  540. package/src/client/org/OrgSwitcher.tsx +23 -0
  541. package/src/client/org/TeamPage.tsx +130 -0
  542. package/src/client/org/WorkspaceNotice.tsx +85 -0
  543. package/src/client/org/hooks.ts +14 -0
  544. package/src/client/org/index.ts +2 -0
  545. package/src/client/resources/McpIntegrationDialog.tsx +27 -40
  546. package/src/client/resources/ResourcesPanel.tsx +134 -51
  547. package/src/client/resources/mcp-integration-catalog.ts +7 -0
  548. package/src/client/resources/use-resources.ts +6 -0
  549. package/src/client/use-action.ts +3 -1
  550. package/src/client/widgets/index.ts +1 -0
  551. package/src/coding-tools/run-code.ts +2 -1
  552. package/src/db/client.ts +28 -4
  553. package/src/deploy/build.ts +31 -3
  554. package/src/eject/remote-mcp-presets.ts +1 -1
  555. package/src/index.browser.ts +1 -0
  556. package/src/index.ts +1 -0
  557. package/src/integrations/google-docs-poller.ts +3 -0
  558. package/src/integrations/webhook-handler.ts +28 -11
  559. package/src/jobs/scheduler.ts +4 -0
  560. package/src/localization/default-messages.ts +3 -2
  561. package/src/observability/traces.ts +48 -12
  562. package/src/org/handlers.ts +52 -1
  563. package/src/org/migrations.ts +4 -0
  564. package/src/org/plugin.ts +14 -0
  565. package/src/org/schema.ts +1 -0
  566. package/src/org/types.ts +8 -0
  567. package/src/org/workspace-url.ts +74 -0
  568. package/src/resources/handlers.ts +35 -5
  569. package/src/scripts/runner.ts +183 -5
  570. package/src/server/__snapshots__/agent-chat-plugin.surface.spec.ts.snap +2 -1
  571. package/src/server/action-routes.ts +32 -2
  572. package/src/server/agent-chat-plugin.ts +29 -0
  573. package/src/server/agent-teams.ts +10 -1
  574. package/src/server/auth.ts +33 -7
  575. package/src/server/embed-route.ts +9 -0
  576. package/src/server/embed-session.ts +62 -3
  577. package/src/server/open-route.ts +20 -6
  578. package/src/server/prompts/framework-core-compact.ts +1 -1
  579. package/src/server/prompts/framework-core.ts +1 -0
  580. package/src/server/request-context.ts +36 -1
  581. package/src/shared/embed-auth.ts +1 -0
  582. package/src/shared/html-document.ts +115 -0
  583. package/src/shared/index.ts +1 -0
  584. package/src/sharing/access.ts +8 -1
  585. package/src/sharing/registry.ts +11 -2
  586. package/src/workspace-files/actions.ts +100 -0
  587. package/src/workspace-files/tool.ts +4 -0
  588. package/corpus/templates/design/changelog/2026-07-28-interact-mode-can-preview-designs-in-responsive-device-sizes.md +0 -6
  589. 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
+ })();