@agent-native/core 0.47.1 → 0.48.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (808) hide show
  1. package/bin/agent-native.js +41 -0
  2. package/dist/a2a/handlers.js +2 -2
  3. package/dist/a2a/handlers.js.map +1 -1
  4. package/dist/a2a/server.js +2 -2
  5. package/dist/a2a/server.js.map +1 -1
  6. package/dist/action.d.ts +43 -2
  7. package/dist/action.d.ts.map +1 -1
  8. package/dist/action.js.map +1 -1
  9. package/dist/agent/context-xray/actions/context-evict.d.ts +7 -1
  10. package/dist/agent/context-xray/actions/context-evict.d.ts.map +1 -1
  11. package/dist/agent/context-xray/actions/context-manifest-get.d.ts +4 -1
  12. package/dist/agent/context-xray/actions/context-manifest-get.d.ts.map +1 -1
  13. package/dist/agent/context-xray/actions/context-pin.d.ts +7 -1
  14. package/dist/agent/context-xray/actions/context-pin.d.ts.map +1 -1
  15. package/dist/agent/context-xray/actions/context-report.d.ts +12 -1
  16. package/dist/agent/context-xray/actions/context-report.d.ts.map +1 -1
  17. package/dist/agent/context-xray/actions/context-restore.d.ts +7 -1
  18. package/dist/agent/context-xray/actions/context-restore.d.ts.map +1 -1
  19. package/dist/agent/context-xray/apply-directives.d.ts.map +1 -1
  20. package/dist/agent/context-xray/apply-directives.js.map +1 -1
  21. package/dist/agent/context-xray/schema.d.ts +10 -10
  22. package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
  23. package/dist/agent/engine/ai-sdk-engine.js +26 -3
  24. package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
  25. package/dist/agent/engine/anthropic-engine.d.ts +1 -1
  26. package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
  27. package/dist/agent/engine/builder-engine.d.ts +1 -1
  28. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  29. package/dist/agent/engine/builder-engine.js +47 -8
  30. package/dist/agent/engine/builder-engine.js.map +1 -1
  31. package/dist/agent/engine/builtin.js +1 -1
  32. package/dist/agent/engine/builtin.js.map +1 -1
  33. package/dist/agent/engine/output-tokens.d.ts +1 -1
  34. package/dist/agent/engine/output-tokens.d.ts.map +1 -1
  35. package/dist/agent/engine/output-tokens.js +6 -2
  36. package/dist/agent/engine/output-tokens.js.map +1 -1
  37. package/dist/agent/engine/registry.d.ts.map +1 -1
  38. package/dist/agent/engine/registry.js +7 -4
  39. package/dist/agent/engine/registry.js.map +1 -1
  40. package/dist/agent/engine/types.d.ts +19 -0
  41. package/dist/agent/engine/types.d.ts.map +1 -1
  42. package/dist/agent/engine/types.js +6 -0
  43. package/dist/agent/engine/types.js.map +1 -1
  44. package/dist/agent/model-config.d.ts +22 -14
  45. package/dist/agent/model-config.d.ts.map +1 -1
  46. package/dist/agent/model-config.js +113 -8
  47. package/dist/agent/model-config.js.map +1 -1
  48. package/dist/agent/production-agent.d.ts +19 -1
  49. package/dist/agent/production-agent.d.ts.map +1 -1
  50. package/dist/agent/production-agent.js +253 -39
  51. package/dist/agent/production-agent.js.map +1 -1
  52. package/dist/agent/run-loop-with-resume.d.ts.map +1 -1
  53. package/dist/agent/run-loop-with-resume.js +10 -0
  54. package/dist/agent/run-loop-with-resume.js.map +1 -1
  55. package/dist/agent/run-manager.d.ts +1 -0
  56. package/dist/agent/run-manager.d.ts.map +1 -1
  57. package/dist/agent/run-manager.js +36 -9
  58. package/dist/agent/run-manager.js.map +1 -1
  59. package/dist/agent/run-store.d.ts +47 -4
  60. package/dist/agent/run-store.d.ts.map +1 -1
  61. package/dist/agent/run-store.js +154 -4
  62. package/dist/agent/run-store.js.map +1 -1
  63. package/dist/agent/thread-data-builder.d.ts.map +1 -1
  64. package/dist/agent/thread-data-builder.js +57 -2
  65. package/dist/agent/thread-data-builder.js.map +1 -1
  66. package/dist/agent/types.d.ts +3 -0
  67. package/dist/agent/types.d.ts.map +1 -1
  68. package/dist/agent/types.js.map +1 -1
  69. package/dist/agent-web/generator.d.ts +3 -3
  70. package/dist/appearance/actions/change-appearance.d.ts +6 -1
  71. package/dist/appearance/actions/change-appearance.d.ts.map +1 -1
  72. package/dist/application-state/handlers.d.ts +2 -2
  73. package/dist/application-state/handlers.d.ts.map +1 -1
  74. package/dist/application-state/store.d.ts.map +1 -1
  75. package/dist/application-state/store.js +17 -0
  76. package/dist/application-state/store.js.map +1 -1
  77. package/dist/catalog.json +2 -1
  78. package/dist/cli/code-agent-commands.d.ts.map +1 -1
  79. package/dist/cli/code-agent-commands.js +2 -0
  80. package/dist/cli/code-agent-commands.js.map +1 -1
  81. package/dist/cli/code-agent-connector.js +7 -13
  82. package/dist/cli/code-agent-connector.js.map +1 -1
  83. package/dist/cli/code-agent-executor.d.ts +54 -2
  84. package/dist/cli/code-agent-executor.d.ts.map +1 -1
  85. package/dist/cli/code-agent-executor.js +504 -48
  86. package/dist/cli/code-agent-executor.js.map +1 -1
  87. package/dist/cli/code-agent-runs.d.ts +13 -0
  88. package/dist/cli/code-agent-runs.d.ts.map +1 -1
  89. package/dist/cli/code-agent-runs.js +36 -0
  90. package/dist/cli/code-agent-runs.js.map +1 -1
  91. package/dist/cli/code.js +59 -5
  92. package/dist/cli/code.js.map +1 -1
  93. package/dist/cli/connect.js +141 -3
  94. package/dist/cli/connect.js.map +1 -1
  95. package/dist/cli/index.js +0 -0
  96. package/dist/cli/pr-visual-recap-workflow.js +1 -1
  97. package/dist/cli/pr-visual-recap-workflow.js.map +1 -1
  98. package/dist/cli/recap.js +476 -46
  99. package/dist/cli/recap.js.map +1 -1
  100. package/dist/cli/skills.js +298 -179
  101. package/dist/cli/skills.js.map +1 -1
  102. package/dist/client/AgentPanel.d.ts.map +1 -1
  103. package/dist/client/AgentPanel.js +29 -2
  104. package/dist/client/AgentPanel.js.map +1 -1
  105. package/dist/client/AgentTaskCard.d.ts.map +1 -1
  106. package/dist/client/AgentTaskCard.js +17 -2
  107. package/dist/client/AgentTaskCard.js.map +1 -1
  108. package/dist/client/AssistantChat.d.ts +1 -1
  109. package/dist/client/AssistantChat.d.ts.map +1 -1
  110. package/dist/client/AssistantChat.js +310 -1732
  111. package/dist/client/AssistantChat.js.map +1 -1
  112. package/dist/client/CommandMenu.d.ts +1 -1
  113. package/dist/client/CommandMenu.d.ts.map +1 -1
  114. package/dist/client/CommandMenu.js +1 -1
  115. package/dist/client/CommandMenu.js.map +1 -1
  116. package/dist/client/HighlightedCodeBlock.d.ts +40 -0
  117. package/dist/client/HighlightedCodeBlock.d.ts.map +1 -0
  118. package/dist/client/HighlightedCodeBlock.js +110 -0
  119. package/dist/client/HighlightedCodeBlock.js.map +1 -0
  120. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  121. package/dist/client/MultiTabAssistantChat.js +8 -1
  122. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  123. package/dist/client/PoweredByBadge.d.ts +2 -2
  124. package/dist/client/PoweredByBadge.d.ts.map +1 -1
  125. package/dist/client/RunStuckBanner.d.ts +1 -1
  126. package/dist/client/RunStuckBanner.d.ts.map +1 -1
  127. package/dist/client/StarfieldBackground.d.ts.map +1 -1
  128. package/dist/client/StarfieldBackground.js +10 -5
  129. package/dist/client/StarfieldBackground.js.map +1 -1
  130. package/dist/client/Turnstile.d.ts +1 -1
  131. package/dist/client/Turnstile.d.ts.map +1 -1
  132. package/dist/client/agent-chat-adapter.d.ts +3 -2
  133. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  134. package/dist/client/agent-chat-adapter.js +13 -9
  135. package/dist/client/agent-chat-adapter.js.map +1 -1
  136. package/dist/client/app-providers.d.ts +99 -0
  137. package/dist/client/app-providers.d.ts.map +1 -0
  138. package/dist/client/app-providers.js +19 -0
  139. package/dist/client/app-providers.js.map +1 -0
  140. package/dist/client/assistant-ui-recovery.d.ts +1 -1
  141. package/dist/client/auth-redirect-url.d.ts +1 -1
  142. package/dist/client/auth-redirect-url.d.ts.map +1 -1
  143. package/dist/client/blocks/library/AnnotatedCodeBlock.d.ts +0 -19
  144. package/dist/client/blocks/library/AnnotatedCodeBlock.d.ts.map +1 -1
  145. package/dist/client/blocks/library/AnnotatedCodeBlock.js +141 -55
  146. package/dist/client/blocks/library/AnnotatedCodeBlock.js.map +1 -1
  147. package/dist/client/blocks/library/DiffBlock.js +1 -1
  148. package/dist/client/blocks/library/DiffBlock.js.map +1 -1
  149. package/dist/client/blocks/library/FileTreeBlock.d.ts.map +1 -1
  150. package/dist/client/blocks/library/FileTreeBlock.js +1 -1
  151. package/dist/client/blocks/library/FileTreeBlock.js.map +1 -1
  152. package/dist/client/blocks/library/HighlightedCode.d.ts.map +1 -1
  153. package/dist/client/blocks/library/HighlightedCode.js +5 -3
  154. package/dist/client/blocks/library/HighlightedCode.js.map +1 -1
  155. package/dist/client/blocks/library/annotation-rail.d.ts +5 -4
  156. package/dist/client/blocks/library/annotation-rail.d.ts.map +1 -1
  157. package/dist/client/blocks/library/annotation-rail.js +22 -3
  158. package/dist/client/blocks/library/annotation-rail.js.map +1 -1
  159. package/dist/client/blocks/library/diagram.js +1 -1
  160. package/dist/client/blocks/library/diagram.js.map +1 -1
  161. package/dist/client/blocks/library/diff.config.d.ts +3 -2
  162. package/dist/client/blocks/library/diff.config.d.ts.map +1 -1
  163. package/dist/client/blocks/library/diff.config.js +4 -3
  164. package/dist/client/blocks/library/diff.config.js.map +1 -1
  165. package/dist/client/blocks/library/question-form.d.ts.map +1 -1
  166. package/dist/client/blocks/library/question-form.js +2 -1
  167. package/dist/client/blocks/library/question-form.js.map +1 -1
  168. package/dist/client/blocks/library/wireframe-kit.d.ts +1 -1
  169. package/dist/client/blocks/library/wireframe-kit.d.ts.map +1 -1
  170. package/dist/client/blocks/library/wireframe.js +1 -1
  171. package/dist/client/blocks/library/wireframe.js.map +1 -1
  172. package/dist/client/chat/attachment-adapters.d.ts +58 -0
  173. package/dist/client/chat/attachment-adapters.d.ts.map +1 -0
  174. package/dist/client/chat/attachment-adapters.js +331 -0
  175. package/dist/client/chat/attachment-adapters.js.map +1 -0
  176. package/dist/client/chat/index.d.ts +13 -0
  177. package/dist/client/chat/index.d.ts.map +1 -0
  178. package/dist/client/chat/index.js +13 -0
  179. package/dist/client/chat/index.js.map +1 -0
  180. package/dist/client/chat/markdown-renderer.d.ts +49 -0
  181. package/dist/client/chat/markdown-renderer.d.ts.map +1 -0
  182. package/dist/client/chat/markdown-renderer.js +391 -0
  183. package/dist/client/chat/markdown-renderer.js.map +1 -0
  184. package/dist/client/chat/message-components.d.ts +35 -0
  185. package/dist/client/chat/message-components.d.ts.map +1 -0
  186. package/dist/client/chat/message-components.js +452 -0
  187. package/dist/client/chat/message-components.js.map +1 -0
  188. package/dist/client/chat/repo-helpers.d.ts +41 -0
  189. package/dist/client/chat/repo-helpers.d.ts.map +1 -0
  190. package/dist/client/chat/repo-helpers.js +61 -0
  191. package/dist/client/chat/repo-helpers.js.map +1 -0
  192. package/dist/client/chat/run-recovery.d.ts +41 -0
  193. package/dist/client/chat/run-recovery.d.ts.map +1 -0
  194. package/dist/client/chat/run-recovery.js +348 -0
  195. package/dist/client/chat/run-recovery.js.map +1 -0
  196. package/dist/client/chat/tool-call-display.d.ts +34 -0
  197. package/dist/client/chat/tool-call-display.d.ts.map +1 -0
  198. package/dist/client/chat/tool-call-display.js +284 -0
  199. package/dist/client/chat/tool-call-display.js.map +1 -0
  200. package/dist/client/code-agent-chat-adapter.d.ts.map +1 -1
  201. package/dist/client/code-agent-chat-adapter.js +20 -0
  202. package/dist/client/code-agent-chat-adapter.js.map +1 -1
  203. package/dist/client/collab/index.d.ts +10 -0
  204. package/dist/client/collab/index.d.ts.map +1 -0
  205. package/dist/client/collab/index.js +10 -0
  206. package/dist/client/collab/index.js.map +1 -0
  207. package/dist/client/components/AgentPresenceChip.d.ts +1 -1
  208. package/dist/client/components/AgentPresenceChip.d.ts.map +1 -1
  209. package/dist/client/components/ApiKeySettings.d.ts +1 -1
  210. package/dist/client/components/ApiKeySettings.d.ts.map +1 -1
  211. package/dist/client/components/CodeAgentIndicator.d.ts +1 -1
  212. package/dist/client/components/CodeAgentIndicator.d.ts.map +1 -1
  213. package/dist/client/components/CodeRequiredDialog.d.ts +1 -1
  214. package/dist/client/components/CodeRequiredDialog.d.ts.map +1 -1
  215. package/dist/client/components/LiveCursorOverlay.d.ts.map +1 -1
  216. package/dist/client/components/LiveCursorOverlay.js.map +1 -1
  217. package/dist/client/components/PresenceBar.d.ts +1 -1
  218. package/dist/client/components/PresenceBar.d.ts.map +1 -1
  219. package/dist/client/composer/PromptComposer.d.ts.map +1 -1
  220. package/dist/client/composer/PromptComposer.js +6 -26
  221. package/dist/client/composer/PromptComposer.js.map +1 -1
  222. package/dist/client/composer/TiptapComposer.d.ts +8 -2
  223. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  224. package/dist/client/composer/TiptapComposer.js +21 -9
  225. package/dist/client/composer/TiptapComposer.js.map +1 -1
  226. package/dist/client/composer/VoiceButton.d.ts +2 -2
  227. package/dist/client/composer/VoiceButton.d.ts.map +1 -1
  228. package/dist/client/composer/index.d.ts +1 -1
  229. package/dist/client/composer/index.d.ts.map +1 -1
  230. package/dist/client/composer/index.js +1 -1
  231. package/dist/client/composer/index.js.map +1 -1
  232. package/dist/client/composer/use-skills.d.ts +1 -1
  233. package/dist/client/context-xray/ContextMeter.d.ts +1 -1
  234. package/dist/client/context-xray/ContextMeter.d.ts.map +1 -1
  235. package/dist/client/context-xray/ContextMeter.js +3 -3
  236. package/dist/client/context-xray/ContextMeter.js.map +1 -1
  237. package/dist/client/context-xray/ContextXRayPanel.d.ts.map +1 -1
  238. package/dist/client/context-xray/ContextXRayPanel.js +4 -3
  239. package/dist/client/context-xray/ContextXRayPanel.js.map +1 -1
  240. package/dist/client/context-xray/format.d.ts +11 -0
  241. package/dist/client/context-xray/format.d.ts.map +1 -1
  242. package/dist/client/context-xray/format.js +16 -0
  243. package/dist/client/context-xray/format.js.map +1 -1
  244. package/dist/client/conversation/AgentConversation.d.ts.map +1 -1
  245. package/dist/client/conversation/AgentConversation.js +8 -53
  246. package/dist/client/conversation/AgentConversation.js.map +1 -1
  247. package/dist/client/conversation/use-near-bottom-autoscroll.d.ts +1 -1
  248. package/dist/client/conversation/use-near-bottom-autoscroll.d.ts.map +1 -1
  249. package/dist/client/conversation/use-near-bottom-autoscroll.js +14 -1
  250. package/dist/client/conversation/use-near-bottom-autoscroll.js.map +1 -1
  251. package/dist/client/create-query-client.d.ts +28 -0
  252. package/dist/client/create-query-client.d.ts.map +1 -0
  253. package/dist/client/create-query-client.js +78 -0
  254. package/dist/client/create-query-client.js.map +1 -0
  255. package/dist/client/db-admin/DevDatabaseLink.d.ts +1 -1
  256. package/dist/client/db-admin/DevDatabaseLink.d.ts.map +1 -1
  257. package/dist/client/db-admin/RowSidePanel.d.ts +1 -1
  258. package/dist/client/db-admin/RowSidePanel.d.ts.map +1 -1
  259. package/dist/client/db-admin/RowSidePanel.js +2 -2
  260. package/dist/client/db-admin/RowSidePanel.js.map +1 -1
  261. package/dist/client/db-admin/TableEditor.d.ts +1 -1
  262. package/dist/client/db-admin/TableEditor.d.ts.map +1 -1
  263. package/dist/client/db-admin/TableEditor.js +1 -1
  264. package/dist/client/db-admin/TableEditor.js.map +1 -1
  265. package/dist/client/db-admin/cell-format.d.ts +1 -1
  266. package/dist/client/db-admin/cell-format.d.ts.map +1 -1
  267. package/dist/client/dev-overlay/DevOverlay.d.ts +1 -1
  268. package/dist/client/dev-overlay/DevOverlay.d.ts.map +1 -1
  269. package/dist/client/editor/index.d.ts +2 -0
  270. package/dist/client/editor/index.d.ts.map +1 -0
  271. package/dist/client/editor/index.js +2 -0
  272. package/dist/client/editor/index.js.map +1 -0
  273. package/dist/client/error-format.d.ts.map +1 -1
  274. package/dist/client/error-format.js +4 -0
  275. package/dist/client/error-format.js.map +1 -1
  276. package/dist/client/extensions/AgentNativeExtensionFrame.d.ts +1 -1
  277. package/dist/client/extensions/AgentNativeExtensionFrame.d.ts.map +1 -1
  278. package/dist/client/extensions/EmbeddedExtension.d.ts +1 -1
  279. package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
  280. package/dist/client/extensions/ExtensionSlot.d.ts +1 -1
  281. package/dist/client/extensions/ExtensionSlot.d.ts.map +1 -1
  282. package/dist/client/extensions/ExtensionViewerPage.d.ts +1 -1
  283. package/dist/client/extensions/ExtensionViewerPage.d.ts.map +1 -1
  284. package/dist/client/guided-questions.d.ts +6 -6
  285. package/dist/client/host-bridge.d.ts.map +1 -1
  286. package/dist/client/host-bridge.js +2 -0
  287. package/dist/client/host-bridge.js.map +1 -1
  288. package/dist/client/index.d.ts +7 -6
  289. package/dist/client/index.d.ts.map +1 -1
  290. package/dist/client/index.js +5 -3
  291. package/dist/client/index.js.map +1 -1
  292. package/dist/client/onboarding/OnboardingBanner.d.ts +1 -1
  293. package/dist/client/onboarding/OnboardingBanner.d.ts.map +1 -1
  294. package/dist/client/onboarding/OnboardingPanel.d.ts +1 -1
  295. package/dist/client/onboarding/OnboardingPanel.d.ts.map +1 -1
  296. package/dist/client/onboarding/SetupButton.d.ts +1 -1
  297. package/dist/client/onboarding/SetupButton.d.ts.map +1 -1
  298. package/dist/client/org/InvitationBanner.d.ts +1 -1
  299. package/dist/client/org/InvitationBanner.d.ts.map +1 -1
  300. package/dist/client/org/OrgSwitcher.d.ts +1 -1
  301. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  302. package/dist/client/org/RequireActiveOrg.d.ts +1 -1
  303. package/dist/client/org/RequireActiveOrg.d.ts.map +1 -1
  304. package/dist/client/org/hooks.d.ts +3 -3
  305. package/dist/client/org/hooks.d.ts.map +1 -1
  306. package/dist/client/progress/RunsTray.d.ts +2 -2
  307. package/dist/client/progress/RunsTray.d.ts.map +1 -1
  308. package/dist/client/progress/RunsTray.js +34 -9
  309. package/dist/client/progress/RunsTray.js.map +1 -1
  310. package/dist/client/resources/ResourceEditor.d.ts.map +1 -1
  311. package/dist/client/resources/ResourceEditor.js +1 -1
  312. package/dist/client/resources/ResourceEditor.js.map +1 -1
  313. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  314. package/dist/client/resources/ResourcesPanel.js +2 -0
  315. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  316. package/dist/client/rich-markdown-editor/BubbleToolbar.d.ts +1 -1
  317. package/dist/client/rich-markdown-editor/BubbleToolbar.d.ts.map +1 -1
  318. package/dist/client/rich-markdown-editor/CodeBlockNode.d.ts.map +1 -1
  319. package/dist/client/rich-markdown-editor/CodeBlockNode.js +2 -1
  320. package/dist/client/rich-markdown-editor/CodeBlockNode.js.map +1 -1
  321. package/dist/client/rich-markdown-editor/ImageExtension.d.ts.map +1 -1
  322. package/dist/client/rich-markdown-editor/ImageExtension.js +2 -1
  323. package/dist/client/rich-markdown-editor/ImageExtension.js.map +1 -1
  324. package/dist/client/rich-markdown-editor/RegistryBlockNode.d.ts +1 -1
  325. package/dist/client/rich-markdown-editor/RegistryBlockNode.d.ts.map +1 -1
  326. package/dist/client/rich-markdown-editor/RegistryBlockNode.js +1 -1
  327. package/dist/client/rich-markdown-editor/RegistryBlockNode.js.map +1 -1
  328. package/dist/client/rich-markdown-editor/RichMarkdownEditor.d.ts +1 -1
  329. package/dist/client/rich-markdown-editor/SharedRichEditor.d.ts.map +1 -1
  330. package/dist/client/rich-markdown-editor/SharedRichEditor.js +2 -3
  331. package/dist/client/rich-markdown-editor/SharedRichEditor.js.map +1 -1
  332. package/dist/client/rich-markdown-editor/SlashCommandMenu.d.ts +1 -1
  333. package/dist/client/rich-markdown-editor/SlashCommandMenu.d.ts.map +1 -1
  334. package/dist/client/route-state.d.ts +12 -2
  335. package/dist/client/route-state.d.ts.map +1 -1
  336. package/dist/client/route-state.js +1 -1
  337. package/dist/client/route-state.js.map +1 -1
  338. package/dist/client/route-warmup.d.ts +1 -1
  339. package/dist/client/route-warmup.d.ts.map +1 -1
  340. package/dist/client/settings/VoiceTranscriptionSection.js +1 -1
  341. package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
  342. package/dist/client/settings/useBuilderStatus.d.ts +2 -2
  343. package/dist/client/sharing/ShareDialog.d.ts +1 -1
  344. package/dist/client/sharing/ShareDialog.d.ts.map +1 -1
  345. package/dist/client/sse-event-processor.d.ts +8 -0
  346. package/dist/client/sse-event-processor.d.ts.map +1 -1
  347. package/dist/client/sse-event-processor.js +33 -10
  348. package/dist/client/sse-event-processor.js.map +1 -1
  349. package/dist/client/terminal/AgentTerminal.d.ts +1 -1
  350. package/dist/client/terminal/AgentTerminal.d.ts.map +1 -1
  351. package/dist/client/terminal/AgentTerminal.js +4 -2
  352. package/dist/client/terminal/AgentTerminal.js.map +1 -1
  353. package/dist/client/tool-cells/BashCell.d.ts +25 -0
  354. package/dist/client/tool-cells/BashCell.d.ts.map +1 -0
  355. package/dist/client/tool-cells/BashCell.js +49 -0
  356. package/dist/client/tool-cells/BashCell.js.map +1 -0
  357. package/dist/client/tool-cells/EditCell.d.ts +24 -0
  358. package/dist/client/tool-cells/EditCell.d.ts.map +1 -0
  359. package/dist/client/tool-cells/EditCell.js +126 -0
  360. package/dist/client/tool-cells/EditCell.js.map +1 -0
  361. package/dist/client/tool-cells/FilesChangedSummary.d.ts +13 -0
  362. package/dist/client/tool-cells/FilesChangedSummary.d.ts.map +1 -0
  363. package/dist/client/tool-cells/FilesChangedSummary.js +98 -0
  364. package/dist/client/tool-cells/FilesChangedSummary.js.map +1 -0
  365. package/dist/client/tool-cells/WriteCell.d.ts +17 -0
  366. package/dist/client/tool-cells/WriteCell.d.ts.map +1 -0
  367. package/dist/client/tool-cells/WriteCell.js +26 -0
  368. package/dist/client/tool-cells/WriteCell.js.map +1 -0
  369. package/dist/client/tool-cells/index.d.ts +8 -0
  370. package/dist/client/tool-cells/index.d.ts.map +1 -0
  371. package/dist/client/tool-cells/index.js +5 -0
  372. package/dist/client/tool-cells/index.js.map +1 -0
  373. package/dist/client/transcription/BuilderTranscriptionCta.d.ts +1 -1
  374. package/dist/client/transcription/BuilderTranscriptionCta.d.ts.map +1 -1
  375. package/dist/client/use-chat-threads.d.ts +1 -1
  376. package/dist/client/use-chat-threads.d.ts.map +1 -1
  377. package/dist/client/use-chat-threads.js +11 -8
  378. package/dist/client/use-chat-threads.js.map +1 -1
  379. package/dist/client/use-db-sync.d.ts +2 -0
  380. package/dist/client/use-db-sync.d.ts.map +1 -1
  381. package/dist/client/use-db-sync.js +329 -302
  382. package/dist/client/use-db-sync.js.map +1 -1
  383. package/dist/code-agents/transcript-normalizer.d.ts +15 -1
  384. package/dist/code-agents/transcript-normalizer.d.ts.map +1 -1
  385. package/dist/code-agents/transcript-normalizer.js +47 -0
  386. package/dist/code-agents/transcript-normalizer.js.map +1 -1
  387. package/dist/coding-tools/index.d.ts +75 -0
  388. package/dist/coding-tools/index.d.ts.map +1 -1
  389. package/dist/coding-tools/index.js +137 -10
  390. package/dist/coding-tools/index.js.map +1 -1
  391. package/dist/collab/client.d.ts.map +1 -1
  392. package/dist/collab/client.js +15 -9
  393. package/dist/collab/client.js.map +1 -1
  394. package/dist/collab/ydoc-manager.d.ts +1 -1
  395. package/dist/collab/ydoc-manager.d.ts.map +1 -1
  396. package/dist/collab/ydoc-manager.js +1 -1
  397. package/dist/collab/ydoc-manager.js.map +1 -1
  398. package/dist/db/client.d.ts +9 -1
  399. package/dist/db/client.d.ts.map +1 -1
  400. package/dist/db/client.js +204 -48
  401. package/dist/db/client.js.map +1 -1
  402. package/dist/db/create-get-db.d.ts +38 -0
  403. package/dist/db/create-get-db.d.ts.map +1 -1
  404. package/dist/db/create-get-db.js +204 -4
  405. package/dist/db/create-get-db.js.map +1 -1
  406. package/dist/db/migrations.d.ts.map +1 -1
  407. package/dist/db/migrations.js +159 -67
  408. package/dist/db/migrations.js.map +1 -1
  409. package/dist/demo/actions/toggle-demo-mode.d.ts +6 -1
  410. package/dist/demo/actions/toggle-demo-mode.d.ts.map +1 -1
  411. package/dist/deploy/build.d.ts.map +1 -1
  412. package/dist/deploy/build.js +80 -39
  413. package/dist/deploy/build.js.map +1 -1
  414. package/dist/deploy/workspace-deploy.js +20 -10
  415. package/dist/deploy/workspace-deploy.js.map +1 -1
  416. package/dist/extensions/schema.d.ts +51 -51
  417. package/dist/extensions/slots/schema.d.ts +13 -13
  418. package/dist/file-upload/actions/upload-image.d.ts +26 -1
  419. package/dist/file-upload/actions/upload-image.d.ts.map +1 -1
  420. package/dist/file-upload/index.d.ts +1 -1
  421. package/dist/file-upload/index.d.ts.map +1 -1
  422. package/dist/file-upload/index.js +1 -1
  423. package/dist/file-upload/index.js.map +1 -1
  424. package/dist/file-upload/pre-upload-attachments.d.ts +37 -0
  425. package/dist/file-upload/pre-upload-attachments.d.ts.map +1 -1
  426. package/dist/file-upload/pre-upload-attachments.js +79 -19
  427. package/dist/file-upload/pre-upload-attachments.js.map +1 -1
  428. package/dist/index.d.ts +1 -1
  429. package/dist/index.d.ts.map +1 -1
  430. package/dist/index.js.map +1 -1
  431. package/dist/integrations/adapters/slack.js +1 -1
  432. package/dist/integrations/adapters/slack.js.map +1 -1
  433. package/dist/integrations/plugin.js +1 -1
  434. package/dist/integrations/plugin.js.map +1 -1
  435. package/dist/jobs/scheduler.js +70 -21
  436. package/dist/jobs/scheduler.js.map +1 -1
  437. package/dist/mcp/actions/create-org-service-token.d.ts +14 -0
  438. package/dist/mcp/actions/create-org-service-token.d.ts.map +1 -0
  439. package/dist/mcp/actions/create-org-service-token.js +74 -0
  440. package/dist/mcp/actions/create-org-service-token.js.map +1 -0
  441. package/dist/mcp/actions/list-org-service-tokens.d.ts +17 -0
  442. package/dist/mcp/actions/list-org-service-tokens.d.ts.map +1 -0
  443. package/dist/mcp/actions/list-org-service-tokens.js +42 -0
  444. package/dist/mcp/actions/list-org-service-tokens.js.map +1 -0
  445. package/dist/mcp/actions/revoke-org-service-token.d.ts +7 -0
  446. package/dist/mcp/actions/revoke-org-service-token.d.ts.map +1 -0
  447. package/dist/mcp/actions/revoke-org-service-token.js +28 -0
  448. package/dist/mcp/actions/revoke-org-service-token.js.map +1 -0
  449. package/dist/mcp/actions/service-token-access.d.ts +24 -0
  450. package/dist/mcp/actions/service-token-access.d.ts.map +1 -0
  451. package/dist/mcp/actions/service-token-access.js +63 -0
  452. package/dist/mcp/actions/service-token-access.js.map +1 -0
  453. package/dist/mcp/build-server.d.ts +42 -11
  454. package/dist/mcp/build-server.d.ts.map +1 -1
  455. package/dist/mcp/build-server.js +53 -3
  456. package/dist/mcp/build-server.js.map +1 -1
  457. package/dist/mcp/connect-route.d.ts +35 -0
  458. package/dist/mcp/connect-route.d.ts.map +1 -1
  459. package/dist/mcp/connect-route.js +57 -2
  460. package/dist/mcp/connect-route.js.map +1 -1
  461. package/dist/mcp/connect-store.d.ts +43 -0
  462. package/dist/mcp/connect-store.d.ts.map +1 -1
  463. package/dist/mcp/connect-store.js +129 -12
  464. package/dist/mcp/connect-store.js.map +1 -1
  465. package/dist/mcp/oauth-token.d.ts +10 -0
  466. package/dist/mcp/oauth-token.d.ts.map +1 -1
  467. package/dist/mcp/oauth-token.js +2 -0
  468. package/dist/mcp/oauth-token.js.map +1 -1
  469. package/dist/mcp/server.d.ts.map +1 -1
  470. package/dist/mcp/server.js +3 -0
  471. package/dist/mcp/server.js.map +1 -1
  472. package/dist/mcp-client/routes.js +1 -1
  473. package/dist/mcp-client/routes.js.map +1 -1
  474. package/dist/org/context.d.ts +4 -0
  475. package/dist/org/context.d.ts.map +1 -1
  476. package/dist/org/context.js +10 -0
  477. package/dist/org/context.js.map +1 -1
  478. package/dist/org/handlers.d.ts +11 -7
  479. package/dist/org/handlers.d.ts.map +1 -1
  480. package/dist/org/handlers.js +0 -8
  481. package/dist/org/handlers.js.map +1 -1
  482. package/dist/org/migrations.d.ts.map +1 -1
  483. package/dist/org/migrations.js +8 -0
  484. package/dist/org/migrations.js.map +1 -1
  485. package/dist/org/schema.d.ts +15 -15
  486. package/dist/progress/actions.d.ts.map +1 -1
  487. package/dist/progress/actions.js +13 -5
  488. package/dist/progress/actions.js.map +1 -1
  489. package/dist/provider-api/actions/delete-staged-dataset.d.ts +9 -0
  490. package/dist/provider-api/actions/delete-staged-dataset.d.ts.map +1 -0
  491. package/dist/provider-api/actions/delete-staged-dataset.js +35 -0
  492. package/dist/provider-api/actions/delete-staged-dataset.js.map +1 -0
  493. package/dist/provider-api/actions/list-staged-datasets.d.ts +15 -0
  494. package/dist/provider-api/actions/list-staged-datasets.d.ts.map +1 -0
  495. package/dist/provider-api/actions/list-staged-datasets.js +41 -0
  496. package/dist/provider-api/actions/list-staged-datasets.js.map +1 -0
  497. package/dist/provider-api/actions/query-staged-dataset.d.ts +29 -0
  498. package/dist/provider-api/actions/query-staged-dataset.d.ts.map +1 -0
  499. package/dist/provider-api/actions/query-staged-dataset.js +116 -0
  500. package/dist/provider-api/actions/query-staged-dataset.js.map +1 -0
  501. package/dist/provider-api/custom-registry.d.ts.map +1 -1
  502. package/dist/provider-api/custom-registry.js.map +1 -1
  503. package/dist/provider-api/index.d.ts +10 -10
  504. package/dist/provider-api/index.js +0 -5
  505. package/dist/provider-api/index.js.map +1 -1
  506. package/dist/provider-api/staged-datasets-aggregate.d.ts +46 -0
  507. package/dist/provider-api/staged-datasets-aggregate.d.ts.map +1 -0
  508. package/dist/provider-api/staged-datasets-aggregate.js +209 -0
  509. package/dist/provider-api/staged-datasets-aggregate.js.map +1 -0
  510. package/dist/provider-api/staged-datasets-store.d.ts +76 -0
  511. package/dist/provider-api/staged-datasets-store.d.ts.map +1 -0
  512. package/dist/provider-api/staged-datasets-store.js +319 -0
  513. package/dist/provider-api/staged-datasets-store.js.map +1 -0
  514. package/dist/provider-api/staging.d.ts +100 -0
  515. package/dist/provider-api/staging.d.ts.map +1 -0
  516. package/dist/provider-api/staging.js +281 -0
  517. package/dist/provider-api/staging.js.map +1 -0
  518. package/dist/resources/handlers.d.ts.map +1 -1
  519. package/dist/resources/handlers.js +13 -1
  520. package/dist/resources/handlers.js.map +1 -1
  521. package/dist/scripts/call-agent.d.ts.map +1 -1
  522. package/dist/scripts/call-agent.js +1 -2
  523. package/dist/scripts/call-agent.js.map +1 -1
  524. package/dist/scripts/resources/migrate-learnings.d.ts +1 -1
  525. package/dist/scripts/resources/migrate-learnings.d.ts.map +1 -1
  526. package/dist/scripts/resources/migrate-learnings.js +1 -1
  527. package/dist/scripts/resources/migrate-learnings.js.map +1 -1
  528. package/dist/secrets/schema.d.ts +7 -7
  529. package/dist/server/action-discovery.d.ts.map +1 -1
  530. package/dist/server/action-discovery.js +14 -0
  531. package/dist/server/action-discovery.js.map +1 -1
  532. package/dist/server/action-routes.d.ts.map +1 -1
  533. package/dist/server/action-routes.js +3 -2
  534. package/dist/server/action-routes.js.map +1 -1
  535. package/dist/server/agent-chat-plugin.d.ts +33 -0
  536. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  537. package/dist/server/agent-chat-plugin.js +251 -180
  538. package/dist/server/agent-chat-plugin.js.map +1 -1
  539. package/dist/server/agent-discovery.d.ts.map +1 -1
  540. package/dist/server/agent-discovery.js +13 -16
  541. package/dist/server/agent-discovery.js.map +1 -1
  542. package/dist/server/agent-teams-run-queue.d.ts +31 -8
  543. package/dist/server/agent-teams-run-queue.d.ts.map +1 -1
  544. package/dist/server/agent-teams-run-queue.js +61 -18
  545. package/dist/server/agent-teams-run-queue.js.map +1 -1
  546. package/dist/server/agent-teams.d.ts +27 -1
  547. package/dist/server/agent-teams.d.ts.map +1 -1
  548. package/dist/server/agent-teams.js +214 -14
  549. package/dist/server/agent-teams.js.map +1 -1
  550. package/dist/server/app-base-path.d.ts +20 -0
  551. package/dist/server/app-base-path.d.ts.map +1 -1
  552. package/dist/server/app-base-path.js +36 -0
  553. package/dist/server/app-base-path.js.map +1 -1
  554. package/dist/server/attachment-actions.d.ts +43 -0
  555. package/dist/server/attachment-actions.d.ts.map +1 -0
  556. package/dist/server/attachment-actions.js +214 -0
  557. package/dist/server/attachment-actions.js.map +1 -0
  558. package/dist/server/auth.js +1 -1
  559. package/dist/server/auth.js.map +1 -1
  560. package/dist/server/complete-text.d.ts +56 -0
  561. package/dist/server/complete-text.d.ts.map +1 -0
  562. package/dist/server/complete-text.js +147 -0
  563. package/dist/server/complete-text.js.map +1 -0
  564. package/dist/server/core-routes-plugin.d.ts +1 -0
  565. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  566. package/dist/server/core-routes-plugin.js +37 -27
  567. package/dist/server/core-routes-plugin.js.map +1 -1
  568. package/dist/server/cors-origins.d.ts.map +1 -1
  569. package/dist/server/cors-origins.js +6 -1
  570. package/dist/server/cors-origins.js.map +1 -1
  571. package/dist/server/create-server.d.ts.map +1 -1
  572. package/dist/server/create-server.js +2 -1
  573. package/dist/server/create-server.js.map +1 -1
  574. package/dist/server/csrf.d.ts +1 -1
  575. package/dist/server/csrf.d.ts.map +1 -1
  576. package/dist/server/email-actions.d.ts +19 -0
  577. package/dist/server/email-actions.d.ts.map +1 -0
  578. package/dist/server/email-actions.js +191 -0
  579. package/dist/server/email-actions.js.map +1 -0
  580. package/dist/server/embed-route.js +1 -1
  581. package/dist/server/embed-route.js.map +1 -1
  582. package/dist/server/embed-session.d.ts.map +1 -1
  583. package/dist/server/embed-session.js +5 -1
  584. package/dist/server/embed-session.js.map +1 -1
  585. package/dist/server/entry-server.d.ts +24 -0
  586. package/dist/server/entry-server.d.ts.map +1 -0
  587. package/dist/server/entry-server.js +54 -0
  588. package/dist/server/entry-server.js.map +1 -0
  589. package/dist/server/framework-request-handler.d.ts.map +1 -1
  590. package/dist/server/framework-request-handler.js +2 -10
  591. package/dist/server/framework-request-handler.js.map +1 -1
  592. package/dist/server/google-oauth.d.ts.map +1 -1
  593. package/dist/server/google-oauth.js +2 -9
  594. package/dist/server/google-oauth.js.map +1 -1
  595. package/dist/server/google-realtime-session.d.ts.map +1 -1
  596. package/dist/server/google-realtime-session.js +6 -4
  597. package/dist/server/google-realtime-session.js.map +1 -1
  598. package/dist/server/h3-helpers.d.ts +39 -0
  599. package/dist/server/h3-helpers.d.ts.map +1 -1
  600. package/dist/server/h3-helpers.js +104 -1
  601. package/dist/server/h3-helpers.js.map +1 -1
  602. package/dist/server/index.d.ts +2 -1
  603. package/dist/server/index.d.ts.map +1 -1
  604. package/dist/server/index.js +2 -1
  605. package/dist/server/index.js.map +1 -1
  606. package/dist/server/onboarding-html.d.ts.map +1 -1
  607. package/dist/server/onboarding-html.js +1 -8
  608. package/dist/server/onboarding-html.js.map +1 -1
  609. package/dist/server/open-route.d.ts.map +1 -1
  610. package/dist/server/open-route.js +1 -0
  611. package/dist/server/open-route.js.map +1 -1
  612. package/dist/server/prompts/framework-core-compact.d.ts +19 -0
  613. package/dist/server/prompts/framework-core-compact.d.ts.map +1 -0
  614. package/dist/server/prompts/framework-core-compact.js +69 -0
  615. package/dist/server/prompts/framework-core-compact.js.map +1 -0
  616. package/dist/server/prompts/framework-core.d.ts +26 -0
  617. package/dist/server/prompts/framework-core.d.ts.map +1 -0
  618. package/dist/server/prompts/framework-core.js +130 -0
  619. package/dist/server/prompts/framework-core.js.map +1 -0
  620. package/dist/server/prompts/index.d.ts +9 -0
  621. package/dist/server/prompts/index.d.ts.map +1 -0
  622. package/dist/server/prompts/index.js +9 -0
  623. package/dist/server/prompts/index.js.map +1 -0
  624. package/dist/server/prompts/model-overlays.d.ts +18 -0
  625. package/dist/server/prompts/model-overlays.d.ts.map +1 -0
  626. package/dist/server/prompts/model-overlays.js +46 -0
  627. package/dist/server/prompts/model-overlays.js.map +1 -0
  628. package/dist/server/prompts/shared-rules.d.ts +29 -0
  629. package/dist/server/prompts/shared-rules.d.ts.map +1 -0
  630. package/dist/server/prompts/shared-rules.js +54 -0
  631. package/dist/server/prompts/shared-rules.js.map +1 -0
  632. package/dist/server/security-headers.d.ts +7 -1
  633. package/dist/server/security-headers.d.ts.map +1 -1
  634. package/dist/server/security-headers.js +11 -0
  635. package/dist/server/security-headers.js.map +1 -1
  636. package/dist/server/ssr-handler.d.ts.map +1 -1
  637. package/dist/server/ssr-handler.js +135 -46
  638. package/dist/server/ssr-handler.js.map +1 -1
  639. package/dist/server/transcribe-voice.d.ts.map +1 -1
  640. package/dist/server/transcribe-voice.js +7 -4
  641. package/dist/server/transcribe-voice.js.map +1 -1
  642. package/dist/settings/store.d.ts.map +1 -1
  643. package/dist/settings/store.js +9 -0
  644. package/dist/settings/store.js.map +1 -1
  645. package/dist/shared/markdown-block-split.d.ts +39 -0
  646. package/dist/shared/markdown-block-split.d.ts.map +1 -0
  647. package/dist/shared/markdown-block-split.js +97 -0
  648. package/dist/shared/markdown-block-split.js.map +1 -0
  649. package/dist/shared/reasoning-effort.js +13 -1
  650. package/dist/shared/reasoning-effort.js.map +1 -1
  651. package/dist/shared/streaming-text-smoothing.d.ts +18 -0
  652. package/dist/shared/streaming-text-smoothing.d.ts.map +1 -1
  653. package/dist/shared/streaming-text-smoothing.js +70 -4
  654. package/dist/shared/streaming-text-smoothing.js.map +1 -1
  655. package/dist/sharing/actions/list-resource-shares.d.ts +24 -1
  656. package/dist/sharing/actions/list-resource-shares.d.ts.map +1 -1
  657. package/dist/sharing/actions/set-resource-visibility.d.ts +8 -1
  658. package/dist/sharing/actions/set-resource-visibility.d.ts.map +1 -1
  659. package/dist/sharing/actions/share-resource.d.ts +12 -1
  660. package/dist/sharing/actions/share-resource.d.ts.map +1 -1
  661. package/dist/sharing/actions/unshare-resource.d.ts +8 -1
  662. package/dist/sharing/actions/unshare-resource.d.ts.map +1 -1
  663. package/dist/sharing/schema.d.ts +10 -10
  664. package/dist/styles/agent-conversation.css +239 -0
  665. package/dist/templates/default/.agents/skills/delegate-to-agent/SKILL.md +50 -2
  666. package/dist/templates/default/AGENTS.md +1 -1
  667. package/dist/templates/default/DEVELOPING.md +19 -0
  668. package/dist/templates/default/app/entry.client.tsx +4 -1
  669. package/dist/templates/default/app/entry.server.tsx +4 -56
  670. package/dist/templates/default/app/global.css +3 -2
  671. package/dist/templates/default/app/root.tsx +8 -24
  672. package/dist/templates/default/app/routes/_index.tsx +0 -13
  673. package/dist/templates/default/package.json +6 -5
  674. package/dist/templates/default/tsconfig.json +2 -1
  675. package/dist/templates/starter-shell-sync.spec.ts +118 -0
  676. package/dist/templates/ui-primitives-sync.spec.ts +399 -0
  677. package/dist/templates/workspace-core/.agents/skills/delegate-to-agent/SKILL.md +50 -2
  678. package/dist/terminal/pty-server.js +1 -1
  679. package/dist/terminal/pty-server.js.map +1 -1
  680. package/dist/triggers/dispatcher.js +1 -1
  681. package/dist/triggers/dispatcher.js.map +1 -1
  682. package/dist/usage/store.d.ts.map +1 -1
  683. package/dist/usage/store.js +60 -7
  684. package/dist/usage/store.js.map +1 -1
  685. package/dist/vite/client.d.ts.map +1 -1
  686. package/dist/vite/client.js +44 -12
  687. package/dist/vite/client.js.map +1 -1
  688. package/dist/workspace-files/schema.d.ts +8 -8
  689. package/dist/workspace-files/tool.d.ts.map +1 -1
  690. package/dist/workspace-files/tool.js +0 -1
  691. package/dist/workspace-files/tool.js.map +1 -1
  692. package/docs/content/a2a-protocol.md +18 -12
  693. package/docs/content/actions.md +42 -10
  694. package/docs/content/agent-mentions.md +7 -8
  695. package/docs/content/agent-teams.md +23 -37
  696. package/docs/content/agent-web-surfaces.md +18 -9
  697. package/docs/content/authentication.md +6 -17
  698. package/docs/content/automations.md +43 -15
  699. package/docs/content/cli-adapters.md +25 -24
  700. package/docs/content/client.md +66 -17
  701. package/docs/content/cloneable-saas.md +19 -23
  702. package/docs/content/code-agents-ui.md +3 -31
  703. package/docs/content/components.md +308 -0
  704. package/docs/content/context-awareness.md +4 -0
  705. package/docs/content/creating-templates.md +4 -2
  706. package/docs/content/cross-app-sso.md +45 -19
  707. package/docs/content/database.md +26 -1
  708. package/docs/content/deployment.md +3 -1
  709. package/docs/content/dispatch.md +9 -37
  710. package/docs/content/drop-in-agent.md +123 -2
  711. package/docs/content/embedding-sdk.md +35 -0
  712. package/docs/content/extensions.md +2 -2
  713. package/docs/content/external-agents.md +86 -171
  714. package/docs/content/faq.md +6 -27
  715. package/docs/content/frames.md +9 -12
  716. package/docs/content/getting-started.md +80 -77
  717. package/docs/content/key-concepts.md +29 -19
  718. package/docs/content/mcp-apps.md +103 -0
  719. package/docs/content/mcp-clients.md +2 -2
  720. package/docs/content/mcp-protocol.md +40 -17
  721. package/docs/content/messaging.md +11 -4
  722. package/docs/content/migration-workbench.md +4 -47
  723. package/docs/content/multi-app-workspace.md +48 -17
  724. package/docs/content/multi-tenancy.md +1 -1
  725. package/docs/content/notifications.md +8 -6
  726. package/docs/content/observability.md +26 -15
  727. package/docs/content/onboarding.md +7 -1
  728. package/docs/content/pr-visual-recap.md +203 -23
  729. package/docs/content/progress.md +5 -5
  730. package/docs/content/pure-agent-apps.md +3 -1
  731. package/docs/content/real-time-collaboration.md +106 -0
  732. package/docs/content/recurring-jobs.md +17 -1
  733. package/docs/content/security.md +17 -3
  734. package/docs/content/server.md +39 -3
  735. package/docs/content/sharing.md +20 -1
  736. package/docs/content/skills-guide.md +151 -125
  737. package/docs/content/template-analytics.md +8 -0
  738. package/docs/content/template-assets.md +2 -0
  739. package/docs/content/template-brain.md +59 -3
  740. package/docs/content/template-calendar.md +8 -0
  741. package/docs/content/template-clips.md +11 -2
  742. package/docs/content/template-content.md +24 -4
  743. package/docs/content/template-design.md +19 -17
  744. package/docs/content/template-dispatch.md +2 -0
  745. package/docs/content/template-forms.md +28 -1
  746. package/docs/content/template-mail.md +17 -0
  747. package/docs/content/template-plan.md +177 -10
  748. package/docs/content/template-slides.md +51 -12
  749. package/docs/content/template-videos.md +17 -0
  750. package/docs/content/tracking.md +17 -13
  751. package/docs/content/using-your-agent.md +15 -5
  752. package/docs/content/voice-input.md +1 -1
  753. package/docs/content/what-is-agent-native.md +5 -6
  754. package/docs/content/workspace-connections.md +138 -424
  755. package/docs/content/workspace-management.md +12 -128
  756. package/docs/content/workspace.md +125 -199
  757. package/docs/content/writing-agent-instructions.md +17 -1
  758. package/package.json +25 -6
  759. package/src/templates/default/.agents/skills/delegate-to-agent/SKILL.md +50 -2
  760. package/src/templates/default/AGENTS.md +1 -1
  761. package/src/templates/default/DEVELOPING.md +19 -0
  762. package/src/templates/default/app/entry.client.tsx +4 -1
  763. package/src/templates/default/app/entry.server.tsx +4 -56
  764. package/src/templates/default/app/global.css +3 -2
  765. package/src/templates/default/app/root.tsx +8 -24
  766. package/src/templates/default/app/routes/_index.tsx +0 -13
  767. package/src/templates/default/package.json +6 -5
  768. package/src/templates/default/tsconfig.json +2 -1
  769. package/src/templates/starter-shell-sync.spec.ts +118 -0
  770. package/src/templates/ui-primitives-sync.spec.ts +399 -0
  771. package/src/templates/workspace-core/.agents/skills/delegate-to-agent/SKILL.md +50 -2
  772. package/tsconfig.base.json +2 -10
  773. package/dist/cli/app-skill.d.ts +0 -157
  774. package/dist/cli/app-skill.d.ts.map +0 -1
  775. package/dist/cli/audit-agent-web.d.ts +0 -2
  776. package/dist/cli/audit-agent-web.d.ts.map +0 -1
  777. package/dist/cli/code-agent-connector.d.ts +0 -17
  778. package/dist/cli/code-agent-connector.d.ts.map +0 -1
  779. package/dist/cli/code.d.ts +0 -66
  780. package/dist/cli/code.d.ts.map +0 -1
  781. package/dist/cli/connect.d.ts +0 -140
  782. package/dist/cli/connect.d.ts.map +0 -1
  783. package/dist/cli/context-xray-local.d.ts +0 -16
  784. package/dist/cli/context-xray-local.d.ts.map +0 -1
  785. package/dist/cli/create-workspace.d.ts +0 -8
  786. package/dist/cli/create-workspace.d.ts.map +0 -1
  787. package/dist/cli/index.d.ts +0 -3
  788. package/dist/cli/index.d.ts.map +0 -1
  789. package/dist/cli/info.d.ts +0 -2
  790. package/dist/cli/info.d.ts.map +0 -1
  791. package/dist/cli/mcp-config-writers.d.ts +0 -82
  792. package/dist/cli/mcp-config-writers.d.ts.map +0 -1
  793. package/dist/cli/mcp.d.ts +0 -16
  794. package/dist/cli/mcp.d.ts.map +0 -1
  795. package/dist/cli/migrate.d.ts +0 -38
  796. package/dist/cli/migrate.d.ts.map +0 -1
  797. package/dist/cli/plan-local.d.ts +0 -43
  798. package/dist/cli/plan-local.d.ts.map +0 -1
  799. package/dist/cli/plan-publish-store.d.ts +0 -62
  800. package/dist/cli/plan-publish-store.d.ts.map +0 -1
  801. package/dist/cli/pr-visual-recap-workflow.d.ts +0 -11
  802. package/dist/cli/pr-visual-recap-workflow.d.ts.map +0 -1
  803. package/dist/cli/recap.d.ts +0 -297
  804. package/dist/cli/recap.d.ts.map +0 -1
  805. package/dist/cli/skills.d.ts +0 -162
  806. package/dist/cli/skills.d.ts.map +0 -1
  807. package/dist/cli/workspace-dev.d.ts +0 -96
  808. package/dist/cli/workspace-dev.d.ts.map +0 -1
