@agent-native/core 0.113.0 → 0.114.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1508) hide show
  1. package/agent-native.eject.json +164 -0
  2. package/corpus/README.md +3 -3
  3. package/corpus/core/CHANGELOG.md +11 -0
  4. package/corpus/core/README.md +61 -174
  5. package/corpus/core/agent-native.eject.json +164 -0
  6. package/corpus/core/docs/content/agent-native-toolkit.mdx +38 -0
  7. package/corpus/core/docs/content/package-lifecycle.mdx +54 -4
  8. package/corpus/core/package.json +15 -2
  9. package/corpus/core/src/cli/eject.ts +1594 -0
  10. package/corpus/core/src/cli/index.ts +16 -0
  11. package/corpus/core/src/client/index.ts +4 -0
  12. package/corpus/core/src/client/resources/McpConnectionSuggestion.tsx +8 -2
  13. package/corpus/core/src/client/resources/McpIntegrationDialog.tsx +7 -2
  14. package/corpus/core/src/client/resources/ResourcesPanel.tsx +17 -3
  15. package/corpus/core/src/client/resources/index.ts +19 -0
  16. package/corpus/core/src/client/resources/mcp-integration-catalog.ts +9 -1
  17. package/corpus/core/src/client/resources/runtime.ts +1 -0
  18. package/corpus/core/src/client/setup-connections/catalog.ts +6 -0
  19. package/corpus/core/src/client/setup-connections/index.ts +1 -0
  20. package/corpus/core/src/client/setup-connections/runtime.ts +1 -0
  21. package/corpus/core/src/connections/catalog.ts +41 -24
  22. package/corpus/core/src/connections/index.ts +1 -0
  23. package/corpus/core/src/connections/runtime.ts +1 -0
  24. package/corpus/core/src/eject/provider-api-definitions.ts +193 -0
  25. package/corpus/core/src/eject/remote-mcp-presets.ts +137 -0
  26. package/corpus/core/src/eject/setup-readiness-ui.tsx +29 -0
  27. package/corpus/core/src/eject/workspace-connections.ts +92 -0
  28. package/corpus/core/src/index.ts +1 -0
  29. package/corpus/core/src/integrations/adapter-overrides.ts +12 -0
  30. package/corpus/core/src/integrations/eject/messaging-adapters.ts +85 -0
  31. package/corpus/core/src/integrations/index.ts +5 -1
  32. package/corpus/core/src/integrations/plugin.ts +34 -12
  33. package/corpus/core/src/integrations/runtime.ts +1 -0
  34. package/corpus/core/src/integrations/types.ts +3 -1
  35. package/corpus/core/src/package-lifecycle/eject-manifest.ts +345 -0
  36. package/corpus/core/src/package-lifecycle/index.ts +1 -0
  37. package/corpus/core/src/provider-api/index.ts +46 -12
  38. package/corpus/core/src/provider-api/runtime.ts +1 -0
  39. package/corpus/core/src/setup-connections/index.ts +1 -0
  40. package/corpus/core/src/shared/merge-by-id.ts +14 -0
  41. package/corpus/core/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +15 -13
  42. package/corpus/core/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  43. package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +9 -6
  44. package/corpus/core/src/templates/default/AGENTS.md +6 -5
  45. package/corpus/core/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +15 -13
  46. package/corpus/core/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  47. package/corpus/core/src/templates/headless/AGENTS.md +5 -4
  48. package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +15 -13
  49. package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +3 -2
  50. package/corpus/core/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  51. package/corpus/core/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +9 -6
  52. package/corpus/core/src/templates/workspace-core/AGENTS.md +4 -4
  53. package/corpus/core/src/templates/workspace-root/AGENTS.md +4 -4
  54. package/corpus/core/src/vite/client.ts +25 -2
  55. package/corpus/templates/analytics/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  56. package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +9 -6
  57. package/corpus/templates/assets/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  58. package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +9 -6
  59. package/corpus/templates/brain/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  60. package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +9 -6
  61. package/corpus/templates/brain/actions/remediate-legacy-capture-audiences.ts +167 -0
  62. package/corpus/templates/brain/app/lib/brain-chat-readiness.ts +6 -0
  63. package/corpus/templates/brain/app/routes/_index.tsx +8 -0
  64. package/corpus/templates/brain/app/routes.ts +1 -0
  65. package/corpus/templates/brain/changelog/2026-07-19-ask-starts-immediately-when-builder-s-managed-ai-connection-.md +6 -0
  66. package/corpus/templates/brain/changelog/2026-07-19-slack-and-granola-backfills-now-process-captures-concurrentl.md +6 -0
  67. package/corpus/templates/brain/changelog/2026-07-19-source-review-settings-now-control-knowledge-approval.md +6 -0
  68. package/corpus/templates/brain/changelog/2026-07-19-the-manage-agent-page-now-opens-correctly-from-brain-navigat.md +6 -0
  69. package/corpus/templates/brain/server/db/schema.ts +3 -0
  70. package/corpus/templates/brain/server/lib/brain.ts +41 -2
  71. package/corpus/templates/brain/server/lib/connectors.ts +379 -113
  72. package/corpus/templates/brain/server/lib/meeting-audience.ts +38 -0
  73. package/corpus/templates/brain/server/plugins/db.ts +10 -0
  74. package/corpus/templates/brain/server/routes/api/_agent-native/brain/ingest.post.ts +6 -4
  75. package/corpus/templates/calendar/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  76. package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +9 -6
  77. package/corpus/templates/chat/.agents/skills/agent-native-docs/SKILL.md +15 -13
  78. package/corpus/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  79. package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +9 -6
  80. package/corpus/templates/chat/AGENTS.md +3 -2
  81. package/corpus/templates/clips/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  82. package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +9 -6
  83. package/corpus/templates/content/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  84. package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +9 -6
  85. package/corpus/templates/design/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  86. package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +9 -6
  87. package/corpus/templates/dispatch/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  88. package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +9 -6
  89. package/corpus/templates/forms/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  90. package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +9 -6
  91. package/corpus/templates/macros/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  92. package/corpus/templates/mail/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  93. package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +9 -6
  94. package/corpus/templates/plan/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  95. package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +9 -6
  96. package/corpus/templates/slides/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  97. package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +9 -6
  98. package/corpus/templates/tasks/.agents/skills/agent-native-docs/SKILL.md +15 -13
  99. package/corpus/templates/tasks/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  100. package/corpus/templates/tasks/.agents/skills/self-modifying-code/SKILL.md +9 -6
  101. package/corpus/toolkit/CHANGELOG.md +6 -0
  102. package/corpus/toolkit/agent-native.eject.json +411 -0
  103. package/corpus/toolkit/package.json +5 -2
  104. package/dist/cli/eject.d.ts +21 -0
  105. package/dist/cli/eject.d.ts.map +1 -0
  106. package/dist/cli/eject.js +1145 -0
  107. package/dist/cli/eject.js.map +1 -0
  108. package/dist/cli/index.js +15 -0
  109. package/dist/cli/index.js.map +1 -1
  110. package/dist/client/index.d.ts +1 -1
  111. package/dist/client/index.d.ts.map +1 -1
  112. package/dist/client/index.js +1 -1
  113. package/dist/client/index.js.map +1 -1
  114. package/dist/client/resources/McpConnectionSuggestion.d.ts +4 -3
  115. package/dist/client/resources/McpConnectionSuggestion.d.ts.map +1 -1
  116. package/dist/client/resources/McpConnectionSuggestion.js +3 -3
  117. package/dist/client/resources/McpConnectionSuggestion.js.map +1 -1
  118. package/dist/client/resources/McpIntegrationDialog.d.ts +4 -3
  119. package/dist/client/resources/McpIntegrationDialog.d.ts.map +1 -1
  120. package/dist/client/resources/McpIntegrationDialog.js +2 -2
  121. package/dist/client/resources/McpIntegrationDialog.js.map +1 -1
  122. package/dist/client/resources/ResourcesPanel.d.ts +4 -1
  123. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  124. package/dist/client/resources/ResourcesPanel.js +9 -7
  125. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  126. package/dist/client/resources/index.d.ts +3 -0
  127. package/dist/client/resources/index.d.ts.map +1 -1
  128. package/dist/client/resources/index.js +3 -0
  129. package/dist/client/resources/index.js.map +1 -1
  130. package/dist/client/resources/mcp-integration-catalog.d.ts +2 -1
  131. package/dist/client/resources/mcp-integration-catalog.d.ts.map +1 -1
  132. package/dist/client/resources/mcp-integration-catalog.js +6 -2
  133. package/dist/client/resources/mcp-integration-catalog.js.map +1 -1
  134. package/dist/client/resources/runtime.d.ts +2 -0
  135. package/dist/client/resources/runtime.d.ts.map +1 -0
  136. package/dist/client/resources/runtime.js +2 -0
  137. package/dist/client/resources/runtime.js.map +1 -0
  138. package/dist/client/setup-connections/catalog.d.ts +2 -0
  139. package/dist/client/setup-connections/catalog.d.ts.map +1 -0
  140. package/dist/client/setup-connections/catalog.js +7 -0
  141. package/dist/client/setup-connections/catalog.js.map +1 -0
  142. package/dist/client/setup-connections/index.d.ts +1 -0
  143. package/dist/client/setup-connections/index.d.ts.map +1 -1
  144. package/dist/client/setup-connections/index.js +1 -0
  145. package/dist/client/setup-connections/index.js.map +1 -1
  146. package/dist/client/setup-connections/runtime.d.ts +2 -0
  147. package/dist/client/setup-connections/runtime.d.ts.map +1 -0
  148. package/dist/client/setup-connections/runtime.js +2 -0
  149. package/dist/client/setup-connections/runtime.js.map +1 -0
  150. package/dist/collab/awareness.d.ts +2 -2
  151. package/dist/collab/awareness.d.ts.map +1 -1
  152. package/dist/collab/routes.d.ts +1 -1
  153. package/dist/connections/catalog.d.ts +5 -3
  154. package/dist/connections/catalog.d.ts.map +1 -1
  155. package/dist/connections/catalog.js +16 -8
  156. package/dist/connections/catalog.js.map +1 -1
  157. package/dist/connections/index.d.ts +1 -1
  158. package/dist/connections/index.d.ts.map +1 -1
  159. package/dist/connections/index.js +1 -1
  160. package/dist/connections/index.js.map +1 -1
  161. package/dist/connections/runtime.d.ts +2 -0
  162. package/dist/connections/runtime.d.ts.map +1 -0
  163. package/dist/connections/runtime.js +2 -0
  164. package/dist/connections/runtime.js.map +1 -0
  165. package/dist/eject/provider-api-definitions.d.ts +34 -0
  166. package/dist/eject/provider-api-definitions.d.ts.map +1 -0
  167. package/dist/eject/provider-api-definitions.js +88 -0
  168. package/dist/eject/provider-api-definitions.js.map +1 -0
  169. package/dist/eject/remote-mcp-presets.d.ts +17 -0
  170. package/dist/eject/remote-mcp-presets.d.ts.map +1 -0
  171. package/dist/eject/remote-mcp-presets.js +81 -0
  172. package/dist/eject/remote-mcp-presets.js.map +1 -0
  173. package/dist/eject/setup-readiness-ui.d.ts +7 -0
  174. package/dist/eject/setup-readiness-ui.d.ts.map +1 -0
  175. package/dist/eject/setup-readiness-ui.js +13 -0
  176. package/dist/eject/setup-readiness-ui.js.map +1 -0
  177. package/dist/eject/workspace-connections.d.ts +11 -0
  178. package/dist/eject/workspace-connections.d.ts.map +1 -0
  179. package/dist/eject/workspace-connections.js +47 -0
  180. package/dist/eject/workspace-connections.js.map +1 -0
  181. package/dist/index.d.ts +1 -1
  182. package/dist/index.d.ts.map +1 -1
  183. package/dist/index.js +1 -1
  184. package/dist/index.js.map +1 -1
  185. package/dist/integrations/adapter-overrides.d.ts +3 -0
  186. package/dist/integrations/adapter-overrides.d.ts.map +1 -0
  187. package/dist/integrations/adapter-overrides.js +7 -0
  188. package/dist/integrations/adapter-overrides.js.map +1 -0
  189. package/dist/integrations/eject/messaging-adapters.d.ts +12 -0
  190. package/dist/integrations/eject/messaging-adapters.d.ts.map +1 -0
  191. package/dist/integrations/eject/messaging-adapters.js +49 -0
  192. package/dist/integrations/eject/messaging-adapters.js.map +1 -0
  193. package/dist/integrations/index.d.ts +3 -2
  194. package/dist/integrations/index.d.ts.map +1 -1
  195. package/dist/integrations/index.js +2 -1
  196. package/dist/integrations/index.js.map +1 -1
  197. package/dist/integrations/plugin.d.ts +32 -1
  198. package/dist/integrations/plugin.d.ts.map +1 -1
  199. package/dist/integrations/plugin.js +19 -12
  200. package/dist/integrations/plugin.js.map +1 -1
  201. package/dist/integrations/runtime.d.ts +2 -0
  202. package/dist/integrations/runtime.d.ts.map +1 -0
  203. package/dist/integrations/runtime.js +2 -0
  204. package/dist/integrations/runtime.js.map +1 -0
  205. package/dist/integrations/types.d.ts +3 -1
  206. package/dist/integrations/types.d.ts.map +1 -1
  207. package/dist/integrations/types.js.map +1 -1
  208. package/dist/notifications/routes.d.ts +3 -3
  209. package/dist/package-lifecycle/eject-manifest.d.ts +43 -0
  210. package/dist/package-lifecycle/eject-manifest.d.ts.map +1 -0
  211. package/dist/package-lifecycle/eject-manifest.js +219 -0
  212. package/dist/package-lifecycle/eject-manifest.js.map +1 -0
  213. package/dist/package-lifecycle/index.d.ts +1 -0
  214. package/dist/package-lifecycle/index.d.ts.map +1 -1
  215. package/dist/package-lifecycle/index.js +1 -0
  216. package/dist/package-lifecycle/index.js.map +1 -1
  217. package/dist/progress/routes.d.ts +1 -1
  218. package/dist/provider-api/actions/custom-provider-registration.d.ts +4 -4
  219. package/dist/provider-api/actions/provider-api.d.ts +8 -8
  220. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  221. package/dist/provider-api/index.d.ts +6 -2
  222. package/dist/provider-api/index.d.ts.map +1 -1
  223. package/dist/provider-api/index.js +25 -12
  224. package/dist/provider-api/index.js.map +1 -1
  225. package/dist/provider-api/runtime.d.ts +2 -0
  226. package/dist/provider-api/runtime.d.ts.map +1 -0
  227. package/dist/provider-api/runtime.js +2 -0
  228. package/dist/provider-api/runtime.js.map +1 -0
  229. package/dist/secrets/routes.d.ts +9 -9
  230. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  231. package/dist/server/transcribe-voice.d.ts +1 -1
  232. package/dist/setup-connections/index.d.ts +1 -1
  233. package/dist/setup-connections/index.d.ts.map +1 -1
  234. package/dist/setup-connections/index.js +1 -1
  235. package/dist/setup-connections/index.js.map +1 -1
  236. package/dist/shared/merge-by-id.d.ts +5 -0
  237. package/dist/shared/merge-by-id.d.ts.map +1 -0
  238. package/dist/shared/merge-by-id.js +7 -0
  239. package/dist/shared/merge-by-id.js.map +1 -0
  240. package/dist/templates/chat/.agents/skills/agent-native-docs/SKILL.md +15 -13
  241. package/dist/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  242. package/dist/templates/chat/.agents/skills/self-modifying-code/SKILL.md +9 -6
  243. package/dist/templates/chat/AGENTS.md +3 -2
  244. package/dist/templates/default/.agents/skills/agent-native-docs/SKILL.md +15 -13
  245. package/dist/templates/default/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  246. package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +9 -6
  247. package/dist/templates/default/AGENTS.md +6 -5
  248. package/dist/templates/headless/.agents/skills/agent-native-docs/SKILL.md +15 -13
  249. package/dist/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  250. package/dist/templates/headless/AGENTS.md +5 -4
  251. package/dist/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +15 -13
  252. package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +3 -2
  253. package/dist/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  254. package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +9 -6
  255. package/dist/templates/workspace-core/AGENTS.md +4 -4
  256. package/dist/templates/workspace-root/AGENTS.md +4 -4
  257. package/dist/vite/client.d.ts.map +1 -1
  258. package/dist/vite/client.js +22 -2
  259. package/dist/vite/client.js.map +1 -1
  260. package/docs/content/agent-native-toolkit.mdx +38 -0
  261. package/docs/content/package-lifecycle.mdx +54 -4
  262. package/package.json +15 -2
  263. package/src/a2a/agent-card.ts +83 -0
  264. package/src/a2a/artifact-response.ts +1648 -0
  265. package/src/a2a/auth-policy.ts +66 -0
  266. package/src/a2a/caller-auth.ts +102 -0
  267. package/src/a2a/client.ts +876 -0
  268. package/src/a2a/correlation.ts +50 -0
  269. package/src/a2a/handlers.ts +1285 -0
  270. package/src/a2a/index.ts +50 -0
  271. package/src/a2a/invoke.ts +348 -0
  272. package/src/a2a/response-text.ts +53 -0
  273. package/src/a2a/server.ts +586 -0
  274. package/src/a2a/task-store.ts +917 -0
  275. package/src/a2a/types.ts +221 -0
  276. package/src/a2a-claims.ts +52 -0
  277. package/src/action-change-marker.ts +74 -0
  278. package/src/action-ui.ts +38 -0
  279. package/src/action.ts +1406 -0
  280. package/src/adapters/cli/index.ts +6 -0
  281. package/src/adapters/cli/registry.ts +73 -0
  282. package/src/adapters/cli/shell-adapter.ts +92 -0
  283. package/src/adapters/cli/types.ts +27 -0
  284. package/src/agent/action-continuation-guidance.ts +38 -0
  285. package/src/agent/app-model-defaults.ts +201 -0
  286. package/src/agent/context-xray/actions/context-evict.ts +56 -0
  287. package/src/agent/context-xray/actions/context-manifest-get.ts +75 -0
  288. package/src/agent/context-xray/actions/context-pin.ts +56 -0
  289. package/src/agent/context-xray/actions/context-preview-get.ts +134 -0
  290. package/src/agent/context-xray/actions/context-report.ts +75 -0
  291. package/src/agent/context-xray/actions/context-restore.ts +51 -0
  292. package/src/agent/context-xray/actions/errors.ts +40 -0
  293. package/src/agent/context-xray/apply-directives.ts +137 -0
  294. package/src/agent/context-xray/directives-store.ts +178 -0
  295. package/src/agent/context-xray/identity.ts +37 -0
  296. package/src/agent/context-xray/manifest.ts +284 -0
  297. package/src/agent/context-xray/migrations.ts +32 -0
  298. package/src/agent/context-xray/plugin.ts +23 -0
  299. package/src/agent/context-xray/schema.ts +17 -0
  300. package/src/agent/context-xray/segments.ts +194 -0
  301. package/src/agent/context-xray/tokenize.ts +93 -0
  302. package/src/agent/default-model.ts +5 -0
  303. package/src/agent/durable-background.ts +547 -0
  304. package/src/agent/engine/ai-sdk-engine.ts +565 -0
  305. package/src/agent/engine/anthropic-engine.ts +320 -0
  306. package/src/agent/engine/builder-engine.ts +1110 -0
  307. package/src/agent/engine/builder-gateway-headers.ts +44 -0
  308. package/src/agent/engine/builtin.ts +122 -0
  309. package/src/agent/engine/context-directives-transform.ts +73 -0
  310. package/src/agent/engine/continuation-dispatch-retry.ts +168 -0
  311. package/src/agent/engine/credential-errors.ts +69 -0
  312. package/src/agent/engine/index.ts +54 -0
  313. package/src/agent/engine/openai-compatible-endpoint.ts +25 -0
  314. package/src/agent/engine/output-tokens.ts +181 -0
  315. package/src/agent/engine/provider-env-vars.ts +69 -0
  316. package/src/agent/engine/registry.ts +853 -0
  317. package/src/agent/engine/tool-call-journal-seed.ts +85 -0
  318. package/src/agent/engine/translate-ai-sdk.ts +407 -0
  319. package/src/agent/engine/translate-anthropic.ts +611 -0
  320. package/src/agent/engine/types.ts +310 -0
  321. package/src/agent/harness/acp-adapter.ts +893 -0
  322. package/src/agent/harness/acp-builtin.ts +70 -0
  323. package/src/agent/harness/ai-sdk-adapter.ts +509 -0
  324. package/src/agent/harness/background.ts +365 -0
  325. package/src/agent/harness/builtin.ts +50 -0
  326. package/src/agent/harness/index.ts +86 -0
  327. package/src/agent/harness/lifecycle.ts +498 -0
  328. package/src/agent/harness/registry.ts +97 -0
  329. package/src/agent/harness/runner.ts +182 -0
  330. package/src/agent/harness/store.ts +466 -0
  331. package/src/agent/harness/translate.ts +130 -0
  332. package/src/agent/harness/types.ts +129 -0
  333. package/src/agent/index.ts +32 -0
  334. package/src/agent/loop-settings.ts +186 -0
  335. package/src/agent/model-config.ts +363 -0
  336. package/src/agent/observational-memory/compactor.ts +78 -0
  337. package/src/agent/observational-memory/config.ts +78 -0
  338. package/src/agent/observational-memory/index.ts +79 -0
  339. package/src/agent/observational-memory/internal-run.ts +89 -0
  340. package/src/agent/observational-memory/message-text.ts +49 -0
  341. package/src/agent/observational-memory/migrations.ts +44 -0
  342. package/src/agent/observational-memory/observer.ts +128 -0
  343. package/src/agent/observational-memory/plugin.ts +35 -0
  344. package/src/agent/observational-memory/prompts.ts +53 -0
  345. package/src/agent/observational-memory/read.ts +131 -0
  346. package/src/agent/observational-memory/reflector.ts +119 -0
  347. package/src/agent/observational-memory/schema.ts +48 -0
  348. package/src/agent/observational-memory/store.ts +275 -0
  349. package/src/agent/observational-memory/types.ts +65 -0
  350. package/src/agent/processors.ts +209 -0
  351. package/src/agent/production-agent.ts +8254 -0
  352. package/src/agent/run-loop-with-resume.ts +394 -0
  353. package/src/agent/run-manager.ts +1825 -0
  354. package/src/agent/run-ownership.ts +75 -0
  355. package/src/agent/run-store.ts +2601 -0
  356. package/src/agent/runtime-context.ts +169 -0
  357. package/src/agent/thread-data-builder.ts +1584 -0
  358. package/src/agent/tool-call-journal.ts +368 -0
  359. package/src/agent/tool-error-redaction.ts +52 -0
  360. package/src/agent/tool-result-images.ts +178 -0
  361. package/src/agent/tool-search.ts +376 -0
  362. package/src/agent/types.ts +372 -0
  363. package/src/agent-native/index.ts +198 -0
  364. package/src/agent-web/config.ts +253 -0
  365. package/src/agent-web/generator.ts +382 -0
  366. package/src/agent-web/index.ts +36 -0
  367. package/src/appearance/actions/change-appearance.ts +35 -0
  368. package/src/application-state/emitter.ts +81 -0
  369. package/src/application-state/handlers.ts +121 -0
  370. package/src/application-state/index.ts +44 -0
  371. package/src/application-state/script-helpers.ts +155 -0
  372. package/src/application-state/store.ts +274 -0
  373. package/src/assets/branding/agent-native.icon/Assets/background.svg +3 -0
  374. package/src/assets/branding/agent-native.icon/Assets/foreground.svg +12 -0
  375. package/src/assets/branding/agent-native.icon/icon.json +49 -0
  376. package/src/assets/branding/favicon.png +0 -0
  377. package/src/assets/branding/favicon.svg +1 -0
  378. package/src/assets/branding/icon-on-dark.svg +10 -0
  379. package/src/assets/branding/icon-on-light.svg +10 -0
  380. package/src/assets/branding/mac-app-icon.svg +1 -0
  381. package/src/assets/branding/slack-bot/agent-native-1024.png +0 -0
  382. package/src/assets/branding/slack-bot/agent-native-512.png +0 -0
  383. package/src/assets/branding/tray-icon.svg +6 -0
  384. package/src/assets/branding/wordmark-on-dark.svg +21 -0
  385. package/src/assets/branding/wordmark-on-light.svg +21 -0
  386. package/src/assets/fonts/LICENSE_LIBERATION +96 -0
  387. package/src/assets/fonts/LICENSE_NOTO_NASKH_ARABIC +93 -0
  388. package/src/assets/fonts/LiberationSans-Bold.ttf +0 -0
  389. package/src/assets/fonts/LiberationSans-Regular.ttf +0 -0
  390. package/src/assets/fonts/NotoNaskhArabic-Variable.ttf +0 -0
  391. package/src/audit/actions/export-audit-events.ts +162 -0
  392. package/src/audit/actions/get-audit-event.ts +24 -0
  393. package/src/audit/actions/list-audit-events.ts +66 -0
  394. package/src/audit/cleanup-job.ts +100 -0
  395. package/src/audit/config.ts +90 -0
  396. package/src/audit/index.ts +43 -0
  397. package/src/audit/record.ts +180 -0
  398. package/src/audit/redact.ts +109 -0
  399. package/src/audit/store.ts +346 -0
  400. package/src/audit/types.ts +141 -0
  401. package/src/automation/index.ts +802 -0
  402. package/src/brand-kit/brand-signals.ts +124 -0
  403. package/src/brand-kit/fig/index.ts +64 -0
  404. package/src/brand-kit/index.ts +72 -0
  405. package/src/brand-kit/types.ts +113 -0
  406. package/src/browser-sessions/actions.ts +302 -0
  407. package/src/browser-sessions/routes.ts +234 -0
  408. package/src/browser-sessions/store.ts +679 -0
  409. package/src/browser-sessions/types.ts +84 -0
  410. package/src/changelog/parse.ts +328 -0
  411. package/src/chat-threads/emitter.ts +22 -0
  412. package/src/chat-threads/schema.ts +43 -0
  413. package/src/chat-threads/store.ts +1311 -0
  414. package/src/checkpoints/index.ts +15 -0
  415. package/src/checkpoints/service.ts +142 -0
  416. package/src/checkpoints/store.ts +153 -0
  417. package/src/cli/add.ts +425 -0
  418. package/src/cli/agent.ts +424 -0
  419. package/src/cli/agents.ts +122 -0
  420. package/src/cli/app-skill.ts +1455 -0
  421. package/src/cli/atomic-json-file.ts +324 -0
  422. package/src/cli/audit-agent-web.ts +324 -0
  423. package/src/cli/changelog.ts +199 -0
  424. package/src/cli/claude-code-participant.ts +515 -0
  425. package/src/cli/code-agent-commands.ts +270 -0
  426. package/src/cli/code-agent-connector.ts +1109 -0
  427. package/src/cli/code-agent-executor.ts +1970 -0
  428. package/src/cli/code-agent-output-smoother.ts +140 -0
  429. package/src/cli/code-agent-runs.concurrent-worker.ts +33 -0
  430. package/src/cli/code-agent-runs.ts +548 -0
  431. package/src/cli/code.ts +1805 -0
  432. package/src/cli/codex-cli-participant.ts +496 -0
  433. package/src/cli/connect.ts +2714 -0
  434. package/src/cli/content-local.ts +442 -0
  435. package/src/cli/context-xray-local.ts +2193 -0
  436. package/src/cli/create-workspace.ts +30 -0
  437. package/src/cli/create.ts +2247 -0
  438. package/src/cli/deploy-build.ts +50 -0
  439. package/src/cli/design-connect.ts +3187 -0
  440. package/src/cli/doctor.ts +472 -0
  441. package/src/cli/eject.ts +1594 -0
  442. package/src/cli/eval.ts +134 -0
  443. package/src/cli/gateway-helpers.ts +70 -0
  444. package/src/cli/index.ts +1217 -0
  445. package/src/cli/info.ts +105 -0
  446. package/src/cli/invoke.ts +288 -0
  447. package/src/cli/mcp-config-writers.ts +857 -0
  448. package/src/cli/mcp.ts +594 -0
  449. package/src/cli/migrate.ts +1813 -0
  450. package/src/cli/migration-codemod.ts +646 -0
  451. package/src/cli/multi-frontier-runs.ts +1952 -0
  452. package/src/cli/package-lifecycle.ts +823 -0
  453. package/src/cli/plan-blocks.ts +143 -0
  454. package/src/cli/plan-local.ts +3189 -0
  455. package/src/cli/plan-publish-store.ts +138 -0
  456. package/src/cli/pr-visual-recap-workflow.ts +2 -0
  457. package/src/cli/recap.ts +5 -0
  458. package/src/cli/setup-agents.ts +120 -0
  459. package/src/cli/skills-content/assets-skill.ts +83 -0
  460. package/src/cli/skills-content/canvas.ts +153 -0
  461. package/src/cli/skills-content/connection.ts +52 -0
  462. package/src/cli/skills-content/content-skill.ts +120 -0
  463. package/src/cli/skills-content/design-exploration-skill.ts +118 -0
  464. package/src/cli/skills-content/design-visual-edit-skill.ts +228 -0
  465. package/src/cli/skills-content/document-quality.ts +196 -0
  466. package/src/cli/skills-content/exemplar.ts +69 -0
  467. package/src/cli/skills-content/help.ts +77 -0
  468. package/src/cli/skills-content/index.ts +22 -0
  469. package/src/cli/skills-content/local-files.ts +100 -0
  470. package/src/cli/skills-content/plan-setup-auth.ts +80 -0
  471. package/src/cli/skills-content/visual-plan-skill.ts +493 -0
  472. package/src/cli/skills-content/visual-recap-skill.ts +553 -0
  473. package/src/cli/skills-content/visualize-repo-skill.ts +93 -0
  474. package/src/cli/skills-content/wireframe.ts +349 -0
  475. package/src/cli/skills.ts +4340 -0
  476. package/src/cli/sync-builder-starter-manifest.ts +631 -0
  477. package/src/cli/telemetry.ts +136 -0
  478. package/src/cli/templates-meta.ts +269 -0
  479. package/src/cli/upgrade.ts +956 -0
  480. package/src/cli/visualize-repo.ts +715 -0
  481. package/src/cli/workspace-dev.ts +1486 -0
  482. package/src/cli/workspacify.ts +258 -0
  483. package/src/client/AgentAskPopover.tsx +89 -0
  484. package/src/client/AgentChatHome.tsx +66 -0
  485. package/src/client/AgentNative.tsx +161 -0
  486. package/src/client/AgentNativeEmbedded.tsx +288 -0
  487. package/src/client/AgentNativeFrame.tsx +151 -0
  488. package/src/client/AgentPanel.tsx +3437 -0
  489. package/src/client/AgentTaskCard.tsx +273 -0
  490. package/src/client/AppearancePicker.tsx +79 -0
  491. package/src/client/AssistantChat.tsx +5793 -0
  492. package/src/client/ClientOnly.tsx +22 -0
  493. package/src/client/CommandMenu.tsx +726 -0
  494. package/src/client/ConnectBuilderCard.tsx +390 -0
  495. package/src/client/DefaultSpinner.tsx +47 -0
  496. package/src/client/ErrorBoundary.tsx +359 -0
  497. package/src/client/ErrorReportActions.tsx +69 -0
  498. package/src/client/FeedbackButton.tsx +553 -0
  499. package/src/client/HighlightedCodeBlock.tsx +173 -0
  500. package/src/client/IframeEmbed.tsx +151 -0
  501. package/src/client/KeepTabOpenNotice.tsx +181 -0
  502. package/src/client/MultiTabAssistantChat.tsx +2576 -0
  503. package/src/client/NewWorkspaceAppFlow.tsx +525 -0
  504. package/src/client/PoweredByBadge.tsx +284 -0
  505. package/src/client/RunStuckBanner.tsx +431 -0
  506. package/src/client/StarfieldBackground.tsx +466 -0
  507. package/src/client/Turnstile.tsx +125 -0
  508. package/src/client/active-run-state.ts +139 -0
  509. package/src/client/agent-chat/index.ts +279 -0
  510. package/src/client/agent-chat-adapter.ts +3692 -0
  511. package/src/client/agent-chat.ts +1233 -0
  512. package/src/client/agent-engine-key.ts +122 -0
  513. package/src/client/agent-page/AgentContextTab.tsx +487 -0
  514. package/src/client/agent-page/AgentEmptyState.tsx +44 -0
  515. package/src/client/agent-page/AgentJobsTab.tsx +441 -0
  516. package/src/client/agent-page/AgentTabFrame.tsx +39 -0
  517. package/src/client/agent-page/AgentTabsPage.tsx +1096 -0
  518. package/src/client/agent-page/types.ts +18 -0
  519. package/src/client/agent-page/use-jobs.ts +150 -0
  520. package/src/client/agent-sidebar-state.ts +166 -0
  521. package/src/client/analytics/index.ts +40 -0
  522. package/src/client/analytics-session.ts +70 -0
  523. package/src/client/analytics.ts +1757 -0
  524. package/src/client/api-path.ts +124 -0
  525. package/src/client/app-providers.tsx +230 -0
  526. package/src/client/appearance.ts +130 -0
  527. package/src/client/application-state.ts +154 -0
  528. package/src/client/assistant-ui-recovery.tsx +205 -0
  529. package/src/client/automation/index.ts +4 -0
  530. package/src/client/automation.ts +22 -0
  531. package/src/client/blocks/AiEditableField.tsx +30 -0
  532. package/src/client/blocks/BlockView.tsx +145 -0
  533. package/src/client/blocks/RegistryBlockDataProvider.tsx +121 -0
  534. package/src/client/blocks/SchemaBlockEditor.tsx +457 -0
  535. package/src/client/blocks/agent.ts +95 -0
  536. package/src/client/blocks/code-block-direction.ts +21 -0
  537. package/src/client/blocks/index.ts +308 -0
  538. package/src/client/blocks/library/AnnotatedCodeBlock.tsx +710 -0
  539. package/src/client/blocks/library/ApiEndpointBlock.tsx +1120 -0
  540. package/src/client/blocks/library/DataModelBlock.tsx +775 -0
  541. package/src/client/blocks/library/DiffBlock.tsx +1854 -0
  542. package/src/client/blocks/library/FileTreeBlock.tsx +868 -0
  543. package/src/client/blocks/library/HighlightedCode.tsx +260 -0
  544. package/src/client/blocks/library/JsonExplorerBlock.tsx +608 -0
  545. package/src/client/blocks/library/MermaidBlock.tsx +362 -0
  546. package/src/client/blocks/library/OpenApiSpecBlock.tsx +998 -0
  547. package/src/client/blocks/library/annotated-code.config.ts +101 -0
  548. package/src/client/blocks/library/annotation-rail.tsx +1020 -0
  549. package/src/client/blocks/library/api-endpoint.config.ts +207 -0
  550. package/src/client/blocks/library/block-copy.ts +399 -0
  551. package/src/client/blocks/library/callout.config.ts +57 -0
  552. package/src/client/blocks/library/callout.tsx +149 -0
  553. package/src/client/blocks/library/checklist.config.ts +56 -0
  554. package/src/client/blocks/library/checklist.tsx +208 -0
  555. package/src/client/blocks/library/code-filename-label.tsx +59 -0
  556. package/src/client/blocks/library/code-highlight.tsx +178 -0
  557. package/src/client/blocks/library/code-tabs.config.ts +70 -0
  558. package/src/client/blocks/library/code-tabs.tsx +606 -0
  559. package/src/client/blocks/library/code.config.ts +69 -0
  560. package/src/client/blocks/library/code.tsx +440 -0
  561. package/src/client/blocks/library/columns.config.ts +85 -0
  562. package/src/client/blocks/library/columns.tsx +334 -0
  563. package/src/client/blocks/library/data-model.config.ts +152 -0
  564. package/src/client/blocks/library/dev-doc-ui.tsx +191 -0
  565. package/src/client/blocks/library/diagram.config.ts +222 -0
  566. package/src/client/blocks/library/diagram.tsx +958 -0
  567. package/src/client/blocks/library/diff.config.ts +115 -0
  568. package/src/client/blocks/library/file-tree.config.ts +92 -0
  569. package/src/client/blocks/library/html.config.ts +79 -0
  570. package/src/client/blocks/library/html.tsx +258 -0
  571. package/src/client/blocks/library/json-explorer.config.ts +74 -0
  572. package/src/client/blocks/library/mermaid.config.ts +49 -0
  573. package/src/client/blocks/library/narrow-container.tsx +37 -0
  574. package/src/client/blocks/library/openapi-spec.config.ts +66 -0
  575. package/src/client/blocks/library/question-form.config.ts +127 -0
  576. package/src/client/blocks/library/question-form.tsx +944 -0
  577. package/src/client/blocks/library/sanitize-html.ts +343 -0
  578. package/src/client/blocks/library/server-specs.ts +338 -0
  579. package/src/client/blocks/library/specs.tsx +308 -0
  580. package/src/client/blocks/library/table.config.ts +61 -0
  581. package/src/client/blocks/library/table.tsx +449 -0
  582. package/src/client/blocks/library/tabs.config.ts +96 -0
  583. package/src/client/blocks/library/tabs.tsx +665 -0
  584. package/src/client/blocks/library/wireframe-icons.ts +210 -0
  585. package/src/client/blocks/library/wireframe-kit.tsx +1850 -0
  586. package/src/client/blocks/library/wireframe.config.ts +539 -0
  587. package/src/client/blocks/library/wireframe.tsx +535 -0
  588. package/src/client/blocks/mdx.ts +364 -0
  589. package/src/client/blocks/provider.tsx +51 -0
  590. package/src/client/blocks/registry.ts +83 -0
  591. package/src/client/blocks/schema-form/introspect.ts +201 -0
  592. package/src/client/blocks/server.ts +170 -0
  593. package/src/client/blocks/types.ts +415 -0
  594. package/src/client/browser-session-bridge.ts +548 -0
  595. package/src/client/browser-tab-id.ts +36 -0
  596. package/src/client/builder-frame.ts +194 -0
  597. package/src/client/builder-mark.tsx +21 -0
  598. package/src/client/changelog/Changelog.tsx +333 -0
  599. package/src/client/changelog/index.ts +1 -0
  600. package/src/client/chat/ChatHistoryList.tsx +7 -0
  601. package/src/client/chat/attachment-adapters.ts +426 -0
  602. package/src/client/chat/connectors.ts +1579 -0
  603. package/src/client/chat/index.ts +160 -0
  604. package/src/client/chat/markdown-renderer.tsx +693 -0
  605. package/src/client/chat/message-components.tsx +1326 -0
  606. package/src/client/chat/repo-helpers.ts +281 -0
  607. package/src/client/chat/run-recovery.tsx +994 -0
  608. package/src/client/chat/runtime.ts +1810 -0
  609. package/src/client/chat/tool-call-display.tsx +1270 -0
  610. package/src/client/chat/tool-render-registry.tsx +144 -0
  611. package/src/client/chat/use-agent-chat-lifecycle-tracking.ts +74 -0
  612. package/src/client/chat/use-reconnect-reader-owner.ts +28 -0
  613. package/src/client/chat/widgets/DataChartRenderer.tsx +242 -0
  614. package/src/client/chat/widgets/DataChartWidget.tsx +51 -0
  615. package/src/client/chat/widgets/DataInsightsWidget.tsx +59 -0
  616. package/src/client/chat/widgets/DataTableWidget.tsx +240 -0
  617. package/src/client/chat/widgets/InlineExtensionWidget.tsx +60 -0
  618. package/src/client/chat/widgets/builtin-tool-renderers.tsx +213 -0
  619. package/src/client/chat/widgets/data-widget-types.ts +1 -0
  620. package/src/client/chat/widgets/inline-extension-result.ts +86 -0
  621. package/src/client/chat-model-groups.ts +171 -0
  622. package/src/client/chat-thread-url.ts +11 -0
  623. package/src/client/chat-view-transition.ts +213 -0
  624. package/src/client/client-action.ts +21 -0
  625. package/src/client/client-bootstrap.ts +7 -0
  626. package/src/client/client-surface.ts +41 -0
  627. package/src/client/clipboard.ts +89 -0
  628. package/src/client/code-agent-chat-adapter.ts +537 -0
  629. package/src/client/collab/index.ts +60 -0
  630. package/src/client/command-navigation/index.ts +15 -0
  631. package/src/client/comments-review/index.ts +1 -0
  632. package/src/client/components/AgentPresenceChip.tsx +4 -0
  633. package/src/client/components/ApiKeySettings.tsx +309 -0
  634. package/src/client/components/CodeAgentIndicator.tsx +59 -0
  635. package/src/client/components/CodeRequiredDialog.tsx +470 -0
  636. package/src/client/components/LiveCursorOverlay.tsx +5 -0
  637. package/src/client/components/MissingKeyCard.tsx +61 -0
  638. package/src/client/components/PresenceBar.tsx +4 -0
  639. package/src/client/components/RecentEditHighlights.tsx +4 -0
  640. package/src/client/components/RemoteSelectionRings.tsx +5 -0
  641. package/src/client/components/icons/AgentNativeIcon.tsx +46 -0
  642. package/src/client/components/ui/dialog.tsx +1 -0
  643. package/src/client/components/ui/dropdown-menu.tsx +1 -0
  644. package/src/client/components/ui/hover-card.tsx +1 -0
  645. package/src/client/components/ui/message-scroller.tsx +131 -0
  646. package/src/client/components/ui/popover.tsx +1 -0
  647. package/src/client/components/ui/sheet.tsx +1 -0
  648. package/src/client/components/ui/tooltip.tsx +1 -0
  649. package/src/client/composer/index.ts +11 -0
  650. package/src/client/composer/runtime-adapters.tsx +123 -0
  651. package/src/client/composer/use-mention-search.ts +7 -0
  652. package/src/client/composer/wired-components.tsx +53 -0
  653. package/src/client/context-xray/ContextMeter.tsx +124 -0
  654. package/src/client/context-xray/ContextSegmentRow.tsx +27 -0
  655. package/src/client/context-xray/ContextTreemap.tsx +24 -0
  656. package/src/client/context-xray/ContextXRayPanel.tsx +59 -0
  657. package/src/client/context-xray/SegmentProvenancePopover.tsx +18 -0
  658. package/src/client/context-xray/format.ts +27 -0
  659. package/src/client/conversation/AgentConversation.tsx +555 -0
  660. package/src/client/conversation/code-agent-transcript.ts +283 -0
  661. package/src/client/conversation/index.ts +22 -0
  662. package/src/client/conversation/types.ts +85 -0
  663. package/src/client/conversation/use-near-bottom-autoscroll.ts +278 -0
  664. package/src/client/create-query-client.ts +86 -0
  665. package/src/client/db-admin/DataGrid.tsx +551 -0
  666. package/src/client/db-admin/DbAdminPage.tsx +218 -0
  667. package/src/client/db-admin/DevDatabaseLink.tsx +16 -0
  668. package/src/client/db-admin/EditableCell.tsx +451 -0
  669. package/src/client/db-admin/FilterBar.tsx +203 -0
  670. package/src/client/db-admin/ResultsGrid.tsx +114 -0
  671. package/src/client/db-admin/RowSidePanel.tsx +337 -0
  672. package/src/client/db-admin/SqlEditor.tsx +840 -0
  673. package/src/client/db-admin/TableBrowser.tsx +212 -0
  674. package/src/client/db-admin/TableEditor.tsx +760 -0
  675. package/src/client/db-admin/cell-format.ts +246 -0
  676. package/src/client/db-admin/changeset.ts +296 -0
  677. package/src/client/db-admin/export-utils.ts +78 -0
  678. package/src/client/db-admin/index.ts +33 -0
  679. package/src/client/db-admin/sql-storage.ts +134 -0
  680. package/src/client/db-admin/storage.ts +68 -0
  681. package/src/client/db-admin/useAgentSync.ts +226 -0
  682. package/src/client/db-admin/useDbAdmin.ts +294 -0
  683. package/src/client/dev-overlay/DevOverlay.tsx +576 -0
  684. package/src/client/dev-overlay/builtins.ts +40 -0
  685. package/src/client/dev-overlay/index.ts +23 -0
  686. package/src/client/dev-overlay/registry.ts +67 -0
  687. package/src/client/dev-overlay/types.ts +64 -0
  688. package/src/client/dev-overlay/use-dev-option.ts +78 -0
  689. package/src/client/dev-overlay/use-dev-overlay-shortcut.ts +31 -0
  690. package/src/client/dynamic-suggestions.ts +455 -0
  691. package/src/client/embed-auth.ts +544 -0
  692. package/src/client/embed.ts +54 -0
  693. package/src/client/error-capture.ts +690 -0
  694. package/src/client/error-format.ts +211 -0
  695. package/src/client/error-reporting.ts +100 -0
  696. package/src/client/extensions/AgentNativeExtensionFrame.e2e-host.tsx +136 -0
  697. package/src/client/extensions/AgentNativeExtensionFrame.tsx +708 -0
  698. package/src/client/extensions/EmbeddedExtension.tsx +604 -0
  699. package/src/client/extensions/ExtensionEditor.tsx +450 -0
  700. package/src/client/extensions/ExtensionQueryErrorState.tsx +47 -0
  701. package/src/client/extensions/ExtensionSlot.tsx +345 -0
  702. package/src/client/extensions/ExtensionViewer.tsx +1502 -0
  703. package/src/client/extensions/ExtensionViewerPage.tsx +32 -0
  704. package/src/client/extensions/ExtensionsListPage.tsx +432 -0
  705. package/src/client/extensions/ExtensionsSidebarSection.tsx +1259 -0
  706. package/src/client/extensions/InlineExtensionFrame.tsx +660 -0
  707. package/src/client/extensions/agent-native-extension-runtime.ts +495 -0
  708. package/src/client/extensions/delete-extension.ts +76 -0
  709. package/src/client/extensions/extension-load-error.ts +26 -0
  710. package/src/client/extensions/extension-order.ts +49 -0
  711. package/src/client/extensions/extension-popularity.ts +61 -0
  712. package/src/client/extensions/iframe-bridge.ts +377 -0
  713. package/src/client/extensions/index.ts +84 -0
  714. package/src/client/extensions/portable-extension.ts +712 -0
  715. package/src/client/feature-flags/FeatureFlagsPanel.tsx +519 -0
  716. package/src/client/feature-flags/helpers.ts +77 -0
  717. package/src/client/feature-flags/index.ts +13 -0
  718. package/src/client/feature-flags/types.ts +29 -0
  719. package/src/client/feature-flags/use-feature-flag.ts +26 -0
  720. package/src/client/feedback-context.ts +90 -0
  721. package/src/client/frame-protocol.ts +168 -0
  722. package/src/client/frame.ts +329 -0
  723. package/src/client/guided-questions.tsx +1152 -0
  724. package/src/client/history/VersionHistoryPanel.tsx +175 -0
  725. package/src/client/history/index.ts +21 -0
  726. package/src/client/history/use-history.ts +114 -0
  727. package/src/client/hooks/index.ts +46 -0
  728. package/src/client/host/index.ts +170 -0
  729. package/src/client/host-bridge.ts +1272 -0
  730. package/src/client/host-tools.ts +190 -0
  731. package/src/client/i18n.tsx +798 -0
  732. package/src/client/index.ts +370 -0
  733. package/src/client/integrations/IntegrationCard.tsx +186 -0
  734. package/src/client/integrations/IntegrationsPanel.tsx +633 -0
  735. package/src/client/integrations/api.ts +295 -0
  736. package/src/client/integrations/index.ts +29 -0
  737. package/src/client/integrations/useIntegrationStatus.ts +52 -0
  738. package/src/client/mcp-app-host.ts +720 -0
  739. package/src/client/mcp-apps/McpAppRenderer.tsx +760 -0
  740. package/src/client/navigation/index.ts +54 -0
  741. package/src/client/notifications/NotificationsBell.tsx +383 -0
  742. package/src/client/notifications/index.ts +1 -0
  743. package/src/client/observability/ObservabilityDashboard.tsx +890 -0
  744. package/src/client/observability/ThumbsFeedback.tsx +160 -0
  745. package/src/client/observability/index.ts +20 -0
  746. package/src/client/observability/useObservability.ts +266 -0
  747. package/src/client/onboarding/OnboardingBanner.tsx +73 -0
  748. package/src/client/onboarding/OnboardingPanel.tsx +1036 -0
  749. package/src/client/onboarding/SetupButton.tsx +64 -0
  750. package/src/client/onboarding/index.ts +25 -0
  751. package/src/client/onboarding/use-onboarding.ts +164 -0
  752. package/src/client/onboarding/use-preview-mode.ts +40 -0
  753. package/src/client/org/InvitationBanner.tsx +148 -0
  754. package/src/client/org/OrgSwitcher.tsx +754 -0
  755. package/src/client/org/RequireActiveOrg.tsx +337 -0
  756. package/src/client/org/TeamPage.tsx +1432 -0
  757. package/src/client/org/hooks.ts +359 -0
  758. package/src/client/org/index.ts +70 -0
  759. package/src/client/org/workspace-app-links.ts +367 -0
  760. package/src/client/org-team/index.ts +1 -0
  761. package/src/client/progress/RunsTray.tsx +680 -0
  762. package/src/client/progress/index.ts +1 -0
  763. package/src/client/require-session.tsx +142 -0
  764. package/src/client/resources/BuiltinCapabilityDetail.tsx +258 -0
  765. package/src/client/resources/McpConnectionSuggestion.tsx +276 -0
  766. package/src/client/resources/McpIntegrationDialog.tsx +808 -0
  767. package/src/client/resources/McpServerDetail.tsx +230 -0
  768. package/src/client/resources/ResourceEditor.tsx +872 -0
  769. package/src/client/resources/ResourceTree.tsx +860 -0
  770. package/src/client/resources/ResourcesPanel.tsx +1960 -0
  771. package/src/client/resources/index.ts +25 -0
  772. package/src/client/resources/mcp-integration-catalog.ts +771 -0
  773. package/src/client/resources/mcp-integration-logos.ts +108 -0
  774. package/src/client/resources/runtime.ts +1 -0
  775. package/src/client/resources/use-builtin-capabilities.ts +113 -0
  776. package/src/client/resources/use-mcp-servers.ts +217 -0
  777. package/src/client/resources/use-resources.ts +402 -0
  778. package/src/client/review/ReviewCommentComposer.tsx +123 -0
  779. package/src/client/review/ReviewStatusBadge.tsx +39 -0
  780. package/src/client/review/ReviewThreadPanel.tsx +625 -0
  781. package/src/client/review/index.ts +38 -0
  782. package/src/client/review/use-review.ts +186 -0
  783. package/src/client/route-chunk-recovery/index.ts +1 -0
  784. package/src/client/route-chunk-recovery.ts +331 -0
  785. package/src/client/route-state.ts +455 -0
  786. package/src/client/route-warmup.tsx +543 -0
  787. package/src/client/session-replay-iframe.e2e-host.tsx +100 -0
  788. package/src/client/session-replay.ts +3417 -0
  789. package/src/client/settings/AgentsSection.tsx +441 -0
  790. package/src/client/settings/AutomationsSection.tsx +516 -0
  791. package/src/client/settings/BackgroundAgentSection.tsx +189 -0
  792. package/src/client/settings/BrowserSection.tsx +110 -0
  793. package/src/client/settings/DemoModeSection.tsx +48 -0
  794. package/src/client/settings/SecretsSection.tsx +875 -0
  795. package/src/client/settings/SettingsPanel.tsx +3162 -0
  796. package/src/client/settings/SettingsSection.tsx +283 -0
  797. package/src/client/settings/SettingsTabsPage.tsx +592 -0
  798. package/src/client/settings/UsageSection.tsx +401 -0
  799. package/src/client/settings/VoiceTranscriptionSection.tsx +960 -0
  800. package/src/client/settings/agent-settings-search.ts +220 -0
  801. package/src/client/settings/index.ts +27 -0
  802. package/src/client/settings/useBuilderStatus.ts +1055 -0
  803. package/src/client/setup-connections/BuilderConnectCard.tsx +89 -0
  804. package/src/client/setup-connections/ProviderReadinessBadge.tsx +73 -0
  805. package/src/client/setup-connections/SetupConnectionsPage.tsx +94 -0
  806. package/src/client/setup-connections/catalog.ts +6 -0
  807. package/src/client/setup-connections/index.ts +47 -0
  808. package/src/client/setup-connections/runtime.ts +1 -0
  809. package/src/client/sharing/ShareButton.tsx +1748 -0
  810. package/src/client/sharing/ShareDialog.tsx +846 -0
  811. package/src/client/sharing/VisibilityBadge.tsx +4 -0
  812. package/src/client/sharing/index.ts +2 -0
  813. package/src/client/sse-event-processor.ts +2002 -0
  814. package/src/client/terminal/AgentTerminal.tsx +488 -0
  815. package/src/client/terminal/index.ts +7 -0
  816. package/src/client/theme.ts +27 -0
  817. package/src/client/tombstone/agent-presence-chip.ts +17 -0
  818. package/src/client/tombstone/editor.ts +265 -0
  819. package/src/client/tombstone/live-cursor-overlay.ts +21 -0
  820. package/src/client/tombstone/presence-bar.ts +17 -0
  821. package/src/client/tombstone/recent-edit-highlights.ts +17 -0
  822. package/src/client/tombstone/remote-selection-rings.ts +21 -0
  823. package/src/client/tombstone/rich-markdown-editor.ts +265 -0
  824. package/src/client/tombstone/ui-dialog.ts +49 -0
  825. package/src/client/tombstone/ui-dropdown-menu.ts +69 -0
  826. package/src/client/tombstone/ui-hover-card.ts +21 -0
  827. package/src/client/tombstone/ui-popover.ts +25 -0
  828. package/src/client/tombstone/ui-sheet.ts +49 -0
  829. package/src/client/tombstone/ui-tooltip.ts +29 -0
  830. package/src/client/tombstone/visual-style-controls.ts +61 -0
  831. package/src/client/tool-cells/BashCell.tsx +164 -0
  832. package/src/client/tool-cells/EditCell.tsx +303 -0
  833. package/src/client/tool-cells/FilesChangedSummary.tsx +208 -0
  834. package/src/client/tool-cells/WriteCell.tsx +145 -0
  835. package/src/client/tool-cells/index.ts +7 -0
  836. package/src/client/tool-display.ts +41 -0
  837. package/src/client/track.ts +57 -0
  838. package/src/client/transcription/BuilderTranscriptionCta.tsx +120 -0
  839. package/src/client/transcription/use-live-transcription.ts +292 -0
  840. package/src/client/ui/index.ts +55 -0
  841. package/src/client/uploads/index.ts +6 -0
  842. package/src/client/uploads/upload-editor-image.ts +79 -0
  843. package/src/client/uploads/use-upload-resource.ts +24 -0
  844. package/src/client/url-scrub.ts +51 -0
  845. package/src/client/use-action.ts +766 -0
  846. package/src/client/use-agent-chat-context.ts +63 -0
  847. package/src/client/use-agent-chat-home-handoff.ts +207 -0
  848. package/src/client/use-agent-chat.ts +53 -0
  849. package/src/client/use-agent-engine-configured.ts +211 -0
  850. package/src/client/use-avatar.ts +127 -0
  851. package/src/client/use-change-version.ts +150 -0
  852. package/src/client/use-chat-models.ts +252 -0
  853. package/src/client/use-chat-threads.ts +1262 -0
  854. package/src/client/use-db-sync.ts +1112 -0
  855. package/src/client/use-demo-mode-status.ts +30 -0
  856. package/src/client/use-dev-mode.ts +177 -0
  857. package/src/client/use-external-value.ts +40 -0
  858. package/src/client/use-pausing-interval.ts +65 -0
  859. package/src/client/use-pinch-zoom.ts +202 -0
  860. package/src/client/use-run-stuck-detection.ts +427 -0
  861. package/src/client/use-send-to-agent-chat.ts +85 -0
  862. package/src/client/use-session.ts +114 -0
  863. package/src/client/utils.ts +7 -0
  864. package/src/client/visual-style-controls.tsx +1 -0
  865. package/src/client/vite-dev-recovery-script.ts +226 -0
  866. package/src/client/voice-provider-status.ts +44 -0
  867. package/src/client/widgets/index.ts +41 -0
  868. package/src/code-agents/background-controller.ts +398 -0
  869. package/src/code-agents/background-run.ts +156 -0
  870. package/src/code-agents/index.ts +95 -0
  871. package/src/code-agents/prompt-attachments.ts +39 -0
  872. package/src/code-agents/transcript-normalizer.ts +750 -0
  873. package/src/code-agents/transcript-order.ts +73 -0
  874. package/src/coding-tools/index.ts +742 -0
  875. package/src/coding-tools/run-code.ts +1662 -0
  876. package/src/coding-tools/sandbox/adapter.ts +82 -0
  877. package/src/coding-tools/sandbox/background.ts +406 -0
  878. package/src/coding-tools/sandbox/executions-store.ts +517 -0
  879. package/src/coding-tools/sandbox/index.ts +132 -0
  880. package/src/coding-tools/sandbox/local-child-process-adapter.ts +217 -0
  881. package/src/collab/agent-identity.ts +5 -0
  882. package/src/collab/agent-presence.ts +341 -0
  883. package/src/collab/awareness-store.ts +196 -0
  884. package/src/collab/awareness.ts +317 -0
  885. package/src/collab/client-struct.ts +366 -0
  886. package/src/collab/client.ts +1205 -0
  887. package/src/collab/emitter.ts +31 -0
  888. package/src/collab/follow-mode.ts +107 -0
  889. package/src/collab/index.ts +151 -0
  890. package/src/collab/json-to-yjs.ts +504 -0
  891. package/src/collab/presence.ts +207 -0
  892. package/src/collab/recent-edits.ts +215 -0
  893. package/src/collab/routes.ts +191 -0
  894. package/src/collab/storage.ts +228 -0
  895. package/src/collab/struct-routes.ts +133 -0
  896. package/src/collab/text-to-yjs.ts +79 -0
  897. package/src/collab/undo.ts +432 -0
  898. package/src/collab/xml-ops.ts +68 -0
  899. package/src/collab/ydoc-manager.ts +544 -0
  900. package/src/command-navigation/actions.ts +100 -0
  901. package/src/command-navigation/index.ts +12 -0
  902. package/src/comments-review/index.ts +1 -0
  903. package/src/connections/catalog.ts +451 -0
  904. package/src/connections/index.ts +48 -0
  905. package/src/connections/reader.ts +911 -0
  906. package/src/connections/runtime.ts +1 -0
  907. package/src/credentials/index.ts +187 -0
  908. package/src/data-programs/actions.ts +335 -0
  909. package/src/data-programs/contract.ts +284 -0
  910. package/src/data-programs/execute.ts +693 -0
  911. package/src/data-programs/index.ts +72 -0
  912. package/src/data-programs/schema.ts +148 -0
  913. package/src/data-programs/store.ts +755 -0
  914. package/src/data-widgets/index.ts +376 -0
  915. package/src/db/client.ts +1627 -0
  916. package/src/db/create-get-db.ts +579 -0
  917. package/src/db/ddl-guard.ts +302 -0
  918. package/src/db/drizzle-config.ts +190 -0
  919. package/src/db/ensure-additive-columns.ts +430 -0
  920. package/src/db/index.ts +57 -0
  921. package/src/db/migrations.ts +691 -0
  922. package/src/db/request-telemetry.ts +154 -0
  923. package/src/db/runtime-diagnostics.ts +331 -0
  924. package/src/db/schema.ts +121 -0
  925. package/src/db/widen-columns.ts +75 -0
  926. package/src/db-admin/agent-tools.ts +202 -0
  927. package/src/db-admin/index.ts +26 -0
  928. package/src/db-admin/operations.ts +803 -0
  929. package/src/db-admin/routes.ts +174 -0
  930. package/src/db-admin/types.ts +110 -0
  931. package/src/demo/browser-state.ts +47 -0
  932. package/src/demo/fetch-interceptor.ts +175 -0
  933. package/src/demo/redact.ts +575 -0
  934. package/src/deploy/build.ts +3935 -0
  935. package/src/deploy/immutable-assets.ts +65 -0
  936. package/src/deploy/route-discovery.ts +458 -0
  937. package/src/deploy/workspace-core.ts +282 -0
  938. package/src/deploy/workspace-deploy.ts +1488 -0
  939. package/src/eject/provider-api-definitions.ts +193 -0
  940. package/src/eject/remote-mcp-presets.ts +137 -0
  941. package/src/eject/setup-readiness-ui.tsx +29 -0
  942. package/src/eject/workspace-connections.ts +92 -0
  943. package/src/embedding/agent.ts +159 -0
  944. package/src/embedding/bridge.ts +297 -0
  945. package/src/embedding/index.ts +43 -0
  946. package/src/embedding/protocol.ts +185 -0
  947. package/src/embedding/react.tsx +319 -0
  948. package/src/embeddings/index.ts +233 -0
  949. package/src/eval/agent-runner.ts +210 -0
  950. package/src/eval/define-eval.ts +55 -0
  951. package/src/eval/index.ts +49 -0
  952. package/src/eval/report.ts +75 -0
  953. package/src/eval/runner.ts +369 -0
  954. package/src/eval/scorer.ts +244 -0
  955. package/src/eval/types.ts +188 -0
  956. package/src/event-bus/bus.ts +140 -0
  957. package/src/event-bus/index.ts +3 -0
  958. package/src/event-bus/registry.ts +79 -0
  959. package/src/event-bus/types.ts +29 -0
  960. package/src/extensions/actions.ts +1636 -0
  961. package/src/extensions/change-marker.ts +54 -0
  962. package/src/extensions/content-patch.ts +468 -0
  963. package/src/extensions/fetch-tool.ts +461 -0
  964. package/src/extensions/html-shell.ts +803 -0
  965. package/src/extensions/local.ts +462 -0
  966. package/src/extensions/path.ts +40 -0
  967. package/src/extensions/proxy-security.ts +171 -0
  968. package/src/extensions/routes.ts +1080 -0
  969. package/src/extensions/schema.ts +269 -0
  970. package/src/extensions/session-replay-iframe.ts +131 -0
  971. package/src/extensions/slots/routes.ts +126 -0
  972. package/src/extensions/slots/schema.ts +87 -0
  973. package/src/extensions/slots/store.ts +450 -0
  974. package/src/extensions/store.ts +1347 -0
  975. package/src/extensions/theme.ts +114 -0
  976. package/src/extensions/url-safety.ts +316 -0
  977. package/src/extensions/web-content.ts +663 -0
  978. package/src/extensions/web-search-tool.ts +437 -0
  979. package/src/feature-flags/a2a-action-route.ts +56 -0
  980. package/src/feature-flags/actions/get-feature-flags.ts +24 -0
  981. package/src/feature-flags/actions/list-feature-flags.ts +69 -0
  982. package/src/feature-flags/actions/set-feature-flag.ts +89 -0
  983. package/src/feature-flags/index.ts +21 -0
  984. package/src/feature-flags/permissions.ts +53 -0
  985. package/src/feature-flags/plugin.ts +44 -0
  986. package/src/feature-flags/registry.ts +96 -0
  987. package/src/feature-flags/store.ts +176 -0
  988. package/src/file-upload/actions/upload-image.ts +213 -0
  989. package/src/file-upload/builder.ts +431 -0
  990. package/src/file-upload/index.ts +24 -0
  991. package/src/file-upload/pre-upload-attachments.ts +305 -0
  992. package/src/file-upload/registry.ts +125 -0
  993. package/src/file-upload/types.ts +89 -0
  994. package/src/guards/db-tool-scoping.ts +129 -0
  995. package/src/guards/index.ts +23 -0
  996. package/src/guards/no-drizzle-push.ts +116 -0
  997. package/src/guards/no-env-credentials.ts +229 -0
  998. package/src/guards/no-env-mutation.ts +114 -0
  999. package/src/guards/no-localhost-fallback.ts +124 -0
  1000. package/src/guards/no-unscoped-credentials.ts +227 -0
  1001. package/src/guards/no-unscoped-queries.ts +834 -0
  1002. package/src/guards/scan-utils.ts +105 -0
  1003. package/src/guards/types.ts +30 -0
  1004. package/src/history/actions/create-resource-version.ts +92 -0
  1005. package/src/history/actions/get-resource-version.ts +60 -0
  1006. package/src/history/actions/list-resource-history.ts +53 -0
  1007. package/src/history/actions/list-resource-versions.ts +43 -0
  1008. package/src/history/actions/restore-resource-version.ts +96 -0
  1009. package/src/history/index.ts +26 -0
  1010. package/src/history/registry.ts +111 -0
  1011. package/src/history/store.ts +379 -0
  1012. package/src/history/types.ts +69 -0
  1013. package/src/index.browser.ts +155 -0
  1014. package/src/index.ts +408 -0
  1015. package/src/ingestion/docx.ts +158 -0
  1016. package/src/ingestion/figma-node-to-html.ts +1860 -0
  1017. package/src/ingestion/figma.ts +548 -0
  1018. package/src/ingestion/index.ts +107 -0
  1019. package/src/ingestion/media.ts +264 -0
  1020. package/src/ingestion/notion.ts +121 -0
  1021. package/src/ingestion/office.ts +213 -0
  1022. package/src/ingestion/orchestration.ts +160 -0
  1023. package/src/ingestion/pptx.ts +331 -0
  1024. package/src/ingestion/selection.ts +81 -0
  1025. package/src/ingestion/website.ts +151 -0
  1026. package/src/integrations/a2a-continuation-marker.ts +2 -0
  1027. package/src/integrations/a2a-continuation-processor.ts +888 -0
  1028. package/src/integrations/a2a-continuations-store.ts +643 -0
  1029. package/src/integrations/adapter-overrides.ts +12 -0
  1030. package/src/integrations/adapters/discord.ts +364 -0
  1031. package/src/integrations/adapters/email.ts +1164 -0
  1032. package/src/integrations/adapters/google-docs.ts +371 -0
  1033. package/src/integrations/adapters/index.ts +29 -0
  1034. package/src/integrations/adapters/microsoft-teams.ts +413 -0
  1035. package/src/integrations/adapters/slack.ts +1914 -0
  1036. package/src/integrations/adapters/telegram.ts +386 -0
  1037. package/src/integrations/adapters/whatsapp.ts +358 -0
  1038. package/src/integrations/awaiting-input-store.ts +130 -0
  1039. package/src/integrations/catalog.ts +571 -0
  1040. package/src/integrations/computer-supervision-store.ts +423 -0
  1041. package/src/integrations/computer-supervision.ts +213 -0
  1042. package/src/integrations/config-store.ts +131 -0
  1043. package/src/integrations/controls-store.ts +187 -0
  1044. package/src/integrations/eject/messaging-adapters.ts +85 -0
  1045. package/src/integrations/google-docs-poller.ts +671 -0
  1046. package/src/integrations/identity-links-store.ts +210 -0
  1047. package/src/integrations/identity.ts +196 -0
  1048. package/src/integrations/index.ts +220 -0
  1049. package/src/integrations/installations-store.ts +677 -0
  1050. package/src/integrations/integration-memory.ts +187 -0
  1051. package/src/integrations/internal-token.ts +106 -0
  1052. package/src/integrations/pending-tasks-retry-job.ts +286 -0
  1053. package/src/integrations/pending-tasks-store.ts +468 -0
  1054. package/src/integrations/plugin.ts +3048 -0
  1055. package/src/integrations/remote-commands-store.ts +690 -0
  1056. package/src/integrations/remote-devices-store.ts +492 -0
  1057. package/src/integrations/remote-json-safety.ts +127 -0
  1058. package/src/integrations/remote-push-delivery-job.ts +48 -0
  1059. package/src/integrations/remote-push-delivery.ts +370 -0
  1060. package/src/integrations/remote-push-store.ts +664 -0
  1061. package/src/integrations/remote-retry-job.ts +55 -0
  1062. package/src/integrations/remote-run-events-store.ts +222 -0
  1063. package/src/integrations/remote-types.ts +186 -0
  1064. package/src/integrations/runtime.ts +1 -0
  1065. package/src/integrations/scope-store.ts +498 -0
  1066. package/src/integrations/slack-manifest.ts +78 -0
  1067. package/src/integrations/slack-oauth.ts +344 -0
  1068. package/src/integrations/task-queue-stats.ts +144 -0
  1069. package/src/integrations/thread-mapping-store.ts +134 -0
  1070. package/src/integrations/types.ts +485 -0
  1071. package/src/integrations/usage-budget-store.ts +906 -0
  1072. package/src/integrations/webhook-delivery.ts +55 -0
  1073. package/src/integrations/webhook-handler.ts +1939 -0
  1074. package/src/jobs/actions/list-recurring-jobs.ts +105 -0
  1075. package/src/jobs/actions/manage-recurring-job.ts +85 -0
  1076. package/src/jobs/cron.ts +126 -0
  1077. package/src/jobs/index.ts +9 -0
  1078. package/src/jobs/scheduler.ts +703 -0
  1079. package/src/jobs/tools.ts +367 -0
  1080. package/src/local-artifacts/index.ts +1372 -0
  1081. package/src/localization/actions/get-localization-preference.ts +24 -0
  1082. package/src/localization/actions/set-localization-preference.ts +32 -0
  1083. package/src/localization/default-messages.ts +1009 -0
  1084. package/src/localization/index.ts +2 -0
  1085. package/src/localization/server.ts +131 -0
  1086. package/src/localization/shared.ts +208 -0
  1087. package/src/mcp/actions/call-mcp-tool.ts +19 -0
  1088. package/src/mcp/actions/create-org-service-token.ts +87 -0
  1089. package/src/mcp/actions/list-mcp-tools.ts +18 -0
  1090. package/src/mcp/actions/list-org-service-tokens.ts +44 -0
  1091. package/src/mcp/actions/revoke-org-service-token.ts +30 -0
  1092. package/src/mcp/actions/service-token-access.ts +121 -0
  1093. package/src/mcp/ask-app-inline-tasks.ts +125 -0
  1094. package/src/mcp/build-server.ts +2356 -0
  1095. package/src/mcp/builtin-tools.ts +1506 -0
  1096. package/src/mcp/connect-route.ts +1460 -0
  1097. package/src/mcp/connect-store.ts +680 -0
  1098. package/src/mcp/embed-app.ts +2051 -0
  1099. package/src/mcp/embed-route.ts +84 -0
  1100. package/src/mcp/external-agent-policy.ts +18 -0
  1101. package/src/mcp/index.ts +47 -0
  1102. package/src/mcp/oauth-route.ts +1016 -0
  1103. package/src/mcp/oauth-store.ts +581 -0
  1104. package/src/mcp/oauth-token.ts +227 -0
  1105. package/src/mcp/org-directory.ts +343 -0
  1106. package/src/mcp/route-paths.ts +34 -0
  1107. package/src/mcp/screen-memory-stdio.ts +290 -0
  1108. package/src/mcp/server.ts +507 -0
  1109. package/src/mcp/stdio.ts +328 -0
  1110. package/src/mcp/workspace-resolve.ts +261 -0
  1111. package/src/mcp-client/app-api.ts +136 -0
  1112. package/src/mcp-client/app-result.ts +64 -0
  1113. package/src/mcp-client/builtin-capabilities.ts +146 -0
  1114. package/src/mcp-client/builtin-store.ts +93 -0
  1115. package/src/mcp-client/config.ts +281 -0
  1116. package/src/mcp-client/errors.ts +54 -0
  1117. package/src/mcp-client/hub-client.ts +172 -0
  1118. package/src/mcp-client/hub-routes.ts +198 -0
  1119. package/src/mcp-client/index.ts +504 -0
  1120. package/src/mcp-client/manager.ts +968 -0
  1121. package/src/mcp-client/oauth-client.ts +462 -0
  1122. package/src/mcp-client/oauth-routes.ts +307 -0
  1123. package/src/mcp-client/remote-store.ts +674 -0
  1124. package/src/mcp-client/remote-url.ts +97 -0
  1125. package/src/mcp-client/routes.ts +1093 -0
  1126. package/src/mcp-client/screen-memory-local.ts +461 -0
  1127. package/src/mcp-client/tool-policy.ts +182 -0
  1128. package/src/mcp-client/visibility.ts +56 -0
  1129. package/src/mcp-client/workspace-servers.ts +379 -0
  1130. package/src/navigation/index.ts +170 -0
  1131. package/src/notifications/actions.ts +151 -0
  1132. package/src/notifications/channels.ts +410 -0
  1133. package/src/notifications/index.ts +22 -0
  1134. package/src/notifications/registry.ts +216 -0
  1135. package/src/notifications/routes.ts +106 -0
  1136. package/src/notifications/store.ts +236 -0
  1137. package/src/notifications/types.ts +52 -0
  1138. package/src/oauth-tokens/google-refresh.ts +175 -0
  1139. package/src/oauth-tokens/index.ts +15 -0
  1140. package/src/oauth-tokens/store.ts +384 -0
  1141. package/src/observability/cleanup-job.ts +124 -0
  1142. package/src/observability/evals.ts +507 -0
  1143. package/src/observability/experiments.ts +359 -0
  1144. package/src/observability/feedback.ts +332 -0
  1145. package/src/observability/hosted-model-experiment.ts +118 -0
  1146. package/src/observability/index.ts +62 -0
  1147. package/src/observability/plugin.ts +31 -0
  1148. package/src/observability/routes.ts +431 -0
  1149. package/src/observability/sentiment.ts +261 -0
  1150. package/src/observability/store.ts +1347 -0
  1151. package/src/observability/traces.ts +789 -0
  1152. package/src/observability/tracing.ts +157 -0
  1153. package/src/observability/tracking-identity.ts +55 -0
  1154. package/src/observability/types.ts +211 -0
  1155. package/src/onboarding/default-steps.ts +428 -0
  1156. package/src/onboarding/index.ts +22 -0
  1157. package/src/onboarding/plugin.ts +262 -0
  1158. package/src/onboarding/registry.ts +47 -0
  1159. package/src/onboarding/types.ts +96 -0
  1160. package/src/org/accept-pending.ts +98 -0
  1161. package/src/org/auto-join-domain.ts +113 -0
  1162. package/src/org/context.ts +614 -0
  1163. package/src/org/free-email-providers.ts +124 -0
  1164. package/src/org/handlers.ts +1153 -0
  1165. package/src/org/index.ts +63 -0
  1166. package/src/org/migrations.ts +105 -0
  1167. package/src/org/permissions.ts +30 -0
  1168. package/src/org/plugin.ts +255 -0
  1169. package/src/org/schema.ts +28 -0
  1170. package/src/org/types.ts +57 -0
  1171. package/src/org-team/index.ts +1 -0
  1172. package/src/package-lifecycle/deprecated-imports.ts +179 -0
  1173. package/src/package-lifecycle/eject-manifest.ts +345 -0
  1174. package/src/package-lifecycle/index.ts +7 -0
  1175. package/src/package-lifecycle/manifest.ts +120 -0
  1176. package/src/package-lifecycle/migration-manifest.ts +159 -0
  1177. package/src/package-lifecycle/migration-message.ts +6 -0
  1178. package/src/package-lifecycle/tombstone.ts +58 -0
  1179. package/src/package-lifecycle/upgrade-error.ts +37 -0
  1180. package/src/private-blob/index.ts +18 -0
  1181. package/src/private-blob/registry.ts +242 -0
  1182. package/src/private-blob/types.ts +55 -0
  1183. package/src/progress/actions.ts +179 -0
  1184. package/src/progress/index.ts +16 -0
  1185. package/src/progress/registry.ts +127 -0
  1186. package/src/progress/routes.ts +89 -0
  1187. package/src/progress/store.ts +353 -0
  1188. package/src/progress/types.ts +59 -0
  1189. package/src/provider-api/actions/custom-provider-registration.ts +197 -0
  1190. package/src/provider-api/actions/delete-staged-dataset.ts +5 -0
  1191. package/src/provider-api/actions/github-repo-files.ts +266 -0
  1192. package/src/provider-api/actions/list-staged-datasets.ts +5 -0
  1193. package/src/provider-api/actions/provider-api-audit.ts +88 -0
  1194. package/src/provider-api/actions/provider-api.ts +460 -0
  1195. package/src/provider-api/actions/query-staged-dataset.ts +5 -0
  1196. package/src/provider-api/actions/staged-datasets.ts +359 -0
  1197. package/src/provider-api/corpus-jobs-store.ts +522 -0
  1198. package/src/provider-api/corpus-jobs.ts +1817 -0
  1199. package/src/provider-api/custom-registry.ts +456 -0
  1200. package/src/provider-api/github-repo.ts +675 -0
  1201. package/src/provider-api/gong.ts +108 -0
  1202. package/src/provider-api/index.ts +5444 -0
  1203. package/src/provider-api/quota-governor.ts +562 -0
  1204. package/src/provider-api/runtime.ts +1 -0
  1205. package/src/provider-api/staged-datasets-aggregate.ts +304 -0
  1206. package/src/provider-api/staged-datasets-store.ts +441 -0
  1207. package/src/provider-api/staging.ts +483 -0
  1208. package/src/resources/agents.ts +65 -0
  1209. package/src/resources/emitter.ts +54 -0
  1210. package/src/resources/handlers.ts +728 -0
  1211. package/src/resources/index.ts +4 -0
  1212. package/src/resources/metadata.ts +252 -0
  1213. package/src/resources/script-helpers.ts +160 -0
  1214. package/src/resources/store.ts +1618 -0
  1215. package/src/review/actions/consume-review-feedback.ts +48 -0
  1216. package/src/review/actions/create-review-comment.ts +108 -0
  1217. package/src/review/actions/delete-review-comment.ts +67 -0
  1218. package/src/review/actions/get-review-feedback.ts +49 -0
  1219. package/src/review/actions/list-review-comments.ts +87 -0
  1220. package/src/review/actions/reply-review-comment.ts +118 -0
  1221. package/src/review/actions/resolve-review-thread.ts +94 -0
  1222. package/src/review/actions/send-review-thread-to-agent.ts +62 -0
  1223. package/src/review/actions/set-review-status.ts +58 -0
  1224. package/src/review/identity.ts +101 -0
  1225. package/src/review/index.ts +45 -0
  1226. package/src/review/mentions.ts +44 -0
  1227. package/src/review/registry.ts +111 -0
  1228. package/src/review/store.ts +997 -0
  1229. package/src/review/types.ts +101 -0
  1230. package/src/router/index.ts +24 -0
  1231. package/src/scripts/agent-engines/list-agent-engines.ts +130 -0
  1232. package/src/scripts/agent-engines/manage-agent-engine.ts +197 -0
  1233. package/src/scripts/agent-engines/set-agent-engine.ts +84 -0
  1234. package/src/scripts/agent-engines/test-agent-engine.ts +174 -0
  1235. package/src/scripts/call-agent.ts +792 -0
  1236. package/src/scripts/chat/index.ts +8 -0
  1237. package/src/scripts/chat/open-chat.ts +56 -0
  1238. package/src/scripts/chat/search-chats.ts +121 -0
  1239. package/src/scripts/core-scripts.ts +22 -0
  1240. package/src/scripts/db/check-scoping.ts +212 -0
  1241. package/src/scripts/db/exec.ts +791 -0
  1242. package/src/scripts/db/index.ts +19 -0
  1243. package/src/scripts/db/migrate-encrypt-credentials.ts +223 -0
  1244. package/src/scripts/db/migrate-encrypt-oauth-tokens.ts +213 -0
  1245. package/src/scripts/db/migrate-user-api-keys.ts +257 -0
  1246. package/src/scripts/db/patch.ts +820 -0
  1247. package/src/scripts/db/query.ts +299 -0
  1248. package/src/scripts/db/reset-dev-owner.ts +285 -0
  1249. package/src/scripts/db/safety.ts +286 -0
  1250. package/src/scripts/db/schema.ts +364 -0
  1251. package/src/scripts/db/scoping.ts +341 -0
  1252. package/src/scripts/db/sqlite-client.ts +78 -0
  1253. package/src/scripts/db/tool-mode.ts +23 -0
  1254. package/src/scripts/db/tool-schemas.ts +31 -0
  1255. package/src/scripts/db/wipe-leaked-builder-keys.ts +201 -0
  1256. package/src/scripts/dev/index.ts +296 -0
  1257. package/src/scripts/dev/list-files.ts +119 -0
  1258. package/src/scripts/dev/read-file.ts +77 -0
  1259. package/src/scripts/dev/search-files.ts +151 -0
  1260. package/src/scripts/dev/shell.ts +111 -0
  1261. package/src/scripts/dev/write-file.ts +56 -0
  1262. package/src/scripts/dev-session.ts +96 -0
  1263. package/src/scripts/docs/index.ts +8 -0
  1264. package/src/scripts/docs/search.ts +274 -0
  1265. package/src/scripts/docs/source-search.ts +363 -0
  1266. package/src/scripts/index.ts +15 -0
  1267. package/src/scripts/manage-agent-loop-settings.ts +84 -0
  1268. package/src/scripts/parse-args.ts +46 -0
  1269. package/src/scripts/resources/delete-memory.ts +67 -0
  1270. package/src/scripts/resources/delete.ts +69 -0
  1271. package/src/scripts/resources/effective.ts +71 -0
  1272. package/src/scripts/resources/index.ts +18 -0
  1273. package/src/scripts/resources/list.ts +103 -0
  1274. package/src/scripts/resources/migrate-learnings.ts +40 -0
  1275. package/src/scripts/resources/read.ts +107 -0
  1276. package/src/scripts/resources/save-memory.ts +99 -0
  1277. package/src/scripts/resources/write.ts +158 -0
  1278. package/src/scripts/runner.ts +339 -0
  1279. package/src/scripts/utils.ts +130 -0
  1280. package/src/search/index.ts +413 -0
  1281. package/src/search-utils/index.ts +112 -0
  1282. package/src/secrets/crypto.ts +228 -0
  1283. package/src/secrets/index.ts +65 -0
  1284. package/src/secrets/onboarding.ts +101 -0
  1285. package/src/secrets/register-framework-secrets.ts +228 -0
  1286. package/src/secrets/register.ts +129 -0
  1287. package/src/secrets/routes.ts +697 -0
  1288. package/src/secrets/schema.ts +52 -0
  1289. package/src/secrets/storage.ts +561 -0
  1290. package/src/secrets/substitution.ts +305 -0
  1291. package/src/server/__snapshots__/agent-chat-plugin.surface.spec.ts.snap +150 -0
  1292. package/src/server/action-change.ts +66 -0
  1293. package/src/server/action-discovery.ts +774 -0
  1294. package/src/server/action-routes.ts +608 -0
  1295. package/src/server/agent-access.ts +72 -0
  1296. package/src/server/agent-chat/action-filters-a2a.ts +339 -0
  1297. package/src/server/agent-chat/browser-team-tools.ts +510 -0
  1298. package/src/server/agent-chat/context-tools.ts +599 -0
  1299. package/src/server/agent-chat/framework-prompts.ts +467 -0
  1300. package/src/server/agent-chat/lazy-fs.ts +11 -0
  1301. package/src/server/agent-chat/mcp-glue.ts +91 -0
  1302. package/src/server/agent-chat/plugin-options.ts +379 -0
  1303. package/src/server/agent-chat/process-run-failure.ts +62 -0
  1304. package/src/server/agent-chat/prompt-resources.ts +1004 -0
  1305. package/src/server/agent-chat/recurring-jobs-runtime.ts +80 -0
  1306. package/src/server/agent-chat/request-surface.ts +71 -0
  1307. package/src/server/agent-chat/run-code-tools.ts +67 -0
  1308. package/src/server/agent-chat/script-entries.ts +796 -0
  1309. package/src/server/agent-chat/shared-thread.ts +301 -0
  1310. package/src/server/agent-chat/skill-frontmatter.ts +41 -0
  1311. package/src/server/agent-chat-plugin.ts +5930 -0
  1312. package/src/server/agent-discovery.ts +706 -0
  1313. package/src/server/agent-engine-api-key-route.ts +236 -0
  1314. package/src/server/agent-run-context.ts +204 -0
  1315. package/src/server/agent-teams-run-queue.ts +344 -0
  1316. package/src/server/agent-teams.ts +2257 -0
  1317. package/src/server/agents-bundle.ts +464 -0
  1318. package/src/server/analytics.ts +105 -0
  1319. package/src/server/app-base-path.ts +79 -0
  1320. package/src/server/app-name.ts +53 -0
  1321. package/src/server/app-url.ts +184 -0
  1322. package/src/server/attachment-actions.ts +276 -0
  1323. package/src/server/attribution.ts +214 -0
  1324. package/src/server/auth-marketing.ts +260 -0
  1325. package/src/server/auth-plugin.ts +27 -0
  1326. package/src/server/auth.ts +3803 -0
  1327. package/src/server/better-auth-instance.ts +1197 -0
  1328. package/src/server/builder-browser.ts +1701 -0
  1329. package/src/server/builder-design-systems.ts +668 -0
  1330. package/src/server/builder-space.ts +176 -0
  1331. package/src/server/captcha.ts +63 -0
  1332. package/src/server/capture-error.ts +64 -0
  1333. package/src/server/cli-capture.ts +141 -0
  1334. package/src/server/collab-plugin.ts +391 -0
  1335. package/src/server/complete-text.ts +231 -0
  1336. package/src/server/cookie-namespace.ts +159 -0
  1337. package/src/server/core-routes-plugin.ts +4122 -0
  1338. package/src/server/cors-origins.ts +60 -0
  1339. package/src/server/create-server.ts +268 -0
  1340. package/src/server/credential-provider.ts +1202 -0
  1341. package/src/server/csrf.ts +229 -0
  1342. package/src/server/date-utils.ts +42 -0
  1343. package/src/server/deep-link.ts +119 -0
  1344. package/src/server/derived-secret.ts +32 -0
  1345. package/src/server/design-token-utils.ts +1032 -0
  1346. package/src/server/desktop-sso.ts +83 -0
  1347. package/src/server/edge.ts +69 -0
  1348. package/src/server/email-actions.ts +218 -0
  1349. package/src/server/email-template.ts +192 -0
  1350. package/src/server/email-templates.ts +148 -0
  1351. package/src/server/email.ts +219 -0
  1352. package/src/server/embed-route.ts +283 -0
  1353. package/src/server/embed-session.ts +805 -0
  1354. package/src/server/embedded.ts +252 -0
  1355. package/src/server/entry-server.tsx +154 -0
  1356. package/src/server/framework-request-handler.ts +848 -0
  1357. package/src/server/fusion-app.ts +447 -0
  1358. package/src/server/google-auth-mode.ts +34 -0
  1359. package/src/server/google-auth-plugin.ts +496 -0
  1360. package/src/server/google-oauth-credentials.ts +128 -0
  1361. package/src/server/google-oauth.ts +972 -0
  1362. package/src/server/google-realtime-session.ts +182 -0
  1363. package/src/server/h3-helpers.ts +174 -0
  1364. package/src/server/http-response-telemetry.ts +396 -0
  1365. package/src/server/identity-sso-store.ts +304 -0
  1366. package/src/server/identity-sso.ts +514 -0
  1367. package/src/server/index.ts +593 -0
  1368. package/src/server/missing-key.ts +36 -0
  1369. package/src/server/oauth-helpers.ts +44 -0
  1370. package/src/server/oauth-public-origin.ts +44 -0
  1371. package/src/server/oauth-return-url.ts +120 -0
  1372. package/src/server/og-fonts-data.ts +15 -0
  1373. package/src/server/og-fonts.ts +75 -0
  1374. package/src/server/onboarding-html.ts +4040 -0
  1375. package/src/server/open-route.ts +311 -0
  1376. package/src/server/org-admin.ts +28 -0
  1377. package/src/server/poll-events.ts +88 -0
  1378. package/src/server/poll.ts +1224 -0
  1379. package/src/server/prompts/framework-core-compact.ts +107 -0
  1380. package/src/server/prompts/framework-core.ts +143 -0
  1381. package/src/server/prompts/index.ts +16 -0
  1382. package/src/server/prompts/model-overlays.ts +54 -0
  1383. package/src/server/prompts/shared-rules.ts +104 -0
  1384. package/src/server/realtime-voice.ts +967 -0
  1385. package/src/server/recap-image-route.ts +242 -0
  1386. package/src/server/recap-image-store.ts +185 -0
  1387. package/src/server/request-context.ts +416 -0
  1388. package/src/server/request-origin.ts +67 -0
  1389. package/src/server/resources-plugin.ts +119 -0
  1390. package/src/server/schema-prompt.ts +429 -0
  1391. package/src/server/scoped-key-storage.ts +223 -0
  1392. package/src/server/security-headers.ts +170 -0
  1393. package/src/server/self-dispatch.ts +224 -0
  1394. package/src/server/sentry-config.ts +73 -0
  1395. package/src/server/sentry-plugin.ts +138 -0
  1396. package/src/server/sentry.ts +444 -0
  1397. package/src/server/short-lived-token.ts +170 -0
  1398. package/src/server/social-og-image.ts +454 -0
  1399. package/src/server/sse.ts +102 -0
  1400. package/src/server/ssr-handler.ts +466 -0
  1401. package/src/server/transcribe-voice.ts +1076 -0
  1402. package/src/server/voice-providers-status.ts +118 -0
  1403. package/src/server/workspace-oauth.ts +31 -0
  1404. package/src/server/workspace-provider-oauth.ts +970 -0
  1405. package/src/session-replay-iframe-protocol.ts +58 -0
  1406. package/src/settings/handlers.ts +44 -0
  1407. package/src/settings/index.ts +34 -0
  1408. package/src/settings/org-settings.ts +83 -0
  1409. package/src/settings/script-helpers.ts +24 -0
  1410. package/src/settings/store.ts +247 -0
  1411. package/src/settings/user-settings.ts +47 -0
  1412. package/src/setup-connections/index.ts +90 -0
  1413. package/src/setup-connections/onboarding.ts +47 -0
  1414. package/src/shared/agent-access.ts +112 -0
  1415. package/src/shared/agent-chat.ts +124 -0
  1416. package/src/shared/agent-env.ts +46 -0
  1417. package/src/shared/agent-readable-resource.ts +111 -0
  1418. package/src/shared/agent-sidebar-url.ts +39 -0
  1419. package/src/shared/cache-control.ts +25 -0
  1420. package/src/shared/cloudflare-globals.d.ts +34 -0
  1421. package/src/shared/context-xray.ts +172 -0
  1422. package/src/shared/embed-auth.ts +6 -0
  1423. package/src/shared/index.ts +83 -0
  1424. package/src/shared/llm-connection.ts +42 -0
  1425. package/src/shared/markdown-block-split.ts +129 -0
  1426. package/src/shared/mcp-connect-content.ts +130 -0
  1427. package/src/shared/mcp-embed-headers.ts +175 -0
  1428. package/src/shared/mcp-integration-config.ts +101 -0
  1429. package/src/shared/merge-by-id.ts +14 -0
  1430. package/src/shared/oauth-state.ts +39 -0
  1431. package/src/shared/reasoning-effort.ts +228 -0
  1432. package/src/shared/route-warmup-config.ts +128 -0
  1433. package/src/shared/runtime.ts +31 -0
  1434. package/src/shared/social-meta.ts +82 -0
  1435. package/src/shared/streaming-text-smoothing.ts +184 -0
  1436. package/src/shared/truncate.ts +13 -0
  1437. package/src/shared/workspace-app-audience.ts +177 -0
  1438. package/src/shared/workspace-app-id.ts +54 -0
  1439. package/src/sharing/access.ts +585 -0
  1440. package/src/sharing/actions/create-agent-resource-link.ts +91 -0
  1441. package/src/sharing/actions/extension-change.ts +22 -0
  1442. package/src/sharing/actions/list-resource-shares.ts +93 -0
  1443. package/src/sharing/actions/set-resource-visibility.ts +91 -0
  1444. package/src/sharing/actions/share-resource.ts +322 -0
  1445. package/src/sharing/actions/unshare-resource.ts +72 -0
  1446. package/src/sharing/index.ts +35 -0
  1447. package/src/sharing/registry.ts +201 -0
  1448. package/src/sharing/schema.ts +99 -0
  1449. package/src/styles/agent-conversation.css +766 -0
  1450. package/src/styles/agent-native.css +938 -0
  1451. package/src/styles/blocks.css +1717 -0
  1452. package/src/styles/chat-history-list.css +1 -0
  1453. package/src/styles/rich-markdown-editor.css +1 -0
  1454. package/src/tailwind.preset.ts +140 -0
  1455. package/src/templates/chat/.agents/skills/agent-native-docs/SKILL.md +15 -13
  1456. package/src/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  1457. package/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +9 -6
  1458. package/src/templates/chat/AGENTS.md +3 -2
  1459. package/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +15 -13
  1460. package/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  1461. package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +9 -6
  1462. package/src/templates/default/AGENTS.md +6 -5
  1463. package/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +15 -13
  1464. package/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  1465. package/src/templates/headless/AGENTS.md +5 -4
  1466. package/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +15 -13
  1467. package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +3 -2
  1468. package/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  1469. package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +9 -6
  1470. package/src/templates/workspace-core/AGENTS.md +4 -4
  1471. package/src/templates/workspace-root/AGENTS.md +4 -4
  1472. package/src/terminal/cli-registry.ts +57 -0
  1473. package/src/terminal/index.ts +22 -0
  1474. package/src/terminal/pty-server.ts +389 -0
  1475. package/src/terminal/terminal-plugin.ts +265 -0
  1476. package/src/testing.ts +23 -0
  1477. package/src/tracking/index.ts +10 -0
  1478. package/src/tracking/providers.ts +422 -0
  1479. package/src/tracking/registry.ts +102 -0
  1480. package/src/tracking/route.ts +108 -0
  1481. package/src/tracking/types.ts +16 -0
  1482. package/src/transcription/builder-transcription.ts +118 -0
  1483. package/src/triggers/actions/list-automations.ts +99 -0
  1484. package/src/triggers/actions/manage-automation.ts +78 -0
  1485. package/src/triggers/actions.ts +333 -0
  1486. package/src/triggers/condition-evaluator.ts +163 -0
  1487. package/src/triggers/dispatcher.ts +536 -0
  1488. package/src/triggers/index.ts +13 -0
  1489. package/src/triggers/routes.ts +322 -0
  1490. package/src/triggers/types.ts +42 -0
  1491. package/src/types/pglite.d.ts +26 -0
  1492. package/src/usage/store.ts +698 -0
  1493. package/src/vite/action-types-plugin.ts +481 -0
  1494. package/src/vite/agent-web-plugin.ts +78 -0
  1495. package/src/vite/agents-bundle-plugin.ts +185 -0
  1496. package/src/vite/client.ts +3039 -0
  1497. package/src/vite/index.ts +21 -0
  1498. package/src/voice/index.ts +18 -0
  1499. package/src/voice/voice-cleanup-prompt.ts +38 -0
  1500. package/src/voice/voice-context.ts +217 -0
  1501. package/src/voice/voice-replacements.ts +75 -0
  1502. package/src/workspace-connections/credentials.ts +603 -0
  1503. package/src/workspace-connections/index.ts +72 -0
  1504. package/src/workspace-connections/lifecycle.ts +43 -0
  1505. package/src/workspace-connections/store.ts +1943 -0
  1506. package/src/workspace-files/index.ts +18 -0
  1507. package/src/workspace-files/store.ts +339 -0
  1508. package/src/workspace-files/tool.ts +266 -0
