@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
package/corpus/README.md CHANGED
@@ -28,6 +28,6 @@ rg -n "defineAction|useActionQuery" node_modules/@agent-native/core/corpus
28
28
 
29
29
  ## Generated Counts
30
30
 
31
- - core files: 1629
31
+ - core files: 1635
32
32
  - toolkit files: 160
33
- - template files: 6870
33
+ - template files: 6924
@@ -1,5 +1,77 @@
1
1
  # @agent-native/core
2
2
 
3
+ ## 0.130.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 279e855: Add a first-class CLI flow for installing community-maintained Agent Native templates from public GitHub repositories, including app selection from community workspace repositories.
8
+ - 279e855: Render compact data exports and durable workspace files as private downloads directly in agent chat.
9
+ - 279e855: Point org members at their own workspace when they land on a different deployment.
10
+
11
+ Orgs can now record a `workspaceUrl` (Settings → Team, owner/admin). Members who
12
+ open a shared hosted app from the template catalog see a notice offering to take
13
+ them to their team's workspace instead of an app that looks empty, and the org
14
+ switcher shows which host they are currently on. Opt-in per org — nothing
15
+ changes for orgs that don't set it, and it offers a choice rather than
16
+ redirecting.
17
+
18
+ ### Patch Changes
19
+
20
+ - 279e855: Let a browser explicitly sign out of the shared `AUTH_DISABLED` development account so preview users can choose a real account.
21
+ - 279e855: Add comment author editing to the Clips template corpus.
22
+ - 279e855: Retry transient SQLite locks while a fresh local app enables WAL during startup.
23
+ - 279e855: Prevent frontend action calls from failing with 405 errors when a mutating action declares PUT or DELETE and the caller uses the default mutation transport.
24
+ - 279e855: Prevent sketch wireframes from overflowing the browser call stack when layout measurements contain non-finite coordinates.
25
+ - 279e855: Fix the chat client telling users "the agent connection kept failing" when a
26
+ turn was actually stopped by `MAX_TOTAL_TRANSIENT_CONTINUATIONS`, the
27
+ whole-turn ceiling on client re-POSTs of `auto_continue`. That cap only ever
28
+ binds turns that were making real progress the whole time, so blaming a
29
+ connection failure named the wrong cause. It now reports its own message:
30
+ the turn hit the limit on how many times it could be automatically
31
+ continued, and suggests retrying as a single, narrower request.
32
+ - 279e855: Stop reporting `$ai_generation` token/cost figures as literal `0` when the
33
+ engine never returned a usage report — every run aborted for no-progress
34
+ before any provider response arrived was indistinguishable from a real
35
+ empty-input call, which made it impossible to size the input of failing
36
+ runs. `input_tokens`, `output_tokens`, `total_tokens`, `cache_read_tokens`,
37
+ `cache_write_tokens`, `cost_cents_x100`, `cost_usd`, and their `$ai_*`
38
+ equivalents are now omitted from the tracking event instead of coerced to
39
+ zero when the engine never reported usage. Also adds `time_to_first_token_ms`,
40
+ measuring elapsed time from run start to the first non-heartbeat engine
41
+ event, omitted (not zeroed) when no such event ever arrived.
42
+ - 279e855: Emit an `agent_run_terminal` analytics event for every terminal agent run
43
+ (completed, errored, aborted, or truncated at a continuation boundary),
44
+ reusing the same best-effort `track()` seam that already carries
45
+ `$ai_generation` into `analytics_events`. Run cutoffs — budget exhaustion,
46
+ loop limits, aborts, and the `truncated` continuation status — were
47
+ previously visible only in each app's operational `agent_runs` table and
48
+ absent from analytics entirely. The event carries `run_id`, `thread_id`,
49
+ `turn_id`, `status`, `terminal_reason`, `error_code`, `error_detail`,
50
+ `dispatch_mode`, `abort_reason`, and `duration_ms`; `model`/`engine`/
51
+ `attempt_count` are forwarded through the new optional `StartRunOptions`
52
+ fields, now populated by every built-in `startRun` caller (main chat,
53
+ agent teams, harness runs, integration webhooks, the Google Docs poller,
54
+ and recurring jobs) with the resolved model actually sent to the engine —
55
+ never the raw client-requested one. `userId` is left unset everywhere: no
56
+ caller in this codebase has an opaque (non-email) user id available at its
57
+ `startRun` call site. Emission fires only after the run's terminal status
58
+ and thread_data are durably persisted, and a missing or failing tracking
59
+ provider can never affect the run.
60
+ - 279e855: Keep a failed or stopped run visible on the turn it belongs to. The assistant
61
+ turn now carries a collapsed inline marker built from the persisted run-error
62
+ metadata (with the run duration when known), so the failure survives the next
63
+ prompt instead of only existing in the transient recovery banner. The banner
64
+ still owns the run it is showing, so the same failure is never announced twice.
65
+ - 279e855: Default MCP connections to personal OAuth, keep personal MCP setup available to organization members, hide unusable organization controls, and honor app preset filters in ejected UIs.
66
+ - 279e855: Prevent queued chat prompts from replaying after navigation or remounting the chat.
67
+ - 279e855: Recover AI SDK provider network failures after its internal retry wrapper preserves the final transport error.
68
+ - 279e855: Fix document bridge injection when page scripts contain closing-tag or dollar-sign literals.
69
+ - 279e855: Correct the Dispatch setup docs to match the current workspace picker.
70
+ - 279e855: Fix `/_agent-native/open` silently dropping a `Set-Cookie` staged during `getSession()` (e.g. `_session` query-param promotion) when it built a bare 302 `Response`, so an authenticated redirect could still leave the browser signed out. Export `redirectWithStagedCookies` so other routes can reuse the fix.
71
+ - 279e855: Add `isLoopbackRequest` to the request context and a `getRequestIsLoopback()` reader. The action-route handler captures the real socket peer (via `getRequestIP` without `x-forwarded-for`, so headers cannot spoof it) while the h3 event is still in scope, letting code below the HTTP layer distinguish a local-dev caller from a remote one. Used by Design to let `/visual-edit` work without a login on a localhost-backed design while keeping remote viewers read-only.
72
+ - Updated dependencies [279e855]
73
+ - @agent-native/toolkit@0.10.12
74
+
3
75
  ## 0.129.2
