@agent-native/core 0.83.0 → 0.84.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 (424) hide show
  1. package/README.md +2 -2
  2. package/corpus/README.md +1 -1
  3. package/corpus/core/CHANGELOG.md +28 -0
  4. package/corpus/core/README.md +2 -2
  5. package/corpus/core/docs/content/cloneable-saas.mdx +2 -2
  6. package/corpus/core/docs/content/faq.mdx +1 -1
  7. package/corpus/core/docs/content/locales/ar-SA/cloneable-saas.mdx +2 -2
  8. package/corpus/core/docs/content/locales/ar-SA/faq.mdx +1 -1
  9. package/corpus/core/docs/content/locales/ar-SA/template-chat.mdx +1 -1
  10. package/corpus/core/docs/content/locales/de-DE/cloneable-saas.mdx +2 -2
  11. package/corpus/core/docs/content/locales/de-DE/faq.mdx +1 -1
  12. package/corpus/core/docs/content/locales/de-DE/template-chat.mdx +1 -1
  13. package/corpus/core/docs/content/locales/es-ES/cloneable-saas.mdx +2 -2
  14. package/corpus/core/docs/content/locales/es-ES/faq.mdx +1 -1
  15. package/corpus/core/docs/content/locales/es-ES/template-chat.mdx +1 -1
  16. package/corpus/core/docs/content/locales/fr-FR/cloneable-saas.mdx +2 -2
  17. package/corpus/core/docs/content/locales/fr-FR/faq.mdx +1 -1
  18. package/corpus/core/docs/content/locales/fr-FR/template-chat.mdx +1 -1
  19. package/corpus/core/docs/content/locales/hi-IN/cloneable-saas.mdx +2 -2
  20. package/corpus/core/docs/content/locales/hi-IN/faq.mdx +1 -1
  21. package/corpus/core/docs/content/locales/hi-IN/template-chat.mdx +1 -1
  22. package/corpus/core/docs/content/locales/ja-JP/cloneable-saas.mdx +2 -2
  23. package/corpus/core/docs/content/locales/ja-JP/faq.mdx +1 -1
  24. package/corpus/core/docs/content/locales/ja-JP/template-chat.mdx +1 -1
  25. package/corpus/core/docs/content/locales/ko-KR/cloneable-saas.mdx +2 -2
  26. package/corpus/core/docs/content/locales/ko-KR/faq.mdx +1 -1
  27. package/corpus/core/docs/content/locales/ko-KR/template-chat.mdx +1 -1
  28. package/corpus/core/docs/content/locales/pt-BR/cloneable-saas.mdx +2 -2
  29. package/corpus/core/docs/content/locales/pt-BR/faq.mdx +1 -1
  30. package/corpus/core/docs/content/locales/pt-BR/template-chat.mdx +1 -1
  31. package/corpus/core/docs/content/locales/zh-CN/cloneable-saas.mdx +2 -2
  32. package/corpus/core/docs/content/locales/zh-CN/faq.mdx +1 -1
  33. package/corpus/core/docs/content/locales/zh-CN/template-chat.mdx +1 -1
  34. package/corpus/core/docs/content/locales/zh-TW/cloneable-saas.mdx +2 -2
  35. package/corpus/core/docs/content/locales/zh-TW/faq.mdx +1 -1
  36. package/corpus/core/docs/content/locales/zh-TW/template-chat.mdx +1 -1
  37. package/corpus/core/docs/content/template-chat.mdx +1 -1
  38. package/corpus/core/package.json +1 -1
  39. package/corpus/core/src/agent/engine/builtin.ts +1 -1
  40. package/corpus/core/src/agent/engine/output-tokens.ts +1 -1
  41. package/corpus/core/src/agent/harness/acp-adapter.ts +28 -4
  42. package/corpus/core/src/agent/harness/ai-sdk-adapter.ts +3 -0
  43. package/corpus/core/src/agent/harness/translate.ts +3 -0
  44. package/corpus/core/src/agent/harness/types.ts +1 -0
  45. package/corpus/core/src/agent/model-config.ts +34 -13
  46. package/corpus/core/src/agent/production-agent.ts +87 -10
  47. package/corpus/core/src/agent/thread-data-builder.ts +29 -4
  48. package/corpus/core/src/agent/tool-call-journal.ts +109 -48
  49. package/corpus/core/src/agent/types.ts +6 -1
  50. package/corpus/core/src/cli/design-connect.ts +106 -0
  51. package/corpus/core/src/cli/gateway-helpers.ts +17 -0
  52. package/corpus/core/src/cli/recap.ts +0 -2
  53. package/corpus/core/src/cli/skills.ts +54 -16
  54. package/corpus/core/src/cli/workspace-dev.ts +29 -5
  55. package/corpus/core/src/client/AssistantChat.tsx +89 -42
  56. package/corpus/core/src/client/DefaultSpinner.tsx +8 -1
  57. package/corpus/core/src/client/chat/message-components.tsx +49 -1
  58. package/corpus/core/src/client/chat/repo-helpers.ts +71 -0
  59. package/corpus/core/src/client/chat/run-recovery.tsx +15 -5
  60. package/corpus/core/src/client/components/ApiKeySettings.tsx +8 -8
  61. package/corpus/core/src/client/components/CodeRequiredDialog.tsx +26 -15
  62. package/corpus/core/src/client/components/MissingKeyCard.tsx +13 -6
  63. package/corpus/core/src/client/composer/TiptapComposer.tsx +4 -3
  64. package/corpus/core/src/client/extensions/ExtensionsSidebarSection.tsx +0 -1
  65. package/corpus/core/src/client/guided-questions.tsx +21 -27
  66. package/corpus/core/src/client/integrations/IntegrationCard.tsx +1 -1
  67. package/corpus/core/src/client/integrations/IntegrationsPanel.tsx +1 -1
  68. package/corpus/core/src/client/onboarding/OnboardingBanner.tsx +2 -2
  69. package/corpus/core/src/client/onboarding/OnboardingPanel.tsx +23 -19
  70. package/corpus/core/src/client/resources/ResourceEditor.tsx +18 -10
  71. package/corpus/core/src/client/resources/ResourcesPanel.tsx +5 -1
  72. package/corpus/core/src/client/settings/SettingsPanel.tsx +8 -3
  73. package/corpus/core/src/client/settings/useBuilderStatus.ts +8 -41
  74. package/corpus/core/src/client/useProductionAgent.ts +6 -2
  75. package/corpus/core/src/deploy/build.ts +1 -1
  76. package/corpus/core/src/observability/traces.ts +3 -3
  77. package/corpus/core/src/onboarding/default-steps.ts +1 -1
  78. package/corpus/core/src/scripts/agent-engines/manage-agent-engine.ts +1 -1
  79. package/corpus/core/src/scripts/agent-engines/set-agent-engine.ts +1 -1
  80. package/corpus/core/src/server/agent-chat-plugin.ts +177 -81
  81. package/corpus/core/src/server/core-routes-plugin.ts +7 -1
  82. package/corpus/core/src/server/open-route.ts +59 -40
  83. package/corpus/core/src/shared/reasoning-effort.ts +2 -0
  84. package/corpus/core/src/sharing/access.ts +22 -2
  85. package/corpus/core/src/sharing/registry.ts +18 -0
  86. package/corpus/core/src/styles/agent-native.css +104 -20
  87. package/corpus/core/src/styles/rich-markdown-editor.css +11 -10
  88. package/corpus/templates/analytics/app/components/dashboard/CumulativeNetChart.tsx +10 -10
  89. package/corpus/templates/analytics/app/components/dashboard/RevenueChart.tsx +10 -10
  90. package/corpus/templates/analytics/app/components/dashboard/RevenueComparisonChart.tsx +6 -5
  91. package/corpus/templates/analytics/app/components/dashboard/TimeSeriesChart.tsx +9 -9
  92. package/corpus/templates/analytics/app/global.css +4 -0
  93. package/corpus/templates/analytics/app/lib/chart-theme.ts +13 -0
  94. package/corpus/templates/analytics/app/pages/adhoc/_shared/KpiChart.tsx +22 -24
  95. package/corpus/templates/analytics/changelog/2026-06-30-dashboard-charts-now-use-theme-aware-tooltip-and-grid-colors.md +6 -0
  96. package/corpus/templates/analytics/changelog/2026-06-30-fixed-ask-composer-spacing-so-the-chat-field-has-a-comfortab.md +6 -0
  97. package/corpus/templates/calendar/AGENTS.md +4 -0
  98. package/corpus/templates/calendar/actions/connect-google-calendar.ts +80 -0
  99. package/corpus/templates/calendar/changelog/2026-06-30-calendar-now-gives-the-agent-a-safe-google-connection-link-i.md +6 -0
  100. package/corpus/templates/calendar/server/plugins/agent-chat.ts +4 -0
  101. package/corpus/templates/content/app/components/editor/BubbleToolbar.tsx +5 -5
  102. package/corpus/templates/content/app/global.css +6 -5
  103. package/corpus/templates/content/changelog/2026-06-30-editor-floating-toolbars-now-use-theme-aware-colors-in-light.md +6 -0
  104. package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +6 -1
  105. package/corpus/templates/design/actions/add-localhost-screens.ts +63 -8
  106. package/corpus/templates/design/actions/apply-motion-edit.ts +12 -46
  107. package/corpus/templates/design/actions/list-design-native-assets.ts +2 -1
  108. package/corpus/templates/design/actions/migrate-board-objects-to-file.ts +49 -1
  109. package/corpus/templates/design/actions/navigate.ts +3 -12
  110. package/corpus/templates/design/actions/open-visual-edit.ts +341 -0
  111. package/corpus/templates/design/actions/view-screen.ts +1 -1
  112. package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +1 -1
  113. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +345 -14
  114. package/corpus/templates/design/app/components/design/DesignEditorSkeleton.tsx +71 -91
  115. package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +25 -27
  116. package/corpus/templates/design/app/components/design/DeviceFrame.tsx +1 -1
  117. package/corpus/templates/design/app/components/design/DrawOverlay.tsx +2 -2
  118. package/corpus/templates/design/app/components/design/EditPanel.tsx +1111 -570
  119. package/corpus/templates/design/app/components/design/LayersPanel.tsx +162 -32
  120. package/corpus/templates/design/app/components/design/MotionDock.tsx +268 -240
  121. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +1038 -150
  122. package/corpus/templates/design/app/components/design/QuestionFlow.tsx +1 -1
  123. package/corpus/templates/design/app/components/design/ReviewPanel.tsx +81 -102
  124. package/corpus/templates/design/app/components/design/StatesPanel.tsx +6 -6
  125. package/corpus/templates/design/app/components/design/TokensPanel.tsx +11 -11
  126. package/corpus/templates/design/app/components/design/TweaksPanel.tsx +9 -7
  127. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +1129 -155
  128. package/corpus/templates/design/app/components/design/bridge/hit-test.bridge.ts +130 -37
  129. package/corpus/templates/design/app/components/design/canvas-primitive-style.ts +24 -11
  130. package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +184 -162
  131. package/corpus/templates/design/app/components/design/inspector/ConstraintsWidget.tsx +137 -79
  132. package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +13 -13
  133. package/corpus/templates/design/app/components/design/inspector/ExportSettingsPanel.tsx +8 -8
  134. package/corpus/templates/design/app/components/design/inspector/GradientEditor.tsx +2 -2
  135. package/corpus/templates/design/app/components/design/inspector/ImageFillControls.tsx +4 -4
  136. package/corpus/templates/design/app/components/design/inspector/InspectorAiActions.tsx +3 -3
  137. package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +13 -7
  138. package/corpus/templates/design/app/components/design/inspector/ShaderControls.tsx +14 -11
  139. package/corpus/templates/design/app/components/design/inspector/ShaderFillsPanel.tsx +4 -4
  140. package/corpus/templates/design/app/components/design/inspector/index.ts +2 -0
  141. package/corpus/templates/design/app/components/design/types.ts +19 -0
  142. package/corpus/templates/design/app/components/editor/PromptDialog.tsx +61 -78
  143. package/corpus/templates/design/app/components/layout/Header.tsx +0 -1
  144. package/corpus/templates/design/app/components/layout/Layout.tsx +3 -2
  145. package/corpus/templates/design/app/components/layout/Sidebar.tsx +0 -2
  146. package/corpus/templates/design/app/components/visual-editor/CanvasCommentPins.tsx +5 -4
  147. package/corpus/templates/design/app/components/visual-editor/DrawOverlay.tsx +1 -1
  148. package/corpus/templates/design/app/components/visual-editor/SaveStatusIndicator.tsx +2 -2
  149. package/corpus/templates/design/app/global.css +56 -0
  150. package/corpus/templates/design/app/hooks/use-agent-generating.ts +4 -5
  151. package/corpus/templates/design/app/hooks/use-navigation-state.ts +6 -7
  152. package/corpus/templates/design/app/hooks/use-question-flow.ts +3 -2
  153. package/corpus/templates/design/app/hooks/useAgentEditRequest.ts +6 -4
  154. package/corpus/templates/design/app/i18n/zh-TW.ts +5 -14
  155. package/corpus/templates/design/app/i18n-data.ts +63 -188
  156. package/corpus/templates/design/app/lib/agent-chat.ts +13 -0
  157. package/corpus/templates/design/app/pages/DesignEditor.tsx +1428 -384
  158. package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +9 -5
  159. package/corpus/templates/design/app/pages/DesignSystems.tsx +2 -2
  160. package/corpus/templates/design/app/pages/Index.tsx +49 -26
  161. package/corpus/templates/design/app/pages/NotFound.tsx +25 -8
  162. package/corpus/templates/design/app/pages/VisualEdit.tsx +17 -5
  163. package/corpus/templates/design/app/routes/examples.tsx +1 -7
  164. package/corpus/templates/design/app/routes/templates.tsx +7 -4
  165. package/corpus/templates/design/changelog/2026-06-30-board-shapes-and-auto-layout-controls-are-clearer.md +6 -0
  166. package/corpus/templates/design/changelog/2026-06-30-component-selections-now-use-purple-component-chrome-and-sho.md +6 -0
  167. package/corpus/templates/design/changelog/2026-06-30-constraints-now-stay-tucked-into-a-compact-inspector-preview.md +6 -0
  168. package/corpus/templates/design/changelog/2026-06-30-creating-a-component-now-opens-in-a-compact-inspector-popove.md +6 -0
  169. package/corpus/templates/design/changelog/2026-06-30-design-cards-no-longer-show-legacy-project-type-badges.md +6 -0
  170. package/corpus/templates/design/changelog/2026-06-30-design-chat-now-keeps-new-turns-in-the-visible-design-agent-.md +6 -0
  171. package/corpus/templates/design/changelog/2026-06-30-design-editor-panels-now-keep-their-compact-text-sizing-cons.md +6 -0
  172. package/corpus/templates/design/changelog/2026-06-30-design-no-longer-shows-the-connected-local-code-warning-bann.md +6 -0
  173. package/corpus/templates/design/changelog/2026-06-30-design-now-opens-to-the-files-panel-unless-a-generation-is-a.md +6 -0
  174. package/corpus/templates/design/changelog/2026-06-30-design-opens-with-a-cleaner-empty-canvas-and-loading-preview.md +6 -0
  175. package/corpus/templates/design/changelog/2026-06-30-design-tools-use-simpler-less-decorative-icons.md +6 -0
  176. package/corpus/templates/design/changelog/2026-06-30-dragging-absolute-elements-no-longer-shows-coordinate-labels.md +6 -0
  177. package/corpus/templates/design/changelog/2026-06-30-fixed-all-screens-opening-too-zoomed-in-by-default.md +6 -0
  178. package/corpus/templates/design/changelog/2026-06-30-fixed-the-public-design-assets-sidebar-so-native-components-.md +6 -0
  179. package/corpus/templates/design/changelog/2026-06-30-fixed-the-screen-overview-board-so-empty-board-space-no-long.md +6 -0
  180. package/corpus/templates/design/changelog/2026-06-30-full-view-screens-can-now-scroll-while-remaining-editable.md +6 -0
  181. package/corpus/templates/design/changelog/2026-06-30-inspector-element-headers-show-the-selected-html-tag-and-the.md +6 -0
  182. package/corpus/templates/design/changelog/2026-06-30-inspector-inputs-stay-compact-across-desktop-breakpoints.md +6 -0
  183. package/corpus/templates/design/changelog/2026-06-30-layers-can-be-multi-selected-from-the-canvas-and-edited-toge.md +6 -0
  184. package/corpus/templates/design/changelog/2026-06-30-local-visual-edit-links-can-edit-localhost-frames-without-si.md +6 -0
  185. package/corpus/templates/design/changelog/2026-06-30-localhost-visual-edit-frames-can-now-be-selected-and-edited.md +6 -0
  186. package/corpus/templates/design/changelog/2026-06-30-marquee-selection-now-works-inside-screens-multi-selected-la.md +6 -0
  187. package/corpus/templates/design/changelog/2026-06-30-motion-is-now-available-from-the-persistent-left-rail-and-th.md +6 -0
  188. package/corpus/templates/design/changelog/2026-06-30-motion-timeline-collapse-and-reopen-animations-feel-smoother.md +6 -0
  189. package/corpus/templates/design/changelog/2026-06-30-multi-select-outlines-now-stay-consistent-across-all-screens.md +6 -0
  190. package/corpus/templates/design/changelog/2026-06-30-new-board-shapes-now-start-with-neutral-gray-styling.md +6 -0
  191. package/corpus/templates/design/changelog/2026-06-30-new-designs-open-into-a-steadier-loading-state-before-the-ed.md +6 -0
  192. package/corpus/templates/design/changelog/2026-06-30-new-designs-show-a-loading-state-during-handoff-and-keep-edi.md +6 -0
  193. package/corpus/templates/design/changelog/2026-06-30-public-visual-edit-design-links-now-open-directly-instead-of.md +6 -0
  194. package/corpus/templates/design/changelog/2026-06-30-removed-the-confusing-states-section-from-the-design-editor-.md +6 -0
  195. package/corpus/templates/design/changelog/2026-06-30-removed-the-templates-gallery-from-design-navigation.md +6 -0
  196. package/corpus/templates/design/changelog/2026-06-30-share-stays-visible-as-soon-as-editable-designs-load.md +6 -0
  197. package/corpus/templates/design/changelog/2026-06-30-signed-out-save-and-share-controls-use-simpler-labels-and-op.md +6 -0
  198. package/corpus/templates/design/changelog/2026-06-30-text-added-on-the-canvas-now-focuses-cleanly-with-the-right-.md +6 -0
  199. package/corpus/templates/design/changelog/2026-06-30-the-design-editor-loading-skeleton-is-simpler-and-its-bottom.md +6 -0
  200. package/corpus/templates/design/changelog/2026-06-30-the-design-editor-loading-skeleton-now-follows-the-current-t.md +6 -0
  201. package/corpus/templates/design/changelog/2026-06-30-the-design-inspector-no-longer-shows-child-layout-controls-o.md +6 -0
  202. package/corpus/templates/design/changelog/2026-06-30-the-design-inspector-no-longer-shows-the-ask-ai-section-abov.md +6 -0
  203. package/corpus/templates/design/changelog/2026-06-30-the-design-review-panel-no-longer-shows-a-separate-inline-au.md +6 -0
  204. package/corpus/templates/design/changelog/2026-06-30-the-empty-designs-page-now-focuses-on-a-single-primary-new-d.md +6 -0
  205. package/corpus/templates/design/changelog/2026-06-30-the-layers-panel-header-stays-as-layers-while-multiple-items.md +6 -0
  206. package/corpus/templates/design/changelog/2026-06-30-the-missing-design-screen-now-uses-a-neutral-back-button.md +6 -0
  207. package/corpus/templates/design/changelog/2026-06-30-the-motion-timeline-now-closes-without-squeezing-the-canvas-.md +6 -0
  208. package/corpus/templates/design/changelog/2026-06-30-the-new-design-connect-ai-setup-now-lines-up-with-the-compos.md +6 -0
  209. package/corpus/templates/design/changelog/2026-06-30-the-screen-overview-board-now-blends-into-the-canvas-and-new.md +6 -0
  210. package/corpus/templates/design/changelog/2026-06-30-top-level-canvas-drops-now-show-screen-guides.md +6 -0
  211. package/corpus/templates/design/changelog/2026-06-30-top-level-canvas-layers-now-keep-a-transparent-backdrop-and-.md +6 -0
  212. package/corpus/templates/design/changelog/2026-06-30-top-level-canvas-layers-now-select-reliably-from-all-screens.md +6 -0
  213. package/corpus/templates/design/changelog/2026-06-30-visual-edit-can-open-and-refresh-localhost-screens-in-one-au.md +6 -0
  214. package/corpus/templates/design/e2e/helpers.ts +15 -4
  215. package/corpus/templates/design/server/db/index.ts +52 -0
  216. package/corpus/templates/design/server/plugins/agent-chat.ts +5 -0
  217. package/corpus/templates/design/server/plugins/auth.ts +1 -0
  218. package/corpus/templates/design/server/plugins/core-routes.ts +4 -0
  219. package/corpus/templates/design/shared/board-file.ts +380 -5
  220. package/corpus/templates/design/shared/board-objects.ts +2 -2
  221. package/corpus/templates/design/shared/code-layer.ts +50 -6
  222. package/corpus/templates/design/shared/motion-compiler.ts +27 -0
  223. package/corpus/templates/macros/app/components/DailyProgress.tsx +41 -37
  224. package/corpus/templates/macros/app/components/ExerciseCard.tsx +2 -2
  225. package/corpus/templates/macros/app/components/MealCard.tsx +2 -2
  226. package/corpus/templates/macros/app/components/VoiceDictation.tsx +1 -1
  227. package/corpus/templates/macros/app/components/WeeklyCaloriesChart.tsx +1 -1
  228. package/corpus/templates/macros/app/components/WeightCard.tsx +2 -2
  229. package/corpus/templates/macros/app/components/WeightTracker.tsx +1 -1
  230. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +1 -1
  231. package/corpus/templates/macros/app/routes/_index.tsx +5 -5
  232. package/corpus/templates/macros/app/routes/analytics.tsx +1 -1
  233. package/corpus/templates/macros/changelog/2026-06-30-dashboard-loading-and-chart-surfaces-now-use-theme-aware-col.md +6 -0
  234. package/corpus/templates/mail/app/components/email/ComposeBubbleToolbar.tsx +14 -11
  235. package/corpus/templates/mail/app/global.css +3 -2
  236. package/corpus/templates/mail/changelog/2026-06-30-compose-floating-toolbars-now-use-theme-aware-colors-in-ligh.md +6 -0
  237. package/corpus/templates/plan/app/pages/PlansPage.tsx +2 -2
  238. package/corpus/templates/slides/app/components/deck/DeckCard.tsx +3 -3
  239. package/corpus/templates/slides/app/global.css +10 -0
  240. package/corpus/templates/slides/app/pages/Index.tsx +55 -51
  241. package/corpus/templates/slides/changelog/2026-06-30-deck-thumbnails-collapse-cleanly-to-one-column-when-the-chat.md +6 -0
  242. package/dist/agent/engine/anthropic-engine.d.ts +2 -2
  243. package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
  244. package/dist/agent/engine/builder-engine.d.ts +2 -2
  245. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  246. package/dist/agent/engine/builtin.js +1 -1
  247. package/dist/agent/engine/builtin.js.map +1 -1
  248. package/dist/agent/engine/output-tokens.js +1 -1
  249. package/dist/agent/engine/output-tokens.js.map +1 -1
  250. package/dist/agent/harness/acp-adapter.d.ts +4 -1
  251. package/dist/agent/harness/acp-adapter.d.ts.map +1 -1
  252. package/dist/agent/harness/acp-adapter.js +19 -2
  253. package/dist/agent/harness/acp-adapter.js.map +1 -1
  254. package/dist/agent/harness/ai-sdk-adapter.d.ts.map +1 -1
  255. package/dist/agent/harness/ai-sdk-adapter.js +3 -0
  256. package/dist/agent/harness/ai-sdk-adapter.js.map +1 -1
  257. package/dist/agent/harness/translate.d.ts.map +1 -1
  258. package/dist/agent/harness/translate.js +3 -0
  259. package/dist/agent/harness/translate.js.map +1 -1
  260. package/dist/agent/harness/types.d.ts +1 -0
  261. package/dist/agent/harness/types.d.ts.map +1 -1
  262. package/dist/agent/harness/types.js.map +1 -1
  263. package/dist/agent/model-config.d.ts +21 -20
  264. package/dist/agent/model-config.d.ts.map +1 -1
  265. package/dist/agent/model-config.js +31 -13
  266. package/dist/agent/model-config.js.map +1 -1
  267. package/dist/agent/production-agent.d.ts.map +1 -1
  268. package/dist/agent/production-agent.js +85 -10
  269. package/dist/agent/production-agent.js.map +1 -1
  270. package/dist/agent/thread-data-builder.d.ts.map +1 -1
  271. package/dist/agent/thread-data-builder.js +27 -6
  272. package/dist/agent/thread-data-builder.js.map +1 -1
  273. package/dist/agent/tool-call-journal.d.ts +11 -9
  274. package/dist/agent/tool-call-journal.d.ts.map +1 -1
  275. package/dist/agent/tool-call-journal.js +92 -40
  276. package/dist/agent/tool-call-journal.js.map +1 -1
  277. package/dist/agent/types.d.ts +5 -1
  278. package/dist/agent/types.d.ts.map +1 -1
  279. package/dist/agent/types.js.map +1 -1
  280. package/dist/cli/design-connect.d.ts.map +1 -1
  281. package/dist/cli/design-connect.js +84 -0
  282. package/dist/cli/design-connect.js.map +1 -1
  283. package/dist/cli/gateway-helpers.d.ts +4 -0
  284. package/dist/cli/gateway-helpers.d.ts.map +1 -1
  285. package/dist/cli/gateway-helpers.js +9 -0
  286. package/dist/cli/gateway-helpers.js.map +1 -1
  287. package/dist/cli/recap.d.ts.map +1 -1
  288. package/dist/cli/recap.js +0 -2
  289. package/dist/cli/recap.js.map +1 -1
  290. package/dist/cli/skills.d.ts.map +1 -1
  291. package/dist/cli/skills.js +54 -16
  292. package/dist/cli/skills.js.map +1 -1
  293. package/dist/cli/workspace-dev.d.ts.map +1 -1
  294. package/dist/cli/workspace-dev.js +33 -6
  295. package/dist/cli/workspace-dev.js.map +1 -1
  296. package/dist/client/AssistantChat.d.ts.map +1 -1
  297. package/dist/client/AssistantChat.js +72 -26
  298. package/dist/client/AssistantChat.js.map +1 -1
  299. package/dist/client/DefaultSpinner.d.ts.map +1 -1
  300. package/dist/client/DefaultSpinner.js +8 -1
  301. package/dist/client/DefaultSpinner.js.map +1 -1
  302. package/dist/client/chat/message-components.d.ts +7 -1
  303. package/dist/client/chat/message-components.d.ts.map +1 -1
  304. package/dist/client/chat/message-components.js +37 -1
  305. package/dist/client/chat/message-components.js.map +1 -1
  306. package/dist/client/chat/repo-helpers.d.ts +1 -0
  307. package/dist/client/chat/repo-helpers.d.ts.map +1 -1
  308. package/dist/client/chat/repo-helpers.js +59 -0
  309. package/dist/client/chat/repo-helpers.js.map +1 -1
  310. package/dist/client/chat/run-recovery.d.ts.map +1 -1
  311. package/dist/client/chat/run-recovery.js +4 -4
  312. package/dist/client/chat/run-recovery.js.map +1 -1
  313. package/dist/client/components/ApiKeySettings.js +8 -8
  314. package/dist/client/components/ApiKeySettings.js.map +1 -1
  315. package/dist/client/components/CodeRequiredDialog.d.ts.map +1 -1
  316. package/dist/client/components/CodeRequiredDialog.js +24 -15
  317. package/dist/client/components/CodeRequiredDialog.js.map +1 -1
  318. package/dist/client/components/MissingKeyCard.d.ts.map +1 -1
  319. package/dist/client/components/MissingKeyCard.js +11 -6
  320. package/dist/client/components/MissingKeyCard.js.map +1 -1
  321. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  322. package/dist/client/composer/TiptapComposer.js +4 -3
  323. package/dist/client/composer/TiptapComposer.js.map +1 -1
  324. package/dist/client/extensions/ExtensionsSidebarSection.d.ts.map +1 -1
  325. package/dist/client/extensions/ExtensionsSidebarSection.js +1 -1
  326. package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
  327. package/dist/client/guided-questions.d.ts.map +1 -1
  328. package/dist/client/guided-questions.js +6 -6
  329. package/dist/client/guided-questions.js.map +1 -1
  330. package/dist/client/integrations/IntegrationCard.js +1 -1
  331. package/dist/client/integrations/IntegrationCard.js.map +1 -1
  332. package/dist/client/integrations/IntegrationsPanel.js +1 -1
  333. package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
  334. package/dist/client/onboarding/OnboardingBanner.js +2 -2
  335. package/dist/client/onboarding/OnboardingBanner.js.map +1 -1
  336. package/dist/client/onboarding/OnboardingPanel.js +23 -19
  337. package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
  338. package/dist/client/resources/ResourceEditor.d.ts.map +1 -1
  339. package/dist/client/resources/ResourceEditor.js +13 -10
  340. package/dist/client/resources/ResourceEditor.js.map +1 -1
  341. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  342. package/dist/client/resources/ResourcesPanel.js +2 -1
  343. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  344. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  345. package/dist/client/settings/SettingsPanel.js +8 -3
  346. package/dist/client/settings/SettingsPanel.js.map +1 -1
  347. package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
  348. package/dist/client/settings/useBuilderStatus.js +6 -38
  349. package/dist/client/settings/useBuilderStatus.js.map +1 -1
  350. package/dist/client/useProductionAgent.d.ts +2 -1
  351. package/dist/client/useProductionAgent.d.ts.map +1 -1
  352. package/dist/client/useProductionAgent.js.map +1 -1
  353. package/dist/deploy/build.js +1 -1
  354. package/dist/deploy/build.js.map +1 -1
  355. package/dist/file-upload/actions/upload-image.d.ts +2 -2
  356. package/dist/notifications/routes.d.ts +1 -1
  357. package/dist/observability/routes.d.ts +5 -5
  358. package/dist/observability/traces.d.ts.map +1 -1
  359. package/dist/observability/traces.js.map +1 -1
  360. package/dist/onboarding/default-steps.js +1 -1
  361. package/dist/onboarding/default-steps.js.map +1 -1
  362. package/dist/scripts/agent-engines/manage-agent-engine.js +1 -1
  363. package/dist/scripts/agent-engines/manage-agent-engine.js.map +1 -1
  364. package/dist/scripts/agent-engines/set-agent-engine.js +1 -1
  365. package/dist/scripts/agent-engines/set-agent-engine.js.map +1 -1
  366. package/dist/server/agent-chat-plugin.d.ts +3 -0
  367. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  368. package/dist/server/agent-chat-plugin.js +134 -72
  369. package/dist/server/agent-chat-plugin.js.map +1 -1
  370. package/dist/server/core-routes-plugin.d.ts +3 -0
  371. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  372. package/dist/server/core-routes-plugin.js +4 -1
  373. package/dist/server/core-routes-plugin.js.map +1 -1
  374. package/dist/server/open-route.d.ts +9 -0
  375. package/dist/server/open-route.d.ts.map +1 -1
  376. package/dist/server/open-route.js +48 -38
  377. package/dist/server/open-route.js.map +1 -1
  378. package/dist/shared/reasoning-effort.js +3 -0
  379. package/dist/shared/reasoning-effort.js.map +1 -1
  380. package/dist/sharing/access.d.ts.map +1 -1
  381. package/dist/sharing/access.js +18 -2
  382. package/dist/sharing/access.js.map +1 -1
  383. package/dist/sharing/registry.d.ts +10 -0
  384. package/dist/sharing/registry.d.ts.map +1 -1
  385. package/dist/sharing/registry.js.map +1 -1
  386. package/dist/styles/agent-native.css +104 -20
  387. package/dist/styles/rich-markdown-editor.css +11 -10
  388. package/docs/content/cloneable-saas.mdx +2 -2
  389. package/docs/content/faq.mdx +1 -1
  390. package/docs/content/locales/ar-SA/cloneable-saas.mdx +2 -2
  391. package/docs/content/locales/ar-SA/faq.mdx +1 -1
  392. package/docs/content/locales/ar-SA/template-chat.mdx +1 -1
  393. package/docs/content/locales/de-DE/cloneable-saas.mdx +2 -2
  394. package/docs/content/locales/de-DE/faq.mdx +1 -1
  395. package/docs/content/locales/de-DE/template-chat.mdx +1 -1
  396. package/docs/content/locales/es-ES/cloneable-saas.mdx +2 -2
  397. package/docs/content/locales/es-ES/faq.mdx +1 -1
  398. package/docs/content/locales/es-ES/template-chat.mdx +1 -1
  399. package/docs/content/locales/fr-FR/cloneable-saas.mdx +2 -2
  400. package/docs/content/locales/fr-FR/faq.mdx +1 -1
  401. package/docs/content/locales/fr-FR/template-chat.mdx +1 -1
  402. package/docs/content/locales/hi-IN/cloneable-saas.mdx +2 -2
  403. package/docs/content/locales/hi-IN/faq.mdx +1 -1
  404. package/docs/content/locales/hi-IN/template-chat.mdx +1 -1
  405. package/docs/content/locales/ja-JP/cloneable-saas.mdx +2 -2
  406. package/docs/content/locales/ja-JP/faq.mdx +1 -1
  407. package/docs/content/locales/ja-JP/template-chat.mdx +1 -1
  408. package/docs/content/locales/ko-KR/cloneable-saas.mdx +2 -2
  409. package/docs/content/locales/ko-KR/faq.mdx +1 -1
  410. package/docs/content/locales/ko-KR/template-chat.mdx +1 -1
  411. package/docs/content/locales/pt-BR/cloneable-saas.mdx +2 -2
  412. package/docs/content/locales/pt-BR/faq.mdx +1 -1
  413. package/docs/content/locales/pt-BR/template-chat.mdx +1 -1
  414. package/docs/content/locales/zh-CN/cloneable-saas.mdx +2 -2
  415. package/docs/content/locales/zh-CN/faq.mdx +1 -1
  416. package/docs/content/locales/zh-CN/template-chat.mdx +1 -1
  417. package/docs/content/locales/zh-TW/cloneable-saas.mdx +2 -2
  418. package/docs/content/locales/zh-TW/faq.mdx +1 -1
  419. package/docs/content/locales/zh-TW/template-chat.mdx +1 -1
  420. package/docs/content/template-chat.mdx +1 -1
  421. package/package.json +1 -1
  422. package/corpus/templates/design/app/components/design/LocalSourceEditBanner.tsx +0 -157
  423. package/corpus/templates/design/app/lib/design-templates.ts +0 -1305
  424. package/corpus/templates/design/app/pages/Templates.tsx +0 -279