@@ -1,23 +1,43 @@
1
1
  import { createToolSearchEntry, TOOL_SEARCH_ACTION_NAME, } from "../agent/tool-search.js";
2
- import { createCodingToolRegistry, isReadOnlyShellCommand, runCodingCommand, truncateCodingOutput, } from "../coding-tools/index.js";
2
+ import { createCodingToolRegistry, isReadOnlyShellCommand, runCodingCommand, truncateBashOutput, truncateCodingOutput, } from "../coding-tools/index.js";
3
3
  import { buildMergedConfig, McpClientManager, mcpToolsToActionEntries, } from "../mcp-client/index.js";
4
4
  import { runWithRequestContext } from "../server/request-context.js";
5
5
  import { actionsToEngineTools, runAgentLoop, } from "../agent/production-agent.js";
6
6
  import { resolveEngine, getStoredModelForEngine, registerBuiltinEngines, } from "../agent/engine/index.js";
7
7
  import { PROVIDER_ENV_VARS } from "../agent/engine/provider-env-vars.js";
8
+ import { DEFAULT_AGENT_MAX_ITERATIONS } from "../agent/loop-settings.js";
9
+ import { readAgentsBundleFromFs, generateSkillsPromptBlock, } from "../server/agents-bundle.js";
8
10
  import { isReasoningEffort, } from "../shared/reasoning-effort.js";
