@agent-native/core 0.113.0 → 0.114.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1638) hide show
  1. package/agent-native.eject.json +164 -0
  2. package/corpus/README.md +3 -3
  3. package/corpus/core/CHANGELOG.md +20 -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/build-compatibility.ts +77 -0
  12. package/corpus/core/src/client/index.ts +4 -0
  13. package/corpus/core/src/client/resources/McpConnectionSuggestion.tsx +8 -2
  14. package/corpus/core/src/client/resources/McpIntegrationDialog.tsx +7 -2
  15. package/corpus/core/src/client/resources/ResourcesPanel.tsx +17 -3
  16. package/corpus/core/src/client/resources/index.ts +19 -0
  17. package/corpus/core/src/client/resources/mcp-integration-catalog.ts +9 -1
  18. package/corpus/core/src/client/resources/runtime.ts +1 -0
  19. package/corpus/core/src/client/route-chunk-recovery/index.ts +1 -0
  20. package/corpus/core/src/client/setup-connections/catalog.ts +6 -0
  21. package/corpus/core/src/client/setup-connections/index.ts +1 -0
  22. package/corpus/core/src/client/setup-connections/runtime.ts +1 -0
  23. package/corpus/core/src/client/use-action.ts +32 -1
  24. package/corpus/core/src/connections/catalog.ts +41 -24
  25. package/corpus/core/src/connections/index.ts +1 -0
  26. package/corpus/core/src/connections/runtime.ts +1 -0
  27. package/corpus/core/src/deploy/build.ts +4 -1
  28. package/corpus/core/src/eject/provider-api-definitions.ts +193 -0
  29. package/corpus/core/src/eject/remote-mcp-presets.ts +137 -0
  30. package/corpus/core/src/eject/setup-readiness-ui.tsx +29 -0
  31. package/corpus/core/src/eject/workspace-connections.ts +92 -0
  32. package/corpus/core/src/index.ts +1 -0
  33. package/corpus/core/src/integrations/adapter-overrides.ts +12 -0
  34. package/corpus/core/src/integrations/eject/messaging-adapters.ts +85 -0
  35. package/corpus/core/src/integrations/index.ts +5 -1
  36. package/corpus/core/src/integrations/plugin.ts +34 -12
  37. package/corpus/core/src/integrations/runtime.ts +1 -0
  38. package/corpus/core/src/integrations/types.ts +3 -1
  39. package/corpus/core/src/org/context.ts +56 -30
  40. package/corpus/core/src/package-lifecycle/eject-manifest.ts +345 -0
  41. package/corpus/core/src/package-lifecycle/index.ts +1 -0
  42. package/corpus/core/src/provider-api/index.ts +46 -12
  43. package/corpus/core/src/provider-api/runtime.ts +1 -0
  44. package/corpus/core/src/server/action-routes.ts +52 -2
  45. package/corpus/core/src/server/auth-plugin.ts +9 -4
  46. package/corpus/core/src/server/better-auth-instance.ts +5 -1
  47. package/corpus/core/src/setup-connections/index.ts +1 -0
  48. package/corpus/core/src/shared/mcp-embed-headers.ts +1 -1
  49. package/corpus/core/src/shared/merge-by-id.ts +14 -0
  50. package/corpus/core/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +15 -13
  51. package/corpus/core/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  52. package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +9 -6
  53. package/corpus/core/src/templates/default/AGENTS.md +6 -5
  54. package/corpus/core/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +15 -13
  55. package/corpus/core/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  56. package/corpus/core/src/templates/headless/AGENTS.md +5 -4
  57. package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +15 -13
  58. package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +3 -2
  59. package/corpus/core/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  60. package/corpus/core/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +9 -6
  61. package/corpus/core/src/templates/workspace-core/AGENTS.md +4 -4
  62. package/corpus/core/src/templates/workspace-root/AGENTS.md +4 -4
  63. package/corpus/core/src/vite/client.ts +42 -2
  64. package/corpus/templates/analytics/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  65. package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +9 -6
  66. package/corpus/templates/assets/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  67. package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +9 -6
  68. package/corpus/templates/brain/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  69. package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +9 -6
  70. package/corpus/templates/brain/actions/remediate-legacy-capture-audiences.ts +167 -0
  71. package/corpus/templates/brain/app/lib/brain-chat-readiness.ts +6 -0
  72. package/corpus/templates/brain/app/routes/_index.tsx +8 -0
  73. package/corpus/templates/brain/app/routes.ts +1 -0
  74. package/corpus/templates/brain/changelog/2026-07-19-ask-starts-immediately-when-builder-s-managed-ai-connection-.md +6 -0
  75. package/corpus/templates/brain/changelog/2026-07-19-slack-and-granola-backfills-now-process-captures-concurrentl.md +6 -0
  76. package/corpus/templates/brain/changelog/2026-07-19-source-review-settings-now-control-knowledge-approval.md +6 -0
  77. package/corpus/templates/brain/changelog/2026-07-19-the-manage-agent-page-now-opens-correctly-from-brain-navigat.md +6 -0
  78. package/corpus/templates/brain/server/db/schema.ts +3 -0
  79. package/corpus/templates/brain/server/lib/brain.ts +41 -2
  80. package/corpus/templates/brain/server/lib/connectors.ts +379 -113
  81. package/corpus/templates/brain/server/lib/meeting-audience.ts +38 -0
  82. package/corpus/templates/brain/server/plugins/db.ts +10 -0
  83. package/corpus/templates/brain/server/routes/api/_agent-native/brain/ingest.post.ts +6 -4
  84. package/corpus/templates/calendar/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  85. package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +9 -6
  86. package/corpus/templates/chat/.agents/skills/agent-native-docs/SKILL.md +15 -13
  87. package/corpus/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  88. package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +9 -6
  89. package/corpus/templates/chat/AGENTS.md +3 -2
  90. package/corpus/templates/clips/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  91. package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +9 -6
  92. package/corpus/templates/content/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  93. package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +9 -6
  94. package/corpus/templates/content/AGENTS.md +2 -0
  95. package/corpus/templates/content/actions/_content-database-personal-view.ts +49 -5
  96. package/corpus/templates/content/actions/_content-document-access.ts +21 -0
  97. package/corpus/templates/content/actions/_content-favorites.ts +91 -0
  98. package/corpus/templates/content/actions/_content-files.ts +79 -23
  99. package/corpus/templates/content/actions/_content-sidebar-state.ts +24 -0
  100. package/corpus/templates/content/actions/_content-space-access.ts +15 -17
  101. package/corpus/templates/content/actions/_content-space-catalog-guards.ts +20 -0
  102. package/corpus/templates/content/actions/_content-spaces.ts +364 -167
  103. package/corpus/templates/content/actions/_database-source-utils.ts +8 -0
  104. package/corpus/templates/content/actions/_database-utils.ts +249 -15
  105. package/corpus/templates/content/actions/_delete-content-space.ts +84 -0
  106. package/corpus/templates/content/actions/_files-system-properties.ts +499 -0
  107. package/corpus/templates/content/actions/_local-file-documents.ts +0 -1
  108. package/corpus/templates/content/actions/_property-utils.ts +18 -9
  109. package/corpus/templates/content/actions/bind-content-database-source-field.ts +3 -0
  110. package/corpus/templates/content/actions/configure-document-property.ts +3 -0
  111. package/corpus/templates/content/actions/create-content-database.ts +2 -2
  112. package/corpus/templates/content/actions/create-content-space.ts +34 -0
  113. package/corpus/templates/content/actions/create-document.ts +4 -1
  114. package/corpus/templates/content/actions/delete-content-space.ts +19 -0
  115. package/corpus/templates/content/actions/delete-database-items.ts +28 -1
  116. package/corpus/templates/content/actions/delete-document-property.ts +3 -0
  117. package/corpus/templates/content/actions/delete-document.ts +39 -2
  118. package/corpus/templates/content/actions/duplicate-database-item.ts +6 -0
  119. package/corpus/templates/content/actions/duplicate-database-items.ts +6 -0
  120. package/corpus/templates/content/actions/duplicate-document-property.ts +3 -0
  121. package/corpus/templates/content/actions/get-content-database.ts +11 -2
  122. package/corpus/templates/content/actions/get-content-sidebar-state.ts +23 -0
  123. package/corpus/templates/content/actions/get-document.ts +32 -7
  124. package/corpus/templates/content/actions/import-content-source.ts +33 -1
  125. package/corpus/templates/content/actions/list-content-spaces.ts +34 -2
  126. package/corpus/templates/content/actions/list-documents.ts +39 -7
  127. package/corpus/templates/content/actions/reorder-document-property.ts +9 -0
  128. package/corpus/templates/content/actions/set-document-property.ts +41 -23
  129. package/corpus/templates/content/actions/share-local-file-document.ts +15 -0
  130. package/corpus/templates/content/actions/submit-content-database-form.ts +7 -0
  131. package/corpus/templates/content/actions/sync-local-folder-source.ts +14 -0
  132. package/corpus/templates/content/actions/update-content-database-view.ts +1 -0
  133. package/corpus/templates/content/actions/update-content-sidebar-state.ts +27 -0
  134. package/corpus/templates/content/actions/update-document.ts +158 -66
  135. package/corpus/templates/content/app/components/EmptyState.tsx +4 -57
  136. package/corpus/templates/content/app/components/editor/CommentsSidebar.tsx +8 -1
  137. package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +519 -178
  138. package/corpus/templates/content/app/components/editor/DocumentInfoPanel.tsx +39 -0
  139. package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +1 -1
  140. package/corpus/templates/content/app/components/editor/DocumentToolbar.tsx +266 -7
  141. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +430 -152
  142. package/corpus/templates/content/app/components/editor/database/sidebar.tsx +467 -66
  143. package/corpus/templates/content/app/components/editor/database/view-config.ts +9 -3
  144. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +720 -196
  145. package/corpus/templates/content/app/components/sidebar/DocumentTreeItem.tsx +173 -1
  146. package/corpus/templates/content/app/components/sidebar/document-sidebar-sections.ts +1 -1
  147. package/corpus/templates/content/app/components/sidebar/select-content-space.ts +91 -16
  148. package/corpus/templates/content/app/entry.client.tsx +5 -1
  149. package/corpus/templates/content/app/hooks/use-content-database.ts +84 -3
  150. package/corpus/templates/content/app/hooks/use-content-spaces.ts +60 -2
  151. package/corpus/templates/content/app/hooks/use-create-page.ts +30 -0
  152. package/corpus/templates/content/app/hooks/use-documents.ts +270 -19
  153. package/corpus/templates/content/app/i18n-data.ts +243 -20
  154. package/corpus/templates/content/app/lib/local-folder-picker-safety.ts +54 -0
  155. package/corpus/templates/content/app/lib/local-folder-picker-support.ts +18 -0
  156. package/corpus/templates/content/app/routes/_app.favorites.tsx +30 -0
  157. package/corpus/templates/content/app/routes/_app.local-files.tsx +18 -6
  158. package/corpus/templates/content/changelog/2026-07-17-workspace-files-now-stay-in-a-loading-state-until-automatic-.md +6 -0
  159. package/corpus/templates/content/changelog/2026-07-17-workspace-switching-now-opens-the-selected-files-database-pr.md +6 -0
  160. package/corpus/templates/content/changelog/2026-07-17-workspaces-now-expand-above-their-own-files-list-without-dup.md +6 -0
  161. package/corpus/templates/content/changelog/2026-07-18-create-named-workspaces-each-with-its-own-private-files-data.md +6 -0
  162. package/corpus/templates/content/changelog/2026-07-18-favorites-align-with-workspace-and-file-rows-in-the-sidebar.md +6 -0
  163. package/corpus/templates/content/changelog/2026-07-18-local-folder-selection-no-longer-invokes-the-unsafe-native-p.md +6 -0
  164. package/corpus/templates/content/changelog/2026-07-18-made-content-workspaces-independently-expandable-restored-or.md +6 -0
  165. package/corpus/templates/content/changelog/2026-07-18-page-details-now-live-in-a-shared-info-and-comments-rail-dat.md +6 -0
  166. package/corpus/templates/content/changelog/2026-07-18-workspace-database-views-now-control-sidebar-workspace-navig.md +6 -0
  167. package/corpus/templates/content/changelog/2026-07-18-workspace-navigation-now-aligns-favorites-with-workspace-pag.md +6 -0
  168. package/corpus/templates/content/changelog/2026-07-19-favorites-now-open-as-a-table-and-compact-breadcrumbs-make-w.md +6 -0
  169. package/corpus/templates/content/changelog/2026-07-19-files-databases-now-start-unfiltered-sidebar-rows-exactly-fo.md +6 -0
  170. package/corpus/templates/content/changelog/2026-07-19-sidebar-page-trees-now-open-only-when-expanded-remember-thei.md +6 -0
  171. package/corpus/templates/content/changelog/2026-07-19-workspace-file-databases-now-use-the-workspace-name-open-as-.md +6 -0
  172. package/corpus/templates/content/changelog/2026-07-19-workspace-navigation-now-stays-stable-on-hover-uses-folder-i.md +6 -0
  173. package/corpus/templates/content/changelog/2026-07-19-workspace-rows-now-use-folder-icons-and-deleting-a-user-crea.md +6 -0
  174. package/corpus/templates/content/changelog/2026-07-19-workspaces-can-be-created-without-leaving-the-workspaces-dat.md +6 -0
  175. package/corpus/templates/content/e2e/global-setup.ts +3 -2
  176. package/corpus/templates/content/parity/matrix.md +28 -28
  177. package/corpus/templates/content/parity/matrix.ts +8 -2
  178. package/corpus/templates/content/server/db/index.ts +1 -0
  179. package/corpus/templates/content/server/db/schema.ts +10 -0
  180. package/corpus/templates/content/server/lib/documents.ts +12 -7
  181. package/corpus/templates/content/server/plugins/db.ts +17 -0
  182. package/corpus/templates/content/shared/api.ts +9 -0
  183. package/corpus/templates/content/shared/database-form.ts +11 -2
  184. package/corpus/templates/content/vite.config.ts +1 -0
  185. package/corpus/templates/design/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  186. package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +9 -6
  187. package/corpus/templates/dispatch/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  188. package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +9 -6
  189. package/corpus/templates/forms/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  190. package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +9 -6
  191. package/corpus/templates/macros/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  192. package/corpus/templates/mail/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  193. package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +9 -6
  194. package/corpus/templates/plan/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  195. package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +9 -6
  196. package/corpus/templates/slides/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  197. package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +9 -6
  198. package/corpus/templates/tasks/.agents/skills/agent-native-docs/SKILL.md +15 -13
  199. package/corpus/templates/tasks/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  200. package/corpus/templates/tasks/.agents/skills/self-modifying-code/SKILL.md +9 -6
  201. package/corpus/toolkit/CHANGELOG.md +6 -0
  202. package/corpus/toolkit/agent-native.eject.json +411 -0
  203. package/corpus/toolkit/package.json +5 -2
  204. package/dist/cli/eject.d.ts +21 -0
  205. package/dist/cli/eject.d.ts.map +1 -0
  206. package/dist/cli/eject.js +1145 -0
  207. package/dist/cli/eject.js.map +1 -0
  208. package/dist/cli/index.js +15 -0
  209. package/dist/cli/index.js.map +1 -1
  210. package/dist/client/build-compatibility.d.ts +11 -0
  211. package/dist/client/build-compatibility.d.ts.map +1 -0
  212. package/dist/client/build-compatibility.js +56 -0
  213. package/dist/client/build-compatibility.js.map +1 -0
  214. package/dist/client/index.d.ts +1 -1
  215. package/dist/client/index.d.ts.map +1 -1
  216. package/dist/client/index.js +1 -1
  217. package/dist/client/index.js.map +1 -1
  218. package/dist/client/resources/McpConnectionSuggestion.d.ts +4 -3
  219. package/dist/client/resources/McpConnectionSuggestion.d.ts.map +1 -1
  220. package/dist/client/resources/McpConnectionSuggestion.js +3 -3
  221. package/dist/client/resources/McpConnectionSuggestion.js.map +1 -1
  222. package/dist/client/resources/McpIntegrationDialog.d.ts +4 -3
  223. package/dist/client/resources/McpIntegrationDialog.d.ts.map +1 -1
  224. package/dist/client/resources/McpIntegrationDialog.js +2 -2
  225. package/dist/client/resources/McpIntegrationDialog.js.map +1 -1
  226. package/dist/client/resources/ResourcesPanel.d.ts +4 -1
  227. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  228. package/dist/client/resources/ResourcesPanel.js +9 -7
  229. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  230. package/dist/client/resources/index.d.ts +3 -0
  231. package/dist/client/resources/index.d.ts.map +1 -1
  232. package/dist/client/resources/index.js +3 -0
  233. package/dist/client/resources/index.js.map +1 -1
  234. package/dist/client/resources/mcp-integration-catalog.d.ts +2 -1
  235. package/dist/client/resources/mcp-integration-catalog.d.ts.map +1 -1
  236. package/dist/client/resources/mcp-integration-catalog.js +6 -2
  237. package/dist/client/resources/mcp-integration-catalog.js.map +1 -1
  238. package/dist/client/resources/runtime.d.ts +2 -0
  239. package/dist/client/resources/runtime.d.ts.map +1 -0
  240. package/dist/client/resources/runtime.js +2 -0
  241. package/dist/client/resources/runtime.js.map +1 -0
  242. package/dist/client/route-chunk-recovery/index.d.ts +1 -0
  243. package/dist/client/route-chunk-recovery/index.d.ts.map +1 -1
  244. package/dist/client/route-chunk-recovery/index.js +1 -0
  245. package/dist/client/route-chunk-recovery/index.js.map +1 -1
  246. package/dist/client/setup-connections/catalog.d.ts +2 -0
  247. package/dist/client/setup-connections/catalog.d.ts.map +1 -0
  248. package/dist/client/setup-connections/catalog.js +7 -0
  249. package/dist/client/setup-connections/catalog.js.map +1 -0
  250. package/dist/client/setup-connections/index.d.ts +1 -0
  251. package/dist/client/setup-connections/index.d.ts.map +1 -1
  252. package/dist/client/setup-connections/index.js +1 -0
  253. package/dist/client/setup-connections/index.js.map +1 -1
  254. package/dist/client/setup-connections/runtime.d.ts +2 -0
  255. package/dist/client/setup-connections/runtime.d.ts.map +1 -0
  256. package/dist/client/setup-connections/runtime.js +2 -0
  257. package/dist/client/setup-connections/runtime.js.map +1 -0
  258. package/dist/client/use-action.d.ts.map +1 -1
  259. package/dist/client/use-action.js +19 -1
  260. package/dist/client/use-action.js.map +1 -1
  261. package/dist/collab/awareness.d.ts +2 -2
  262. package/dist/collab/awareness.d.ts.map +1 -1
  263. package/dist/collab/struct-routes.d.ts +1 -1
  264. package/dist/connections/catalog.d.ts +5 -3
  265. package/dist/connections/catalog.d.ts.map +1 -1
  266. package/dist/connections/catalog.js +16 -8
  267. package/dist/connections/catalog.js.map +1 -1
  268. package/dist/connections/index.d.ts +1 -1
  269. package/dist/connections/index.d.ts.map +1 -1
  270. package/dist/connections/index.js +1 -1
  271. package/dist/connections/index.js.map +1 -1
  272. package/dist/connections/runtime.d.ts +2 -0
  273. package/dist/connections/runtime.d.ts.map +1 -0
  274. package/dist/connections/runtime.js +2 -0
  275. package/dist/connections/runtime.js.map +1 -0
  276. package/dist/deploy/build.js +2 -1
  277. package/dist/deploy/build.js.map +1 -1
  278. package/dist/eject/provider-api-definitions.d.ts +34 -0
  279. package/dist/eject/provider-api-definitions.d.ts.map +1 -0
  280. package/dist/eject/provider-api-definitions.js +88 -0
  281. package/dist/eject/provider-api-definitions.js.map +1 -0
  282. package/dist/eject/remote-mcp-presets.d.ts +17 -0
  283. package/dist/eject/remote-mcp-presets.d.ts.map +1 -0
  284. package/dist/eject/remote-mcp-presets.js +81 -0
  285. package/dist/eject/remote-mcp-presets.js.map +1 -0
  286. package/dist/eject/setup-readiness-ui.d.ts +7 -0
  287. package/dist/eject/setup-readiness-ui.d.ts.map +1 -0
  288. package/dist/eject/setup-readiness-ui.js +13 -0
  289. package/dist/eject/setup-readiness-ui.js.map +1 -0
  290. package/dist/eject/workspace-connections.d.ts +11 -0
  291. package/dist/eject/workspace-connections.d.ts.map +1 -0
  292. package/dist/eject/workspace-connections.js +47 -0
  293. package/dist/eject/workspace-connections.js.map +1 -0
  294. package/dist/file-upload/actions/upload-image.d.ts +1 -1
  295. package/dist/index.d.ts +1 -1
  296. package/dist/index.d.ts.map +1 -1
  297. package/dist/index.js +1 -1
  298. package/dist/index.js.map +1 -1
  299. package/dist/integrations/adapter-overrides.d.ts +3 -0
  300. package/dist/integrations/adapter-overrides.d.ts.map +1 -0
  301. package/dist/integrations/adapter-overrides.js +7 -0
  302. package/dist/integrations/adapter-overrides.js.map +1 -0
  303. package/dist/integrations/eject/messaging-adapters.d.ts +12 -0
  304. package/dist/integrations/eject/messaging-adapters.d.ts.map +1 -0
  305. package/dist/integrations/eject/messaging-adapters.js +49 -0
  306. package/dist/integrations/eject/messaging-adapters.js.map +1 -0
  307. package/dist/integrations/index.d.ts +3 -2
  308. package/dist/integrations/index.d.ts.map +1 -1
  309. package/dist/integrations/index.js +2 -1
  310. package/dist/integrations/index.js.map +1 -1
  311. package/dist/integrations/plugin.d.ts +32 -1
  312. package/dist/integrations/plugin.d.ts.map +1 -1
  313. package/dist/integrations/plugin.js +19 -12
  314. package/dist/integrations/plugin.js.map +1 -1
  315. package/dist/integrations/runtime.d.ts +2 -0
  316. package/dist/integrations/runtime.d.ts.map +1 -0
  317. package/dist/integrations/runtime.js +2 -0
  318. package/dist/integrations/runtime.js.map +1 -0
  319. package/dist/integrations/types.d.ts +3 -1
  320. package/dist/integrations/types.d.ts.map +1 -1
  321. package/dist/integrations/types.js.map +1 -1
  322. package/dist/notifications/routes.d.ts +2 -2
  323. package/dist/observability/routes.d.ts +5 -5
  324. package/dist/org/context.d.ts +4 -2
  325. package/dist/org/context.d.ts.map +1 -1
  326. package/dist/org/context.js +44 -22
  327. package/dist/org/context.js.map +1 -1
  328. package/dist/package-lifecycle/eject-manifest.d.ts +43 -0
  329. package/dist/package-lifecycle/eject-manifest.d.ts.map +1 -0
  330. package/dist/package-lifecycle/eject-manifest.js +219 -0
  331. package/dist/package-lifecycle/eject-manifest.js.map +1 -0
  332. package/dist/package-lifecycle/index.d.ts +1 -0
  333. package/dist/package-lifecycle/index.d.ts.map +1 -1
  334. package/dist/package-lifecycle/index.js +1 -0
  335. package/dist/package-lifecycle/index.js.map +1 -1
  336. package/dist/provider-api/actions/custom-provider-registration.d.ts +11 -11
  337. package/dist/provider-api/actions/provider-api.d.ts +11 -11
  338. package/dist/provider-api/index.d.ts +6 -2
  339. package/dist/provider-api/index.d.ts.map +1 -1
  340. package/dist/provider-api/index.js +25 -12
  341. package/dist/provider-api/index.js.map +1 -1
  342. package/dist/provider-api/runtime.d.ts +2 -0
  343. package/dist/provider-api/runtime.d.ts.map +1 -0
  344. package/dist/provider-api/runtime.js +2 -0
  345. package/dist/provider-api/runtime.js.map +1 -0
  346. package/dist/resources/handlers.d.ts +1 -1
  347. package/dist/server/action-routes.d.ts.map +1 -1
  348. package/dist/server/action-routes.js +32 -2
  349. package/dist/server/action-routes.js.map +1 -1
  350. package/dist/server/auth-plugin.d.ts.map +1 -1
  351. package/dist/server/auth-plugin.js +9 -5
  352. package/dist/server/auth-plugin.js.map +1 -1
  353. package/dist/server/better-auth-instance.d.ts.map +1 -1
  354. package/dist/server/better-auth-instance.js +4 -1
  355. package/dist/server/better-auth-instance.js.map +1 -1
  356. package/dist/setup-connections/index.d.ts +1 -1
  357. package/dist/setup-connections/index.d.ts.map +1 -1
  358. package/dist/setup-connections/index.js +1 -1
  359. package/dist/setup-connections/index.js.map +1 -1
  360. package/dist/shared/mcp-embed-headers.d.ts +1 -1
  361. package/dist/shared/mcp-embed-headers.d.ts.map +1 -1
  362. package/dist/shared/mcp-embed-headers.js +1 -1
  363. package/dist/shared/mcp-embed-headers.js.map +1 -1
  364. package/dist/shared/merge-by-id.d.ts +5 -0
  365. package/dist/shared/merge-by-id.d.ts.map +1 -0
  366. package/dist/shared/merge-by-id.js +7 -0
  367. package/dist/shared/merge-by-id.js.map +1 -0
  368. package/dist/templates/chat/.agents/skills/agent-native-docs/SKILL.md +15 -13
  369. package/dist/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  370. package/dist/templates/chat/.agents/skills/self-modifying-code/SKILL.md +9 -6
  371. package/dist/templates/chat/AGENTS.md +3 -2
  372. package/dist/templates/default/.agents/skills/agent-native-docs/SKILL.md +15 -13
  373. package/dist/templates/default/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  374. package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +9 -6
  375. package/dist/templates/default/AGENTS.md +6 -5
  376. package/dist/templates/headless/.agents/skills/agent-native-docs/SKILL.md +15 -13
  377. package/dist/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  378. package/dist/templates/headless/AGENTS.md +5 -4
  379. package/dist/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +15 -13
  380. package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +3 -2
  381. package/dist/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  382. package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +9 -6
  383. package/dist/templates/workspace-core/AGENTS.md +4 -4
  384. package/dist/templates/workspace-root/AGENTS.md +4 -4
  385. package/dist/vite/client.d.ts +6 -0
  386. package/dist/vite/client.d.ts.map +1 -1
  387. package/dist/vite/client.js +30 -2
  388. package/dist/vite/client.js.map +1 -1
  389. package/docs/content/agent-native-toolkit.mdx +38 -0
  390. package/docs/content/package-lifecycle.mdx +54 -4
  391. package/package.json +15 -2
  392. package/src/a2a/agent-card.ts +83 -0
  393. package/src/a2a/artifact-response.ts +1648 -0
  394. package/src/a2a/auth-policy.ts +66 -0
  395. package/src/a2a/caller-auth.ts +102 -0
  396. package/src/a2a/client.ts +876 -0
  397. package/src/a2a/correlation.ts +50 -0
  398. package/src/a2a/handlers.ts +1285 -0
  399. package/src/a2a/index.ts +50 -0
  400. package/src/a2a/invoke.ts +348 -0
  401. package/src/a2a/response-text.ts +53 -0
  402. package/src/a2a/server.ts +586 -0
  403. package/src/a2a/task-store.ts +917 -0
  404. package/src/a2a/types.ts +221 -0
  405. package/src/a2a-claims.ts +52 -0
  406. package/src/action-change-marker.ts +74 -0
  407. package/src/action-ui.ts +38 -0
  408. package/src/action.ts +1406 -0
  409. package/src/adapters/cli/index.ts +6 -0
  410. package/src/adapters/cli/registry.ts +73 -0
  411. package/src/adapters/cli/shell-adapter.ts +92 -0
  412. package/src/adapters/cli/types.ts +27 -0
  413. package/src/agent/action-continuation-guidance.ts +38 -0
  414. package/src/agent/app-model-defaults.ts +201 -0
  415. package/src/agent/context-xray/actions/context-evict.ts +56 -0
  416. package/src/agent/context-xray/actions/context-manifest-get.ts +75 -0
  417. package/src/agent/context-xray/actions/context-pin.ts +56 -0
  418. package/src/agent/context-xray/actions/context-preview-get.ts +134 -0
  419. package/src/agent/context-xray/actions/context-report.ts +75 -0
  420. package/src/agent/context-xray/actions/context-restore.ts +51 -0
  421. package/src/agent/context-xray/actions/errors.ts +40 -0
  422. package/src/agent/context-xray/apply-directives.ts +137 -0
  423. package/src/agent/context-xray/directives-store.ts +178 -0
  424. package/src/agent/context-xray/identity.ts +37 -0
  425. package/src/agent/context-xray/manifest.ts +284 -0
  426. package/src/agent/context-xray/migrations.ts +32 -0
  427. package/src/agent/context-xray/plugin.ts +23 -0
  428. package/src/agent/context-xray/schema.ts +17 -0
  429. package/src/agent/context-xray/segments.ts +194 -0
  430. package/src/agent/context-xray/tokenize.ts +93 -0
  431. package/src/agent/default-model.ts +5 -0
  432. package/src/agent/durable-background.ts +547 -0
  433. package/src/agent/engine/ai-sdk-engine.ts +565 -0
  434. package/src/agent/engine/anthropic-engine.ts +320 -0
  435. package/src/agent/engine/builder-engine.ts +1110 -0
  436. package/src/agent/engine/builder-gateway-headers.ts +44 -0
  437. package/src/agent/engine/builtin.ts +122 -0
  438. package/src/agent/engine/context-directives-transform.ts +73 -0
  439. package/src/agent/engine/continuation-dispatch-retry.ts +168 -0
  440. package/src/agent/engine/credential-errors.ts +69 -0
  441. package/src/agent/engine/index.ts +54 -0
  442. package/src/agent/engine/openai-compatible-endpoint.ts +25 -0
  443. package/src/agent/engine/output-tokens.ts +181 -0
  444. package/src/agent/engine/provider-env-vars.ts +69 -0
  445. package/src/agent/engine/registry.ts +853 -0
  446. package/src/agent/engine/tool-call-journal-seed.ts +85 -0
  447. package/src/agent/engine/translate-ai-sdk.ts +407 -0
  448. package/src/agent/engine/translate-anthropic.ts +611 -0
  449. package/src/agent/engine/types.ts +310 -0
  450. package/src/agent/harness/acp-adapter.ts +893 -0
  451. package/src/agent/harness/acp-builtin.ts +70 -0
  452. package/src/agent/harness/ai-sdk-adapter.ts +509 -0
  453. package/src/agent/harness/background.ts +365 -0
  454. package/src/agent/harness/builtin.ts +50 -0
  455. package/src/agent/harness/index.ts +86 -0
  456. package/src/agent/harness/lifecycle.ts +498 -0
  457. package/src/agent/harness/registry.ts +97 -0
  458. package/src/agent/harness/runner.ts +182 -0
  459. package/src/agent/harness/store.ts +466 -0
  460. package/src/agent/harness/translate.ts +130 -0
  461. package/src/agent/harness/types.ts +129 -0
  462. package/src/agent/index.ts +32 -0
  463. package/src/agent/loop-settings.ts +186 -0
  464. package/src/agent/model-config.ts +363 -0
  465. package/src/agent/observational-memory/compactor.ts +78 -0
  466. package/src/agent/observational-memory/config.ts +78 -0
  467. package/src/agent/observational-memory/index.ts +79 -0
  468. package/src/agent/observational-memory/internal-run.ts +89 -0
  469. package/src/agent/observational-memory/message-text.ts +49 -0
  470. package/src/agent/observational-memory/migrations.ts +44 -0
  471. package/src/agent/observational-memory/observer.ts +128 -0
  472. package/src/agent/observational-memory/plugin.ts +35 -0
  473. package/src/agent/observational-memory/prompts.ts +53 -0
  474. package/src/agent/observational-memory/read.ts +131 -0
  475. package/src/agent/observational-memory/reflector.ts +119 -0
  476. package/src/agent/observational-memory/schema.ts +48 -0
  477. package/src/agent/observational-memory/store.ts +275 -0
  478. package/src/agent/observational-memory/types.ts +65 -0
  479. package/src/agent/processors.ts +209 -0
  480. package/src/agent/production-agent.ts +8254 -0
  481. package/src/agent/run-loop-with-resume.ts +394 -0
  482. package/src/agent/run-manager.ts +1825 -0
  483. package/src/agent/run-ownership.ts +75 -0
  484. package/src/agent/run-store.ts +2601 -0
  485. package/src/agent/runtime-context.ts +169 -0
  486. package/src/agent/thread-data-builder.ts +1584 -0
  487. package/src/agent/tool-call-journal.ts +368 -0
  488. package/src/agent/tool-error-redaction.ts +52 -0
  489. package/src/agent/tool-result-images.ts +178 -0
  490. package/src/agent/tool-search.ts +376 -0
  491. package/src/agent/types.ts +372 -0
  492. package/src/agent-native/index.ts +198 -0
  493. package/src/agent-web/config.ts +253 -0
  494. package/src/agent-web/generator.ts +382 -0
  495. package/src/agent-web/index.ts +36 -0
  496. package/src/appearance/actions/change-appearance.ts +35 -0
  497. package/src/application-state/emitter.ts +81 -0
  498. package/src/application-state/handlers.ts +121 -0
  499. package/src/application-state/index.ts +44 -0
  500. package/src/application-state/script-helpers.ts +155 -0
  501. package/src/application-state/store.ts +274 -0
  502. package/src/assets/branding/agent-native.icon/Assets/background.svg +3 -0
  503. package/src/assets/branding/agent-native.icon/Assets/foreground.svg +12 -0
  504. package/src/assets/branding/agent-native.icon/icon.json +49 -0
  505. package/src/assets/branding/favicon.png +0 -0
  506. package/src/assets/branding/favicon.svg +1 -0
  507. package/src/assets/branding/icon-on-dark.svg +10 -0
  508. package/src/assets/branding/icon-on-light.svg +10 -0
  509. package/src/assets/branding/mac-app-icon.svg +1 -0
  510. package/src/assets/branding/slack-bot/agent-native-1024.png +0 -0
  511. package/src/assets/branding/slack-bot/agent-native-512.png +0 -0
  512. package/src/assets/branding/tray-icon.svg +6 -0
  513. package/src/assets/branding/wordmark-on-dark.svg +21 -0
  514. package/src/assets/branding/wordmark-on-light.svg +21 -0
  515. package/src/assets/fonts/LICENSE_LIBERATION +96 -0
  516. package/src/assets/fonts/LICENSE_NOTO_NASKH_ARABIC +93 -0
  517. package/src/assets/fonts/LiberationSans-Bold.ttf +0 -0
  518. package/src/assets/fonts/LiberationSans-Regular.ttf +0 -0
  519. package/src/assets/fonts/NotoNaskhArabic-Variable.ttf +0 -0
  520. package/src/audit/actions/export-audit-events.ts +162 -0
  521. package/src/audit/actions/get-audit-event.ts +24 -0
  522. package/src/audit/actions/list-audit-events.ts +66 -0
  523. package/src/audit/cleanup-job.ts +100 -0
  524. package/src/audit/config.ts +90 -0
  525. package/src/audit/index.ts +43 -0
  526. package/src/audit/record.ts +180 -0
  527. package/src/audit/redact.ts +109 -0
  528. package/src/audit/store.ts +346 -0
  529. package/src/audit/types.ts +141 -0
  530. package/src/automation/index.ts +802 -0
  531. package/src/brand-kit/brand-signals.ts +124 -0
  532. package/src/brand-kit/fig/index.ts +64 -0
  533. package/src/brand-kit/index.ts +72 -0
  534. package/src/brand-kit/types.ts +113 -0
  535. package/src/browser-sessions/actions.ts +302 -0
  536. package/src/browser-sessions/routes.ts +234 -0
  537. package/src/browser-sessions/store.ts +679 -0
  538. package/src/browser-sessions/types.ts +84 -0
  539. package/src/changelog/parse.ts +328 -0
  540. package/src/chat-threads/emitter.ts +22 -0
  541. package/src/chat-threads/schema.ts +43 -0
  542. package/src/chat-threads/store.ts +1311 -0
  543. package/src/checkpoints/index.ts +15 -0
  544. package/src/checkpoints/service.ts +142 -0
  545. package/src/checkpoints/store.ts +153 -0
  546. package/src/cli/add.ts +425 -0
  547. package/src/cli/agent.ts +424 -0
  548. package/src/cli/agents.ts +122 -0
  549. package/src/cli/app-skill.ts +1455 -0
  550. package/src/cli/atomic-json-file.ts +324 -0
  551. package/src/cli/audit-agent-web.ts +324 -0
  552. package/src/cli/changelog.ts +199 -0
  553. package/src/cli/claude-code-participant.ts +515 -0
  554. package/src/cli/code-agent-commands.ts +270 -0
  555. package/src/cli/code-agent-connector.ts +1109 -0
  556. package/src/cli/code-agent-executor.ts +1970 -0
  557. package/src/cli/code-agent-output-smoother.ts +140 -0
  558. package/src/cli/code-agent-runs.concurrent-worker.ts +33 -0
  559. package/src/cli/code-agent-runs.ts +548 -0
  560. package/src/cli/code.ts +1805 -0
  561. package/src/cli/codex-cli-participant.ts +496 -0
  562. package/src/cli/connect.ts +2714 -0
  563. package/src/cli/content-local.ts +442 -0
  564. package/src/cli/context-xray-local.ts +2193 -0
  565. package/src/cli/create-workspace.ts +30 -0
  566. package/src/cli/create.ts +2247 -0
  567. package/src/cli/deploy-build.ts +50 -0
  568. package/src/cli/design-connect.ts +3187 -0
  569. package/src/cli/doctor.ts +472 -0
  570. package/src/cli/eject.ts +1594 -0
  571. package/src/cli/eval.ts +134 -0
  572. package/src/cli/gateway-helpers.ts +70 -0
  573. package/src/cli/index.ts +1217 -0
  574. package/src/cli/info.ts +105 -0
  575. package/src/cli/invoke.ts +288 -0
  576. package/src/cli/mcp-config-writers.ts +857 -0
  577. package/src/cli/mcp.ts +594 -0
  578. package/src/cli/migrate.ts +1813 -0
  579. package/src/cli/migration-codemod.ts +646 -0
  580. package/src/cli/multi-frontier-runs.ts +1952 -0
  581. package/src/cli/package-lifecycle.ts +823 -0
  582. package/src/cli/plan-blocks.ts +143 -0
  583. package/src/cli/plan-local.ts +3189 -0
  584. package/src/cli/plan-publish-store.ts +138 -0
  585. package/src/cli/pr-visual-recap-workflow.ts +2 -0
  586. package/src/cli/recap.ts +5 -0
  587. package/src/cli/setup-agents.ts +120 -0
  588. package/src/cli/skills-content/assets-skill.ts +83 -0
  589. package/src/cli/skills-content/canvas.ts +153 -0
  590. package/src/cli/skills-content/connection.ts +52 -0
  591. package/src/cli/skills-content/content-skill.ts +120 -0
  592. package/src/cli/skills-content/design-exploration-skill.ts +118 -0
  593. package/src/cli/skills-content/design-visual-edit-skill.ts +228 -0
  594. package/src/cli/skills-content/document-quality.ts +196 -0
  595. package/src/cli/skills-content/exemplar.ts +69 -0
  596. package/src/cli/skills-content/help.ts +77 -0
  597. package/src/cli/skills-content/index.ts +22 -0
  598. package/src/cli/skills-content/local-files.ts +100 -0
  599. package/src/cli/skills-content/plan-setup-auth.ts +80 -0
  600. package/src/cli/skills-content/visual-plan-skill.ts +493 -0
  601. package/src/cli/skills-content/visual-recap-skill.ts +553 -0
  602. package/src/cli/skills-content/visualize-repo-skill.ts +93 -0
  603. package/src/cli/skills-content/wireframe.ts +349 -0
  604. package/src/cli/skills.ts +4340 -0
  605. package/src/cli/sync-builder-starter-manifest.ts +631 -0
  606. package/src/cli/telemetry.ts +136 -0
  607. package/src/cli/templates-meta.ts +269 -0
  608. package/src/cli/upgrade.ts +956 -0
  609. package/src/cli/visualize-repo.ts +715 -0
  610. package/src/cli/workspace-dev.ts +1486 -0
  611. package/src/cli/workspacify.ts +258 -0
  612. package/src/client/AgentAskPopover.tsx +89 -0
  613. package/src/client/AgentChatHome.tsx +66 -0
  614. package/src/client/AgentNative.tsx +161 -0
  615. package/src/client/AgentNativeEmbedded.tsx +288 -0
  616. package/src/client/AgentNativeFrame.tsx +151 -0
  617. package/src/client/AgentPanel.tsx +3437 -0
  618. package/src/client/AgentTaskCard.tsx +273 -0
  619. package/src/client/AppearancePicker.tsx +79 -0
  620. package/src/client/AssistantChat.tsx +5793 -0
  621. package/src/client/ClientOnly.tsx +22 -0
  622. package/src/client/CommandMenu.tsx +726 -0
  623. package/src/client/ConnectBuilderCard.tsx +390 -0
  624. package/src/client/DefaultSpinner.tsx +47 -0
  625. package/src/client/ErrorBoundary.tsx +359 -0
  626. package/src/client/ErrorReportActions.tsx +69 -0
  627. package/src/client/FeedbackButton.tsx +553 -0
  628. package/src/client/HighlightedCodeBlock.tsx +173 -0
  629. package/src/client/IframeEmbed.tsx +151 -0
  630. package/src/client/KeepTabOpenNotice.tsx +181 -0
  631. package/src/client/MultiTabAssistantChat.tsx +2576 -0
  632. package/src/client/NewWorkspaceAppFlow.tsx +525 -0
  633. package/src/client/PoweredByBadge.tsx +284 -0
  634. package/src/client/RunStuckBanner.tsx +431 -0
  635. package/src/client/StarfieldBackground.tsx +466 -0
  636. package/src/client/Turnstile.tsx +125 -0
  637. package/src/client/active-run-state.ts +139 -0
  638. package/src/client/agent-chat/index.ts +279 -0
  639. package/src/client/agent-chat-adapter.ts +3692 -0
  640. package/src/client/agent-chat.ts +1233 -0
  641. package/src/client/agent-engine-key.ts +122 -0
  642. package/src/client/agent-page/AgentContextTab.tsx +487 -0
  643. package/src/client/agent-page/AgentEmptyState.tsx +44 -0
  644. package/src/client/agent-page/AgentJobsTab.tsx +441 -0
  645. package/src/client/agent-page/AgentTabFrame.tsx +39 -0
  646. package/src/client/agent-page/AgentTabsPage.tsx +1096 -0
  647. package/src/client/agent-page/types.ts +18 -0
  648. package/src/client/agent-page/use-jobs.ts +150 -0
  649. package/src/client/agent-sidebar-state.ts +166 -0
  650. package/src/client/analytics/index.ts +40 -0
  651. package/src/client/analytics-session.ts +70 -0
  652. package/src/client/analytics.ts +1757 -0
  653. package/src/client/api-path.ts +124 -0
  654. package/src/client/app-providers.tsx +230 -0
  655. package/src/client/appearance.ts +130 -0
  656. package/src/client/application-state.ts +154 -0
  657. package/src/client/assistant-ui-recovery.tsx +205 -0
  658. package/src/client/automation/index.ts +4 -0
  659. package/src/client/automation.ts +22 -0
  660. package/src/client/blocks/AiEditableField.tsx +30 -0
  661. package/src/client/blocks/BlockView.tsx +145 -0
  662. package/src/client/blocks/RegistryBlockDataProvider.tsx +121 -0
  663. package/src/client/blocks/SchemaBlockEditor.tsx +457 -0
  664. package/src/client/blocks/agent.ts +95 -0
  665. package/src/client/blocks/code-block-direction.ts +21 -0
  666. package/src/client/blocks/index.ts +308 -0
  667. package/src/client/blocks/library/AnnotatedCodeBlock.tsx +710 -0
  668. package/src/client/blocks/library/ApiEndpointBlock.tsx +1120 -0
  669. package/src/client/blocks/library/DataModelBlock.tsx +775 -0
  670. package/src/client/blocks/library/DiffBlock.tsx +1854 -0
  671. package/src/client/blocks/library/FileTreeBlock.tsx +868 -0
  672. package/src/client/blocks/library/HighlightedCode.tsx +260 -0
  673. package/src/client/blocks/library/JsonExplorerBlock.tsx +608 -0
  674. package/src/client/blocks/library/MermaidBlock.tsx +362 -0
  675. package/src/client/blocks/library/OpenApiSpecBlock.tsx +998 -0
  676. package/src/client/blocks/library/annotated-code.config.ts +101 -0
  677. package/src/client/blocks/library/annotation-rail.tsx +1020 -0
  678. package/src/client/blocks/library/api-endpoint.config.ts +207 -0
  679. package/src/client/blocks/library/block-copy.ts +399 -0
  680. package/src/client/blocks/library/callout.config.ts +57 -0
  681. package/src/client/blocks/library/callout.tsx +149 -0
  682. package/src/client/blocks/library/checklist.config.ts +56 -0
  683. package/src/client/blocks/library/checklist.tsx +208 -0
  684. package/src/client/blocks/library/code-filename-label.tsx +59 -0
  685. package/src/client/blocks/library/code-highlight.tsx +178 -0
  686. package/src/client/blocks/library/code-tabs.config.ts +70 -0
  687. package/src/client/blocks/library/code-tabs.tsx +606 -0
  688. package/src/client/blocks/library/code.config.ts +69 -0
  689. package/src/client/blocks/library/code.tsx +440 -0
  690. package/src/client/blocks/library/columns.config.ts +85 -0
  691. package/src/client/blocks/library/columns.tsx +334 -0
  692. package/src/client/blocks/library/data-model.config.ts +152 -0
  693. package/src/client/blocks/library/dev-doc-ui.tsx +191 -0
  694. package/src/client/blocks/library/diagram.config.ts +222 -0
  695. package/src/client/blocks/library/diagram.tsx +958 -0
  696. package/src/client/blocks/library/diff.config.ts +115 -0
  697. package/src/client/blocks/library/file-tree.config.ts +92 -0
  698. package/src/client/blocks/library/html.config.ts +79 -0
  699. package/src/client/blocks/library/html.tsx +258 -0
  700. package/src/client/blocks/library/json-explorer.config.ts +74 -0
  701. package/src/client/blocks/library/mermaid.config.ts +49 -0
  702. package/src/client/blocks/library/narrow-container.tsx +37 -0
  703. package/src/client/blocks/library/openapi-spec.config.ts +66 -0
  704. package/src/client/blocks/library/question-form.config.ts +127 -0
  705. package/src/client/blocks/library/question-form.tsx +944 -0
  706. package/src/client/blocks/library/sanitize-html.ts +343 -0
  707. package/src/client/blocks/library/server-specs.ts +338 -0
  708. package/src/client/blocks/library/specs.tsx +308 -0
  709. package/src/client/blocks/library/table.config.ts +61 -0
  710. package/src/client/blocks/library/table.tsx +449 -0
  711. package/src/client/blocks/library/tabs.config.ts +96 -0
  712. package/src/client/blocks/library/tabs.tsx +665 -0
  713. package/src/client/blocks/library/wireframe-icons.ts +210 -0
  714. package/src/client/blocks/library/wireframe-kit.tsx +1850 -0
  715. package/src/client/blocks/library/wireframe.config.ts +539 -0
  716. package/src/client/blocks/library/wireframe.tsx +535 -0
  717. package/src/client/blocks/mdx.ts +364 -0
  718. package/src/client/blocks/provider.tsx +51 -0
  719. package/src/client/blocks/registry.ts +83 -0
  720. package/src/client/blocks/schema-form/introspect.ts +201 -0
  721. package/src/client/blocks/server.ts +170 -0
  722. package/src/client/blocks/types.ts +415 -0
  723. package/src/client/browser-session-bridge.ts +548 -0
  724. package/src/client/browser-tab-id.ts +36 -0
  725. package/src/client/build-compatibility.ts +77 -0
  726. package/src/client/builder-frame.ts +194 -0
  727. package/src/client/builder-mark.tsx +21 -0
  728. package/src/client/changelog/Changelog.tsx +333 -0
  729. package/src/client/changelog/index.ts +1 -0
  730. package/src/client/chat/ChatHistoryList.tsx +7 -0
  731. package/src/client/chat/attachment-adapters.ts +426 -0
  732. package/src/client/chat/connectors.ts +1579 -0
  733. package/src/client/chat/index.ts +160 -0
  734. package/src/client/chat/markdown-renderer.tsx +693 -0
  735. package/src/client/chat/message-components.tsx +1326 -0
  736. package/src/client/chat/repo-helpers.ts +281 -0
  737. package/src/client/chat/run-recovery.tsx +994 -0
  738. package/src/client/chat/runtime.ts +1810 -0
  739. package/src/client/chat/tool-call-display.tsx +1270 -0
  740. package/src/client/chat/tool-render-registry.tsx +144 -0
  741. package/src/client/chat/use-agent-chat-lifecycle-tracking.ts +74 -0
  742. package/src/client/chat/use-reconnect-reader-owner.ts +28 -0
  743. package/src/client/chat/widgets/DataChartRenderer.tsx +242 -0
  744. package/src/client/chat/widgets/DataChartWidget.tsx +51 -0
  745. package/src/client/chat/widgets/DataInsightsWidget.tsx +59 -0
  746. package/src/client/chat/widgets/DataTableWidget.tsx +240 -0
  747. package/src/client/chat/widgets/InlineExtensionWidget.tsx +60 -0
  748. package/src/client/chat/widgets/builtin-tool-renderers.tsx +213 -0
  749. package/src/client/chat/widgets/data-widget-types.ts +1 -0
  750. package/src/client/chat/widgets/inline-extension-result.ts +86 -0
  751. package/src/client/chat-model-groups.ts +171 -0
  752. package/src/client/chat-thread-url.ts +11 -0
  753. package/src/client/chat-view-transition.ts +213 -0
  754. package/src/client/client-action.ts +21 -0
  755. package/src/client/client-bootstrap.ts +7 -0
  756. package/src/client/client-surface.ts +41 -0
  757. package/src/client/clipboard.ts +89 -0
  758. package/src/client/code-agent-chat-adapter.ts +537 -0
  759. package/src/client/collab/index.ts +60 -0
  760. package/src/client/command-navigation/index.ts +15 -0
  761. package/src/client/comments-review/index.ts +1 -0
  762. package/src/client/components/AgentPresenceChip.tsx +4 -0
  763. package/src/client/components/ApiKeySettings.tsx +309 -0
  764. package/src/client/components/CodeAgentIndicator.tsx +59 -0
  765. package/src/client/components/CodeRequiredDialog.tsx +470 -0
  766. package/src/client/components/LiveCursorOverlay.tsx +5 -0
  767. package/src/client/components/MissingKeyCard.tsx +61 -0
  768. package/src/client/components/PresenceBar.tsx +4 -0
  769. package/src/client/components/RecentEditHighlights.tsx +4 -0
  770. package/src/client/components/RemoteSelectionRings.tsx +5 -0
  771. package/src/client/components/icons/AgentNativeIcon.tsx +46 -0
  772. package/src/client/components/ui/dialog.tsx +1 -0
  773. package/src/client/components/ui/dropdown-menu.tsx +1 -0
  774. package/src/client/components/ui/hover-card.tsx +1 -0
  775. package/src/client/components/ui/message-scroller.tsx +131 -0
  776. package/src/client/components/ui/popover.tsx +1 -0
  777. package/src/client/components/ui/sheet.tsx +1 -0
  778. package/src/client/components/ui/tooltip.tsx +1 -0
  779. package/src/client/composer/index.ts +11 -0
  780. package/src/client/composer/runtime-adapters.tsx +123 -0
  781. package/src/client/composer/use-mention-search.ts +7 -0
  782. package/src/client/composer/wired-components.tsx +53 -0
  783. package/src/client/context-xray/ContextMeter.tsx +124 -0
  784. package/src/client/context-xray/ContextSegmentRow.tsx +27 -0
  785. package/src/client/context-xray/ContextTreemap.tsx +24 -0
  786. package/src/client/context-xray/ContextXRayPanel.tsx +59 -0
  787. package/src/client/context-xray/SegmentProvenancePopover.tsx +18 -0
  788. package/src/client/context-xray/format.ts +27 -0
  789. package/src/client/conversation/AgentConversation.tsx +555 -0
  790. package/src/client/conversation/code-agent-transcript.ts +283 -0
  791. package/src/client/conversation/index.ts +22 -0
  792. package/src/client/conversation/types.ts +85 -0
  793. package/src/client/conversation/use-near-bottom-autoscroll.ts +278 -0
  794. package/src/client/create-query-client.ts +86 -0
  795. package/src/client/db-admin/DataGrid.tsx +551 -0
  796. package/src/client/db-admin/DbAdminPage.tsx +218 -0
  797. package/src/client/db-admin/DevDatabaseLink.tsx +16 -0
  798. package/src/client/db-admin/EditableCell.tsx +451 -0
  799. package/src/client/db-admin/FilterBar.tsx +203 -0
  800. package/src/client/db-admin/ResultsGrid.tsx +114 -0
  801. package/src/client/db-admin/RowSidePanel.tsx +337 -0
  802. package/src/client/db-admin/SqlEditor.tsx +840 -0
  803. package/src/client/db-admin/TableBrowser.tsx +212 -0
  804. package/src/client/db-admin/TableEditor.tsx +760 -0
  805. package/src/client/db-admin/cell-format.ts +246 -0
  806. package/src/client/db-admin/changeset.ts +296 -0
  807. package/src/client/db-admin/export-utils.ts +78 -0
  808. package/src/client/db-admin/index.ts +33 -0
  809. package/src/client/db-admin/sql-storage.ts +134 -0
  810. package/src/client/db-admin/storage.ts +68 -0
  811. package/src/client/db-admin/useAgentSync.ts +226 -0
  812. package/src/client/db-admin/useDbAdmin.ts +294 -0
  813. package/src/client/dev-overlay/DevOverlay.tsx +576 -0
  814. package/src/client/dev-overlay/builtins.ts +40 -0
  815. package/src/client/dev-overlay/index.ts +23 -0
  816. package/src/client/dev-overlay/registry.ts +67 -0
  817. package/src/client/dev-overlay/types.ts +64 -0
  818. package/src/client/dev-overlay/use-dev-option.ts +78 -0
  819. package/src/client/dev-overlay/use-dev-overlay-shortcut.ts +31 -0
  820. package/src/client/dynamic-suggestions.ts +455 -0
  821. package/src/client/embed-auth.ts +544 -0
  822. package/src/client/embed.ts +54 -0
  823. package/src/client/error-capture.ts +690 -0
  824. package/src/client/error-format.ts +211 -0
  825. package/src/client/error-reporting.ts +100 -0
  826. package/src/client/extensions/AgentNativeExtensionFrame.e2e-host.tsx +136 -0
  827. package/src/client/extensions/AgentNativeExtensionFrame.tsx +708 -0
  828. package/src/client/extensions/EmbeddedExtension.tsx +604 -0
  829. package/src/client/extensions/ExtensionEditor.tsx +450 -0
  830. package/src/client/extensions/ExtensionQueryErrorState.tsx +47 -0
  831. package/src/client/extensions/ExtensionSlot.tsx +345 -0
  832. package/src/client/extensions/ExtensionViewer.tsx +1502 -0
  833. package/src/client/extensions/ExtensionViewerPage.tsx +32 -0
  834. package/src/client/extensions/ExtensionsListPage.tsx +432 -0
  835. package/src/client/extensions/ExtensionsSidebarSection.tsx +1259 -0
  836. package/src/client/extensions/InlineExtensionFrame.tsx +660 -0
  837. package/src/client/extensions/agent-native-extension-runtime.ts +495 -0
  838. package/src/client/extensions/delete-extension.ts +76 -0
  839. package/src/client/extensions/extension-load-error.ts +26 -0
  840. package/src/client/extensions/extension-order.ts +49 -0
  841. package/src/client/extensions/extension-popularity.ts +61 -0
  842. package/src/client/extensions/iframe-bridge.ts +377 -0
  843. package/src/client/extensions/index.ts +84 -0
  844. package/src/client/extensions/portable-extension.ts +712 -0
  845. package/src/client/feature-flags/FeatureFlagsPanel.tsx +519 -0
  846. package/src/client/feature-flags/helpers.ts +77 -0
  847. package/src/client/feature-flags/index.ts +13 -0
  848. package/src/client/feature-flags/types.ts +29 -0
  849. package/src/client/feature-flags/use-feature-flag.ts +26 -0
  850. package/src/client/feedback-context.ts +90 -0
  851. package/src/client/frame-protocol.ts +168 -0
  852. package/src/client/frame.ts +329 -0
  853. package/src/client/guided-questions.tsx +1152 -0
  854. package/src/client/history/VersionHistoryPanel.tsx +175 -0
  855. package/src/client/history/index.ts +21 -0
  856. package/src/client/history/use-history.ts +114 -0
  857. package/src/client/hooks/index.ts +46 -0
  858. package/src/client/host/index.ts +170 -0
  859. package/src/client/host-bridge.ts +1272 -0
  860. package/src/client/host-tools.ts +190 -0
  861. package/src/client/i18n.tsx +798 -0
  862. package/src/client/index.ts +370 -0
  863. package/src/client/integrations/IntegrationCard.tsx +186 -0
  864. package/src/client/integrations/IntegrationsPanel.tsx +633 -0
  865. package/src/client/integrations/api.ts +295 -0
  866. package/src/client/integrations/index.ts +29 -0
  867. package/src/client/integrations/useIntegrationStatus.ts +52 -0
  868. package/src/client/mcp-app-host.ts +720 -0
  869. package/src/client/mcp-apps/McpAppRenderer.tsx +760 -0
  870. package/src/client/navigation/index.ts +54 -0
  871. package/src/client/notifications/NotificationsBell.tsx +383 -0
  872. package/src/client/notifications/index.ts +1 -0
  873. package/src/client/observability/ObservabilityDashboard.tsx +890 -0
  874. package/src/client/observability/ThumbsFeedback.tsx +160 -0
  875. package/src/client/observability/index.ts +20 -0
  876. package/src/client/observability/useObservability.ts +266 -0
  877. package/src/client/onboarding/OnboardingBanner.tsx +73 -0
  878. package/src/client/onboarding/OnboardingPanel.tsx +1036 -0
  879. package/src/client/onboarding/SetupButton.tsx +64 -0
  880. package/src/client/onboarding/index.ts +25 -0
  881. package/src/client/onboarding/use-onboarding.ts +164 -0
  882. package/src/client/onboarding/use-preview-mode.ts +40 -0
  883. package/src/client/org/InvitationBanner.tsx +148 -0
  884. package/src/client/org/OrgSwitcher.tsx +754 -0
  885. package/src/client/org/RequireActiveOrg.tsx +337 -0
  886. package/src/client/org/TeamPage.tsx +1432 -0
  887. package/src/client/org/hooks.ts +359 -0
  888. package/src/client/org/index.ts +70 -0
  889. package/src/client/org/workspace-app-links.ts +367 -0
  890. package/src/client/org-team/index.ts +1 -0
  891. package/src/client/progress/RunsTray.tsx +680 -0
  892. package/src/client/progress/index.ts +1 -0
  893. package/src/client/require-session.tsx +142 -0
  894. package/src/client/resources/BuiltinCapabilityDetail.tsx +258 -0
  895. package/src/client/resources/McpConnectionSuggestion.tsx +276 -0
  896. package/src/client/resources/McpIntegrationDialog.tsx +808 -0
  897. package/src/client/resources/McpServerDetail.tsx +230 -0
  898. package/src/client/resources/ResourceEditor.tsx +872 -0
  899. package/src/client/resources/ResourceTree.tsx +860 -0
  900. package/src/client/resources/ResourcesPanel.tsx +1960 -0
  901. package/src/client/resources/index.ts +25 -0
  902. package/src/client/resources/mcp-integration-catalog.ts +771 -0
  903. package/src/client/resources/mcp-integration-logos.ts +108 -0
  904. package/src/client/resources/runtime.ts +1 -0
  905. package/src/client/resources/use-builtin-capabilities.ts +113 -0
  906. package/src/client/resources/use-mcp-servers.ts +217 -0
  907. package/src/client/resources/use-resources.ts +402 -0
  908. package/src/client/review/ReviewCommentComposer.tsx +123 -0
  909. package/src/client/review/ReviewStatusBadge.tsx +39 -0
  910. package/src/client/review/ReviewThreadPanel.tsx +625 -0
  911. package/src/client/review/index.ts +38 -0
  912. package/src/client/review/use-review.ts +186 -0
  913. package/src/client/route-chunk-recovery/index.ts +2 -0
  914. package/src/client/route-chunk-recovery.ts +331 -0
  915. package/src/client/route-state.ts +455 -0
  916. package/src/client/route-warmup.tsx +543 -0
  917. package/src/client/session-replay-iframe.e2e-host.tsx +100 -0
  918. package/src/client/session-replay.ts +3417 -0
  919. package/src/client/settings/AgentsSection.tsx +441 -0
  920. package/src/client/settings/AutomationsSection.tsx +516 -0
  921. package/src/client/settings/BackgroundAgentSection.tsx +189 -0
  922. package/src/client/settings/BrowserSection.tsx +110 -0
  923. package/src/client/settings/DemoModeSection.tsx +48 -0
  924. package/src/client/settings/SecretsSection.tsx +875 -0
  925. package/src/client/settings/SettingsPanel.tsx +3162 -0
  926. package/src/client/settings/SettingsSection.tsx +283 -0
  927. package/src/client/settings/SettingsTabsPage.tsx +592 -0
  928. package/src/client/settings/UsageSection.tsx +401 -0
  929. package/src/client/settings/VoiceTranscriptionSection.tsx +960 -0
  930. package/src/client/settings/agent-settings-search.ts +220 -0
  931. package/src/client/settings/index.ts +27 -0
  932. package/src/client/settings/useBuilderStatus.ts +1055 -0
  933. package/src/client/setup-connections/BuilderConnectCard.tsx +89 -0
  934. package/src/client/setup-connections/ProviderReadinessBadge.tsx +73 -0
  935. package/src/client/setup-connections/SetupConnectionsPage.tsx +94 -0
  936. package/src/client/setup-connections/catalog.ts +6 -0
  937. package/src/client/setup-connections/index.ts +47 -0
  938. package/src/client/setup-connections/runtime.ts +1 -0
  939. package/src/client/sharing/ShareButton.tsx +1748 -0
  940. package/src/client/sharing/ShareDialog.tsx +846 -0
  941. package/src/client/sharing/VisibilityBadge.tsx +4 -0
  942. package/src/client/sharing/index.ts +2 -0
  943. package/src/client/sse-event-processor.ts +2002 -0
  944. package/src/client/terminal/AgentTerminal.tsx +488 -0
  945. package/src/client/terminal/index.ts +7 -0
  946. package/src/client/theme.ts +27 -0
  947. package/src/client/tombstone/agent-presence-chip.ts +17 -0
  948. package/src/client/tombstone/editor.ts +265 -0
  949. package/src/client/tombstone/live-cursor-overlay.ts +21 -0
  950. package/src/client/tombstone/presence-bar.ts +17 -0
  951. package/src/client/tombstone/recent-edit-highlights.ts +17 -0
  952. package/src/client/tombstone/remote-selection-rings.ts +21 -0
  953. package/src/client/tombstone/rich-markdown-editor.ts +265 -0
  954. package/src/client/tombstone/ui-dialog.ts +49 -0
  955. package/src/client/tombstone/ui-dropdown-menu.ts +69 -0
  956. package/src/client/tombstone/ui-hover-card.ts +21 -0
  957. package/src/client/tombstone/ui-popover.ts +25 -0
  958. package/src/client/tombstone/ui-sheet.ts +49 -0
  959. package/src/client/tombstone/ui-tooltip.ts +29 -0
  960. package/src/client/tombstone/visual-style-controls.ts +61 -0
  961. package/src/client/tool-cells/BashCell.tsx +164 -0
  962. package/src/client/tool-cells/EditCell.tsx +303 -0
  963. package/src/client/tool-cells/FilesChangedSummary.tsx +208 -0
  964. package/src/client/tool-cells/WriteCell.tsx +145 -0
  965. package/src/client/tool-cells/index.ts +7 -0
  966. package/src/client/tool-display.ts +41 -0
  967. package/src/client/track.ts +57 -0
  968. package/src/client/transcription/BuilderTranscriptionCta.tsx +120 -0
  969. package/src/client/transcription/use-live-transcription.ts +292 -0
  970. package/src/client/ui/index.ts +55 -0
  971. package/src/client/uploads/index.ts +6 -0
  972. package/src/client/uploads/upload-editor-image.ts +79 -0
  973. package/src/client/uploads/use-upload-resource.ts +24 -0
  974. package/src/client/url-scrub.ts +51 -0
  975. package/src/client/use-action.ts +797 -0
  976. package/src/client/use-agent-chat-context.ts +63 -0
  977. package/src/client/use-agent-chat-home-handoff.ts +207 -0
  978. package/src/client/use-agent-chat.ts +53 -0
  979. package/src/client/use-agent-engine-configured.ts +211 -0
  980. package/src/client/use-avatar.ts +127 -0
  981. package/src/client/use-change-version.ts +150 -0
  982. package/src/client/use-chat-models.ts +252 -0
  983. package/src/client/use-chat-threads.ts +1262 -0
  984. package/src/client/use-db-sync.ts +1112 -0
  985. package/src/client/use-demo-mode-status.ts +30 -0
  986. package/src/client/use-dev-mode.ts +177 -0
  987. package/src/client/use-external-value.ts +40 -0
  988. package/src/client/use-pausing-interval.ts +65 -0
  989. package/src/client/use-pinch-zoom.ts +202 -0
  990. package/src/client/use-run-stuck-detection.ts +427 -0
  991. package/src/client/use-send-to-agent-chat.ts +85 -0
  992. package/src/client/use-session.ts +114 -0
  993. package/src/client/utils.ts +7 -0
  994. package/src/client/visual-style-controls.tsx +1 -0
  995. package/src/client/vite-dev-recovery-script.ts +226 -0
  996. package/src/client/voice-provider-status.ts +44 -0
  997. package/src/client/widgets/index.ts +41 -0
  998. package/src/code-agents/background-controller.ts +398 -0
  999. package/src/code-agents/background-run.ts +156 -0
  1000. package/src/code-agents/index.ts +95 -0
  1001. package/src/code-agents/prompt-attachments.ts +39 -0
  1002. package/src/code-agents/transcript-normalizer.ts +750 -0
  1003. package/src/code-agents/transcript-order.ts +73 -0
  1004. package/src/coding-tools/index.ts +742 -0
  1005. package/src/coding-tools/run-code.ts +1662 -0
  1006. package/src/coding-tools/sandbox/adapter.ts +82 -0
  1007. package/src/coding-tools/sandbox/background.ts +406 -0
  1008. package/src/coding-tools/sandbox/executions-store.ts +517 -0
  1009. package/src/coding-tools/sandbox/index.ts +132 -0
  1010. package/src/coding-tools/sandbox/local-child-process-adapter.ts +217 -0
  1011. package/src/collab/agent-identity.ts +5 -0
  1012. package/src/collab/agent-presence.ts +341 -0
  1013. package/src/collab/awareness-store.ts +196 -0
  1014. package/src/collab/awareness.ts +317 -0
  1015. package/src/collab/client-struct.ts +366 -0
  1016. package/src/collab/client.ts +1205 -0
  1017. package/src/collab/emitter.ts +31 -0
  1018. package/src/collab/follow-mode.ts +107 -0
  1019. package/src/collab/index.ts +151 -0
  1020. package/src/collab/json-to-yjs.ts +504 -0
  1021. package/src/collab/presence.ts +207 -0
  1022. package/src/collab/recent-edits.ts +215 -0
  1023. package/src/collab/routes.ts +191 -0
  1024. package/src/collab/storage.ts +228 -0
  1025. package/src/collab/struct-routes.ts +133 -0
  1026. package/src/collab/text-to-yjs.ts +79 -0
  1027. package/src/collab/undo.ts +432 -0
  1028. package/src/collab/xml-ops.ts +68 -0
  1029. package/src/collab/ydoc-manager.ts +544 -0
  1030. package/src/command-navigation/actions.ts +100 -0
  1031. package/src/command-navigation/index.ts +12 -0
  1032. package/src/comments-review/index.ts +1 -0
  1033. package/src/connections/catalog.ts +451 -0
  1034. package/src/connections/index.ts +48 -0
  1035. package/src/connections/reader.ts +911 -0
  1036. package/src/connections/runtime.ts +1 -0
  1037. package/src/credentials/index.ts +187 -0
  1038. package/src/data-programs/actions.ts +335 -0
  1039. package/src/data-programs/contract.ts +284 -0
  1040. package/src/data-programs/execute.ts +693 -0
  1041. package/src/data-programs/index.ts +72 -0
  1042. package/src/data-programs/schema.ts +148 -0
  1043. package/src/data-programs/store.ts +755 -0
  1044. package/src/data-widgets/index.ts +376 -0
  1045. package/src/db/client.ts +1627 -0
  1046. package/src/db/create-get-db.ts +579 -0
  1047. package/src/db/ddl-guard.ts +302 -0
  1048. package/src/db/drizzle-config.ts +190 -0
  1049. package/src/db/ensure-additive-columns.ts +430 -0
  1050. package/src/db/index.ts +57 -0
  1051. package/src/db/migrations.ts +691 -0
  1052. package/src/db/request-telemetry.ts +154 -0
  1053. package/src/db/runtime-diagnostics.ts +331 -0
  1054. package/src/db/schema.ts +121 -0
  1055. package/src/db/widen-columns.ts +75 -0
  1056. package/src/db-admin/agent-tools.ts +202 -0
  1057. package/src/db-admin/index.ts +26 -0
  1058. package/src/db-admin/operations.ts +803 -0
  1059. package/src/db-admin/routes.ts +174 -0
  1060. package/src/db-admin/types.ts +110 -0
  1061. package/src/demo/browser-state.ts +47 -0
  1062. package/src/demo/fetch-interceptor.ts +175 -0
  1063. package/src/demo/redact.ts +575 -0
  1064. package/src/deploy/build.ts +3938 -0
  1065. package/src/deploy/immutable-assets.ts +65 -0
  1066. package/src/deploy/route-discovery.ts +458 -0
  1067. package/src/deploy/workspace-core.ts +282 -0
  1068. package/src/deploy/workspace-deploy.ts +1488 -0
  1069. package/src/eject/provider-api-definitions.ts +193 -0
  1070. package/src/eject/remote-mcp-presets.ts +137 -0
  1071. package/src/eject/setup-readiness-ui.tsx +29 -0
  1072. package/src/eject/workspace-connections.ts +92 -0
  1073. package/src/embedding/agent.ts +159 -0
  1074. package/src/embedding/bridge.ts +297 -0
  1075. package/src/embedding/index.ts +43 -0
  1076. package/src/embedding/protocol.ts +185 -0
  1077. package/src/embedding/react.tsx +319 -0
  1078. package/src/embeddings/index.ts +233 -0
  1079. package/src/eval/agent-runner.ts +210 -0
  1080. package/src/eval/define-eval.ts +55 -0
  1081. package/src/eval/index.ts +49 -0
  1082. package/src/eval/report.ts +75 -0
  1083. package/src/eval/runner.ts +369 -0
  1084. package/src/eval/scorer.ts +244 -0
  1085. package/src/eval/types.ts +188 -0
  1086. package/src/event-bus/bus.ts +140 -0
  1087. package/src/event-bus/index.ts +3 -0
  1088. package/src/event-bus/registry.ts +79 -0
  1089. package/src/event-bus/types.ts +29 -0
  1090. package/src/extensions/actions.ts +1636 -0
  1091. package/src/extensions/change-marker.ts +54 -0
  1092. package/src/extensions/content-patch.ts +468 -0
  1093. package/src/extensions/fetch-tool.ts +461 -0
  1094. package/src/extensions/html-shell.ts +803 -0
  1095. package/src/extensions/local.ts +462 -0
  1096. package/src/extensions/path.ts +40 -0
  1097. package/src/extensions/proxy-security.ts +171 -0
  1098. package/src/extensions/routes.ts +1080 -0
  1099. package/src/extensions/schema.ts +269 -0
  1100. package/src/extensions/session-replay-iframe.ts +131 -0
  1101. package/src/extensions/slots/routes.ts +126 -0
  1102. package/src/extensions/slots/schema.ts +87 -0
  1103. package/src/extensions/slots/store.ts +450 -0
  1104. package/src/extensions/store.ts +1347 -0
  1105. package/src/extensions/theme.ts +114 -0
  1106. package/src/extensions/url-safety.ts +316 -0
  1107. package/src/extensions/web-content.ts +663 -0
  1108. package/src/extensions/web-search-tool.ts +437 -0
  1109. package/src/feature-flags/a2a-action-route.ts +56 -0
  1110. package/src/feature-flags/actions/get-feature-flags.ts +24 -0
  1111. package/src/feature-flags/actions/list-feature-flags.ts +69 -0
  1112. package/src/feature-flags/actions/set-feature-flag.ts +89 -0
  1113. package/src/feature-flags/index.ts +21 -0
  1114. package/src/feature-flags/permissions.ts +53 -0
  1115. package/src/feature-flags/plugin.ts +44 -0
  1116. package/src/feature-flags/registry.ts +96 -0
  1117. package/src/feature-flags/store.ts +176 -0
  1118. package/src/file-upload/actions/upload-image.ts +213 -0
  1119. package/src/file-upload/builder.ts +431 -0
  1120. package/src/file-upload/index.ts +24 -0
  1121. package/src/file-upload/pre-upload-attachments.ts +305 -0
  1122. package/src/file-upload/registry.ts +125 -0
  1123. package/src/file-upload/types.ts +89 -0
  1124. package/src/guards/db-tool-scoping.ts +129 -0
  1125. package/src/guards/index.ts +23 -0
  1126. package/src/guards/no-drizzle-push.ts +116 -0
  1127. package/src/guards/no-env-credentials.ts +229 -0
  1128. package/src/guards/no-env-mutation.ts +114 -0
  1129. package/src/guards/no-localhost-fallback.ts +124 -0
  1130. package/src/guards/no-unscoped-credentials.ts +227 -0
  1131. package/src/guards/no-unscoped-queries.ts +834 -0
  1132. package/src/guards/scan-utils.ts +105 -0
  1133. package/src/guards/types.ts +30 -0
  1134. package/src/history/actions/create-resource-version.ts +92 -0
  1135. package/src/history/actions/get-resource-version.ts +60 -0
  1136. package/src/history/actions/list-resource-history.ts +53 -0
  1137. package/src/history/actions/list-resource-versions.ts +43 -0
  1138. package/src/history/actions/restore-resource-version.ts +96 -0
  1139. package/src/history/index.ts +26 -0
  1140. package/src/history/registry.ts +111 -0
  1141. package/src/history/store.ts +379 -0
  1142. package/src/history/types.ts +69 -0
  1143. package/src/index.browser.ts +155 -0
  1144. package/src/index.ts +408 -0
  1145. package/src/ingestion/docx.ts +158 -0
  1146. package/src/ingestion/figma-node-to-html.ts +1860 -0
  1147. package/src/ingestion/figma.ts +548 -0
  1148. package/src/ingestion/index.ts +107 -0
  1149. package/src/ingestion/media.ts +264 -0
  1150. package/src/ingestion/notion.ts +121 -0
  1151. package/src/ingestion/office.ts +213 -0
  1152. package/src/ingestion/orchestration.ts +160 -0
  1153. package/src/ingestion/pptx.ts +331 -0
  1154. package/src/ingestion/selection.ts +81 -0
  1155. package/src/ingestion/website.ts +151 -0
  1156. package/src/integrations/a2a-continuation-marker.ts +2 -0
  1157. package/src/integrations/a2a-continuation-processor.ts +888 -0
  1158. package/src/integrations/a2a-continuations-store.ts +643 -0
  1159. package/src/integrations/adapter-overrides.ts +12 -0
  1160. package/src/integrations/adapters/discord.ts +364 -0
  1161. package/src/integrations/adapters/email.ts +1164 -0
  1162. package/src/integrations/adapters/google-docs.ts +371 -0
  1163. package/src/integrations/adapters/index.ts +29 -0
  1164. package/src/integrations/adapters/microsoft-teams.ts +413 -0
  1165. package/src/integrations/adapters/slack.ts +1914 -0
  1166. package/src/integrations/adapters/telegram.ts +386 -0
  1167. package/src/integrations/adapters/whatsapp.ts +358 -0
  1168. package/src/integrations/awaiting-input-store.ts +130 -0
  1169. package/src/integrations/catalog.ts +571 -0
  1170. package/src/integrations/computer-supervision-store.ts +423 -0
  1171. package/src/integrations/computer-supervision.ts +213 -0
  1172. package/src/integrations/config-store.ts +131 -0
  1173. package/src/integrations/controls-store.ts +187 -0
  1174. package/src/integrations/eject/messaging-adapters.ts +85 -0
  1175. package/src/integrations/google-docs-poller.ts +671 -0
  1176. package/src/integrations/identity-links-store.ts +210 -0
  1177. package/src/integrations/identity.ts +196 -0
  1178. package/src/integrations/index.ts +220 -0
  1179. package/src/integrations/installations-store.ts +677 -0
  1180. package/src/integrations/integration-memory.ts +187 -0
  1181. package/src/integrations/internal-token.ts +106 -0
  1182. package/src/integrations/pending-tasks-retry-job.ts +286 -0
  1183. package/src/integrations/pending-tasks-store.ts +468 -0
  1184. package/src/integrations/plugin.ts +3048 -0
  1185. package/src/integrations/remote-commands-store.ts +690 -0
  1186. package/src/integrations/remote-devices-store.ts +492 -0
  1187. package/src/integrations/remote-json-safety.ts +127 -0
  1188. package/src/integrations/remote-push-delivery-job.ts +48 -0
  1189. package/src/integrations/remote-push-delivery.ts +370 -0
  1190. package/src/integrations/remote-push-store.ts +664 -0
  1191. package/src/integrations/remote-retry-job.ts +55 -0
  1192. package/src/integrations/remote-run-events-store.ts +222 -0
  1193. package/src/integrations/remote-types.ts +186 -0
  1194. package/src/integrations/runtime.ts +1 -0
  1195. package/src/integrations/scope-store.ts +498 -0
  1196. package/src/integrations/slack-manifest.ts +78 -0
  1197. package/src/integrations/slack-oauth.ts +344 -0
  1198. package/src/integrations/task-queue-stats.ts +144 -0
  1199. package/src/integrations/thread-mapping-store.ts +134 -0
  1200. package/src/integrations/types.ts +485 -0
  1201. package/src/integrations/usage-budget-store.ts +906 -0
  1202. package/src/integrations/webhook-delivery.ts +55 -0
  1203. package/src/integrations/webhook-handler.ts +1939 -0
  1204. package/src/jobs/actions/list-recurring-jobs.ts +105 -0
  1205. package/src/jobs/actions/manage-recurring-job.ts +85 -0
  1206. package/src/jobs/cron.ts +126 -0
  1207. package/src/jobs/index.ts +9 -0
  1208. package/src/jobs/scheduler.ts +703 -0
  1209. package/src/jobs/tools.ts +367 -0
  1210. package/src/local-artifacts/index.ts +1372 -0
  1211. package/src/localization/actions/get-localization-preference.ts +24 -0
  1212. package/src/localization/actions/set-localization-preference.ts +32 -0
  1213. package/src/localization/default-messages.ts +1009 -0
  1214. package/src/localization/index.ts +2 -0
  1215. package/src/localization/server.ts +131 -0
  1216. package/src/localization/shared.ts +208 -0
  1217. package/src/mcp/actions/call-mcp-tool.ts +19 -0
  1218. package/src/mcp/actions/create-org-service-token.ts +87 -0
  1219. package/src/mcp/actions/list-mcp-tools.ts +18 -0
  1220. package/src/mcp/actions/list-org-service-tokens.ts +44 -0
  1221. package/src/mcp/actions/revoke-org-service-token.ts +30 -0
  1222. package/src/mcp/actions/service-token-access.ts +121 -0
  1223. package/src/mcp/ask-app-inline-tasks.ts +125 -0
  1224. package/src/mcp/build-server.ts +2356 -0
  1225. package/src/mcp/builtin-tools.ts +1506 -0
  1226. package/src/mcp/connect-route.ts +1460 -0
  1227. package/src/mcp/connect-store.ts +680 -0
  1228. package/src/mcp/embed-app.ts +2051 -0
  1229. package/src/mcp/embed-route.ts +84 -0
  1230. package/src/mcp/external-agent-policy.ts +18 -0
  1231. package/src/mcp/index.ts +47 -0
  1232. package/src/mcp/oauth-route.ts +1016 -0
  1233. package/src/mcp/oauth-store.ts +581 -0
  1234. package/src/mcp/oauth-token.ts +227 -0
  1235. package/src/mcp/org-directory.ts +343 -0
  1236. package/src/mcp/route-paths.ts +34 -0
  1237. package/src/mcp/screen-memory-stdio.ts +290 -0
  1238. package/src/mcp/server.ts +507 -0
  1239. package/src/mcp/stdio.ts +328 -0
  1240. package/src/mcp/workspace-resolve.ts +261 -0
  1241. package/src/mcp-client/app-api.ts +136 -0
  1242. package/src/mcp-client/app-result.ts +64 -0
  1243. package/src/mcp-client/builtin-capabilities.ts +146 -0
  1244. package/src/mcp-client/builtin-store.ts +93 -0
  1245. package/src/mcp-client/config.ts +281 -0
  1246. package/src/mcp-client/errors.ts +54 -0
  1247. package/src/mcp-client/hub-client.ts +172 -0
  1248. package/src/mcp-client/hub-routes.ts +198 -0
  1249. package/src/mcp-client/index.ts +504 -0
  1250. package/src/mcp-client/manager.ts +968 -0
  1251. package/src/mcp-client/oauth-client.ts +462 -0
  1252. package/src/mcp-client/oauth-routes.ts +307 -0
  1253. package/src/mcp-client/remote-store.ts +674 -0
  1254. package/src/mcp-client/remote-url.ts +97 -0
  1255. package/src/mcp-client/routes.ts +1093 -0
  1256. package/src/mcp-client/screen-memory-local.ts +461 -0
  1257. package/src/mcp-client/tool-policy.ts +182 -0
  1258. package/src/mcp-client/visibility.ts +56 -0
  1259. package/src/mcp-client/workspace-servers.ts +379 -0
  1260. package/src/navigation/index.ts +170 -0
  1261. package/src/notifications/actions.ts +151 -0
  1262. package/src/notifications/channels.ts +410 -0
  1263. package/src/notifications/index.ts +22 -0
  1264. package/src/notifications/registry.ts +216 -0
  1265. package/src/notifications/routes.ts +106 -0
  1266. package/src/notifications/store.ts +236 -0
  1267. package/src/notifications/types.ts +52 -0
  1268. package/src/oauth-tokens/google-refresh.ts +175 -0
  1269. package/src/oauth-tokens/index.ts +15 -0
  1270. package/src/oauth-tokens/store.ts +384 -0
  1271. package/src/observability/cleanup-job.ts +124 -0
  1272. package/src/observability/evals.ts +507 -0
  1273. package/src/observability/experiments.ts +359 -0
  1274. package/src/observability/feedback.ts +332 -0
  1275. package/src/observability/hosted-model-experiment.ts +118 -0
  1276. package/src/observability/index.ts +62 -0
  1277. package/src/observability/plugin.ts +31 -0
  1278. package/src/observability/routes.ts +431 -0
  1279. package/src/observability/sentiment.ts +261 -0
  1280. package/src/observability/store.ts +1347 -0
  1281. package/src/observability/traces.ts +789 -0
  1282. package/src/observability/tracing.ts +157 -0
  1283. package/src/observability/tracking-identity.ts +55 -0
  1284. package/src/observability/types.ts +211 -0
  1285. package/src/onboarding/default-steps.ts +428 -0
  1286. package/src/onboarding/index.ts +22 -0
  1287. package/src/onboarding/plugin.ts +262 -0
  1288. package/src/onboarding/registry.ts +47 -0
  1289. package/src/onboarding/types.ts +96 -0
  1290. package/src/org/accept-pending.ts +98 -0
  1291. package/src/org/auto-join-domain.ts +113 -0
  1292. package/src/org/context.ts +640 -0
  1293. package/src/org/free-email-providers.ts +124 -0
  1294. package/src/org/handlers.ts +1153 -0
  1295. package/src/org/index.ts +63 -0
  1296. package/src/org/migrations.ts +105 -0
  1297. package/src/org/permissions.ts +30 -0
  1298. package/src/org/plugin.ts +255 -0
  1299. package/src/org/schema.ts +28 -0
  1300. package/src/org/types.ts +57 -0
  1301. package/src/org-team/index.ts +1 -0
  1302. package/src/package-lifecycle/deprecated-imports.ts +179 -0
  1303. package/src/package-lifecycle/eject-manifest.ts +345 -0
  1304. package/src/package-lifecycle/index.ts +7 -0
  1305. package/src/package-lifecycle/manifest.ts +120 -0
  1306. package/src/package-lifecycle/migration-manifest.ts +159 -0
  1307. package/src/package-lifecycle/migration-message.ts +6 -0
  1308. package/src/package-lifecycle/tombstone.ts +58 -0
  1309. package/src/package-lifecycle/upgrade-error.ts +37 -0
  1310. package/src/private-blob/index.ts +18 -0
  1311. package/src/private-blob/registry.ts +242 -0
  1312. package/src/private-blob/types.ts +55 -0
  1313. package/src/progress/actions.ts +179 -0
  1314. package/src/progress/index.ts +16 -0
  1315. package/src/progress/registry.ts +127 -0
  1316. package/src/progress/routes.ts +89 -0
  1317. package/src/progress/store.ts +353 -0
  1318. package/src/progress/types.ts +59 -0
  1319. package/src/provider-api/actions/custom-provider-registration.ts +197 -0
  1320. package/src/provider-api/actions/delete-staged-dataset.ts +5 -0
  1321. package/src/provider-api/actions/github-repo-files.ts +266 -0
  1322. package/src/provider-api/actions/list-staged-datasets.ts +5 -0
  1323. package/src/provider-api/actions/provider-api-audit.ts +88 -0
  1324. package/src/provider-api/actions/provider-api.ts +460 -0
  1325. package/src/provider-api/actions/query-staged-dataset.ts +5 -0
  1326. package/src/provider-api/actions/staged-datasets.ts +359 -0
  1327. package/src/provider-api/corpus-jobs-store.ts +522 -0
  1328. package/src/provider-api/corpus-jobs.ts +1817 -0
  1329. package/src/provider-api/custom-registry.ts +456 -0
  1330. package/src/provider-api/github-repo.ts +675 -0
  1331. package/src/provider-api/gong.ts +108 -0
  1332. package/src/provider-api/index.ts +5444 -0
  1333. package/src/provider-api/quota-governor.ts +562 -0
  1334. package/src/provider-api/runtime.ts +1 -0
  1335. package/src/provider-api/staged-datasets-aggregate.ts +304 -0
  1336. package/src/provider-api/staged-datasets-store.ts +441 -0
  1337. package/src/provider-api/staging.ts +483 -0
  1338. package/src/resources/agents.ts +65 -0
  1339. package/src/resources/emitter.ts +54 -0
  1340. package/src/resources/handlers.ts +728 -0
  1341. package/src/resources/index.ts +4 -0
  1342. package/src/resources/metadata.ts +252 -0
  1343. package/src/resources/script-helpers.ts +160 -0
  1344. package/src/resources/store.ts +1618 -0
  1345. package/src/review/actions/consume-review-feedback.ts +48 -0
  1346. package/src/review/actions/create-review-comment.ts +108 -0
  1347. package/src/review/actions/delete-review-comment.ts +67 -0
  1348. package/src/review/actions/get-review-feedback.ts +49 -0
  1349. package/src/review/actions/list-review-comments.ts +87 -0
  1350. package/src/review/actions/reply-review-comment.ts +118 -0
  1351. package/src/review/actions/resolve-review-thread.ts +94 -0
  1352. package/src/review/actions/send-review-thread-to-agent.ts +62 -0
  1353. package/src/review/actions/set-review-status.ts +58 -0
  1354. package/src/review/identity.ts +101 -0
  1355. package/src/review/index.ts +45 -0
  1356. package/src/review/mentions.ts +44 -0
  1357. package/src/review/registry.ts +111 -0
  1358. package/src/review/store.ts +997 -0
  1359. package/src/review/types.ts +101 -0
  1360. package/src/router/index.ts +24 -0
  1361. package/src/scripts/agent-engines/list-agent-engines.ts +130 -0
  1362. package/src/scripts/agent-engines/manage-agent-engine.ts +197 -0
  1363. package/src/scripts/agent-engines/set-agent-engine.ts +84 -0
  1364. package/src/scripts/agent-engines/test-agent-engine.ts +174 -0
  1365. package/src/scripts/call-agent.ts +792 -0
  1366. package/src/scripts/chat/index.ts +8 -0
  1367. package/src/scripts/chat/open-chat.ts +56 -0
  1368. package/src/scripts/chat/search-chats.ts +121 -0
  1369. package/src/scripts/core-scripts.ts +22 -0
  1370. package/src/scripts/db/check-scoping.ts +212 -0
  1371. package/src/scripts/db/exec.ts +791 -0
  1372. package/src/scripts/db/index.ts +19 -0
  1373. package/src/scripts/db/migrate-encrypt-credentials.ts +223 -0
  1374. package/src/scripts/db/migrate-encrypt-oauth-tokens.ts +213 -0
  1375. package/src/scripts/db/migrate-user-api-keys.ts +257 -0
  1376. package/src/scripts/db/patch.ts +820 -0
  1377. package/src/scripts/db/query.ts +299 -0
  1378. package/src/scripts/db/reset-dev-owner.ts +285 -0
  1379. package/src/scripts/db/safety.ts +286 -0
  1380. package/src/scripts/db/schema.ts +364 -0
  1381. package/src/scripts/db/scoping.ts +341 -0
  1382. package/src/scripts/db/sqlite-client.ts +78 -0
  1383. package/src/scripts/db/tool-mode.ts +23 -0
  1384. package/src/scripts/db/tool-schemas.ts +31 -0
  1385. package/src/scripts/db/wipe-leaked-builder-keys.ts +201 -0
  1386. package/src/scripts/dev/index.ts +296 -0
  1387. package/src/scripts/dev/list-files.ts +119 -0
  1388. package/src/scripts/dev/read-file.ts +77 -0
  1389. package/src/scripts/dev/search-files.ts +151 -0
  1390. package/src/scripts/dev/shell.ts +111 -0
  1391. package/src/scripts/dev/write-file.ts +56 -0
  1392. package/src/scripts/dev-session.ts +96 -0
  1393. package/src/scripts/docs/index.ts +8 -0
  1394. package/src/scripts/docs/search.ts +274 -0
  1395. package/src/scripts/docs/source-search.ts +363 -0
  1396. package/src/scripts/index.ts +15 -0
  1397. package/src/scripts/manage-agent-loop-settings.ts +84 -0
  1398. package/src/scripts/parse-args.ts +46 -0
  1399. package/src/scripts/resources/delete-memory.ts +67 -0
  1400. package/src/scripts/resources/delete.ts +69 -0
  1401. package/src/scripts/resources/effective.ts +71 -0
  1402. package/src/scripts/resources/index.ts +18 -0
  1403. package/src/scripts/resources/list.ts +103 -0
  1404. package/src/scripts/resources/migrate-learnings.ts +40 -0
  1405. package/src/scripts/resources/read.ts +107 -0
  1406. package/src/scripts/resources/save-memory.ts +99 -0
  1407. package/src/scripts/resources/write.ts +158 -0
  1408. package/src/scripts/runner.ts +339 -0
  1409. package/src/scripts/utils.ts +130 -0
  1410. package/src/search/index.ts +413 -0
  1411. package/src/search-utils/index.ts +112 -0
  1412. package/src/secrets/crypto.ts +228 -0
  1413. package/src/secrets/index.ts +65 -0
  1414. package/src/secrets/onboarding.ts +101 -0
  1415. package/src/secrets/register-framework-secrets.ts +228 -0
  1416. package/src/secrets/register.ts +129 -0
  1417. package/src/secrets/routes.ts +697 -0
  1418. package/src/secrets/schema.ts +52 -0
  1419. package/src/secrets/storage.ts +561 -0
  1420. package/src/secrets/substitution.ts +305 -0
  1421. package/src/server/__snapshots__/agent-chat-plugin.surface.spec.ts.snap +150 -0
  1422. package/src/server/action-change.ts +66 -0
  1423. package/src/server/action-discovery.ts +774 -0
  1424. package/src/server/action-routes.ts +658 -0
  1425. package/src/server/agent-access.ts +72 -0
  1426. package/src/server/agent-chat/action-filters-a2a.ts +339 -0
  1427. package/src/server/agent-chat/browser-team-tools.ts +510 -0
  1428. package/src/server/agent-chat/context-tools.ts +599 -0
  1429. package/src/server/agent-chat/framework-prompts.ts +467 -0
  1430. package/src/server/agent-chat/lazy-fs.ts +11 -0
  1431. package/src/server/agent-chat/mcp-glue.ts +91 -0
  1432. package/src/server/agent-chat/plugin-options.ts +379 -0
  1433. package/src/server/agent-chat/process-run-failure.ts +62 -0
  1434. package/src/server/agent-chat/prompt-resources.ts +1004 -0
  1435. package/src/server/agent-chat/recurring-jobs-runtime.ts +80 -0
  1436. package/src/server/agent-chat/request-surface.ts +71 -0
  1437. package/src/server/agent-chat/run-code-tools.ts +67 -0
  1438. package/src/server/agent-chat/script-entries.ts +796 -0
  1439. package/src/server/agent-chat/shared-thread.ts +301 -0
  1440. package/src/server/agent-chat/skill-frontmatter.ts +41 -0
  1441. package/src/server/agent-chat-plugin.ts +5930 -0
  1442. package/src/server/agent-discovery.ts +706 -0
  1443. package/src/server/agent-engine-api-key-route.ts +236 -0
  1444. package/src/server/agent-run-context.ts +204 -0
  1445. package/src/server/agent-teams-run-queue.ts +344 -0
  1446. package/src/server/agent-teams.ts +2257 -0
  1447. package/src/server/agents-bundle.ts +464 -0
  1448. package/src/server/analytics.ts +105 -0
  1449. package/src/server/app-base-path.ts +79 -0
  1450. package/src/server/app-name.ts +53 -0
  1451. package/src/server/app-url.ts +184 -0
  1452. package/src/server/attachment-actions.ts +276 -0
  1453. package/src/server/attribution.ts +214 -0
  1454. package/src/server/auth-marketing.ts +260 -0
  1455. package/src/server/auth-plugin.ts +32 -0
  1456. package/src/server/auth.ts +3803 -0
  1457. package/src/server/better-auth-instance.ts +1201 -0
  1458. package/src/server/builder-browser.ts +1701 -0
  1459. package/src/server/builder-design-systems.ts +668 -0
  1460. package/src/server/builder-space.ts +176 -0
  1461. package/src/server/captcha.ts +63 -0
  1462. package/src/server/capture-error.ts +64 -0
  1463. package/src/server/cli-capture.ts +141 -0
  1464. package/src/server/collab-plugin.ts +391 -0
  1465. package/src/server/complete-text.ts +231 -0
  1466. package/src/server/cookie-namespace.ts +159 -0
  1467. package/src/server/core-routes-plugin.ts +4122 -0
  1468. package/src/server/cors-origins.ts +60 -0
  1469. package/src/server/create-server.ts +268 -0
  1470. package/src/server/credential-provider.ts +1202 -0
  1471. package/src/server/csrf.ts +229 -0
  1472. package/src/server/date-utils.ts +42 -0
  1473. package/src/server/deep-link.ts +119 -0
  1474. package/src/server/derived-secret.ts +32 -0
  1475. package/src/server/design-token-utils.ts +1032 -0
  1476. package/src/server/desktop-sso.ts +83 -0
  1477. package/src/server/edge.ts +69 -0
  1478. package/src/server/email-actions.ts +218 -0
  1479. package/src/server/email-template.ts +192 -0
  1480. package/src/server/email-templates.ts +148 -0
  1481. package/src/server/email.ts +219 -0
  1482. package/src/server/embed-route.ts +283 -0
  1483. package/src/server/embed-session.ts +805 -0
  1484. package/src/server/embedded.ts +252 -0
  1485. package/src/server/entry-server.tsx +154 -0
  1486. package/src/server/framework-request-handler.ts +848 -0
  1487. package/src/server/fusion-app.ts +447 -0
  1488. package/src/server/google-auth-mode.ts +34 -0
  1489. package/src/server/google-auth-plugin.ts +496 -0
  1490. package/src/server/google-oauth-credentials.ts +128 -0
  1491. package/src/server/google-oauth.ts +972 -0
  1492. package/src/server/google-realtime-session.ts +182 -0
  1493. package/src/server/h3-helpers.ts +174 -0
  1494. package/src/server/http-response-telemetry.ts +396 -0
  1495. package/src/server/identity-sso-store.ts +304 -0
  1496. package/src/server/identity-sso.ts +514 -0
  1497. package/src/server/index.ts +593 -0
  1498. package/src/server/missing-key.ts +36 -0
  1499. package/src/server/oauth-helpers.ts +44 -0
  1500. package/src/server/oauth-public-origin.ts +44 -0
  1501. package/src/server/oauth-return-url.ts +120 -0
  1502. package/src/server/og-fonts-data.ts +15 -0
  1503. package/src/server/og-fonts.ts +75 -0
  1504. package/src/server/onboarding-html.ts +4040 -0
  1505. package/src/server/open-route.ts +311 -0
  1506. package/src/server/org-admin.ts +28 -0
  1507. package/src/server/poll-events.ts +88 -0
  1508. package/src/server/poll.ts +1224 -0
  1509. package/src/server/prompts/framework-core-compact.ts +107 -0
  1510. package/src/server/prompts/framework-core.ts +143 -0
  1511. package/src/server/prompts/index.ts +16 -0
  1512. package/src/server/prompts/model-overlays.ts +54 -0
  1513. package/src/server/prompts/shared-rules.ts +104 -0
  1514. package/src/server/realtime-voice.ts +967 -0
  1515. package/src/server/recap-image-route.ts +242 -0
  1516. package/src/server/recap-image-store.ts +185 -0
  1517. package/src/server/request-context.ts +416 -0
  1518. package/src/server/request-origin.ts +67 -0
  1519. package/src/server/resources-plugin.ts +119 -0
  1520. package/src/server/schema-prompt.ts +429 -0
  1521. package/src/server/scoped-key-storage.ts +223 -0
  1522. package/src/server/security-headers.ts +170 -0
  1523. package/src/server/self-dispatch.ts +224 -0
  1524. package/src/server/sentry-config.ts +73 -0
  1525. package/src/server/sentry-plugin.ts +138 -0
  1526. package/src/server/sentry.ts +444 -0
  1527. package/src/server/short-lived-token.ts +170 -0
  1528. package/src/server/social-og-image.ts +454 -0
  1529. package/src/server/sse.ts +102 -0
  1530. package/src/server/ssr-handler.ts +466 -0
  1531. package/src/server/transcribe-voice.ts +1076 -0
  1532. package/src/server/voice-providers-status.ts +118 -0
  1533. package/src/server/workspace-oauth.ts +31 -0
  1534. package/src/server/workspace-provider-oauth.ts +970 -0
  1535. package/src/session-replay-iframe-protocol.ts +58 -0
  1536. package/src/settings/handlers.ts +44 -0
  1537. package/src/settings/index.ts +34 -0
  1538. package/src/settings/org-settings.ts +83 -0
  1539. package/src/settings/script-helpers.ts +24 -0
  1540. package/src/settings/store.ts +247 -0
  1541. package/src/settings/user-settings.ts +47 -0
  1542. package/src/setup-connections/index.ts +90 -0
  1543. package/src/setup-connections/onboarding.ts +47 -0
  1544. package/src/shared/agent-access.ts +112 -0
  1545. package/src/shared/agent-chat.ts +124 -0
  1546. package/src/shared/agent-env.ts +46 -0
  1547. package/src/shared/agent-readable-resource.ts +111 -0
  1548. package/src/shared/agent-sidebar-url.ts +39 -0
  1549. package/src/shared/cache-control.ts +25 -0
  1550. package/src/shared/cloudflare-globals.d.ts +34 -0
  1551. package/src/shared/context-xray.ts +172 -0
  1552. package/src/shared/embed-auth.ts +6 -0
  1553. package/src/shared/index.ts +83 -0
  1554. package/src/shared/llm-connection.ts +42 -0
  1555. package/src/shared/markdown-block-split.ts +129 -0
  1556. package/src/shared/mcp-connect-content.ts +130 -0
  1557. package/src/shared/mcp-embed-headers.ts +175 -0
  1558. package/src/shared/mcp-integration-config.ts +101 -0
  1559. package/src/shared/merge-by-id.ts +14 -0
  1560. package/src/shared/oauth-state.ts +39 -0
  1561. package/src/shared/reasoning-effort.ts +228 -0
  1562. package/src/shared/route-warmup-config.ts +128 -0
  1563. package/src/shared/runtime.ts +31 -0
  1564. package/src/shared/social-meta.ts +82 -0
  1565. package/src/shared/streaming-text-smoothing.ts +184 -0
  1566. package/src/shared/truncate.ts +13 -0
  1567. package/src/shared/workspace-app-audience.ts +177 -0
  1568. package/src/shared/workspace-app-id.ts +54 -0
  1569. package/src/sharing/access.ts +585 -0
  1570. package/src/sharing/actions/create-agent-resource-link.ts +91 -0
  1571. package/src/sharing/actions/extension-change.ts +22 -0
  1572. package/src/sharing/actions/list-resource-shares.ts +93 -0
  1573. package/src/sharing/actions/set-resource-visibility.ts +91 -0
  1574. package/src/sharing/actions/share-resource.ts +322 -0
  1575. package/src/sharing/actions/unshare-resource.ts +72 -0
  1576. package/src/sharing/index.ts +35 -0
  1577. package/src/sharing/registry.ts +201 -0
  1578. package/src/sharing/schema.ts +99 -0
  1579. package/src/styles/agent-conversation.css +766 -0
  1580. package/src/styles/agent-native.css +938 -0
  1581. package/src/styles/blocks.css +1717 -0
  1582. package/src/styles/chat-history-list.css +1 -0
  1583. package/src/styles/rich-markdown-editor.css +1 -0
  1584. package/src/tailwind.preset.ts +140 -0
  1585. package/src/templates/chat/.agents/skills/agent-native-docs/SKILL.md +15 -13
  1586. package/src/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  1587. package/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +9 -6
  1588. package/src/templates/chat/AGENTS.md +3 -2
  1589. package/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +15 -13
  1590. package/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  1591. package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +9 -6
  1592. package/src/templates/default/AGENTS.md +6 -5
  1593. package/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +15 -13
  1594. package/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  1595. package/src/templates/headless/AGENTS.md +5 -4
  1596. package/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +15 -13
  1597. package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +3 -2
  1598. package/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  1599. package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +9 -6
  1600. package/src/templates/workspace-core/AGENTS.md +4 -4
  1601. package/src/templates/workspace-root/AGENTS.md +4 -4
  1602. package/src/terminal/cli-registry.ts +57 -0
  1603. package/src/terminal/index.ts +22 -0
  1604. package/src/terminal/pty-server.ts +389 -0
  1605. package/src/terminal/terminal-plugin.ts +265 -0
  1606. package/src/testing.ts +23 -0
  1607. package/src/tracking/index.ts +10 -0
  1608. package/src/tracking/providers.ts +422 -0
  1609. package/src/tracking/registry.ts +102 -0
  1610. package/src/tracking/route.ts +108 -0
  1611. package/src/tracking/types.ts +16 -0
  1612. package/src/transcription/builder-transcription.ts +118 -0
  1613. package/src/triggers/actions/list-automations.ts +99 -0
  1614. package/src/triggers/actions/manage-automation.ts +78 -0
  1615. package/src/triggers/actions.ts +333 -0
  1616. package/src/triggers/condition-evaluator.ts +163 -0
  1617. package/src/triggers/dispatcher.ts +536 -0
  1618. package/src/triggers/index.ts +13 -0
  1619. package/src/triggers/routes.ts +322 -0
  1620. package/src/triggers/types.ts +42 -0
  1621. package/src/types/pglite.d.ts +26 -0
  1622. package/src/usage/store.ts +698 -0
  1623. package/src/vite/action-types-plugin.ts +481 -0
  1624. package/src/vite/agent-web-plugin.ts +78 -0
  1625. package/src/vite/agents-bundle-plugin.ts +185 -0
  1626. package/src/vite/client.ts +3056 -0
  1627. package/src/vite/index.ts +21 -0
  1628. package/src/voice/index.ts +18 -0
  1629. package/src/voice/voice-cleanup-prompt.ts +38 -0
  1630. package/src/voice/voice-context.ts +217 -0
  1631. package/src/voice/voice-replacements.ts +75 -0
  1632. package/src/workspace-connections/credentials.ts +603 -0
  1633. package/src/workspace-connections/index.ts +72 -0
  1634. package/src/workspace-connections/lifecycle.ts +43 -0
  1635. package/src/workspace-connections/store.ts +1943 -0
  1636. package/src/workspace-files/index.ts +18 -0
  1637. package/src/workspace-files/store.ts +339 -0
  1638. package/src/workspace-files/tool.ts +266 -0