package/src/action.ts ADDED
@@ -0,0 +1,1406 @@
1
+ import type { StandardSchemaV1 } from "@standard-schema/spec";
2
+
3
+ import {
4
+ normalizeActionChatUIConfig,
5
+ type ActionChatUIConfig,
6
+ } from "./action-ui.js";
7
+ import type {
8
+ ActionTool,
9
+ AgentChatAttachment,
10
+ AgentChatEvent,
11
+ } from "./agent/types.js";
12
+ import { normalizeAuditConfig, resolveAuditAttach } from "./audit/config.js";
13
+ import type { ActionAuditConfig } from "./audit/types.js";
14
+
15
+ /**
16
+ * How an action's `run` was invoked. Tagged at each dispatch site so the action
17
+ * (and tracking) can branch on the surface that called it.
18
+ *
19
+ * - `"tool"` — the in-app agent loop, sub-agents/agent-teams, or A2A (which
20
+ * drives the same agent loop). All agent tool calls are `"tool"`.
21
+ * - `"http"` — a programmatic HTTP POST/GET to `/_agent-native/actions/<name>`
22
+ * without the frontend request marker.
23
+ * - `"frontend"` — a browser call via `useActionQuery` / `useActionMutation` /
24
+ * `callAction` (tagged with the `X-Request-Source` header).
25
+ * - `"cli"` — `pnpm action <name>` (the CLI runner).
26
+ * - `"mcp"` — an external agent over the MCP `tools/call` endpoint.
27
+ * - `"a2a"` — a direct, explicitly exposed read-only A2A action dispatch.
28
+ * Natural-language A2A delegation still runs through the agent loop and its
29
+ * selected actions are attributed as `"tool"`.
30
+ */
31
+ export type ActionCaller = "tool" | "http" | "frontend" | "cli" | "mcp" | "a2a";
32
+
33
+ /**
34
+ * Context passed as the optional second argument to an action's `run`.
35
+ * Carries the resolved request identity and the invocation source so actions
36
+ * can read `ctx.userEmail` / `ctx.orgId` / `ctx.caller` directly instead of
37
+ * calling `getRequestUserEmail()` / `getRequestOrgId()` by hand.
38
+ *
39
+ * Backward compatible: existing 1-arg `run(args)` functions keep working, and
40
+ * callers that only need `send` (the agent loop) can still destructure it.
41
+ */
42
+ export interface ActionRunContext {
43
+ /**
44
+ * Emit an SSE event to the client. Only meaningful inside the agent tool
45
+ * loop (e.g. `agent_call_text` streaming); `undefined` on every other
46
+ * surface.
47
+ */
48
+ send?: (event: AgentChatEvent) => void;
49
+ /**
50
+ * Resolved request user email, or `undefined` when there is no authenticated
51
+ * identity. NEVER defaulted to a dev identity — actions that need a fallback
52
+ * must apply their own.
53
+ */
54
+ userEmail?: string;
55
+ /** Resolved org id, or `null` when the request has no org. */
56
+ orgId?: string | null;
57
+ /** How this action was invoked. */
58
+ caller: ActionCaller;
59
+ /** Verified network lineage for direct delegated action calls. */
60
+ networkProtocol?: "a2a" | "mcp" | "provider-api";
61
+ networkId?: string;
62
+ networkPeer?: string;
63
+ /**
64
+ * Attachments submitted with the current agent turn (pasted text blocks,
65
+ * uploaded files, images), exactly as the server received them — with full,
66
+ * untruncated `text` for text attachments. Populated only inside the agent
67
+ * tool loop (`caller: "tool"`); `undefined` on every other surface.
68
+ *
69
+ * Lets an action consume a large pasted artifact BY REFERENCE (e.g.
70
+ * `create-extension`'s `contentFromAttachment`) instead of forcing the model
71
+ * to re-emit the whole file as a tool argument — which frequently gets cut
72
+ * off mid-stream and triggers a continuation loop.
73
+ */
74
+ attachments?: AgentChatAttachment[];
75
+ /**
76
+ * Abort signal for the current agent run. Fires when the run is soft-timed
77
+ * out, user-cancelled, or the server is shutting down. Well-behaved actions
78
+ * can observe this signal to cancel in-flight work early instead of waiting
79
+ * for the per-tool 60-second hard timeout.
80
+ *
81
+ * Populated only inside the agent tool loop (`caller: "tool"`); `undefined`
82
+ * on every other surface. Never throws — checking `signal.aborted` or
83
+ * attaching an `"abort"` listener is always safe.
84
+ */
85
+ signal?: AbortSignal;
86
+ /**
87
+ * Name of the action being invoked (the registry key, e.g.
88
+ * `delete-recording`). Set at each dispatch site so cross-cutting concerns —
89
+ * notably the audit log — can attribute the call. `undefined` for direct
90
+ * programmatic `run()` calls that bypass the dispatcher.
91
+ */
92
+ actionName?: string;
93
+ /**
94
+ * Agent conversation thread + turn that triggered this call, populated only
95
+ * inside the agent tool loop (`caller: "tool"`). Lets the audit log link a
96
+ * mutation to the specific agent run/turn that caused it. `undefined` on
97
+ * every human/programmatic surface.
98
+ */
99
+ threadId?: string;
100
+ /** Concrete execution id for this agent-loop attempt. */
101
+ runId?: string;
102
+ turnId?: string;
103
+ }
104
+
105
+ export interface AgentActionStopOptions {
106
+ /** Optional stable code surfaced in run metadata and tests. */
107
+ errorCode?: string;
108
+ /** Optional short tool-result text. Defaults to the user-facing message. */
109
+ toolResult?: string;
110
+ }
111
+
112
+ /**
113
+ * Throw from an action when the agent should stop the current turn instead of
114
+ * feeding the failure back to the model for another retry.
115
+ */
116
+ export class AgentActionStopError extends Error {
117
+ readonly agentNativeStop = true;
118
+ readonly errorCode?: string;
119
+ readonly toolResult?: string;
120
+
121
+ constructor(message: string, options: AgentActionStopOptions = {}) {
122
+ super(message);
123
+ this.name = "AgentActionStopError";
124
+ this.errorCode = options.errorCode;
125
+ this.toolResult = options.toolResult;
126
+ }
127
+ }
128
+
129
+ export function isAgentActionStopError(
130
+ err: unknown,
131
+ ): err is AgentActionStopError {
132
+ return (
133
+ err instanceof AgentActionStopError ||
134
+ Boolean(
135
+ err &&
136
+ typeof err === "object" &&
137
+ "agentNativeStop" in err &&
138
+ (err as { agentNativeStop?: unknown }).agentNativeStop === true,
139
+ )
140
+ );
141
+ }
142
+
143
+ /** HTTP exposure config for an action. */
144
+ export interface ActionHttpConfig {
145
+ /** HTTP method. Default: "POST". Use "GET" for read-only actions. */
146
+ method?: "GET" | "POST" | "PUT" | "DELETE";
147
+ /** Override route path under /_agent-native/actions/. Default: action filename. */
148
+ path?: string;
149
+ }
150
+
151
+ /** Explicit opt-in metadata for public agent protocols such as MCP or A2A. */
152
+ export interface PublicAgentActionConfig {
153
+ expose: boolean;
154
+ readOnly: boolean;
155
+ requiresAuth?: boolean;
156
+ isConsequential?: boolean;
157
+ title?: string;
158
+ description?: string;
159
+ }
160
+
161
+ /** A deep link an external agent (MCP / A2A) can surface to the user so they
162
+ * can open the produced/listed resource in the running app UI. */
163
+ export interface ActionDeepLink {
164
+ /** App-relative path (e.g. `/_agent-native/open?app=mail&view=inbox&...`)
165
+ * or an absolute URL. The MCP layer prefixes the request origin when this
166
+ * is relative, and may rewrite it to the `agentnative://` desktop scheme. */
167
+ url: string;
168
+ /** Human-readable label, e.g. "Open draft in Mail". */
169
+ label: string;
170
+ /** Optional view hint (matches the `navigate` command `view`). */
171
+ view?: string;
172
+ }
173
+
174
+ /** Builds a deep link from an action's args + result so external agents can
175
+ * surface an "Open in <app> →" link. MUST be pure and synchronous — no I/O,
176
+ * no awaits. Best-effort: a throw or null is swallowed and never fails the
177
+ * tool call. See the `external-agents` skill. */
178
+ export type ActionLinkBuilder = (ctx: {
179
+ args: Record<string, any>;
180
+ result: any;
181
+ }) => ActionDeepLink | null | undefined;
182
+
183
+ export const MCP_APP_EXTENSION_ID = "io.modelcontextprotocol/ui" as const;
184
+ export const MCP_APP_MIME_TYPE = "text/html;profile=mcp-app" as const;
185
+ export const MCP_APP_RESOURCE_URI_META_KEY = "ui/resourceUri" as const;
186
+
187
+ export interface ActionMcpAppCsp {
188
+ connectDomains?: string[];
189
+ resourceDomains?: string[];
190
+ frameDomains?: string[];
191
+ baseUriDomains?: string[];
192
+ }
193
+
194
+ export type ActionMcpAppCspBuilder = (ctx: {
195
+ actionName: string;
196
+ appId?: string;
197
+ requestOrigin?: string;
198
+ }) => ActionMcpAppCsp | Promise<ActionMcpAppCsp>;
199
+
200
+ export interface ActionMcpAppPermissions {
201
+ camera?: Record<string, never>;
202
+ microphone?: Record<string, never>;
203
+ geolocation?: Record<string, never>;
204
+ clipboardWrite?: Record<string, never>;
205
+ }
206
+
207
+ export interface ActionMcpAppResourceMeta {
208
+ csp?: ActionMcpAppCsp | ActionMcpAppCspBuilder;
209
+ permissions?: ActionMcpAppPermissions;
210
+ /**
211
+ * Host-specific sandbox domain hint. Do not set this to the app's normal
212
+ * production URL; app origins belong in CSP/open-link metadata. ChatGPT uses
213
+ * the separate `openai/widgetDomain` compatibility field.
214
+ */
215
+ domain?: string;
216
+ prefersBorder?: boolean;
217
+ }
218
+
219
+ export type ActionMcpAppHtmlBuilder = (ctx: {
220
+ actionName: string;
221
+ appId?: string;
222
+ requestOrigin?: string;
223
+ }) => string;
224
+
225
+ export interface ActionMcpAppResourceConfig {
226
+ /** `ui://` URI. Defaults to `ui://<app>/<action-name>`. */
227
+ uri?: string;
228
+ /** MCP resource name. Defaults to the action name. */
229
+ name?: string;
230
+ title?: string;
231
+ description?: string;
232
+ /**
233
+ * HTML5 document content for the MCP App resource. Keep this self-contained
234
+ * or declare any external origins in `csp`.
235
+ */
236
+ html: string | ActionMcpAppHtmlBuilder;
237
+ /** Defaults to the MCP Apps HTML MIME type. */
238
+ mimeType?: typeof MCP_APP_MIME_TYPE;
239
+ /** Extra resource/content metadata. `ui` is merged with the fields below. */
240
+ _meta?: Record<string, unknown>;
241
+ csp?: ActionMcpAppCsp | ActionMcpAppCspBuilder;
242
+ permissions?: ActionMcpAppPermissions;
243
+ /**
244
+ * Host-specific sandbox domain hint. Do not set this to the app's normal
245
+ * production URL; app origins belong in CSP/open-link metadata. ChatGPT uses
246
+ * the separate `openai/widgetDomain` compatibility field.
247
+ */
248
+ domain?: string;
249
+ prefersBorder?: boolean;
250
+ }
251
+
252
+ export interface ActionMcpAppConfig {
253
+ /**
254
+ * Optional MCP Apps UI resource for hosts that render inline app iframes.
255
+ * Required when the action should open an interactive app view. Omit when
256
+ * you only need `compactCatalog: true` to keep a non-UI action visible in
257
+ * the compact catalog (e.g. read/update actions that should be callable from
258
+ * Claude.ai / ChatGPT without a dedicated iframe resource).
259
+ */
260
+ resource?: ActionMcpAppResourceConfig;
261
+ /**
262
+ * MCP Apps tool visibility. Defaults to model + app so the LLM can call the
263
+ * action and the app iframe can call it back through the host bridge.
264
+ */
265
+ visibility?: Array<"model" | "app">;
266
+ /**
267
+ * Rare escape hatch for MCP Apps chat hosts. By default OAuth callers with
268
+ * `mcp:apps` see the generic app tools (`open_app`, `list_apps`, etc.) so
269
+ * hosts do not ingest every action-specific UI resource. Set this only when
270
+ * this specific action must stay visible in that compact catalog.
271
+ */
272
+ compactCatalog?: boolean;
273
+ }
274
+
275
+ /** Schema definition for a single action parameter (legacy JSON schema style). */
276
+ export interface ParameterSchema {
277
+ type: string;
278
+ description?: string;
279
+ enum?: string[];
280
+ }
281
+
282
+ /** Infer runtime parameter types from a legacy parameter schema map. */
283
+ type InferParams<T extends Record<string, ParameterSchema> | undefined> =
284
+ T extends Record<string, ParameterSchema>
285
+ ? { [K in keyof T]?: string }
286
+ : Record<string, string>;
287
+
288
+ /**
289
+ * What to do when an action's RETURN value fails `outputSchema` validation.
290
+ *
291
+ * - `"strict"` — throw a clear error so a buggy action surfaces loudly.
292
+ * - `"warn"` (default) — `console.warn` the issues and return the ORIGINAL
293
+ * result unchanged. Non-breaking: behavior never changes unless the dev
294
+ * opts into `"strict"` or `"fallback"`.
295
+ * - `"fallback"` — return `outputFallback` in place of the invalid result.
296
+ *
297
+ * Mirrors Mastra/Flue structured-output handling, kept on the action layer.
298
+ */
299
+ export type ActionOutputErrorStrategy = "strict" | "warn" | "fallback";
300
+
301
+ // ---------------------------------------------------------------------------
302
+ // Schema-based action options (new: Zod / Valibot / ArkType via Standard Schema)
303
+ // ---------------------------------------------------------------------------
304
+
305
+ interface DefineActionWithSchema<
306
+ TSchema extends StandardSchemaV1,
307
+ TReturn = any,
308
+ TOutputSchema extends StandardSchemaV1 | undefined = undefined,
309
+ > {
310
+ description: string;
311
+ /** Standard Schema-compatible schema (Zod, Valibot, ArkType). Provides runtime
312
+ * validation and full TypeScript type inference for `run()` args. The schema is
313
+ * also converted to JSON Schema for the Claude API tool definition. */
314
+ schema: TSchema;
315
+ /** Legacy parameters — ignored when `schema` is provided. */
316
+ parameters?: never;
317
+ /**
318
+ * Optional alternate Standard Schema (Zod, Valibot, ArkType) used ONLY to
319
+ * build the tool definition advertised to the model — the JSON Schema that
320
+ * lands in the Claude `tools` array (and MCP/A2A tool listings, which read
321
+ * the same `tool.parameters`). Runtime validation always runs against
322
+ * `schema` above via the normal `wrapWithValidation` path; setting this
323
+ * never weakens validation and never changes `run()`'s argument type.
324
+ *
325
+ * Use this when the full input schema is much richer than what the model
326
+ * needs to see up front — the canonical example is a deep discriminated
327
+ * union of block/shape types where a per-call catalog lookup tool (e.g.
328
+ * `get-plan-blocks`) already teaches the full field shapes. Advertise a
329
+ * compact version (e.g. an enum of valid `type` values plus a note to call
330
+ * the lookup tool) instead of embedding every variant's fields in every
331
+ * request. Invalid calls still get the full, actionable validation error
332
+ * (missing/invalid fields, received args) from `schema` — this only trims
333
+ * what is proactively shown, not what is accepted or checked.
334
+ */
335
+ agentInputSchema?: StandardSchemaV1;
336
+ /** Optional Standard Schema-compatible schema (Zod, Valibot, ArkType) the
337
+ * action's RETURN value is validated against AFTER `run()` resolves. Borrowed
338
+ * from Mastra/Flue structured-output. When omitted, behavior is byte-for-byte
339
+ * unchanged. The mismatch handling is governed by `outputErrorStrategy`. */
340
+ outputSchema?: TOutputSchema;
341
+ /** What to do when the result fails `outputSchema`. Default: `"warn"`. */
342
+ outputErrorStrategy?: ActionOutputErrorStrategy;
343
+ /** Value returned in place of an invalid result when `outputErrorStrategy` is
344
+ * `"fallback"`. Ignored for the other strategies. */
345
+ outputFallback?: TReturn;
346
+ run: (
347
+ args: StandardSchemaV1.InferOutput<TSchema>,
348
+ ctx?: ActionRunContext,
349
+ ) => Promise<TReturn> | TReturn;
350
+ http?: ActionHttpConfig | false;
351
+ /** Whether the HTTP/frontend action route must have an authenticated owner.
352
+ * Defaults to true. Set to false only for metadata/read actions that safely
353
+ * handle `ctx.userEmail` / `getRequestUserEmail()` being undefined. */
354
+ requiresAuth?: boolean;
355
+ /** Max HTTP request body in bytes. When set, the route 413s on the declared
356
+ * `Content-Length` before parsing. Use for public, no-auth POST actions;
357
+ * unset = no route-level cap. */
358
+ maxBodyBytes?: number;
359
+ /** Whether this action is exposed to the agent — the in-app assistant and the
360
+ * app's MCP/A2A tool surfaces — as a callable tool. **Default-allow opt-out**:
361
+ * `undefined` / `true` expose it; only an explicit `false` hides it from every
362
+ * agent tool list while keeping it callable from the frontend / HTTP
363
+ * (`useActionMutation`, `callAction`, `/_agent-native/actions/<name>`). Use
364
+ * this for UI-only or purely programmatic actions you want behind the
365
+ * framework's auth + action surface WITHOUT spending a slot in the model's
366
+ * tool list. Distinct from `toolCallable`, which only governs the sandboxed
367
+ * extension ("tools") iframe bridge. See `packages/core/docs/content/actions.mdx`. */
368
+ agentTool?: boolean;
369
+ /** If true, the framework will NOT emit a screen-refresh change event after a
370
+ * successful call. Auto-inferred as `true` when `http.method === "GET"`.
371
+ * Only set this manually when you need to override the inference — e.g. a
372
+ * POST action that only reads data but can't use GET for a protocol reason. */
373
+ readOnly?: boolean;
374
+ /** Set false for read-only tools that should stay available in Act mode but
375
+ * must not run during Plan mode because they perform substantive work
376
+ * rather than lightweight inspection. Defaults to allowed when read-only. */
377
+ allowInPlanMode?: boolean;
378
+ /** If true, the agent may execute this action concurrently with other
379
+ * read-only or parallel-safe tool calls emitted in the same model turn.
380
+ * Only set this for mutating actions that are internally concurrency-safe
381
+ * and order-independent for same-turn execution. */
382
+ parallelSafe?: boolean;
383
+ /** Set false to exempt a read-only tool from the agent loop's duplicate
384
+ * read-only call guard (per-turn result cache + "Skipped duplicate..."
385
+ * repeat detection). Default true (deduped). Use this for volatile/polling
386
+ * reads where an identical call is expected to return a different result
387
+ * each time — e.g. polling a code-execution status by id, or re-fetching
388
+ * current on-screen state. Has no effect on non-read-only actions, which
389
+ * are never deduped in the first place. */
390
+ dedupe?: boolean;
391
+ /** Whether this action may be invoked from the tools (Alpine iframe) bridge
392
+ * via `appAction(name, params)` — see `packages/core/docs/content/actions.mdx`
393
+ * ("Tools Callability"). **Default-allow opt-out**: undefined / `true` both
394
+ * allow tool-iframe calls; only an explicit `false` returns 403. Set to
395
+ * `false` for high-blast-radius admin operations (account deletion, org
396
+ * membership changes, anything that modifies auth state) — used by the
397
+ * framework's `share-resource`, `unshare-resource`, and
398
+ * `set-resource-visibility` for defense-in-depth. Regular UI/agent/CLI/MCP/A2A
399
+ * calls are unaffected. Enforced by the action HTTP route layer — see
400
+ * `packages/core/src/server/action-routes.ts`. Audit reference: H5 in
401
+ * `security-audit/05-tools-sandbox.md`. */
402
+ toolCallable?: boolean;
403
+ /** Explicit public-agent exposure metadata. Public web routes never imply
404
+ * public MCP/A2A/OpenAPI tool exposure. Actions must opt in here and public
405
+ * protocol mounts must still filter for safe, route-appropriate tools. */
406
+ publicAgent?: PublicAgentActionConfig;
407
+ /** Optional deep-link builder. When set, MCP/A2A surfaces append an
408
+ * "Open in <app> →" link built from the call's args + result so the
409
+ * external agent can drop the user into the running app at the right
410
+ * view/record. Pure + sync + best-effort. See the `external-agents` skill. */
411
+ link?: ActionLinkBuilder;
412
+ /** Optional MCP Apps UI resource for hosts that can render inline
413
+ * interactive app iframes. Text/deep-link tool results remain the fallback
414
+ * for CLI and non-UI hosts. */
415
+ mcpApp?: ActionMcpAppConfig;
416
+ /** Optional native Agent-Native chat renderer for this action's structured
417
+ * result. This is first-party React UI, not arbitrary HTML/JS. */
418
+ chatUI?: ActionChatUIConfig;
419
+ /**
420
+ * Per-tool timeout override in milliseconds for agent-loop tool calls. Use
421
+ * sparingly for actions that legitimately wait on slow provider work.
422
+ */
423
+ timeoutMs?: number;
424
+ /** Per-tool result truncation override for agent-loop tool calls. */
425
+ maxResultChars?: number;
426
+ /**
427
+ * Opt-in human-in-the-loop approval gate. **Default off** — the framework
428
+ * intentionally keeps HITL approvals rare; almost every action should run
429
+ * without one. Set this only for high-consequence, outward-facing,
430
+ * hard-to-undo operations (the canonical example is actually sending an
431
+ * email). When `needsApproval` resolves truthy and the agent calls this
432
+ * action, the loop does NOT execute `run()`: it emits an `approval_required`
433
+ * event and stops the turn, waiting for a human to approve. The action runs
434
+ * only once the human re-issues the turn approving this specific call.
435
+ *
436
+ * - `true` — always require approval.
437
+ * - `(args, ctx) => boolean | Promise<boolean>` — require approval only when
438
+ * the predicate returns true (e.g. only for external recipients, only
439
+ * above a dollar threshold). Keep it pure + fast; thrown errors are treated
440
+ * as "approval required" (fail closed).
441
+ */
442
+ needsApproval?:
443
+ | boolean
444
+ | ((
445
+ args: StandardSchemaV1.InferOutput<TSchema>,
446
+ ctx?: ActionRunContext,
447
+ ) => boolean | Promise<boolean>);
448
+ /**
449
+ * Audit-log configuration. **Default-on for mutating actions** — you only
450
+ * need this to tune capture: declare the mutated `target` (so the change
451
+ * shows up in the owner's audit trail) and/or a `summary`, opt a read-only
452
+ * action in via `onRead`, or opt a noisy action out via `enabled: false`.
453
+ * See the `audit-log` skill.
454
+ */
455
+ audit?: ActionAuditConfig;
456
+ }
457
+
458
+ // ---------------------------------------------------------------------------
459
+ // Legacy parameter-based action options
460
+ // ---------------------------------------------------------------------------
461
+
462
+ interface DefineActionWithParams<
463
+ TParams extends Record<string, ParameterSchema> | undefined =
464
+ | Record<string, ParameterSchema>
465
+ | undefined,
466
+ TReturn = any,
467
+ > {
468
+ description: string;
469
+ /** Flat map of parameter names to their schema. Automatically wrapped in
470
+ * `{ type: "object", properties: ... }` for the Claude API. */
471
+ parameters?: TParams;
472
+ /** Standard Schema — not used in this overload. */
473
+ schema?: never;
474
+ /** Advertised-only schema override — not used in this overload (no runtime
475
+ * schema to advertise a compact alternative for). See the schema overload
476
+ * above. */
477
+ agentInputSchema?: never;
478
+ /** Optional Standard Schema-compatible schema the action's RETURN value is
479
+ * validated against AFTER `run()` resolves. See the schema overload above.
480
+ * When omitted, behavior is byte-for-byte unchanged. */
481
+ outputSchema?: StandardSchemaV1;
482
+ /** What to do when the result fails `outputSchema`. Default: `"warn"`. */
483
+ outputErrorStrategy?: ActionOutputErrorStrategy;
484
+ /** Value returned in place of an invalid result when `outputErrorStrategy` is
485
+ * `"fallback"`. Ignored for the other strategies. */
486
+ outputFallback?: TReturn;
487
+ run: (
488
+ args: InferParams<TParams>,
489
+ ctx?: ActionRunContext,
490
+ ) => Promise<TReturn> | TReturn;
491
+ http?: ActionHttpConfig | false;
492
+ /** Whether the HTTP/frontend action route must have an authenticated owner.
493
+ * Defaults to true. See the schema overload above. */
494
+ requiresAuth?: boolean;
495
+ /** Max HTTP request body in bytes; 413s on `Content-Length` before parsing.
496
+ * See the schema overload above. */
497
+ maxBodyBytes?: number;
498
+ /** Whether this action is exposed to the agent as a callable tool. Only an
499
+ * explicit `false` hides it from every agent tool list while keeping it
500
+ * frontend/HTTP-callable. See the schema overload above and actions.md. */
501
+ agentTool?: boolean;
502
+ /** If true, the framework will NOT emit a screen-refresh change event after a
503
+ * successful call. Auto-inferred as `true` when `http.method === "GET"`. */
504
+ readOnly?: boolean;
505
+ /** Set false for read-only tools that should stay available in Act mode but
506
+ * must not run during Plan mode. See the schema overload above. */
507
+ allowInPlanMode?: boolean;
508
+ /** If true, the agent may execute this action concurrently with other
509
+ * read-only or parallel-safe tool calls emitted in the same model turn. */
510
+ parallelSafe?: boolean;
511
+ /** Set false to exempt a read-only tool from the duplicate read-only call
512
+ * guard. Default true. See the schema overload above. */
513
+ dedupe?: boolean;
514
+ /** Whether this action may be invoked from the tools (Alpine iframe) bridge
515
+ * via `appAction(name, params)`. See the schema overload above for details
516
+ * and the `toolCallable` section in actions.md. */
517
+ toolCallable?: boolean;
518
+ /** Explicit public-agent exposure metadata. See schema overload above. */
519
+ publicAgent?: PublicAgentActionConfig;
520
+ /** Optional deep-link builder. See schema overload above. */
521
+ link?: ActionLinkBuilder;
522
+ /** Optional MCP Apps UI resource. See schema overload above. */
523
+ mcpApp?: ActionMcpAppConfig;
524
+ /** Optional native Agent-Native chat renderer. See schema overload above. */
525
+ chatUI?: ActionChatUIConfig;
526
+ /** Per-tool timeout override in milliseconds. See schema overload above. */
527
+ timeoutMs?: number;
528
+ /** Per-tool result truncation override. See schema overload above. */
529
+ maxResultChars?: number;
530
+ /** Opt-in human-in-the-loop approval gate (default off). See the schema
531
+ * overload above for full semantics. */
532
+ needsApproval?:
533
+ | boolean
534
+ | ((
535
+ args: InferParams<TParams>,
536
+ ctx?: ActionRunContext,
537
+ ) => boolean | Promise<boolean>);
538
+ /** Audit-log configuration (default-on for mutations). See the schema
539
+ * overload above and the `audit-log` skill. */
540
+ audit?: ActionAuditConfig;
541
+ }
542
+
543
+ // ---------------------------------------------------------------------------
544
+ // Return type — carries schema-inferred input + run return for client inference
545
+ // ---------------------------------------------------------------------------
546
+
547
+ /**
548
+ * Opaque typed wrapper returned by `defineAction`. The type parameters carry
549
+ * the schema-inferred input and the `run` return type so that:
550
+ *
551
+ * - The generated `.generated/action-types.d.ts` can extract them via
552
+ * `typeof import("../actions/my-action").default.run` and augment
553
+ * `ActionRegistry` with concrete param/result types.
554
+ * - `useActionQuery` / `useActionMutation` / `callAction` in the client hooks
555
+ * flow the correct types end-to-end without manual generic annotations.
556
+ *
557
+ * Runtime shape is unchanged — this is a declaration-only wrapper.
558
+ */
559
+ export interface ActionDefinition<TInput, TReturn> {
560
+ /**
561
+ * Typed run function — declaration only; infer input/return from this.
562
+ * `TInput` is the schema's input type (optional defaults allowed at call
563
+ * sites); `TReturn` is the awaited result type of the run callback.
564
+ */
565
+ readonly run: (
566
+ args: TInput,
567
+ ctx?: ActionRunContext,
568
+ ) => Promise<TReturn> | TReturn;
569
+ /** @internal Framework use only — do not call directly. */
570
+ readonly tool: import("./agent/types.js").ActionTool;
571
+ readonly http?: ActionHttpConfig | false;
572
+ readonly requiresAuth?: boolean;
573
+ readonly maxBodyBytes?: number;
574
+ readonly agentTool?: boolean;
575
+ readonly readOnly?: boolean;
576
+ readonly allowInPlanMode?: boolean;
577
+ readonly parallelSafe?: boolean;
578
+ readonly dedupe?: boolean;
579
+ readonly toolCallable?: boolean;
580
+ readonly publicAgent?: PublicAgentActionConfig;
581
+ readonly link?: ActionLinkBuilder;
582
+ readonly mcpApp?: ActionMcpAppConfig;
583
+ readonly chatUI?: ActionChatUIConfig;
584
+ /** Per-tool timeout override in milliseconds for agent-loop tool calls. */
585
+ readonly timeoutMs?: number;
586
+ /** Per-tool result truncation override for agent-loop tool calls. */
587
+ readonly maxResultChars?: number;
588
+ /** Standard Schema the action's RETURN value is validated against after
589
+ * `run()` resolves. Present only when the caller passed `outputSchema`. */
590
+ readonly outputSchema?: StandardSchemaV1;
591
+ /** Resolved output-mismatch strategy. Present only when `outputSchema` is
592
+ * set; defaults to `"warn"`. */
593
+ readonly outputErrorStrategy?: ActionOutputErrorStrategy;
594
+ /** Value substituted for an invalid result under the `"fallback"` strategy. */
595
+ readonly outputFallback?: TReturn;
596
+ /** Opt-in human-in-the-loop approval gate (default off). When truthy, the
597
+ * agent loop emits `approval_required` and pauses instead of executing this
598
+ * action until a human approves the specific call. */
599
+ readonly needsApproval?:
600
+ | boolean
601
+ | ((args: TInput, ctx?: ActionRunContext) => boolean | Promise<boolean>);
602
+ /** Resolved audit-log configuration. Present only when the caller passed
603
+ * `audit`. The audit capture wrapper is baked into `run`; this field is for
604
+ * introspection. */
605
+ readonly audit?: ActionAuditConfig;
606
+ }
607
+
608
+ // ---------------------------------------------------------------------------
609
+ // Public API
610
+ // ---------------------------------------------------------------------------
611
+
612
+ /**
613
+ * Define an agent action. Place in `actions/` directory — auto-discovered by the framework.
614
+ *
615
+ * Supports two modes:
616
+ *
617
+ * **Schema mode (recommended)** — pass a Standard Schema-compatible schema (Zod, Valibot,
618
+ * ArkType) for runtime validation and full type inference:
619
+ *
620
+ * ```ts
621
+ * import { defineAction } from "@agent-native/core";
622
+ * import { z } from "zod";
623
+ *
624
+ * export default defineAction({
625
+ * description: "Create a form",
626
+ * schema: z.object({
627
+ * title: z.string().describe("Form title"),
628
+ * status: z.enum(["draft", "published", "closed"]).default("draft"),
629
+ * }),
630
+ * run: async (args) => {
631
+ * // args is { title: string; status: "draft" | "published" | "closed" }
632
+ * // Already validated — invalid inputs never reach here
633
+ * },
634
+ * });
635
+ * ```
636
+ *
637
+ * **Parameters mode (legacy)** — pass raw JSON schema-like parameter definitions:
638
+ *
639
+ * ```ts
640
+ * export default defineAction({
641
+ * description: "List events",
642
+ * parameters: {
643
+ * from: { type: "string", description: "Start date" },
644
+ * },
645
+ * run: async (args) => { ... },
646
+ * });
647
+ * ```
648
+ */
649
+ export function defineAction<
650
+ TSchema extends StandardSchemaV1,
651
+ TReturn,
652
+ TOutputSchema extends StandardSchemaV1 | undefined = undefined,
653
+ >(
654
+ options: DefineActionWithSchema<TSchema, TReturn, TOutputSchema>,
655
+ ): ActionDefinition<StandardSchemaV1.InferInput<TSchema>, TReturn>;
656
+ export function defineAction<
657
+ TParams extends Record<string, ParameterSchema> | undefined,
658
+ TReturn,
659
+ >(
660
+ options: DefineActionWithParams<TParams, TReturn>,
661
+ ): ActionDefinition<InferParams<TParams>, TReturn>;
662
+ export function defineAction(options: any) {
663
+ const hasSchema = options.schema && "~standard" in options.schema;
664
+
665
+ // Build tool definition for the Claude API
666
+ let toolParameters: ActionTool["parameters"];
667
+ if (hasSchema) {
668
+ // Convert Standard Schema to JSON Schema for Claude
669
+ toolParameters = schemaToJsonSchema(options.schema, options.description);
670
+ } else if (options.parameters) {
671
+ toolParameters = {
672
+ type: "object" as const,
673
+ properties: options.parameters,
674
+ };
675
+ }
676
+
677
+ // `agentInputSchema` swaps in a compact JSON Schema for the ADVERTISED tool
678
+ // definition only (what the model/MCP/A2A tool listings see). It never
679
+ // touches validation below — `wrapWithValidation` is always called with
680
+ // `options.schema`, the full schema, as the source of truth for what's
681
+ // accepted. Passing the same (compact) `toolParameters` into it only
682
+ // affects the top-level "Expected: { ... }" hint text and gateway string
683
+ // coercion, both of which only look at top-level property names/types —
684
+ // unaffected by trimming a nested union, so this stays safe either way.
685
+ if (
686
+ hasSchema &&
687
+ options.agentInputSchema &&
688
+ "~standard" in options.agentInputSchema
689
+ ) {
690
+ toolParameters = schemaToJsonSchema(
691
+ options.agentInputSchema,
692
+ options.description,
693
+ );
694
+ }
695
+
696
+ // Wrap run() with INPUT validation when schema is provided.
697
+ // Pass toolParameters so the validation error can echo the expected signature
698
+ // (required vs optional fields) and help the caller self-correct.
699
+ const inputValidatedRun = hasSchema
700
+ ? wrapWithValidation(options.schema, options.run, toolParameters)
701
+ : options.run;
702
+
703
+ // Then wrap with OUTPUT validation when an outputSchema is provided. This
704
+ // composes AROUND the input-validated run so the order is: validate input →
705
+ // run() → validate output. When no outputSchema is present, the run is passed
706
+ // through untouched and behavior is byte-for-byte unchanged.
707
+ const hasOutputSchema =
708
+ options.outputSchema && "~standard" in options.outputSchema;
709
+ const outputErrorStrategy: ActionOutputErrorStrategy =
710
+ options.outputErrorStrategy === "strict" ||
711
+ options.outputErrorStrategy === "warn" ||
712
+ options.outputErrorStrategy === "fallback"
713
+ ? options.outputErrorStrategy
714
+ : "warn";
715
+ const run = hasOutputSchema
716
+ ? wrapWithOutputValidation(
717
+ options.outputSchema,
718
+ inputValidatedRun,
719
+ outputErrorStrategy,
720
+ options.outputFallback,
721
+ options.description,
722
+ )
723
+ : inputValidatedRun;
724
+
725
+ // Auto-infer readOnly from http.method === "GET" unless explicitly set.
726
+ // GET actions are idempotent reads; their completion should NOT trigger a
727
+ // screen refresh. Everything else is assumed to mutate — the dispatcher
728
+ // emits a change event on success so the UI auto-refetches its queries.
729
+ const httpConfig = options.http as ActionHttpConfig | false | undefined;
730
+ const inferredReadOnly =
731
+ httpConfig !== false &&
732
+ httpConfig !== undefined &&
733
+ httpConfig.method === "GET";
734
+ // Explicit `readOnly` (true OR false) wins. Otherwise infer from http.method.
735
+ // We store the resolved boolean so downstream checks can trust entry.readOnly
736
+ // without re-running method inference — including when a caller explicitly
737
+ // passes readOnly:false to override a GET (rare but valid).
738
+ const readOnly: boolean | undefined =
739
+ typeof options.readOnly === "boolean"
740
+ ? options.readOnly
741
+ : inferredReadOnly
742
+ ? true
743
+ : undefined;
744
+
745
+ // Audit: wrap the validated run so every mutating call records an audit
746
+ // event (who/what/when/from-where, and for the agent which run). Default-on
747
+ // for mutations; read-only actions opt in via `audit.onRead`. The wrapper
748
+ // lazily imports the DB-touching recorder so `action.ts` keeps no static DB
749
+ // dependency.
750
+ const auditConfig = normalizeAuditConfig(options.audit);
751
+ const finalRun = resolveAuditAttach(auditConfig, readOnly)
752
+ ? wrapRunWithAudit(run, auditConfig)
753
+ : run;
754
+
755
+ // toolCallable: thread through whatever the caller declared. We DO NOT
756
+ // default to `true` here — the absence of an explicit field is meaningful
757
+ // to the tools bridge: it lets us emit a one-shot warning when an action
758
+ // without a declared `toolCallable` flag is invoked from a tool, so the
759
+ // ecosystem can migrate over time. The bridge treats `undefined` as
760
+ // "implicit allow with a deprecation warning"; only an explicit `false`
761
+ // refuses the call. See `extensions/routes.ts` and audit H5.
762
+ const toolCallable: boolean | undefined =
763
+ typeof options.toolCallable === "boolean"
764
+ ? options.toolCallable
765
+ : undefined;
766
+ // agentTool: default-allow opt-out. Only an explicit `false` hides the action
767
+ // from the agent tool surfaces; undefined is preserved (treated as exposed).
768
+ const agentTool: boolean | undefined =
769
+ typeof options.agentTool === "boolean" ? options.agentTool : undefined;
770
+ const parallelSafe: boolean | undefined =
771
+ typeof options.parallelSafe === "boolean"
772
+ ? options.parallelSafe
773
+ : undefined;
774
+ const dedupe: boolean | undefined =
775
+ typeof options.dedupe === "boolean" ? options.dedupe : undefined;
776
+ const publicAgent: PublicAgentActionConfig | undefined =
777
+ options.publicAgent &&
778
+ typeof options.publicAgent === "object" &&
779
+ !Array.isArray(options.publicAgent)
780
+ ? options.publicAgent
781
+ : undefined;
782
+ const link: ActionLinkBuilder | undefined =
783
+ typeof options.link === "function" ? options.link : undefined;
784
+ const mcpApp: ActionMcpAppConfig | undefined = (() => {
785
+ if (
786
+ !options.mcpApp ||
787
+ typeof options.mcpApp !== "object" ||
788
+ Array.isArray(options.mcpApp)
789
+ ) {
790
+ return undefined;
791
+ }
792
+ // compactCatalog-only: no resource required; just keep the flag.
793
+ if (options.mcpApp.compactCatalog === true && !options.mcpApp.resource) {
794
+ return options.mcpApp as ActionMcpAppConfig;
795
+ }
796
+ // Full resource: validate html is present.
797
+ if (
798
+ options.mcpApp.resource &&
799
+ typeof options.mcpApp.resource === "object" &&
800
+ !Array.isArray(options.mcpApp.resource) &&
801
+ (typeof options.mcpApp.resource.html === "string" ||
802
+ typeof options.mcpApp.resource.html === "function")
803
+ ) {
804
+ return options.mcpApp as ActionMcpAppConfig;
805
+ }
806
+ return undefined;
807
+ })();
808
+ const chatUI = normalizeActionChatUIConfig(options.chatUI);
809
+
810
+ return {
811
+ tool: {
812
+ description: options.description,
813
+ parameters: toolParameters,
814
+ },
815
+ run: finalRun,
816
+ ...(hasSchema ? { schema: options.schema } : {}),
817
+ ...(options.http !== undefined ? { http: options.http } : {}),
818
+ ...(typeof options.requiresAuth === "boolean"
819
+ ? { requiresAuth: options.requiresAuth }
820
+ : {}),
821
+ ...(typeof options.maxBodyBytes === "number"
822
+ ? { maxBodyBytes: options.maxBodyBytes }
823
+ : {}),
824
+ ...(typeof agentTool === "boolean" ? { agentTool } : {}),
825
+ ...(typeof readOnly === "boolean" ? { readOnly } : {}),
826
+ ...(typeof options.allowInPlanMode === "boolean"
827
+ ? { allowInPlanMode: options.allowInPlanMode }
828
+ : {}),
829
+ ...(typeof parallelSafe === "boolean" ? { parallelSafe } : {}),
830
+ ...(typeof dedupe === "boolean" ? { dedupe } : {}),
831
+ ...(typeof toolCallable === "boolean" ? { toolCallable } : {}),
832
+ ...(publicAgent ? { publicAgent } : {}),
833
+ ...(link ? { link } : {}),
834
+ ...(mcpApp ? { mcpApp } : {}),
835
+ ...(chatUI ? { chatUI } : {}),
836
+ ...(typeof options.timeoutMs === "number"
837
+ ? { timeoutMs: options.timeoutMs }
838
+ : {}),
839
+ ...(typeof options.maxResultChars === "number"
840
+ ? { maxResultChars: options.maxResultChars }
841
+ : {}),
842
+ ...(hasOutputSchema
843
+ ? {
844
+ outputSchema: options.outputSchema,
845
+ outputErrorStrategy,
846
+ ...(outputErrorStrategy === "fallback"
847
+ ? { outputFallback: options.outputFallback }
848
+ : {}),
849
+ }
850
+ : {}),
851
+ ...(typeof options.needsApproval === "boolean" ||
852
+ typeof options.needsApproval === "function"
853
+ ? { needsApproval: options.needsApproval }
854
+ : {}),
855
+ ...(auditConfig ? { audit: auditConfig } : {}),
856
+ };
857
+ }
858
+
859
+ /**
860
+ * Wrap an action's (already input/output-validated) run so each call records an
861
+ * audit event after it resolves — on success and on error. Best-effort: the
862
+ * recorder swallows its own failures and the original result/throw is always
863
+ * preserved, so auditing can never change an action's behavior. The DB-touching
864
+ * recorder is imported lazily so merely defining an action pulls in no DB code.
865
+ */
866
+ function wrapRunWithAudit(
867
+ run: (args: any, ctx?: ActionRunContext) => any,
868
+ auditConfig: ActionAuditConfig | undefined,
869
+ ): (args: any, ctx?: ActionRunContext) => Promise<any> {
870
+ return async function auditedRun(args: any, ctx?: ActionRunContext) {
871
+ let result: any;
872
+ let error: unknown;
873
+ let threw = false;
874
+ try {
875
+ result = await run(args, ctx);
876
+ } catch (err) {
877
+ error = err;
878
+ threw = true;
879
+ }
880
+ try {
881
+ const { recordActionAudit } = await import("./audit/record.js");
882
+ await recordActionAudit(
883
+ threw
884
+ ? { config: auditConfig, args, ctx, status: "error", error }
885
+ : { config: auditConfig, args, ctx, status: "success", result },
886
+ );
887
+ } catch {
888
+ // Recorder failed to load/run — never affect the action.
889
+ }
890
+ if (threw) throw error;
891
+ return result;
892
+ };
893
+ }
894
+
895
+ // ---------------------------------------------------------------------------
896
+ // Schema → JSON Schema conversion
897
+ // ---------------------------------------------------------------------------
898
+
899
+ // Keywords whose value is a single subschema.
900
+ const SUBSCHEMA_VALUE_KEYS = [
901
+ "items",
902
+ "additionalItems",
903
+ "contains",
904
+ "additionalProperties",
905
+ "not",
906
+ "if",
907
+ "then",
908
+ "else",
909
+ ] as const;
910
+ // Keywords whose value is an array of subschemas.
911
+ const SUBSCHEMA_ARRAY_KEYS = [
912
+ "allOf",
913
+ "anyOf",
914
+ "oneOf",
915
+ "prefixItems",
916
+ ] as const;
917
+ // Keywords whose value is a map of name → subschema.
918
+ const SUBSCHEMA_MAP_KEYS = [
919
+ "properties",
920
+ "patternProperties",
921
+ "$defs",
922
+ "definitions",
923
+ "dependentSchemas",
924
+ ] as const;
925
+
926
+ /**
927
+ * Remove JSON Schema keywords that some providers' function-calling schema
928
+ * validators reject. OpenAI (and Gemini via the Builder gateway) reject
929
+ * `propertyNames` — which Zod v4 emits for `z.record(z.string(), …)` — with a
930
+ * `400 invalid_function_parameters` error, causing the model turn to produce no
931
+ * content (surfacing as an empty assistant response). Anthropic ignores the
932
+ * keyword, so stripping it is safe across providers and keeps action schemas
933
+ * portable. `propertyNames` only constrained object *keys*; the value/shape of
934
+ * the object is unaffected by its removal.
935
+ *
936
+ * Only descends through actual subschema positions (properties, items, union
937
+ * branches, definitions, etc.) — never through value-bearing keywords like
938
+ * `default`, `const`, `enum`, or `examples`, whose objects may legitimately
939
+ * contain a `propertyNames` data key that must be preserved.
940
+ */
941
+ function stripUnsupportedSchemaKeywords<T>(node: T): T {
942
+ if (!node || typeof node !== "object" || Array.isArray(node)) return node;
943
+ const obj = node as Record<string, unknown>;
944
+
945
+ delete obj.propertyNames;
946
+
947
+ for (const key of SUBSCHEMA_VALUE_KEYS) {
948
+ // `items`/`additionalItems` may also be an array of subschemas.
949
+ const value = obj[key];
950
+ if (Array.isArray(value)) {
951
+ for (const sub of value) stripUnsupportedSchemaKeywords(sub);
952
+ } else {
953
+ stripUnsupportedSchemaKeywords(value);
954
+ }
955
+ }
956
+ for (const key of SUBSCHEMA_ARRAY_KEYS) {
957
+ const value = obj[key];
958
+ if (Array.isArray(value)) {
959
+ for (const sub of value) stripUnsupportedSchemaKeywords(sub);
960
+ }
961
+ }
962
+ for (const key of SUBSCHEMA_MAP_KEYS) {
963
+ const value = obj[key];
964
+ if (value && typeof value === "object" && !Array.isArray(value)) {
965
+ for (const sub of Object.values(value)) {
966
+ stripUnsupportedSchemaKeywords(sub);
967
+ }
968
+ }
969
+ }
970
+ return node;
971
+ }
972
+
973
+ /**
974
+ * Convert a Standard Schema to JSON Schema for the Claude API.
975
+ * Tries vendor-specific toJSONSchema first (Zod v4), then falls back
976
+ * to a basic introspection of the schema shape.
977
+ */
978
+ function schemaToJsonSchema(
979
+ schema: StandardSchemaV1,
980
+ _description?: string,
981
+ ): ActionTool["parameters"] {
982
+ const s = schema as any;
983
+
984
+ // Prefer Zod's own JSON Schema output — it handles descriptions,
985
+ // enums, coerce, and all type wrappers correctly.
986
+ if (s["~standard"]?.jsonSchema?.input) {
987
+ try {
988
+ const result = s["~standard"].jsonSchema.input({
989
+ target: "draft-07",
990
+ }) as any;
991
+ // Strip $schema — the Claude API validates against draft 2020-12
992
+ // and a mismatched $schema declaration can cause rejections.
993
+ if (result && typeof result === "object") {
994
+ delete result.$schema;
995
+ }
996
+ return stripUnsupportedSchemaKeywords(result) as ActionTool["parameters"];
997
+ } catch {
998
+ // Fall through to manual converter
999
+ }
1000
+ }
1001
+
1002
+ // Fallback: manual conversion from Zod v4 internal defs
1003
+ if (s._zod?.def) {
1004
+ return stripUnsupportedSchemaKeywords(zodDefToJsonSchema(s._zod.def));
1005
+ }
1006
+
1007
+ // Last resort: empty object schema
1008
+ return { type: "object" as const, properties: {} };
1009
+ }
1010
+
1011
+ /**
1012
+ * Convert a Zod v4 internal def to JSON Schema.
1013
+ * Handles the common types used in action parameters.
1014
+ */
1015
+ function zodDefToJsonSchema(def: any): any {
1016
+ const type = def.type;
1017
+
1018
+ if (type === "object") {
1019
+ const properties: Record<string, any> = {};
1020
+ const required: string[] = [];
1021
+ const shape = def.shape;
1022
+ if (shape) {
1023
+ for (const [key, fieldSchema] of Object.entries(shape) as any[]) {
1024
+ const fieldDef = fieldSchema?._zod?.def;
1025
+ if (fieldDef) {
1026
+ const prop = zodDefToJsonSchema(fieldDef);
1027
+ // Zod v4 stores .describe() on the schema object, not in the def
1028
+ const desc = fieldSchema?.description;
1029
+ if (desc && !prop.description) prop.description = desc;
1030
+ properties[key] = prop;
1031
+ if (
1032
+ fieldDef.type !== "optional" &&
1033
+ fieldDef.type !== "default" &&
1034
+ fieldDef.type !== "nullable"
1035
+ ) {
1036
+ required.push(key);
1037
+ }
1038
+ }
1039
+ }
1040
+ }
1041
+ const result: any = { type: "object", properties };
1042
+ if (required.length > 0) result.required = required;
1043
+ return result;
1044
+ }
1045
+
1046
+ if (type === "string") {
1047
+ const result: any = { type: "string" };
1048
+ if (def.description) result.description = def.description;
1049
+ return result;
1050
+ }
1051
+
1052
+ if (type === "number" || type === "float" || type === "int") {
1053
+ const result: any = { type: type === "int" ? "integer" : "number" };
1054
+ if (def.description) result.description = def.description;
1055
+ return result;
1056
+ }
1057
+
1058
+ if (type === "boolean") {
1059
+ const result: any = { type: "boolean" };
1060
+ if (def.description) result.description = def.description;
1061
+ return result;
1062
+ }
1063
+
1064
+ if (type === "enum") {
1065
+ // Zod v4 stores enum entries as an object {a: "a", b: "b"};
1066
+ // JSON Schema requires an array.
1067
+ const entries = def.entries;
1068
+ const enumValues = Array.isArray(entries)
1069
+ ? entries
1070
+ : typeof entries === "object" && entries !== null
1071
+ ? Object.values(entries)
1072
+ : entries;
1073
+ const result: any = { type: "string", enum: enumValues };
1074
+ if (def.description) result.description = def.description;
1075
+ return result;
1076
+ }
1077
+
1078
+ if (type === "literal") {
1079
+ return { type: typeof def.value, enum: [def.value] };
1080
+ }
1081
+
1082
+ if (type === "array") {
1083
+ const result: any = { type: "array" };
1084
+ if (def.element?._zod?.def) {
1085
+ result.items = zodDefToJsonSchema(def.element._zod.def);
1086
+ }
1087
+ if (def.description) result.description = def.description;
1088
+ return result;
1089
+ }
1090
+
1091
+ if (type === "optional") {
1092
+ if (def.innerType?._zod?.def) {
1093
+ return zodDefToJsonSchema(def.innerType._zod.def);
1094
+ }
1095
+ }
1096
+
1097
+ if (type === "default") {
1098
+ if (def.innerType?._zod?.def) {
1099
+ const inner = zodDefToJsonSchema(def.innerType._zod.def);
1100
+ inner.default =
1101
+ typeof def.defaultValue === "function"
1102
+ ? def.defaultValue()
1103
+ : def.defaultValue;
1104
+ return inner;
1105
+ }
1106
+ }
1107
+
1108
+ if (type === "nullable") {
1109
+ if (def.innerType?._zod?.def) {
1110
+ const inner = zodDefToJsonSchema(def.innerType._zod.def);
1111
+ // Surface null as a valid value so the model knows it may pass null
1112
+ // (and doesn't treat the field as a non-nullable required string).
1113
+ return { anyOf: [inner, { type: "null" }] };
1114
+ }
1115
+ }
1116
+
1117
+ if (type === "union") {
1118
+ if (def.options?.length) {
1119
+ // Check if it's a simple enum-like union of literals
1120
+ const allLiterals = def.options.every(
1121
+ (o: any) => o?._zod?.def?.type === "literal",
1122
+ );
1123
+ if (allLiterals) {
1124
+ const values = def.options.map((o: any) => o._zod.def.value);
1125
+ const jsonTypeOf = (v: any) =>
1126
+ typeof v === "number"
1127
+ ? "number"
1128
+ : typeof v === "boolean"
1129
+ ? "boolean"
1130
+ : "string";
1131
+ const uniqueTypes = [...new Set(values.map(jsonTypeOf))];
1132
+ if (uniqueTypes.length === 1) {
1133
+ // Homogeneous literal union (e.g. all numbers) — derive the JSON
1134
+ // type instead of hardcoding "string", which would contradict the
1135
+ // enum values and make the model coerce/round-trip them wrongly.
1136
+ return { type: uniqueTypes[0], enum: values };
1137
+ }
1138
+ // Mixed literal types: emit anyOf so each branch stays self-consistent.
1139
+ return {
1140
+ anyOf: values.map((v: any) => ({ type: jsonTypeOf(v), enum: [v] })),
1141
+ };
1142
+ }
1143
+ return {
1144
+ anyOf: def.options.map((o: any) =>
1145
+ zodDefToJsonSchema(o._zod?.def ?? {}),
1146
+ ),
1147
+ };
1148
+ }
1149
+ }
1150
+
1151
+ // z.preprocess / z.pipe / .superRefine / .transform all produce a "pipe"
1152
+ // def with `in` (pre-transform) and `out` (post-transform). For JSON Schema
1153
+ // purposes, use `out` — it reflects the validated output shape the model
1154
+ // should populate.
1155
+ if (type === "pipe") {
1156
+ if (def.out?._zod?.def) {
1157
+ return zodDefToJsonSchema(def.out._zod.def);
1158
+ }
1159
+ if (def.in?._zod?.def) {
1160
+ return zodDefToJsonSchema(def.in._zod.def);
1161
+ }
1162
+ }
1163
+
1164
+ // Fallback
1165
+ return { type: "string" };
1166
+ }
1167
+
1168
+ // ---------------------------------------------------------------------------
1169
+ // Runtime validation wrapper
1170
+ // ---------------------------------------------------------------------------
1171
+
1172
+ const NO_COERCE = Symbol("no-coerce");
1173
+
1174
+ /**
1175
+ * Coerce a single stringified value to one of the JSON-schema types the field
1176
+ * expects. Returns NO_COERCE when nothing safe applies, so the caller leaves
1177
+ * the original value untouched and the normal validation error still surfaces.
1178
+ */
1179
+ function coerceStringToSchemaType(raw: string, types: string[]): unknown {
1180
+ const trimmed = raw.trim();
1181
+ if (types.includes("boolean")) {
1182
+ if (trimmed === "true") return true;
1183
+ if (trimmed === "false") return false;
1184
+ }
1185
+ if (
1186
+ (types.includes("array") &&
1187
+ trimmed.startsWith("[") &&
1188
+ trimmed.endsWith("]")) ||
1189
+ (types.includes("object") &&
1190
+ trimmed.startsWith("{") &&
1191
+ trimmed.endsWith("}"))
1192
+ ) {
1193
+ try {
1194
+ const parsed = JSON.parse(trimmed);
1195
+ if (types.includes("array") && Array.isArray(parsed)) return parsed;
1196
+ if (
1197
+ types.includes("object") &&
1198
+ parsed &&
1199
+ typeof parsed === "object" &&
1200
+ !Array.isArray(parsed)
1201
+ ) {
1202
+ return parsed;
1203
+ }
1204
+ } catch {
1205
+ // fall through — leave the original so validation reports the real error
1206
+ }
1207
+ }
1208
+ if (
1209
+ (types.includes("number") || types.includes("integer")) &&
1210
+ trimmed !== "" &&
1211
+ Number.isFinite(Number(trimmed))
1212
+ ) {
1213
+ const n = Number(trimmed);
1214
+ if (types.includes("number") || Number.isInteger(n)) return n;
1215
+ }
1216
+ return NO_COERCE;
1217
+ }
1218
+
1219
+ /**
1220
+ * Defensively coerce stringified action arguments to the types the schema
1221
+ * expects. Two callers depend on this:
1222
+ *
1223
+ * 1. Model gateways (notably Builder's Gemini-backed gateway) hand back
1224
+ * structured tool-call arguments as JSON strings — an array param arrives
1225
+ * as `"[{...}]"`, a boolean as `"true"`.
1226
+ * 2. GET actions called from the browser via `useActionQuery` / `callAction`.
1227
+ * Those serialize params into the query string, where `URLSearchParams`
1228
+ * stringifies everything — so `includeSeries: true` arrives as the string
1229
+ * `"true"` and `limit: 5` as `"5"` (see `action-routes.ts`).
1230
+ *
1231
+ * In both cases Standard Schema (zod) `validate` does not coerce, so the call
1232
+ * fails validation ("expected boolean, received string") — the agent thrashes
1233
+ * retrying shapes and the frontend query errors. We only touch a string value
1234
+ * when the schema expects a non-string type and the string parses cleanly to
1235
+ * it; anything ambiguous (schema also allows string) or unparseable is left
1236
+ * as-is. Operates on top-level properties only — once an array/object param is
1237
+ * parsed, its nested members are already native and validate normally.
1238
+ *
1239
+ * Do NOT narrow this to "gateway-only": the GET query-string path relies on it
1240
+ * too, and `action-routes.spec.ts` guards that round-trip.
1241
+ */
1242
+ function coerceGatewayStringifiedArgs(
1243
+ args: unknown,
1244
+ parameters?: ActionTool["parameters"],
1245
+ ): unknown {
1246
+ const properties = parameters?.properties as
1247
+ | Record<string, { type?: string | string[] }>
1248
+ | undefined;
1249
+ if (!properties) return args;
1250
+ if (!args || typeof args !== "object" || Array.isArray(args)) return args;
1251
+ let out: Record<string, unknown> | null = null;
1252
+ for (const [key, raw] of Object.entries(args as Record<string, unknown>)) {
1253
+ if (typeof raw !== "string") continue;
1254
+ const spec = properties[key];
1255
+ if (!spec) continue;
1256
+ const types = Array.isArray(spec.type)
1257
+ ? spec.type
1258
+ : spec.type
1259
+ ? [spec.type]
1260
+ : [];
1261
+ // No declared type, or the field legitimately accepts a string → leave it.
1262
+ if (types.length === 0 || types.includes("string")) continue;
1263
+ const coerced = coerceStringToSchemaType(raw, types);
1264
+ if (coerced === NO_COERCE) continue;
1265
+ if (!out) out = { ...(args as Record<string, unknown>) };
1266
+ out[key] = coerced;
1267
+ }
1268
+ return out ?? args;
1269
+ }
1270
+
1271
+ /**
1272
+ * Wrap an action's run function with schema validation.
1273
+ * Invalid inputs get a clear error message (including what was actually passed)
1274
+ * so the agent can see its own mistake and correct it on the next turn.
1275
+ */
1276
+ function wrapWithValidation(
1277
+ schema: StandardSchemaV1,
1278
+ run: Function,
1279
+ toolParameters?: ActionTool["parameters"],
1280
+ ): (args: any, ctx?: ActionRunContext) => any {
1281
+ return async (args: any, ctx?: ActionRunContext) => {
1282
+ args = coerceGatewayStringifiedArgs(args, toolParameters);
1283
+ const result = await schema["~standard"].validate(args);
1284
+ if (result.issues) {
1285
+ // Split issues into "missing required field" vs other validation errors
1286
+ // so the error message reads naturally rather than as "fieldName: Required".
1287
+ const missing: string[] = [];
1288
+ const other: string[] = [];
1289
+ for (const issue of result.issues) {
1290
+ const pathStr = issue.path
1291
+ ? issue.path.map((p) => (typeof p === "object" ? p.key : p)).join(".")
1292
+ : "";
1293
+ const msg = String(issue.message ?? "");
1294
+ // Zod emits "Required" for missing fields; other libraries may use
1295
+ // similar wording. Treat any variant as "missing".
1296
+ if (
1297
+ pathStr &&
1298
+ (msg === "Required" ||
1299
+ /invalid.*undefined/i.test(msg) ||
1300
+ /expected.*received undefined/i.test(msg))
1301
+ ) {
1302
+ missing.push(pathStr);
1303
+ } else {
1304
+ other.push(pathStr ? `${pathStr}: ${msg}` : msg);
1305
+ }
1306
+ }
1307
+
1308
+ const parts: string[] = [];
1309
+ if (missing.length > 0) {
1310
+ parts.push(
1311
+ `Missing required parameter${missing.length === 1 ? "" : "s"}: ${missing.join(", ")}`,
1312
+ );
1313
+ }
1314
+ if (other.length > 0) {
1315
+ parts.push(other.join("; "));
1316
+ }
1317
+
1318
+ // Echo the args that were actually passed so the caller (usually an
1319
+ // agent) can see exactly what it sent and fix its next call.
1320
+ let received: string;
1321
+ try {
1322
+ received = JSON.stringify(args);
1323
+ if (received.length > 500) received = received.slice(0, 500) + "…";
1324
+ } catch {
1325
+ received = String(args);
1326
+ }
1327
+
1328
+ // Also show the EXPECTED signature so the agent doesn't have to guess.
1329
+ // Format: `{ deckId*: string, content*: string, slideId?: string, ... }`
1330
+ // where `*` = required, `?` = optional.
1331
+ let expected = "";
1332
+ if (toolParameters?.properties) {
1333
+ const required = new Set(toolParameters.required ?? []);
1334
+ const sig = Object.entries(toolParameters.properties)
1335
+ .map(([k, v]) => {
1336
+ const mark = required.has(k) ? "*" : "?";
1337
+ const type = (v as { type?: string }).type ?? "any";
1338
+ return `${k}${mark}: ${type}`;
1339
+ })
1340
+ .join(", ");
1341
+ if (sig)
1342
+ expected = ` Expected: { ${sig} } (where * = required, ? = optional).`;
1343
+ }
1344
+
1345
+ throw new Error(
1346
+ `Invalid action parameters — ${parts.join(". ")}. Received: ${received}.${expected}`,
1347
+ );
1348
+ }
1349
+ return run((result as StandardSchemaV1.SuccessResult<any>).value, ctx);
1350
+ };
1351
+ }
1352
+
1353
+ /**
1354
+ * Wrap an action's run function with RETURN-value validation. Runs AFTER the
1355
+ * (already input-validated) `run` resolves and validates the result against
1356
+ * `outputSchema` using the Standard Schema `~standard.validate` contract.
1357
+ *
1358
+ * Behavior is governed by `strategy`:
1359
+ * - `"strict"` — throw a clear error when the result doesn't match.
1360
+ * - `"warn"` — `console.warn` the issues and return the ORIGINAL result
1361
+ * unchanged (default; never alters runtime behavior).
1362
+ * - `"fallback"`— return `fallback` in place of the invalid result.
1363
+ *
1364
+ * On success the validated value is returned (so schema-applied coercion /
1365
+ * defaults take effect, mirroring the input path).
1366
+ */
1367
+ function wrapWithOutputValidation(
1368
+ outputSchema: StandardSchemaV1,
1369
+ run: (args: any, ctx?: ActionRunContext) => any,
1370
+ strategy: ActionOutputErrorStrategy,
1371
+ fallback: unknown,
1372
+ description?: string,
1373
+ ): (args: any, ctx?: ActionRunContext) => any {
1374
+ return async (args: any, ctx?: ActionRunContext) => {
1375
+ const output = await run(args, ctx);
1376
+ const result = await outputSchema["~standard"].validate(output);
1377
+
1378
+ if (!result.issues) {
1379
+ // Return the validated value so coercion / defaults defined on the
1380
+ // outputSchema are applied, consistent with the input path.
1381
+ return (result as StandardSchemaV1.SuccessResult<any>).value;
1382
+ }
1383
+
1384
+ const issues = result.issues
1385
+ .map((issue) => {
1386
+ const pathStr = issue.path
1387
+ ? issue.path.map((p) => (typeof p === "object" ? p.key : p)).join(".")
1388
+ : "";
1389
+ const msg = String(issue.message ?? "");
1390
+ return pathStr ? `${pathStr}: ${msg}` : msg;
1391
+ })
1392
+ .join("; ");
1393
+ const label = description ? ` (${description})` : "";
1394
+ const summary = `Action output did not match outputSchema${label}: ${issues}`;
1395
+
1396
+ if (strategy === "strict") {
1397
+ throw new Error(summary);
1398
+ }
1399
+ if (strategy === "fallback") {
1400
+ return fallback;
1401
+ }
1402
+ // "warn" (default): surface the mismatch but never change behavior.
1403
+ console.warn(summary);
1404
+ return output;
1405
+ };
1406
+ }