@@ -171,6 +171,7 @@ class AcpHarnessSession implements AgentHarnessSession {
171
171
  private queue: AsyncEventQueue<AgentHarnessEvent> | null = null;
172
172
  private readonly pendingPermissions = new Map<string, PendingPermission>();
173
173
  private readonly toolTitles = new Map<string, string>();
174
+ private readonly toolInputs = new Map<string, Record<string, unknown>>();
174
175
  private approvalCounter = 0;
175
176
  private stderrTail = "";
176
177
  private childExited = false;
@@ -358,12 +359,20 @@ class AcpHarnessSession implements AgentHarnessSession {
358
359
  if (update?.sessionUpdate === "tool_call" && update.title) {
359
360
  this.toolTitles.set(update.toolCallId, update.title);
360
361
  }
362
+ if (
363
+ (update?.sessionUpdate === "tool_call" ||
364
+ update?.sessionUpdate === "tool_call_update") &&
365
+ update.rawInput
366
+ ) {
367
+ this.toolInputs.set(update.toolCallId, update.rawInput);
368
+ }
361
369
  // Updates that arrive without an active turn are history replay from
362
370
  // loadSession; the transcript already contains them, so drop them.
363
371
  if (!this.queue) return;
364
- for (const event of acpUpdateToHarnessEvents(update, (id) =>
365
- this.toolTitles.get(id),
366
- )) {
372
+ for (const event of acpUpdateToHarnessEvents(update, {
373
+ titleFor: (id) => this.toolTitles.get(id),
374
+ inputFor: (id) => this.toolInputs.get(id),
375
+ })) {
367
376
  this.queue.push(event);
368
377
  }
369
378
  }
@@ -488,8 +497,17 @@ function messageToText(content: string | unknown[]): string {
488
497
  */
489
498
  export function acpUpdateToHarnessEvents(
490
499
  update: AcpSessionUpdate,
491
- titleFor?: (toolCallId: string) => string | undefined,
500
+ resolvers?:
501
+ | ((toolCallId: string) => string | undefined)
502
+ | {
503
+ titleFor?: (toolCallId: string) => string | undefined;
504
+ inputFor?: (toolCallId: string) => Record<string, unknown> | undefined;
505
+ },
492
506
  ): AgentHarnessEvent[] {
507
+ const titleFor =
508
+ typeof resolvers === "function" ? resolvers : resolvers?.titleFor;
509
+ const inputFor =
510
+ typeof resolvers === "function" ? undefined : resolvers?.inputFor;
493
511
  switch (update.sessionUpdate) {
494
512
  case "agent_message_chunk": {
495
513
  const text = acpContentBlockToText(update.content);
@@ -517,6 +535,9 @@ export function acpUpdateToHarnessEvents(
517
535
  type: "tool-done",
518
536
  id: update.toolCallId,
519
537
  name: update.title || titleFor?.(update.toolCallId) || "tool",
538
+ ...((update.rawInput ?? inputFor?.(update.toolCallId))
539
+ ? { input: update.rawInput ?? inputFor?.(update.toolCallId) }
540
+ : {}),
520
541
  result: update.rawOutput ?? acpToolContentText(update.content),
521
542
  });
522
543
  }
@@ -531,6 +552,9 @@ export function acpUpdateToHarnessEvents(
531
552
  type: "tool-done",
532
553
  id: update.toolCallId,
533
554
  name: update.title || titleFor?.(update.toolCallId) || "tool",
555
+ ...((update.rawInput ?? inputFor?.(update.toolCallId))
556
+ ? { input: update.rawInput ?? inputFor?.(update.toolCallId) }
557
+ : {}),
534
558
  result: update.rawOutput ?? acpToolContentText(content),
535
559
  });
536
560
  }
@@ -448,6 +448,9 @@ export function aiSdkHarnessPartToEvents(part: any): AgentHarnessEvent[] {
448
448
  type: "tool-done",
449
449
  id: part.toolCallId ?? part.id,
450
450
  name: part.toolName ?? part.name ?? "tool",
451
+ ...(part.input !== undefined || part.args !== undefined
452
+ ? { input: part.input ?? part.args }
453
+ : {}),
451
454
  result: part.output ?? part.result,
452
455
  });
453
456
  break;
@@ -32,6 +32,9 @@ export function agentHarnessEventToAgentChatEvents(
32
32
  {
33
33
  type: "tool_done",
34
34
  tool: event.name,
35
+ ...(event.input !== undefined
36
+ ? { input: normalizeToolInput(event.input) }
37
+ : {}),
35
38
  result: stringifyResult(event.result),
36
39
  ...(event.mcpApp ? { mcpApp: event.mcpApp } : {}),
37
40
  },
@@ -100,6 +100,7 @@ export type AgentHarnessEvent =
100
100
  type: "tool-done";
101
101
  id?: string;
102
102
  name: string;
103
+ input?: unknown;
103
104
  result?: unknown;
104
105
  mcpApp?: AgentMcpAppPayload;
105
106
  }
@@ -1,10 +1,9 @@
1
1
  /**
2
2
  * Central model catalog for built-in agent engines.
3
3
  *
4
- * To bump the framework's managed default, update
5
- * FRAMEWORK_DEFAULT_OPENAI_MODEL. Builder gateway and OpenRouter IDs are
6
- * derived from that provider-native OpenAI ID so the usual default bump stays
7
- * in this one file.
4
+ * To bump the framework's managed default, update the Anthropic/OpenAI
5
+ * constants below. Builder gateway and OpenRouter IDs are derived here so the
6
+ * usual default bump stays in one file.
8
7
  */
9
8
 
10
9
  // ---------------------------------------------------------------------------
@@ -15,6 +14,7 @@
15
14
  // OpenAI https://developers.openai.com/api/docs/models/gpt-5.5
16
15
  // https://developers.openai.com/api/docs/models/gpt-5.4
17
16
  // Google https://ai.google.dev/gemini-api/docs/models
17
+ // OpenRouter https://openrouter.ai/api/v1/models
18
18
  //
19
19
  // Family defaults (used when a model id isn't listed explicitly):
20
20
  // claude-* → 200_000 (Haiku 4.5 and earlier models)
@@ -22,7 +22,7 @@
22
22
  // gemini-2* / gemini-3* → 1_048_576
23
23
  // everything else → 128_000 (safe conservative floor)
24
24
  //
25
- // Note: Fable 5, Sonnet 4.6, and Opus 4.6/4.7/4.8 support 1M via the API
25
+ // Note: Fable 5, Sonnet 5, Sonnet 4.6, and Opus 4.6/4.7/4.8 support 1M via the API
26
26
  // at standard prices.
27
27
  // ---------------------------------------------------------------------------
28
28
 
@@ -31,6 +31,7 @@ const MODEL_CONTEXT_WINDOWS: Record<string, number> = {
31
31
  "claude-fable-5": 1_000_000,
32
32
  "claude-opus-4-8": 1_000_000,
33
33
  "claude-opus-4-7": 1_000_000,
34
+ "claude-sonnet-5": 1_000_000,
34
35
  "claude-sonnet-4-6": 1_000_000,
35
36
  "claude-haiku-4-5": 200_000,
36
37
  "claude-haiku-4-5-20251001": 200_000,
@@ -49,10 +50,12 @@ const MODEL_CONTEXT_WINDOWS: Record<string, number> = {
49
50
  "anthropic/claude-fable-5": 1_000_000,
50
51
  "anthropic/claude-opus-4.8": 1_000_000,
51
52
  "anthropic/claude-opus-4.7": 1_000_000,
53
+ "anthropic/claude-sonnet-5": 1_000_000,
52
54
  "anthropic/claude-sonnet-4.6": 1_000_000,
53
55
  "openai/gpt-5.5": 1_050_000,
54
56
  "openai/gpt-5.4": 1_050_000,
55
57
  "google/gemini-2.5-flash": 1_048_576,
58
+ "z-ai/glm-5.2": 1_048_576,
56
59
 
57
60
  // ── AI-SDK native OpenAI IDs ──────────────────────────────────────────────
58
61
  "gpt-5.5": 1_050_000,
@@ -85,12 +88,13 @@ export function getContextWindowForModel(modelId: string): number {
85
88
  // Family heuristics for unlisted model IDs
86
89
  const id = modelId.toLowerCase();
87
90
 
88
- // Anthropic Fable 5, Opus 4.x, and Sonnet 4.6 = 1M
91
+ // Anthropic Fable 5, Opus 4.x, Sonnet 5, and Sonnet 4.6 = 1M
89
92
  if (
90
93
  id === "claude-fable-5" ||
91
94
  id.includes("claude-fable-5") ||
92
95
  id.startsWith("claude-opus-4") ||
93
- id === "claude-sonnet-4-6" ||
96
+ id.includes("claude-sonnet-5") ||
97
+ id.includes("claude-sonnet-4-6") ||
94
98
  id.includes("claude-sonnet-4.6")
95
99
  )
96
100
  return 1_000_000;
@@ -110,10 +114,26 @@ export function getContextWindowForModel(modelId: string): number {
110
114
  )
111
115
  return 1_048_576;
112
116
 
117
+ // Z.ai GLM 5.x on OpenRouter — 1M context.
118
+ if (id.startsWith("glm-5") || id.includes("/glm-5")) return 1_048_576;
119
+
113
120
  return DEFAULT_CONTEXT_WINDOW;
114
121
  }
115
122
 
116
- const ANTHROPIC_DEFAULT_MODEL_ID = "claude-sonnet-4-6";
123
+ const ENABLE_CLAUDE_SONNET_5 = false;
124
+
125
+ export const CLAUDE_SONNET_MODEL_ID = ENABLE_CLAUDE_SONNET_5
126
+ ? "claude-sonnet-5"
127
+ : "claude-sonnet-4-6";
128
+ export const CLAUDE_SONNET_MODEL_LABEL = ENABLE_CLAUDE_SONNET_5
129
+ ? "Claude Sonnet 5"
130
+ : "Claude Sonnet 4.6";
131
+
132
+ const OPENROUTER_CLAUDE_SONNET_MODEL_ID = ENABLE_CLAUDE_SONNET_5
133
+ ? "anthropic/claude-sonnet-5"
134
+ : "anthropic/claude-sonnet-4.6";
135
+
136
+ const ANTHROPIC_DEFAULT_MODEL_ID = CLAUDE_SONNET_MODEL_ID;
117
137
 
118
138
  function builderGatewayModelId(model: string): string {
119
139
  return model.replace(/\./g, "-");
@@ -138,8 +158,8 @@ export const AGENT_MODEL_CONFIG = {
138
158
  defaultModel: FRAMEWORK_DEFAULT_BUILDER_MODEL,
139
159
  supportedModels: [
140
160
  "auto",
141
- "claude-opus-4-7",
142
- FRAMEWORK_DEFAULT_BUILDER_MODEL,
161
+ "claude-opus-4-8",
162
+ CLAUDE_SONNET_MODEL_ID,
143
163
  "claude-haiku-4-5",
144
164
  FRAMEWORK_DEFAULT_BUILDER_OPENAI_MODEL,
145
165
  "gpt-5-4",
@@ -156,7 +176,7 @@ export const AGENT_MODEL_CONFIG = {
156
176
  supportedModels: [
157
177
  "claude-fable-5",
158
178
  "claude-opus-4-8",
159
- ANTHROPIC_DEFAULT_MODEL_ID,
179
+ CLAUDE_SONNET_MODEL_ID,
160
180
  "claude-haiku-4-5-20251001",
161
181
  ],
162
182
  },
@@ -166,7 +186,7 @@ export const AGENT_MODEL_CONFIG = {
166
186
  supportedModels: [
167
187
  "claude-fable-5",
168
188
  "claude-opus-4-8",
169
- ANTHROPIC_DEFAULT_MODEL_ID,
189
+ CLAUDE_SONNET_MODEL_ID,
170
190
  "claude-haiku-4-5-20251001",
171
191
  ],
172
192
  },
@@ -183,11 +203,12 @@ export const AGENT_MODEL_CONFIG = {
183
203
  supportedModels: [
184
204
  "anthropic/claude-fable-5",
185
205
  "anthropic/claude-opus-4.8",
186
- "anthropic/claude-sonnet-4.6",
206
+ OPENROUTER_CLAUDE_SONNET_MODEL_ID,
187
207
  FRAMEWORK_DEFAULT_OPENROUTER_MODEL,
188
208
  "openai/gpt-5.4",
189
209
  // Current stable Gemini on OpenRouter (2.5 Flash is GA)
190
210
  "google/gemini-2.5-flash",
211
+ "z-ai/glm-5.2",
191
212
  ],
192
213
  },
193
214
  google: {
@@ -3134,7 +3134,13 @@ export async function runAgentLoop(opts: {
3134
3134
  tool: toolCall.name,
3135
3135
  input: toolCall.input as Record<string, string>,
3136
3136
  });
3137
- send({ type: "tool_done", tool: toolCall.name, result });
3137
+ send({
3138
+ type: "tool_done",
3139
+ tool: toolCall.name,
3140
+ input: toolCall.input as Record<string, unknown>,
3141
+ result,
3142
+ completedSideEffect: false,
3143
+ });
3138
3144
  recordToolResult(result, false);
3139
3145
  return {
3140
3146
  type: "tool-result" as const,
@@ -3152,7 +3158,13 @@ export async function runAgentLoop(opts: {
3152
3158
  tool: toolCall.name,
3153
3159
  input: toolCall.input as Record<string, string>,
3154
3160
  });
3155
- send({ type: "tool_done", tool: toolCall.name, result });
3161
+ send({
3162
+ type: "tool_done",
3163
+ tool: toolCall.name,
3164
+ input: toolCall.input as Record<string, unknown>,
3165
+ result,
3166
+ completedSideEffect: false,
3167
+ });
3156
3168
  recordToolResult(result, false);
3157
3169
  return {
3158
3170
  type: "tool-result" as const,
@@ -3172,7 +3184,14 @@ export async function runAgentLoop(opts: {
3172
3184
  tool: toolCall.name,
3173
3185
  input: toolCall.input as Record<string, string>,
3174
3186
  });
3175
- send({ type: "tool_done", tool: toolCall.name, result });
3187
+ send({
3188
+ type: "tool_done",
3189
+ tool: toolCall.name,
3190
+ input: toolCall.input as Record<string, unknown>,
3191
+ result,
3192
+ isError: true,
3193
+ completedSideEffect: false,
3194
+ });
3176
3195
  recordToolResult(result, true);
3177
3196
  return {
3178
3197
  type: "tool-result" as const,
@@ -3247,7 +3266,13 @@ export async function runAgentLoop(opts: {
3247
3266
  `Awaiting human approval to run "${toolCall.name}". This action did ` +
3248
3267
  `NOT execute — a human must approve this specific call before it ` +
3249
3268
  `can run. The turn is paused; do not retry.`;
3250
- send({ type: "tool_done", tool: toolCall.name, result });
3269
+ send({
3270
+ type: "tool_done",
3271
+ tool: toolCall.name,
3272
+ input: toolCall.input as Record<string, unknown>,
3273
+ result,
3274
+ completedSideEffect: false,
3275
+ });
3251
3276
  recordToolResult(result, false);
3252
3277
  requestedActionStop ??= {
3253
3278
  message: `Waiting for your approval to run ${toolCall.name}.`,
@@ -3280,7 +3305,13 @@ export async function runAgentLoop(opts: {
3280
3305
  tool: toolCall.name,
3281
3306
  input: toolCall.input as Record<string, string>,
3282
3307
  });
3283
- send({ type: "tool_done", tool: toolCall.name, result });
3308
+ send({
3309
+ type: "tool_done",
3310
+ tool: toolCall.name,
3311
+ input: toolCall.input as Record<string, unknown>,
3312
+ result,
3313
+ completedSideEffect: false,
3314
+ });
3284
3315
  recordToolResult(result, false);
3285
3316
  if (repeats >= 3) {
3286
3317
  requestedActionStop ??= {
@@ -3338,7 +3369,13 @@ export async function runAgentLoop(opts: {
3338
3369
  tool: toolCall.name,
3339
3370
  input: toolCall.input as Record<string, string>,
3340
3371
  });
3341
- send({ type: "tool_done", tool: toolCall.name, result });
3372
+ send({
3373
+ type: "tool_done",
3374
+ tool: toolCall.name,
3375
+ input: toolCall.input as Record<string, unknown>,
3376
+ result,
3377
+ completedSideEffect: false,
3378
+ });
3342
3379
  recordToolResult(result, false);
3343
3380
  return {
3344
3381
  type: "tool-result" as const,
@@ -3389,6 +3426,7 @@ export async function runAgentLoop(opts: {
3389
3426
  send({
3390
3427
  type: "tool_done",
3391
3428
  tool: toolCall.name,
3429
+ input: toolCall.input as Record<string, unknown>,
3392
3430
  result,
3393
3431
  ...(actionEntry.chatUI ? { chatUI: actionEntry.chatUI } : {}),
3394
3432
  });
@@ -3413,7 +3451,14 @@ export async function runAgentLoop(opts: {
3413
3451
  tool: toolCall.name,
3414
3452
  input: toolCall.input as Record<string, string>,
3415
3453
  });
3416
- send({ type: "tool_done", tool: toolCall.name, result });
3454
+ send({
3455
+ type: "tool_done",
3456
+ tool: toolCall.name,
3457
+ input: toolCall.input as Record<string, unknown>,
3458
+ result,
3459
+ isError: true,
3460
+ completedSideEffect: false,
3461
+ });
3417
3462
  recordToolResult(result, true);
3418
3463
  requestedActionStop ??= {
3419
3464
  message:
@@ -3467,7 +3512,14 @@ export async function runAgentLoop(opts: {
3467
3512
  toolCallSchemaError.error,
3468
3513
  ),
3469
3514
  );
3470
- send({ type: "tool_done", tool: toolCall.name, result });
3515
+ send({
3516
+ type: "tool_done",
3517
+ tool: toolCall.name,
3518
+ input: toolCall.input as Record<string, unknown>,
3519
+ result,
3520
+ isError: true,
3521
+ completedSideEffect: false,
3522
+ });
3471
3523
  recordToolResult(result, true);
3472
3524
  return {
3473
3525
  type: "tool-result" as const,
@@ -3491,7 +3543,14 @@ export async function runAgentLoop(opts: {
3491
3543
  rawToolInputError,
3492
3544
  ),
3493
3545
  );
3494
- send({ type: "tool_done", tool: toolCall.name, result });
3546
+ send({
3547
+ type: "tool_done",
3548
+ tool: toolCall.name,
3549
+ input: toolCall.input as Record<string, unknown>,
3550
+ result,
3551
+ isError: true,
3552
+ completedSideEffect: false,
3553
+ });
3495
3554
  recordToolResult(result, true);
3496
3555
  return {
3497
3556
  type: "tool-result" as const,
@@ -3508,7 +3567,14 @@ export async function runAgentLoop(opts: {
3508
3567
  !isPlanModeToolCallAllowed(toolCall.name, toolCall.input, actionEntry)
3509
3568
  ) {
3510
3569
  const result = planModeBlockedMessage(toolCall.name);
3511
- send({ type: "tool_done", tool: toolCall.name, result });
3570
+ send({
3571
+ type: "tool_done",
3572
+ tool: toolCall.name,
3573
+ input: toolCall.input as Record<string, unknown>,
3574
+ result,
3575
+ isError: true,
3576
+ completedSideEffect: false,
3577
+ });
3512
3578
  recordToolResult(result, true);
3513
3579
  return {
3514
3580
  type: "tool-result" as const,
@@ -3586,6 +3652,14 @@ export async function runAgentLoop(opts: {
3586
3652
  actionPromise
3587
3653
  .then((zombieRaw: unknown) => {
3588
3654
  const zombieMcp = isMcpActionResult(zombieRaw) ? zombieRaw : null;
3655
+ if (
3656
+ zombieMcp &&
3657
+ zombieMcp.raw &&
3658
+ typeof zombieMcp.raw === "object" &&
3659
+ (zombieMcp.raw as Record<string, unknown>).isError === true
3660
+ ) {
3661
+ return;
3662
+ }
3589
3663
  const zombieText = zombieMcp ? zombieMcp.text : zombieRaw;
3590
3664
  const zombieStr =
3591
3665
  typeof zombieText === "string"
@@ -3721,7 +3795,10 @@ export async function runAgentLoop(opts: {
3721
3795
  send({
3722
3796
  type: "tool_done",
3723
3797
  tool: toolCall.name,
3798
+ input: toolCall.input as Record<string, unknown>,
3724
3799
  result,
3800
+ ...(isError ? { isError: true } : {}),
3801
+ ...(isError ? { completedSideEffect: false } : {}),
3725
3802
  ...(mcpApp ? { mcpApp } : {}),
3726
3803
  ...(actionEntry.chatUI ? { chatUI: actionEntry.chatUI } : {}),
3727
3804
  });
@@ -278,8 +278,17 @@ function getMessageRunId(message: any): string | undefined {
278
278
  }
279
279
 
280
280
  function messageContentIsEmpty(content: unknown): boolean {
281
- if (Array.isArray(content)) return content.length === 0;
282
- return content == null || content === "";
281
+ if (typeof content === "string") return content.trim().length === 0;
282
+ if (Array.isArray(content)) {
283
+ return !content.some((part: any) => {
284
+ if (!part || typeof part !== "object") return false;
285
+ if (part.type === "text") {
286
+ return typeof part.text === "string" && part.text.trim().length > 0;
287
+ }
288
+ return true;
289
+ });
290
+ }
291
+ return content == null;
283
292
  }
284
293
 
285
294
  function messageText(content: unknown): string {
@@ -790,7 +799,15 @@ export function mergeThreadDataForClientSave(
790
799
  const idRewrites = new Map<string, string>();
791
800
 
792
801
  for (const existingEntry of existingMessages) {
793
- const existingKeys = messageIdentityKeys(getStoredMessage(existingEntry));
802
+ const existingMessage = getStoredMessage(existingEntry);
803
+ if (
804
+ existingMessage?.role === "assistant" &&
805
+ messageContentIsEmpty(existingMessage.content)
806
+ ) {
807
+ continue;
808
+ }
809
+
810
+ const existingKeys = messageIdentityKeys(existingMessage);
794
811
  const incomingIndex = incomingKeySets.findIndex(
795
812
  (keys: Set<string>, index: number) =>
796
813
  !usedIncoming.has(index) && existingKeys.some((key) => keys.has(key)),
@@ -813,7 +830,15 @@ export function mergeThreadDataForClientSave(
813
830
  }
814
831
 
815
832
  for (let index = 0; index < incomingMessages.length; index++) {
816
- if (!usedIncoming.has(index)) nextMessages.push(incomingMessages[index]);
833
+ if (usedIncoming.has(index)) continue;
834
+ const incomingMessage = getStoredMessage(incomingMessages[index]);
835
+ if (
836
+ incomingMessage?.role === "assistant" &&
837
+ messageContentIsEmpty(incomingMessage.content)
838
+ ) {
839
+ continue;
840
+ }
841
+ nextMessages.push(incomingMessages[index]);
817
842
  }
818
843
 
819
844
  merged.messages = nextMessages.map((entry) =>