@@ -0,0 +1,1285 @@
1
+ import crypto from "node:crypto";
2
+
3
+ import { setResponseHeader, setResponseStatus } from "h3";
4
+
5
+ import {
6
+ AGENT_BACKGROUND_PROCESSOR_A2A,
7
+ AGENT_BACKGROUND_PROCESSOR_FIELD,
8
+ dispatchPathTargetsNetlifyBackgroundFunction,
9
+ isAgentChatDurableBackgroundEnabled,
10
+ resolveAgentChatProcessRunDispatchPath,
11
+ } from "../agent/durable-background.js";
12
+ import { trackingIdentityProperties } from "../observability/tracking-identity.js";
13
+ import { withConfiguredAppBasePath } from "../server/app-base-path.js";
14
+ import { getOrigin, isConfiguredAppOrigin } from "../server/google-oauth.js";
15
+ import { fireInternalDispatch } from "../server/self-dispatch.js";
16
+ import { agentChat } from "../shared/agent-chat.js";
17
+ import { track } from "../tracking/registry.js";
18
+ import {
19
+ hasConfiguredA2ASecret,
20
+ isA2AProductionRuntime,
21
+ } from "./auth-policy.js";
22
+ import { sanitizeA2ACorrelationMetadata } from "./correlation.js";
23
+ import {
24
+ createTask,
25
+ createOrReuseTask,
26
+ getTask,
27
+ getTaskOwnership,
28
+ updateTask,
29
+ claimA2ATaskForProcessing,
30
+ getA2ATaskDispatchState,
31
+ failStuckA2ATask,
32
+ failStuckQueuedA2ATask,
33
+ settleProcessingA2ATask,
34
+ touchQueuedA2ATaskDispatch,
35
+ touchProcessingA2ATask,
36
+ pauseProcessingA2ATask,
37
+ MAX_A2A_IDEMPOTENCY_KEY_CHARS,
38
+ A2A_PERSONAL_OWNER_SCOPE,
39
+ } from "./task-store.js";
40
+ import type {
41
+ A2AApprovedAction,
42
+ A2AConfig,
43
+ A2AHandler,
44
+ A2AHandlerContext,
45
+ A2AHandlerResult,
46
+ JsonRpcResponse,
47
+ Message,
48
+ Artifact,
49
+ } from "./types.js";
50
+
51
+ // Inlined to avoid pulling the entire core-routes-plugin (and its h3
52
+ // transitive deps) into the a2a/handlers test boundary. Must stay in sync
53
+ // with FRAMEWORK_ROUTE_PREFIX in `server/core-routes-plugin.ts`.
54
+ const A2A_PROCESS_TASK_PATH = "/_agent-native/a2a/_process-task";
55
+ const PORTABLE_FALLBACK_HANDOFF_TIMEOUT_MS = 1_000;
56
+ const A2A_QUEUED_DISPATCH_STUCK_AFTER_MS = 10_000;
57
+ const A2A_PROCESSING_STUCK_AFTER_MS = 5 * 60 * 1000;
58
+ const A2A_PROCESSING_HEARTBEAT_MS = 30_000;
59
+ const MAX_A2A_APPROVED_ACTIONS = 10;
60
+ const MAX_A2A_DIRECT_ACTION_NAME_CHARS = 200;
61
+ const MAX_A2A_DIRECT_ACTION_INPUT_BYTES = 64 * 1024;
62
+ const A2A_READ_INVOKE_EVENT = "$a2a_read_invoke";
63
+
64
+ function trustedApprovedActions(
65
+ value: unknown,
66
+ event: any | undefined,
67
+ ): A2AApprovedAction[] | undefined {
68
+ // Static API keys and unsigned requests do not prove which user authorized
69
+ // a consequential action. Only a verified identity-bearing JWT may carry
70
+ // chat authorization across the A2A boundary.
71
+ if (!event?.context?.__a2aVerifiedEmail || !Array.isArray(value)) {
72
+ return undefined;
73
+ }
74
+ const approved = value
75
+ .slice(0, MAX_A2A_APPROVED_ACTIONS)
76
+ .filter(
77
+ (candidate): candidate is A2AApprovedAction =>
78
+ !!candidate &&
79
+ typeof candidate === "object" &&
80
+ typeof (candidate as Record<string, unknown>).tool === "string" &&
81
+ !!(candidate as Record<string, unknown>).tool,
82
+ )
83
+ .map((candidate) => ({ tool: candidate.tool, input: candidate.input }));
84
+ return approved.length > 0 ? approved : undefined;
85
+ }
86
+
87
+ /**
88
+ * Request origin is routing/link context, not an identity signal. Accept only
89
+ * an absolute HTTP(S) origin from caller metadata so queued runs can preserve
90
+ * custom-domain/workspace links without allowing arbitrary values to leak
91
+ * into browser or artifact URLs.
92
+ */
93
+ function requestOriginFromMetadata(
94
+ metadata: Record<string, unknown> | undefined,
95
+ ): string | undefined {
96
+ const raw = metadata?.requestOrigin;
97
+ if (typeof raw !== "string" || !raw.trim()) return undefined;
98
+ try {
99
+ const url = new URL(raw);
100
+ if (url.protocol !== "http:" && url.protocol !== "https:") return undefined;
101
+ return url.origin;
102
+ } catch {
103
+ return undefined;
104
+ }
105
+ }
106
+
107
+ function requestOriginFromEvent(event: any | undefined): string | undefined {
108
+ if (!event) return undefined;
109
+ try {
110
+ return requestOriginFromMetadata({
111
+ requestOrigin: getOrigin(event as any),
112
+ });
113
+ } catch {
114
+ return undefined;
115
+ }
116
+ }
117
+
118
+ /**
119
+ * Prefer the origin resolved from the receiving request. A distinct public
120
+ * browser origin is allowed only when the receiver configured it explicitly;
121
+ * arbitrary caller metadata must not steer links or service-token URLs.
122
+ */
123
+ function requestOriginForContext(
124
+ metadata: Record<string, unknown> | undefined,
125
+ event: any | undefined,
126
+ ): string | undefined {
127
+ if (!event) return undefined;
128
+ const receiverOrigin = requestOriginFromEvent(event);
129
+ const metadataOrigin = requestOriginFromMetadata(metadata);
130
+ if (
131
+ metadataOrigin &&
132
+ (metadataOrigin === receiverOrigin || isConfiguredAppOrigin(metadataOrigin))
133
+ ) {
134
+ return metadataOrigin;
135
+ }
136
+ return receiverOrigin;
137
+ }
138
+
139
+ function trustedA2AMetadata(
140
+ metadata: Record<string, unknown> | undefined,
141
+ event: any | undefined,
142
+ ): Record<string, unknown> | undefined {
143
+ if (!metadata) return undefined;
144
+ const trusted = { ...metadata };
145
+ const requestOrigin = requestOriginForContext(metadata, event);
146
+ if (requestOrigin) trusted.requestOrigin = requestOrigin;
147
+ else delete trusted.requestOrigin;
148
+ return trusted;
149
+ }
150
+
151
+ /**
152
+ * Hard cap on how long a task may sit in submitted/working (never reaching
153
+ * `processing`) before the dispatch-retry loop in
154
+ * `refireStuckAsyncTaskIfNeeded` gives up and fails it. Without this, a
155
+ * persistently failing dispatch (missing background function, bad A2A
156
+ * secret, 404) throttles-and-retries forever — the queued bucket otherwise
157
+ * has no terminal state. Override with A2A_QUEUED_LIFETIME_MAX_MS.
158
+ */
159
+ function a2aQueuedLifetimeMaxMs(): number {
160
+ const raw = Number(process.env.A2A_QUEUED_LIFETIME_MAX_MS);
161
+ if (Number.isFinite(raw) && raw > 0) return raw;
162
+ return 3 * 60 * 1000;
163
+ }
164
+
165
+ /**
166
+ * Hard cap on total time a task may spend in `processing`, independent of
167
+ * the liveness heartbeat. `A2A_PROCESSING_STUCK_AFTER_MS` alone only catches
168
+ * a dead process — a hung await inside a still-alive process keeps
169
+ * `updated_at` fresh via the heartbeat forever. This bounds that case
170
+ * without cutting off legitimately long runs under it. Override with
171
+ * A2A_PROCESSING_LIFETIME_MAX_MS.
172
+ */
173
+ function a2aProcessingLifetimeMaxMs(): number {
174
+ const raw = Number(process.env.A2A_PROCESSING_LIFETIME_MAX_MS);
175
+ if (Number.isFinite(raw) && raw > 0) return raw;
176
+ return 30 * 60 * 1000;
177
+ }
178
+
179
+ /**
180
+ * Dispatch an async A2A task to a fresh function execution. Apps that opted
181
+ * into durable background runs reuse the emitted Netlify 15-minute worker;
182
+ * other hosts and apps retain the normal portable self-webhook route.
183
+ */
184
+ async function fireProcessTaskDispatch(
185
+ event: any,
186
+ taskId: string,
187
+ config: A2AConfig,
188
+ ): Promise<void> {
189
+ const backgroundPath = resolveAgentChatProcessRunDispatchPath();
190
+ const useBackgroundWorker =
191
+ isAgentChatDurableBackgroundEnabled({
192
+ appOptIn: config.durableBackgroundRuns,
193
+ }) && dispatchPathTargetsNetlifyBackgroundFunction(backgroundPath);
194
+
195
+ if (!useBackgroundWorker) {
196
+ await fireInternalDispatch({
197
+ event,
198
+ path: A2A_PROCESS_TASK_PATH,
199
+ taskId,
200
+ });
201
+ return;
202
+ }
203
+
204
+ try {
205
+ // A real Netlify background function acknowledges the enqueue quickly.
206
+ // Await that acknowledgement so a missing or rejected worker can fall
207
+ // back before the task is left in `working` with no processor.
208
+ await fireInternalDispatch({
209
+ event,
210
+ path: backgroundPath,
211
+ taskId,
212
+ body: {
213
+ [AGENT_BACKGROUND_PROCESSOR_FIELD]: AGENT_BACKGROUND_PROCESSOR_A2A,
214
+ },
215
+ awaitResponse: true,
216
+ });
217
+ } catch (backgroundError) {
218
+ // Deploys can retain a runtime env opt-in after the corresponding
219
+ // background function was removed from the build. Keep async A2A useful
220
+ // in that state by falling back to the portable processor route, which
221
+ // runs in the regular framework function with the same task/auth checks.
222
+ console.error(
223
+ "[a2a] Durable background dispatch failed; falling back to portable processor:",
224
+ backgroundError,
225
+ );
226
+ await fireInternalDispatch({
227
+ event,
228
+ path: A2A_PROCESS_TASK_PATH,
229
+ taskId,
230
+ // The caller is about to return after a failed background handoff.
231
+ // Await the portable route briefly so the request definitely leaves this
232
+ // invocation, but do not hold async message/send open for the full agent
233
+ // run. The target processor continues independently after this bounded
234
+ // client-side timeout if the handler takes longer.
235
+ awaitResponse: true,
236
+ responseTimeoutMs: PORTABLE_FALLBACK_HANDOFF_TIMEOUT_MS,
237
+ });
238
+ }
239
+ }
240
+
241
+ /**
242
+ * Process a previously-enqueued A2A task. Called by the `_process-task`
243
+ * route in `server.ts`, in a fresh function execution. Atomically claims the
244
+ * task, reconstructs the caller's request context from the task's metadata,
245
+ * runs the handler, and persists the outcome.
246
+ *
247
+ * Idempotent on duplicate dispatches: the atomic claim returns null if some
248
+ * other invocation already picked the task up, in which case we no-op.
249
+ */
250
+ export async function processA2ATaskFromQueue(
251
+ taskId: string,
252
+ config: A2AConfig,
253
+ event?: any,
254
+ ): Promise<void> {
255
+ const claimed = await claimA2ATaskForProcessing(taskId);
256
+ if (!claimed) {
257
+ // Already in flight, terminal, or missing. Nothing to do.
258
+ return;
259
+ }
260
+
261
+ const message = claimed.history?.[0];
262
+ if (!message) {
263
+ await settleProcessingA2ATask(taskId, {
264
+ state: "failed",
265
+ message: {
266
+ role: "agent",
267
+ parts: [{ type: "text", text: "Task is missing its inbound message" }],
268
+ },
269
+ });
270
+ return;
271
+ }
272
+
273
+ const meta = (claimed.metadata ?? {}) as Record<string, unknown>;
274
+ const processorMeta = (meta.__a2a_processor ?? {}) as Record<string, unknown>;
275
+ const verifiedEmail = processorMeta.verifiedEmail as string | undefined;
276
+ const orgDomainHint = processorMeta.orgDomainHint as string | undefined;
277
+ // The processor metadata was created by the authenticated inbound handler
278
+ // from that request's resolved origin. Prefer it over the processor event,
279
+ // whose host may be an internal worker/dispatch origin. Legacy tasks that
280
+ // predate this metadata fall back to the processor event.
281
+ const requestOrigin =
282
+ requestOriginFromMetadata(processorMeta) ?? requestOriginFromEvent(event);
283
+ const contextId =
284
+ (processorMeta.contextId as string | null | undefined) ?? undefined;
285
+ const callerMetadata =
286
+ (processorMeta.callerMetadata as
287
+ | Record<string, unknown>
288
+ | null
289
+ | undefined) ?? undefined;
290
+ const approvedActions = Array.isArray(processorMeta.approvedActions)
291
+ ? (processorMeta.approvedActions as A2AApprovedAction[])
292
+ : undefined;
293
+
294
+ const resolvedOrgId = await resolveVerifiedA2AOrgId(
295
+ verifiedEmail,
296
+ orgDomainHint,
297
+ );
298
+
299
+ const { runWithRequestContext } =
300
+ await import("../server/request-context.js");
301
+ const heartbeat = setInterval(() => {
302
+ touchProcessingA2ATask(taskId).catch((err) =>
303
+ console.error("[a2a] Failed to heartbeat async task:", err),
304
+ );
305
+ }, A2A_PROCESSING_HEARTBEAT_MS);
306
+ (
307
+ heartbeat as ReturnType<typeof setInterval> & { unref?: () => void }
308
+ ).unref?.();
309
+ try {
310
+ await runWithRequestContext(
311
+ {
312
+ userEmail: verifiedEmail,
313
+ orgId: resolvedOrgId,
314
+ ...(requestOrigin ? { requestOrigin } : {}),
315
+ },
316
+ () =>
317
+ runHandlerAndPersist(
318
+ taskId,
319
+ message,
320
+ config,
321
+ contextId,
322
+ callerMetadata,
323
+ event,
324
+ approvedActions,
325
+ ),
326
+ );
327
+ } catch (err: any) {
328
+ try {
329
+ await settleProcessingA2ATask(taskId, {
330
+ state: "failed",
331
+ message: {
332
+ role: "agent",
333
+ parts: [{ type: "text", text: err?.message ?? "Handler crashed" }],
334
+ },
335
+ });
336
+ } catch {}
337
+ } finally {
338
+ clearInterval(heartbeat);
339
+ }
340
+ }
341
+
342
+ /**
343
+ * Default A2A handler that delegates to agentChat.call().
344
+ * Used when no custom handler is provided in A2AConfig.
345
+ */
346
+ const defaultHandler: A2AHandler = async (
347
+ message: Message,
348
+ _context: A2AHandlerContext,
349
+ ): Promise<A2AHandlerResult> => {
350
+ // Extract text from message parts
351
+ const text = message.parts
352
+ .filter((p): p is { type: "text"; text: string } => p.type === "text")
353
+ .map((p) => p.text)
354
+ .join("\n");
355
+
356
+ if (!text) {
357
+ return {
358
+ message: {
359
+ role: "agent",
360
+ parts: [{ type: "text", text: "No text content in message" }],
361
+ },
362
+ };
363
+ }
364
+
365
+ // A2A note: this message arrived from a different app — the caller cannot
366
+ // see this app's local state (open deck, selected slide, etc.). They only
367
+ // see whatever this agent puts into the reply text. So:
368
+ // 1) include any concrete result (deck/document/dashboard URL, ID, value)
369
+ // explicitly in the reply — the caller can't navigate locally.
370
+ // 2) URLs must be fully-qualified — relative paths resolve against the
371
+ // caller's host and 404.
372
+ // We prepend a one-line hint to the user message so the agent knows.
373
+ const baseUrl = process.env.APP_URL || process.env.URL || "";
374
+ const appBaseUrl = baseUrl ? withConfiguredAppBasePath(baseUrl) : "";
375
+ const augmentedText = baseUrl
376
+ ? `[Cross-app A2A request — the caller is on a different host (${appBaseUrl} is yours, theirs is different). Include the concrete result (URL, ID, value) explicitly in your reply text; the caller can't see your local UI state. Any URL MUST be fully-qualified, never a relative path.]\n\n${text}`
377
+ : text;
378
+
379
+ const result = await agentChat.call(augmentedText);
380
+
381
+ const artifacts: Artifact[] = [];
382
+ if (result.filesChanged.length > 0) {
383
+ artifacts.push({
384
+ name: "files-changed",
385
+ description: "Files modified by the agent",
386
+ parts: [{ type: "data", data: { files: result.filesChanged } }],
387
+ });
388
+ }
389
+
390
+ return {
391
+ message: {
392
+ role: "agent",
393
+ parts: [
394
+ { type: "text", text: result.response },
395
+ ...(result.warnings?.length
396
+ ? [
397
+ {
398
+ type: "text" as const,
399
+ text: `\n\nWarnings:\n${result.warnings.join("\n")}`,
400
+ },
401
+ ]
402
+ : []),
403
+ ],
404
+ },
405
+ artifacts: artifacts.length > 0 ? artifacts : undefined,
406
+ };
407
+ };
408
+
409
+ function getHandler(config: A2AConfig): A2AHandler {
410
+ return config.handler ?? defaultHandler;
411
+ }
412
+
413
+ function jsonRpcError(
414
+ id: string | number | null,
415
+ code: number,
416
+ message: string,
417
+ ): JsonRpcResponse {
418
+ return { jsonrpc: "2.0", id, error: { code, message } };
419
+ }
420
+
421
+ function jsonRpcResult(id: string | number, result: unknown): JsonRpcResponse {
422
+ return { jsonrpc: "2.0", id, result };
423
+ }
424
+
425
+ function makeHandlerContext(
426
+ taskId: string,
427
+ contextId?: string,
428
+ metadata?: Record<string, unknown>,
429
+ event?: any,
430
+ approvedActions?: A2AApprovedAction[],
431
+ ): {
432
+ context: A2AHandlerContext;
433
+ artifacts: Artifact[];
434
+ } {
435
+ const artifacts: Artifact[] = [];
436
+ const context: A2AHandlerContext = {
437
+ taskId,
438
+ contextId,
439
+ metadata,
440
+ event,
441
+ approvedActions,
442
+ writeArtifact(name, content, mimeType) {
443
+ const artifact: Artifact = {
444
+ name,
445
+ parts: mimeType
446
+ ? [
447
+ {
448
+ type: "file",
449
+ file: {
450
+ name,
451
+ mimeType,
452
+ bytes: Buffer.from(content).toString("base64"),
453
+ },
454
+ },
455
+ ]
456
+ : [{ type: "text", text: content }],
457
+ };
458
+ artifacts.push(artifact);
459
+ return name;
460
+ },
461
+ };
462
+ return { context, artifacts };
463
+ }
464
+
465
+ /**
466
+ * Resolve org context from A2A metadata / event context and wrap `fn`
467
+ * inside `runWithRequestContext` so downstream actions see the org.
468
+ */
469
+ async function withA2ARequestContext<T>(
470
+ metadata: Record<string, unknown> | undefined,
471
+ event: any | undefined,
472
+ fn: () => Promise<T>,
473
+ ): Promise<T> {
474
+ const { runWithRequestContext } =
475
+ await import("../server/request-context.js");
476
+
477
+ const verifiedEmail =
478
+ (event?.context?.__a2aVerifiedEmail as string | undefined) ?? undefined;
479
+ // Only trust the org domain from the cryptographically verified JWT claim on
480
+ // the event context. metadata.orgDomain is caller-supplied and must not be
481
+ // used for org resolution — an unauthenticated caller could forge it and
482
+ // gain access to another org's data.
483
+ const orgDomain =
484
+ (event?.context?.__a2aOrgDomain as string | undefined) ?? undefined;
485
+
486
+ const resolvedOrgId = await resolveVerifiedA2AOrgId(verifiedEmail, orgDomain);
487
+ const requestOrigin = requestOriginForContext(metadata, event);
488
+
489
+ return runWithRequestContext(
490
+ {
491
+ userEmail: verifiedEmail,
492
+ orgId: resolvedOrgId,
493
+ ...(requestOrigin ? { requestOrigin } : {}),
494
+ },
495
+ fn,
496
+ ) as Promise<T>;
497
+ }
498
+
499
+ async function resolveVerifiedA2AOrgId(
500
+ verifiedEmail: string | undefined,
501
+ verifiedOrgDomain: string | undefined,
502
+ ): Promise<string | undefined> {
503
+ if (verifiedOrgDomain) {
504
+ try {
505
+ const { resolveOrgByDomain } = await import("../org/context.js");
506
+ const org = await resolveOrgByDomain(verifiedOrgDomain);
507
+ if (org) return org.orgId;
508
+ } catch {
509
+ // Org tables may not exist — continue without org context
510
+ }
511
+ }
512
+
513
+ if (verifiedEmail) {
514
+ try {
515
+ const { resolveOrgIdForEmail } = await import("../org/context.js");
516
+ return (await resolveOrgIdForEmail(verifiedEmail)) ?? undefined;
517
+ } catch {
518
+ // Org tables may not exist — continue without org context
519
+ }
520
+ }
521
+
522
+ return undefined;
523
+ }
524
+
525
+ /**
526
+ * Run the handler against the message and persist the outcome to the task store.
527
+ * Used in sync mode (awaited inline) and in async mode (called by the
528
+ * `_process-task` processor route in a fresh function execution).
529
+ */
530
+ async function runHandlerAndPersist(
531
+ taskId: string,
532
+ message: Message,
533
+ config: A2AConfig,
534
+ contextId: string | undefined,
535
+ metadata: Record<string, unknown> | undefined,
536
+ event?: any,
537
+ approvedActions?: A2AApprovedAction[],
538
+ ): Promise<void> {
539
+ const { context, artifacts } = makeHandlerContext(
540
+ taskId,
541
+ contextId,
542
+ metadata,
543
+ event,
544
+ approvedActions,
545
+ );
546
+ try {
547
+ const result = getHandler(config)(message, context);
548
+
549
+ if (
550
+ result &&
551
+ typeof result === "object" &&
552
+ Symbol.asyncIterator in result
553
+ ) {
554
+ let lastMessage: Message | undefined;
555
+ for await (const msg of result as AsyncGenerator<Message>) {
556
+ lastMessage = msg;
557
+ }
558
+ if (lastMessage?.metadata?.agentNativeTaskState === "input-required") {
559
+ await pauseProcessingA2ATask(taskId, lastMessage);
560
+ return;
561
+ }
562
+ await settleProcessingA2ATask(taskId, {
563
+ state: "completed",
564
+ message: lastMessage,
565
+ artifacts: artifacts.length > 0 ? artifacts : undefined,
566
+ });
567
+ return;
568
+ }
569
+
570
+ const handlerResult = await (result as Promise<A2AHandlerResult>);
571
+ const allArtifacts = [...artifacts, ...(handlerResult.artifacts ?? [])];
572
+ if (handlerResult.taskState === "input-required") {
573
+ await pauseProcessingA2ATask(taskId, handlerResult.message);
574
+ return;
575
+ }
576
+ await settleProcessingA2ATask(taskId, {
577
+ state: "completed",
578
+ message: handlerResult.message,
579
+ artifacts: allArtifacts.length > 0 ? allArtifacts : undefined,
580
+ });
581
+ } catch (err: any) {
582
+ await settleProcessingA2ATask(taskId, {
583
+ state: "failed",
584
+ message: {
585
+ role: "agent",
586
+ parts: [{ type: "text", text: err?.message ?? "Handler failed" }],
587
+ },
588
+ });
589
+ }
590
+ }
591
+
592
+ function verifiedTaskOwner(event?: any): {
593
+ ownerEmail: string | null;
594
+ ownerScope: string | null;
595
+ } {
596
+ const ownerEmail =
597
+ (event?.context?.__a2aVerifiedEmail as string | undefined) ?? null;
598
+ return {
599
+ ownerEmail,
600
+ ownerScope: ownerEmail
601
+ ? ((event?.context?.__a2aOrgDomain as string | undefined)
602
+ ?.trim()
603
+ .toLowerCase() ?? A2A_PERSONAL_OWNER_SCOPE)
604
+ : null,
605
+ };
606
+ }
607
+
608
+ async function handleSend(
609
+ params: Record<string, unknown>,
610
+ config: A2AConfig,
611
+ event?: any,
612
+ ): Promise<JsonRpcResponse & { _id: string | number }> {
613
+ const message = params.message as Message;
614
+ if (!message || !message.role || !Array.isArray(message.parts)) {
615
+ return {
616
+ ...jsonRpcError(
617
+ 0,
618
+ -32602,
619
+ "Invalid params: message with role and parts required",
620
+ ),
621
+ _id: 0,
622
+ };
623
+ }
624
+
625
+ const contextId = params.contextId as string | undefined;
626
+ const metadata = params.metadata as Record<string, unknown> | undefined;
627
+ const approvedActions = trustedApprovedActions(params.approvedActions, event);
628
+
629
+ // The JWT-verified caller email (set by mountA2A in server.ts) is the
630
+ // single source of truth for task ownership — bound at creation, checked
631
+ // on every subsequent tasks/get and tasks/cancel call. Caller-supplied
632
+ // metadata.userEmail is NEVER used for ownership; that would re-introduce
633
+ // the IDOR class fixed here.
634
+ const { ownerEmail: ownerEmailForTask, ownerScope: ownerScopeForTask } =
635
+ verifiedTaskOwner(event);
636
+ let idempotencyKey: string | undefined;
637
+ if (ownerEmailForTask && params.idempotencyKey !== undefined) {
638
+ if (typeof params.idempotencyKey !== "string") {
639
+ return {
640
+ ...jsonRpcError(
641
+ 0,
642
+ -32602,
643
+ "Invalid params: idempotencyKey must be a string",
644
+ ),
645
+ _id: 0,
646
+ };
647
+ }
648
+ idempotencyKey = params.idempotencyKey.trim();
649
+ if (
650
+ !idempotencyKey ||
651
+ idempotencyKey.length > MAX_A2A_IDEMPOTENCY_KEY_CHARS
652
+ ) {
653
+ return {
654
+ ...jsonRpcError(0, -32602, "Invalid params: idempotencyKey is invalid"),
655
+ _id: 0,
656
+ };
657
+ }
658
+ }
659
+
660
+ // Async mode: return the task immediately in `working` state, run the
661
+ // handler in the background, and let the caller poll `tasks/get`. This is
662
+ // the workaround for synchronous serverless request timeouts when the handler
663
+ // runs LLM + tool loops that can exceed a single HTTP invocation budget.
664
+ // SECURITY: only honor the explicit top-level `params.async`. The
665
+ // metadata.async fallback was caller-controlled and could force async
666
+ // dispatch (which has weaker auth than the sync path) on otherwise sync
667
+ // requests. Async is also refused entirely when no auth is configured in
668
+ // production — see the additional gate below.
669
+ const asyncMode =
670
+ params.async === true || (event && event.context?.__a2aForceAsync === true);
671
+ if (!asyncMode) idempotencyKey = undefined;
672
+
673
+ if (asyncMode) {
674
+ // Refuse async mode entirely when no auth is configured in production.
675
+ // The async dispatch path self-fires the `_process-task` route, which
676
+ // accepts unsigned dispatches when A2A_SECRET is unset — that combined
677
+ // with the lack of caller identity here would let any unauthenticated
678
+ // attacker queue and trigger handler runs. In production, require some
679
+ // form of auth so the verifiedEmail is bound to the task.
680
+ const hasA2ASecret = hasConfiguredA2ASecret();
681
+ const hasApiKey = !!(config.apiKeyEnv && process.env[config.apiKeyEnv]);
682
+ if (isA2AProductionRuntime() && !hasA2ASecret && !hasApiKey) {
683
+ return {
684
+ ...jsonRpcError(
685
+ 0,
686
+ -32001,
687
+ "A2A async mode is not available — A2A_SECRET or apiKeyEnv must be configured.",
688
+ ),
689
+ _id: 0,
690
+ };
691
+ }
692
+ // Resolve identity up front (cheap), bake it into the task's metadata,
693
+ // and dispatch the actual handler run to a SEPARATE function execution.
694
+ // On serverless hosts (Netlify, Vercel, Cloudflare) detached promises get
695
+ // killed when the response is flushed, so we self-fire a webhook to a
696
+ // dedicated processor route — same cross-platform pattern the integration
697
+ // webhook queue uses. The processor reconstructs the request context from
698
+ // the task metadata and runs the handler with its own full timeout.
699
+ const verifiedEmail =
700
+ (event?.context?.__a2aVerifiedEmail as string | undefined) ?? undefined;
701
+ // Only trust the verified org domain from the JWT claim — do not fall back
702
+ // to metadata.orgDomain which is caller-supplied and unverified.
703
+ const orgDomainHint =
704
+ (event?.context?.__a2aOrgDomain as string | undefined) ?? undefined;
705
+ const requestOrigin = requestOriginForContext(metadata, event);
706
+ const safeMetadata = trustedA2AMetadata(metadata, event);
707
+
708
+ const taskMetadata: Record<string, unknown> = {
709
+ ...(safeMetadata ?? {}),
710
+ __a2a_processor: {
711
+ verifiedEmail,
712
+ orgDomainHint,
713
+ ...(requestOrigin ? { requestOrigin } : {}),
714
+ contextId: contextId ?? null,
715
+ callerMetadata: safeMetadata ?? null,
716
+ approvedActions: approvedActions ?? null,
717
+ },
718
+ };
719
+ const { task, reused } = await createOrReuseTask(
720
+ message,
721
+ contextId,
722
+ taskMetadata,
723
+ ownerEmailForTask,
724
+ ownerScopeForTask,
725
+ idempotencyKey,
726
+ );
727
+ if (reused) {
728
+ return {
729
+ ...jsonRpcResult(0, sanitizeTaskForResponse(task)),
730
+ _id: 0,
731
+ };
732
+ }
733
+ const working = await updateTask(task.id, { state: "working" });
734
+
735
+ // Awaited, not fire-and-forget: this handler is about to return, and a
736
+ // detached dispatch fetch racing only a short settle timer can be killed
737
+ // mid-flight when the serverless response is flushed WITHOUT rejecting —
738
+ // see the `awaitResponse` doc on `fireInternalDispatch` in
739
+ // server/self-dispatch.ts. The durable worker path gets a fast 202
740
+ // acknowledgement; a stale-worker fallback uses a short bounded timeout
741
+ // because the portable route responds after processing the task.
742
+ try {
743
+ await fireProcessTaskDispatch(event, task.id, config);
744
+ } catch (err) {
745
+ console.error("[a2a] Failed to dispatch process-task:", err);
746
+ }
747
+
748
+ return {
749
+ ...jsonRpcResult(0, sanitizeTaskForResponse(working ?? task)),
750
+ _id: 0,
751
+ };
752
+ }
753
+
754
+ return withA2ARequestContext(metadata, event, async () => {
755
+ const { task, reused } = await createOrReuseTask(
756
+ message,
757
+ contextId,
758
+ undefined,
759
+ ownerEmailForTask,
760
+ ownerScopeForTask,
761
+ idempotencyKey,
762
+ );
763
+ if (reused) {
764
+ return {
765
+ ...jsonRpcResult(0, sanitizeTaskForResponse(task)),
766
+ _id: 0,
767
+ };
768
+ }
769
+ await updateTask(task.id, { state: "working" });
770
+
771
+ const ctx = makeHandlerContext(
772
+ task.id,
773
+ contextId,
774
+ trustedA2AMetadata(metadata, event),
775
+ event,
776
+ approvedActions,
777
+ );
778
+
779
+ try {
780
+ const result = getHandler(config)(message, ctx.context);
781
+
782
+ if (
783
+ result &&
784
+ typeof result === "object" &&
785
+ Symbol.asyncIterator in result
786
+ ) {
787
+ let lastMessage: Message | undefined;
788
+ for await (const msg of result as AsyncGenerator<Message>) {
789
+ lastMessage = msg;
790
+ }
791
+ if (lastMessage?.metadata?.agentNativeTaskState === "input-required") {
792
+ const updated = await updateTask(task.id, {
793
+ state: "input-required",
794
+ message: lastMessage,
795
+ });
796
+ return { ...jsonRpcResult(0, updated), _id: 0 };
797
+ }
798
+ const updated = await updateTask(task.id, {
799
+ state: "completed",
800
+ message: lastMessage,
801
+ artifacts: ctx.artifacts.length > 0 ? ctx.artifacts : undefined,
802
+ });
803
+ return { ...jsonRpcResult(0, updated), _id: 0 };
804
+ }
805
+
806
+ const handlerResult = await (result as Promise<A2AHandlerResult>);
807
+ const allArtifacts = [
808
+ ...ctx.artifacts,
809
+ ...(handlerResult.artifacts ?? []),
810
+ ];
811
+ if (handlerResult.taskState === "input-required") {
812
+ const updated = await updateTask(task.id, {
813
+ state: "input-required",
814
+ message: handlerResult.message,
815
+ });
816
+ return { ...jsonRpcResult(0, updated), _id: 0 };
817
+ }
818
+ const updated = await updateTask(task.id, {
819
+ state: "completed",
820
+ message: handlerResult.message,
821
+ artifacts: allArtifacts.length > 0 ? allArtifacts : undefined,
822
+ });
823
+ return { ...jsonRpcResult(0, updated), _id: 0 };
824
+ } catch (err: any) {
825
+ await updateTask(task.id, {
826
+ state: "failed",
827
+ message: {
828
+ role: "agent",
829
+ parts: [{ type: "text", text: err.message ?? "Handler failed" }],
830
+ },
831
+ });
832
+ return {
833
+ ...jsonRpcError(0, -32000, err.message ?? "Handler failed"),
834
+ _id: 0,
835
+ };
836
+ }
837
+ });
838
+ }
839
+
840
+ async function handleStream(
841
+ params: Record<string, unknown>,
842
+ config: A2AConfig,
843
+ res: { write: (chunk: string) => void; end: () => void },
844
+ event?: any,
845
+ ): Promise<void> {
846
+ const message = params.message as Message;
847
+ if (!message || !message.role || !Array.isArray(message.parts)) {
848
+ res.write(
849
+ `data: ${JSON.stringify(jsonRpcError(0, -32602, "Invalid params"))}\n\n`,
850
+ );
851
+ res.end();
852
+ return;
853
+ }
854
+
855
+ const contextId = params.contextId as string | undefined;
856
+ const metadata = params.metadata as Record<string, unknown> | undefined;
857
+ const approvedActions = trustedApprovedActions(params.approvedActions, event);
858
+ const { ownerEmail: ownerEmailForTask, ownerScope: ownerScopeForTask } =
859
+ verifiedTaskOwner(event);
860
+
861
+ await withA2ARequestContext(metadata, event, async () => {
862
+ const task = await createTask(
863
+ message,
864
+ contextId,
865
+ undefined,
866
+ ownerEmailForTask,
867
+ ownerScopeForTask,
868
+ );
869
+
870
+ await updateTask(task.id, { state: "working" });
871
+
872
+ const { context, artifacts } = makeHandlerContext(
873
+ task.id,
874
+ contextId,
875
+ trustedA2AMetadata(metadata, event),
876
+ event,
877
+ approvedActions,
878
+ );
879
+
880
+ try {
881
+ const result = getHandler(config)(message, context);
882
+
883
+ if (
884
+ result &&
885
+ typeof result === "object" &&
886
+ Symbol.asyncIterator in result
887
+ ) {
888
+ for await (const msg of result as AsyncGenerator<Message>) {
889
+ const intermediate = await updateTask(task.id, {
890
+ state: "working",
891
+ message: msg,
892
+ });
893
+ res.write(
894
+ `data: ${JSON.stringify(jsonRpcResult(0, intermediate))}\n\n`,
895
+ );
896
+ }
897
+ } else {
898
+ const handlerResult = await (result as Promise<A2AHandlerResult>);
899
+ const allArtifacts = [...artifacts, ...(handlerResult.artifacts ?? [])];
900
+ const updated = await updateTask(task.id, {
901
+ state: "completed",
902
+ message: handlerResult.message,
903
+ artifacts: allArtifacts.length > 0 ? allArtifacts : undefined,
904
+ });
905
+ res.write(`data: ${JSON.stringify(jsonRpcResult(0, updated))}\n\n`);
906
+ res.end();
907
+ return;
908
+ }
909
+
910
+ const allArtifacts = [...artifacts];
911
+ const final = await updateTask(task.id, {
912
+ state: "completed",
913
+ artifacts: allArtifacts.length > 0 ? allArtifacts : undefined,
914
+ });
915
+ res.write(`data: ${JSON.stringify(jsonRpcResult(0, final))}\n\n`);
916
+ } catch (err: any) {
917
+ await updateTask(task.id, { state: "failed" });
918
+ res.write(
919
+ `data: ${JSON.stringify(jsonRpcError(0, -32000, err.message ?? "Handler failed"))}\n\n`,
920
+ );
921
+ }
922
+
923
+ res.end();
924
+ });
925
+ }
926
+
927
+ /**
928
+ * Caller-supplied metadata keys that may contain sensitive bearer / OAuth
929
+ * material. Always stripped from `tasks/get` responses so a leaked task id
930
+ * never discloses an OAuth token even when the original sender carelessly
931
+ * stuffed one into `metadata` (see `production-agent.ts:1144-1156` for the
932
+ * historical googleToken propagation pattern).
933
+ */
934
+ const SENSITIVE_METADATA_KEYS = new Set([
935
+ "googleToken",
936
+ "userEmail",
937
+ "orgDomain",
938
+ "accessToken",
939
+ "refreshToken",
940
+ "apiKey",
941
+ "Authorization",
942
+ "authorization",
943
+ "bearer",
944
+ ]);
945
+
946
+ function sanitizeTaskForResponse(task: any): any {
947
+ if (!task || typeof task !== "object") return task;
948
+ const {
949
+ ownerEmail: _ownerEmail,
950
+ ownerScope: _ownerScope,
951
+ ...publicTask
952
+ } = task;
953
+ if (!publicTask.metadata || typeof publicTask.metadata !== "object") {
954
+ return publicTask;
955
+ }
956
+
957
+ const meta = publicTask.metadata as Record<string, unknown>;
958
+ const publicMeta: Record<string, unknown> = {};
959
+ for (const [k, v] of Object.entries(meta)) {
960
+ if (k === "__a2a_processor") continue;
961
+ if (SENSITIVE_METADATA_KEYS.has(k)) continue;
962
+ publicMeta[k] = v;
963
+ }
964
+ return { ...publicTask, metadata: publicMeta };
965
+ }
966
+
967
+ /**
968
+ * Reject access when the task has a recorded owner that doesn't match the
969
+ * verified caller. Returns a 404-shaped JSON-RPC error to avoid disclosing
970
+ * task existence to the wrong caller (enumeration via UUID lookup).
971
+ *
972
+ * - When the task has no recorded owner (legacy row from before the
973
+ * owner_email migration) we allow access if some verifiable bearer token
974
+ * was presented; otherwise we still reject so an unsigned caller can never
975
+ * read or cancel arbitrary task ids.
976
+ * - When neither A2A_SECRET nor apiKeyEnv is configured AND we're in
977
+ * production, we refuse `tasks/get` and `tasks/cancel` outright — there's
978
+ * no way to authenticate the caller, so the only safe response is "not
979
+ * found".
980
+ */
981
+ function authorizeTaskAccess(
982
+ taskOwnerEmail: string | null,
983
+ taskOwnerScope: string | null,
984
+ event: any,
985
+ config: A2AConfig,
986
+ ): JsonRpcResponse | null {
987
+ const verifiedEmail =
988
+ (event?.context?.__a2aVerifiedEmail as string | undefined) ?? null;
989
+ const hasA2ASecret = hasConfiguredA2ASecret();
990
+ const hasApiKey = !!(config.apiKeyEnv && process.env[config.apiKeyEnv]);
991
+ const inProduction = isA2AProductionRuntime();
992
+
993
+ if (inProduction && !hasA2ASecret && !hasApiKey) {
994
+ // No way to authenticate the caller in production — refuse access.
995
+ return jsonRpcError(0, -32001, "Task not found");
996
+ }
997
+
998
+ if (taskOwnerEmail) {
999
+ if (!verifiedEmail) {
1000
+ return jsonRpcError(0, -32001, "Task not found");
1001
+ }
1002
+ if (verifiedEmail.toLowerCase() !== taskOwnerEmail.toLowerCase()) {
1003
+ return jsonRpcError(0, -32001, "Task not found");
1004
+ }
1005
+ if (taskOwnerScope) {
1006
+ const verifiedScope =
1007
+ (event?.context?.__a2aOrgDomain as string | undefined)
1008
+ ?.trim()
1009
+ .toLowerCase() ?? A2A_PERSONAL_OWNER_SCOPE;
1010
+ if (verifiedScope !== taskOwnerScope.toLowerCase()) {
1011
+ return jsonRpcError(0, -32001, "Task not found");
1012
+ }
1013
+ }
1014
+ }
1015
+ // Legacy row (no owner_email recorded). The route-level auth gate is the
1016
+ // only thing protecting it — fall through and serve.
1017
+ return null;
1018
+ }
1019
+
1020
+ async function handleGet(
1021
+ params: Record<string, unknown>,
1022
+ event: any,
1023
+ config: A2AConfig,
1024
+ ): Promise<JsonRpcResponse> {
1025
+ const id = params.id as string;
1026
+ if (!id) {
1027
+ return jsonRpcError(0, -32602, "Invalid params: id required");
1028
+ }
1029
+ const ownership = await getTaskOwnership(id);
1030
+ const denied = authorizeTaskAccess(
1031
+ ownership.ownerEmail,
1032
+ ownership.ownerScope,
1033
+ event,
1034
+ config,
1035
+ );
1036
+ if (denied) return denied;
1037
+
1038
+ const task = await getTask(id);
1039
+ if (!task) {
1040
+ return jsonRpcError(0, -32001, "Task not found");
1041
+ }
1042
+ const taskChanged = await refireStuckAsyncTaskIfNeeded(
1043
+ id,
1044
+ event,
1045
+ config,
1046
+ ).catch((err) => {
1047
+ console.error("[a2a] Failed to refire stuck async task:", err);
1048
+ return false;
1049
+ });
1050
+ if (taskChanged) {
1051
+ const updated = await getTask(id);
1052
+ if (updated) return jsonRpcResult(0, sanitizeTaskForResponse(updated));
1053
+ }
1054
+ return jsonRpcResult(0, sanitizeTaskForResponse(task));
1055
+ }
1056
+
1057
+ async function refireStuckAsyncTaskIfNeeded(
1058
+ taskId: string,
1059
+ event: any,
1060
+ config: A2AConfig,
1061
+ ): Promise<boolean> {
1062
+ const state = await getA2ATaskDispatchState(taskId);
1063
+ if (!state) return false;
1064
+ if (!state.metadata?.__a2a_processor) return false;
1065
+
1066
+ const now = Date.now();
1067
+
1068
+ if (state.statusState === "submitted" || state.statusState === "working") {
1069
+ const queuedLifetimeCutoff = now - a2aQueuedLifetimeMaxMs();
1070
+ if (state.createdAt <= queuedLifetimeCutoff) {
1071
+ // Dispatch has kept failing (or was never delivered) long enough that
1072
+ // retrying further would just repeat the same failure forever — stop
1073
+ // refiring and surface a terminal error instead of throttling forever.
1074
+ return failStuckQueuedA2ATask(
1075
+ taskId,
1076
+ queuedLifetimeCutoff,
1077
+ "The async A2A task could not be started because dispatch kept failing. Please retry the request.",
1078
+ );
1079
+ }
1080
+
1081
+ if (state.updatedAt <= now - A2A_QUEUED_DISPATCH_STUCK_AFTER_MS) {
1082
+ if (!(await touchQueuedA2ATaskDispatch(taskId))) return false;
1083
+ try {
1084
+ await fireProcessTaskDispatch(event, taskId, config);
1085
+ } catch (err) {
1086
+ console.error(
1087
+ "[a2a] Failed to refire stuck queued task dispatch:",
1088
+ err,
1089
+ );
1090
+ return false;
1091
+ }
1092
+ return true;
1093
+ }
1094
+ return false;
1095
+ }
1096
+
1097
+ if (state.statusState === "processing") {
1098
+ const processingStuckCutoff = now - A2A_PROCESSING_STUCK_AFTER_MS;
1099
+ const processingLifetimeCutoff = now - a2aProcessingLifetimeMaxMs();
1100
+ const isStale = state.updatedAt <= processingStuckCutoff;
1101
+ const isOverLifetime = state.createdAt <= processingLifetimeCutoff;
1102
+ if (isStale || isOverLifetime) {
1103
+ // A processor that died mid-handler may have already performed
1104
+ // side-effectful work. Retrying from the top can duplicate artifacts, so
1105
+ // fail deterministically and let the caller issue an intentional retry.
1106
+ return failStuckA2ATask(
1107
+ taskId,
1108
+ processingStuckCutoff,
1109
+ isStale
1110
+ ? "The async A2A processor timed out before completing. Please retry the request."
1111
+ : "The async A2A processor exceeded its maximum run time. Please retry the request.",
1112
+ processingLifetimeCutoff,
1113
+ );
1114
+ }
1115
+ }
1116
+
1117
+ return false;
1118
+ }
1119
+
1120
+ async function handleCancel(
1121
+ params: Record<string, unknown>,
1122
+ event: any,
1123
+ config: A2AConfig,
1124
+ ): Promise<JsonRpcResponse> {
1125
+ const id = params.id as string;
1126
+ if (!id) {
1127
+ return jsonRpcError(0, -32602, "Invalid params: id required");
1128
+ }
1129
+ const ownership = await getTaskOwnership(id);
1130
+ const denied = authorizeTaskAccess(
1131
+ ownership.ownerEmail,
1132
+ ownership.ownerScope,
1133
+ event,
1134
+ config,
1135
+ );
1136
+ if (denied) return denied;
1137
+
1138
+ const task = await updateTask(id, { state: "canceled" });
1139
+ if (!task) {
1140
+ return jsonRpcError(0, -32001, "Task not found");
1141
+ }
1142
+ return jsonRpcResult(0, sanitizeTaskForResponse(task));
1143
+ }
1144
+
1145
+ async function handleInvokeReadOnlyAction(
1146
+ params: Record<string, unknown>,
1147
+ event: any,
1148
+ config: A2AConfig,
1149
+ ): Promise<JsonRpcResponse> {
1150
+ const action = typeof params.action === "string" ? params.action.trim() : "";
1151
+ const input = params.input ?? {};
1152
+
1153
+ if (!action) {
1154
+ return jsonRpcError(0, -32602, "Invalid params: action required");
1155
+ }
1156
+ if (action.length > MAX_A2A_DIRECT_ACTION_NAME_CHARS) {
1157
+ return jsonRpcError(0, -32602, "Invalid params: action is too long");
1158
+ }
1159
+ if (!input || typeof input !== "object" || Array.isArray(input)) {
1160
+ return jsonRpcError(0, -32602, "Invalid params: input must be an object");
1161
+ }
1162
+ let inputBytes: number;
1163
+ try {
1164
+ inputBytes = Buffer.byteLength(JSON.stringify(input), "utf8");
1165
+ } catch {
1166
+ return jsonRpcError(0, -32602, "Invalid params: input must be JSON-safe");
1167
+ }
1168
+ if (inputBytes > MAX_A2A_DIRECT_ACTION_INPUT_BYTES) {
1169
+ return jsonRpcError(0, -32602, "Invalid params: input is too large");
1170
+ }
1171
+ if (
1172
+ !event?.context?.__a2aVerifiedEmail ||
1173
+ event?.context?.__a2aAudienceVerified !== true
1174
+ ) {
1175
+ return jsonRpcError(
1176
+ 0,
1177
+ -32001,
1178
+ "A verified, audience-bound user identity is required for direct action invocation",
1179
+ );
1180
+ }
1181
+ if (!config.executeReadOnlyAction) {
1182
+ return jsonRpcError(0, -32601, "Direct action invocation not supported");
1183
+ }
1184
+
1185
+ const startedAt = Date.now();
1186
+ const correlation = sanitizeA2ACorrelationMetadata(params.metadata);
1187
+ const invocationId = crypto.randomUUID();
1188
+ const verifiedEmail = event.context.__a2aVerifiedEmail as string;
1189
+ const emitTracking = (status: "completed" | "failed") => {
1190
+ const identity = trackingIdentityProperties();
1191
+ track(
1192
+ A2A_READ_INVOKE_EVENT,
1193
+ {
1194
+ ...identity,
1195
+ action,
1196
+ receiver_app: config.appId ?? identity.app ?? config.name,
1197
+ caller_app: correlation.callerApp ?? "unknown",
1198
+ duration_ms: Math.max(0, Date.now() - startedAt),
1199
+ status,
1200
+ invocation_id: invocationId,
1201
+ ...(correlation.parentRunId
1202
+ ? { parent_run_id: correlation.parentRunId }
1203
+ : {}),
1204
+ ...(correlation.parentTurnId
1205
+ ? { parent_turn_id: correlation.parentTurnId }
1206
+ : {}),
1207
+ ...(correlation.invocationId
1208
+ ? { caller_invocation_id: correlation.invocationId }
1209
+ : {}),
1210
+ },
1211
+ { userId: verifiedEmail },
1212
+ );
1213
+ };
1214
+
1215
+ try {
1216
+ const result = await withA2ARequestContext(undefined, event, () =>
1217
+ config.executeReadOnlyAction!({
1218
+ action,
1219
+ input: input as Record<string, unknown>,
1220
+ invocationId,
1221
+ }),
1222
+ );
1223
+ emitTracking(result.status);
1224
+ return jsonRpcResult(0, { action, ...result });
1225
+ } catch (error) {
1226
+ emitTracking("failed");
1227
+ console.error(`[a2a] Direct action ${action} failed:`, error);
1228
+ return jsonRpcError(0, -32000, "Direct action invocation failed");
1229
+ }
1230
+ }
1231
+
1232
+ /**
1233
+ * H3-compatible JSON-RPC handler. Returns JSON directly (H3 serializes it).
1234
+ * Streaming is handled via H3's node response when needed.
1235
+ */
1236
+ export async function handleJsonRpcH3(
1237
+ body: any,
1238
+ event: any,
1239
+ config: A2AConfig,
1240
+ ): Promise<JsonRpcResponse> {
1241
+ if (!body || body.jsonrpc !== "2.0" || !body.method) {
1242
+ setResponseStatus(event, 400);
1243
+ return jsonRpcError(body?.id ?? null, -32600, "Invalid JSON-RPC request");
1244
+ }
1245
+
1246
+ const params = (body.params as Record<string, unknown>) ?? {};
1247
+ const id = body.id;
1248
+
1249
+ switch (body.method) {
1250
+ case "message/send": {
1251
+ const result = await handleSend(params, config, event);
1252
+ const { _id, ...response } = result;
1253
+ return { ...response, id } as JsonRpcResponse;
1254
+ }
1255
+ case "message/stream": {
1256
+ if (!config.streaming) {
1257
+ return jsonRpcError(id, -32601, "Streaming not supported");
1258
+ }
1259
+ // Use the raw node response for SSE streaming
1260
+ const res = event.node?.res;
1261
+ if (!res) {
1262
+ return jsonRpcError(id, -32000, "Streaming not available");
1263
+ }
1264
+ setResponseHeader(event, "Content-Type", "text/event-stream");
1265
+ setResponseHeader(event, "Cache-Control", "no-cache");
1266
+ setResponseHeader(event, "Connection", "keep-alive");
1267
+ await handleStream(params, config, res, event);
1268
+ return undefined as any; // Response already sent via SSE
1269
+ }
1270
+ case "tasks/get": {
1271
+ const result = await handleGet(params, event, config);
1272
+ return { ...result, id } as JsonRpcResponse;
1273
+ }
1274
+ case "tasks/cancel": {
1275
+ const result = await handleCancel(params, event, config);
1276
+ return { ...result, id } as JsonRpcResponse;
1277
+ }
1278
+ case "actions/invoke": {
1279
+ const result = await handleInvokeReadOnlyAction(params, event, config);
1280
+ return { ...result, id } as JsonRpcResponse;
1281
+ }
1282
+ default:
1283
+ return jsonRpcError(id, -32601, `Method not found: ${body.method}`);
1284
+ }
1285
+ }