9
11
  import { formatPromptWithAttachments, } from "../code-agents/prompt-attachments.js";
10
- import { appendCodeAgentTranscriptEvent, dequeueCodeAgentFollowUp, getCodeAgentRunRecord, listCodeAgentTranscriptEvents, updateCodeAgentRunRecord, } from "./code-agent-runs.js";
12
+ import { addCodeAgentCommandToAllowlist, appendCodeAgentTranscriptEvent, dequeueCodeAgentFollowUp, getCodeAgentRunRecord, isCodeAgentCommandAllowed, listCodeAgentTranscriptEvents, updateCodeAgentRunRecord, } from "./code-agent-runs.js";
11
13
  import { createCodeAgentOutputSmoother } from "./code-agent-output-smoother.js";
12
14
  const DEFAULT_COMMAND_TIMEOUT_MS = 120_000;
13
15
  const MAX_TOOL_OUTPUT_CHARS = 50_000;
14
16
  const MAX_FILE_READ_CHARS = 120_000;
17
+ /**
18
+ * Number of most-recent transcript events reconstructed as native
19
+ * EngineMessage objects (with proper tool-call / tool-result pairing).
20
+ * Events older than this cap are summarised into a single compact text
21
+ * preamble so the model retains broad context without token waste.
22
+ */
23
+ const STRUCTURED_HISTORY_RECENT_EVENTS = 40;
24
+ /**
25
+ * Per-tool-result text cap when reconstructing history. Matches the overall
26
+ * tool-output cap so old results don't balloon the context.
27
+ */
28
+ const STRUCTURED_HISTORY_RESULT_CAP = MAX_TOOL_OUTPUT_CHARS;
15
29
  export async function executeCodeAgentRun(options) {
16
30
  const existing = getCodeAgentRunRecord(options.runId);
17
31
  if (!existing)
18
32
  return null;
19
33
  const prompt = options.prompt ?? latestUserPrompt(existing.id);
20
- const executionPrompt = formatPromptWithAttachments(prompt, options.attachments ?? latestUserPromptAttachments(existing.id, prompt));
34
+ const rawAttachments = options.attachments ?? latestUserPromptAttachments(existing.id, prompt);
35
+ // Split attachments: images (dataUrl) go as engine image parts; text/file
36
+ // attachments are still inlined into the prompt text. This prevents 2 MB
37
+ // images from consuming ~700 K tokens of garbage when treated as plain text.
38
+ const imageAttachments = rawAttachments.filter((a) => a.dataUrl);
39
+ const textOnlyAttachments = rawAttachments.filter((a) => !a.dataUrl);
40
+ const executionPrompt = formatPromptWithAttachments(prompt, textOnlyAttachments);
21
41
  if (!prompt) {
22
42
  appendCodeAgentTranscriptEvent({
23
43
  runId: existing.id,
@@ -95,14 +115,23 @@ export async function executeCodeAgentRun(options) {
95
115
  const reasoningEffort = options.reasoningEffort ?? metadataReasoningEffort(existing);
96
116
  const cwd = existing.cwd || process.cwd();
97
117
  const permissionMode = existing.permissionMode ?? "full-auto";
98
- const actions = createLocalCodeAgentActions(cwd, permissionMode, existing.id);
118
+ // Holds structured metadata emitted by the coding tools side-channel.
119
+ // Keyed by tool name; consumed when the matching tool_start / tool_done fires.
120
+ const pendingToolMeta = new Map();
121
+ const actions = createLocalCodeAgentActions(cwd, permissionMode, existing.id, (toolName, _phase, meta) => {
122
+ // Both "start" and "done" phases update the map; done has richer data.
123
+ pendingToolMeta.set(toolName, meta);
124
+ }, (chunk) => {
125
+ // Stream incremental bash output to stdout for the terminal smoother
126
+ options.stdout?.write(chunk);
127
+ });
99
128
  const mcpManager = await startCodeAgentMcpManager(existing.id);
100
129
  if (mcpManager) {
101
130
  Object.assign(actions, mcpToolsToActionEntries(mcpManager));
102
131
  }
103
132
  actions[TOOL_SEARCH_ACTION_NAME] = createToolSearchEntry(() => actions);
104
133
  const tools = actionsToEngineTools(actions);
105
- const messages = buildCodeAgentMessages(existing, executionPrompt);
134
+ const messages = buildCodeAgentMessages(existing, executionPrompt, imageAttachments);
106
135
  const controller = new AbortController();
107
136
  const abortFromParent = () => controller.abort();
108
137
  if (options.signal) {
@@ -113,12 +142,43 @@ export async function executeCodeAgentRun(options) {
113
142
  }
114
143
  let assistantText = "";
115
144
  const outputSmoother = createCodeAgentOutputSmoother(options.stdout);
145
+ // Accumulate thinking text across deltas so we can persist a single event
146
+ // per reasoning block rather than one event per delta chunk.
147
+ let pendingThinkingText = "";
148
+ let thinkingFlushTimer;
149
+ const runId = existing.id;
150
+ function flushThinkingEvent() {
151
+ thinkingFlushTimer = undefined;
152
+ const text = pendingThinkingText.trim();
153
+ pendingThinkingText = "";
154
+ if (!text)
155
+ return;
156
+ appendCodeAgentTranscriptEvent({
157
+ runId,
158
+ kind: "status",
159
+ message: text,
160
+ metadata: { type: "thinking" },
161
+ });
162
+ }
116
163
  const send = (event) => {
117
164
  if (event.type === "text") {
165
+ // Flush any buffered thinking when real content arrives.
166
+ if (thinkingFlushTimer !== undefined) {
167
+ clearTimeout(thinkingFlushTimer);
168
+ flushThinkingEvent();
169
+ }
118
170
  assistantText += event.text;
119
171
  outputSmoother.write(event.text);
120
172
  return;
121
173
  }
174
+ if (event.type === "thinking") {
175
+ pendingThinkingText += event.text;
176
+ // Debounce: flush 300ms after the last delta so rapid chunks are merged.
177
+ if (thinkingFlushTimer !== undefined)
178
+ clearTimeout(thinkingFlushTimer);
179
+ thinkingFlushTimer = setTimeout(flushThinkingEvent, 300);
180
+ return;
181
+ }
122
182
  if (event.type === "activity") {
123
183
  appendCodeAgentTranscriptEvent({
124
184
  runId: existing.id,
@@ -129,15 +189,24 @@ export async function executeCodeAgentRun(options) {
129
189
  return;
130
190
  }
131
191
  if (event.type === "tool_start") {
192
+ const startMeta = pendingToolMeta.get(event.tool ?? "");
132
193
  appendCodeAgentTranscriptEvent({
133
194
  runId: existing.id,
134
195
  kind: "status",
135
196
  message: `Running ${event.tool}.`,
136
- metadata: { type: "tool_start", tool: event.tool, input: event.input },
197
+ metadata: {
198
+ type: "tool_start",
199
+ tool: event.tool,
200
+ input: event.input,
201
+ ...(startMeta ? { structuredMeta: startMeta } : {}),
202
+ },
137
203
  });
138
204
  return;
139
205
  }
140
206
  if (event.type === "tool_done") {
207
+ const pendingMeta = pendingToolMeta.get(event.tool ?? "");
208
+ if (pendingMeta)
209
+ pendingToolMeta.delete(event.tool ?? "");
141
210
  appendCodeAgentTranscriptEvent({
142
211
  runId: existing.id,
143
212
  kind: "status",
@@ -145,8 +214,9 @@ export async function executeCodeAgentRun(options) {
145
214
  metadata: {
146
215
  type: "tool_done",
147
216
  tool: event.tool,
148
- result: truncateCodingOutput(event.result, 4000),
217
+ result: truncateBashOutput(truncateCodingOutput(event.result, MAX_TOOL_OUTPUT_CHARS)),
149
218
  ...(event.mcpApp ? { mcpApp: event.mcpApp } : {}),
219
+ ...(pendingMeta ? { structuredMeta: pendingMeta } : {}),
150
220
  },
151
221
  });
152
222
  return;
@@ -160,19 +230,31 @@ export async function executeCodeAgentRun(options) {
160
230
  });
161
231
  }
162
232
  };
233
+ let loopUsage = null;
163
234
  try {
164
- await runWithOptionalCodeAgentRequestContext(existing, () => runAgentLoop({
235
+ const systemPrompt = await buildCodeAgentSystemPrompt(cwd, permissionMode);
236
+ const usageResult = await runWithOptionalCodeAgentRequestContext(existing, () => runAgentLoop({
165
237
  engine,
166
238
  model,
167
- systemPrompt: codeAgentSystemPrompt(cwd, permissionMode),
239
+ systemPrompt,
168
240
  tools,
169
241
  actions,
170
242
  messages,
171
243
  send,
172
244
  signal: controller.signal,
173
- maxIterations: 12,
245
+ maxIterations: DEFAULT_AGENT_MAX_ITERATIONS,
174
246
  reasoningEffort,
175
247
  }));
248
+ loopUsage = usageResult ?? null;
249
+ // Persist cumulative token totals from this turn into the run record so
250
+ // the UI can display per-run usage statistics.
251
+ if (loopUsage) {
252
+ updateCodeAgentRunRecord(existing.id, (record) => ({
253
+ metadata: {
254
+ tokenUsage: accumulateTokenUsage(record.metadata?.tokenUsage, loopUsage),
255
+ },
256
+ }));
257
+ }
176
258
  await outputSmoother.flush();
177
259
  if (assistantText.trim()) {
178
260
  options.stdout?.write("\n");
@@ -296,6 +378,10 @@ export async function executeCodeAgentRun(options) {
296
378
  });
297
379
  }
298
380
  finally {
381
+ if (thinkingFlushTimer !== undefined) {
382
+ clearTimeout(thinkingFlushTimer);
383
+ flushThinkingEvent();
384
+ }
299
385
  outputSmoother.cancel();
300
386
  options.signal?.removeEventListener("abort", abortFromParent);
301
387
  await mcpManager?.stop().catch(() => undefined);
@@ -305,6 +391,24 @@ export async function executeCodeAgentRun(options) {
305
391
  export async function executeExistingCodeAgentRun(runId, options = {}) {
306
392
  return executeCodeAgentRun({ ...options, runId, appendUserEvent: false });
307
393
  }
394
+ /**
395
+ * Add the pending approval command to the per-project allowlist, then approve
396
+ * and auto-resume. Future occurrences of this exact command will bypass the
397
+ * approval gate without prompting.
398
+ */
399
+ export async function executeApproveAlwaysCodeAgentApproval(runId, options = {}) {
400
+ const approval = getPendingApproval(runId);
401
+ if (approval?.command) {
402
+ addCodeAgentCommandToAllowlist(approval.command);
403
+ appendCodeAgentTranscriptEvent({
404
+ runId,
405
+ kind: "status",
406
+ message: `Command added to allowlist: ${approval.command}`,
407
+ metadata: { type: "allowlist-added", command: approval.command },
408
+ });
409
+ }
410
+ return executePendingCodeAgentApproval(runId, options);
411
+ }
308
412
  export async function executePendingCodeAgentApproval(runId, options = {}) {
309
413
  const record = getCodeAgentRunRecord(runId);
310
414
  if (!record)
@@ -360,24 +464,19 @@ export async function executePendingCodeAgentApproval(runId, options = {}) {
360
464
  kind: "status",
361
465
  message: summary,
362
466
  metadata: {
363
- status: result.code === 0 ? "paused" : "errored",
467
+ status: "running",
364
468
  phase: "approval-complete",
365
469
  approvalId: approval.id,
366
470
  exitCode: result.code,
367
471
  timedOut: result.timedOut,
368
472
  },
369
473
  });
370
- return updateCodeAgentRunRecord(runId, {
371
- status: result.code === 0 ? "paused" : "errored",
372
- phase: result.code === 0 ? "approval-complete" : "approval-command-error",
474
+ // Clear the pending approval and immediately auto-resume so the model sees
475
+ // the command result and can continue — no manual "Resume" click needed.
476
+ updateCodeAgentRunRecord(runId, {
477
+ status: "running",
478
+ phase: "approval-resuming",
373
479
  needsApproval: false,
374
- progress: {
375
- label: result.code === 0 ? "Approval complete" : "Approval failed",
376
- completed: result.code === 0 ? 1 : 0,
377
- total: 1,
378
- failed: result.code === 0 ? 0 : 1,
379
- percent: result.code === 0 ? 100 : 0,
380
- },
381
480
  metadata: {
382
481
  pendingApproval: undefined,
383
482
  lastApproval: {
@@ -387,6 +486,61 @@ export async function executePendingCodeAgentApproval(runId, options = {}) {
387
486
  },
388
487
  },
389
488
  });
489
+ appendCodeAgentTranscriptEvent({
490
+ runId,
491
+ kind: "status",
492
+ message: "Resuming run after approval.",
493
+ metadata: { status: "running", phase: "approval-resuming" },
494
+ });
495
+ return executeExistingCodeAgentRun(runId, { stdout: options.stdout });
496
+ }
497
+ /**
498
+ * Deny a pending approval: record the denial, feed it back to the model as a
499
+ * "command denied by user" result, and immediately resume the run so the model
500
+ * can adapt its plan without leaving the run dangling.
501
+ */
502
+ export async function executeDenyCodeAgentApproval(runId, options = {}) {
503
+ const record = getCodeAgentRunRecord(runId);
504
+ if (!record)
505
+ return null;
506
+ const approval = getPendingApproval(runId);
507
+ if (!approval) {
508
+ options.stdout?.write("No pending approval was found for this run.\n");
509
+ return record;
510
+ }
511
+ const message = `User denied command: ${approval.command} (${approval.reason})`;
512
+ options.stdout?.write(`${message}\n`);
513
+ appendCodeAgentTranscriptEvent({
514
+ runId,
515
+ kind: "status",
516
+ message,
517
+ metadata: {
518
+ status: "running",
519
+ phase: "approval-denied",
520
+ approvalId: approval.id,
521
+ command: approval.command,
522
+ },
523
+ });
524
+ updateCodeAgentRunRecord(runId, {
525
+ status: "running",
526
+ phase: "approval-denied-resuming",
527
+ needsApproval: false,
528
+ metadata: {
529
+ pendingApproval: undefined,
530
+ lastApproval: {
531
+ ...approval,
532
+ deniedAt: new Date().toISOString(),
533
+ denied: true,
534
+ },
535
+ },
536
+ });
537
+ appendCodeAgentTranscriptEvent({
538
+ runId,
539
+ kind: "status",
540
+ message: "Resuming run after denial — model will adapt its plan.",
541
+ metadata: { status: "running", phase: "approval-denied-resuming" },
542
+ });
543
+ return executeExistingCodeAgentRun(runId, { stdout: options.stdout });
390
544
  }
391
545
  function latestUserPrompt(runId) {
392
546
  const events = listCodeAgentTranscriptEvents(runId);
@@ -537,35 +691,321 @@ function createFakeCodeAgentEngine(text) {
537
691
  },
538
692
  };
539
693
  }
540
- function buildCodeAgentMessages(run, prompt) {
541
- const transcript = listCodeAgentTranscriptEvents(run.id)
542
- .slice(-40)
543
- .map((event) => {
544
- const label = event.kind === "user"
545
- ? "User"
546
- : event.metadata?.role === "assistant"
547
- ? "Assistant"
548
- : event.kind;
549
- return `${label}: ${event.message}`;
550
- })
551
- .join("\n");
552
- const context = transcript
553
- ? `\n\nPrevious session transcript:\n${transcript}`
694
+ const SUPPORTED_IMAGE_MEDIA_TYPES = new Set([
695
+ "image/jpeg",
696
+ "image/jpg",
697
+ "image/png",
698
+ "image/gif",
699
+ "image/webp",
700
+ ]);
701
+ function buildCodeAgentMessages(run, prompt, attachments) {
702
+ const allEvents = listCodeAgentTranscriptEvents(run.id);
703
+ // Split events into an "older" prefix (summarised) and a "recent" tail
704
+ // (reconstructed as native structured messages).
705
+ const splitAt = Math.max(0, allEvents.length - STRUCTURED_HISTORY_RECENT_EVENTS);
706
+ const olderEvents = allEvents.slice(0, splitAt);
707
+ const recentEvents = allEvents.slice(splitAt);
708
+ // Build a compact text preamble from any events that pre-date the recent
709
+ // window. Reuses the old flat-text approach so the model still has broad
710
+ // context without paying for full token cost on every old tool result.
711
+ let preamble = "";
712
+ if (olderEvents.length > 0) {
713
+ const summaryLines = olderEvents
714
+ .filter((e) => e.kind === "user" ||
715
+ (e.kind === "system" && e.metadata?.role === "assistant") ||
716
+ (e.kind === "status" &&
717
+ (e.metadata?.type === "tool_done" ||
718
+ e.metadata?.role === "assistant")))
719
+ .map((e) => {
720
+ if (e.kind === "user")
721
+ return `User: ${e.message}`;
722
+ if (e.metadata?.role === "assistant")
723
+ return `Assistant: ${e.message}`;
724
+ if (e.metadata?.type === "tool_done") {
725
+ const tool = e.metadata?.tool;
726
+ const result = e.metadata?.result;
727
+ const resultText = typeof result === "string"
728
+ ? truncateCodingOutput(result, 500)
729
+ : result != null
730
+ ? truncateCodingOutput(String(result), 500)
731
+ : "";
732
+ return tool ? `Tool[${tool}]: ${resultText}` : `Tool: ${resultText}`;
733
+ }
734
+ return null;
735
+ })
736
+ .filter((line) => line !== null);
737
+ if (summaryLines.length > 0) {
738
+ preamble = `Earlier conversation summary:\n${summaryLines.join("\n")}`;
739
+ }
740
+ }
741
+ // Reconstruct the recent events as native EngineMessage objects.
742
+ // We build up a sequence of user/assistant messages, pairing tool-call
743
+ // events (from tool_start metadata) with their matching tool-result events
744
+ // (from tool_done metadata), and accumulating assistant text from system
745
+ // events with role=assistant.
746
+ const structuredMessages = buildStructuredMessagesFromEvents(recentEvents);
747
+ // Separate image attachments from text attachments. Images are passed as
748
+ // proper EngineImagePart entries rather than inlined base64 text (which
749
+ // would consume ~700K tokens per megabyte of image data).
750
+ const imageParts = [];
751
+ const unsupportedImageNotes = [];
752
+ for (const att of attachments ?? []) {
753
+ if (!att.dataUrl)
754
+ continue;
755
+ const match = att.dataUrl.match(/^data:(image\/[^;]+);base64,(.+)$/);
756
+ if (!match)
757
+ continue;
758
+ const mime = match[1].toLowerCase();
759
+ if (SUPPORTED_IMAGE_MEDIA_TYPES.has(mime)) {
760
+ imageParts.push({
761
+ type: "image",
762
+ data: match[2],
763
+ mediaType: mime,
764
+ });
765
+ }
766
+ else {
767
+ // Unsupported format — inject a note so the model understands what happened.
768
+ const label = att.name ? `"${att.name}"` : "An image";
769
+ unsupportedImageNotes.push(`[${label} could not be processed — unsupported image format (${mime}). ` +
770
+ `Only JPEG, PNG, GIF, and WebP are supported.]`);
771
+ }
772
+ }
773
+ const notesBlock = unsupportedImageNotes.length > 0
774
+ ? `\n\n${unsupportedImageNotes.join("\n")}`
554
775
  : "";
555
- return [
556
- {
557
- role: "user",
558
- content: [
559
- {
776
+ // The current prompt (plus optional preamble) becomes the final user message.
777
+ const promptText = [preamble, prompt, notesBlock]
778
+ .filter(Boolean)
779
+ .join("\n\n");
780
+ const promptContent = [...imageParts, { type: "text", text: promptText }];
781
+ // If there are structured messages from the recent window and the last one
782
+ // is a user message that already contains the current prompt (happens when
783
+ // appendUserEvent added a "user" event that got included), de-duplicate by
784
+ // using the structured messages as-is but replacing the last user message's
785
+ // content with the enriched content (images + prompt).
786
+ if (structuredMessages.length > 0) {
787
+ const lastMsg = structuredMessages[structuredMessages.length - 1];
788
+ if (lastMsg.role === "user") {
789
+ // Replace last user message content with the enriched prompt content.
790
+ structuredMessages[structuredMessages.length - 1] = {
791
+ role: "user",
792
+ content: promptContent,
793
+ };
794
+ return structuredMessages;
795
+ }
796
+ // Last message is assistant — append a new user message.
797
+ return [...structuredMessages, { role: "user", content: promptContent }];
798
+ }
799
+ return [{ role: "user", content: promptContent }];
800
+ }
801
+ /**
802
+ * Reconstruct a sequence of EngineMessage objects from transcript events,
803
+ * preserving the native tool-call / tool-result pair structure that models
804
+ * expect when replaying multi-turn conversations.
805
+ *
806
+ * Event mapping:
807
+ * kind=user → user message with text content
808
+ * kind=system, role=assistant → assistant message with text content
809
+ * kind=status, type=tool_start → assistant message with a tool-call part
810
+ * (grouped with any preceding assistant text)
811
+ * kind=status, type=tool_done → user message with a tool-result part
812
+ * kind=status, type=thinking → excluded (ephemeral reasoning)
813
+ * everything else → excluded from model history
814
+ *
815
+ * Each tool_start generates a synthetic toolCallId derived from the event id so
816
+ * that the matching tool_done can reference it. Old events that lack tool/input
817
+ * metadata fall back gracefully to text content.
818
+ */
819
+ /** @internal exported for unit tests */
820
+ export function buildStructuredMessagesFromEvents(events) {
821
+ const pending = [];
822
+ // Track in-flight tool-call IDs keyed by event id so tool_done can
823
+ // reference the corresponding call.
824
+ const toolCallIdByEventOrder = new Map();
825
+ for (const event of events) {
826
+ // Exclude thinking — ephemeral reasoning, never replayed to model.
827
+ if (event.kind === "status" && event.metadata?.type === "thinking") {
828
+ continue;
829
+ }
830
+ if (event.kind === "user") {
831
+ const text = event.message.trim();
832
+ if (!text)
833
+ continue;
834
+ appendOrMerge(pending, "user", { type: "text", text });
835
+ continue;
836
+ }
837
+ // Assistant text (persisted after a turn completes).
838
+ if (event.kind === "system" && event.metadata?.role === "assistant") {
839
+ const text = event.message.trim();
840
+ if (!text)
841
+ continue;
842
+ appendOrMerge(pending, "assistant", { type: "text", text });
843
+ continue;
844
+ }
845
+ // Tool call start — emit an assistant tool-call part.
846
+ if (event.kind === "status" && event.metadata?.type === "tool_start") {
847
+ const tool = typeof event.metadata?.tool === "string" && event.metadata.tool
848
+ ? event.metadata.tool
849
+ : null;
850
+ if (!tool)
851
+ continue;
852
+ // Generate a stable ID from the event id so tool_done can reference it.
853
+ const toolCallId = `tc-${event.id}`;
854
+ toolCallIdByEventOrder.set(event.id, toolCallId);
855
+ const input = event.metadata?.input != null ? event.metadata.input : {};
856
+ appendOrMerge(pending, "assistant", {
857
+ type: "tool-call",
858
+ id: toolCallId,
859
+ name: tool,
860
+ input,
861
+ });
862
+ continue;
863
+ }
864
+ // Tool result — emit a user tool-result part paired with the last
865
+ // unmatched tool_start for the same tool name.
866
+ if (event.kind === "status" && event.metadata?.type === "tool_done") {
867
+ const tool = typeof event.metadata?.tool === "string" && event.metadata.tool
868
+ ? event.metadata.tool
869
+ : null;
870
+ if (!tool)
871
+ continue;
872
+ // Find the most recent tool_start event id for this tool.
873
+ const matchedCallId = findMatchingToolCallId(toolCallIdByEventOrder, events, event, tool);
874
+ const rawResult = event.metadata?.result;
875
+ const resultText = truncateCodingOutput(typeof rawResult === "string"
876
+ ? rawResult
877
+ : rawResult != null
878
+ ? String(rawResult)
879
+ : "(no output)", STRUCTURED_HISTORY_RESULT_CAP);
880
+ if (matchedCallId) {
881
+ const toolInput = event.metadata?.input != null
882
+ ? safeJsonStringify(event.metadata.input)
883
+ : "{}";
884
+ appendOrMerge(pending, "user", {
885
+ type: "tool-result",
886
+ toolCallId: matchedCallId,
887
+ toolName: tool,
888
+ toolInput,
889
+ content: resultText,
890
+ });
891
+ }
892
+ else {
893
+ // Orphaned tool result (no matching call in the recent window) — fall
894
+ // back to plain text so the model still sees the output.
895
+ appendOrMerge(pending, "user", {
560
896
  type: "text",
561
- text: `${prompt}${context}`,
562
- },
563
- ],
564
- },
565
- ];
897
+ text: `[Tool result for ${tool}]: ${resultText}`,
898
+ });
899
+ }
900
+ continue;
901
+ }
902
+ }
903
+ return pending;
904
+ }
905
+ /**
906
+ * Append a content part to the last message if it has the same role, or
907
+ * start a new message otherwise.
908
+ */
909
+ function appendOrMerge(pending, role, part) {
910
+ const last = pending[pending.length - 1];
911
+ if (last && last.role === role) {
912
+ last.content.push(part);
913
+ }
914
+ else {
915
+ pending.push({ role, content: [part] });
916
+ }
917
+ }
918
+ /**
919
+ * Find the toolCallId generated for the most recent tool_start event that
920
+ * matches the given tool name and precedes the current tool_done event.
921
+ * Returns null if no match exists in the recent window.
922
+ */
923
+ function findMatchingToolCallId(toolCallIdByEventOrder, events, doneEvent, toolName) {
924
+ // Walk backwards from doneEvent's position to find the nearest unmatched start.
925
+ const doneIndex = events.indexOf(doneEvent);
926
+ for (let i = doneIndex - 1; i >= 0; i--) {
927
+ const e = events[i];
928
+ if (e.kind === "status" &&
929
+ e.metadata?.type === "tool_start" &&
930
+ e.metadata?.tool === toolName) {
931
+ const id = toolCallIdByEventOrder.get(e.id);
932
+ if (id) {
933
+ // Consume it so a second done for the same tool gets the next start.
934
+ toolCallIdByEventOrder.delete(e.id);
935
+ return id;
936
+ }
937
+ }
938
+ }
939
+ return null;
940
+ }
941
+ function safeJsonStringify(value) {
942
+ try {
943
+ return JSON.stringify(value) ?? "{}";
944
+ }
945
+ catch {
946
+ return "{}";
947
+ }
948
+ }
949
+ /**
950
+ * Maximum character length for inlined AGENTS.md content in the system prompt.
951
+ * Content beyond this cap is truncated with a note so the model knows more exists.
952
+ */
953
+ const AGENTS_MD_INLINE_CAP = 16_000;
954
+ /**
955
+ * Build the coding agent system prompt, inlining AGENTS.md (or CLAUDE.md as
956
+ * fallback) and a skills index from .agents/skills/ into the prompt so the
957
+ * coding agent has the same repo-context awareness that Claude Code / Codex
958
+ * provide when running locally.
959
+ *
960
+ * The bundle is read synchronously from the filesystem via `readAgentsBundleFromFs`
961
+ * (same function used by the Vite build-time plugin) so there is no async I/O
962
+ * on the hot path — the call is cheap and the result is used once per run leg.
963
+ */
964
+ /** @internal exported for unit tests */
965
+ export async function buildCodeAgentSystemPrompt(cwd, permissionMode) {
966
+ const bundle = readAgentsBundleFromFs(cwd);
967
+ // If the bundle has no AGENTS.md, try CLAUDE.md as a fallback — many repos
968
+ // use that name for agent instructions (e.g. Claude Code projects).
969
+ let agentsMdContent = bundle.agentsMd;
970
+ if (!agentsMdContent.trim()) {
971
+ try {
972
+ const fs = await import("node:fs");
973
+ const path = await import("node:path");
974
+ const claudeMdPath = path.join(cwd, "CLAUDE.md");
975
+ if (fs.existsSync(claudeMdPath)) {
976
+ agentsMdContent = fs.readFileSync(claudeMdPath, "utf-8");
977
+ }
978
+ }
979
+ catch {
980
+ // Not readable — skip
981
+ }
982
+ }
983
+ const repoInstructionsBlock = buildRepoInstructionsBlock(agentsMdContent);
984
+ const skillsBlock = generateSkillsPromptBlock(bundle);
985
+ return codeAgentSystemPrompt(cwd, permissionMode, repoInstructionsBlock, skillsBlock);
566
986
  }
567
- function codeAgentSystemPrompt(cwd, permissionMode) {
987
+ /** @internal exported for unit tests */
988
+ export function buildRepoInstructionsBlock(agentsMdContent) {
989
+ if (!agentsMdContent.trim())
990
+ return "";
991
+ const needsTruncation = agentsMdContent.length > AGENTS_MD_INLINE_CAP;
992
+ const truncated = needsTruncation
993
+ ? agentsMdContent.slice(0, AGENTS_MD_INLINE_CAP)
994
+ : agentsMdContent;
995
+ const truncationNote = needsTruncation
996
+ ? `\n\n[Note: AGENTS.md was truncated to ${AGENTS_MD_INLINE_CAP} characters. Read the full file for complete instructions.]`
997
+ : "";
998
+ return `## Repository instructions
999
+
1000
+ ${truncated}${truncationNote}`;
1001
+ }
1002
+ /** @internal exported for unit tests */
1003
+ export function codeAgentSystemPrompt(cwd, permissionMode, repoInstructionsBlock = "", skillsBlock = "") {
568
1004
  const mode = permissionMode === "read-only" ? "Plan" : "Auto";
1005
+ const repoSection = repoInstructionsBlock
1006
+ ? `\n\n${repoInstructionsBlock}`
1007
+ : "";
1008
+ const skillsSection = skillsBlock ? `\n\n${skillsBlock}` : "";
569
1009
  return `You are Agent-Native Code, a coding agent running in ${cwd}. You and the user share one workspace, and your job is to collaborate with them until their goal is genuinely handled.
570
1010
 
571
1011
  # General
@@ -619,9 +1059,9 @@ Current run mode: ${mode} mode (${permissionMode}).
619
1059
  - Reference files as clickable paths (e.g. \`packages/core/src/foo.ts\`), with a line number when it helps. Do not paste large file contents back — the user shares this machine and can open them.
620
1060
  - State what you changed, and show evidence you verified it: name the check you ran (e.g. \`pnpm typecheck\`) and its key result, not just a claim that it passed. If you could not run something, say so plainly.
621
1061
  - No emojis or em dashes unless the user used them first.
622
- - Respect any AGENTS.md instructions in the repository; they override these defaults on conflict.`;
1062
+ - AGENTS.md files take precedence over these defaults on conflict. More deeply nested AGENTS.md files take precedence over shallower ones check for them in directories you work in.${repoSection}${skillsSection}`;
623
1063
  }
624
- function createLocalCodeAgentActions(cwd, permissionMode, runId) {
1064
+ function createLocalCodeAgentActions(cwd, permissionMode, runId, onToolMetadata, onBashOutputChunk) {
625
1065
  const actions = createCodingToolRegistry({
626
1066
  cwd,
627
1067
  restrictToCwd: true,
@@ -629,6 +1069,8 @@ function createLocalCodeAgentActions(cwd, permissionMode, runId) {
629
1069
  maxOutputChars: MAX_TOOL_OUTPUT_CHARS,
630
1070
  maxFileReadChars: MAX_FILE_READ_CHARS,
631
1071
  canWrite: (toolName) => permissionErrorForWrite(permissionMode, toolName),
1072
+ onToolMetadata,
1073
+ onBashOutputChunk,
632
1074
  beforeBash: ({ command }) => {
633
1075
  const permission = classifyCodeAgentCommandPermission(command);
634
1076
  if (permission.kind === "forbidden") {
@@ -640,6 +1082,9 @@ function createLocalCodeAgentActions(cwd, permissionMode, runId) {
640
1082
  return permissionError;
641
1083
  }
642
1084
  if (permission.kind === "approval-required") {
1085
+ // Skip the approval gate when the user has allowlisted this command.
1086
+ if (isCodeAgentCommandAllowed(command))
1087
+ return null;
643
1088
  const approval = requestCodeAgentApproval(runId, {
644
1089
  tool: "bash",
645
1090
  command,
@@ -791,4 +1236,15 @@ function getPendingApproval(runId) {
791
1236
  : "full-auto",
792
1237
  };
793
1238
  }
1239
+ function accumulateTokenUsage(existing, next) {
1240
+ const prev = existing && typeof existing === "object" && !Array.isArray(existing)
1241
+ ? existing
1242
+ : {};
1243
+ return {
1244
+ inputTokens: (prev.inputTokens ?? 0) + next.inputTokens,
1245
+ outputTokens: (prev.outputTokens ?? 0) + next.outputTokens,
1246
+ cacheReadTokens: (prev.cacheReadTokens ?? 0) + next.cacheReadTokens,
1247
+ cacheWriteTokens: (prev.cacheWriteTokens ?? 0) + next.cacheWriteTokens,
1248
+ };
1249
+ }
794
1250
  //# sourceMappingURL=code-agent-executor.js.map