@agent-native/core 0.47.1 → 0.48.2

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 +1 -1
  392. package/dist/collab/client.js +20 -14
  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 +4 -0
  565. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  566. package/dist/server/core-routes-plugin.js +49 -29
  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
@@ -0,0 +1,319 @@
1
+ /**
2
+ * Scratch storage for staged provider-API datasets.
3
+ *
4
+ * Rows are stored as JSON text — no dialect-specific JSON-column types needed.
5
+ * Aggregation is done in TypeScript server-side (portable across Postgres and
6
+ * SQLite) rather than via JSON SQL fragments. See `staged-datasets-aggregate.ts`.
7
+ *
8
+ * Storage caps:
9
+ * - MAX_ROWS_PER_APP: 200 000 rows
10
+ * - MAX_BYTES_PER_APP: 50 MB (approximate, measured as raw JSON text length)
11
+ *
12
+ * Scoping: datasets are owned by (app_id, owner_email) so different apps or
13
+ * different users never share or cross-read each other's scratch data.
14
+ */
15
+ import { getDbExec, isPostgres } from "../db/client.js";
16
+ // ---------------------------------------------------------------------------
17
+ // Caps
18
+ // ---------------------------------------------------------------------------
19
+ export const MAX_ROWS_PER_APP = 200_000;
20
+ export const MAX_BYTES_PER_APP = 50 * 1024 * 1024; // 50 MB
21
+ // ---------------------------------------------------------------------------
22
+ // Table initialisation
23
+ // ---------------------------------------------------------------------------
24
+ let _initPromise;
25
+ async function ensureTables() {
26
+ if (!_initPromise) {
27
+ _initPromise = (async () => {
28
+ const db = getDbExec();
29
+ await db.execute(`
30
+ CREATE TABLE IF NOT EXISTS staged_datasets (
31
+ id TEXT NOT NULL,
32
+ app_id TEXT NOT NULL,
33
+ owner_email TEXT NOT NULL,
34
+ name TEXT NOT NULL,
35
+ columns TEXT NOT NULL,
36
+ row_count INTEGER NOT NULL DEFAULT 0,
37
+ byte_size INTEGER NOT NULL DEFAULT 0,
38
+ created_at INTEGER NOT NULL,
39
+ updated_at INTEGER NOT NULL,
40
+ PRIMARY KEY (id)
41
+ )
42
+ `);
43
+ await db.execute(`
44
+ CREATE TABLE IF NOT EXISTS staged_dataset_rows (
45
+ dataset_id TEXT NOT NULL,
46
+ row_index INTEGER NOT NULL,
47
+ row_data TEXT NOT NULL,
48
+ PRIMARY KEY (dataset_id, row_index)
49
+ )
50
+ `);
51
+ for (const ddl of [
52
+ `CREATE INDEX IF NOT EXISTS staged_datasets_scope_idx ON staged_datasets (app_id, owner_email)`,
53
+ `CREATE INDEX IF NOT EXISTS staged_dataset_rows_dataset_idx ON staged_dataset_rows (dataset_id)`,
54
+ ]) {
55
+ try {
56
+ await db.execute(ddl);
57
+ }
58
+ catch {
59
+ // Index already exists — harmless.
60
+ }
61
+ }
62
+ })().catch((err) => {
63
+ _initPromise = undefined;
64
+ throw err;
65
+ });
66
+ }
67
+ return _initPromise;
68
+ }
69
+ // ---------------------------------------------------------------------------
70
+ // Helpers
71
+ // ---------------------------------------------------------------------------
72
+ function generateId() {
73
+ return `ds_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;
74
+ }
75
+ /** Derive column names from a set of rows (first 20 rows surveyed). */
76
+ export function deriveColumns(rows) {
77
+ const seen = new Set();
78
+ for (const row of rows.slice(0, 20)) {
79
+ for (const key of Object.keys(row))
80
+ seen.add(key);
81
+ }
82
+ return Array.from(seen);
83
+ }
84
+ // ---------------------------------------------------------------------------
85
+ // Scope check
86
+ // ---------------------------------------------------------------------------
87
+ async function getAppRowCount(appId) {
88
+ const db = getDbExec();
89
+ const { rows } = await db.execute({
90
+ sql: `SELECT COALESCE(SUM(row_count), 0) as total FROM staged_datasets WHERE app_id = ?`,
91
+ args: [appId],
92
+ });
93
+ return Number(rows[0]?.total ?? 0);
94
+ }
95
+ async function getAppByteSize(appId) {
96
+ const db = getDbExec();
97
+ const { rows } = await db.execute({
98
+ sql: `SELECT COALESCE(SUM(byte_size), 0) as total FROM staged_datasets WHERE app_id = ?`,
99
+ args: [appId],
100
+ });
101
+ return Number(rows[0]?.total ?? 0);
102
+ }
103
+ // ---------------------------------------------------------------------------
104
+ // Write
105
+ // ---------------------------------------------------------------------------
106
+ /**
107
+ * Create or replace a staged dataset. Returns metadata including the
108
+ * resolved dataset ID (generated when not supplied in options).
109
+ */
110
+ export async function upsertStagedDataset(options) {
111
+ await ensureTables();
112
+ const db = getDbExec();
113
+ const now = Date.now();
114
+ const id = options.id || generateId();
115
+ // If appending, load existing rows first.
116
+ let existingRows = [];
117
+ if (options.append) {
118
+ existingRows = await getStagedDatasetRows({
119
+ id,
120
+ appId: options.appId,
121
+ ownerEmail: options.ownerEmail,
122
+ });
123
+ }
124
+ const allRows = options.append
125
+ ? [...existingRows, ...options.rows]
126
+ : options.rows;
127
+ // Check caps (net new count after this write).
128
+ const currentAppRows = await getAppRowCount(options.appId);
129
+ const currentDatasetRows = options.append
130
+ ? existingRows.length
131
+ : await (async () => {
132
+ const { rows } = await db.execute({
133
+ sql: `SELECT row_count FROM staged_datasets WHERE id = ?`,
134
+ args: [id],
135
+ });
136
+ return Number(rows[0]?.row_count ?? 0);
137
+ })();
138
+ const netNewRows = allRows.length - currentDatasetRows;
139
+ if (currentAppRows + netNewRows > MAX_ROWS_PER_APP) {
140
+ throw new Error(`Staged dataset cap exceeded: this app already has ${currentAppRows} rows stored ` +
141
+ `(limit ${MAX_ROWS_PER_APP}). Delete older datasets before staging more data.`);
142
+ }
143
+ // Serialize rows and measure byte size.
144
+ const serialized = allRows.map((row) => JSON.stringify(row));
145
+ const byteSize = serialized.reduce((sum, s) => sum + s.length, 0);
146
+ const currentAppBytes = await getAppByteSize(options.appId);
147
+ const existingDatasetBytes = options.append
148
+ ? await (async () => {
149
+ const { rows } = await db.execute({
150
+ sql: `SELECT byte_size FROM staged_datasets WHERE id = ?`,
151
+ args: [id],
152
+ });
153
+ return Number(rows[0]?.byte_size ?? 0);
154
+ })()
155
+ : 0;
156
+ const netNewBytes = byteSize - existingDatasetBytes;
157
+ if (currentAppBytes + netNewBytes > MAX_BYTES_PER_APP) {
158
+ throw new Error(`Staged dataset byte cap exceeded: this app already stores ` +
159
+ `${(currentAppBytes / 1024 / 1024).toFixed(1)} MB (limit 50 MB). ` +
160
+ `Delete older datasets before staging more data.`);
161
+ }
162
+ const columns = options.columns.length
163
+ ? options.columns
164
+ : deriveColumns(allRows);
165
+ const columnsJson = JSON.stringify(columns);
166
+ await withDbTransaction(db, async (tx) => {
167
+ // Delete old rows and insert the replacement row set atomically with the
168
+ // metadata update so a failed batch cannot leave an empty or partial dataset.
169
+ await tx.execute({
170
+ sql: `DELETE FROM staged_dataset_rows WHERE dataset_id = ?`,
171
+ args: [id],
172
+ });
173
+ const BATCH = 500;
174
+ for (let i = 0; i < serialized.length; i += BATCH) {
175
+ const slice = serialized.slice(i, i + BATCH);
176
+ for (let j = 0; j < slice.length; j++) {
177
+ await tx.execute({
178
+ sql: `INSERT INTO staged_dataset_rows (dataset_id, row_index, row_data) VALUES (?, ?, ?)`,
179
+ args: [id, i + j, slice[j]],
180
+ });
181
+ }
182
+ }
183
+ await tx.execute({
184
+ sql: isPostgres()
185
+ ? `INSERT INTO staged_datasets (id, app_id, owner_email, name, columns, row_count, byte_size, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT (id) DO UPDATE SET name=EXCLUDED.name, columns=EXCLUDED.columns, row_count=EXCLUDED.row_count, byte_size=EXCLUDED.byte_size, updated_at=EXCLUDED.updated_at`
186
+ : `INSERT OR REPLACE INTO staged_datasets (id, app_id, owner_email, name, columns, row_count, byte_size, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
187
+ args: [
188
+ id,
189
+ options.appId,
190
+ options.ownerEmail,
191
+ options.name,
192
+ columnsJson,
193
+ allRows.length,
194
+ byteSize,
195
+ now,
196
+ now,
197
+ ],
198
+ });
199
+ });
200
+ return {
201
+ id,
202
+ appId: options.appId,
203
+ ownerEmail: options.ownerEmail,
204
+ name: options.name,
205
+ columns,
206
+ rowCount: allRows.length,
207
+ byteSize,
208
+ createdAt: now,
209
+ updatedAt: now,
210
+ };
211
+ }
212
+ // ---------------------------------------------------------------------------
213
+ // Read
214
+ // ---------------------------------------------------------------------------
215
+ /**
216
+ * Fetch all rows for a dataset, asserting scope (appId + ownerEmail).
217
+ */
218
+ export async function getStagedDatasetRows(options) {
219
+ await ensureTables();
220
+ const db = getDbExec();
221
+ // Scope check
222
+ const { rows: meta } = await db.execute({
223
+ sql: `SELECT id FROM staged_datasets WHERE id = ? AND app_id = ? AND owner_email = ?`,
224
+ args: [options.id, options.appId, options.ownerEmail],
225
+ });
226
+ if (meta.length === 0)
227
+ return [];
228
+ const { rows } = await db.execute({
229
+ sql: `SELECT row_data FROM staged_dataset_rows WHERE dataset_id = ? ORDER BY row_index ASC`,
230
+ args: [options.id],
231
+ });
232
+ return rows.map((r) => JSON.parse(r.row_data));
233
+ }
234
+ /**
235
+ * Get dataset metadata (no rows), asserting scope.
236
+ */
237
+ export async function getStagedDatasetMeta(options) {
238
+ await ensureTables();
239
+ const db = getDbExec();
240
+ const { rows } = await db.execute({
241
+ sql: `SELECT id, app_id, owner_email, name, columns, row_count, byte_size, created_at, updated_at FROM staged_datasets WHERE id = ? AND app_id = ? AND owner_email = ?`,
242
+ args: [options.id, options.appId, options.ownerEmail],
243
+ });
244
+ if (rows.length === 0)
245
+ return null;
246
+ return rowToMeta(rows[0]);
247
+ }
248
+ /**
249
+ * List all datasets scoped to (appId, ownerEmail), newest first.
250
+ */
251
+ export async function listStagedDatasets(options) {
252
+ await ensureTables();
253
+ const db = getDbExec();
254
+ const { rows } = await db.execute({
255
+ sql: `SELECT id, app_id, owner_email, name, columns, row_count, byte_size, created_at, updated_at FROM staged_datasets WHERE app_id = ? AND owner_email = ? ORDER BY updated_at DESC`,
256
+ args: [options.appId, options.ownerEmail],
257
+ });
258
+ return rows.map(rowToMeta);
259
+ }
260
+ // ---------------------------------------------------------------------------
261
+ // Delete
262
+ // ---------------------------------------------------------------------------
263
+ export async function deleteStagedDataset(options) {
264
+ await ensureTables();
265
+ const db = getDbExec();
266
+ // Scope check
267
+ const { rows: meta } = await db.execute({
268
+ sql: `SELECT id FROM staged_datasets WHERE id = ? AND app_id = ? AND owner_email = ?`,
269
+ args: [options.id, options.appId, options.ownerEmail],
270
+ });
271
+ if (meta.length === 0)
272
+ return false;
273
+ const result = await withDbTransaction(db, async (tx) => {
274
+ await tx.execute({
275
+ sql: `DELETE FROM staged_dataset_rows WHERE dataset_id = ?`,
276
+ args: [options.id],
277
+ });
278
+ return tx.execute({
279
+ sql: `DELETE FROM staged_datasets WHERE id = ? AND app_id = ? AND owner_email = ?`,
280
+ args: [options.id, options.appId, options.ownerEmail],
281
+ });
282
+ });
283
+ return result.rowsAffected > 0;
284
+ }
285
+ // ---------------------------------------------------------------------------
286
+ // Internal helpers
287
+ // ---------------------------------------------------------------------------
288
+ function rowToMeta(row) {
289
+ return {
290
+ id: row.id,
291
+ appId: row.app_id,
292
+ ownerEmail: row.owner_email,
293
+ name: row.name,
294
+ columns: JSON.parse(row.columns),
295
+ rowCount: Number(row.row_count),
296
+ byteSize: Number(row.byte_size),
297
+ createdAt: Number(row.created_at),
298
+ updatedAt: Number(row.updated_at),
299
+ };
300
+ }
301
+ async function withDbTransaction(db, fn) {
302
+ if (db.transaction)
303
+ return db.transaction(fn);
304
+ await db.execute("BEGIN");
305
+ try {
306
+ const result = await fn(db);
307
+ await db.execute("COMMIT");
308
+ return result;
309
+ }
310
+ catch (err) {
311
+ await db.execute("ROLLBACK").catch(() => { });
312
+ throw err;
313
+ }
314
+ }
315
+ /** Reset the init promise (only used in tests). */
316
+ export function _resetInitPromiseForTests() {
317
+ _initPromise = undefined;
318
+ }
319
+ //# sourceMappingURL=staged-datasets-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staged-datasets-store.js","sourceRoot":"","sources":["../../src/provider-api/staged-datasets-store.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Scratch storage for staged provider-API datasets.\n *\n * Rows are stored as JSON text — no dialect-specific JSON-column types needed.\n * Aggregation is done in TypeScript server-side (portable across Postgres and\n * SQLite) rather than via JSON SQL fragments. See `staged-datasets-aggregate.ts`.\n *\n * Storage caps:\n * - MAX_ROWS_PER_APP: 200 000 rows\n * - MAX_BYTES_PER_APP: 50 MB (approximate, measured as raw JSON text length)\n *\n * Scoping: datasets are owned by (app_id, owner_email) so different apps or\n * different users never share or cross-read each other's scratch data.\n */\n\nimport { getDbExec, isPostgres, type DbExec } from \"../db/client.js\";\n\n// ---------------------------------------------------------------------------\n// Caps\n// ---------------------------------------------------------------------------\nexport const MAX_ROWS_PER_APP = 200_000;\nexport const MAX_BYTES_PER_APP = 50 * 1024 * 1024; // 50 MB\n\n// ---------------------------------------------------------------------------\n// Table initialisation\n// ---------------------------------------------------------------------------\n\nlet _initPromise: Promise<void> | undefined;\n\nasync function ensureTables(): Promise<void> {\n if (!_initPromise) {\n _initPromise = (async () => {\n const db = getDbExec();\n await db.execute(`\n CREATE TABLE IF NOT EXISTS staged_datasets (\n id TEXT NOT NULL,\n app_id TEXT NOT NULL,\n owner_email TEXT NOT NULL,\n name TEXT NOT NULL,\n columns TEXT NOT NULL,\n row_count INTEGER NOT NULL DEFAULT 0,\n byte_size INTEGER NOT NULL DEFAULT 0,\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n PRIMARY KEY (id)\n )\n `);\n await db.execute(`\n CREATE TABLE IF NOT EXISTS staged_dataset_rows (\n dataset_id TEXT NOT NULL,\n row_index INTEGER NOT NULL,\n row_data TEXT NOT NULL,\n PRIMARY KEY (dataset_id, row_index)\n )\n `);\n for (const ddl of [\n `CREATE INDEX IF NOT EXISTS staged_datasets_scope_idx ON staged_datasets (app_id, owner_email)`,\n `CREATE INDEX IF NOT EXISTS staged_dataset_rows_dataset_idx ON staged_dataset_rows (dataset_id)`,\n ]) {\n try {\n await db.execute(ddl);\n } catch {\n // Index already exists — harmless.\n }\n }\n })().catch((err) => {\n _initPromise = undefined;\n throw err;\n });\n }\n return _initPromise;\n}\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface StagedDatasetMeta {\n id: string;\n appId: string;\n ownerEmail: string;\n name: string;\n columns: string[];\n rowCount: number;\n byteSize: number;\n createdAt: number;\n updatedAt: number;\n}\n\nexport interface UpsertDatasetOptions {\n id: string;\n appId: string;\n ownerEmail: string;\n name: string;\n /** All rows to store; replaces any existing rows. */\n rows: Record<string, unknown>[];\n columns: string[];\n /** When true, append rows instead of replacing. */\n append?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction generateId(): string {\n return `ds_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;\n}\n\n/** Derive column names from a set of rows (first 20 rows surveyed). */\nexport function deriveColumns(rows: Record<string, unknown>[]): string[] {\n const seen = new Set<string>();\n for (const row of rows.slice(0, 20)) {\n for (const key of Object.keys(row)) seen.add(key);\n }\n return Array.from(seen);\n}\n\n// ---------------------------------------------------------------------------\n// Scope check\n// ---------------------------------------------------------------------------\n\nasync function getAppRowCount(appId: string): Promise<number> {\n const db = getDbExec();\n const { rows } = await db.execute({\n sql: `SELECT COALESCE(SUM(row_count), 0) as total FROM staged_datasets WHERE app_id = ?`,\n args: [appId],\n });\n return Number(rows[0]?.total ?? 0);\n}\n\nasync function getAppByteSize(appId: string): Promise<number> {\n const db = getDbExec();\n const { rows } = await db.execute({\n sql: `SELECT COALESCE(SUM(byte_size), 0) as total FROM staged_datasets WHERE app_id = ?`,\n args: [appId],\n });\n return Number(rows[0]?.total ?? 0);\n}\n\n// ---------------------------------------------------------------------------\n// Write\n// ---------------------------------------------------------------------------\n\n/**\n * Create or replace a staged dataset. Returns metadata including the\n * resolved dataset ID (generated when not supplied in options).\n */\nexport async function upsertStagedDataset(\n options: UpsertDatasetOptions,\n): Promise<StagedDatasetMeta> {\n await ensureTables();\n const db = getDbExec();\n const now = Date.now();\n const id = options.id || generateId();\n\n // If appending, load existing rows first.\n let existingRows: Record<string, unknown>[] = [];\n if (options.append) {\n existingRows = await getStagedDatasetRows({\n id,\n appId: options.appId,\n ownerEmail: options.ownerEmail,\n });\n }\n\n const allRows = options.append\n ? [...existingRows, ...options.rows]\n : options.rows;\n\n // Check caps (net new count after this write).\n const currentAppRows = await getAppRowCount(options.appId);\n const currentDatasetRows = options.append\n ? existingRows.length\n : await (async () => {\n const { rows } = await db.execute({\n sql: `SELECT row_count FROM staged_datasets WHERE id = ?`,\n args: [id],\n });\n return Number(rows[0]?.row_count ?? 0);\n })();\n const netNewRows = allRows.length - currentDatasetRows;\n if (currentAppRows + netNewRows > MAX_ROWS_PER_APP) {\n throw new Error(\n `Staged dataset cap exceeded: this app already has ${currentAppRows} rows stored ` +\n `(limit ${MAX_ROWS_PER_APP}). Delete older datasets before staging more data.`,\n );\n }\n\n // Serialize rows and measure byte size.\n const serialized = allRows.map((row) => JSON.stringify(row));\n const byteSize = serialized.reduce((sum, s) => sum + s.length, 0);\n\n const currentAppBytes = await getAppByteSize(options.appId);\n const existingDatasetBytes = options.append\n ? await (async () => {\n const { rows } = await db.execute({\n sql: `SELECT byte_size FROM staged_datasets WHERE id = ?`,\n args: [id],\n });\n return Number(rows[0]?.byte_size ?? 0);\n })()\n : 0;\n const netNewBytes = byteSize - existingDatasetBytes;\n if (currentAppBytes + netNewBytes > MAX_BYTES_PER_APP) {\n throw new Error(\n `Staged dataset byte cap exceeded: this app already stores ` +\n `${(currentAppBytes / 1024 / 1024).toFixed(1)} MB (limit 50 MB). ` +\n `Delete older datasets before staging more data.`,\n );\n }\n\n const columns = options.columns.length\n ? options.columns\n : deriveColumns(allRows);\n const columnsJson = JSON.stringify(columns);\n\n await withDbTransaction(db, async (tx) => {\n // Delete old rows and insert the replacement row set atomically with the\n // metadata update so a failed batch cannot leave an empty or partial dataset.\n await tx.execute({\n sql: `DELETE FROM staged_dataset_rows WHERE dataset_id = ?`,\n args: [id],\n });\n\n const BATCH = 500;\n for (let i = 0; i < serialized.length; i += BATCH) {\n const slice = serialized.slice(i, i + BATCH);\n for (let j = 0; j < slice.length; j++) {\n await tx.execute({\n sql: `INSERT INTO staged_dataset_rows (dataset_id, row_index, row_data) VALUES (?, ?, ?)`,\n args: [id, i + j, slice[j]],\n });\n }\n }\n\n await tx.execute({\n sql: isPostgres()\n ? `INSERT INTO staged_datasets (id, app_id, owner_email, name, columns, row_count, byte_size, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT (id) DO UPDATE SET name=EXCLUDED.name, columns=EXCLUDED.columns, row_count=EXCLUDED.row_count, byte_size=EXCLUDED.byte_size, updated_at=EXCLUDED.updated_at`\n : `INSERT OR REPLACE INTO staged_datasets (id, app_id, owner_email, name, columns, row_count, byte_size, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n args: [\n id,\n options.appId,\n options.ownerEmail,\n options.name,\n columnsJson,\n allRows.length,\n byteSize,\n now,\n now,\n ],\n });\n });\n\n return {\n id,\n appId: options.appId,\n ownerEmail: options.ownerEmail,\n name: options.name,\n columns,\n rowCount: allRows.length,\n byteSize,\n createdAt: now,\n updatedAt: now,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Read\n// ---------------------------------------------------------------------------\n\n/**\n * Fetch all rows for a dataset, asserting scope (appId + ownerEmail).\n */\nexport async function getStagedDatasetRows(options: {\n id: string;\n appId: string;\n ownerEmail: string;\n}): Promise<Record<string, unknown>[]> {\n await ensureTables();\n const db = getDbExec();\n // Scope check\n const { rows: meta } = await db.execute({\n sql: `SELECT id FROM staged_datasets WHERE id = ? AND app_id = ? AND owner_email = ?`,\n args: [options.id, options.appId, options.ownerEmail],\n });\n if (meta.length === 0) return [];\n\n const { rows } = await db.execute({\n sql: `SELECT row_data FROM staged_dataset_rows WHERE dataset_id = ? ORDER BY row_index ASC`,\n args: [options.id],\n });\n return rows.map(\n (r) => JSON.parse(r.row_data as string) as Record<string, unknown>,\n );\n}\n\n/**\n * Get dataset metadata (no rows), asserting scope.\n */\nexport async function getStagedDatasetMeta(options: {\n id: string;\n appId: string;\n ownerEmail: string;\n}): Promise<StagedDatasetMeta | null> {\n await ensureTables();\n const db = getDbExec();\n const { rows } = await db.execute({\n sql: `SELECT id, app_id, owner_email, name, columns, row_count, byte_size, created_at, updated_at FROM staged_datasets WHERE id = ? AND app_id = ? AND owner_email = ?`,\n args: [options.id, options.appId, options.ownerEmail],\n });\n if (rows.length === 0) return null;\n return rowToMeta(rows[0]);\n}\n\n/**\n * List all datasets scoped to (appId, ownerEmail), newest first.\n */\nexport async function listStagedDatasets(options: {\n appId: string;\n ownerEmail: string;\n}): Promise<StagedDatasetMeta[]> {\n await ensureTables();\n const db = getDbExec();\n const { rows } = await db.execute({\n sql: `SELECT id, app_id, owner_email, name, columns, row_count, byte_size, created_at, updated_at FROM staged_datasets WHERE app_id = ? AND owner_email = ? ORDER BY updated_at DESC`,\n args: [options.appId, options.ownerEmail],\n });\n return rows.map(rowToMeta);\n}\n\n// ---------------------------------------------------------------------------\n// Delete\n// ---------------------------------------------------------------------------\n\nexport async function deleteStagedDataset(options: {\n id: string;\n appId: string;\n ownerEmail: string;\n}): Promise<boolean> {\n await ensureTables();\n const db = getDbExec();\n // Scope check\n const { rows: meta } = await db.execute({\n sql: `SELECT id FROM staged_datasets WHERE id = ? AND app_id = ? AND owner_email = ?`,\n args: [options.id, options.appId, options.ownerEmail],\n });\n if (meta.length === 0) return false;\n\n const result = await withDbTransaction(db, async (tx) => {\n await tx.execute({\n sql: `DELETE FROM staged_dataset_rows WHERE dataset_id = ?`,\n args: [options.id],\n });\n return tx.execute({\n sql: `DELETE FROM staged_datasets WHERE id = ? AND app_id = ? AND owner_email = ?`,\n args: [options.id, options.appId, options.ownerEmail],\n });\n });\n return result.rowsAffected > 0;\n}\n\n// ---------------------------------------------------------------------------\n// Internal helpers\n// ---------------------------------------------------------------------------\n\nfunction rowToMeta(row: Record<string, unknown>): StagedDatasetMeta {\n return {\n id: row.id as string,\n appId: row.app_id as string,\n ownerEmail: row.owner_email as string,\n name: row.name as string,\n columns: JSON.parse(row.columns as string) as string[],\n rowCount: Number(row.row_count),\n byteSize: Number(row.byte_size),\n createdAt: Number(row.created_at),\n updatedAt: Number(row.updated_at),\n };\n}\n\nasync function withDbTransaction<T>(\n db: DbExec,\n fn: (tx: DbExec) => Promise<T>,\n): Promise<T> {\n if (db.transaction) return db.transaction(fn);\n\n await db.execute(\"BEGIN\");\n try {\n const result = await fn(db);\n await db.execute(\"COMMIT\");\n return result;\n } catch (err) {\n await db.execute(\"ROLLBACK\").catch(() => {});\n throw err;\n }\n}\n\n/** Reset the init promise (only used in tests). */\nexport function _resetInitPromiseForTests(): void {\n _initPromise = undefined;\n}\n"]}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Server-side staging layer for provider-api responses.
3
+ *
4
+ * ## P0 — stageAs
5
+ * Instead of returning a raw response body to the model (which hits the 50K-char
6
+ * context-window truncation and biases aggregates), the caller can pass
7
+ * `stageAs: "dataset_name"` to `stagingExecuteRequest`. The runtime will:
8
+ * 1. Execute the provider HTTP request.
9
+ * 2. Auto-detect the items array in common response shapes.
10
+ * 3. Write rows into `staged_datasets` + `staged_dataset_rows`.
11
+ * 4. Return only { dataset, rowCount, columns, sampleRows: first 5 }.
12
+ *
13
+ * ## P1 — fetchAll
14
+ * When `pagination` config is supplied alongside `stageAs`, the runtime
15
+ * iterates pages server-side:
16
+ * - Supports nextCursor (embedded in response), offset, and page modes.
17
+ * - Handles 429 / Retry-After with exponential back-off.
18
+ * - Caps at maxPages (default 50, up to 200).
19
+ * - Returns { dataset, pages, rows, truncated, lastCursor } so the agent
20
+ * can resume with another call when capped.
21
+ *
22
+ * Security: re-uses executeProviderApiRequest from index.ts — SSRF-safety and
23
+ * secret redaction are fully preserved. We read the raw (pre-redacted) JSON
24
+ * here; redaction is applied to the response returned to the model.
25
+ */
26
+ import type { ProviderApiRequestArgs } from "./index.js";
27
+ /** Auto-detect or explicit path to the items array in a JSON response. */
28
+ export type ItemsPath = "auto" | "data" | "results" | "items" | "records" | "rows" | string;
29
+ export interface PaginationConfig {
30
+ /**
31
+ * Dot-path in the response JSON for the next cursor/token value.
32
+ * e.g. "next_cursor", "meta.next", "pagination.cursor"
33
+ */
34
+ nextCursorPath?: string;
35
+ /**
36
+ * Query parameter name to use for the cursor in the next request.
37
+ * Required when nextCursorPath is set.
38
+ */
39
+ cursorParam?: string;
40
+ /**
41
+ * Use page-number mode: send `pageParam=N` for each subsequent page.
42
+ */
43
+ pageParam?: string;
44
+ /** Starting page number (default 1). */
45
+ startPage?: number;
46
+ /**
47
+ * Use offset mode: send `offsetParam=N` for each subsequent request.
48
+ */
49
+ offsetParam?: string;
50
+ /**
51
+ * Hint at expected page size for offset increments. Defaults to the
52
+ * actual item count of the first page.
53
+ */
54
+ pageSize?: number;
55
+ /** Maximum pages to fetch (default 50, max 200). */
56
+ maxPages?: number;
57
+ }
58
+ export interface StageAsOptions {
59
+ stageAs: string;
60
+ itemsPath?: ItemsPath;
61
+ pagination?: PaginationConfig;
62
+ }
63
+ export interface StagingRequestArgs extends ProviderApiRequestArgs {
64
+ stageAs?: string;
65
+ itemsPath?: ItemsPath;
66
+ pagination?: PaginationConfig;
67
+ }
68
+ export interface StagingResult {
69
+ dataset: {
70
+ id: string;
71
+ name: string;
72
+ rowCount: number;
73
+ columns: string[];
74
+ sampleRows: Record<string, unknown>[];
75
+ };
76
+ pages?: number;
77
+ rows?: number;
78
+ truncated?: boolean;
79
+ lastCursor?: string | number | null;
80
+ provider: unknown;
81
+ request: unknown;
82
+ guidance: string;
83
+ }
84
+ /** Minimal callable interface accepted by stagingExecuteRequest. */
85
+ export type ProviderApiExecutor = (args: ProviderApiRequestArgs) => Promise<unknown>;
86
+ export interface StagingRuntimeContext {
87
+ appId: string;
88
+ ownerEmail: string;
89
+ }
90
+ export declare function extractItemsArray(body: unknown, itemsPath?: ItemsPath): unknown[];
91
+ /**
92
+ * Execute a provider API request and stage the result into scratch storage.
93
+ * Returns a compact summary instead of the raw body.
94
+ *
95
+ * @param args — request args including stageAs / itemsPath / pagination
96
+ * @param execute — callable provider executor (e.g. `runtime.executeRequest.bind(runtime)`)
97
+ * @param ctx — (appId, ownerEmail) for dataset ownership scoping
98
+ */
99
+ export declare function stagingExecuteRequest(args: StagingRequestArgs, execute: ProviderApiExecutor, ctx: StagingRuntimeContext): Promise<StagingResult>;
100
+ //# sourceMappingURL=staging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staging.d.ts","sourceRoot":"","sources":["../../src/provider-api/staging.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAWzD,0EAA0E;AAC1E,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,SAAS,GACT,OAAO,GACP,SAAS,GACT,MAAM,GACN,MAAM,CAAC;AAEX,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAmB,SAAQ,sBAAsB;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;KACvC,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD,oEAAoE;AACpE,MAAM,MAAM,mBAAmB,GAAG,CAChC,IAAI,EAAE,sBAAsB,KACzB,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAsBD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,OAAO,EACb,SAAS,GAAE,SAAkB,GAC5B,OAAO,EAAE,CAwBX;AAqCD;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,kBAAkB,EACxB,OAAO,EAAE,mBAAmB,EAC5B,GAAG,EAAE,qBAAqB,GACzB,OAAO,CAAC,aAAa,CAAC,CA2LxB"}