@agent-native/core 0.113.0 → 0.114.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1508) hide show
  1. package/agent-native.eject.json +164 -0
  2. package/corpus/README.md +3 -3
  3. package/corpus/core/CHANGELOG.md +11 -0
  4. package/corpus/core/README.md +61 -174
  5. package/corpus/core/agent-native.eject.json +164 -0
  6. package/corpus/core/docs/content/agent-native-toolkit.mdx +38 -0
  7. package/corpus/core/docs/content/package-lifecycle.mdx +54 -4
  8. package/corpus/core/package.json +15 -2
  9. package/corpus/core/src/cli/eject.ts +1594 -0
  10. package/corpus/core/src/cli/index.ts +16 -0
  11. package/corpus/core/src/client/index.ts +4 -0
  12. package/corpus/core/src/client/resources/McpConnectionSuggestion.tsx +8 -2
  13. package/corpus/core/src/client/resources/McpIntegrationDialog.tsx +7 -2
  14. package/corpus/core/src/client/resources/ResourcesPanel.tsx +17 -3
  15. package/corpus/core/src/client/resources/index.ts +19 -0
  16. package/corpus/core/src/client/resources/mcp-integration-catalog.ts +9 -1
  17. package/corpus/core/src/client/resources/runtime.ts +1 -0
  18. package/corpus/core/src/client/setup-connections/catalog.ts +6 -0
  19. package/corpus/core/src/client/setup-connections/index.ts +1 -0
  20. package/corpus/core/src/client/setup-connections/runtime.ts +1 -0
  21. package/corpus/core/src/connections/catalog.ts +41 -24
  22. package/corpus/core/src/connections/index.ts +1 -0
  23. package/corpus/core/src/connections/runtime.ts +1 -0
  24. package/corpus/core/src/eject/provider-api-definitions.ts +193 -0
  25. package/corpus/core/src/eject/remote-mcp-presets.ts +137 -0
  26. package/corpus/core/src/eject/setup-readiness-ui.tsx +29 -0
  27. package/corpus/core/src/eject/workspace-connections.ts +92 -0
  28. package/corpus/core/src/index.ts +1 -0
  29. package/corpus/core/src/integrations/adapter-overrides.ts +12 -0
  30. package/corpus/core/src/integrations/eject/messaging-adapters.ts +85 -0
  31. package/corpus/core/src/integrations/index.ts +5 -1
  32. package/corpus/core/src/integrations/plugin.ts +34 -12
  33. package/corpus/core/src/integrations/runtime.ts +1 -0
  34. package/corpus/core/src/integrations/types.ts +3 -1
  35. package/corpus/core/src/package-lifecycle/eject-manifest.ts +345 -0
  36. package/corpus/core/src/package-lifecycle/index.ts +1 -0
  37. package/corpus/core/src/provider-api/index.ts +46 -12
  38. package/corpus/core/src/provider-api/runtime.ts +1 -0
  39. package/corpus/core/src/setup-connections/index.ts +1 -0
  40. package/corpus/core/src/shared/merge-by-id.ts +14 -0
  41. package/corpus/core/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +15 -13
  42. package/corpus/core/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  43. package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +9 -6
  44. package/corpus/core/src/templates/default/AGENTS.md +6 -5
  45. package/corpus/core/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +15 -13
  46. package/corpus/core/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  47. package/corpus/core/src/templates/headless/AGENTS.md +5 -4
  48. package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +15 -13
  49. package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +3 -2
  50. package/corpus/core/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  51. package/corpus/core/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +9 -6
  52. package/corpus/core/src/templates/workspace-core/AGENTS.md +4 -4
  53. package/corpus/core/src/templates/workspace-root/AGENTS.md +4 -4
  54. package/corpus/core/src/vite/client.ts +25 -2
  55. package/corpus/templates/analytics/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  56. package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +9 -6
  57. package/corpus/templates/assets/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  58. package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +9 -6
  59. package/corpus/templates/brain/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  60. package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +9 -6
  61. package/corpus/templates/brain/actions/remediate-legacy-capture-audiences.ts +167 -0
  62. package/corpus/templates/brain/app/lib/brain-chat-readiness.ts +6 -0
  63. package/corpus/templates/brain/app/routes/_index.tsx +8 -0
  64. package/corpus/templates/brain/app/routes.ts +1 -0
  65. package/corpus/templates/brain/changelog/2026-07-19-ask-starts-immediately-when-builder-s-managed-ai-connection-.md +6 -0
  66. package/corpus/templates/brain/changelog/2026-07-19-slack-and-granola-backfills-now-process-captures-concurrentl.md +6 -0
  67. package/corpus/templates/brain/changelog/2026-07-19-source-review-settings-now-control-knowledge-approval.md +6 -0
  68. package/corpus/templates/brain/changelog/2026-07-19-the-manage-agent-page-now-opens-correctly-from-brain-navigat.md +6 -0
  69. package/corpus/templates/brain/server/db/schema.ts +3 -0
  70. package/corpus/templates/brain/server/lib/brain.ts +41 -2
  71. package/corpus/templates/brain/server/lib/connectors.ts +379 -113
  72. package/corpus/templates/brain/server/lib/meeting-audience.ts +38 -0
  73. package/corpus/templates/brain/server/plugins/db.ts +10 -0
  74. package/corpus/templates/brain/server/routes/api/_agent-native/brain/ingest.post.ts +6 -4
  75. package/corpus/templates/calendar/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  76. package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +9 -6
  77. package/corpus/templates/chat/.agents/skills/agent-native-docs/SKILL.md +15 -13
  78. package/corpus/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  79. package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +9 -6
  80. package/corpus/templates/chat/AGENTS.md +3 -2
  81. package/corpus/templates/clips/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  82. package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +9 -6
  83. package/corpus/templates/content/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  84. package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +9 -6
  85. package/corpus/templates/design/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  86. package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +9 -6
  87. package/corpus/templates/dispatch/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  88. package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +9 -6
  89. package/corpus/templates/forms/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  90. package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +9 -6
  91. package/corpus/templates/macros/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  92. package/corpus/templates/mail/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  93. package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +9 -6
  94. package/corpus/templates/plan/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  95. package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +9 -6
  96. package/corpus/templates/slides/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  97. package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +9 -6
  98. package/corpus/templates/tasks/.agents/skills/agent-native-docs/SKILL.md +15 -13
  99. package/corpus/templates/tasks/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  100. package/corpus/templates/tasks/.agents/skills/self-modifying-code/SKILL.md +9 -6
  101. package/corpus/toolkit/CHANGELOG.md +6 -0
  102. package/corpus/toolkit/agent-native.eject.json +411 -0
  103. package/corpus/toolkit/package.json +5 -2
  104. package/dist/cli/eject.d.ts +21 -0
  105. package/dist/cli/eject.d.ts.map +1 -0
  106. package/dist/cli/eject.js +1145 -0
  107. package/dist/cli/eject.js.map +1 -0
  108. package/dist/cli/index.js +15 -0
  109. package/dist/cli/index.js.map +1 -1
  110. package/dist/client/index.d.ts +1 -1
  111. package/dist/client/index.d.ts.map +1 -1
  112. package/dist/client/index.js +1 -1
  113. package/dist/client/index.js.map +1 -1
  114. package/dist/client/resources/McpConnectionSuggestion.d.ts +4 -3
  115. package/dist/client/resources/McpConnectionSuggestion.d.ts.map +1 -1
  116. package/dist/client/resources/McpConnectionSuggestion.js +3 -3
  117. package/dist/client/resources/McpConnectionSuggestion.js.map +1 -1
  118. package/dist/client/resources/McpIntegrationDialog.d.ts +4 -3
  119. package/dist/client/resources/McpIntegrationDialog.d.ts.map +1 -1
  120. package/dist/client/resources/McpIntegrationDialog.js +2 -2
  121. package/dist/client/resources/McpIntegrationDialog.js.map +1 -1
  122. package/dist/client/resources/ResourcesPanel.d.ts +4 -1
  123. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  124. package/dist/client/resources/ResourcesPanel.js +9 -7
  125. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  126. package/dist/client/resources/index.d.ts +3 -0
  127. package/dist/client/resources/index.d.ts.map +1 -1
  128. package/dist/client/resources/index.js +3 -0
  129. package/dist/client/resources/index.js.map +1 -1
  130. package/dist/client/resources/mcp-integration-catalog.d.ts +2 -1
  131. package/dist/client/resources/mcp-integration-catalog.d.ts.map +1 -1
  132. package/dist/client/resources/mcp-integration-catalog.js +6 -2
  133. package/dist/client/resources/mcp-integration-catalog.js.map +1 -1
  134. package/dist/client/resources/runtime.d.ts +2 -0
  135. package/dist/client/resources/runtime.d.ts.map +1 -0
  136. package/dist/client/resources/runtime.js +2 -0
  137. package/dist/client/resources/runtime.js.map +1 -0
  138. package/dist/client/setup-connections/catalog.d.ts +2 -0
  139. package/dist/client/setup-connections/catalog.d.ts.map +1 -0
  140. package/dist/client/setup-connections/catalog.js +7 -0
  141. package/dist/client/setup-connections/catalog.js.map +1 -0
  142. package/dist/client/setup-connections/index.d.ts +1 -0
  143. package/dist/client/setup-connections/index.d.ts.map +1 -1
  144. package/dist/client/setup-connections/index.js +1 -0
  145. package/dist/client/setup-connections/index.js.map +1 -1
  146. package/dist/client/setup-connections/runtime.d.ts +2 -0
  147. package/dist/client/setup-connections/runtime.d.ts.map +1 -0
  148. package/dist/client/setup-connections/runtime.js +2 -0
  149. package/dist/client/setup-connections/runtime.js.map +1 -0
  150. package/dist/collab/awareness.d.ts +2 -2
  151. package/dist/collab/awareness.d.ts.map +1 -1
  152. package/dist/collab/routes.d.ts +1 -1
  153. package/dist/connections/catalog.d.ts +5 -3
  154. package/dist/connections/catalog.d.ts.map +1 -1
  155. package/dist/connections/catalog.js +16 -8
  156. package/dist/connections/catalog.js.map +1 -1
  157. package/dist/connections/index.d.ts +1 -1
  158. package/dist/connections/index.d.ts.map +1 -1
  159. package/dist/connections/index.js +1 -1
  160. package/dist/connections/index.js.map +1 -1
  161. package/dist/connections/runtime.d.ts +2 -0
  162. package/dist/connections/runtime.d.ts.map +1 -0
  163. package/dist/connections/runtime.js +2 -0
  164. package/dist/connections/runtime.js.map +1 -0
  165. package/dist/eject/provider-api-definitions.d.ts +34 -0
  166. package/dist/eject/provider-api-definitions.d.ts.map +1 -0
  167. package/dist/eject/provider-api-definitions.js +88 -0
  168. package/dist/eject/provider-api-definitions.js.map +1 -0
  169. package/dist/eject/remote-mcp-presets.d.ts +17 -0
  170. package/dist/eject/remote-mcp-presets.d.ts.map +1 -0
  171. package/dist/eject/remote-mcp-presets.js +81 -0
  172. package/dist/eject/remote-mcp-presets.js.map +1 -0
  173. package/dist/eject/setup-readiness-ui.d.ts +7 -0
  174. package/dist/eject/setup-readiness-ui.d.ts.map +1 -0
  175. package/dist/eject/setup-readiness-ui.js +13 -0
  176. package/dist/eject/setup-readiness-ui.js.map +1 -0
  177. package/dist/eject/workspace-connections.d.ts +11 -0
  178. package/dist/eject/workspace-connections.d.ts.map +1 -0
  179. package/dist/eject/workspace-connections.js +47 -0
  180. package/dist/eject/workspace-connections.js.map +1 -0
  181. package/dist/index.d.ts +1 -1
  182. package/dist/index.d.ts.map +1 -1
  183. package/dist/index.js +1 -1
  184. package/dist/index.js.map +1 -1
  185. package/dist/integrations/adapter-overrides.d.ts +3 -0
  186. package/dist/integrations/adapter-overrides.d.ts.map +1 -0
  187. package/dist/integrations/adapter-overrides.js +7 -0
  188. package/dist/integrations/adapter-overrides.js.map +1 -0
  189. package/dist/integrations/eject/messaging-adapters.d.ts +12 -0
  190. package/dist/integrations/eject/messaging-adapters.d.ts.map +1 -0
  191. package/dist/integrations/eject/messaging-adapters.js +49 -0
  192. package/dist/integrations/eject/messaging-adapters.js.map +1 -0
  193. package/dist/integrations/index.d.ts +3 -2
  194. package/dist/integrations/index.d.ts.map +1 -1
  195. package/dist/integrations/index.js +2 -1
  196. package/dist/integrations/index.js.map +1 -1
  197. package/dist/integrations/plugin.d.ts +32 -1
  198. package/dist/integrations/plugin.d.ts.map +1 -1
  199. package/dist/integrations/plugin.js +19 -12
  200. package/dist/integrations/plugin.js.map +1 -1
  201. package/dist/integrations/runtime.d.ts +2 -0
  202. package/dist/integrations/runtime.d.ts.map +1 -0
  203. package/dist/integrations/runtime.js +2 -0
  204. package/dist/integrations/runtime.js.map +1 -0
  205. package/dist/integrations/types.d.ts +3 -1
  206. package/dist/integrations/types.d.ts.map +1 -1
  207. package/dist/integrations/types.js.map +1 -1
  208. package/dist/notifications/routes.d.ts +3 -3
  209. package/dist/package-lifecycle/eject-manifest.d.ts +43 -0
  210. package/dist/package-lifecycle/eject-manifest.d.ts.map +1 -0
  211. package/dist/package-lifecycle/eject-manifest.js +219 -0
  212. package/dist/package-lifecycle/eject-manifest.js.map +1 -0
  213. package/dist/package-lifecycle/index.d.ts +1 -0
  214. package/dist/package-lifecycle/index.d.ts.map +1 -1
  215. package/dist/package-lifecycle/index.js +1 -0
  216. package/dist/package-lifecycle/index.js.map +1 -1
  217. package/dist/progress/routes.d.ts +1 -1
  218. package/dist/provider-api/actions/custom-provider-registration.d.ts +4 -4
  219. package/dist/provider-api/actions/provider-api.d.ts +8 -8
  220. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  221. package/dist/provider-api/index.d.ts +6 -2
  222. package/dist/provider-api/index.d.ts.map +1 -1
  223. package/dist/provider-api/index.js +25 -12
  224. package/dist/provider-api/index.js.map +1 -1
  225. package/dist/provider-api/runtime.d.ts +2 -0
  226. package/dist/provider-api/runtime.d.ts.map +1 -0
  227. package/dist/provider-api/runtime.js +2 -0
  228. package/dist/provider-api/runtime.js.map +1 -0
  229. package/dist/secrets/routes.d.ts +9 -9
  230. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  231. package/dist/server/transcribe-voice.d.ts +1 -1
  232. package/dist/setup-connections/index.d.ts +1 -1
  233. package/dist/setup-connections/index.d.ts.map +1 -1
  234. package/dist/setup-connections/index.js +1 -1
  235. package/dist/setup-connections/index.js.map +1 -1
  236. package/dist/shared/merge-by-id.d.ts +5 -0
  237. package/dist/shared/merge-by-id.d.ts.map +1 -0
  238. package/dist/shared/merge-by-id.js +7 -0
  239. package/dist/shared/merge-by-id.js.map +1 -0
  240. package/dist/templates/chat/.agents/skills/agent-native-docs/SKILL.md +15 -13
  241. package/dist/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  242. package/dist/templates/chat/.agents/skills/self-modifying-code/SKILL.md +9 -6
  243. package/dist/templates/chat/AGENTS.md +3 -2
  244. package/dist/templates/default/.agents/skills/agent-native-docs/SKILL.md +15 -13
  245. package/dist/templates/default/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  246. package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +9 -6
  247. package/dist/templates/default/AGENTS.md +6 -5
  248. package/dist/templates/headless/.agents/skills/agent-native-docs/SKILL.md +15 -13
  249. package/dist/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  250. package/dist/templates/headless/AGENTS.md +5 -4
  251. package/dist/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +15 -13
  252. package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +3 -2
  253. package/dist/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  254. package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +9 -6
  255. package/dist/templates/workspace-core/AGENTS.md +4 -4
  256. package/dist/templates/workspace-root/AGENTS.md +4 -4
  257. package/dist/vite/client.d.ts.map +1 -1
  258. package/dist/vite/client.js +22 -2
  259. package/dist/vite/client.js.map +1 -1
  260. package/docs/content/agent-native-toolkit.mdx +38 -0
  261. package/docs/content/package-lifecycle.mdx +54 -4
  262. package/package.json +15 -2
  263. package/src/a2a/agent-card.ts +83 -0
  264. package/src/a2a/artifact-response.ts +1648 -0
  265. package/src/a2a/auth-policy.ts +66 -0
  266. package/src/a2a/caller-auth.ts +102 -0
  267. package/src/a2a/client.ts +876 -0
  268. package/src/a2a/correlation.ts +50 -0
  269. package/src/a2a/handlers.ts +1285 -0
  270. package/src/a2a/index.ts +50 -0
  271. package/src/a2a/invoke.ts +348 -0
  272. package/src/a2a/response-text.ts +53 -0
  273. package/src/a2a/server.ts +586 -0
  274. package/src/a2a/task-store.ts +917 -0
  275. package/src/a2a/types.ts +221 -0
  276. package/src/a2a-claims.ts +52 -0
  277. package/src/action-change-marker.ts +74 -0
  278. package/src/action-ui.ts +38 -0
  279. package/src/action.ts +1406 -0
  280. package/src/adapters/cli/index.ts +6 -0
  281. package/src/adapters/cli/registry.ts +73 -0
  282. package/src/adapters/cli/shell-adapter.ts +92 -0
  283. package/src/adapters/cli/types.ts +27 -0
  284. package/src/agent/action-continuation-guidance.ts +38 -0
  285. package/src/agent/app-model-defaults.ts +201 -0
  286. package/src/agent/context-xray/actions/context-evict.ts +56 -0
  287. package/src/agent/context-xray/actions/context-manifest-get.ts +75 -0
  288. package/src/agent/context-xray/actions/context-pin.ts +56 -0
  289. package/src/agent/context-xray/actions/context-preview-get.ts +134 -0
  290. package/src/agent/context-xray/actions/context-report.ts +75 -0
  291. package/src/agent/context-xray/actions/context-restore.ts +51 -0
  292. package/src/agent/context-xray/actions/errors.ts +40 -0
  293. package/src/agent/context-xray/apply-directives.ts +137 -0
  294. package/src/agent/context-xray/directives-store.ts +178 -0
  295. package/src/agent/context-xray/identity.ts +37 -0
  296. package/src/agent/context-xray/manifest.ts +284 -0
  297. package/src/agent/context-xray/migrations.ts +32 -0
  298. package/src/agent/context-xray/plugin.ts +23 -0
  299. package/src/agent/context-xray/schema.ts +17 -0
  300. package/src/agent/context-xray/segments.ts +194 -0
  301. package/src/agent/context-xray/tokenize.ts +93 -0
  302. package/src/agent/default-model.ts +5 -0
  303. package/src/agent/durable-background.ts +547 -0
  304. package/src/agent/engine/ai-sdk-engine.ts +565 -0
  305. package/src/agent/engine/anthropic-engine.ts +320 -0
  306. package/src/agent/engine/builder-engine.ts +1110 -0
  307. package/src/agent/engine/builder-gateway-headers.ts +44 -0
  308. package/src/agent/engine/builtin.ts +122 -0
  309. package/src/agent/engine/context-directives-transform.ts +73 -0
  310. package/src/agent/engine/continuation-dispatch-retry.ts +168 -0
  311. package/src/agent/engine/credential-errors.ts +69 -0
  312. package/src/agent/engine/index.ts +54 -0
  313. package/src/agent/engine/openai-compatible-endpoint.ts +25 -0
  314. package/src/agent/engine/output-tokens.ts +181 -0
  315. package/src/agent/engine/provider-env-vars.ts +69 -0
  316. package/src/agent/engine/registry.ts +853 -0
  317. package/src/agent/engine/tool-call-journal-seed.ts +85 -0
  318. package/src/agent/engine/translate-ai-sdk.ts +407 -0
  319. package/src/agent/engine/translate-anthropic.ts +611 -0
  320. package/src/agent/engine/types.ts +310 -0
  321. package/src/agent/harness/acp-adapter.ts +893 -0
  322. package/src/agent/harness/acp-builtin.ts +70 -0
  323. package/src/agent/harness/ai-sdk-adapter.ts +509 -0
  324. package/src/agent/harness/background.ts +365 -0
  325. package/src/agent/harness/builtin.ts +50 -0
  326. package/src/agent/harness/index.ts +86 -0
  327. package/src/agent/harness/lifecycle.ts +498 -0
  328. package/src/agent/harness/registry.ts +97 -0
  329. package/src/agent/harness/runner.ts +182 -0
  330. package/src/agent/harness/store.ts +466 -0
  331. package/src/agent/harness/translate.ts +130 -0
  332. package/src/agent/harness/types.ts +129 -0
  333. package/src/agent/index.ts +32 -0
  334. package/src/agent/loop-settings.ts +186 -0
  335. package/src/agent/model-config.ts +363 -0
  336. package/src/agent/observational-memory/compactor.ts +78 -0
  337. package/src/agent/observational-memory/config.ts +78 -0
  338. package/src/agent/observational-memory/index.ts +79 -0
  339. package/src/agent/observational-memory/internal-run.ts +89 -0
  340. package/src/agent/observational-memory/message-text.ts +49 -0
  341. package/src/agent/observational-memory/migrations.ts +44 -0
  342. package/src/agent/observational-memory/observer.ts +128 -0
  343. package/src/agent/observational-memory/plugin.ts +35 -0
  344. package/src/agent/observational-memory/prompts.ts +53 -0
  345. package/src/agent/observational-memory/read.ts +131 -0
  346. package/src/agent/observational-memory/reflector.ts +119 -0
  347. package/src/agent/observational-memory/schema.ts +48 -0
  348. package/src/agent/observational-memory/store.ts +275 -0
  349. package/src/agent/observational-memory/types.ts +65 -0
  350. package/src/agent/processors.ts +209 -0
  351. package/src/agent/production-agent.ts +8254 -0
  352. package/src/agent/run-loop-with-resume.ts +394 -0
  353. package/src/agent/run-manager.ts +1825 -0
  354. package/src/agent/run-ownership.ts +75 -0
  355. package/src/agent/run-store.ts +2601 -0
  356. package/src/agent/runtime-context.ts +169 -0
  357. package/src/agent/thread-data-builder.ts +1584 -0
  358. package/src/agent/tool-call-journal.ts +368 -0
  359. package/src/agent/tool-error-redaction.ts +52 -0
  360. package/src/agent/tool-result-images.ts +178 -0
  361. package/src/agent/tool-search.ts +376 -0
  362. package/src/agent/types.ts +372 -0
  363. package/src/agent-native/index.ts +198 -0
  364. package/src/agent-web/config.ts +253 -0
  365. package/src/agent-web/generator.ts +382 -0
  366. package/src/agent-web/index.ts +36 -0
  367. package/src/appearance/actions/change-appearance.ts +35 -0
  368. package/src/application-state/emitter.ts +81 -0
  369. package/src/application-state/handlers.ts +121 -0
  370. package/src/application-state/index.ts +44 -0
  371. package/src/application-state/script-helpers.ts +155 -0
  372. package/src/application-state/store.ts +274 -0
  373. package/src/assets/branding/agent-native.icon/Assets/background.svg +3 -0
  374. package/src/assets/branding/agent-native.icon/Assets/foreground.svg +12 -0
  375. package/src/assets/branding/agent-native.icon/icon.json +49 -0
  376. package/src/assets/branding/favicon.png +0 -0
  377. package/src/assets/branding/favicon.svg +1 -0
  378. package/src/assets/branding/icon-on-dark.svg +10 -0
  379. package/src/assets/branding/icon-on-light.svg +10 -0
  380. package/src/assets/branding/mac-app-icon.svg +1 -0
  381. package/src/assets/branding/slack-bot/agent-native-1024.png +0 -0
  382. package/src/assets/branding/slack-bot/agent-native-512.png +0 -0
  383. package/src/assets/branding/tray-icon.svg +6 -0
  384. package/src/assets/branding/wordmark-on-dark.svg +21 -0
  385. package/src/assets/branding/wordmark-on-light.svg +21 -0
  386. package/src/assets/fonts/LICENSE_LIBERATION +96 -0
  387. package/src/assets/fonts/LICENSE_NOTO_NASKH_ARABIC +93 -0
  388. package/src/assets/fonts/LiberationSans-Bold.ttf +0 -0
  389. package/src/assets/fonts/LiberationSans-Regular.ttf +0 -0
  390. package/src/assets/fonts/NotoNaskhArabic-Variable.ttf +0 -0
  391. package/src/audit/actions/export-audit-events.ts +162 -0
  392. package/src/audit/actions/get-audit-event.ts +24 -0
  393. package/src/audit/actions/list-audit-events.ts +66 -0
  394. package/src/audit/cleanup-job.ts +100 -0
  395. package/src/audit/config.ts +90 -0
  396. package/src/audit/index.ts +43 -0
  397. package/src/audit/record.ts +180 -0
  398. package/src/audit/redact.ts +109 -0
  399. package/src/audit/store.ts +346 -0
  400. package/src/audit/types.ts +141 -0
  401. package/src/automation/index.ts +802 -0
  402. package/src/brand-kit/brand-signals.ts +124 -0
  403. package/src/brand-kit/fig/index.ts +64 -0
  404. package/src/brand-kit/index.ts +72 -0
  405. package/src/brand-kit/types.ts +113 -0
  406. package/src/browser-sessions/actions.ts +302 -0
  407. package/src/browser-sessions/routes.ts +234 -0
  408. package/src/browser-sessions/store.ts +679 -0
  409. package/src/browser-sessions/types.ts +84 -0
  410. package/src/changelog/parse.ts +328 -0
  411. package/src/chat-threads/emitter.ts +22 -0
  412. package/src/chat-threads/schema.ts +43 -0
  413. package/src/chat-threads/store.ts +1311 -0
  414. package/src/checkpoints/index.ts +15 -0
  415. package/src/checkpoints/service.ts +142 -0
  416. package/src/checkpoints/store.ts +153 -0
  417. package/src/cli/add.ts +425 -0
  418. package/src/cli/agent.ts +424 -0
  419. package/src/cli/agents.ts +122 -0
  420. package/src/cli/app-skill.ts +1455 -0
  421. package/src/cli/atomic-json-file.ts +324 -0
  422. package/src/cli/audit-agent-web.ts +324 -0
  423. package/src/cli/changelog.ts +199 -0
  424. package/src/cli/claude-code-participant.ts +515 -0
  425. package/src/cli/code-agent-commands.ts +270 -0
  426. package/src/cli/code-agent-connector.ts +1109 -0
  427. package/src/cli/code-agent-executor.ts +1970 -0
  428. package/src/cli/code-agent-output-smoother.ts +140 -0
  429. package/src/cli/code-agent-runs.concurrent-worker.ts +33 -0
  430. package/src/cli/code-agent-runs.ts +548 -0
  431. package/src/cli/code.ts +1805 -0
  432. package/src/cli/codex-cli-participant.ts +496 -0
  433. package/src/cli/connect.ts +2714 -0
  434. package/src/cli/content-local.ts +442 -0
  435. package/src/cli/context-xray-local.ts +2193 -0
  436. package/src/cli/create-workspace.ts +30 -0
  437. package/src/cli/create.ts +2247 -0
  438. package/src/cli/deploy-build.ts +50 -0
  439. package/src/cli/design-connect.ts +3187 -0
  440. package/src/cli/doctor.ts +472 -0
  441. package/src/cli/eject.ts +1594 -0
  442. package/src/cli/eval.ts +134 -0
  443. package/src/cli/gateway-helpers.ts +70 -0
  444. package/src/cli/index.ts +1217 -0
  445. package/src/cli/info.ts +105 -0
  446. package/src/cli/invoke.ts +288 -0
  447. package/src/cli/mcp-config-writers.ts +857 -0
  448. package/src/cli/mcp.ts +594 -0
  449. package/src/cli/migrate.ts +1813 -0
  450. package/src/cli/migration-codemod.ts +646 -0
  451. package/src/cli/multi-frontier-runs.ts +1952 -0
  452. package/src/cli/package-lifecycle.ts +823 -0
  453. package/src/cli/plan-blocks.ts +143 -0
  454. package/src/cli/plan-local.ts +3189 -0
  455. package/src/cli/plan-publish-store.ts +138 -0
  456. package/src/cli/pr-visual-recap-workflow.ts +2 -0
  457. package/src/cli/recap.ts +5 -0
  458. package/src/cli/setup-agents.ts +120 -0
  459. package/src/cli/skills-content/assets-skill.ts +83 -0
  460. package/src/cli/skills-content/canvas.ts +153 -0
  461. package/src/cli/skills-content/connection.ts +52 -0
  462. package/src/cli/skills-content/content-skill.ts +120 -0
  463. package/src/cli/skills-content/design-exploration-skill.ts +118 -0
  464. package/src/cli/skills-content/design-visual-edit-skill.ts +228 -0
  465. package/src/cli/skills-content/document-quality.ts +196 -0
  466. package/src/cli/skills-content/exemplar.ts +69 -0
  467. package/src/cli/skills-content/help.ts +77 -0
  468. package/src/cli/skills-content/index.ts +22 -0
  469. package/src/cli/skills-content/local-files.ts +100 -0
  470. package/src/cli/skills-content/plan-setup-auth.ts +80 -0
  471. package/src/cli/skills-content/visual-plan-skill.ts +493 -0
  472. package/src/cli/skills-content/visual-recap-skill.ts +553 -0
  473. package/src/cli/skills-content/visualize-repo-skill.ts +93 -0
  474. package/src/cli/skills-content/wireframe.ts +349 -0
  475. package/src/cli/skills.ts +4340 -0
  476. package/src/cli/sync-builder-starter-manifest.ts +631 -0
  477. package/src/cli/telemetry.ts +136 -0
  478. package/src/cli/templates-meta.ts +269 -0
  479. package/src/cli/upgrade.ts +956 -0
  480. package/src/cli/visualize-repo.ts +715 -0
  481. package/src/cli/workspace-dev.ts +1486 -0
  482. package/src/cli/workspacify.ts +258 -0
  483. package/src/client/AgentAskPopover.tsx +89 -0
  484. package/src/client/AgentChatHome.tsx +66 -0
  485. package/src/client/AgentNative.tsx +161 -0
  486. package/src/client/AgentNativeEmbedded.tsx +288 -0
  487. package/src/client/AgentNativeFrame.tsx +151 -0
  488. package/src/client/AgentPanel.tsx +3437 -0
  489. package/src/client/AgentTaskCard.tsx +273 -0
  490. package/src/client/AppearancePicker.tsx +79 -0
  491. package/src/client/AssistantChat.tsx +5793 -0
  492. package/src/client/ClientOnly.tsx +22 -0
  493. package/src/client/CommandMenu.tsx +726 -0
  494. package/src/client/ConnectBuilderCard.tsx +390 -0
  495. package/src/client/DefaultSpinner.tsx +47 -0
  496. package/src/client/ErrorBoundary.tsx +359 -0
  497. package/src/client/ErrorReportActions.tsx +69 -0
  498. package/src/client/FeedbackButton.tsx +553 -0
  499. package/src/client/HighlightedCodeBlock.tsx +173 -0
  500. package/src/client/IframeEmbed.tsx +151 -0
  501. package/src/client/KeepTabOpenNotice.tsx +181 -0
  502. package/src/client/MultiTabAssistantChat.tsx +2576 -0
  503. package/src/client/NewWorkspaceAppFlow.tsx +525 -0
  504. package/src/client/PoweredByBadge.tsx +284 -0
  505. package/src/client/RunStuckBanner.tsx +431 -0
  506. package/src/client/StarfieldBackground.tsx +466 -0
  507. package/src/client/Turnstile.tsx +125 -0
  508. package/src/client/active-run-state.ts +139 -0
  509. package/src/client/agent-chat/index.ts +279 -0
  510. package/src/client/agent-chat-adapter.ts +3692 -0
  511. package/src/client/agent-chat.ts +1233 -0
  512. package/src/client/agent-engine-key.ts +122 -0
  513. package/src/client/agent-page/AgentContextTab.tsx +487 -0
  514. package/src/client/agent-page/AgentEmptyState.tsx +44 -0
  515. package/src/client/agent-page/AgentJobsTab.tsx +441 -0
  516. package/src/client/agent-page/AgentTabFrame.tsx +39 -0
  517. package/src/client/agent-page/AgentTabsPage.tsx +1096 -0
  518. package/src/client/agent-page/types.ts +18 -0
  519. package/src/client/agent-page/use-jobs.ts +150 -0
  520. package/src/client/agent-sidebar-state.ts +166 -0
  521. package/src/client/analytics/index.ts +40 -0
  522. package/src/client/analytics-session.ts +70 -0
  523. package/src/client/analytics.ts +1757 -0
  524. package/src/client/api-path.ts +124 -0
  525. package/src/client/app-providers.tsx +230 -0
  526. package/src/client/appearance.ts +130 -0
  527. package/src/client/application-state.ts +154 -0
  528. package/src/client/assistant-ui-recovery.tsx +205 -0
  529. package/src/client/automation/index.ts +4 -0
  530. package/src/client/automation.ts +22 -0
  531. package/src/client/blocks/AiEditableField.tsx +30 -0
  532. package/src/client/blocks/BlockView.tsx +145 -0
  533. package/src/client/blocks/RegistryBlockDataProvider.tsx +121 -0
  534. package/src/client/blocks/SchemaBlockEditor.tsx +457 -0
  535. package/src/client/blocks/agent.ts +95 -0
  536. package/src/client/blocks/code-block-direction.ts +21 -0
  537. package/src/client/blocks/index.ts +308 -0
  538. package/src/client/blocks/library/AnnotatedCodeBlock.tsx +710 -0
  539. package/src/client/blocks/library/ApiEndpointBlock.tsx +1120 -0
  540. package/src/client/blocks/library/DataModelBlock.tsx +775 -0
  541. package/src/client/blocks/library/DiffBlock.tsx +1854 -0
  542. package/src/client/blocks/library/FileTreeBlock.tsx +868 -0
  543. package/src/client/blocks/library/HighlightedCode.tsx +260 -0
  544. package/src/client/blocks/library/JsonExplorerBlock.tsx +608 -0
  545. package/src/client/blocks/library/MermaidBlock.tsx +362 -0
  546. package/src/client/blocks/library/OpenApiSpecBlock.tsx +998 -0
  547. package/src/client/blocks/library/annotated-code.config.ts +101 -0
  548. package/src/client/blocks/library/annotation-rail.tsx +1020 -0
  549. package/src/client/blocks/library/api-endpoint.config.ts +207 -0
  550. package/src/client/blocks/library/block-copy.ts +399 -0
  551. package/src/client/blocks/library/callout.config.ts +57 -0
  552. package/src/client/blocks/library/callout.tsx +149 -0
  553. package/src/client/blocks/library/checklist.config.ts +56 -0
  554. package/src/client/blocks/library/checklist.tsx +208 -0
  555. package/src/client/blocks/library/code-filename-label.tsx +59 -0
  556. package/src/client/blocks/library/code-highlight.tsx +178 -0
  557. package/src/client/blocks/library/code-tabs.config.ts +70 -0
  558. package/src/client/blocks/library/code-tabs.tsx +606 -0
  559. package/src/client/blocks/library/code.config.ts +69 -0
  560. package/src/client/blocks/library/code.tsx +440 -0
  561. package/src/client/blocks/library/columns.config.ts +85 -0
  562. package/src/client/blocks/library/columns.tsx +334 -0
  563. package/src/client/blocks/library/data-model.config.ts +152 -0
  564. package/src/client/blocks/library/dev-doc-ui.tsx +191 -0
  565. package/src/client/blocks/library/diagram.config.ts +222 -0
  566. package/src/client/blocks/library/diagram.tsx +958 -0
  567. package/src/client/blocks/library/diff.config.ts +115 -0
  568. package/src/client/blocks/library/file-tree.config.ts +92 -0
  569. package/src/client/blocks/library/html.config.ts +79 -0
  570. package/src/client/blocks/library/html.tsx +258 -0
  571. package/src/client/blocks/library/json-explorer.config.ts +74 -0
  572. package/src/client/blocks/library/mermaid.config.ts +49 -0
  573. package/src/client/blocks/library/narrow-container.tsx +37 -0
  574. package/src/client/blocks/library/openapi-spec.config.ts +66 -0
  575. package/src/client/blocks/library/question-form.config.ts +127 -0
  576. package/src/client/blocks/library/question-form.tsx +944 -0
  577. package/src/client/blocks/library/sanitize-html.ts +343 -0
  578. package/src/client/blocks/library/server-specs.ts +338 -0
  579. package/src/client/blocks/library/specs.tsx +308 -0
  580. package/src/client/blocks/library/table.config.ts +61 -0
  581. package/src/client/blocks/library/table.tsx +449 -0
  582. package/src/client/blocks/library/tabs.config.ts +96 -0
  583. package/src/client/blocks/library/tabs.tsx +665 -0
  584. package/src/client/blocks/library/wireframe-icons.ts +210 -0
  585. package/src/client/blocks/library/wireframe-kit.tsx +1850 -0
  586. package/src/client/blocks/library/wireframe.config.ts +539 -0
  587. package/src/client/blocks/library/wireframe.tsx +535 -0
  588. package/src/client/blocks/mdx.ts +364 -0
  589. package/src/client/blocks/provider.tsx +51 -0
  590. package/src/client/blocks/registry.ts +83 -0
  591. package/src/client/blocks/schema-form/introspect.ts +201 -0
  592. package/src/client/blocks/server.ts +170 -0
  593. package/src/client/blocks/types.ts +415 -0
  594. package/src/client/browser-session-bridge.ts +548 -0
  595. package/src/client/browser-tab-id.ts +36 -0
  596. package/src/client/builder-frame.ts +194 -0
  597. package/src/client/builder-mark.tsx +21 -0
  598. package/src/client/changelog/Changelog.tsx +333 -0
  599. package/src/client/changelog/index.ts +1 -0
  600. package/src/client/chat/ChatHistoryList.tsx +7 -0
  601. package/src/client/chat/attachment-adapters.ts +426 -0
  602. package/src/client/chat/connectors.ts +1579 -0
  603. package/src/client/chat/index.ts +160 -0
  604. package/src/client/chat/markdown-renderer.tsx +693 -0
  605. package/src/client/chat/message-components.tsx +1326 -0
  606. package/src/client/chat/repo-helpers.ts +281 -0
  607. package/src/client/chat/run-recovery.tsx +994 -0
  608. package/src/client/chat/runtime.ts +1810 -0
  609. package/src/client/chat/tool-call-display.tsx +1270 -0
  610. package/src/client/chat/tool-render-registry.tsx +144 -0
  611. package/src/client/chat/use-agent-chat-lifecycle-tracking.ts +74 -0
  612. package/src/client/chat/use-reconnect-reader-owner.ts +28 -0
  613. package/src/client/chat/widgets/DataChartRenderer.tsx +242 -0
  614. package/src/client/chat/widgets/DataChartWidget.tsx +51 -0
  615. package/src/client/chat/widgets/DataInsightsWidget.tsx +59 -0
  616. package/src/client/chat/widgets/DataTableWidget.tsx +240 -0
  617. package/src/client/chat/widgets/InlineExtensionWidget.tsx +60 -0
  618. package/src/client/chat/widgets/builtin-tool-renderers.tsx +213 -0
  619. package/src/client/chat/widgets/data-widget-types.ts +1 -0
  620. package/src/client/chat/widgets/inline-extension-result.ts +86 -0
  621. package/src/client/chat-model-groups.ts +171 -0
  622. package/src/client/chat-thread-url.ts +11 -0
  623. package/src/client/chat-view-transition.ts +213 -0
  624. package/src/client/client-action.ts +21 -0
  625. package/src/client/client-bootstrap.ts +7 -0
  626. package/src/client/client-surface.ts +41 -0
  627. package/src/client/clipboard.ts +89 -0
  628. package/src/client/code-agent-chat-adapter.ts +537 -0
  629. package/src/client/collab/index.ts +60 -0
  630. package/src/client/command-navigation/index.ts +15 -0
  631. package/src/client/comments-review/index.ts +1 -0
  632. package/src/client/components/AgentPresenceChip.tsx +4 -0
  633. package/src/client/components/ApiKeySettings.tsx +309 -0
  634. package/src/client/components/CodeAgentIndicator.tsx +59 -0
  635. package/src/client/components/CodeRequiredDialog.tsx +470 -0
  636. package/src/client/components/LiveCursorOverlay.tsx +5 -0
  637. package/src/client/components/MissingKeyCard.tsx +61 -0
  638. package/src/client/components/PresenceBar.tsx +4 -0
  639. package/src/client/components/RecentEditHighlights.tsx +4 -0
  640. package/src/client/components/RemoteSelectionRings.tsx +5 -0
  641. package/src/client/components/icons/AgentNativeIcon.tsx +46 -0
  642. package/src/client/components/ui/dialog.tsx +1 -0
  643. package/src/client/components/ui/dropdown-menu.tsx +1 -0
  644. package/src/client/components/ui/hover-card.tsx +1 -0
  645. package/src/client/components/ui/message-scroller.tsx +131 -0
  646. package/src/client/components/ui/popover.tsx +1 -0
  647. package/src/client/components/ui/sheet.tsx +1 -0
  648. package/src/client/components/ui/tooltip.tsx +1 -0
  649. package/src/client/composer/index.ts +11 -0
  650. package/src/client/composer/runtime-adapters.tsx +123 -0
  651. package/src/client/composer/use-mention-search.ts +7 -0
  652. package/src/client/composer/wired-components.tsx +53 -0
  653. package/src/client/context-xray/ContextMeter.tsx +124 -0
  654. package/src/client/context-xray/ContextSegmentRow.tsx +27 -0
  655. package/src/client/context-xray/ContextTreemap.tsx +24 -0
  656. package/src/client/context-xray/ContextXRayPanel.tsx +59 -0
  657. package/src/client/context-xray/SegmentProvenancePopover.tsx +18 -0
  658. package/src/client/context-xray/format.ts +27 -0
  659. package/src/client/conversation/AgentConversation.tsx +555 -0
  660. package/src/client/conversation/code-agent-transcript.ts +283 -0
  661. package/src/client/conversation/index.ts +22 -0
  662. package/src/client/conversation/types.ts +85 -0
  663. package/src/client/conversation/use-near-bottom-autoscroll.ts +278 -0
  664. package/src/client/create-query-client.ts +86 -0
  665. package/src/client/db-admin/DataGrid.tsx +551 -0
  666. package/src/client/db-admin/DbAdminPage.tsx +218 -0
  667. package/src/client/db-admin/DevDatabaseLink.tsx +16 -0
  668. package/src/client/db-admin/EditableCell.tsx +451 -0
  669. package/src/client/db-admin/FilterBar.tsx +203 -0
  670. package/src/client/db-admin/ResultsGrid.tsx +114 -0
  671. package/src/client/db-admin/RowSidePanel.tsx +337 -0
  672. package/src/client/db-admin/SqlEditor.tsx +840 -0
  673. package/src/client/db-admin/TableBrowser.tsx +212 -0
  674. package/src/client/db-admin/TableEditor.tsx +760 -0
  675. package/src/client/db-admin/cell-format.ts +246 -0
  676. package/src/client/db-admin/changeset.ts +296 -0
  677. package/src/client/db-admin/export-utils.ts +78 -0
  678. package/src/client/db-admin/index.ts +33 -0
  679. package/src/client/db-admin/sql-storage.ts +134 -0
  680. package/src/client/db-admin/storage.ts +68 -0
  681. package/src/client/db-admin/useAgentSync.ts +226 -0
  682. package/src/client/db-admin/useDbAdmin.ts +294 -0
  683. package/src/client/dev-overlay/DevOverlay.tsx +576 -0
  684. package/src/client/dev-overlay/builtins.ts +40 -0
  685. package/src/client/dev-overlay/index.ts +23 -0
  686. package/src/client/dev-overlay/registry.ts +67 -0
  687. package/src/client/dev-overlay/types.ts +64 -0
  688. package/src/client/dev-overlay/use-dev-option.ts +78 -0
  689. package/src/client/dev-overlay/use-dev-overlay-shortcut.ts +31 -0
  690. package/src/client/dynamic-suggestions.ts +455 -0
  691. package/src/client/embed-auth.ts +544 -0
  692. package/src/client/embed.ts +54 -0
  693. package/src/client/error-capture.ts +690 -0
  694. package/src/client/error-format.ts +211 -0
  695. package/src/client/error-reporting.ts +100 -0
  696. package/src/client/extensions/AgentNativeExtensionFrame.e2e-host.tsx +136 -0
  697. package/src/client/extensions/AgentNativeExtensionFrame.tsx +708 -0
  698. package/src/client/extensions/EmbeddedExtension.tsx +604 -0
  699. package/src/client/extensions/ExtensionEditor.tsx +450 -0
  700. package/src/client/extensions/ExtensionQueryErrorState.tsx +47 -0
  701. package/src/client/extensions/ExtensionSlot.tsx +345 -0
  702. package/src/client/extensions/ExtensionViewer.tsx +1502 -0
  703. package/src/client/extensions/ExtensionViewerPage.tsx +32 -0
  704. package/src/client/extensions/ExtensionsListPage.tsx +432 -0
  705. package/src/client/extensions/ExtensionsSidebarSection.tsx +1259 -0
  706. package/src/client/extensions/InlineExtensionFrame.tsx +660 -0
  707. package/src/client/extensions/agent-native-extension-runtime.ts +495 -0
  708. package/src/client/extensions/delete-extension.ts +76 -0
  709. package/src/client/extensions/extension-load-error.ts +26 -0
  710. package/src/client/extensions/extension-order.ts +49 -0
  711. package/src/client/extensions/extension-popularity.ts +61 -0
  712. package/src/client/extensions/iframe-bridge.ts +377 -0
  713. package/src/client/extensions/index.ts +84 -0
  714. package/src/client/extensions/portable-extension.ts +712 -0
  715. package/src/client/feature-flags/FeatureFlagsPanel.tsx +519 -0
  716. package/src/client/feature-flags/helpers.ts +77 -0
  717. package/src/client/feature-flags/index.ts +13 -0
  718. package/src/client/feature-flags/types.ts +29 -0
  719. package/src/client/feature-flags/use-feature-flag.ts +26 -0
  720. package/src/client/feedback-context.ts +90 -0
  721. package/src/client/frame-protocol.ts +168 -0
  722. package/src/client/frame.ts +329 -0
  723. package/src/client/guided-questions.tsx +1152 -0
  724. package/src/client/history/VersionHistoryPanel.tsx +175 -0
  725. package/src/client/history/index.ts +21 -0
  726. package/src/client/history/use-history.ts +114 -0
  727. package/src/client/hooks/index.ts +46 -0
  728. package/src/client/host/index.ts +170 -0
  729. package/src/client/host-bridge.ts +1272 -0
  730. package/src/client/host-tools.ts +190 -0
  731. package/src/client/i18n.tsx +798 -0
  732. package/src/client/index.ts +370 -0
  733. package/src/client/integrations/IntegrationCard.tsx +186 -0
  734. package/src/client/integrations/IntegrationsPanel.tsx +633 -0
  735. package/src/client/integrations/api.ts +295 -0
  736. package/src/client/integrations/index.ts +29 -0
  737. package/src/client/integrations/useIntegrationStatus.ts +52 -0
  738. package/src/client/mcp-app-host.ts +720 -0
  739. package/src/client/mcp-apps/McpAppRenderer.tsx +760 -0
  740. package/src/client/navigation/index.ts +54 -0
  741. package/src/client/notifications/NotificationsBell.tsx +383 -0
  742. package/src/client/notifications/index.ts +1 -0
  743. package/src/client/observability/ObservabilityDashboard.tsx +890 -0
  744. package/src/client/observability/ThumbsFeedback.tsx +160 -0
  745. package/src/client/observability/index.ts +20 -0
  746. package/src/client/observability/useObservability.ts +266 -0
  747. package/src/client/onboarding/OnboardingBanner.tsx +73 -0
  748. package/src/client/onboarding/OnboardingPanel.tsx +1036 -0
  749. package/src/client/onboarding/SetupButton.tsx +64 -0
  750. package/src/client/onboarding/index.ts +25 -0
  751. package/src/client/onboarding/use-onboarding.ts +164 -0
  752. package/src/client/onboarding/use-preview-mode.ts +40 -0
  753. package/src/client/org/InvitationBanner.tsx +148 -0
  754. package/src/client/org/OrgSwitcher.tsx +754 -0
  755. package/src/client/org/RequireActiveOrg.tsx +337 -0
  756. package/src/client/org/TeamPage.tsx +1432 -0
  757. package/src/client/org/hooks.ts +359 -0
  758. package/src/client/org/index.ts +70 -0
  759. package/src/client/org/workspace-app-links.ts +367 -0
  760. package/src/client/org-team/index.ts +1 -0
  761. package/src/client/progress/RunsTray.tsx +680 -0
  762. package/src/client/progress/index.ts +1 -0
  763. package/src/client/require-session.tsx +142 -0
  764. package/src/client/resources/BuiltinCapabilityDetail.tsx +258 -0
  765. package/src/client/resources/McpConnectionSuggestion.tsx +276 -0
  766. package/src/client/resources/McpIntegrationDialog.tsx +808 -0
  767. package/src/client/resources/McpServerDetail.tsx +230 -0
  768. package/src/client/resources/ResourceEditor.tsx +872 -0
  769. package/src/client/resources/ResourceTree.tsx +860 -0
  770. package/src/client/resources/ResourcesPanel.tsx +1960 -0
  771. package/src/client/resources/index.ts +25 -0
  772. package/src/client/resources/mcp-integration-catalog.ts +771 -0
  773. package/src/client/resources/mcp-integration-logos.ts +108 -0
  774. package/src/client/resources/runtime.ts +1 -0
  775. package/src/client/resources/use-builtin-capabilities.ts +113 -0
  776. package/src/client/resources/use-mcp-servers.ts +217 -0
  777. package/src/client/resources/use-resources.ts +402 -0
  778. package/src/client/review/ReviewCommentComposer.tsx +123 -0
  779. package/src/client/review/ReviewStatusBadge.tsx +39 -0
  780. package/src/client/review/ReviewThreadPanel.tsx +625 -0
  781. package/src/client/review/index.ts +38 -0
  782. package/src/client/review/use-review.ts +186 -0
  783. package/src/client/route-chunk-recovery/index.ts +1 -0
  784. package/src/client/route-chunk-recovery.ts +331 -0
  785. package/src/client/route-state.ts +455 -0
  786. package/src/client/route-warmup.tsx +543 -0
  787. package/src/client/session-replay-iframe.e2e-host.tsx +100 -0
  788. package/src/client/session-replay.ts +3417 -0
  789. package/src/client/settings/AgentsSection.tsx +441 -0
  790. package/src/client/settings/AutomationsSection.tsx +516 -0
  791. package/src/client/settings/BackgroundAgentSection.tsx +189 -0
  792. package/src/client/settings/BrowserSection.tsx +110 -0
  793. package/src/client/settings/DemoModeSection.tsx +48 -0
  794. package/src/client/settings/SecretsSection.tsx +875 -0
  795. package/src/client/settings/SettingsPanel.tsx +3162 -0
  796. package/src/client/settings/SettingsSection.tsx +283 -0
  797. package/src/client/settings/SettingsTabsPage.tsx +592 -0
  798. package/src/client/settings/UsageSection.tsx +401 -0
  799. package/src/client/settings/VoiceTranscriptionSection.tsx +960 -0
  800. package/src/client/settings/agent-settings-search.ts +220 -0
  801. package/src/client/settings/index.ts +27 -0
  802. package/src/client/settings/useBuilderStatus.ts +1055 -0
  803. package/src/client/setup-connections/BuilderConnectCard.tsx +89 -0
  804. package/src/client/setup-connections/ProviderReadinessBadge.tsx +73 -0
  805. package/src/client/setup-connections/SetupConnectionsPage.tsx +94 -0
  806. package/src/client/setup-connections/catalog.ts +6 -0
  807. package/src/client/setup-connections/index.ts +47 -0
  808. package/src/client/setup-connections/runtime.ts +1 -0
  809. package/src/client/sharing/ShareButton.tsx +1748 -0
  810. package/src/client/sharing/ShareDialog.tsx +846 -0
  811. package/src/client/sharing/VisibilityBadge.tsx +4 -0
  812. package/src/client/sharing/index.ts +2 -0
  813. package/src/client/sse-event-processor.ts +2002 -0
  814. package/src/client/terminal/AgentTerminal.tsx +488 -0
  815. package/src/client/terminal/index.ts +7 -0
  816. package/src/client/theme.ts +27 -0
  817. package/src/client/tombstone/agent-presence-chip.ts +17 -0
  818. package/src/client/tombstone/editor.ts +265 -0
  819. package/src/client/tombstone/live-cursor-overlay.ts +21 -0
  820. package/src/client/tombstone/presence-bar.ts +17 -0
  821. package/src/client/tombstone/recent-edit-highlights.ts +17 -0
  822. package/src/client/tombstone/remote-selection-rings.ts +21 -0
  823. package/src/client/tombstone/rich-markdown-editor.ts +265 -0
  824. package/src/client/tombstone/ui-dialog.ts +49 -0
  825. package/src/client/tombstone/ui-dropdown-menu.ts +69 -0
  826. package/src/client/tombstone/ui-hover-card.ts +21 -0
  827. package/src/client/tombstone/ui-popover.ts +25 -0
  828. package/src/client/tombstone/ui-sheet.ts +49 -0
  829. package/src/client/tombstone/ui-tooltip.ts +29 -0
  830. package/src/client/tombstone/visual-style-controls.ts +61 -0
  831. package/src/client/tool-cells/BashCell.tsx +164 -0
  832. package/src/client/tool-cells/EditCell.tsx +303 -0
  833. package/src/client/tool-cells/FilesChangedSummary.tsx +208 -0
  834. package/src/client/tool-cells/WriteCell.tsx +145 -0
  835. package/src/client/tool-cells/index.ts +7 -0
  836. package/src/client/tool-display.ts +41 -0
  837. package/src/client/track.ts +57 -0
  838. package/src/client/transcription/BuilderTranscriptionCta.tsx +120 -0
  839. package/src/client/transcription/use-live-transcription.ts +292 -0
  840. package/src/client/ui/index.ts +55 -0
  841. package/src/client/uploads/index.ts +6 -0
  842. package/src/client/uploads/upload-editor-image.ts +79 -0
  843. package/src/client/uploads/use-upload-resource.ts +24 -0
  844. package/src/client/url-scrub.ts +51 -0
  845. package/src/client/use-action.ts +766 -0
  846. package/src/client/use-agent-chat-context.ts +63 -0
  847. package/src/client/use-agent-chat-home-handoff.ts +207 -0
  848. package/src/client/use-agent-chat.ts +53 -0
  849. package/src/client/use-agent-engine-configured.ts +211 -0
  850. package/src/client/use-avatar.ts +127 -0
  851. package/src/client/use-change-version.ts +150 -0
  852. package/src/client/use-chat-models.ts +252 -0
  853. package/src/client/use-chat-threads.ts +1262 -0
  854. package/src/client/use-db-sync.ts +1112 -0
  855. package/src/client/use-demo-mode-status.ts +30 -0
  856. package/src/client/use-dev-mode.ts +177 -0
  857. package/src/client/use-external-value.ts +40 -0
  858. package/src/client/use-pausing-interval.ts +65 -0
  859. package/src/client/use-pinch-zoom.ts +202 -0
  860. package/src/client/use-run-stuck-detection.ts +427 -0
  861. package/src/client/use-send-to-agent-chat.ts +85 -0
  862. package/src/client/use-session.ts +114 -0
  863. package/src/client/utils.ts +7 -0
  864. package/src/client/visual-style-controls.tsx +1 -0
  865. package/src/client/vite-dev-recovery-script.ts +226 -0
  866. package/src/client/voice-provider-status.ts +44 -0
  867. package/src/client/widgets/index.ts +41 -0
  868. package/src/code-agents/background-controller.ts +398 -0
  869. package/src/code-agents/background-run.ts +156 -0
  870. package/src/code-agents/index.ts +95 -0
  871. package/src/code-agents/prompt-attachments.ts +39 -0
  872. package/src/code-agents/transcript-normalizer.ts +750 -0
  873. package/src/code-agents/transcript-order.ts +73 -0
  874. package/src/coding-tools/index.ts +742 -0
  875. package/src/coding-tools/run-code.ts +1662 -0
  876. package/src/coding-tools/sandbox/adapter.ts +82 -0
  877. package/src/coding-tools/sandbox/background.ts +406 -0
  878. package/src/coding-tools/sandbox/executions-store.ts +517 -0
  879. package/src/coding-tools/sandbox/index.ts +132 -0
  880. package/src/coding-tools/sandbox/local-child-process-adapter.ts +217 -0
  881. package/src/collab/agent-identity.ts +5 -0
  882. package/src/collab/agent-presence.ts +341 -0
  883. package/src/collab/awareness-store.ts +196 -0
  884. package/src/collab/awareness.ts +317 -0
  885. package/src/collab/client-struct.ts +366 -0
  886. package/src/collab/client.ts +1205 -0
  887. package/src/collab/emitter.ts +31 -0
  888. package/src/collab/follow-mode.ts +107 -0
  889. package/src/collab/index.ts +151 -0
  890. package/src/collab/json-to-yjs.ts +504 -0
  891. package/src/collab/presence.ts +207 -0
  892. package/src/collab/recent-edits.ts +215 -0
  893. package/src/collab/routes.ts +191 -0
  894. package/src/collab/storage.ts +228 -0
  895. package/src/collab/struct-routes.ts +133 -0
  896. package/src/collab/text-to-yjs.ts +79 -0
  897. package/src/collab/undo.ts +432 -0
  898. package/src/collab/xml-ops.ts +68 -0
  899. package/src/collab/ydoc-manager.ts +544 -0
  900. package/src/command-navigation/actions.ts +100 -0
  901. package/src/command-navigation/index.ts +12 -0
  902. package/src/comments-review/index.ts +1 -0
  903. package/src/connections/catalog.ts +451 -0
  904. package/src/connections/index.ts +48 -0
  905. package/src/connections/reader.ts +911 -0
  906. package/src/connections/runtime.ts +1 -0
  907. package/src/credentials/index.ts +187 -0
  908. package/src/data-programs/actions.ts +335 -0
  909. package/src/data-programs/contract.ts +284 -0
  910. package/src/data-programs/execute.ts +693 -0
  911. package/src/data-programs/index.ts +72 -0
  912. package/src/data-programs/schema.ts +148 -0
  913. package/src/data-programs/store.ts +755 -0
  914. package/src/data-widgets/index.ts +376 -0
  915. package/src/db/client.ts +1627 -0
  916. package/src/db/create-get-db.ts +579 -0
  917. package/src/db/ddl-guard.ts +302 -0
  918. package/src/db/drizzle-config.ts +190 -0
  919. package/src/db/ensure-additive-columns.ts +430 -0
  920. package/src/db/index.ts +57 -0
  921. package/src/db/migrations.ts +691 -0
  922. package/src/db/request-telemetry.ts +154 -0
  923. package/src/db/runtime-diagnostics.ts +331 -0
  924. package/src/db/schema.ts +121 -0
  925. package/src/db/widen-columns.ts +75 -0
  926. package/src/db-admin/agent-tools.ts +202 -0
  927. package/src/db-admin/index.ts +26 -0
  928. package/src/db-admin/operations.ts +803 -0
  929. package/src/db-admin/routes.ts +174 -0
  930. package/src/db-admin/types.ts +110 -0
  931. package/src/demo/browser-state.ts +47 -0
  932. package/src/demo/fetch-interceptor.ts +175 -0
  933. package/src/demo/redact.ts +575 -0
  934. package/src/deploy/build.ts +3935 -0
  935. package/src/deploy/immutable-assets.ts +65 -0
  936. package/src/deploy/route-discovery.ts +458 -0
  937. package/src/deploy/workspace-core.ts +282 -0
  938. package/src/deploy/workspace-deploy.ts +1488 -0
  939. package/src/eject/provider-api-definitions.ts +193 -0
  940. package/src/eject/remote-mcp-presets.ts +137 -0
  941. package/src/eject/setup-readiness-ui.tsx +29 -0
  942. package/src/eject/workspace-connections.ts +92 -0
  943. package/src/embedding/agent.ts +159 -0
  944. package/src/embedding/bridge.ts +297 -0
  945. package/src/embedding/index.ts +43 -0
  946. package/src/embedding/protocol.ts +185 -0
  947. package/src/embedding/react.tsx +319 -0
  948. package/src/embeddings/index.ts +233 -0
  949. package/src/eval/agent-runner.ts +210 -0
  950. package/src/eval/define-eval.ts +55 -0
  951. package/src/eval/index.ts +49 -0
  952. package/src/eval/report.ts +75 -0
  953. package/src/eval/runner.ts +369 -0
  954. package/src/eval/scorer.ts +244 -0
  955. package/src/eval/types.ts +188 -0
  956. package/src/event-bus/bus.ts +140 -0
  957. package/src/event-bus/index.ts +3 -0
  958. package/src/event-bus/registry.ts +79 -0
  959. package/src/event-bus/types.ts +29 -0
  960. package/src/extensions/actions.ts +1636 -0
  961. package/src/extensions/change-marker.ts +54 -0
  962. package/src/extensions/content-patch.ts +468 -0
  963. package/src/extensions/fetch-tool.ts +461 -0
  964. package/src/extensions/html-shell.ts +803 -0
  965. package/src/extensions/local.ts +462 -0
  966. package/src/extensions/path.ts +40 -0
  967. package/src/extensions/proxy-security.ts +171 -0
  968. package/src/extensions/routes.ts +1080 -0
  969. package/src/extensions/schema.ts +269 -0
  970. package/src/extensions/session-replay-iframe.ts +131 -0
  971. package/src/extensions/slots/routes.ts +126 -0
  972. package/src/extensions/slots/schema.ts +87 -0
  973. package/src/extensions/slots/store.ts +450 -0
  974. package/src/extensions/store.ts +1347 -0
  975. package/src/extensions/theme.ts +114 -0
  976. package/src/extensions/url-safety.ts +316 -0
  977. package/src/extensions/web-content.ts +663 -0
  978. package/src/extensions/web-search-tool.ts +437 -0
  979. package/src/feature-flags/a2a-action-route.ts +56 -0
  980. package/src/feature-flags/actions/get-feature-flags.ts +24 -0
  981. package/src/feature-flags/actions/list-feature-flags.ts +69 -0
  982. package/src/feature-flags/actions/set-feature-flag.ts +89 -0
  983. package/src/feature-flags/index.ts +21 -0
  984. package/src/feature-flags/permissions.ts +53 -0
  985. package/src/feature-flags/plugin.ts +44 -0
  986. package/src/feature-flags/registry.ts +96 -0
  987. package/src/feature-flags/store.ts +176 -0
  988. package/src/file-upload/actions/upload-image.ts +213 -0
  989. package/src/file-upload/builder.ts +431 -0
  990. package/src/file-upload/index.ts +24 -0
  991. package/src/file-upload/pre-upload-attachments.ts +305 -0
  992. package/src/file-upload/registry.ts +125 -0
  993. package/src/file-upload/types.ts +89 -0
  994. package/src/guards/db-tool-scoping.ts +129 -0
  995. package/src/guards/index.ts +23 -0
  996. package/src/guards/no-drizzle-push.ts +116 -0
  997. package/src/guards/no-env-credentials.ts +229 -0
  998. package/src/guards/no-env-mutation.ts +114 -0
  999. package/src/guards/no-localhost-fallback.ts +124 -0
  1000. package/src/guards/no-unscoped-credentials.ts +227 -0
  1001. package/src/guards/no-unscoped-queries.ts +834 -0
  1002. package/src/guards/scan-utils.ts +105 -0
  1003. package/src/guards/types.ts +30 -0
  1004. package/src/history/actions/create-resource-version.ts +92 -0
  1005. package/src/history/actions/get-resource-version.ts +60 -0
  1006. package/src/history/actions/list-resource-history.ts +53 -0
  1007. package/src/history/actions/list-resource-versions.ts +43 -0
  1008. package/src/history/actions/restore-resource-version.ts +96 -0
  1009. package/src/history/index.ts +26 -0
  1010. package/src/history/registry.ts +111 -0
  1011. package/src/history/store.ts +379 -0
  1012. package/src/history/types.ts +69 -0
  1013. package/src/index.browser.ts +155 -0
  1014. package/src/index.ts +408 -0
  1015. package/src/ingestion/docx.ts +158 -0
  1016. package/src/ingestion/figma-node-to-html.ts +1860 -0
  1017. package/src/ingestion/figma.ts +548 -0
  1018. package/src/ingestion/index.ts +107 -0
  1019. package/src/ingestion/media.ts +264 -0
  1020. package/src/ingestion/notion.ts +121 -0
  1021. package/src/ingestion/office.ts +213 -0
  1022. package/src/ingestion/orchestration.ts +160 -0
  1023. package/src/ingestion/pptx.ts +331 -0
  1024. package/src/ingestion/selection.ts +81 -0
  1025. package/src/ingestion/website.ts +151 -0
  1026. package/src/integrations/a2a-continuation-marker.ts +2 -0
  1027. package/src/integrations/a2a-continuation-processor.ts +888 -0
  1028. package/src/integrations/a2a-continuations-store.ts +643 -0
  1029. package/src/integrations/adapter-overrides.ts +12 -0
  1030. package/src/integrations/adapters/discord.ts +364 -0
  1031. package/src/integrations/adapters/email.ts +1164 -0
  1032. package/src/integrations/adapters/google-docs.ts +371 -0
  1033. package/src/integrations/adapters/index.ts +29 -0
  1034. package/src/integrations/adapters/microsoft-teams.ts +413 -0
  1035. package/src/integrations/adapters/slack.ts +1914 -0
  1036. package/src/integrations/adapters/telegram.ts +386 -0
  1037. package/src/integrations/adapters/whatsapp.ts +358 -0
  1038. package/src/integrations/awaiting-input-store.ts +130 -0
  1039. package/src/integrations/catalog.ts +571 -0
  1040. package/src/integrations/computer-supervision-store.ts +423 -0
  1041. package/src/integrations/computer-supervision.ts +213 -0
  1042. package/src/integrations/config-store.ts +131 -0
  1043. package/src/integrations/controls-store.ts +187 -0
  1044. package/src/integrations/eject/messaging-adapters.ts +85 -0
  1045. package/src/integrations/google-docs-poller.ts +671 -0
  1046. package/src/integrations/identity-links-store.ts +210 -0
  1047. package/src/integrations/identity.ts +196 -0
  1048. package/src/integrations/index.ts +220 -0
  1049. package/src/integrations/installations-store.ts +677 -0
  1050. package/src/integrations/integration-memory.ts +187 -0
  1051. package/src/integrations/internal-token.ts +106 -0
  1052. package/src/integrations/pending-tasks-retry-job.ts +286 -0
  1053. package/src/integrations/pending-tasks-store.ts +468 -0
  1054. package/src/integrations/plugin.ts +3048 -0
  1055. package/src/integrations/remote-commands-store.ts +690 -0
  1056. package/src/integrations/remote-devices-store.ts +492 -0
  1057. package/src/integrations/remote-json-safety.ts +127 -0
  1058. package/src/integrations/remote-push-delivery-job.ts +48 -0
  1059. package/src/integrations/remote-push-delivery.ts +370 -0
  1060. package/src/integrations/remote-push-store.ts +664 -0
  1061. package/src/integrations/remote-retry-job.ts +55 -0
  1062. package/src/integrations/remote-run-events-store.ts +222 -0
  1063. package/src/integrations/remote-types.ts +186 -0
  1064. package/src/integrations/runtime.ts +1 -0
  1065. package/src/integrations/scope-store.ts +498 -0
  1066. package/src/integrations/slack-manifest.ts +78 -0
  1067. package/src/integrations/slack-oauth.ts +344 -0
  1068. package/src/integrations/task-queue-stats.ts +144 -0
  1069. package/src/integrations/thread-mapping-store.ts +134 -0
  1070. package/src/integrations/types.ts +485 -0
  1071. package/src/integrations/usage-budget-store.ts +906 -0
  1072. package/src/integrations/webhook-delivery.ts +55 -0
  1073. package/src/integrations/webhook-handler.ts +1939 -0
  1074. package/src/jobs/actions/list-recurring-jobs.ts +105 -0
  1075. package/src/jobs/actions/manage-recurring-job.ts +85 -0
  1076. package/src/jobs/cron.ts +126 -0
  1077. package/src/jobs/index.ts +9 -0
  1078. package/src/jobs/scheduler.ts +703 -0
  1079. package/src/jobs/tools.ts +367 -0
  1080. package/src/local-artifacts/index.ts +1372 -0
  1081. package/src/localization/actions/get-localization-preference.ts +24 -0
  1082. package/src/localization/actions/set-localization-preference.ts +32 -0
  1083. package/src/localization/default-messages.ts +1009 -0
  1084. package/src/localization/index.ts +2 -0
  1085. package/src/localization/server.ts +131 -0
  1086. package/src/localization/shared.ts +208 -0
  1087. package/src/mcp/actions/call-mcp-tool.ts +19 -0
  1088. package/src/mcp/actions/create-org-service-token.ts +87 -0
  1089. package/src/mcp/actions/list-mcp-tools.ts +18 -0
  1090. package/src/mcp/actions/list-org-service-tokens.ts +44 -0
  1091. package/src/mcp/actions/revoke-org-service-token.ts +30 -0
  1092. package/src/mcp/actions/service-token-access.ts +121 -0
  1093. package/src/mcp/ask-app-inline-tasks.ts +125 -0
  1094. package/src/mcp/build-server.ts +2356 -0
  1095. package/src/mcp/builtin-tools.ts +1506 -0
  1096. package/src/mcp/connect-route.ts +1460 -0
  1097. package/src/mcp/connect-store.ts +680 -0
  1098. package/src/mcp/embed-app.ts +2051 -0
  1099. package/src/mcp/embed-route.ts +84 -0
  1100. package/src/mcp/external-agent-policy.ts +18 -0
  1101. package/src/mcp/index.ts +47 -0
  1102. package/src/mcp/oauth-route.ts +1016 -0
  1103. package/src/mcp/oauth-store.ts +581 -0
  1104. package/src/mcp/oauth-token.ts +227 -0
  1105. package/src/mcp/org-directory.ts +343 -0
  1106. package/src/mcp/route-paths.ts +34 -0
  1107. package/src/mcp/screen-memory-stdio.ts +290 -0
  1108. package/src/mcp/server.ts +507 -0
  1109. package/src/mcp/stdio.ts +328 -0
  1110. package/src/mcp/workspace-resolve.ts +261 -0
  1111. package/src/mcp-client/app-api.ts +136 -0
  1112. package/src/mcp-client/app-result.ts +64 -0
  1113. package/src/mcp-client/builtin-capabilities.ts +146 -0
  1114. package/src/mcp-client/builtin-store.ts +93 -0
  1115. package/src/mcp-client/config.ts +281 -0
  1116. package/src/mcp-client/errors.ts +54 -0
  1117. package/src/mcp-client/hub-client.ts +172 -0
  1118. package/src/mcp-client/hub-routes.ts +198 -0
  1119. package/src/mcp-client/index.ts +504 -0
  1120. package/src/mcp-client/manager.ts +968 -0
  1121. package/src/mcp-client/oauth-client.ts +462 -0
  1122. package/src/mcp-client/oauth-routes.ts +307 -0
  1123. package/src/mcp-client/remote-store.ts +674 -0
  1124. package/src/mcp-client/remote-url.ts +97 -0
  1125. package/src/mcp-client/routes.ts +1093 -0
  1126. package/src/mcp-client/screen-memory-local.ts +461 -0
  1127. package/src/mcp-client/tool-policy.ts +182 -0
  1128. package/src/mcp-client/visibility.ts +56 -0
  1129. package/src/mcp-client/workspace-servers.ts +379 -0
  1130. package/src/navigation/index.ts +170 -0
  1131. package/src/notifications/actions.ts +151 -0
  1132. package/src/notifications/channels.ts +410 -0
  1133. package/src/notifications/index.ts +22 -0
  1134. package/src/notifications/registry.ts +216 -0
  1135. package/src/notifications/routes.ts +106 -0
  1136. package/src/notifications/store.ts +236 -0
  1137. package/src/notifications/types.ts +52 -0
  1138. package/src/oauth-tokens/google-refresh.ts +175 -0
  1139. package/src/oauth-tokens/index.ts +15 -0
  1140. package/src/oauth-tokens/store.ts +384 -0
  1141. package/src/observability/cleanup-job.ts +124 -0
  1142. package/src/observability/evals.ts +507 -0
  1143. package/src/observability/experiments.ts +359 -0
  1144. package/src/observability/feedback.ts +332 -0
  1145. package/src/observability/hosted-model-experiment.ts +118 -0
  1146. package/src/observability/index.ts +62 -0
  1147. package/src/observability/plugin.ts +31 -0
  1148. package/src/observability/routes.ts +431 -0
  1149. package/src/observability/sentiment.ts +261 -0
  1150. package/src/observability/store.ts +1347 -0
  1151. package/src/observability/traces.ts +789 -0
  1152. package/src/observability/tracing.ts +157 -0
  1153. package/src/observability/tracking-identity.ts +55 -0
  1154. package/src/observability/types.ts +211 -0
  1155. package/src/onboarding/default-steps.ts +428 -0
  1156. package/src/onboarding/index.ts +22 -0
  1157. package/src/onboarding/plugin.ts +262 -0
  1158. package/src/onboarding/registry.ts +47 -0
  1159. package/src/onboarding/types.ts +96 -0
  1160. package/src/org/accept-pending.ts +98 -0
  1161. package/src/org/auto-join-domain.ts +113 -0
  1162. package/src/org/context.ts +614 -0
  1163. package/src/org/free-email-providers.ts +124 -0
  1164. package/src/org/handlers.ts +1153 -0
  1165. package/src/org/index.ts +63 -0
  1166. package/src/org/migrations.ts +105 -0
  1167. package/src/org/permissions.ts +30 -0
  1168. package/src/org/plugin.ts +255 -0
  1169. package/src/org/schema.ts +28 -0
  1170. package/src/org/types.ts +57 -0
  1171. package/src/org-team/index.ts +1 -0
  1172. package/src/package-lifecycle/deprecated-imports.ts +179 -0
  1173. package/src/package-lifecycle/eject-manifest.ts +345 -0
  1174. package/src/package-lifecycle/index.ts +7 -0
  1175. package/src/package-lifecycle/manifest.ts +120 -0
  1176. package/src/package-lifecycle/migration-manifest.ts +159 -0
  1177. package/src/package-lifecycle/migration-message.ts +6 -0
  1178. package/src/package-lifecycle/tombstone.ts +58 -0
  1179. package/src/package-lifecycle/upgrade-error.ts +37 -0
  1180. package/src/private-blob/index.ts +18 -0
  1181. package/src/private-blob/registry.ts +242 -0
  1182. package/src/private-blob/types.ts +55 -0
  1183. package/src/progress/actions.ts +179 -0
  1184. package/src/progress/index.ts +16 -0
  1185. package/src/progress/registry.ts +127 -0
  1186. package/src/progress/routes.ts +89 -0
  1187. package/src/progress/store.ts +353 -0
  1188. package/src/progress/types.ts +59 -0
  1189. package/src/provider-api/actions/custom-provider-registration.ts +197 -0
  1190. package/src/provider-api/actions/delete-staged-dataset.ts +5 -0
  1191. package/src/provider-api/actions/github-repo-files.ts +266 -0
  1192. package/src/provider-api/actions/list-staged-datasets.ts +5 -0
  1193. package/src/provider-api/actions/provider-api-audit.ts +88 -0
  1194. package/src/provider-api/actions/provider-api.ts +460 -0
  1195. package/src/provider-api/actions/query-staged-dataset.ts +5 -0
  1196. package/src/provider-api/actions/staged-datasets.ts +359 -0
  1197. package/src/provider-api/corpus-jobs-store.ts +522 -0
  1198. package/src/provider-api/corpus-jobs.ts +1817 -0
  1199. package/src/provider-api/custom-registry.ts +456 -0
  1200. package/src/provider-api/github-repo.ts +675 -0
  1201. package/src/provider-api/gong.ts +108 -0
  1202. package/src/provider-api/index.ts +5444 -0
  1203. package/src/provider-api/quota-governor.ts +562 -0
  1204. package/src/provider-api/runtime.ts +1 -0
  1205. package/src/provider-api/staged-datasets-aggregate.ts +304 -0
  1206. package/src/provider-api/staged-datasets-store.ts +441 -0
  1207. package/src/provider-api/staging.ts +483 -0
  1208. package/src/resources/agents.ts +65 -0
  1209. package/src/resources/emitter.ts +54 -0
  1210. package/src/resources/handlers.ts +728 -0
  1211. package/src/resources/index.ts +4 -0
  1212. package/src/resources/metadata.ts +252 -0
  1213. package/src/resources/script-helpers.ts +160 -0
  1214. package/src/resources/store.ts +1618 -0
  1215. package/src/review/actions/consume-review-feedback.ts +48 -0
  1216. package/src/review/actions/create-review-comment.ts +108 -0
  1217. package/src/review/actions/delete-review-comment.ts +67 -0
  1218. package/src/review/actions/get-review-feedback.ts +49 -0
  1219. package/src/review/actions/list-review-comments.ts +87 -0
  1220. package/src/review/actions/reply-review-comment.ts +118 -0
  1221. package/src/review/actions/resolve-review-thread.ts +94 -0
  1222. package/src/review/actions/send-review-thread-to-agent.ts +62 -0
  1223. package/src/review/actions/set-review-status.ts +58 -0
  1224. package/src/review/identity.ts +101 -0
  1225. package/src/review/index.ts +45 -0
  1226. package/src/review/mentions.ts +44 -0
  1227. package/src/review/registry.ts +111 -0
  1228. package/src/review/store.ts +997 -0
  1229. package/src/review/types.ts +101 -0
  1230. package/src/router/index.ts +24 -0
  1231. package/src/scripts/agent-engines/list-agent-engines.ts +130 -0
  1232. package/src/scripts/agent-engines/manage-agent-engine.ts +197 -0
  1233. package/src/scripts/agent-engines/set-agent-engine.ts +84 -0
  1234. package/src/scripts/agent-engines/test-agent-engine.ts +174 -0
  1235. package/src/scripts/call-agent.ts +792 -0
  1236. package/src/scripts/chat/index.ts +8 -0
  1237. package/src/scripts/chat/open-chat.ts +56 -0
  1238. package/src/scripts/chat/search-chats.ts +121 -0
  1239. package/src/scripts/core-scripts.ts +22 -0
  1240. package/src/scripts/db/check-scoping.ts +212 -0
  1241. package/src/scripts/db/exec.ts +791 -0
  1242. package/src/scripts/db/index.ts +19 -0
  1243. package/src/scripts/db/migrate-encrypt-credentials.ts +223 -0
  1244. package/src/scripts/db/migrate-encrypt-oauth-tokens.ts +213 -0
  1245. package/src/scripts/db/migrate-user-api-keys.ts +257 -0
  1246. package/src/scripts/db/patch.ts +820 -0
  1247. package/src/scripts/db/query.ts +299 -0
  1248. package/src/scripts/db/reset-dev-owner.ts +285 -0
  1249. package/src/scripts/db/safety.ts +286 -0
  1250. package/src/scripts/db/schema.ts +364 -0
  1251. package/src/scripts/db/scoping.ts +341 -0
  1252. package/src/scripts/db/sqlite-client.ts +78 -0
  1253. package/src/scripts/db/tool-mode.ts +23 -0
  1254. package/src/scripts/db/tool-schemas.ts +31 -0
  1255. package/src/scripts/db/wipe-leaked-builder-keys.ts +201 -0
  1256. package/src/scripts/dev/index.ts +296 -0
  1257. package/src/scripts/dev/list-files.ts +119 -0
  1258. package/src/scripts/dev/read-file.ts +77 -0
  1259. package/src/scripts/dev/search-files.ts +151 -0
  1260. package/src/scripts/dev/shell.ts +111 -0
  1261. package/src/scripts/dev/write-file.ts +56 -0
  1262. package/src/scripts/dev-session.ts +96 -0
  1263. package/src/scripts/docs/index.ts +8 -0
  1264. package/src/scripts/docs/search.ts +274 -0
  1265. package/src/scripts/docs/source-search.ts +363 -0
  1266. package/src/scripts/index.ts +15 -0
  1267. package/src/scripts/manage-agent-loop-settings.ts +84 -0
  1268. package/src/scripts/parse-args.ts +46 -0
  1269. package/src/scripts/resources/delete-memory.ts +67 -0
  1270. package/src/scripts/resources/delete.ts +69 -0
  1271. package/src/scripts/resources/effective.ts +71 -0
  1272. package/src/scripts/resources/index.ts +18 -0
  1273. package/src/scripts/resources/list.ts +103 -0
  1274. package/src/scripts/resources/migrate-learnings.ts +40 -0
  1275. package/src/scripts/resources/read.ts +107 -0
  1276. package/src/scripts/resources/save-memory.ts +99 -0
  1277. package/src/scripts/resources/write.ts +158 -0
  1278. package/src/scripts/runner.ts +339 -0
  1279. package/src/scripts/utils.ts +130 -0
  1280. package/src/search/index.ts +413 -0
  1281. package/src/search-utils/index.ts +112 -0
  1282. package/src/secrets/crypto.ts +228 -0
  1283. package/src/secrets/index.ts +65 -0
  1284. package/src/secrets/onboarding.ts +101 -0
  1285. package/src/secrets/register-framework-secrets.ts +228 -0
  1286. package/src/secrets/register.ts +129 -0
  1287. package/src/secrets/routes.ts +697 -0
  1288. package/src/secrets/schema.ts +52 -0
  1289. package/src/secrets/storage.ts +561 -0
  1290. package/src/secrets/substitution.ts +305 -0
  1291. package/src/server/__snapshots__/agent-chat-plugin.surface.spec.ts.snap +150 -0
  1292. package/src/server/action-change.ts +66 -0
  1293. package/src/server/action-discovery.ts +774 -0
  1294. package/src/server/action-routes.ts +608 -0
  1295. package/src/server/agent-access.ts +72 -0
  1296. package/src/server/agent-chat/action-filters-a2a.ts +339 -0
  1297. package/src/server/agent-chat/browser-team-tools.ts +510 -0
  1298. package/src/server/agent-chat/context-tools.ts +599 -0
  1299. package/src/server/agent-chat/framework-prompts.ts +467 -0
  1300. package/src/server/agent-chat/lazy-fs.ts +11 -0
  1301. package/src/server/agent-chat/mcp-glue.ts +91 -0
  1302. package/src/server/agent-chat/plugin-options.ts +379 -0
  1303. package/src/server/agent-chat/process-run-failure.ts +62 -0
  1304. package/src/server/agent-chat/prompt-resources.ts +1004 -0
  1305. package/src/server/agent-chat/recurring-jobs-runtime.ts +80 -0
  1306. package/src/server/agent-chat/request-surface.ts +71 -0
  1307. package/src/server/agent-chat/run-code-tools.ts +67 -0
  1308. package/src/server/agent-chat/script-entries.ts +796 -0
  1309. package/src/server/agent-chat/shared-thread.ts +301 -0
  1310. package/src/server/agent-chat/skill-frontmatter.ts +41 -0
  1311. package/src/server/agent-chat-plugin.ts +5930 -0
  1312. package/src/server/agent-discovery.ts +706 -0
  1313. package/src/server/agent-engine-api-key-route.ts +236 -0
  1314. package/src/server/agent-run-context.ts +204 -0
  1315. package/src/server/agent-teams-run-queue.ts +344 -0
  1316. package/src/server/agent-teams.ts +2257 -0
  1317. package/src/server/agents-bundle.ts +464 -0
  1318. package/src/server/analytics.ts +105 -0
  1319. package/src/server/app-base-path.ts +79 -0
  1320. package/src/server/app-name.ts +53 -0
  1321. package/src/server/app-url.ts +184 -0
  1322. package/src/server/attachment-actions.ts +276 -0
  1323. package/src/server/attribution.ts +214 -0
  1324. package/src/server/auth-marketing.ts +260 -0
  1325. package/src/server/auth-plugin.ts +27 -0
  1326. package/src/server/auth.ts +3803 -0
  1327. package/src/server/better-auth-instance.ts +1197 -0
  1328. package/src/server/builder-browser.ts +1701 -0
  1329. package/src/server/builder-design-systems.ts +668 -0
  1330. package/src/server/builder-space.ts +176 -0
  1331. package/src/server/captcha.ts +63 -0
  1332. package/src/server/capture-error.ts +64 -0
  1333. package/src/server/cli-capture.ts +141 -0
  1334. package/src/server/collab-plugin.ts +391 -0
  1335. package/src/server/complete-text.ts +231 -0
  1336. package/src/server/cookie-namespace.ts +159 -0
  1337. package/src/server/core-routes-plugin.ts +4122 -0
  1338. package/src/server/cors-origins.ts +60 -0
  1339. package/src/server/create-server.ts +268 -0
  1340. package/src/server/credential-provider.ts +1202 -0
  1341. package/src/server/csrf.ts +229 -0
  1342. package/src/server/date-utils.ts +42 -0
  1343. package/src/server/deep-link.ts +119 -0
  1344. package/src/server/derived-secret.ts +32 -0
  1345. package/src/server/design-token-utils.ts +1032 -0
  1346. package/src/server/desktop-sso.ts +83 -0
  1347. package/src/server/edge.ts +69 -0
  1348. package/src/server/email-actions.ts +218 -0
  1349. package/src/server/email-template.ts +192 -0
  1350. package/src/server/email-templates.ts +148 -0
  1351. package/src/server/email.ts +219 -0
  1352. package/src/server/embed-route.ts +283 -0
  1353. package/src/server/embed-session.ts +805 -0
  1354. package/src/server/embedded.ts +252 -0
  1355. package/src/server/entry-server.tsx +154 -0
  1356. package/src/server/framework-request-handler.ts +848 -0
  1357. package/src/server/fusion-app.ts +447 -0
  1358. package/src/server/google-auth-mode.ts +34 -0
  1359. package/src/server/google-auth-plugin.ts +496 -0
  1360. package/src/server/google-oauth-credentials.ts +128 -0
  1361. package/src/server/google-oauth.ts +972 -0
  1362. package/src/server/google-realtime-session.ts +182 -0
  1363. package/src/server/h3-helpers.ts +174 -0
  1364. package/src/server/http-response-telemetry.ts +396 -0
  1365. package/src/server/identity-sso-store.ts +304 -0
  1366. package/src/server/identity-sso.ts +514 -0
  1367. package/src/server/index.ts +593 -0
  1368. package/src/server/missing-key.ts +36 -0
  1369. package/src/server/oauth-helpers.ts +44 -0
  1370. package/src/server/oauth-public-origin.ts +44 -0
  1371. package/src/server/oauth-return-url.ts +120 -0
  1372. package/src/server/og-fonts-data.ts +15 -0
  1373. package/src/server/og-fonts.ts +75 -0
  1374. package/src/server/onboarding-html.ts +4040 -0
  1375. package/src/server/open-route.ts +311 -0
  1376. package/src/server/org-admin.ts +28 -0
  1377. package/src/server/poll-events.ts +88 -0
  1378. package/src/server/poll.ts +1224 -0
  1379. package/src/server/prompts/framework-core-compact.ts +107 -0
  1380. package/src/server/prompts/framework-core.ts +143 -0
  1381. package/src/server/prompts/index.ts +16 -0
  1382. package/src/server/prompts/model-overlays.ts +54 -0
  1383. package/src/server/prompts/shared-rules.ts +104 -0
  1384. package/src/server/realtime-voice.ts +967 -0
  1385. package/src/server/recap-image-route.ts +242 -0
  1386. package/src/server/recap-image-store.ts +185 -0
  1387. package/src/server/request-context.ts +416 -0
  1388. package/src/server/request-origin.ts +67 -0
  1389. package/src/server/resources-plugin.ts +119 -0
  1390. package/src/server/schema-prompt.ts +429 -0
  1391. package/src/server/scoped-key-storage.ts +223 -0
  1392. package/src/server/security-headers.ts +170 -0
  1393. package/src/server/self-dispatch.ts +224 -0
  1394. package/src/server/sentry-config.ts +73 -0
  1395. package/src/server/sentry-plugin.ts +138 -0
  1396. package/src/server/sentry.ts +444 -0
  1397. package/src/server/short-lived-token.ts +170 -0
  1398. package/src/server/social-og-image.ts +454 -0
  1399. package/src/server/sse.ts +102 -0
  1400. package/src/server/ssr-handler.ts +466 -0
  1401. package/src/server/transcribe-voice.ts +1076 -0
  1402. package/src/server/voice-providers-status.ts +118 -0
  1403. package/src/server/workspace-oauth.ts +31 -0
  1404. package/src/server/workspace-provider-oauth.ts +970 -0
  1405. package/src/session-replay-iframe-protocol.ts +58 -0
  1406. package/src/settings/handlers.ts +44 -0
  1407. package/src/settings/index.ts +34 -0
  1408. package/src/settings/org-settings.ts +83 -0
  1409. package/src/settings/script-helpers.ts +24 -0
  1410. package/src/settings/store.ts +247 -0
  1411. package/src/settings/user-settings.ts +47 -0
  1412. package/src/setup-connections/index.ts +90 -0
  1413. package/src/setup-connections/onboarding.ts +47 -0
  1414. package/src/shared/agent-access.ts +112 -0
  1415. package/src/shared/agent-chat.ts +124 -0
  1416. package/src/shared/agent-env.ts +46 -0
  1417. package/src/shared/agent-readable-resource.ts +111 -0
  1418. package/src/shared/agent-sidebar-url.ts +39 -0
  1419. package/src/shared/cache-control.ts +25 -0
  1420. package/src/shared/cloudflare-globals.d.ts +34 -0
  1421. package/src/shared/context-xray.ts +172 -0
  1422. package/src/shared/embed-auth.ts +6 -0
  1423. package/src/shared/index.ts +83 -0
  1424. package/src/shared/llm-connection.ts +42 -0
  1425. package/src/shared/markdown-block-split.ts +129 -0
  1426. package/src/shared/mcp-connect-content.ts +130 -0
  1427. package/src/shared/mcp-embed-headers.ts +175 -0
  1428. package/src/shared/mcp-integration-config.ts +101 -0
  1429. package/src/shared/merge-by-id.ts +14 -0
  1430. package/src/shared/oauth-state.ts +39 -0
  1431. package/src/shared/reasoning-effort.ts +228 -0
  1432. package/src/shared/route-warmup-config.ts +128 -0
  1433. package/src/shared/runtime.ts +31 -0
  1434. package/src/shared/social-meta.ts +82 -0
  1435. package/src/shared/streaming-text-smoothing.ts +184 -0
  1436. package/src/shared/truncate.ts +13 -0
  1437. package/src/shared/workspace-app-audience.ts +177 -0
  1438. package/src/shared/workspace-app-id.ts +54 -0
  1439. package/src/sharing/access.ts +585 -0
  1440. package/src/sharing/actions/create-agent-resource-link.ts +91 -0
  1441. package/src/sharing/actions/extension-change.ts +22 -0
  1442. package/src/sharing/actions/list-resource-shares.ts +93 -0
  1443. package/src/sharing/actions/set-resource-visibility.ts +91 -0
  1444. package/src/sharing/actions/share-resource.ts +322 -0
  1445. package/src/sharing/actions/unshare-resource.ts +72 -0
  1446. package/src/sharing/index.ts +35 -0
  1447. package/src/sharing/registry.ts +201 -0
  1448. package/src/sharing/schema.ts +99 -0
  1449. package/src/styles/agent-conversation.css +766 -0
  1450. package/src/styles/agent-native.css +938 -0
  1451. package/src/styles/blocks.css +1717 -0
  1452. package/src/styles/chat-history-list.css +1 -0
  1453. package/src/styles/rich-markdown-editor.css +1 -0
  1454. package/src/tailwind.preset.ts +140 -0
  1455. package/src/templates/chat/.agents/skills/agent-native-docs/SKILL.md +15 -13
  1456. package/src/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  1457. package/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +9 -6
  1458. package/src/templates/chat/AGENTS.md +3 -2
  1459. package/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +15 -13
  1460. package/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  1461. package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +9 -6
  1462. package/src/templates/default/AGENTS.md +6 -5
  1463. package/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +15 -13
  1464. package/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  1465. package/src/templates/headless/AGENTS.md +5 -4
  1466. package/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +15 -13
  1467. package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +3 -2
  1468. package/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  1469. package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +9 -6
  1470. package/src/templates/workspace-core/AGENTS.md +4 -4
  1471. package/src/templates/workspace-root/AGENTS.md +4 -4
  1472. package/src/terminal/cli-registry.ts +57 -0
  1473. package/src/terminal/index.ts +22 -0
  1474. package/src/terminal/pty-server.ts +389 -0
  1475. package/src/terminal/terminal-plugin.ts +265 -0
  1476. package/src/testing.ts +23 -0
  1477. package/src/tracking/index.ts +10 -0
  1478. package/src/tracking/providers.ts +422 -0
  1479. package/src/tracking/registry.ts +102 -0
  1480. package/src/tracking/route.ts +108 -0
  1481. package/src/tracking/types.ts +16 -0
  1482. package/src/transcription/builder-transcription.ts +118 -0
  1483. package/src/triggers/actions/list-automations.ts +99 -0
  1484. package/src/triggers/actions/manage-automation.ts +78 -0
  1485. package/src/triggers/actions.ts +333 -0
  1486. package/src/triggers/condition-evaluator.ts +163 -0
  1487. package/src/triggers/dispatcher.ts +536 -0
  1488. package/src/triggers/index.ts +13 -0
  1489. package/src/triggers/routes.ts +322 -0
  1490. package/src/triggers/types.ts +42 -0
  1491. package/src/types/pglite.d.ts +26 -0
  1492. package/src/usage/store.ts +698 -0
  1493. package/src/vite/action-types-plugin.ts +481 -0
  1494. package/src/vite/agent-web-plugin.ts +78 -0
  1495. package/src/vite/agents-bundle-plugin.ts +185 -0
  1496. package/src/vite/client.ts +3039 -0
  1497. package/src/vite/index.ts +21 -0
  1498. package/src/voice/index.ts +18 -0
  1499. package/src/voice/voice-cleanup-prompt.ts +38 -0
  1500. package/src/voice/voice-context.ts +217 -0
  1501. package/src/voice/voice-replacements.ts +75 -0
  1502. package/src/workspace-connections/credentials.ts +603 -0
  1503. package/src/workspace-connections/index.ts +72 -0
  1504. package/src/workspace-connections/lifecycle.ts +43 -0
  1505. package/src/workspace-connections/store.ts +1943 -0
  1506. package/src/workspace-files/index.ts +18 -0
  1507. package/src/workspace-files/store.ts +339 -0
  1508. package/src/workspace-files/tool.ts +266 -0