4
76
 
5
77
  ### Patch Changes
@@ -35,6 +35,120 @@ Don't want a domain app? Use [Chat](/docs/template-chat) when you want a basic a
35
35
 
36
36
  See the full catalog under [Apps](/apps), or jump straight to one — for example, [Dispatch](/docs/template-dispatch) is a great place to start if you want a workspace-style app.
37
37
 
38
+ ## Community templates {#community-templates}
39
+
40
+ The named templates in the CLI picker are **first-party**: Agent Native
41
+ maintains, tests, documents, and releases them with the framework. A
42
+ **community template** is maintained and versioned by its repository owner. It
43
+ can use the same framework surface, but a community listing is not an
44
+ endorsement or a promise of support from Agent Native.
45
+
46
+ Run `create`, choose **Community template**, and paste a plain public GitHub
47
+ repository URL:
48
+
49
+ ```bash
50
+ https://github.com/owner/repo
51
+ ```
52
+
53
+ If the repository root is a single Agent Native app, the CLI installs it
54
+ directly without another picker. If the repository is an Agent Native workspace,
55
+ the CLI discovers valid direct children of `apps/*`, excludes `dispatch`, and
56
+ asks which app to install.
57
+
58
+ A non-empty `agent-native.workspaceCore` marker makes the repository a
59
+ workspace even when its root package also depends on `@agent-native/core`; a
60
+ malformed marker is rejected.
61
+
62
+ Pass the same plain URL to `--template` for scripts, or use the shorter
63
+ `community:` form. Pin a branch, tag, or commit after `#` when you want a
64
+ reproducible starting point. Without a ref, the CLI tries `main`, then `master`:
65
+
66
+ ```bash
67
+ npx @agent-native/core@latest create my-app --template community:owner/repo#v1.2.0
68
+ npx @agent-native/core@latest create my-app --template https://github.com/owner/repo#v1.2.0
69
+ ```
70
+
71
+ For a workspace repository, make the source-app choice non-interactive with
72
+ `?app=<app-name>`. The selector comes before the optional `#ref`. Keep the
73
+ whole value quoted because shells such as zsh treat `?` as a glob:
74
+
75
+ ```bash
76
+ npx @agent-native/core@latest create my-app --template 'community:owner/repo?app=analytics#v1.2.0'
77
+ npx @agent-native/core@latest create my-app --template 'https://github.com/owner/repo?app=analytics#v1.2.0'
78
+ ```
79
+
80
+ Outside a workspace, `create` makes the selected source app standalone. To add
81
+ it to an existing workspace, pass the community repository explicitly because
82
+ the `add-app` picker lists first-party templates only. Omit `?app` to choose
83
+ from the source workspace interactively, or include it for a scriptable install:
84
+
85
+ ```bash
86
+ npx @agent-native/core@latest add-app my-app --template community:owner/repo#v1.2.0
87
+ npx @agent-native/core@latest add-app my-app --template 'community:owner/repo?app=analytics#v1.2.0'
88
+ ```
89
+
90
+ Only public GitHub repositories are accepted. Private repositories, non-GitHub
91
+ hosts, GitHub tree or subdirectory URLs, and nested app paths are not supported.
92
+ A root app must have a readable `package.json` that lists
93
+ `@agent-native/core` in `dependencies`, `devDependencies`, or
94
+ `peerDependencies`. In a workspace repository, each selectable source app must
95
+ meet the same requirement directly under `apps/<app-name>/`; `dispatch` is
96
+ never selectable.
97
+
98
+ Community workspace apps must be portable leaves, not arbitrary monorepo
99
+ slices:
100
+
101
+ - default `catalog:` dependency references are resolved from the source
102
+ repository's root `pnpm-workspace.yaml`; named catalog references are not
103
+ supported;
104
+ - `workspace:*` references to `@agent-native/core`, `@agent-native/dispatch`,
105
+ and `@agent-native/toolkit` are rewritten to published versions. Other
106
+ sibling workspace packages are not copied, so publish them and use a concrete
107
+ version instead;
108
+ - the source `workspaceCore` dependency is removed. Canonical inherited
109
+ workspace auth and agent-chat plugins are detached for a standalone install
110
+ or rebound to the destination workspace. Any other import of the source
111
+ `workspaceCore` package fails clearly; move that code into the app or publish
112
+ it as a concrete dependency.
113
+
114
+ Keep the rest of each complete app with its `package.json`: `agent-native.json`
115
+ when used, source, actions, agent instructions, and database setup. A
116
+ catalog-ready repository should also include:
117
+
118
+ - a license and a maintainer or support link;
119
+ - a README with setup steps, required environment variables, and the exact CLI
120
+ command;
121
+ - an `.env.example` containing placeholders only, with no secrets, customer
122
+ data, runtime databases, or generated build output;
123
+ - a working install, development command, typecheck, and tests appropriate to
124
+ the template.
125
+
126
+ The installer records the resolved `source` and `ref` under
127
+ `agent-native.communityTemplate` in the installed app's `package.json`. Apps
128
+ selected from a workspace repository also record the source app as
129
+ `agent-native.communityTemplate.app`. `agent-native template sync` remains
130
+ first-party-only; review a newer upstream ref and merge its changes yourself
131
+ when updating a community template.
132
+
133
+ See [Creating Templates](/docs/creating-templates) for the full app, action,
134
+ state, security, and publishing checklist.
135
+
136
+ > **Review community code before installing dependencies or running it.**
137
+ > Community templates are downloaded from third-party repositories; Agent
138
+ > Native does not sandbox, audit, or maintain them. The CLI downloads source
139
+ > only; it does not install dependencies or run template scripts. Inspect the
140
+ > source, license, dependencies, and package install scripts, and prefer a
141
+ > pinned trusted ref.
142
+
143
+ A hosted demo is optional. If you provide one, make it a public try-it link and
144
+ document any sign-in, seed-data, or provider requirements. The repository
145
+ remains the install source of truth, and the repository owner remains
146
+ responsible for both the template and demo.
147
+
148
+ Want to be listed? [Submit a community template](https://github.com/BuilderIO/agent-native/issues/new?template=community-template.yml)
149
+ with the repository URL, a one-sentence description, maintainer and license
150
+ details, the tested CLI command, and an optional hosted demo URL.
151
+
38
152
  ## What you get out of the box {#what-you-get}
39
153
 
40
154
  Every example app ships with the parts that normally take months to build:
@@ -501,12 +501,38 @@ Before sharing:
501
501
  4. Document required env vars and onboarding steps.
502
502
  5. Include examples or seed rows through additive migrations, not tracked runtime data files.
503
503
 
504
- Community templates can be created from a GitHub repo:
504
+ Community templates install directly from a public GitHub repository. Put the
505
+ Agent Native app at the repository root:
505
506
 
506
507
  ```bash
507
- npx @agent-native/core@latest create my-app --template github:user/repo
508
+ npx @agent-native/core@latest create my-app --template community:owner/repo
508
509
  ```
509
510
 
511
+ Add `#branch`, `#tag`, or `#commit` when you want people to install a specific
512
+ revision:
513
+
514
+ ```bash
515
+ npx @agent-native/core@latest create my-app --template community:owner/repo#v1.0.0
516
+ ```
517
+
518
+ The CLI downloads the source only. It does not install dependencies or run the
519
+ template's scripts. Community templates are third-party code, so review the
520
+ repository, license, dependencies, and install scripts before running
521
+ `pnpm install`.
522
+
523
+ To be listed in the community catalog, include:
524
+
525
+ - A focused, complete Agent Native app at the repository root.
526
+ - A public repository with a license and a README that covers setup, required
527
+ environment variables, and what the template does.
528
+ - A root `package.json` that depends on `@agent-native/core`.
529
+ - Passing typechecks and tests.
530
+ - Optionally, a hosted version people can try and a representative screenshot.
531
+
532
+ [Submit a community template](https://github.com/BuilderIO/agent-native/issues/new?template=community-template.yml)
533
+ when the repository is ready. Community listings stay separate from the
534
+ smaller first-party catalog and remain maintained by their authors.
535
+
510
536
  ## Contributing to the framework monorepo {#contributing}
511
537
 
512
538
  ### Test unpublished framework changes {#test-unpublished-framework-changes}
@@ -11,6 +11,13 @@ description: "agent-native template pulls later upstream first-party template ch
11
11
 
12
12
  `agent-native template` is the missing half. It re-fetches the template at a newer version, re-applies the exact transforms `create` applied, and merges the result into your app file by file.
13
13
 
14
+ Community templates are intentionally outside this sync flow. Their
15
+ `agent-native.communityTemplate` metadata records where the installed source
16
+ came from, but it is not first-party scaffold provenance and `agent-native
17
+ template sync` will not pull from that repository. Install a pinned community
18
+ ref when you need a stable starting point, then review and port later upstream
19
+ changes manually.
20
+
14
21
  ## Quick start {#quick-start}
15
22
 
16
23
  ```bash
@@ -64,7 +64,7 @@ For local development, run the web app with `pnpm dev` and point the desktop tra
64
64
 
65
65
  **Chrome extension.** The Agent-Native Clips Chrome extension listing is `https://chromewebstore.google.com/detail/baoipacpchggcdigagnajakiidcgcffn`. If you host your own Clips server, keep the Chrome extension option hidden until your Web Store listing is live. Set `VITE_CLIPS_CHROME_EXTENSION_ENABLED=1` after approval to show the extension beside desktop-app download prompts. Set `VITE_CLIPS_CHROME_EXTENSION_URL` only if you need to override the default listing URL. See [Capturing Everywhere](/docs/template-clips-capture-everywhere#browser-logs-with-the-chrome-extension) for what the extension captures.
66
66
 
67
- **Embedded bug reports.** Clips can be embedded into an existing product as a lightweight bug-report launcher. The embedded page collects issue metadata, opens the real recorder in a top-level browser window (browser media capture requires a top-level user gesture), and posts a completion message back to the host product when the recording is saved.
67
+ **Embedded bug reports.** Clips can be embedded into an existing product as a lightweight bug-report launcher. The embedded page collects issue metadata, opens the real recorder in a top-level browser window (browser media capture requires a top-level user gesture), and relays a completion message back to the host product when the recording is saved.
68
68
 
69
69
  Use `/bug-report` as the iframe URL. The page accepts either plain query parameters or the `bugReport*`-prefixed parameters that the recorder stores:
70
70
 
@@ -76,18 +76,25 @@ Use `/bug-report` as the iframe URL. The page accepts either plain query paramet
76
76
  ></iframe>
77
77
  ```
78
78
 
79
- Supported metadata fields are `projectId`, `title`, `description`, `severity` (`low`, `normal`, `high`, `urgent`), `sourceUrl`, `pageTitle`, `appVersion`, `environment`, `reporterEmail`, `reporterName`, `reporterId`, `metadata` (JSON object), and `returnUrl`. The recorder redirects to `/bug-report/done` after upload and sends this browser message to `window.opener` and the parent frame:
79
+ If the host product already has its own launcher UI, it can open `/record` directly with `bugReport=1`, `intent=bug-report`, `mode=screen`, `surface=browser`, and the same fields prefixed with `bugReport`, such as `bugReportProjectId` and `bugReportReturnUrl`.
80
+
81
+ Supported metadata fields are `projectId`, `title`, `description`, `severity` (`low`, `normal`, `high`, `urgent`), `sourceUrl`, `pageTitle`, `appVersion`, `environment`, `reporterEmail`, `reporterName`, `reporterId`, `metadata` (JSON object), and `returnUrl`. Keep query metadata small and avoid secrets, customer data, and other sensitive values. The recorder redirects to `/bug-report/done` after upload and sends this browser message to `window.opener`; the `/bug-report` iframe relays the same message to its parent:
80
82
 
81
83
  ```js
82
84
  window.addEventListener("message", (event) => {
85
+ if (event.origin !== "https://clips.example.com") return;
83
86
  if (event.data?.type !== "agent-native.clips.bug-report.submitted") return;
84
- console.log(event.data.recordingId, event.data.recordingUrl);
87
+ if (event.data.agentAccessStatus === "ready") {
88
+ console.log(event.data.agentContextUrl, event.data.agentAccessExpiresAt);
89
+ }
85
90
  });
86
91
  ```
87
92
 
88
- Bug-report recordings default to workspace visibility instead of public visibility. The saved `recording_bug_reports` sidecar includes the redacted host metadata, while the recording itself remains the canonical media/transcript resource. URLs have credentials, fragments, and query values removed before storage, and the browser-diagnostics pipeline still omits request/response bodies, headers, and cookies.
93
+ Always validate both `event.origin` and `event.source` in the host. The completion payload includes `recordingId`, `recordingUrl`, `embedUrl`, `agentShareUrl`, `agentContextUrl`, `agentAccessExpiresAt`, and an explicit `agentAccessStatus` of `ready` or `unavailable`. When access is ready, `agentContextUrl` is a temporary, scoped URL that lets an agent read recording metadata, timestamped transcript segments, recommended frames and frame URLs, and browser diagnostics without receiving the user's workspace session. Normal agent links expire after two hours; embedded bug-report completions use a seven-day scoped link so asynchronous support tickets can be triaged. Treat an unavailable or expired link as an access failure, not an empty recording. `embedUrl` remains subject to the recording's normal viewer access.
94
+
95
+ Bug-report recordings default to workspace visibility instead of public visibility. The saved `recording_bug_reports` sidecar includes the redacted host metadata, while the recording itself remains the canonical media/transcript resource. URLs have credentials, fragments, and query values removed before storage, and the browser-diagnostics pipeline still omits request/response bodies, headers, and cookies. A popup recording only sees diagnostics emitted inside the Clips window. Use the Chrome extension or attach diagnostics from the host product separately when the agent needs console and network context from the source tab.
89
96
 
90
- This first version assumes the reporter can sign in to the Clips workspace that owns the recording. A fully anonymous customer intake should add a signed intake token that can create, upload, and finalize a recording without granting broad recording access; do not expose the existing owner-scoped upload endpoints directly to anonymous users.
97
+ This pilot requires the reporter to already have an active session in the Clips workspace that owns the recording. The current cross-origin popup cannot preserve its completion channel through a first-time sign-in redirect, so users should sign in to Clips in a separate tab before launching it. A fully anonymous customer-support intake should add a signed intake token that can create, upload, and finalize a recording without granting broad recording access; do not expose the existing owner-scoped upload endpoints directly to anonymous users.
91
98
 
92
99
  ## Data model
93
100
 
@@ -56,7 +56,7 @@ Server plugins register each connected channel's webhook (Slack, Microsoft Teams
56
56
 
57
57
  ```bash
58
58
  npx @agent-native/core@latest create my-platform
59
- # pick "Dispatch" in the multi-select picker, plus whichever domain apps you want
59
+ # Dispatch is included automatically. Deselect Chat for Dispatch only, or select domain apps to scaffold alongside it
60
60
  ```
61
61
 
62
62
  If you prefer to name the template directly instead of using the picker:
@@ -121,7 +121,7 @@ Live demo: [dispatch.agent-native.com](https://dispatch.agent-native.com).
121
121
 
122
122
  ```bash
123
123
  npx @agent-native/core@latest create my-platform
124
- # pick "Dispatch" in the multi-select picker, plus whichever domain apps you want
124
+ # Dispatch is included automatically. Deselect Chat for Dispatch only, or select domain apps to scaffold alongside it
125
125
  ```
126
126
 
127
127
  Dispatch is almost always scaffolded into a workspace alongside the apps it coordinates — a control plane with nothing to coordinate is just an empty inbox. See [Getting started](/docs/getting-started) for installing dependencies, running the dev server, and creating your first account.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/core",
3
- "version": "0.129.2",
3
+ "version": "0.130.0",
4
4
  "description": "Framework for agent-native application development — where AI agents and UI share SQL state, actions, and context",
5
5
  "homepage": "https://github.com/BuilderIO/agent-native#readme",
6
6
  "bugs": {
@@ -3,6 +3,7 @@ export const ACTION_CHAT_UI_DATA_CHART_RENDERER = "core.data-chart";
3
3
  export const ACTION_CHAT_UI_DATA_INSIGHTS_RENDERER = "core.data-insights";
4
4
  export const ACTION_CHAT_UI_DATA_WIDGET_RENDERER = "core.data-widget";
5
5
  export const ACTION_CHAT_UI_INLINE_EXTENSION_RENDERER = "core.inline-extension";
6
+ export const ACTION_CHAT_UI_WORKSPACE_FILE_RENDERER = "core.workspace-file";
6
7
 
7
8
  export interface ActionChatUIConfig {
8
9
  /**
@@ -176,7 +176,11 @@ export function isAgentActionStopError(
176
176
 
177
177
  /** HTTP exposure config for an action. */
178
178
  export interface ActionHttpConfig {
179
- /** HTTP method. Default: "POST". Use "GET" for read-only actions. */
179
+ /**
180
+ * Method required from direct HTTP callers. Default: "POST". Use "GET" for
181
+ * read-only actions. Browser action clients use the framework's frontend
182
+ * mutation transport and do not need to repeat this method.
183
+ */
180
184
  method?: "GET" | "POST" | "PUT" | "DELETE";
181
185
  /** Override route path under /_agent-native/actions/. Default: action filename. */
182
186
  path?: string;
@@ -498,22 +498,32 @@ class AISDKEngine implements AgentEngine {
498
498
  yield bufferedStop ?? { type: "stop", reason: "end_turn" };
499
499
  } catch (err: any) {
500
500
  const timedOut = firstEventAbort.didTimeout();
501
+ // AI SDK wraps exhausted retries in RetryError and keeps the final
502
+ // APICallError on `lastError`. Read classification fields from that
503
+ // provider error so the retry wrapper does not erase transport status.
504
+ const providerError =
505
+ err?.lastError instanceof Error ? err.lastError : err;
501
506
  // Surface structured fields from AI SDK's APICallError so
502
507
  // isRetryableError can check statusCode/providerRetryable directly
503
508
  // rather than keyword-matching the message string.
504
509
  const statusCode: number | undefined =
505
- typeof err?.statusCode === "number" ? err.statusCode : undefined;
506
- const rawMessage: string = err?.message ?? String(err);
510
+ typeof providerError?.statusCode === "number"
511
+ ? providerError.statusCode
512
+ : undefined;
513
+ const rawMessage: string =
514
+ providerError?.message ?? String(providerError);
507
515
  // Classify on the bare message — the recorded `errorMessage` carries the
508
516
  // cause chain, which is where the real transport failure lives.
509
517
  const errorMessage = describeErrorWithCauses(err);
518
+ const normalizedRawMessage = rawMessage.trim().toLowerCase();
510
519
  const isConnectionError =
511
520
  !timedOut &&
512
521
  statusCode === undefined &&
513
- rawMessage.trim().toLowerCase() === "connection error.";
522
+ (normalizedRawMessage === "connection error." ||
523
+ normalizedRawMessage.startsWith("cannot connect to api:"));
514
524
  const providerRetryable: boolean | undefined =
515
- typeof err?.isRetryable === "boolean"
516
- ? err.isRetryable
525
+ typeof providerError?.isRetryable === "boolean"
526
+ ? providerError.isRetryable
517
527
  : isConnectionError || timedOut
518
528
  ? true
519
529
  : undefined;
@@ -157,6 +157,11 @@ export function startAgentHarnessRun(
157
157
  {
158
158
  ...(opts.runOptions ?? {}),
159
159
  turnId: opts.turnId ?? opts.runOptions?.turnId,
160
+ // A harness adapter (e.g. Claude Code, Codex) owns its own model
161
+ // selection internally and does not expose it here, so `model` is
162
+ // left for the caller to supply via `runOptions` if it knows one.
163
+ // `ownerEmail` is PII and is never passed as `userId`.
164
+ engineName: opts.runOptions?.engineName ?? opts.adapter.name,
160
165
  },
161
166
  );
162
167
  }
@@ -958,6 +958,7 @@ export interface ProductionAgentOptions {
958
958
  threadId: string | undefined;
959
959
  message: string;
960
960
  attachments?: AgentChatAttachment[];
961
+ queuedMessageId?: string;
961
962
  }) => void | Promise<void>;
962
963
  /**
963
964
  * Optional per-template request normalizer. Runs after owner resolution and
@@ -2021,6 +2022,21 @@ export interface AgentLoopUsage {
2021
2022
  cacheReadTokens: number;
2022
2023
  cacheWriteTokens: number;
2023
2024
  model: string;
2025
+ /**
2026
+ * True once the engine reported at least one real `usage` event for this
2027
+ * run. The token fields above start at 0 and are only ever incremented —
2028
+ * when this is not true, those zeros are placeholders for "never
2029
+ * reported", not a measured empty usage, and callers must not treat them
2030
+ * as real counts.
2031
+ */
2032
+ usageReported?: boolean;
2033
+ /**
2034
+ * Wall-clock epoch ms of the first non-heartbeat engine-stream event seen
2035
+ * across this run (all retries/continuations). Undefined means no event
2036
+ * ever arrived — e.g. the run was killed for silence before the model
2037
+ * produced anything.
2038
+ */
2039
+ firstEngineEventAtMs?: number;
2024
2040
  }
2025
2041
 
2026
2042
  export interface AgentLoopToolCallSummary {
@@ -4230,6 +4246,7 @@ export async function runAgentLoop(opts: {
4230
4246
  if (event.type !== "gateway-heartbeat") {
4231
4247
  hasReceivedFirstEngineEvent = true;
4232
4248
  lastModelStreamProgressAt = Date.now();
4249
+ usage.firstEngineEventAtMs ??= lastModelStreamProgressAt;
4233
4250
  }
4234
4251
  // In-loop processor seam (stream hook). Each chunk is offered to every
4235
4252
  // processor's `processOutputStream` before the loop handles it. A
@@ -4343,6 +4360,7 @@ export async function runAgentLoop(opts: {
4343
4360
  usage.outputTokens += eventUsage.outputTokens;
4344
4361
  usage.cacheReadTokens += eventUsage.cacheReadTokens;
4345
4362
  usage.cacheWriteTokens += eventUsage.cacheWriteTokens;
4363
+ usage.usageReported = true;
4346
4364
  opts.onUsage?.(eventUsage);
4347
4365
  } else if (event.type === "stop") {
4348
4366
  terminalStopReason = event.reason;
@@ -5959,6 +5977,10 @@ export async function runAgentLoopWithMainChatInternalContinuations(
5959
5977
  usage.cacheReadTokens += next.cacheReadTokens;
5960
5978
  usage.cacheWriteTokens += next.cacheWriteTokens;
5961
5979
  usage.model = next.model;
5980
+ if (next.usageReported) usage.usageReported = true;
5981
+ // Keep the earliest attempt's first event — a later continuation
5982
+ // attempt starting fresh must not overwrite genuine first-token timing.
5983
+ usage.firstEngineEventAtMs ??= next.firstEngineEventAtMs;
5962
5984
  };
5963
5985
 
5964
5986
  const budgetStartedAt = opts.budgetStartedAt ?? Date.now();
@@ -7113,6 +7135,7 @@ export function createProductionAgentHandler(
7113
7135
  threadId,
7114
7136
  attachments,
7115
7137
  displayMessage,
7138
+ queuedMessageId,
7116
7139
  internalContinuation,
7117
7140
  turnId: requestTurnId,
7118
7141
  model: requestModel,
@@ -8054,6 +8077,9 @@ export function createProductionAgentHandler(
8054
8077
  threadId,
8055
8078
  message: messageToPersist,
8056
8079
  attachments: requestAttachments,
8080
+ ...(typeof queuedMessageId === "string" && queuedMessageId.trim()
8081
+ ? { queuedMessageId: queuedMessageId.trim() }
8082
+ : {}),
8057
8083
  });
8058
8084
  }
8059
8085
 
@@ -9024,6 +9050,13 @@ export function createProductionAgentHandler(
9024
9050
  dispatchMode: foregroundSelfChainEligible
9025
9051
  ? "foreground-self-chain"
9026
9052
  : "foreground",
9053
+ // Resolved AFTER stored-model/experiment overrides — the same value
9054
+ // actually sent to the engine, not the raw client-requested model.
9055
+ // No userId here: `ownerEmail` is the only identity known at this
9056
+ // scope and is PII (email), which the terminal event must not carry.
9057
+ model: effectiveModel,
9058
+ engineName: engine.name,
9059
+ attemptCount: backgroundContinuationCount,
9027
9060
  },
9028
9061
  );
9029
9062
 
@@ -239,6 +239,11 @@ export async function runAgentLoopDirectWithSoftTimeout(
239
239
  usage.cacheReadTokens += next.cacheReadTokens;
240
240
  usage.cacheWriteTokens += next.cacheWriteTokens;
241
241
  usage.model = next.model;
242
+ // Without these, a retry that never got a usage report merges its zeros
243
+ // over an earlier attempt's real numbers, and telemetry reports an
244
+ // unmeasured run as a measured empty one.
245
+ if (next.usageReported) usage.usageReported = true;
246
+ usage.firstEngineEventAtMs ??= next.firstEngineEventAtMs;
242
247
  };
243
248
 
244
249
  const localTurnEvents: AgentChatEvent[] = [];