@@ -0,0 +1,1202 @@
1
+ /**
2
+ * Credential provider abstraction.
3
+ *
4
+ * Every feature that needs an external credential (Anthropic API key,
5
+ * Google OAuth tokens, OpenAI key, Slack bot token, etc.) should go through
6
+ * one of the resolve*() helpers here instead of reading `process.env`
7
+ * directly. That way the same feature can work in three modes:
8
+ *
9
+ * 1. User set their own key in .env → use it directly
10
+ * 2. User connected Builder via `/cli-auth` → route through Builder proxy
11
+ * 3. Neither → throw FeatureNotConfigured
12
+ *
13
+ * Templates catch FeatureNotConfigured and show a "Connect Builder (1 click) /
14
+ * set up your own key (guide)" card.
15
+ *
16
+ * Today these helpers are used by the Builder-hosted LLM gateway, and the
17
+ * shape is meant to grow to cover future managed credential integrations
18
+ * (e.g. additional Builder-hosted services) without rewrites.
19
+ */
20
+
21
+ import { createHash } from "node:crypto";
22
+
23
+ import { isLocalDatabase } from "../db/client.js";
24
+ import { getRequestUserEmail, getRequestOrgId } from "./request-context.js";
25
+
26
+ /**
27
+ * Decide which `app_secrets` scope a Builder/credential write should use.
28
+ *
29
+ * Org scope ("everyone in this org sees these credentials") wins when the
30
+ * connecting user is an owner or admin of an active org — the write
31
+ * privileges shared infra. A plain member or a user without an active
32
+ * org falls through to per-user scope so a teammate can't silently
33
+ * overwrite the org-shared connection.
34
+ */
35
+ export function resolveCredentialWriteScope(
36
+ email: string,
37
+ orgId: string | null | undefined,
38
+ role: string | null | undefined,
39
+ ): { scope: "user" | "org"; scopeId: string } {
40
+ if (orgId && (role === "owner" || role === "admin")) {
41
+ return { scope: "org", scopeId: orgId };
42
+ }
43
+ return { scope: "user", scopeId: email };
44
+ }
45
+
46
+ export class FeatureNotConfiguredError extends Error {
47
+ readonly requiredCredential: string;
48
+ readonly builderConnectUrl?: string;
49
+ readonly byokDocsUrl?: string;
50
+
51
+ constructor(opts: {
52
+ requiredCredential: string;
53
+ message?: string;
54
+ builderConnectUrl?: string;
55
+ byokDocsUrl?: string;
56
+ }) {
57
+ super(
58
+ opts.message ??
59
+ `Feature requires credential "${opts.requiredCredential}". Connect Builder or set your own key.`,
60
+ );
61
+ this.name = "FeatureNotConfiguredError";
62
+ this.requiredCredential = opts.requiredCredential;
63
+ this.builderConnectUrl = opts.builderConnectUrl;
64
+ this.byokDocsUrl = opts.byokDocsUrl;
65
+ }
66
+ }
67
+
68
+ /**
69
+ * Deployment-level credential fallback for single-tenant/local operation.
70
+ * Multi-tenant call sites must gate this explicitly before calling.
71
+ */
72
+ export function readDeployCredentialEnv(key: string): string | undefined {
73
+ return process.env[key] || undefined;
74
+ }
75
+
76
+ const APP_PROVIDED_DEPLOY_CREDENTIAL_KEYS = new Set([
77
+ "ANTHROPIC_API_KEY",
78
+ "OPENAI_API_KEY",
79
+ "OPENAI_BASE_URL",
80
+ "OPENROUTER_API_KEY",
81
+ "GOOGLE_CLIENT_ID",
82
+ "GOOGLE_CLIENT_SECRET",
83
+ "GOOGLE_GENERATIVE_AI_API_KEY",
84
+ "GROQ_API_KEY",
85
+ "MISTRAL_API_KEY",
86
+ "COHERE_API_KEY",
87
+ ]);
88
+
89
+ function isAppProvidedDeployCredentialKey(key: string | undefined): boolean {
90
+ return !!key && APP_PROVIDED_DEPLOY_CREDENTIAL_KEYS.has(key);
91
+ }
92
+
93
+ /**
94
+ * Deployment-level credentials are safe as a runtime fallback only in local /
95
+ * single-tenant contexts. In hosted production with a shared database, every
96
+ * signed-in user needs their own user/org/workspace credential for
97
+ * identity-bearing provider keys so one deploy key does not silently
98
+ * impersonate another tenant. App-provided service credentials are different:
99
+ * they configure the deployed app itself rather than identifying a user. This
100
+ * includes LLM keys that let the app developer pay for model usage and OAuth
101
+ * client credentials whose per-user identity remains in scoped OAuth tokens.
102
+ * Key-aware callers may use those env vars.
103
+ *
104
+ * @deprecated Use `canUseDeployCredentialFallbackForRequest()` for generic
105
+ * provider secrets. This stricter helper remains for legacy call sites with
106
+ * identity-bearing deploy credentials.
107
+ */
108
+ export function isDeployCredentialFallbackAllowed(): boolean {
109
+ if (!isProductionLikeRuntime()) return true;
110
+ return isLocalDatabase();
111
+ }
112
+
113
+ export function canUseDeployCredentialFallbackForRequest(
114
+ key?: string,
115
+ ): boolean {
116
+ const email = getRequestUserEmail();
117
+ if (!email) return true;
118
+ if (isAppProvidedDeployCredentialKey(key)) return true;
119
+ if (isHostedWorkspaceRuntime()) return false;
120
+ if (!isProductionLikeRuntime()) return true;
121
+ return isLocalDatabase();
122
+ }
123
+
124
+ const BUILDER_CREDENTIAL_KEYS = [
125
+ "BUILDER_PRIVATE_KEY",
126
+ "BUILDER_PUBLIC_KEY",
127
+ "BUILDER_USER_ID",
128
+ "BUILDER_ORG_NAME",
129
+ "BUILDER_ORG_KIND",
130
+ "BUILDER_SUBSCRIPTION",
131
+ "BUILDER_SUBSCRIPTION_LEVEL",
132
+ "BUILDER_SUBSCRIPTION_NAME",
133
+ "BUILDER_IS_ENTERPRISE",
134
+ "BUILDER_IS_FREE_ACCOUNT",
135
+ ] as const;
136
+
137
+ function isBuilderCredentialKey(key: string): boolean {
138
+ return (BUILDER_CREDENTIAL_KEYS as readonly string[]).includes(key);
139
+ }
140
+
141
+ function isHostedWorkspaceRuntime(): boolean {
142
+ const hasFusionPreview = Boolean(
143
+ process.env.FUSION_ENVIRONMENT ||
144
+ process.env.FUSION_ENV_ORIGIN ||
145
+ process.env.VITE_FUSION_ENV_ORIGIN,
146
+ );
147
+ return (
148
+ /^(1|true)$/i.test(process.env.AGENT_NATIVE_WORKSPACE ?? "") ||
149
+ /^(1|true)$/i.test(process.env.VITE_AGENT_NATIVE_WORKSPACE ?? "") ||
150
+ hasFusionPreview
151
+ );
152
+ }
153
+
154
+ function isProductionLikeRuntime(): boolean {
155
+ return (
156
+ process.env.NODE_ENV === "production" ||
157
+ /^(1|true)$/i.test(process.env.NETLIFY ?? "") ||
158
+ /^(1|true)$/i.test(process.env.VERCEL ?? "") ||
159
+ /^(1|true)$/i.test(process.env.CF_PAGES ?? "") ||
160
+ Boolean(
161
+ process.env.AWS_LAMBDA_FUNCTION_NAME ||
162
+ process.env.AWS_EXECUTION_ENV ||
163
+ process.env.FUNCTIONS_WORKER_RUNTIME ||
164
+ process.env.K_SERVICE ||
165
+ process.env.RENDER,
166
+ )
167
+ );
168
+ }
169
+
170
+ /**
171
+ * Whether deployment-level Builder env keys may back the current request.
172
+ *
173
+ * This is intentionally self-contained rather than delegating to
174
+ * `canUseDeployCredentialFallbackForRequest`. That generic helper blocks the
175
+ * deploy fallback for any signed-in user in a hosted workspace runtime, so the
176
+ * Builder dogfooding escape hatch must apply its own hosted-workspace exception
177
+ * here instead of inheriting the generic helper's stricter (and hatch-unaware)
178
+ * decision. Reading the env once into locals keeps the rules legible.
179
+ *
180
+ * Rules (all evaluated against the live request/runtime, not a build-time value):
181
+ * - No signed-in user → safe to use the deploy env (nobody to mis-identify).
182
+ * - Hosted workspace + signed-in user → deploy-level Builder keys would
183
+ * impersonate that user, so block them — UNLESS a developer has explicitly
184
+ * opted into the local dogfooding escape hatch (non-prod only). Default OFF;
185
+ * hosted/shared production deployments are never affected.
186
+ * - Otherwise → allowed in non-prod, or on a local/single-tenant database.
187
+ */
188
+ function canUseBuilderDeployCredentialFallbackForRequest(): boolean {
189
+ const email = getRequestUserEmail();
190
+ if (!email) return true;
191
+
192
+ const isProductionRuntime = isProductionLikeRuntime();
193
+ // Local dogfooding escape hatch: lets the env / root-`.env` Builder key back
194
+ // a signed-in user so running the app locally doesn't require completing the
195
+ // Builder connect flow first. Non-prod only.
196
+ const localDevOptIn =
197
+ !isProductionRuntime &&
198
+ /^(1|true)$/i.test(process.env.AGENT_NATIVE_LOCAL_BUILDER_ENV ?? "");
199
+
200
+ if (isHostedWorkspaceRuntime() && !localDevOptIn) return false;
201
+
202
+ // Deploy fallback is safe in non-prod or on a local/single-tenant database.
203
+ return !isProductionRuntime || isLocalDatabase();
204
+ }
205
+
206
+ function shouldTraceCredentialResolve(): boolean {
207
+ return /^(1|true)$/i.test(
208
+ process.env.AGENT_NATIVE_DEBUG_CREDENTIAL_RESOLVE ??
209
+ process.env.DEBUG_CREDENTIAL_RESOLVE ??
210
+ "",
211
+ );
212
+ }
213
+
214
+ // ---------------------------------------------------------------------------
215
+ // Builder credential resolution:
216
+ //
217
+ // 1. **Request-scoped credentials.** A signed-in user can connect Builder
218
+ // through the CLI-auth flow. Owner/admin connections land at org scope;
219
+ // member/no-org connections land at user scope.
220
+ //
221
+ // 2. **Deployment fallback.** BUILDER_PRIVATE_KEY in env still makes local
222
+ // and single-tenant deploys work out of the box, but it no longer blocks
223
+ // per-user connect. Request-scoped credentials win whenever present.
224
+ //
225
+ // To run multi-tenant SaaS: prefer leaving BUILDER_PRIVATE_KEY unset unless a
226
+ // shared fallback identity is intentional.
227
+ // ---------------------------------------------------------------------------
228
+
229
+ type BuilderCredentialSource = "user" | "org" | "workspace" | "env";
230
+ interface BuilderResolvedCredentials {
231
+ privateKey: string | null;
232
+ publicKey: string | null;
233
+ userId: string | null;
234
+ orgName: string | null;
235
+ orgKind: string | null;
236
+ subscription: string | null;
237
+ subscriptionLevel: string | null;
238
+ subscriptionName: string | null;
239
+ isEnterprise: boolean | null;
240
+ isFreeAccount: boolean | null;
241
+ source: Exclude<BuilderCredentialSource, "env">;
242
+ }
243
+
244
+ function isCompleteBuilderConnection(creds: BuilderResolvedCredentials) {
245
+ return Boolean(creds.privateKey && creds.publicKey);
246
+ }
247
+
248
+ function readOptionalBuilderBoolean(
249
+ value: string | null | undefined,
250
+ ): boolean | null {
251
+ if (value == null || value === "") return null;
252
+ return /^(1|true)$/i.test(value);
253
+ }
254
+
255
+ export function isBuilderPrivateKey(value: string | null | undefined): boolean {
256
+ return typeof value === "string" && value.trim().startsWith("bpk-");
257
+ }
258
+
259
+ async function readBuilderCredentialScope(
260
+ readAppSecrets: typeof import("../secrets/storage.js").readAppSecrets,
261
+ scope: "user" | "org" | "workspace",
262
+ scopeId: string,
263
+ ): Promise<BuilderResolvedCredentials> {
264
+ const secrets = await readAppSecrets({
265
+ keys: BUILDER_CREDENTIAL_KEYS,
266
+ scope,
267
+ scopeId,
268
+ });
269
+ const value = (key: string): string | null => secrets.get(key)?.value ?? null;
270
+ return {
271
+ privateKey: value("BUILDER_PRIVATE_KEY"),
272
+ publicKey: value("BUILDER_PUBLIC_KEY"),
273
+ userId: value("BUILDER_USER_ID"),
274
+ orgName: value("BUILDER_ORG_NAME"),
275
+ orgKind: value("BUILDER_ORG_KIND"),
276
+ subscription: value("BUILDER_SUBSCRIPTION"),
277
+ subscriptionLevel: value("BUILDER_SUBSCRIPTION_LEVEL"),
278
+ subscriptionName: value("BUILDER_SUBSCRIPTION_NAME"),
279
+ isEnterprise: readOptionalBuilderBoolean(value("BUILDER_IS_ENTERPRISE")),
280
+ isFreeAccount: readOptionalBuilderBoolean(value("BUILDER_IS_FREE_ACCOUNT")),
281
+ source: scope === "workspace" ? "workspace" : scope,
282
+ };
283
+ }
284
+
285
+ async function resolveScopedBuilderCredential(
286
+ key: string,
287
+ ): Promise<{ value: string; source: "user" | "org" | "workspace" } | null> {
288
+ const email = getRequestUserEmail();
289
+ if (!email) return null;
290
+
291
+ // Trace only when explicitly requested. These diagnostics are useful for
292
+ // support, but they include account identifiers and run on hot paths.
293
+ const traceLookup = shouldTraceCredentialResolve();
294
+ let scopeAttempted = "user";
295
+ try {
296
+ const { readAppSecret } = await import("../secrets/storage.js");
297
+
298
+ // 1. Per-user override: a user can paste their own key in settings to
299
+ // overrule the org-shared one (handy for a personal sandbox).
300
+ const userSecret = await readAppSecret({
301
+ key,
302
+ scope: "user",
303
+ scopeId: email,
304
+ });
305
+ if (userSecret) {
306
+ if (traceLookup) {
307
+ console.log(
308
+ `[builder-credential] key=${key} email=${email} scope=user hit=true`,
309
+ );
310
+ }
311
+ return { value: userSecret.value, source: "user" };
312
+ }
313
+
314
+ // 2. Per-org shared credential: when one teammate connects Builder
315
+ // as an owner/admin we write the OAuth result at org scope so
316
+ // every member of that org gets the AI chat working without
317
+ // re-running the connect flow. Resolution falls back here
318
+ // silently — the caller never has to know which scope answered.
319
+ const orgId = getRequestOrgId();
320
+ if (orgId) {
321
+ scopeAttempted = "org";
322
+ const orgSecret = await readAppSecret({
323
+ key,
324
+ scope: "org",
325
+ scopeId: orgId,
326
+ });
327
+ if (orgSecret) {
328
+ if (traceLookup) {
329
+ console.log(
330
+ `[builder-credential] key=${key} email=${email} orgId=${orgId} scope=org hit=true`,
331
+ );
332
+ }
333
+ return { value: orgSecret.value, source: "org" };
334
+ }
335
+
336
+ // Older setup flows wrote shared credentials at workspace scope.
337
+ // Keep reading those rows so status UIs and runtime resolution agree
338
+ // for users who connected before org-scoped Builder credentials existed.
339
+ scopeAttempted = "workspace";
340
+ const workspaceSecret = await readAppSecret({
341
+ key,
342
+ scope: "workspace",
343
+ scopeId: orgId,
344
+ });
345
+ if (workspaceSecret) {
346
+ if (traceLookup) {
347
+ console.log(
348
+ `[builder-credential] key=${key} email=${email} orgId=${orgId} scope=workspace hit=true`,
349
+ );
350
+ }
351
+ return { value: workspaceSecret.value, source: "workspace" };
352
+ }
353
+ if (traceLookup) {
354
+ console.log(
355
+ `[builder-credential] key=${key} email=${email} orgId=${orgId} miss tried=user,org,workspace`,
356
+ );
357
+ }
358
+ } else {
359
+ scopeAttempted = "workspace-solo";
360
+ const soloWorkspaceSecret = await readAppSecret({
361
+ key,
362
+ scope: "workspace",
363
+ scopeId: `solo:${email}`,
364
+ });
365
+ if (soloWorkspaceSecret) {
366
+ if (traceLookup) {
367
+ console.log(
368
+ `[builder-credential] key=${key} email=${email} scope=workspace-solo hit=true`,
369
+ );
370
+ }
371
+ return { value: soloWorkspaceSecret.value, source: "workspace" };
372
+ }
373
+ if (traceLookup) {
374
+ console.log(
375
+ `[builder-credential] key=${key} email=${email} orgId=(none) miss tried=user,workspace-solo`,
376
+ );
377
+ }
378
+ }
379
+ } catch (err) {
380
+ if (traceLookup) {
381
+ console.log(
382
+ `[builder-credential] key=${key} email=${email} scope=${scopeAttempted} error=${(err as Error)?.message ?? err}`,
383
+ );
384
+ }
385
+ // Secrets table not ready — treat as missing.
386
+ }
387
+ return null;
388
+ }
389
+
390
+ async function resolveScopedBuilderCredentials(): Promise<BuilderResolvedCredentials | null> {
391
+ const email = getRequestUserEmail();
392
+ if (!email) return null;
393
+
394
+ const traceLookup = shouldTraceCredentialResolve();
395
+ let scopeAttempted = "user";
396
+ try {
397
+ const { readAppSecrets } = await import("../secrets/storage.js");
398
+ const traceScope = (creds: BuilderResolvedCredentials, scopeId: string) => {
399
+ if (!traceLookup) return;
400
+ console.log(
401
+ `[builder-credential] scope=${creds.source} scopeId=${scopeId} email=${email} complete=${isCompleteBuilderConnection(creds)} private=${Boolean(creds.privateKey)} public=${Boolean(creds.publicKey)}`,
402
+ );
403
+ };
404
+
405
+ const userCreds = await readBuilderCredentialScope(
406
+ readAppSecrets,
407
+ "user",
408
+ email,
409
+ );
410
+ traceScope(userCreds, email);
411
+ if (isCompleteBuilderConnection(userCreds)) return userCreds;
412
+
413
+ const orgId = getRequestOrgId();
414
+ if (orgId) {
415
+ scopeAttempted = "org";
416
+ const orgCreds = await readBuilderCredentialScope(
417
+ readAppSecrets,
418
+ "org",
419
+ orgId,
420
+ );
421
+ traceScope(orgCreds, orgId);
422
+ if (isCompleteBuilderConnection(orgCreds)) return orgCreds;
423
+
424
+ scopeAttempted = "workspace";
425
+ const workspaceCreds = await readBuilderCredentialScope(
426
+ readAppSecrets,
427
+ "workspace",
428
+ orgId,
429
+ );
430
+ traceScope(workspaceCreds, orgId);
431
+ if (isCompleteBuilderConnection(workspaceCreds)) return workspaceCreds;
432
+ } else {
433
+ scopeAttempted = "workspace-solo";
434
+ const scopeId = `solo:${email}`;
435
+ const workspaceCreds = await readBuilderCredentialScope(
436
+ readAppSecrets,
437
+ "workspace",
438
+ scopeId,
439
+ );
440
+ traceScope(workspaceCreds, scopeId);
441
+ if (isCompleteBuilderConnection(workspaceCreds)) return workspaceCreds;
442
+ }
443
+ } catch (err) {
444
+ if (traceLookup) {
445
+ console.log(
446
+ `[builder-credential] email=${email} scope=${scopeAttempted} credentials error=${(err as Error)?.message ?? err}`,
447
+ );
448
+ }
449
+ }
450
+ return null;
451
+ }
452
+
453
+ /**
454
+ * Resolve a Builder credential for the current request. User/org credentials
455
+ * win; deployment env is only a fallback. This lets local/root .env keys keep
456
+ * a template working while still allowing users to connect their own Builder
457
+ * account from Settings or onboarding.
458
+ */
459
+ export async function resolveBuilderCredential(
460
+ key: string,
461
+ ): Promise<string | null> {
462
+ const scoped = await resolveScopedBuilderCredential(key);
463
+ if (scoped) return scoped.value;
464
+ if (!canUseBuilderDeployCredentialFallbackForRequest()) return null;
465
+ return readDeployCredentialEnv(key) ?? null;
466
+ }
467
+
468
+ /**
469
+ * True when `BUILDER_PRIVATE_KEY` is set at the deployment level. This means
470
+ * a deploy-level fallback exists; it does not prevent per-user connect.
471
+ */
472
+ export function isBuilderEnvManaged(): boolean {
473
+ return !!process.env.BUILDER_PRIVATE_KEY;
474
+ }
475
+
476
+ /**
477
+ * Resolve the Builder private key for the current request. User/org OAuth
478
+ * credentials win; deploy-level `BUILDER_PRIVATE_KEY` is the fallback.
479
+ */
480
+ export async function resolveBuilderPrivateKey(): Promise<string | null> {
481
+ return resolveBuilderCredential("BUILDER_PRIVATE_KEY");
482
+ }
483
+
484
+ /**
485
+ * Resolve the current user's Builder auth header.
486
+ * Returns `"Bearer <key>"` or null.
487
+ */
488
+ export async function resolveBuilderAuthHeader(): Promise<string | null> {
489
+ const key = await resolveBuilderPrivateKey();
490
+ return key ? `Bearer ${key}` : null;
491
+ }
492
+
493
+ /**
494
+ * Check whether the current user has a Builder private key configured
495
+ * (per-user or deployment-level).
496
+ */
497
+ export async function resolveHasBuilderPrivateKey(): Promise<boolean> {
498
+ return !!(await resolveBuilderPrivateKey());
499
+ }
500
+
501
+ /**
502
+ * Check whether the current request has the complete Builder credential bundle
503
+ * needed for Builder-backed assistant/image-generation calls.
504
+ */
505
+ export async function resolveHasCompleteBuilderConnection(): Promise<boolean> {
506
+ const creds = await resolveBuilderCredentials();
507
+ return !!(creds.privateKey && creds.publicKey);
508
+ }
509
+
510
+ /**
511
+ * Resolve where the effective Builder assistant connection came from. This
512
+ * intentionally requires a complete private+public key pair from one scope so
513
+ * status UIs don't report a mixed user/org credential set as connected.
514
+ */
515
+ export async function resolveBuilderCredentialSource(): Promise<BuilderCredentialSource | null> {
516
+ const scoped = await resolveScopedBuilderCredentials();
517
+ if (scoped) return scoped.source;
518
+ return canUseBuilderDeployCredentialFallbackForRequest() &&
519
+ process.env.BUILDER_PRIVATE_KEY
520
+ ? "env"
521
+ : null;
522
+ }
523
+
524
+ /**
525
+ * Resolve the Builder assistant credential bundle from one complete scope.
526
+ * A partial user row is treated as a miss so the org-shared connection can
527
+ * still power the assistant for teammates.
528
+ */
529
+ export async function resolveBuilderCredentials(): Promise<{
530
+ privateKey: string | null;
531
+ publicKey: string | null;
532
+ userId: string | null;
533
+ orgName: string | null;
534
+ orgKind: string | null;
535
+ subscription: string | null;
536
+ subscriptionLevel: string | null;
537
+ subscriptionName: string | null;
538
+ isEnterprise: boolean | null;
539
+ isFreeAccount: boolean | null;
540
+ }> {
541
+ const scoped = await resolveScopedBuilderCredentials();
542
+ if (scoped) {
543
+ const {
544
+ privateKey,
545
+ publicKey,
546
+ userId,
547
+ orgName,
548
+ orgKind,
549
+ subscription,
550
+ subscriptionLevel,
551
+ subscriptionName,
552
+ isEnterprise,
553
+ isFreeAccount,
554
+ } = scoped;
555
+ return {
556
+ privateKey,
557
+ publicKey,
558
+ userId,
559
+ orgName,
560
+ orgKind,
561
+ subscription,
562
+ subscriptionLevel,
563
+ subscriptionName,
564
+ isEnterprise,
565
+ isFreeAccount,
566
+ };
567
+ }
568
+ const privateKey = canUseBuilderDeployCredentialFallbackForRequest()
569
+ ? (readDeployCredentialEnv("BUILDER_PRIVATE_KEY") ?? null)
570
+ : null;
571
+ const publicKey = canUseBuilderDeployCredentialFallbackForRequest()
572
+ ? (readDeployCredentialEnv("BUILDER_PUBLIC_KEY") ?? null)
573
+ : null;
574
+ const userId = canUseBuilderDeployCredentialFallbackForRequest()
575
+ ? (readDeployCredentialEnv("BUILDER_USER_ID") ?? null)
576
+ : null;
577
+ const orgName = canUseBuilderDeployCredentialFallbackForRequest()
578
+ ? (readDeployCredentialEnv("BUILDER_ORG_NAME") ?? null)
579
+ : null;
580
+ const orgKind = canUseBuilderDeployCredentialFallbackForRequest()
581
+ ? (readDeployCredentialEnv("BUILDER_ORG_KIND") ?? null)
582
+ : null;
583
+ const subscription = canUseBuilderDeployCredentialFallbackForRequest()
584
+ ? (readDeployCredentialEnv("BUILDER_SUBSCRIPTION") ?? null)
585
+ : null;
586
+ const subscriptionLevel = canUseBuilderDeployCredentialFallbackForRequest()
587
+ ? (readDeployCredentialEnv("BUILDER_SUBSCRIPTION_LEVEL") ?? null)
588
+ : null;
589
+ const subscriptionName = canUseBuilderDeployCredentialFallbackForRequest()
590
+ ? (readDeployCredentialEnv("BUILDER_SUBSCRIPTION_NAME") ?? null)
591
+ : null;
592
+ const isEnterprise = canUseBuilderDeployCredentialFallbackForRequest()
593
+ ? readOptionalBuilderBoolean(
594
+ readDeployCredentialEnv("BUILDER_IS_ENTERPRISE"),
595
+ )
596
+ : null;
597
+ const isFreeAccount = canUseBuilderDeployCredentialFallbackForRequest()
598
+ ? readOptionalBuilderBoolean(
599
+ readDeployCredentialEnv("BUILDER_IS_FREE_ACCOUNT"),
600
+ )
601
+ : null;
602
+ return {
603
+ privateKey,
604
+ publicKey,
605
+ userId,
606
+ orgName,
607
+ orgKind,
608
+ subscription,
609
+ subscriptionLevel,
610
+ subscriptionName,
611
+ isEnterprise,
612
+ isFreeAccount,
613
+ };
614
+ }
615
+
616
+ const BUILDER_AUTH_FAILURE_SETTING_PREFIX = "builder-auth-failure:";
617
+
618
+ export interface BuilderCredentialAuthFailure {
619
+ fingerprint: string;
620
+ message: string;
621
+ status?: number;
622
+ code?: string;
623
+ at: number;
624
+ ownerEmail?: string | null;
625
+ orgId?: string | null;
626
+ }
627
+
628
+ export function builderCredentialFingerprint(
629
+ privateKey?: string | null,
630
+ publicKey?: string | null,
631
+ ): string | null {
632
+ if (!privateKey || !publicKey) return null;
633
+ return createHash("sha256")
634
+ .update(privateKey)
635
+ .update("\0")
636
+ .update(publicKey)
637
+ .digest("hex")
638
+ .slice(0, 24);
639
+ }
640
+
641
+ function builderAuthFailureSettingKey(fingerprint: string): string {
642
+ return `${BUILDER_AUTH_FAILURE_SETTING_PREFIX}${fingerprint}`;
643
+ }
644
+
645
+ export async function getBuilderCredentialAuthFailure(
646
+ creds: {
647
+ privateKey?: string | null;
648
+ publicKey?: string | null;
649
+ } = {},
650
+ ): Promise<BuilderCredentialAuthFailure | null> {
651
+ const fingerprint = builderCredentialFingerprint(
652
+ creds.privateKey,
653
+ creds.publicKey,
654
+ );
655
+ if (!fingerprint) return null;
656
+ try {
657
+ const { getSetting } = await import("../settings/store.js");
658
+ const row = await getSetting(builderAuthFailureSettingKey(fingerprint));
659
+ if (!row) return null;
660
+ return {
661
+ fingerprint,
662
+ message:
663
+ typeof row.message === "string" && row.message
664
+ ? row.message
665
+ : "Builder rejected the connected credentials. Reconnect Builder.io.",
666
+ status: typeof row.status === "number" ? row.status : undefined,
667
+ code: typeof row.code === "string" ? row.code : undefined,
668
+ at: typeof row.at === "number" ? row.at : Date.now(),
669
+ ownerEmail:
670
+ typeof row.ownerEmail === "string" ? row.ownerEmail : undefined,
671
+ orgId: typeof row.orgId === "string" ? row.orgId : undefined,
672
+ };
673
+ } catch {
674
+ return null;
675
+ }
676
+ }
677
+
678
+ export async function recordBuilderCredentialAuthFailure(details?: {
679
+ status?: number;
680
+ code?: string;
681
+ message?: string;
682
+ }): Promise<void> {
683
+ try {
684
+ const creds = await resolveBuilderCredentials();
685
+ const fingerprint = builderCredentialFingerprint(
686
+ creds.privateKey,
687
+ creds.publicKey,
688
+ );
689
+ if (!fingerprint) return;
690
+ const { putSetting } = await import("../settings/store.js");
691
+ await putSetting(builderAuthFailureSettingKey(fingerprint), {
692
+ fingerprint,
693
+ message:
694
+ details?.message ||
695
+ "Builder rejected the connected credentials. Reconnect Builder.io.",
696
+ ...(typeof details?.status === "number" && { status: details.status }),
697
+ ...(details?.code && { code: details.code }),
698
+ at: Date.now(),
699
+ ownerEmail: getRequestUserEmail() ?? null,
700
+ orgId: getRequestOrgId() ?? null,
701
+ });
702
+ } catch {
703
+ // Best-effort marker only; the chat error is still returned to the user.
704
+ }
705
+ }
706
+
707
+ export async function clearBuilderCredentialAuthFailure(creds: {
708
+ privateKey?: string | null;
709
+ publicKey?: string | null;
710
+ }): Promise<void> {
711
+ const fingerprint = builderCredentialFingerprint(
712
+ creds.privateKey,
713
+ creds.publicKey,
714
+ );
715
+ if (!fingerprint) return;
716
+ try {
717
+ const { deleteSetting } = await import("../settings/store.js");
718
+ await deleteSetting(builderAuthFailureSettingKey(fingerprint));
719
+ } catch {
720
+ // A stale failure marker should not block writing fresh credentials.
721
+ }
722
+ }
723
+
724
+ const PROVIDER_AUTH_FAILURE_SETTING_PREFIX = "provider-auth-failure:";
725
+ /** Stale failure markers expire so a transient 401 cannot permanently block deploy keys. */
726
+ export const PROVIDER_AUTH_FAILURE_TTL_MS = 15 * 60 * 1000;
727
+
728
+ export interface ProviderCredentialAuthFailure {
729
+ fingerprint: string;
730
+ key: string;
731
+ message: string;
732
+ status?: number;
733
+ code?: string;
734
+ at: number;
735
+ ownerEmail?: string | null;
736
+ orgId?: string | null;
737
+ }
738
+
739
+ export function providerCredentialFingerprint(
740
+ key?: string | null,
741
+ value?: string | null,
742
+ ): string | null {
743
+ const normalizedKey = key?.trim().toUpperCase();
744
+ const normalizedValue = value?.trim();
745
+ if (!normalizedKey || !normalizedValue) return null;
746
+ return createHash("sha256")
747
+ .update(normalizedKey)
748
+ .update("\0")
749
+ .update(normalizedValue)
750
+ .digest("hex")
751
+ .slice(0, 24);
752
+ }
753
+
754
+ function providerAuthFailureSettingKey(fingerprint: string): string {
755
+ return `${PROVIDER_AUTH_FAILURE_SETTING_PREFIX}${fingerprint}`;
756
+ }
757
+
758
+ export async function getProviderCredentialAuthFailure(opts: {
759
+ key?: string | null;
760
+ value?: string | null;
761
+ }): Promise<ProviderCredentialAuthFailure | null> {
762
+ const key = opts.key?.trim().toUpperCase() ?? "";
763
+ const fingerprint = providerCredentialFingerprint(key, opts.value);
764
+ if (!fingerprint) return null;
765
+ try {
766
+ const settings = await import("../settings/store.js");
767
+ const settingKey = providerAuthFailureSettingKey(fingerprint);
768
+ const row = await settings.getSetting(settingKey);
769
+ if (!row) return null;
770
+ if (row.fingerprint !== fingerprint) return null;
771
+ const at = typeof row.at === "number" ? row.at : Date.now();
772
+ if (Date.now() - at > PROVIDER_AUTH_FAILURE_TTL_MS) {
773
+ if (typeof settings.deleteSetting === "function") {
774
+ await settings.deleteSetting(settingKey).catch(() => {});
775
+ }
776
+ return null;
777
+ }
778
+ return {
779
+ fingerprint,
780
+ key:
781
+ typeof row.key === "string" && row.key
782
+ ? row.key
783
+ : key || "UNKNOWN_PROVIDER_KEY",
784
+ message:
785
+ typeof row.message === "string" && row.message
786
+ ? row.message
787
+ : "The model provider rejected the saved API key.",
788
+ status: typeof row.status === "number" ? row.status : undefined,
789
+ code: typeof row.code === "string" ? row.code : undefined,
790
+ at,
791
+ ownerEmail:
792
+ typeof row.ownerEmail === "string" ? row.ownerEmail : undefined,
793
+ orgId: typeof row.orgId === "string" ? row.orgId : undefined,
794
+ };
795
+ } catch {
796
+ return null;
797
+ }
798
+ }
799
+
800
+ export async function recordProviderCredentialAuthFailure(opts: {
801
+ key?: string | null;
802
+ value?: string | null;
803
+ status?: number;
804
+ code?: string;
805
+ message?: string;
806
+ }): Promise<void> {
807
+ try {
808
+ const key = opts.key?.trim().toUpperCase() ?? "";
809
+ const value = opts.value?.trim();
810
+ const fingerprint = providerCredentialFingerprint(key, value);
811
+ if (!fingerprint) return;
812
+ const { putSetting } = await import("../settings/store.js");
813
+ await putSetting(providerAuthFailureSettingKey(fingerprint), {
814
+ fingerprint,
815
+ key,
816
+ message: opts.message || "The model provider rejected the saved API key.",
817
+ ...(typeof opts.status === "number" && { status: opts.status }),
818
+ ...(opts.code && { code: opts.code }),
819
+ at: Date.now(),
820
+ ownerEmail: getRequestUserEmail() ?? null,
821
+ orgId: getRequestOrgId() ?? null,
822
+ });
823
+ } catch {
824
+ // Best-effort marker only; the chat error is still returned to the user.
825
+ }
826
+ }
827
+
828
+ export async function clearProviderCredentialAuthFailure(opts: {
829
+ key?: string | null;
830
+ value?: string | null;
831
+ }): Promise<void> {
832
+ const fingerprint = providerCredentialFingerprint(opts.key, opts.value);
833
+ if (!fingerprint) return;
834
+ try {
835
+ const { deleteSetting } = await import("../settings/store.js");
836
+ await deleteSetting(providerAuthFailureSettingKey(fingerprint));
837
+ } catch {
838
+ // A stale failure marker should not block writing or using fresh keys.
839
+ }
840
+ }
841
+
842
+ /**
843
+ * Write Builder credentials to `app_secrets`.
844
+ *
845
+ * Scope decision (see `resolveCredentialWriteScope`): when the connecting
846
+ * user is owner/admin of an active org we write at `scope: "org"` so every
847
+ * member of that org auto-resolves the credentials via
848
+ * `resolveBuilderCredential`'s org fallback — no per-user re-connect
849
+ * needed. A plain member or a user with no active org writes at
850
+ * `scope: "user"` (the safe default that doesn't trample the org's shared
851
+ * connection).
852
+ *
853
+ * Stale-credential cleanup: before writing the new values we (1) clear ALL
854
+ * five BUILDER_* keys at the target scope, so optional fields the new
855
+ * connection doesn't carry (e.g. user picked a Builder space that returns
856
+ * no orgName) don't leave the previous connection's metadata behind, and
857
+ * (2) when writing at org scope, also clear the writer's own user-scope
858
+ * BUILDER_* rows so a stale personal override from an earlier connect
859
+ * doesn't shadow the new org write on resolution (user scope wins org
860
+ * scope by design — see `resolveScopedBuilderCredential`). The org-scope
861
+ * row is intentionally left alone when writing at user scope: that row is
862
+ * shared with the rest of the org and a single user's personal override
863
+ * shouldn't blow it away. (Victoria's "I signed in again with my Builder
864
+ * space and it still says no credits" report on 2026-05-11 was exactly
865
+ * this stale-shadow case.)
866
+ *
867
+ * Returns the actual scope/scopeId used so the caller can show "Connected
868
+ * for Builder.io" vs "Connected (personal)" in the UI.
869
+ */
870
+ export async function writeBuilderCredentials(
871
+ email: string,
872
+ creds: {
873
+ privateKey: string;
874
+ publicKey: string;
875
+ userId?: string | null;
876
+ orgName?: string | null;
877
+ orgKind?: string | null;
878
+ subscription?: string | null;
879
+ subscriptionLevel?: string | null;
880
+ subscriptionName?: string | null;
881
+ isEnterprise?: boolean | null;
882
+ isFreeAccount?: boolean | null;
883
+ },
884
+ options?: { orgId?: string | null; role?: string | null },
885
+ ): Promise<{ scope: "user" | "org"; scopeId: string }> {
886
+ const privateKey = creds.privateKey.trim();
887
+ const publicKey = creds.publicKey.trim();
888
+ if (!isBuilderPrivateKey(privateKey)) {
889
+ throw new Error(
890
+ "Builder returned a credential that is not a Builder private key (expected bpk-...). Restart the Builder connect flow and choose a space that can issue a private key.",
891
+ );
892
+ }
893
+ if (!publicKey) {
894
+ throw new Error(
895
+ "Builder did not return a public API key. Restart the Builder connect flow.",
896
+ );
897
+ }
898
+
899
+ const { writeAppSecret, deleteAppSecret } =
900
+ await import("../secrets/storage.js");
901
+ const target = resolveCredentialWriteScope(
902
+ email,
903
+ options?.orgId ?? null,
904
+ options?.role ?? null,
905
+ );
906
+
907
+ // Clear stale rows before writing the new connection. See the function's
908
+ // doc comment for the two cases this handles.
909
+ const cleanups: Array<Promise<unknown>> = BUILDER_CREDENTIAL_KEYS.map((key) =>
910
+ deleteAppSecret({
911
+ key,
912
+ scope: target.scope,
913
+ scopeId: target.scopeId,
914
+ }).catch(() => {}),
915
+ );
916
+ if (target.scope === "org") {
917
+ for (const key of BUILDER_CREDENTIAL_KEYS) {
918
+ cleanups.push(
919
+ deleteAppSecret({ key, scope: "user", scopeId: email }).catch(() => {}),
920
+ );
921
+ }
922
+ }
923
+ await Promise.all(cleanups);
924
+
925
+ const entries: Array<{ key: string; value: string }> = [
926
+ { key: "BUILDER_PRIVATE_KEY", value: privateKey },
927
+ { key: "BUILDER_PUBLIC_KEY", value: publicKey },
928
+ ];
929
+ if (creds.userId) {
930
+ entries.push({ key: "BUILDER_USER_ID", value: creds.userId });
931
+ }
932
+ if (creds.orgName) {
933
+ entries.push({ key: "BUILDER_ORG_NAME", value: creds.orgName });
934
+ }
935
+ if (creds.orgKind) {
936
+ entries.push({ key: "BUILDER_ORG_KIND", value: creds.orgKind });
937
+ }
938
+ if (creds.subscription) {
939
+ entries.push({ key: "BUILDER_SUBSCRIPTION", value: creds.subscription });
940
+ }
941
+ if (creds.subscriptionLevel) {
942
+ entries.push({
943
+ key: "BUILDER_SUBSCRIPTION_LEVEL",
944
+ value: creds.subscriptionLevel,
945
+ });
946
+ }
947
+ if (creds.subscriptionName) {
948
+ entries.push({
949
+ key: "BUILDER_SUBSCRIPTION_NAME",
950
+ value: creds.subscriptionName,
951
+ });
952
+ }
953
+ if (typeof creds.isEnterprise === "boolean") {
954
+ entries.push({
955
+ key: "BUILDER_IS_ENTERPRISE",
956
+ value: String(creds.isEnterprise),
957
+ });
958
+ }
959
+ if (typeof creds.isFreeAccount === "boolean") {
960
+ entries.push({
961
+ key: "BUILDER_IS_FREE_ACCOUNT",
962
+ value: String(creds.isFreeAccount),
963
+ });
964
+ }
965
+ await Promise.all(
966
+ entries.map(({ key, value }) =>
967
+ writeAppSecret({
968
+ key,
969
+ value,
970
+ scope: target.scope,
971
+ scopeId: target.scopeId,
972
+ }),
973
+ ),
974
+ );
975
+ await clearBuilderCredentialAuthFailure({
976
+ privateKey,
977
+ publicKey,
978
+ });
979
+ return target;
980
+ }
981
+
982
+ /**
983
+ * Delete Builder credentials.
984
+ *
985
+ * Default behaviour: clears only this user's per-user override (so a
986
+ * member can disconnect their personal Builder identity without
987
+ * collapsing the org-wide connection for every teammate). To revoke the
988
+ * org's shared connection, pass `{ orgId, role }` for an owner/admin —
989
+ * matching the same authority gate `writeBuilderCredentials` uses on
990
+ * write. Plain members can never reach the org-scoped row.
991
+ */
992
+ export async function deleteBuilderCredentials(
993
+ email: string,
994
+ options?: { orgId?: string | null; role?: string | null },
995
+ ): Promise<{ scope: "user" | "org"; scopeId: string }> {
996
+ const { deleteAppSecret } = await import("../secrets/storage.js");
997
+ const target = resolveCredentialWriteScope(
998
+ email,
999
+ options?.orgId ?? null,
1000
+ options?.role ?? null,
1001
+ );
1002
+ await Promise.all(
1003
+ BUILDER_CREDENTIAL_KEYS.map((key) =>
1004
+ deleteAppSecret({
1005
+ key,
1006
+ scope: target.scope,
1007
+ scopeId: target.scopeId,
1008
+ }).catch(() => {}),
1009
+ ),
1010
+ );
1011
+ return target;
1012
+ }
1013
+
1014
+ // ---------------------------------------------------------------------------
1015
+ // Generic request-scoped secret resolution
1016
+ //
1017
+ // New consumers should prefer this over reading `process.env.X` directly.
1018
+ // User-pasted and shared secrets live in `app_secrets` (encrypted). The
1019
+ // settings UI / onboarding panels can write user, org, or workspace rows.
1020
+ // Deploy-level env vars are the fallback for unauthenticated/CLI/background
1021
+ // contexts where there's no user to scope by. Authenticated requests may also
1022
+ // use app-provided LLM provider keys such as OPENAI_API_KEY or
1023
+ // ANTHROPIC_API_KEY, but Builder identity keys keep the stricter scoped policy.
1024
+ // ---------------------------------------------------------------------------
1025
+
1026
+ /**
1027
+ * Resolve a request-scoped secret. Reads from `app_secrets` first (current
1028
+ * user override, active org, then workspace row); falls back to `process.env`
1029
+ * only when the deploy fallback policy allows it.
1030
+ */
1031
+ export async function resolveSecret(key: string): Promise<string | null> {
1032
+ const traceLookup = shouldTraceCredentialResolve();
1033
+ const email = getRequestUserEmail();
1034
+ if (email) {
1035
+ try {
1036
+ const { readAppSecret } = await import("../secrets/storage.js");
1037
+ // Per-user override first.
1038
+ const userSecret = await readAppSecret({
1039
+ key,
1040
+ scope: "user",
1041
+ scopeId: email,
1042
+ });
1043
+ if (userSecret?.value) {
1044
+ if (traceLookup) {
1045
+ console.log(
1046
+ `[resolve-secret] key=${key} email=${email} scope=user hit=true`,
1047
+ );
1048
+ }
1049
+ return userSecret.value;
1050
+ }
1051
+
1052
+ const orgId = getRequestOrgId();
1053
+ if (orgId) {
1054
+ // Fall back to the active org's shared row, when present. Builder
1055
+ // Connect uses this first-class org scope.
1056
+ const orgSecret = await readAppSecret({
1057
+ key,
1058
+ scope: "org",
1059
+ scopeId: orgId,
1060
+ });
1061
+ if (orgSecret?.value) {
1062
+ if (traceLookup) {
1063
+ console.log(
1064
+ `[resolve-secret] key=${key} email=${email} orgId=${orgId} scope=org hit=true`,
1065
+ );
1066
+ }
1067
+ return orgSecret.value;
1068
+ }
1069
+
1070
+ // Registered secrets historically used "workspace" scope for
1071
+ // org-shared configuration. Keep reading it so Settings status and
1072
+ // runtime resolution agree.
1073
+ const workspaceSecret = await readAppSecret({
1074
+ key,
1075
+ scope: "workspace",
1076
+ scopeId: orgId,
1077
+ });
1078
+ if (workspaceSecret?.value) {
1079
+ if (traceLookup) {
1080
+ console.log(
1081
+ `[resolve-secret] key=${key} email=${email} orgId=${orgId} scope=workspace hit=true`,
1082
+ );
1083
+ }
1084
+ return workspaceSecret.value;
1085
+ }
1086
+ } else {
1087
+ const soloWorkspaceSecret = await readAppSecret({
1088
+ key,
1089
+ scope: "workspace",
1090
+ scopeId: `solo:${email}`,
1091
+ });
1092
+ if (soloWorkspaceSecret?.value) {
1093
+ if (traceLookup) {
1094
+ console.log(
1095
+ `[resolve-secret] key=${key} email=${email} scope=workspace-solo hit=true`,
1096
+ );
1097
+ }
1098
+ return soloWorkspaceSecret.value;
1099
+ }
1100
+ }
1101
+ } catch (err) {
1102
+ if (traceLookup) {
1103
+ console.log(
1104
+ `[resolve-secret] key=${key} email=${email} scope=error err=${(err as Error)?.message ?? err}`,
1105
+ );
1106
+ }
1107
+ // Secrets table not ready — treat as missing.
1108
+ }
1109
+ // Read deployment-provided env values as fallbacks; framework code must not
1110
+ // write to `process.env`, but keys supplied by the host remain valid config.
1111
+ // Builder credentials keep a narrower path below because those keys carry a
1112
+ // Builder identity rather than just enabling a provider call.
1113
+ const envFallback = (
1114
+ isBuilderCredentialKey(key)
1115
+ ? canUseBuilderDeployCredentialFallbackForRequest()
1116
+ : canUseDeployCredentialFallbackForRequest(key)
1117
+ )
1118
+ ? process.env[key] || null
1119
+ : null;
1120
+ if (traceLookup) {
1121
+ console.log(
1122
+ `[resolve-secret] key=${key} email=${email} orgId=${getRequestOrgId() ?? "(none)"} scope=${envFallback ? "env-fallback" : "none"} hit=${!!envFallback}`,
1123
+ );
1124
+ }
1125
+ return envFallback;
1126
+ }
1127
+ // Unauthenticated / local-dev / CLI / background context: env fallback
1128
+ // is safe because there's no user to mis-identify.
1129
+ const value = process.env[key] || null;
1130
+ if (traceLookup) {
1131
+ console.log(
1132
+ `[resolve-secret] key=${key} email=(none) scope=env-anonymous hit=${!!value}`,
1133
+ );
1134
+ }
1135
+ return value;
1136
+ }
1137
+
1138
+ // ---------------------------------------------------------------------------
1139
+ // Synchronous helpers — env-only fallbacks for contexts where per-user
1140
+ // lookup isn't possible (sync isConfigured checks, CLI scripts).
1141
+ // ---------------------------------------------------------------------------
1142
+
1143
+ /**
1144
+ * True when a Builder private key is configured at the deployment level.
1145
+ *
1146
+ * This is the same env-only check as `isBuilderEnvManaged()`. For "does this
1147
+ * request have access to Builder via user/org/env credentials?" use the async
1148
+ * `resolveHasBuilderPrivateKey()`.
1149
+ */
1150
+ export function hasBuilderPrivateKey(): boolean {
1151
+ return !!process.env.BUILDER_PRIVATE_KEY;
1152
+ }
1153
+
1154
+ /** The origin for Builder-proxied API calls. Overridable for testing. */
1155
+ export function getBuilderProxyOrigin(): string {
1156
+ return (
1157
+ process.env.BUILDER_PROXY_ORIGIN ||
1158
+ process.env.AIR_HOST ||
1159
+ process.env.BUILDER_API_HOST ||
1160
+ "https://api.builder.io"
1161
+ );
1162
+ }
1163
+
1164
+ /**
1165
+ * Base URL for the public Builder LLM gateway, which lives at
1166
+ * api.builder.io/agent-native/gateway.
1167
+ * Override via BUILDER_GATEWAY_BASE_URL for staging / testing.
1168
+ */
1169
+ export function getBuilderGatewayBaseUrl(): string {
1170
+ return (
1171
+ process.env.BUILDER_GATEWAY_BASE_URL ||
1172
+ "https://api.builder.io/agent-native/gateway/v1"
1173
+ );
1174
+ }
1175
+
1176
+ /**
1177
+ * Base URL for Builder-managed image generation.
1178
+ * Override via BUILDER_IMAGE_GENERATION_BASE_URL for staging / testing.
1179
+ */
1180
+ export function getBuilderImageGenerationBaseUrl(): string {
1181
+ return (
1182
+ process.env.BUILDER_IMAGE_GENERATION_BASE_URL ||
1183
+ "https://api.builder.io/agent-native/images/v1"
1184
+ );
1185
+ }
1186
+
1187
+ /**
1188
+ * Base URL for Builder-managed web search.
1189
+ * Override via BUILDER_WEB_SEARCH_BASE_URL for staging / testing.
1190
+ */
1191
+ export function getBuilderWebSearchBaseUrl(): string {
1192
+ return (
1193
+ process.env.BUILDER_WEB_SEARCH_BASE_URL ||
1194
+ "https://api.builder.io/agent-native/web-search/v1"
1195
+ );
1196
+ }
1197
+
1198
+ /** Authorization header value for Builder-proxied calls (env-only). */
1199
+ export function getBuilderAuthHeader(): string | null {
1200
+ const key = process.env.BUILDER_PRIVATE_KEY;
1201
+ return key ? `Bearer ${key}` : null;
1202
+ }