@agent-native/core 0.122.4 → 0.123.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1595) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +554 -0
  3. package/corpus/core/docs/content/actions.mdx +33 -20
  4. package/corpus/core/docs/content/agent-mentions.mdx +30 -19
  5. package/corpus/core/docs/content/agent-native-toolkit.mdx +8 -6
  6. package/corpus/core/docs/content/agent-resources.mdx +11 -0
  7. package/corpus/core/docs/content/agent-surfaces.mdx +41 -30
  8. package/corpus/core/docs/content/audit-log.mdx +78 -0
  9. package/corpus/core/docs/content/authentication.mdx +7 -5
  10. package/corpus/core/docs/content/automations.mdx +15 -9
  11. package/corpus/core/docs/content/client.mdx +11 -11
  12. package/corpus/core/docs/content/cloneable-saas.mdx +7 -1
  13. package/corpus/core/docs/content/code-agents-ui.mdx +9 -1
  14. package/corpus/core/docs/content/components.mdx +7 -0
  15. package/corpus/core/docs/content/context-awareness.mdx +1 -0
  16. package/corpus/core/docs/content/creating-templates.mdx +9 -1
  17. package/corpus/core/docs/content/custom-design-system.mdx +8 -0
  18. package/corpus/core/docs/content/data-programs.mdx +6 -0
  19. package/corpus/core/docs/content/deployment.mdx +2 -0
  20. package/corpus/core/docs/content/doctor.mdx +5 -3
  21. package/corpus/core/docs/content/extensions.mdx +26 -0
  22. package/corpus/core/docs/content/external-agents-catalog.mdx +533 -0
  23. package/corpus/core/docs/content/external-agents.mdx +20 -514
  24. package/corpus/core/docs/content/faq.mdx +2 -2
  25. package/corpus/core/docs/content/file-uploads.mdx +44 -0
  26. package/corpus/core/docs/content/frames.mdx +2 -2
  27. package/corpus/core/docs/content/generative-ui.mdx +8 -0
  28. package/corpus/core/docs/content/getting-started.mdx +45 -17
  29. package/corpus/core/docs/content/human-approval.mdx +9 -0
  30. package/corpus/core/docs/content/integrations.mdx +4 -3
  31. package/corpus/core/docs/content/internationalization.mdx +4 -11
  32. package/corpus/core/docs/content/key-concepts.mdx +1 -1
  33. package/corpus/core/docs/content/local-file-mode.mdx +5 -0
  34. package/corpus/core/docs/content/mcp-apps.mdx +2 -1
  35. package/corpus/core/docs/content/mcp-clients.mdx +32 -1
  36. package/corpus/core/docs/content/mcp-protocol.mdx +4 -3
  37. package/corpus/core/docs/content/messaging-internals.mdx +328 -0
  38. package/corpus/core/docs/content/messaging-recipes.mdx +194 -0
  39. package/corpus/core/docs/content/messaging.mdx +9 -307
  40. package/corpus/core/docs/content/multi-app-workspace.mdx +1 -1
  41. package/corpus/core/docs/content/multi-tenancy.mdx +1 -0
  42. package/corpus/core/docs/content/native-chat-ui.mdx +8 -0
  43. package/corpus/core/docs/content/notifications.mdx +18 -20
  44. package/corpus/core/docs/content/observability.mdx +1 -0
  45. package/corpus/core/docs/content/onboarding.mdx +20 -6
  46. package/corpus/core/docs/content/organizations-teams-permissions.mdx +99 -124
  47. package/corpus/core/docs/content/package-lifecycle.mdx +19 -7
  48. package/corpus/core/docs/content/progress.mdx +11 -0
  49. package/corpus/core/docs/content/real-time-collaboration.mdx +44 -3
  50. package/corpus/core/docs/content/recurring-jobs.mdx +14 -1
  51. package/corpus/core/docs/content/security.mdx +5 -2
  52. package/corpus/core/docs/content/server.mdx +2 -1
  53. package/corpus/core/docs/content/sharing.mdx +22 -3
  54. package/corpus/core/docs/content/skills-guide.mdx +62 -19
  55. package/corpus/core/docs/content/syncing-template-changes.mdx +9 -0
  56. package/corpus/core/docs/content/template-analytics-connectors.mdx +75 -0
  57. package/corpus/core/docs/content/template-analytics-dashboards.mdx +106 -0
  58. package/corpus/core/docs/content/template-analytics-developers.mdx +287 -0
  59. package/corpus/core/docs/content/template-analytics-monitoring-and-sessions.mdx +109 -0
  60. package/corpus/core/docs/content/template-analytics.mdx +21 -263
  61. package/corpus/core/docs/content/template-assets-developers.mdx +456 -0
  62. package/corpus/core/docs/content/template-assets-generation.mdx +147 -0
  63. package/corpus/core/docs/content/template-assets-integrations.mdx +319 -0
  64. package/corpus/core/docs/content/template-assets-presets.mdx +185 -0
  65. package/corpus/core/docs/content/template-assets.mdx +12 -562
  66. package/corpus/core/docs/content/template-brain-agent.mdx +103 -0
  67. package/corpus/core/docs/content/template-brain-developers.mdx +379 -0
  68. package/corpus/core/docs/content/template-brain-knowledge.mdx +50 -0
  69. package/corpus/core/docs/content/template-brain-sources.mdx +163 -0
  70. package/corpus/core/docs/content/template-brain.mdx +30 -390
  71. package/corpus/core/docs/content/template-calendar-agent.mdx +133 -0
  72. package/corpus/core/docs/content/template-calendar-booking-links.mdx +73 -0
  73. package/corpus/core/docs/content/template-calendar-developers.mdx +366 -0
  74. package/corpus/core/docs/content/template-calendar-scheduling.mdx +128 -0
  75. package/corpus/core/docs/content/template-calendar.mdx +13 -260
  76. package/corpus/core/docs/content/template-chat-developers.mdx +88 -0
  77. package/corpus/core/docs/content/template-chat-first-edits.mdx +145 -0
  78. package/corpus/core/docs/content/template-chat.mdx +12 -77
  79. package/corpus/core/docs/content/template-clips-ai-and-editing.mdx +114 -0
  80. package/corpus/core/docs/content/template-clips-capture-everywhere.mdx +120 -0
  81. package/corpus/core/docs/content/template-clips-developers.mdx +373 -0
  82. package/corpus/core/docs/content/template-clips-sharing-and-teams.mdx +182 -0
  83. package/corpus/core/docs/content/template-clips.mdx +19 -508
  84. package/corpus/core/docs/content/template-content-databases.mdx +406 -0
  85. package/corpus/core/docs/content/template-content-developers.mdx +364 -0
  86. package/corpus/core/docs/content/template-content-editing.mdx +60 -0
  87. package/corpus/core/docs/content/template-content-sync.mdx +149 -0
  88. package/corpus/core/docs/content/template-content.mdx +21 -561
  89. package/corpus/core/docs/content/template-design-brand-and-figma.mdx +150 -0
  90. package/corpus/core/docs/content/template-design-collaboration-and-full-apps.mdx +125 -0
  91. package/corpus/core/docs/content/template-design-developers.mdx +358 -0
  92. package/corpus/core/docs/content/template-design-quality-and-components.mdx +95 -0
  93. package/corpus/core/docs/content/template-design.mdx +20 -344
  94. package/corpus/core/docs/content/template-dispatch-developers.mdx +121 -0
  95. package/corpus/core/docs/content/template-dispatch-messaging-routing.mdx +114 -0
  96. package/corpus/core/docs/content/template-dispatch-operations.mdx +160 -0
  97. package/corpus/core/docs/content/template-dispatch-vault-integrations.mdx +316 -0
  98. package/corpus/core/docs/content/template-dispatch.mdx +24 -283
  99. package/corpus/core/docs/content/template-forms-building-publishing.mdx +135 -0
  100. package/corpus/core/docs/content/template-forms-developers.mdx +195 -0
  101. package/corpus/core/docs/content/template-forms-responses.mdx +120 -0
  102. package/corpus/core/docs/content/template-forms.mdx +21 -230
  103. package/corpus/core/docs/content/template-mail-agent.mdx +114 -0
  104. package/corpus/core/docs/content/template-mail-developers.mdx +356 -0
  105. package/corpus/core/docs/content/template-mail-drafts-and-queue.mdx +103 -0
  106. package/corpus/core/docs/content/template-mail-inbox.mdx +118 -0
  107. package/corpus/core/docs/content/template-mail.mdx +23 -274
  108. package/corpus/core/docs/content/template-plan-automations.mdx +213 -0
  109. package/corpus/core/docs/content/template-plan-developers.mdx +703 -0
  110. package/corpus/core/docs/content/template-plan-local-and-desktop.mdx +236 -0
  111. package/corpus/core/docs/content/template-plan-review-workflow.mdx +180 -0
  112. package/corpus/core/docs/content/template-plan.mdx +60 -910
  113. package/corpus/core/docs/content/template-slides-agent.mdx +102 -0
  114. package/corpus/core/docs/content/template-slides-design-and-media.mdx +94 -0
  115. package/corpus/core/docs/content/template-slides-developers.mdx +488 -0
  116. package/corpus/core/docs/content/template-slides-editing.mdx +56 -0
  117. package/corpus/core/docs/content/template-slides.mdx +20 -362
  118. package/corpus/core/docs/content/toolkit-capability-packages.mdx +38 -13
  119. package/corpus/core/docs/content/toolkit-context-knowledge.mdx +49 -9
  120. package/corpus/core/docs/content/toolkit-editors-canvases.mdx +72 -10
  121. package/corpus/core/docs/content/toolkit-resources.mdx +16 -0
  122. package/corpus/core/docs/content/toolkit-settings.mdx +3 -3
  123. package/corpus/core/docs/content/toolkit-sharing.mdx +5 -7
  124. package/corpus/core/docs/content/using-your-agent.mdx +25 -2
  125. package/corpus/core/docs/content/voice-input.mdx +11 -7
  126. package/corpus/core/docs/content/what-is-agent-native.mdx +1 -0
  127. package/corpus/core/docs/content/workspace-connections.mdx +21 -11
  128. package/corpus/core/docs/content/workspace-management.mdx +1 -1
  129. package/corpus/core/package.json +1 -3
  130. package/corpus/core/src/a2a/client.ts +4 -2
  131. package/corpus/core/src/agent/action-warnings.ts +103 -0
  132. package/corpus/core/src/agent/durable-background.ts +42 -5
  133. package/corpus/core/src/agent/engine/ai-sdk-engine.ts +58 -6
  134. package/corpus/core/src/agent/engine/anthropic-engine.ts +51 -8
  135. package/corpus/core/src/agent/engine/builder-engine.ts +56 -18
  136. package/corpus/core/src/agent/engine/continuation-dispatch-retry.ts +10 -9
  137. package/corpus/core/src/agent/engine/credential-errors.ts +11 -0
  138. package/corpus/core/src/agent/engine/error-detail.ts +39 -0
  139. package/corpus/core/src/agent/engine/prompt-cache.ts +44 -0
  140. package/corpus/core/src/agent/engine/registry.ts +22 -30
  141. package/corpus/core/src/agent/engine/tool-call-journal-seed.ts +2 -1
  142. package/corpus/core/src/agent/engine/translate-anthropic.ts +99 -0
  143. package/corpus/core/src/agent/loop-settings.ts +94 -7
  144. package/corpus/core/src/agent/production-agent.ts +667 -157
  145. package/corpus/core/src/agent/run-loop-with-resume.ts +27 -1
  146. package/corpus/core/src/agent/run-manager.ts +229 -39
  147. package/corpus/core/src/agent/run-store.ts +397 -64
  148. package/corpus/core/src/agent/thread-data-builder.ts +5 -1
  149. package/corpus/core/src/agent/types.ts +23 -6
  150. package/corpus/core/src/application-state/script-helpers.ts +5 -2
  151. package/corpus/core/src/cli/agents.ts +69 -1
  152. package/corpus/core/src/cli/app-skill.ts +1 -1
  153. package/corpus/core/src/cli/code-agent-executor.ts +7 -3
  154. package/corpus/core/src/cli/design-connect.ts +82 -8
  155. package/corpus/core/src/cli/skills-content/design-visual-edit-skill.ts +169 -24
  156. package/corpus/core/src/cli/templates-meta.ts +12 -0
  157. package/corpus/core/src/client/AssistantChat.tsx +623 -607
  158. package/corpus/core/src/client/agent-chat-adapter.ts +176 -29
  159. package/corpus/core/src/client/chat/message-components.tsx +13 -0
  160. package/corpus/core/src/client/embed-auth.ts +3 -1
  161. package/corpus/core/src/client/integrations/IntegrationCard.tsx +41 -24
  162. package/corpus/core/src/client/integrations/IntegrationsPanel.tsx +37 -21
  163. package/corpus/core/src/client/integrations/webhook-url.ts +29 -0
  164. package/corpus/core/src/client/org/OrgSwitcher.tsx +41 -27
  165. package/corpus/core/src/client/org/RequireActiveOrg.tsx +7 -0
  166. package/corpus/core/src/client/org/TeamPage.tsx +144 -14
  167. package/corpus/core/src/client/org/hooks.ts +27 -0
  168. package/corpus/core/src/client/org/index.ts +2 -0
  169. package/corpus/core/src/client/require-session.tsx +40 -29
  170. package/corpus/core/src/client/session-replay.ts +1 -1
  171. package/corpus/core/src/client/settings/DemoModeSection.tsx +0 -5
  172. package/corpus/core/src/client/settings/SecretsSection.tsx +47 -42
  173. package/corpus/core/src/client/settings/VoiceTranscriptionSection.tsx +0 -5
  174. package/corpus/core/src/client/sse-event-processor.ts +83 -8
  175. package/corpus/core/src/client/use-action.ts +22 -13
  176. package/corpus/core/src/client/use-agent-engine-configured.ts +36 -4
  177. package/corpus/core/src/client/use-db-sync.ts +21 -1
  178. package/corpus/core/src/credentials/index.ts +124 -2
  179. package/corpus/core/src/deploy/build.ts +93 -30
  180. package/corpus/core/src/deploy/workspace-deploy.ts +21 -16
  181. package/corpus/core/src/guards/no-localhost-fallback.ts +76 -14
  182. package/corpus/core/src/integrations/google-docs-poller.ts +19 -12
  183. package/corpus/core/src/integrations/webhook-handler.ts +56 -33
  184. package/corpus/core/src/jobs/scheduler.ts +57 -23
  185. package/corpus/core/src/localization/default-messages.ts +23 -1
  186. package/corpus/core/src/observability/evals.ts +7 -8
  187. package/corpus/core/src/observability/traces.ts +2 -0
  188. package/corpus/core/src/org/accept-pending.ts +2 -2
  189. package/corpus/core/src/org/active-org.ts +73 -0
  190. package/corpus/core/src/org/auto-join-domain.ts +7 -2
  191. package/corpus/core/src/org/context.ts +169 -66
  192. package/corpus/core/src/org/handlers.ts +148 -10
  193. package/corpus/core/src/org/plugin.ts +8 -1
  194. package/corpus/core/src/org/types.ts +6 -1
  195. package/corpus/core/src/provider-api/index.ts +6 -1
  196. package/corpus/core/src/resources/handlers.ts +2 -6
  197. package/corpus/core/src/resources/script-helpers.ts +2 -1
  198. package/corpus/core/src/scripts/chat/search-chats.ts +5 -2
  199. package/corpus/core/src/scripts/describe-workspace-apps.ts +59 -0
  200. package/corpus/core/src/scripts/resources/delete-memory.ts +5 -2
  201. package/corpus/core/src/scripts/resources/delete.ts +5 -2
  202. package/corpus/core/src/scripts/resources/effective.ts +5 -2
  203. package/corpus/core/src/scripts/resources/list.ts +5 -2
  204. package/corpus/core/src/scripts/resources/read.ts +5 -2
  205. package/corpus/core/src/scripts/resources/save-memory.ts +5 -2
  206. package/corpus/core/src/scripts/resources/write.ts +5 -2
  207. package/corpus/core/src/server/agent-capabilities.ts +147 -0
  208. package/corpus/core/src/server/agent-chat/framework-prompts.ts +11 -13
  209. package/corpus/core/src/server/agent-chat/prompt-resources.ts +183 -57
  210. package/corpus/core/src/server/agent-chat/script-entries.ts +20 -7
  211. package/corpus/core/src/server/agent-chat-plugin.ts +27 -0
  212. package/corpus/core/src/server/auth.ts +38 -32
  213. package/corpus/core/src/server/core-routes-plugin.ts +229 -179
  214. package/corpus/core/src/server/credential-provider.ts +196 -44
  215. package/corpus/core/src/server/embed-session.ts +10 -0
  216. package/corpus/core/src/server/framework-request-handler.ts +43 -0
  217. package/corpus/core/src/server/google-auth-plugin.ts +13 -450
  218. package/corpus/core/src/server/index.ts +4 -1
  219. package/corpus/core/src/server/onboarding-html.ts +20 -56
  220. package/corpus/core/src/server/open-route.ts +6 -1
  221. package/corpus/core/src/server/poll.ts +1 -1
  222. package/corpus/core/src/server/prompts/framework-core-compact.ts +5 -5
  223. package/corpus/core/src/server/prompts/framework-core.ts +7 -9
  224. package/corpus/core/src/server/prompts/shared-rules.ts +20 -9
  225. package/corpus/core/src/server/request-context.ts +58 -2
  226. package/corpus/core/src/server/scoped-key-storage.ts +1 -1
  227. package/corpus/core/src/settings/org-settings.ts +9 -0
  228. package/corpus/core/src/settings/store.ts +29 -0
  229. package/corpus/core/src/shared/index.ts +13 -0
  230. package/corpus/core/src/shared/sign-in-journey.ts +331 -0
  231. package/corpus/core/src/styles/agent-native.css +8 -0
  232. package/corpus/core/src/templates/chat/.agents/skills/actions/SKILL.md +19 -1
  233. package/corpus/core/src/templates/chat/.agents/skills/adding-a-feature/SKILL.md +2 -0
  234. package/corpus/core/src/templates/chat/.agents/skills/frontend-design/SKILL.md +20 -6
  235. package/corpus/core/src/templates/chat/.agents/skills/security/SKILL.md +2 -0
  236. package/corpus/core/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +4 -3
  237. package/corpus/core/src/templates/chat/.agents/skills/shadcn-ui/SKILL.md +7 -3
  238. package/corpus/core/src/templates/chat/AGENTS.md +8 -0
  239. package/corpus/core/src/templates/chat/app/entry.client.tsx +3 -0
  240. package/corpus/core/src/templates/chat/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  241. package/corpus/core/src/templates/chat/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  242. package/corpus/core/src/templates/chat/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  243. package/corpus/core/src/templates/default/.agents/skills/actions/SKILL.md +19 -1
  244. package/corpus/core/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +2 -0
  245. package/corpus/core/src/templates/default/.agents/skills/frontend-design/SKILL.md +20 -6
  246. package/corpus/core/src/templates/default/.agents/skills/security/SKILL.md +2 -0
  247. package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +4 -3
  248. package/corpus/core/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +7 -3
  249. package/corpus/core/src/templates/default/AGENTS.md +68 -195
  250. package/corpus/core/src/templates/default/app/entry.client.tsx +3 -0
  251. package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +8 -0
  252. package/corpus/core/src/templates/default/app/i18n/de-DE.ts +8 -0
  253. package/corpus/core/src/templates/default/app/i18n/en-US.ts +8 -0
  254. package/corpus/core/src/templates/default/app/i18n/es-ES.ts +8 -0
  255. package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +8 -0
  256. package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +8 -0
  257. package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +8 -0
  258. package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +8 -0
  259. package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +8 -0
  260. package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +8 -0
  261. package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +8 -0
  262. package/corpus/core/src/templates/headless/.agents/skills/actions/SKILL.md +19 -1
  263. package/corpus/core/src/templates/workspace-core/.agents/skills/actions/SKILL.md +19 -1
  264. package/corpus/core/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +2 -0
  265. package/corpus/core/src/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +100 -0
  266. package/corpus/core/src/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +2 -1
  267. package/corpus/core/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +28 -0
  268. package/corpus/core/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +14 -1
  269. package/corpus/core/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +20 -6
  270. package/corpus/core/src/templates/workspace-core/.agents/skills/qa/SKILL.md +6 -3
  271. package/corpus/core/src/templates/workspace-core/.agents/skills/security/SKILL.md +2 -0
  272. package/corpus/core/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +4 -3
  273. package/corpus/core/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +7 -3
  274. package/corpus/core/src/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +91 -0
  275. package/corpus/core/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +60 -0
  276. package/corpus/core/src/templates/workspace-core/AGENTS.md +62 -124
  277. package/corpus/core/src/templates/workspace-root/AGENTS.md +6 -1
  278. package/corpus/core/src/triggers/dispatcher.ts +28 -17
  279. package/corpus/core/src/vite/client.ts +20 -8
  280. package/corpus/templates/analytics/.agents/skills/actions/SKILL.md +19 -1
  281. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +41 -1
  282. package/corpus/templates/analytics/.agents/skills/dashboard-ops/SKILL.md +50 -22
  283. package/corpus/templates/analytics/.agents/skills/data-querying/SKILL.md +1 -1
  284. package/corpus/templates/analytics/.agents/skills/data-querying/references/inline-chart-embeds.md +8 -0
  285. package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +20 -6
  286. package/corpus/templates/analytics/.agents/skills/security/SKILL.md +2 -0
  287. package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +4 -3
  288. package/corpus/templates/analytics/.agents/skills/shadcn-ui/SKILL.md +7 -3
  289. package/corpus/templates/analytics/.agents/skills/sharing/SKILL.md +228 -0
  290. package/corpus/templates/analytics/.builder/skills/charts/SKILL.md +2 -2
  291. package/corpus/templates/analytics/actions/delete-dashboard-view.ts +24 -0
  292. package/corpus/templates/analytics/actions/delete-user-pref.ts +22 -0
  293. package/corpus/templates/analytics/actions/generate-chart.ts +8 -245
  294. package/corpus/templates/analytics/actions/get-theme.ts +27 -0
  295. package/corpus/templates/analytics/actions/get-user-pref.ts +22 -0
  296. package/corpus/templates/analytics/actions/list-dashboard-views.ts +25 -0
  297. package/corpus/templates/analytics/actions/save-dashboard-view.ts +33 -0
  298. package/corpus/templates/analytics/actions/set-theme.ts +22 -0
  299. package/corpus/templates/analytics/actions/set-user-pref.ts +24 -0
  300. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +134 -27
  301. package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +2 -9
  302. package/corpus/templates/analytics/app/components/layout/Layout.tsx +0 -17
  303. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +10 -5
  304. package/corpus/templates/analytics/app/hooks/use-dashboard-views.ts +22 -52
  305. package/corpus/templates/analytics/app/hooks/use-user-pref.ts +21 -31
  306. package/corpus/templates/analytics/app/i18n-data.ts +10 -0
  307. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +2 -1
  308. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/dual-axis.ts +73 -0
  309. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +8 -27
  310. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/report-panel-window.ts +0 -57
  311. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +8 -0
  312. package/corpus/templates/analytics/app/root.tsx +0 -28
  313. package/corpus/templates/analytics/changelog/2026-07-26-error-issues-now-group-by-message-as-well-as-stack-frame-and.md +6 -0
  314. package/corpus/templates/analytics/changelog/2026-07-26-line-area-and-bar-dashboard-panels-can-plot-series-on-a-seco.md +6 -0
  315. package/corpus/templates/analytics/changelog/2026-07-26-scheduled-dashboard-email-reports-now-arrive-complete-and-re.md +6 -0
  316. package/corpus/templates/analytics/changelog/2026-07-26-session-replays-now-detect-rage-clicks-so-the-rage-click-fil.md +6 -0
  317. package/corpus/templates/analytics/docs/error-capture.md +8 -4
  318. package/corpus/templates/analytics/package.json +1 -2
  319. package/corpus/templates/analytics/scripts/preview-dashboard-report.ts +221 -0
  320. package/corpus/templates/analytics/server/jobs/dashboard-report.ts +39 -32
  321. package/corpus/templates/analytics/server/lib/dashboard-report-render.ts +1168 -0
  322. package/corpus/templates/analytics/server/lib/dashboard-report.ts +111 -1358
  323. package/corpus/templates/analytics/server/lib/error-capture.ts +32 -15
  324. package/corpus/templates/analytics/server/lib/report-chart-svg.ts +901 -0
  325. package/corpus/templates/analytics/server/lib/session-replay.ts +77 -1
  326. package/corpus/templates/analytics/shared/dashboard-report-timeouts.ts +3 -4
  327. package/corpus/templates/assets/.agents/skills/a2a-assets/SKILL.md +28 -0
  328. package/corpus/templates/assets/.agents/skills/actions/SKILL.md +19 -1
  329. package/corpus/templates/assets/.agents/skills/assets-navigation/SKILL.md +46 -0
  330. package/corpus/templates/assets/.agents/skills/creative-context/SKILL.md +12 -0
  331. package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +20 -6
  332. package/corpus/templates/assets/.agents/skills/image-generation/SKILL.md +28 -0
  333. package/corpus/templates/assets/.agents/skills/library-management/SKILL.md +9 -0
  334. package/corpus/templates/assets/.agents/skills/logo-composite/SKILL.md +11 -0
  335. package/corpus/templates/assets/.agents/skills/security/SKILL.md +2 -0
  336. package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +4 -3
  337. package/corpus/templates/assets/.agents/skills/shadcn-ui/SKILL.md +7 -3
  338. package/corpus/templates/assets/.agents/skills/sharing/SKILL.md +228 -0
  339. package/corpus/templates/assets/AGENTS.md +58 -125
  340. package/corpus/templates/assets/actions/variant-slots.ts +8 -4
  341. package/corpus/templates/assets/app/entry.client.tsx +3 -0
  342. package/corpus/templates/assets/package.json +0 -2
  343. package/corpus/templates/brain/.agents/skills/actions/SKILL.md +19 -1
  344. package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +2 -0
  345. package/corpus/templates/brain/.agents/skills/brain/SKILL.md +78 -4
  346. package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +20 -6
  347. package/corpus/templates/brain/.agents/skills/ingestion-and-connectors/SKILL.md +15 -3
  348. package/corpus/templates/brain/.agents/skills/security/SKILL.md +2 -0
  349. package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +4 -3
  350. package/corpus/templates/brain/.agents/skills/shadcn-ui/SKILL.md +7 -3
  351. package/corpus/templates/brain/.agents/skills/sharing/SKILL.md +228 -0
  352. package/corpus/templates/brain/.agents/skills/storing-data/SKILL.md +178 -0
  353. package/corpus/templates/brain/AGENTS.md +73 -119
  354. package/corpus/templates/brain/app/entry.client.tsx +3 -0
  355. package/corpus/templates/calendar/.agents/skills/actions/SKILL.md +19 -1
  356. package/corpus/templates/calendar/.agents/skills/event-management/SKILL.md +56 -3
  357. package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +20 -6
  358. package/corpus/templates/calendar/.agents/skills/security/SKILL.md +2 -0
  359. package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +4 -3
  360. package/corpus/templates/calendar/.agents/skills/shadcn-ui/SKILL.md +7 -3
  361. package/corpus/templates/calendar/.agents/skills/sharing/SKILL.md +228 -0
  362. package/corpus/templates/calendar/AGENTS.md +22 -45
  363. package/corpus/templates/calendar/app/entry.client.tsx +3 -0
  364. package/corpus/templates/calendar/server/handlers/events.ts +0 -364
  365. package/corpus/templates/chat/.agents/skills/actions/SKILL.md +19 -1
  366. package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +2 -0
  367. package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +20 -6
  368. package/corpus/templates/chat/.agents/skills/security/SKILL.md +2 -0
  369. package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +4 -3
  370. package/corpus/templates/chat/.agents/skills/shadcn-ui/SKILL.md +7 -3
  371. package/corpus/templates/chat/.agents/skills/sharing/SKILL.md +228 -0
  372. package/corpus/templates/chat/.agents/skills/storing-data/SKILL.md +178 -0
  373. package/corpus/templates/chat/AGENTS.md +8 -0
  374. package/corpus/templates/chat/app/entry.client.tsx +3 -0
  375. package/corpus/templates/clips/.agents/skills/actions/SKILL.md +19 -1
  376. package/corpus/templates/clips/.agents/skills/ai-video-tools/SKILL.md +42 -0
  377. package/corpus/templates/clips/.agents/skills/brain-export/SKILL.md +59 -0
  378. package/corpus/templates/clips/.agents/skills/bug-reports/SKILL.md +37 -0
  379. package/corpus/templates/clips/.agents/skills/crm-call-evidence/SKILL.md +41 -0
  380. package/corpus/templates/clips/.agents/skills/dictate/SKILL.md +4 -0
  381. package/corpus/templates/clips/.agents/skills/external-integrations/SKILL.md +45 -0
  382. package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +20 -6
  383. package/corpus/templates/clips/.agents/skills/meetings/SKILL.md +9 -0
  384. package/corpus/templates/clips/.agents/skills/recording/SKILL.md +45 -0
  385. package/corpus/templates/clips/.agents/skills/screen-memory/SKILL.md +43 -0
  386. package/corpus/templates/clips/.agents/skills/security/SKILL.md +2 -0
  387. package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +4 -3
  388. package/corpus/templates/clips/.agents/skills/shadcn-ui/SKILL.md +7 -3
  389. package/corpus/templates/clips/.agents/skills/video-sharing/SKILL.md +38 -1
  390. package/corpus/templates/clips/AGENTS.md +82 -224
  391. package/corpus/templates/clips/actions/create-recording.ts +4 -0
  392. package/corpus/templates/clips/app/components/player/sign-in-prompt-dialog.tsx +6 -10
  393. package/corpus/templates/clips/app/routes/invite.$token.tsx +6 -5
  394. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +4 -5
  395. package/corpus/templates/clips/app/routes/share.$shareId.tsx +8 -8
  396. package/corpus/templates/clips/changelog/2026-07-26-long-agent-chat-turns-now-finish-instead-of-stopping-partway.md +6 -0
  397. package/corpus/templates/clips/changelog/2026-07-26-recordings-no-longer-get-stuck-on-uploading-uploads-now-hold.md +6 -0
  398. package/corpus/templates/clips/server/db/schema.ts +3 -0
  399. package/corpus/templates/clips/server/jobs/brain-export.ts +4 -0
  400. package/corpus/templates/clips/server/lib/recording-upload-state.ts +0 -52
  401. package/corpus/templates/clips/server/lib/upload-lease.ts +241 -0
  402. package/corpus/templates/clips/server/plugins/agent-chat.ts +4 -0
  403. package/corpus/templates/clips/server/plugins/db.ts +18 -347
  404. package/corpus/templates/clips/server/routes/api/clips/brain-export/run.post.ts +7 -1
  405. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +123 -126
  406. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/reset-chunks.post.ts +4 -0
  407. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/resume.get.ts +118 -0
  408. package/corpus/templates/clips/server/routes/api/uploads/reap.post.ts +69 -0
  409. package/corpus/templates/content/.agents/skills/actions/SKILL.md +19 -1
  410. package/corpus/templates/content/.agents/skills/content/SKILL.md +4 -0
  411. package/corpus/templates/content/.agents/skills/creative-context/SKILL.md +8 -0
  412. package/corpus/templates/content/.agents/skills/document-editing/SKILL.md +55 -0
  413. package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +20 -6
  414. package/corpus/templates/content/.agents/skills/notion-integration/SKILL.md +12 -1
  415. package/corpus/templates/content/.agents/skills/security/SKILL.md +2 -0
  416. package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +4 -3
  417. package/corpus/templates/content/.agents/skills/shadcn-ui/SKILL.md +7 -3
  418. package/corpus/templates/content/.agents/skills/sharing/SKILL.md +228 -0
  419. package/corpus/templates/content/AGENTS.md +63 -131
  420. package/corpus/templates/content/app/routes/_app.tsx +4 -4
  421. package/corpus/templates/content/server/routes/api/notion/callback.get.ts +6 -24
  422. package/corpus/templates/crm/.agents/skills/agent-native-docs/SKILL.md +115 -0
  423. package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +177 -0
  424. package/corpus/templates/crm/.agents/skills/crm/SKILL.md +205 -0
  425. package/corpus/templates/crm/.agents/skills/customizing-agent-native/SKILL.md +220 -0
  426. package/corpus/templates/crm/.agents/skills/feature-flags/SKILL.md +169 -0
  427. package/corpus/templates/crm/.agents/skills/sharing/SKILL.md +228 -0
  428. package/corpus/templates/crm/.agents/skills/storing-data/SKILL.md +178 -0
  429. package/corpus/templates/crm/.agents/skills/upgrade-agent-native/SKILL.md +122 -0
  430. package/corpus/templates/crm/.env.example +5 -0
  431. package/corpus/templates/crm/AGENTS.md +82 -0
  432. package/corpus/templates/crm/CHANGELOG.md +25 -0
  433. package/corpus/templates/crm/DEVELOPING.md +66 -0
  434. package/corpus/templates/crm/README.md +122 -0
  435. package/corpus/templates/crm/_gitignore +12 -0
  436. package/corpus/templates/crm/actions/_crm-action-utils.ts +98 -0
  437. package/corpus/templates/crm/actions/_crm-attribute-utils.ts +219 -0
  438. package/corpus/templates/crm/actions/_crm-dashboard.ts +69 -0
  439. package/corpus/templates/crm/actions/_crm-data-program-actions.ts +15 -0
  440. package/corpus/templates/crm/actions/_crm-list-utils.ts +775 -0
  441. package/corpus/templates/crm/actions/_crm-signal-utils.ts +79 -0
  442. package/corpus/templates/crm/actions/add-crm-record-to-list.ts +164 -0
  443. package/corpus/templates/crm/actions/apply-crm-proposals.ts +291 -0
  444. package/corpus/templates/crm/actions/archive-crm-attribute.ts +69 -0
  445. package/corpus/templates/crm/actions/attach-call-evidence.ts +170 -0
  446. package/corpus/templates/crm/actions/configure-crm-connection.ts +126 -0
  447. package/corpus/templates/crm/actions/configure-native-crm.ts +44 -0
  448. package/corpus/templates/crm/actions/create-crm-attribute.ts +350 -0
  449. package/corpus/templates/crm/actions/create-crm-list.ts +194 -0
  450. package/corpus/templates/crm/actions/create-crm-record.ts +148 -0
  451. package/corpus/templates/crm/actions/create-crm-signal-tracker.ts +58 -0
  452. package/corpus/templates/crm/actions/delete-crm-saved-view.ts +68 -0
  453. package/corpus/templates/crm/actions/delete-staged-dataset.ts +14 -0
  454. package/corpus/templates/crm/actions/estimate-crm-enrichment.ts +229 -0
  455. package/corpus/templates/crm/actions/find-crm-duplicates.ts +87 -0
  456. package/corpus/templates/crm/actions/get-crm-automation-recipe.ts +36 -0
  457. package/corpus/templates/crm/actions/get-crm-dashboard-panel.ts +35 -0
  458. package/corpus/templates/crm/actions/get-crm-dashboard.ts +14 -0
  459. package/corpus/templates/crm/actions/get-crm-overview.ts +13 -0
  460. package/corpus/templates/crm/actions/get-crm-pipeline-data.ts +61 -0
  461. package/corpus/templates/crm/actions/get-crm-record-page.ts +287 -0
  462. package/corpus/templates/crm/actions/get-crm-record.ts +75 -0
  463. package/corpus/templates/crm/actions/get-crm-workspace.ts +364 -0
  464. package/corpus/templates/crm/actions/install-crm-pipeline-dashboard.ts +81 -0
  465. package/corpus/templates/crm/actions/list-crm-attributes.ts +71 -0
  466. package/corpus/templates/crm/actions/list-crm-connections.ts +68 -0
  467. package/corpus/templates/crm/actions/list-crm-dashboard-revisions.ts +15 -0
  468. package/corpus/templates/crm/actions/list-crm-dashboards.ts +15 -0
  469. package/corpus/templates/crm/actions/list-crm-enrichment-slots.ts +28 -0
  470. package/corpus/templates/crm/actions/list-crm-list-entries.ts +192 -0
  471. package/corpus/templates/crm/actions/list-crm-lists.ts +80 -0
  472. package/corpus/templates/crm/actions/list-crm-proposals.ts +55 -0
  473. package/corpus/templates/crm/actions/list-crm-record-field-history.ts +201 -0
  474. package/corpus/templates/crm/actions/list-crm-record-values.ts +200 -0
  475. package/corpus/templates/crm/actions/list-crm-records.ts +103 -0
  476. package/corpus/templates/crm/actions/list-crm-saved-views.ts +66 -0
  477. package/corpus/templates/crm/actions/list-crm-signal-hits.ts +43 -0
  478. package/corpus/templates/crm/actions/list-crm-signal-trackers.ts +32 -0
  479. package/corpus/templates/crm/actions/list-crm-tasks.ts +22 -0
  480. package/corpus/templates/crm/actions/list-staged-datasets.ts +14 -0
  481. package/corpus/templates/crm/actions/list-workspace-connections.ts +47 -0
  482. package/corpus/templates/crm/actions/manage-crm-attribute-option.ts +272 -0
  483. package/corpus/templates/crm/actions/manage-crm-signal-tracker.ts +87 -0
  484. package/corpus/templates/crm/actions/manage-crm-task.ts +132 -0
  485. package/corpus/templates/crm/actions/merge-crm-records.ts +691 -0
  486. package/corpus/templates/crm/actions/navigate.ts +54 -0
  487. package/corpus/templates/crm/actions/provider-api-catalog.ts +22 -0
  488. package/corpus/templates/crm/actions/provider-api-docs.ts +54 -0
  489. package/corpus/templates/crm/actions/provider-api-request.ts +92 -0
  490. package/corpus/templates/crm/actions/query-staged-dataset.ts +44 -0
  491. package/corpus/templates/crm/actions/record-crm-call-insight.ts +160 -0
  492. package/corpus/templates/crm/actions/record-crm-smart-signal.ts +150 -0
  493. package/corpus/templates/crm/actions/remove-crm-list-entry.ts +79 -0
  494. package/corpus/templates/crm/actions/restore-crm-dashboard-revision.ts +23 -0
  495. package/corpus/templates/crm/actions/review-crm-signal.ts +31 -0
  496. package/corpus/templates/crm/actions/run-crm-attribute-fill.ts +443 -0
  497. package/corpus/templates/crm/actions/run-crm-enrichment.ts +647 -0
  498. package/corpus/templates/crm/actions/run-crm-saved-view-program.ts +103 -0
  499. package/corpus/templates/crm/actions/run-crm-signal-trackers.ts +265 -0
  500. package/corpus/templates/crm/actions/run.ts +7 -0
  501. package/corpus/templates/crm/actions/save-crm-dashboard.ts +51 -0
  502. package/corpus/templates/crm/actions/save-crm-saved-view.ts +296 -0
  503. package/corpus/templates/crm/actions/sync-crm.ts +146 -0
  504. package/corpus/templates/crm/actions/update-crm-attribute.ts +111 -0
  505. package/corpus/templates/crm/actions/update-crm-list-entry.ts +102 -0
  506. package/corpus/templates/crm/actions/update-crm-list.ts +97 -0
  507. package/corpus/templates/crm/actions/update-crm-record.ts +543 -0
  508. package/corpus/templates/crm/actions/view-screen.ts +324 -0
  509. package/corpus/templates/crm/agent-native.app-skill.json +69 -0
  510. package/corpus/templates/crm/app/components/crm/CreateCrmRecordDialog.tsx +158 -0
  511. package/corpus/templates/crm/app/components/crm/CrmDashboardPanel.tsx +78 -0
  512. package/corpus/templates/crm/app/components/crm/CrmSignalsPanel.tsx +220 -0
  513. package/corpus/templates/crm/app/components/crm/IntelligenceSettings.tsx +414 -0
  514. package/corpus/templates/crm/app/components/crm/RecordActions.tsx +648 -0
  515. package/corpus/templates/crm/app/components/crm/RecordGrid.tsx +488 -0
  516. package/corpus/templates/crm/app/components/crm/RecordWorkspace.tsx +232 -0
  517. package/corpus/templates/crm/app/components/crm/SavedViewDataProgram.tsx +93 -0
  518. package/corpus/templates/crm/app/components/crm/Surface.tsx +97 -0
  519. package/corpus/templates/crm/app/components/crm/WorkOverview.tsx +180 -0
  520. package/corpus/templates/crm/app/components/crm/board/CrmBoard.tsx +988 -0
  521. package/corpus/templates/crm/app/components/crm/board/board-model.ts +399 -0
  522. package/corpus/templates/crm/app/components/crm/board/entry-filter.ts +150 -0
  523. package/corpus/templates/crm/app/components/crm/board/view-draft.ts +227 -0
  524. package/corpus/templates/crm/app/components/crm/grid/CrmGrid.tsx +1033 -0
  525. package/corpus/templates/crm/app/components/crm/grid/GridCell.tsx +620 -0
  526. package/corpus/templates/crm/app/components/crm/grid/clipboard.ts +84 -0
  527. package/corpus/templates/crm/app/components/crm/grid/model.ts +304 -0
  528. package/corpus/templates/crm/app/components/crm/grid/navigation.ts +220 -0
  529. package/corpus/templates/crm/app/components/crm/grid/query.ts +214 -0
  530. package/corpus/templates/crm/app/components/crm/record/AttributePanel.tsx +192 -0
  531. package/corpus/templates/crm/app/components/crm/record/FieldHistory.tsx +179 -0
  532. package/corpus/templates/crm/app/components/crm/record/RecordHeader.tsx +103 -0
  533. package/corpus/templates/crm/app/components/crm/record/RecordLists.tsx +235 -0
  534. package/corpus/templates/crm/app/components/crm/record/RecordTabs.tsx +206 -0
  535. package/corpus/templates/crm/app/components/crm/record/field-editors.tsx +245 -0
  536. package/corpus/templates/crm/app/components/crm/record/record-data.ts +603 -0
  537. package/corpus/templates/crm/app/components/crm/settings/AdvancedSettings.tsx +49 -0
  538. package/corpus/templates/crm/app/components/crm/settings/AttributeOptionsEditor.tsx +441 -0
  539. package/corpus/templates/crm/app/components/crm/settings/ConnectionSettings.tsx +169 -0
  540. package/corpus/templates/crm/app/components/crm/settings/FieldsSettings.tsx +935 -0
  541. package/corpus/templates/crm/app/components/crm/settings/ListsSettings.tsx +339 -0
  542. package/corpus/templates/crm/app/components/crm/settings/settings-admin.ts +377 -0
  543. package/corpus/templates/crm/app/components/crm/shared/AttributeValueParts.tsx +69 -0
  544. package/corpus/templates/crm/app/components/crm/shared/attribute-value.ts +591 -0
  545. package/corpus/templates/crm/app/components/layout/CrmCommandMenu.tsx +556 -0
  546. package/corpus/templates/crm/app/components/layout/CrmLayout.tsx +130 -0
  547. package/corpus/templates/crm/app/components/layout/CrmSidebar.tsx +407 -0
  548. package/corpus/templates/crm/app/components/layout/command-palette-search.ts +126 -0
  549. package/corpus/templates/crm/app/components/layout/crm-ui-intents.ts +41 -0
  550. package/corpus/templates/crm/app/components/layout/sidebar-collapse.ts +40 -0
  551. package/corpus/templates/crm/app/components/layout/sidebar-lists.ts +109 -0
  552. package/corpus/templates/crm/app/components/ui/alert-dialog.tsx +1 -0
  553. package/corpus/templates/crm/app/components/ui/badge.tsx +1 -0
  554. package/corpus/templates/crm/app/components/ui/button.tsx +1 -0
  555. package/corpus/templates/crm/app/components/ui/card.tsx +1 -0
  556. package/corpus/templates/crm/app/components/ui/checkbox.tsx +1 -0
  557. package/corpus/templates/crm/app/components/ui/dialog.tsx +1 -0
  558. package/corpus/templates/crm/app/components/ui/dropdown-menu.tsx +1 -0
  559. package/corpus/templates/crm/app/components/ui/hover-card.tsx +1 -0
  560. package/corpus/templates/crm/app/components/ui/input.tsx +1 -0
  561. package/corpus/templates/crm/app/components/ui/label.tsx +1 -0
  562. package/corpus/templates/crm/app/components/ui/popover.tsx +1 -0
  563. package/corpus/templates/crm/app/components/ui/select.tsx +1 -0
  564. package/corpus/templates/crm/app/components/ui/sheet.tsx +1 -0
  565. package/corpus/templates/crm/app/components/ui/skeleton.tsx +1 -0
  566. package/corpus/templates/crm/app/components/ui/switch.tsx +1 -0
  567. package/corpus/templates/crm/app/components/ui/table.tsx +1 -0
  568. package/corpus/templates/crm/app/components/ui/tabs.tsx +1 -0
  569. package/corpus/templates/crm/app/components/ui/textarea.tsx +1 -0
  570. package/corpus/templates/crm/app/components/ui/toolkit-provider.tsx +17 -0
  571. package/corpus/templates/crm/app/components/ui/tooltip.tsx +1 -0
  572. package/corpus/templates/crm/app/design-system.ts +3 -0
  573. package/corpus/templates/crm/app/entry.client.tsx +19 -0
  574. package/corpus/templates/crm/app/entry.server.tsx +10 -0
  575. package/corpus/templates/crm/app/global.css +167 -0
  576. package/corpus/templates/crm/app/hooks/use-keyboard-shortcuts.ts +206 -0
  577. package/corpus/templates/crm/app/hooks/use-navigation-state.ts +48 -0
  578. package/corpus/templates/crm/app/i18n/en-US.ts +684 -0
  579. package/corpus/templates/crm/app/i18n/index.ts +34 -0
  580. package/corpus/templates/crm/app/lib/dashboard.ts +13 -0
  581. package/corpus/templates/crm/app/lib/navigation.ts +17 -0
  582. package/corpus/templates/crm/app/lib/tab-id.ts +1 -0
  583. package/corpus/templates/crm/app/lib/types.ts +172 -0
  584. package/corpus/templates/crm/app/lib/utils.ts +1 -0
  585. package/corpus/templates/crm/app/root.tsx +93 -0
  586. package/corpus/templates/crm/app/routes/_index.tsx +26 -0
  587. package/corpus/templates/crm/app/routes/accounts.tsx +41 -0
  588. package/corpus/templates/crm/app/routes/agent.tsx +5 -0
  589. package/corpus/templates/crm/app/routes/ask.tsx +53 -0
  590. package/corpus/templates/crm/app/routes/dashboard.tsx +118 -0
  591. package/corpus/templates/crm/app/routes/lists.tsx +228 -0
  592. package/corpus/templates/crm/app/routes/opportunities.tsx +41 -0
  593. package/corpus/templates/crm/app/routes/people.tsx +41 -0
  594. package/corpus/templates/crm/app/routes/proposals.tsx +388 -0
  595. package/corpus/templates/crm/app/routes/records.$recordId.tsx +53 -0
  596. package/corpus/templates/crm/app/routes/records.tsx +64 -0
  597. package/corpus/templates/crm/app/routes/settings.tsx +118 -0
  598. package/corpus/templates/crm/app/routes/setup.tsx +308 -0
  599. package/corpus/templates/crm/app/routes/tasks.tsx +252 -0
  600. package/corpus/templates/crm/app/routes/views.tsx +683 -0
  601. package/corpus/templates/crm/app/routes.ts +19 -0
  602. package/corpus/templates/crm/app/vite-env.d.ts +6 -0
  603. package/corpus/templates/crm/changelog/2026-07-26-any-list-or-view-can-be-shown-as-a-board-grouped-by-stage-so.md +6 -0
  604. package/corpus/templates/crm/changelog/2026-07-26-crm-now-finds-likely-duplicate-records-and-tells-you-exactly.md +6 -0
  605. package/corpus/templates/crm/changelog/2026-07-26-enrichment-now-shows-what-a-run-will-cost-before-it-starts-g.md +6 -0
  606. package/corpus/templates/crm/changelog/2026-07-26-lists-turn-any-set-of-records-into-a-pipeline-with-its-own-s.md +6 -0
  607. package/corpus/templates/crm/changelog/2026-07-26-moving-a-record-or-list-entry-into-a-stage-that-was-retired-.md +6 -0
  608. package/corpus/templates/crm/changelog/2026-07-26-opening-a-record-now-shows-one-page-with-its-fields-the-list.md +6 -0
  609. package/corpus/templates/crm/changelog/2026-07-26-press-cmd-k-to-jump-to-any-record-list-view-or-setting-and-u.md +6 -0
  610. package/corpus/templates/crm/changelog/2026-07-26-provider-record-edits-now-show-an-exact-before-after-diff-an.md +6 -0
  611. package/corpus/templates/crm/changelog/2026-07-26-record-page-attribute-labels-now-read-in-full-instead-of-bei.md +6 -0
  612. package/corpus/templates/crm/changelog/2026-07-26-records-now-use-typed-fields-currency-dates-ratings-status-s.md +6 -0
  613. package/corpus/templates/crm/changelog/2026-07-26-retyping-a-value-on-the-record-page-now-replaces-it-instead-.md +6 -0
  614. package/corpus/templates/crm/changelog/2026-07-26-settings-now-has-fields-and-lists-tabs-for-adding-fields-edi.md +6 -0
  615. package/corpus/templates/crm/changelog/2026-07-26-the-proposal-review-now-shows-the-field-that-actually-change.md +6 -0
  616. package/corpus/templates/crm/changelog/2026-07-26-the-record-grid-is-now-a-real-spreadsheet-filter-sort-and-pa.md +6 -0
  617. package/corpus/templates/crm/components.json +20 -0
  618. package/corpus/templates/crm/docs/architecture/crm-contract.md +214 -0
  619. package/corpus/templates/crm/docs/features/README.md +55 -0
  620. package/corpus/templates/crm/docs/features/f1-records-and-fields.mdx +52 -0
  621. package/corpus/templates/crm/docs/features/f2-lists-pipelines-and-views.mdx +48 -0
  622. package/corpus/templates/crm/docs/features/f3-work-and-record-quality.mdx +40 -0
  623. package/corpus/templates/crm/docs/features/f4-evidence-and-chat.mdx +47 -0
  624. package/corpus/templates/crm/learnings.defaults.md +5 -0
  625. package/corpus/templates/crm/netlify.toml +11 -0
  626. package/corpus/templates/crm/package.json +61 -0
  627. package/corpus/templates/crm/public/favicon.svg +1 -0
  628. package/corpus/templates/crm/public/icon-180.svg +1 -0
  629. package/corpus/templates/crm/public/manifest.json +11 -0
  630. package/corpus/templates/crm/react-router.config.ts +7 -0
  631. package/corpus/templates/crm/server/crm/adapter.ts +32 -0
  632. package/corpus/templates/crm/server/crm/crm-field-firewall.ts +64 -0
  633. package/corpus/templates/crm/server/crm/crm-mirror.ts +721 -0
  634. package/corpus/templates/crm/server/crm/field-policy-attributes.ts +48 -0
  635. package/corpus/templates/crm/server/crm/hubspot-adapter.ts +1146 -0
  636. package/corpus/templates/crm/server/crm/native-adapter.ts +1810 -0
  637. package/corpus/templates/crm/server/crm/provider-record-link.ts +264 -0
  638. package/corpus/templates/crm/server/crm/read-through.ts +207 -0
  639. package/corpus/templates/crm/server/crm/salesforce-adapter.ts +1255 -0
  640. package/corpus/templates/crm/server/db/crm-store.ts +1112 -0
  641. package/corpus/templates/crm/server/db/index.ts +191 -0
  642. package/corpus/templates/crm/server/db/schema.ts +647 -0
  643. package/corpus/templates/crm/server/lib/crm-query.ts +1558 -0
  644. package/corpus/templates/crm/server/lib/dedupe.ts +714 -0
  645. package/corpus/templates/crm/server/lib/enrichment-cost.ts +381 -0
  646. package/corpus/templates/crm/server/lib/enrichment-slots.ts +519 -0
  647. package/corpus/templates/crm/server/lib/intelligence/default-detectors.ts +65 -0
  648. package/corpus/templates/crm/server/lib/intelligence/evidence.ts +105 -0
  649. package/corpus/templates/crm/server/lib/intelligence/keyword-detector.ts +94 -0
  650. package/corpus/templates/crm/server/lib/intelligence/smart-detector.ts +39 -0
  651. package/corpus/templates/crm/server/lib/intelligence/summary.ts +19 -0
  652. package/corpus/templates/crm/server/lib/lifecycle.ts +634 -0
  653. package/corpus/templates/crm/server/lib/provider-api.ts +64 -0
  654. package/corpus/templates/crm/server/middleware/auth.ts +4 -0
  655. package/corpus/templates/crm/server/plugins/agent-chat.ts +65 -0
  656. package/corpus/templates/crm/server/plugins/auth.ts +14 -0
  657. package/corpus/templates/crm/server/plugins/core-routes.ts +17 -0
  658. package/corpus/templates/crm/server/plugins/db.ts +738 -0
  659. package/corpus/templates/crm/server/routes/[...page].get.ts +5 -0
  660. package/corpus/templates/crm/shared/crm-attributes.ts +469 -0
  661. package/corpus/templates/crm/shared/crm-automation-recipes.ts +132 -0
  662. package/corpus/templates/crm/shared/crm-contract.ts +417 -0
  663. package/corpus/templates/crm/shared/crm-navigation.ts +190 -0
  664. package/corpus/templates/crm/shared/crm-sales-config.ts +63 -0
  665. package/corpus/templates/crm/ssr-entry.ts +11 -0
  666. package/corpus/templates/crm/tsconfig.json +24 -0
  667. package/corpus/templates/crm/vite.config.ts +15 -0
  668. package/corpus/templates/crm/vitest.config.ts +5 -0
  669. package/corpus/templates/design/.agents/skills/actions/SKILL.md +19 -1
  670. package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +16 -0
  671. package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +15 -0
  672. package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +20 -6
  673. package/corpus/templates/design/.agents/skills/full-app-build/SKILL.md +12 -0
  674. package/corpus/templates/design/.agents/skills/security/SKILL.md +2 -0
  675. package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +4 -3
  676. package/corpus/templates/design/.agents/skills/shadcn-ui/SKILL.md +7 -3
  677. package/corpus/templates/design/.agents/skills/sharing/SKILL.md +228 -0
  678. package/corpus/templates/design/.agents/skills/storing-data/SKILL.md +178 -0
  679. package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +201 -102
  680. package/corpus/templates/design/AGENTS.md +58 -71
  681. package/corpus/templates/design/actions/open-visual-edit.ts +111 -2
  682. package/corpus/templates/design/app/components/design/AddLocalhostScreenDialog.tsx +236 -0
  683. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +1 -1
  684. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +2 -2
  685. package/corpus/templates/design/app/entry.client.tsx +3 -0
  686. package/corpus/templates/design/app/i18n-data.ts +192 -12
  687. package/corpus/templates/design/app/pages/Present.tsx +6 -9
  688. package/corpus/templates/design/app/pages/VisualEdit.tsx +4 -7
  689. package/corpus/templates/design/app/pages/design-editor/design-data-geometry-utils.ts +20 -0
  690. package/corpus/templates/design/changelog/2026-07-26-apply-design-updates-from-a-centered-top-toolbar-without-cov.md +6 -0
  691. package/corpus/templates/dispatch/.agents/skills/actions/SKILL.md +19 -1
  692. package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +20 -6
  693. package/corpus/templates/dispatch/.agents/skills/security/SKILL.md +2 -0
  694. package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +4 -3
  695. package/corpus/templates/dispatch/.agents/skills/shadcn-ui/SKILL.md +7 -3
  696. package/corpus/templates/dispatch/.agents/skills/sharing/SKILL.md +228 -0
  697. package/corpus/templates/dispatch/.agents/skills/storing-data/SKILL.md +178 -0
  698. package/corpus/templates/dispatch/app/entry.client.tsx +3 -0
  699. package/corpus/templates/dispatch/server/plugins/identity-sso.ts +27 -16
  700. package/corpus/templates/forms/.agents/skills/actions/SKILL.md +19 -1
  701. package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +20 -6
  702. package/corpus/templates/forms/.agents/skills/security/SKILL.md +2 -0
  703. package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +4 -3
  704. package/corpus/templates/forms/.agents/skills/shadcn-ui/SKILL.md +7 -3
  705. package/corpus/templates/forms/.agents/skills/sharing/SKILL.md +228 -0
  706. package/corpus/templates/forms/DEVELOPING.md +1 -1
  707. package/corpus/templates/forms/app/entry.client.tsx +3 -0
  708. package/corpus/templates/forms/app/pages/FormsListPage.tsx +3 -5
  709. package/corpus/templates/forms/app/routes/_app.tsx +4 -4
  710. package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +20 -6
  711. package/corpus/templates/macros/.agents/skills/security/SKILL.md +2 -0
  712. package/corpus/templates/macros/.agents/skills/shadcn-ui/SKILL.md +7 -3
  713. package/corpus/templates/macros/.agents/skills/sharing/SKILL.md +228 -0
  714. package/corpus/templates/macros/.agents/skills/storing-data/SKILL.md +178 -0
  715. package/corpus/templates/macros/app/entry.client.tsx +3 -0
  716. package/corpus/templates/mail/.agents/skills/actions/SKILL.md +19 -1
  717. package/corpus/templates/mail/.agents/skills/contacts-and-crm/SKILL.md +10 -0
  718. package/corpus/templates/mail/.agents/skills/draft-queue/SKILL.md +3 -0
  719. package/corpus/templates/mail/.agents/skills/email-drafts/SKILL.md +26 -2
  720. package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +20 -6
  721. package/corpus/templates/mail/.agents/skills/inbox-automations/SKILL.md +37 -0
  722. package/corpus/templates/mail/.agents/skills/inbox-reads-and-triage/SKILL.md +58 -0
  723. package/corpus/templates/mail/.agents/skills/mail-backends/SKILL.md +33 -0
  724. package/corpus/templates/mail/.agents/skills/provider-api-scans/SKILL.md +39 -0
  725. package/corpus/templates/mail/.agents/skills/security/SKILL.md +2 -0
  726. package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +4 -3
  727. package/corpus/templates/mail/.agents/skills/shadcn-ui/SKILL.md +7 -3
  728. package/corpus/templates/mail/.agents/skills/sharing/SKILL.md +228 -0
  729. package/corpus/templates/mail/AGENTS.md +74 -143
  730. package/corpus/templates/mail/actions/create-alias.ts +36 -0
  731. package/corpus/templates/mail/actions/create-automation.ts +28 -0
  732. package/corpus/templates/mail/actions/create-scheduled-job.ts +45 -0
  733. package/corpus/templates/mail/actions/delete-alias.ts +26 -0
  734. package/corpus/templates/mail/actions/delete-automation.ts +21 -0
  735. package/corpus/templates/mail/actions/get-automation-settings.ts +32 -0
  736. package/corpus/templates/mail/actions/get-mail-preferences.ts +18 -0
  737. package/corpus/templates/mail/actions/list-aliases.ts +17 -0
  738. package/corpus/templates/mail/actions/list-automations.ts +18 -0
  739. package/corpus/templates/mail/actions/list-scheduled-jobs.ts +18 -0
  740. package/corpus/templates/mail/actions/update-alias.ts +37 -0
  741. package/corpus/templates/mail/actions/update-automation-settings.ts +33 -0
  742. package/corpus/templates/mail/actions/update-automation.ts +33 -0
  743. package/corpus/templates/mail/actions/update-mail-preferences.ts +68 -0
  744. package/corpus/templates/mail/actions/update-scheduled-job.ts +25 -0
  745. package/corpus/templates/mail/app/entry.client.tsx +3 -0
  746. package/corpus/templates/mail/app/hooks/use-aliases.ts +6 -36
  747. package/corpus/templates/mail/app/hooks/use-automations.ts +9 -16
  748. package/corpus/templates/mail/app/hooks/use-emails.ts +6 -5
  749. package/corpus/templates/mail/app/hooks/use-scheduled-jobs.ts +12 -15
  750. package/corpus/templates/mail/app/pages/SettingsPage.tsx +15 -9
  751. package/corpus/templates/mail/server/handlers/automations.ts +5 -142
  752. package/corpus/templates/mail/server/handlers/emails.ts +1 -56
  753. package/corpus/templates/mail/server/handlers/scheduled-jobs.ts +0 -134
  754. package/corpus/templates/mail/server/lib/aliases.ts +18 -0
  755. package/corpus/templates/mail/server/lib/automations.ts +104 -0
  756. package/corpus/templates/mail/server/lib/jobs.ts +34 -0
  757. package/corpus/templates/mail/server/lib/mail-settings.ts +43 -0
  758. package/corpus/templates/mail/shared/automation-schema.ts +10 -0
  759. package/corpus/templates/plan/.agents/skills/actions/SKILL.md +19 -1
  760. package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +2 -0
  761. package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +20 -6
  762. package/corpus/templates/plan/.agents/skills/plan-authoring-flow/SKILL.md +98 -0
  763. package/corpus/templates/plan/.agents/skills/plan-browser-editing/SKILL.md +42 -0
  764. package/corpus/templates/plan/.agents/skills/plan-comments-and-feedback/SKILL.md +68 -0
  765. package/corpus/templates/plan/.agents/skills/plan-events/SKILL.md +22 -0
  766. package/corpus/templates/plan/.agents/skills/plan-hosted-writes/SKILL.md +42 -0
  767. package/corpus/templates/plan/.agents/skills/plan-local-codebase-chat/SKILL.md +38 -0
  768. package/corpus/templates/plan/.agents/skills/plan-review-recaps/SKILL.md +25 -0
  769. package/corpus/templates/plan/.agents/skills/plan-source-sync/SKILL.md +68 -0
  770. package/corpus/templates/plan/.agents/skills/plan-version-history/SKILL.md +25 -0
  771. package/corpus/templates/plan/.agents/skills/security/SKILL.md +2 -0
  772. package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +4 -3
  773. package/corpus/templates/plan/.agents/skills/shadcn-ui/SKILL.md +7 -3
  774. package/corpus/templates/plan/.agents/skills/sharing/SKILL.md +228 -0
  775. package/corpus/templates/plan/.agents/skills/storing-data/SKILL.md +178 -0
  776. package/corpus/templates/plan/AGENTS.md +64 -296
  777. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +9 -8
  778. package/corpus/templates/plan/app/pages/PlansPage.tsx +5 -10
  779. package/corpus/templates/slides/.agents/skills/actions/SKILL.md +19 -1
  780. package/corpus/templates/slides/.agents/skills/deck-management/SKILL.md +7 -7
  781. package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +20 -6
  782. package/corpus/templates/slides/.agents/skills/security/SKILL.md +2 -0
  783. package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +4 -3
  784. package/corpus/templates/slides/.agents/skills/shadcn-ui/SKILL.md +7 -3
  785. package/corpus/templates/slides/.agents/skills/sharing/SKILL.md +228 -0
  786. package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +3 -2
  787. package/corpus/templates/slides/.agents/skills/storing-data/SKILL.md +178 -0
  788. package/corpus/templates/slides/DEVELOPING.md +3 -3
  789. package/corpus/templates/slides/actions/_deck-write.ts +52 -0
  790. package/corpus/templates/slides/actions/add-deck.ts +73 -0
  791. package/corpus/templates/slides/actions/delete-deck.ts +60 -0
  792. package/corpus/templates/slides/actions/get-deck.ts +3 -1
  793. package/corpus/templates/slides/actions/save-deck.ts +144 -0
  794. package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +27 -20
  795. package/corpus/templates/slides/app/context/DeckContext.tsx +173 -100
  796. package/corpus/templates/slides/app/pages/Index.tsx +3 -6
  797. package/corpus/templates/slides/app/routes/slide.tsx +16 -12
  798. package/corpus/templates/slides/changelog/2026-07-26-a-newly-created-deck-now-appears-in-the-deck-list-right-away.md +6 -0
  799. package/corpus/templates/slides/server/handlers/decks.ts +2 -378
  800. package/corpus/templates/tasks/.agents/skills/action-reference/SKILL.md +47 -0
  801. package/corpus/templates/tasks/.agents/skills/actions/SKILL.md +19 -1
  802. package/corpus/templates/tasks/.agents/skills/adding-a-feature/SKILL.md +2 -0
  803. package/corpus/templates/tasks/.agents/skills/change-summary/SKILL.md +19 -1
  804. package/corpus/templates/tasks/.agents/skills/custom-fields/SKILL.md +63 -0
  805. package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +20 -6
  806. package/corpus/templates/tasks/.agents/skills/security/SKILL.md +2 -0
  807. package/corpus/templates/tasks/.agents/skills/self-modifying-code/SKILL.md +4 -3
  808. package/corpus/templates/tasks/.agents/skills/shadcn-ui/SKILL.md +7 -3
  809. package/corpus/templates/tasks/.agents/skills/sharing/SKILL.md +228 -0
  810. package/corpus/templates/tasks/.agents/skills/store-conventions/SKILL.md +45 -0
  811. package/corpus/templates/tasks/.agents/skills/storing-data/SKILL.md +178 -0
  812. package/corpus/templates/tasks/.agents/skills/task-inbox-workflow/SKILL.md +66 -0
  813. package/corpus/templates/tasks/AGENTS.md +48 -113
  814. package/corpus/templates/tasks/app/entry.client.tsx +3 -0
  815. package/corpus/toolkit/CHANGELOG.md +12 -0
  816. package/corpus/toolkit/package.json +1 -1
  817. package/corpus/toolkit/src/composer/PromptComposer.tsx +23 -20
  818. package/dist/a2a/client.d.ts +3 -1
  819. package/dist/a2a/client.d.ts.map +1 -1
  820. package/dist/a2a/client.js +4 -2
  821. package/dist/a2a/client.js.map +1 -1
  822. package/dist/agent/action-warnings.d.ts +27 -0
  823. package/dist/agent/action-warnings.d.ts.map +1 -0
  824. package/dist/agent/action-warnings.js +73 -0
  825. package/dist/agent/action-warnings.js.map +1 -0
  826. package/dist/agent/durable-background.d.ts +8 -0
  827. package/dist/agent/durable-background.d.ts.map +1 -1
  828. package/dist/agent/durable-background.js +37 -5
  829. package/dist/agent/durable-background.js.map +1 -1
  830. package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
  831. package/dist/agent/engine/ai-sdk-engine.js +47 -6
  832. package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
  833. package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
  834. package/dist/agent/engine/anthropic-engine.js +41 -9
  835. package/dist/agent/engine/anthropic-engine.js.map +1 -1
  836. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  837. package/dist/agent/engine/builder-engine.js +46 -19
  838. package/dist/agent/engine/builder-engine.js.map +1 -1
  839. package/dist/agent/engine/continuation-dispatch-retry.d.ts.map +1 -1
  840. package/dist/agent/engine/continuation-dispatch-retry.js +11 -9
  841. package/dist/agent/engine/continuation-dispatch-retry.js.map +1 -1
  842. package/dist/agent/engine/credential-errors.d.ts +6 -0
  843. package/dist/agent/engine/credential-errors.d.ts.map +1 -1
  844. package/dist/agent/engine/credential-errors.js +10 -0
  845. package/dist/agent/engine/credential-errors.js.map +1 -1
  846. package/dist/agent/engine/error-detail.d.ts +2 -0
  847. package/dist/agent/engine/error-detail.d.ts.map +1 -0
  848. package/dist/agent/engine/error-detail.js +37 -0
  849. package/dist/agent/engine/error-detail.js.map +1 -0
  850. package/dist/agent/engine/prompt-cache.d.ts +34 -0
  851. package/dist/agent/engine/prompt-cache.d.ts.map +1 -0
  852. package/dist/agent/engine/prompt-cache.js +39 -0
  853. package/dist/agent/engine/prompt-cache.js.map +1 -0
  854. package/dist/agent/engine/registry.d.ts.map +1 -1
  855. package/dist/agent/engine/registry.js +23 -33
  856. package/dist/agent/engine/registry.js.map +1 -1
  857. package/dist/agent/engine/tool-call-journal-seed.d.ts +1 -1
  858. package/dist/agent/engine/tool-call-journal-seed.d.ts.map +1 -1
  859. package/dist/agent/engine/tool-call-journal-seed.js +2 -2
  860. package/dist/agent/engine/tool-call-journal-seed.js.map +1 -1
  861. package/dist/agent/engine/translate-anthropic.d.ts +28 -0
  862. package/dist/agent/engine/translate-anthropic.d.ts.map +1 -1
  863. package/dist/agent/engine/translate-anthropic.js +75 -0
  864. package/dist/agent/engine/translate-anthropic.js.map +1 -1
  865. package/dist/agent/loop-settings.d.ts +35 -2
  866. package/dist/agent/loop-settings.d.ts.map +1 -1
  867. package/dist/agent/loop-settings.js +71 -8
  868. package/dist/agent/loop-settings.js.map +1 -1
  869. package/dist/agent/production-agent.d.ts +105 -20
  870. package/dist/agent/production-agent.d.ts.map +1 -1
  871. package/dist/agent/production-agent.js +516 -123
  872. package/dist/agent/production-agent.js.map +1 -1
  873. package/dist/agent/run-loop-with-resume.d.ts.map +1 -1
  874. package/dist/agent/run-loop-with-resume.js +24 -2
  875. package/dist/agent/run-loop-with-resume.js.map +1 -1
  876. package/dist/agent/run-manager.d.ts +52 -9
  877. package/dist/agent/run-manager.d.ts.map +1 -1
  878. package/dist/agent/run-manager.js +191 -36
  879. package/dist/agent/run-manager.js.map +1 -1
  880. package/dist/agent/run-store.d.ts +87 -14
  881. package/dist/agent/run-store.d.ts.map +1 -1
  882. package/dist/agent/run-store.js +331 -59
  883. package/dist/agent/run-store.js.map +1 -1
  884. package/dist/agent/thread-data-builder.d.ts.map +1 -1
  885. package/dist/agent/thread-data-builder.js +6 -1
  886. package/dist/agent/thread-data-builder.js.map +1 -1
  887. package/dist/agent/types.d.ts +18 -6
  888. package/dist/agent/types.d.ts.map +1 -1
  889. package/dist/agent/types.js +9 -5
  890. package/dist/agent/types.js.map +1 -1
  891. package/dist/application-state/script-helpers.d.ts.map +1 -1
  892. package/dist/application-state/script-helpers.js +2 -2
  893. package/dist/application-state/script-helpers.js.map +1 -1
  894. package/dist/cli/agents.d.ts +2 -0
  895. package/dist/cli/agents.d.ts.map +1 -1
  896. package/dist/cli/agents.js +48 -1
  897. package/dist/cli/agents.js.map +1 -1
  898. package/dist/cli/app-skill.js +1 -1
  899. package/dist/cli/app-skill.js.map +1 -1
  900. package/dist/cli/code-agent-executor.d.ts.map +1 -1
  901. package/dist/cli/code-agent-executor.js +3 -3
  902. package/dist/cli/code-agent-executor.js.map +1 -1
  903. package/dist/cli/design-connect.d.ts.map +1 -1
  904. package/dist/cli/design-connect.js +73 -8
  905. package/dist/cli/design-connect.js.map +1 -1
  906. package/dist/cli/skills-content/design-visual-edit-skill.d.ts +1 -1
  907. package/dist/cli/skills-content/design-visual-edit-skill.d.ts.map +1 -1
  908. package/dist/cli/skills-content/design-visual-edit-skill.js +169 -24
  909. package/dist/cli/skills-content/design-visual-edit-skill.js.map +1 -1
  910. package/dist/cli/templates-meta.d.ts.map +1 -1
  911. package/dist/cli/templates-meta.js +12 -0
  912. package/dist/cli/templates-meta.js.map +1 -1
  913. package/dist/client/AssistantChat.d.ts.map +1 -1
  914. package/dist/client/AssistantChat.js +135 -125
  915. package/dist/client/AssistantChat.js.map +1 -1
  916. package/dist/client/agent-chat-adapter.d.ts +17 -0
  917. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  918. package/dist/client/agent-chat-adapter.js +141 -31
  919. package/dist/client/agent-chat-adapter.js.map +1 -1
  920. package/dist/client/chat/message-components.d.ts +9 -1
  921. package/dist/client/chat/message-components.d.ts.map +1 -1
  922. package/dist/client/chat/message-components.js +12 -1
  923. package/dist/client/chat/message-components.js.map +1 -1
  924. package/dist/client/embed-auth.d.ts.map +1 -1
  925. package/dist/client/embed-auth.js +3 -1
  926. package/dist/client/embed-auth.js.map +1 -1
  927. package/dist/client/integrations/IntegrationCard.d.ts.map +1 -1
  928. package/dist/client/integrations/IntegrationCard.js +9 -4
  929. package/dist/client/integrations/IntegrationCard.js.map +1 -1
  930. package/dist/client/integrations/IntegrationsPanel.d.ts.map +1 -1
  931. package/dist/client/integrations/IntegrationsPanel.js +13 -7
  932. package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
  933. package/dist/client/integrations/webhook-url.d.ts +7 -0
  934. package/dist/client/integrations/webhook-url.d.ts.map +1 -0
  935. package/dist/client/integrations/webhook-url.js +32 -0
  936. package/dist/client/integrations/webhook-url.js.map +1 -0
  937. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  938. package/dist/client/org/OrgSwitcher.js +13 -11
  939. package/dist/client/org/OrgSwitcher.js.map +1 -1
  940. package/dist/client/org/RequireActiveOrg.d.ts.map +1 -1
  941. package/dist/client/org/RequireActiveOrg.js +2 -2
  942. package/dist/client/org/RequireActiveOrg.js.map +1 -1
  943. package/dist/client/org/TeamPage.d.ts.map +1 -1
  944. package/dist/client/org/TeamPage.js +52 -13
  945. package/dist/client/org/TeamPage.js.map +1 -1
  946. package/dist/client/org/hooks.d.ts +9 -0
  947. package/dist/client/org/hooks.d.ts.map +1 -1
  948. package/dist/client/org/hooks.js +24 -0
  949. package/dist/client/org/hooks.js.map +1 -1
  950. package/dist/client/org/index.d.ts +1 -1
  951. package/dist/client/org/index.d.ts.map +1 -1
  952. package/dist/client/org/index.js +1 -1
  953. package/dist/client/org/index.js.map +1 -1
  954. package/dist/client/require-session.d.ts +12 -17
  955. package/dist/client/require-session.d.ts.map +1 -1
  956. package/dist/client/require-session.js +36 -23
  957. package/dist/client/require-session.js.map +1 -1
  958. package/dist/client/session-replay.js +1 -1
  959. package/dist/client/session-replay.js.map +1 -1
  960. package/dist/client/settings/DemoModeSection.d.ts +0 -1
  961. package/dist/client/settings/DemoModeSection.d.ts.map +1 -1
  962. package/dist/client/settings/DemoModeSection.js +0 -4
  963. package/dist/client/settings/DemoModeSection.js.map +1 -1
  964. package/dist/client/settings/SecretsSection.d.ts.map +1 -1
  965. package/dist/client/settings/SecretsSection.js +12 -8
  966. package/dist/client/settings/SecretsSection.js.map +1 -1
  967. package/dist/client/settings/VoiceTranscriptionSection.d.ts +0 -1
  968. package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
  969. package/dist/client/settings/VoiceTranscriptionSection.js +1 -4
  970. package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
  971. package/dist/client/sse-event-processor.d.ts +33 -1
  972. package/dist/client/sse-event-processor.d.ts.map +1 -1
  973. package/dist/client/sse-event-processor.js +83 -8
  974. package/dist/client/sse-event-processor.js.map +1 -1
  975. package/dist/client/use-action.d.ts.map +1 -1
  976. package/dist/client/use-action.js +23 -14
  977. package/dist/client/use-action.js.map +1 -1
  978. package/dist/client/use-agent-engine-configured.d.ts +9 -3
  979. package/dist/client/use-agent-engine-configured.d.ts.map +1 -1
  980. package/dist/client/use-agent-engine-configured.js +30 -3
  981. package/dist/client/use-agent-engine-configured.js.map +1 -1
  982. package/dist/client/use-db-sync.d.ts +3 -0
  983. package/dist/client/use-db-sync.d.ts.map +1 -1
  984. package/dist/client/use-db-sync.js +18 -1
  985. package/dist/client/use-db-sync.js.map +1 -1
  986. package/dist/collab/awareness.d.ts +2 -2
  987. package/dist/collab/awareness.d.ts.map +1 -1
  988. package/dist/credentials/index.d.ts +29 -1
  989. package/dist/credentials/index.d.ts.map +1 -1
  990. package/dist/credentials/index.js +111 -2
  991. package/dist/credentials/index.js.map +1 -1
  992. package/dist/deploy/build.d.ts +14 -3
  993. package/dist/deploy/build.d.ts.map +1 -1
  994. package/dist/deploy/build.js +81 -24
  995. package/dist/deploy/build.js.map +1 -1
  996. package/dist/deploy/workspace-deploy.d.ts +15 -0
  997. package/dist/deploy/workspace-deploy.d.ts.map +1 -1
  998. package/dist/deploy/workspace-deploy.js +19 -18
  999. package/dist/deploy/workspace-deploy.js.map +1 -1
  1000. package/dist/file-upload/actions/upload-image.d.ts +2 -2
  1001. package/dist/guards/no-localhost-fallback.d.ts +7 -0
  1002. package/dist/guards/no-localhost-fallback.d.ts.map +1 -1
  1003. package/dist/guards/no-localhost-fallback.js +75 -16
  1004. package/dist/guards/no-localhost-fallback.js.map +1 -1
  1005. package/dist/integrations/google-docs-poller.d.ts.map +1 -1
  1006. package/dist/integrations/google-docs-poller.js +8 -3
  1007. package/dist/integrations/google-docs-poller.js.map +1 -1
  1008. package/dist/integrations/webhook-handler.d.ts.map +1 -1
  1009. package/dist/integrations/webhook-handler.js +22 -4
  1010. package/dist/integrations/webhook-handler.js.map +1 -1
  1011. package/dist/jobs/scheduler.d.ts +17 -0
  1012. package/dist/jobs/scheduler.d.ts.map +1 -1
  1013. package/dist/jobs/scheduler.js +60 -33
  1014. package/dist/jobs/scheduler.js.map +1 -1
  1015. package/dist/localization/default-messages.d.ts +17 -1
  1016. package/dist/localization/default-messages.d.ts.map +1 -1
  1017. package/dist/localization/default-messages.js +17 -1
  1018. package/dist/localization/default-messages.js.map +1 -1
  1019. package/dist/notifications/routes.d.ts +1 -1
  1020. package/dist/observability/evals.d.ts.map +1 -1
  1021. package/dist/observability/evals.js +7 -10
  1022. package/dist/observability/evals.js.map +1 -1
  1023. package/dist/observability/routes.d.ts +3 -3
  1024. package/dist/observability/traces.d.ts +2 -0
  1025. package/dist/observability/traces.d.ts.map +1 -1
  1026. package/dist/observability/traces.js.map +1 -1
  1027. package/dist/org/accept-pending.js +2 -2
  1028. package/dist/org/accept-pending.js.map +1 -1
  1029. package/dist/org/active-org.d.ts +16 -0
  1030. package/dist/org/active-org.d.ts.map +1 -0
  1031. package/dist/org/active-org.js +57 -0
  1032. package/dist/org/active-org.js.map +1 -0
  1033. package/dist/org/auto-join-domain.d.ts.map +1 -1
  1034. package/dist/org/auto-join-domain.js +3 -2
  1035. package/dist/org/auto-join-domain.js.map +1 -1
  1036. package/dist/org/context.d.ts +19 -1
  1037. package/dist/org/context.d.ts.map +1 -1
  1038. package/dist/org/context.js +159 -71
  1039. package/dist/org/context.js.map +1 -1
  1040. package/dist/org/handlers.d.ts +24 -1
  1041. package/dist/org/handlers.d.ts.map +1 -1
  1042. package/dist/org/handlers.js +129 -10
  1043. package/dist/org/handlers.js.map +1 -1
  1044. package/dist/org/plugin.d.ts +2 -0
  1045. package/dist/org/plugin.d.ts.map +1 -1
  1046. package/dist/org/plugin.js +9 -2
  1047. package/dist/org/plugin.js.map +1 -1
  1048. package/dist/org/types.d.ts +6 -1
  1049. package/dist/org/types.d.ts.map +1 -1
  1050. package/dist/org/types.js.map +1 -1
  1051. package/dist/progress/routes.d.ts +1 -1
  1052. package/dist/provider-api/actions/custom-provider-registration.d.ts +9 -9
  1053. package/dist/provider-api/actions/provider-api.d.ts +11 -11
  1054. package/dist/provider-api/index.d.ts.map +1 -1
  1055. package/dist/provider-api/index.js +3 -2
  1056. package/dist/provider-api/index.js.map +1 -1
  1057. package/dist/resources/handlers.d.ts +1 -1
  1058. package/dist/resources/handlers.d.ts.map +1 -1
  1059. package/dist/resources/handlers.js +2 -7
  1060. package/dist/resources/handlers.js.map +1 -1
  1061. package/dist/resources/script-helpers.d.ts.map +1 -1
  1062. package/dist/resources/script-helpers.js +2 -2
  1063. package/dist/resources/script-helpers.js.map +1 -1
  1064. package/dist/scripts/chat/search-chats.d.ts.map +1 -1
  1065. package/dist/scripts/chat/search-chats.js +2 -2
  1066. package/dist/scripts/chat/search-chats.js.map +1 -1
  1067. package/dist/scripts/describe-workspace-apps.d.ts +4 -0
  1068. package/dist/scripts/describe-workspace-apps.d.ts.map +1 -0
  1069. package/dist/scripts/describe-workspace-apps.js +34 -0
  1070. package/dist/scripts/describe-workspace-apps.js.map +1 -0
  1071. package/dist/scripts/resources/delete-memory.d.ts.map +1 -1
  1072. package/dist/scripts/resources/delete-memory.js +2 -2
  1073. package/dist/scripts/resources/delete-memory.js.map +1 -1
  1074. package/dist/scripts/resources/delete.d.ts.map +1 -1
  1075. package/dist/scripts/resources/delete.js +2 -2
  1076. package/dist/scripts/resources/delete.js.map +1 -1
  1077. package/dist/scripts/resources/effective.d.ts.map +1 -1
  1078. package/dist/scripts/resources/effective.js +2 -2
  1079. package/dist/scripts/resources/effective.js.map +1 -1
  1080. package/dist/scripts/resources/list.d.ts.map +1 -1
  1081. package/dist/scripts/resources/list.js +2 -2
  1082. package/dist/scripts/resources/list.js.map +1 -1
  1083. package/dist/scripts/resources/read.d.ts.map +1 -1
  1084. package/dist/scripts/resources/read.js +2 -2
  1085. package/dist/scripts/resources/read.js.map +1 -1
  1086. package/dist/scripts/resources/save-memory.d.ts.map +1 -1
  1087. package/dist/scripts/resources/save-memory.js +2 -2
  1088. package/dist/scripts/resources/save-memory.js.map +1 -1
  1089. package/dist/scripts/resources/write.d.ts.map +1 -1
  1090. package/dist/scripts/resources/write.js +2 -2
  1091. package/dist/scripts/resources/write.js.map +1 -1
  1092. package/dist/secrets/routes.d.ts +9 -9
  1093. package/dist/server/agent-capabilities.d.ts +21 -0
  1094. package/dist/server/agent-capabilities.d.ts.map +1 -0
  1095. package/dist/server/agent-capabilities.js +106 -0
  1096. package/dist/server/agent-capabilities.js.map +1 -0
  1097. package/dist/server/agent-chat/framework-prompts.d.ts.map +1 -1
  1098. package/dist/server/agent-chat/framework-prompts.js +11 -13
  1099. package/dist/server/agent-chat/framework-prompts.js.map +1 -1
  1100. package/dist/server/agent-chat/prompt-resources.d.ts +32 -0
  1101. package/dist/server/agent-chat/prompt-resources.d.ts.map +1 -1
  1102. package/dist/server/agent-chat/prompt-resources.js +117 -56
  1103. package/dist/server/agent-chat/prompt-resources.js.map +1 -1
  1104. package/dist/server/agent-chat/script-entries.d.ts.map +1 -1
  1105. package/dist/server/agent-chat/script-entries.js +18 -8
  1106. package/dist/server/agent-chat/script-entries.js.map +1 -1
  1107. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  1108. package/dist/server/agent-chat-plugin.js +27 -1
  1109. package/dist/server/agent-chat-plugin.js.map +1 -1
  1110. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  1111. package/dist/server/auth.d.ts +9 -9
  1112. package/dist/server/auth.d.ts.map +1 -1
  1113. package/dist/server/auth.js +32 -33
  1114. package/dist/server/auth.js.map +1 -1
  1115. package/dist/server/core-routes-plugin.d.ts +45 -0
  1116. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  1117. package/dist/server/core-routes-plugin.js +162 -139
  1118. package/dist/server/core-routes-plugin.js.map +1 -1
  1119. package/dist/server/credential-provider.d.ts +35 -2
  1120. package/dist/server/credential-provider.d.ts.map +1 -1
  1121. package/dist/server/credential-provider.js +155 -40
  1122. package/dist/server/credential-provider.js.map +1 -1
  1123. package/dist/server/embed-session.d.ts.map +1 -1
  1124. package/dist/server/embed-session.js +10 -0
  1125. package/dist/server/embed-session.js.map +1 -1
  1126. package/dist/server/framework-request-handler.d.ts.map +1 -1
  1127. package/dist/server/framework-request-handler.js +38 -0
  1128. package/dist/server/framework-request-handler.js.map +1 -1
  1129. package/dist/server/google-auth-plugin.d.ts.map +1 -1
  1130. package/dist/server/google-auth-plugin.js +12 -444
  1131. package/dist/server/google-auth-plugin.js.map +1 -1
  1132. package/dist/server/index.d.ts +2 -2
  1133. package/dist/server/index.d.ts.map +1 -1
  1134. package/dist/server/index.js +2 -2
  1135. package/dist/server/index.js.map +1 -1
  1136. package/dist/server/onboarding-html.d.ts.map +1 -1
  1137. package/dist/server/onboarding-html.js +20 -56
  1138. package/dist/server/onboarding-html.js.map +1 -1
  1139. package/dist/server/open-route.d.ts.map +1 -1
  1140. package/dist/server/open-route.js +6 -1
  1141. package/dist/server/open-route.js.map +1 -1
  1142. package/dist/server/poll.js +1 -1
  1143. package/dist/server/poll.js.map +1 -1
  1144. package/dist/server/prompts/framework-core-compact.d.ts.map +1 -1
  1145. package/dist/server/prompts/framework-core-compact.js +5 -6
  1146. package/dist/server/prompts/framework-core-compact.js.map +1 -1
  1147. package/dist/server/prompts/framework-core.d.ts.map +1 -1
  1148. package/dist/server/prompts/framework-core.js +7 -10
  1149. package/dist/server/prompts/framework-core.js.map +1 -1
  1150. package/dist/server/prompts/shared-rules.d.ts +20 -2
  1151. package/dist/server/prompts/shared-rules.d.ts.map +1 -1
  1152. package/dist/server/prompts/shared-rules.js +20 -10
  1153. package/dist/server/prompts/shared-rules.js.map +1 -1
  1154. package/dist/server/realtime-token.d.ts +1 -1
  1155. package/dist/server/request-context.d.ts +26 -1
  1156. package/dist/server/request-context.d.ts.map +1 -1
  1157. package/dist/server/request-context.js +52 -2
  1158. package/dist/server/request-context.js.map +1 -1
  1159. package/dist/server/scoped-key-storage.js +1 -1
  1160. package/dist/server/scoped-key-storage.js.map +1 -1
  1161. package/dist/server/transcribe-voice.d.ts +1 -1
  1162. package/dist/settings/org-settings.d.ts +2 -0
  1163. package/dist/settings/org-settings.d.ts.map +1 -1
  1164. package/dist/settings/org-settings.js +5 -1
  1165. package/dist/settings/org-settings.js.map +1 -1
  1166. package/dist/settings/store.d.ts +6 -0
  1167. package/dist/settings/store.d.ts.map +1 -1
  1168. package/dist/settings/store.js +25 -0
  1169. package/dist/settings/store.js.map +1 -1
  1170. package/dist/shared/index.d.ts +1 -0
  1171. package/dist/shared/index.d.ts.map +1 -1
  1172. package/dist/shared/index.js +1 -0
  1173. package/dist/shared/index.js.map +1 -1
  1174. package/dist/shared/sign-in-journey.d.ts +102 -0
  1175. package/dist/shared/sign-in-journey.d.ts.map +1 -0
  1176. package/dist/shared/sign-in-journey.js +269 -0
  1177. package/dist/shared/sign-in-journey.js.map +1 -0
  1178. package/dist/styles/agent-native.css +8 -0
  1179. package/dist/templates/chat/.agents/skills/actions/SKILL.md +19 -1
  1180. package/dist/templates/chat/.agents/skills/adding-a-feature/SKILL.md +2 -0
  1181. package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +20 -6
  1182. package/dist/templates/chat/.agents/skills/security/SKILL.md +2 -0
  1183. package/dist/templates/chat/.agents/skills/self-modifying-code/SKILL.md +4 -3
  1184. package/dist/templates/chat/.agents/skills/shadcn-ui/SKILL.md +7 -3
  1185. package/dist/templates/chat/.agents/skills/sharing/SKILL.md +228 -0
  1186. package/dist/templates/chat/.agents/skills/storing-data/SKILL.md +178 -0
  1187. package/dist/templates/chat/AGENTS.md +8 -0
  1188. package/dist/templates/chat/app/entry.client.tsx +3 -0
  1189. package/dist/templates/default/.agents/skills/actions/SKILL.md +19 -1
  1190. package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +2 -0
  1191. package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +20 -6
  1192. package/dist/templates/default/.agents/skills/security/SKILL.md +2 -0
  1193. package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +4 -3
  1194. package/dist/templates/default/.agents/skills/shadcn-ui/SKILL.md +7 -3
  1195. package/dist/templates/default/AGENTS.md +68 -195
  1196. package/dist/templates/default/app/entry.client.tsx +3 -0
  1197. package/dist/templates/default/app/i18n/ar-SA.ts +8 -0
  1198. package/dist/templates/default/app/i18n/de-DE.ts +8 -0
  1199. package/dist/templates/default/app/i18n/en-US.ts +8 -0
  1200. package/dist/templates/default/app/i18n/es-ES.ts +8 -0
  1201. package/dist/templates/default/app/i18n/fr-FR.ts +8 -0
  1202. package/dist/templates/default/app/i18n/hi-IN.ts +8 -0
  1203. package/dist/templates/default/app/i18n/ja-JP.ts +8 -0
  1204. package/dist/templates/default/app/i18n/ko-KR.ts +8 -0
  1205. package/dist/templates/default/app/i18n/pt-BR.ts +8 -0
  1206. package/dist/templates/default/app/i18n/zh-CN.ts +8 -0
  1207. package/dist/templates/default/app/i18n/zh-TW.ts +8 -0
  1208. package/dist/templates/headless/.agents/skills/actions/SKILL.md +19 -1
  1209. package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +19 -1
  1210. package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +2 -0
  1211. package/dist/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +100 -0
  1212. package/dist/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +2 -1
  1213. package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +28 -0
  1214. package/dist/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +14 -1
  1215. package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +20 -6
  1216. package/dist/templates/workspace-core/.agents/skills/qa/SKILL.md +6 -3
  1217. package/dist/templates/workspace-core/.agents/skills/security/SKILL.md +2 -0
  1218. package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +4 -3
  1219. package/dist/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +7 -3
  1220. package/dist/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +91 -0
  1221. package/dist/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +60 -0
  1222. package/dist/templates/workspace-core/AGENTS.md +62 -124
  1223. package/dist/templates/workspace-root/AGENTS.md +6 -1
  1224. package/dist/triggers/dispatcher.d.ts.map +1 -1
  1225. package/dist/triggers/dispatcher.js +10 -3
  1226. package/dist/triggers/dispatcher.js.map +1 -1
  1227. package/dist/vite/client.d.ts.map +1 -1
  1228. package/dist/vite/client.js +18 -8
  1229. package/dist/vite/client.js.map +1 -1
  1230. package/docs/content/actions.mdx +33 -20
  1231. package/docs/content/agent-mentions.mdx +30 -19
  1232. package/docs/content/agent-native-toolkit.mdx +8 -6
  1233. package/docs/content/agent-resources.mdx +11 -0
  1234. package/docs/content/agent-surfaces.mdx +41 -30
  1235. package/docs/content/audit-log.mdx +78 -0
  1236. package/docs/content/authentication.mdx +7 -5
  1237. package/docs/content/automations.mdx +15 -9
  1238. package/docs/content/client.mdx +11 -11
  1239. package/docs/content/cloneable-saas.mdx +7 -1
  1240. package/docs/content/code-agents-ui.mdx +9 -1
  1241. package/docs/content/components.mdx +7 -0
  1242. package/docs/content/context-awareness.mdx +1 -0
  1243. package/docs/content/creating-templates.mdx +9 -1
  1244. package/docs/content/custom-design-system.mdx +8 -0
  1245. package/docs/content/data-programs.mdx +6 -0
  1246. package/docs/content/deployment.mdx +2 -0
  1247. package/docs/content/doctor.mdx +5 -3
  1248. package/docs/content/extensions.mdx +26 -0
  1249. package/docs/content/external-agents-catalog.mdx +533 -0
  1250. package/docs/content/external-agents.mdx +20 -514
  1251. package/docs/content/faq.mdx +2 -2
  1252. package/docs/content/file-uploads.mdx +44 -0
  1253. package/docs/content/frames.mdx +2 -2
  1254. package/docs/content/generative-ui.mdx +8 -0
  1255. package/docs/content/getting-started.mdx +45 -17
  1256. package/docs/content/human-approval.mdx +9 -0
  1257. package/docs/content/integrations.mdx +4 -3
  1258. package/docs/content/internationalization.mdx +4 -11
  1259. package/docs/content/key-concepts.mdx +1 -1
  1260. package/docs/content/local-file-mode.mdx +5 -0
  1261. package/docs/content/mcp-apps.mdx +2 -1
  1262. package/docs/content/mcp-clients.mdx +32 -1
  1263. package/docs/content/mcp-protocol.mdx +4 -3
  1264. package/docs/content/messaging-internals.mdx +328 -0
  1265. package/docs/content/messaging-recipes.mdx +194 -0
  1266. package/docs/content/messaging.mdx +9 -307
  1267. package/docs/content/multi-app-workspace.mdx +1 -1
  1268. package/docs/content/multi-tenancy.mdx +1 -0
  1269. package/docs/content/native-chat-ui.mdx +8 -0
  1270. package/docs/content/notifications.mdx +18 -20
  1271. package/docs/content/observability.mdx +1 -0
  1272. package/docs/content/onboarding.mdx +20 -6
  1273. package/docs/content/organizations-teams-permissions.mdx +99 -124
  1274. package/docs/content/package-lifecycle.mdx +19 -7
  1275. package/docs/content/progress.mdx +11 -0
  1276. package/docs/content/real-time-collaboration.mdx +44 -3
  1277. package/docs/content/recurring-jobs.mdx +14 -1
  1278. package/docs/content/security.mdx +5 -2
  1279. package/docs/content/server.mdx +2 -1
  1280. package/docs/content/sharing.mdx +22 -3
  1281. package/docs/content/skills-guide.mdx +62 -19
  1282. package/docs/content/syncing-template-changes.mdx +9 -0
  1283. package/docs/content/template-analytics-connectors.mdx +75 -0
  1284. package/docs/content/template-analytics-dashboards.mdx +106 -0
  1285. package/docs/content/template-analytics-developers.mdx +287 -0
  1286. package/docs/content/template-analytics-monitoring-and-sessions.mdx +109 -0
  1287. package/docs/content/template-analytics.mdx +21 -263
  1288. package/docs/content/template-assets-developers.mdx +456 -0
  1289. package/docs/content/template-assets-generation.mdx +147 -0
  1290. package/docs/content/template-assets-integrations.mdx +319 -0
  1291. package/docs/content/template-assets-presets.mdx +185 -0
  1292. package/docs/content/template-assets.mdx +12 -562
  1293. package/docs/content/template-brain-agent.mdx +103 -0
  1294. package/docs/content/template-brain-developers.mdx +379 -0
  1295. package/docs/content/template-brain-knowledge.mdx +50 -0
  1296. package/docs/content/template-brain-sources.mdx +163 -0
  1297. package/docs/content/template-brain.mdx +30 -390
  1298. package/docs/content/template-calendar-agent.mdx +133 -0
  1299. package/docs/content/template-calendar-booking-links.mdx +73 -0
  1300. package/docs/content/template-calendar-developers.mdx +366 -0
  1301. package/docs/content/template-calendar-scheduling.mdx +128 -0
  1302. package/docs/content/template-calendar.mdx +13 -260
  1303. package/docs/content/template-chat-developers.mdx +88 -0
  1304. package/docs/content/template-chat-first-edits.mdx +145 -0
  1305. package/docs/content/template-chat.mdx +12 -77
  1306. package/docs/content/template-clips-ai-and-editing.mdx +114 -0
  1307. package/docs/content/template-clips-capture-everywhere.mdx +120 -0
  1308. package/docs/content/template-clips-developers.mdx +373 -0
  1309. package/docs/content/template-clips-sharing-and-teams.mdx +182 -0
  1310. package/docs/content/template-clips.mdx +19 -508
  1311. package/docs/content/template-content-databases.mdx +406 -0
  1312. package/docs/content/template-content-developers.mdx +364 -0
  1313. package/docs/content/template-content-editing.mdx +60 -0
  1314. package/docs/content/template-content-sync.mdx +149 -0
  1315. package/docs/content/template-content.mdx +21 -561
  1316. package/docs/content/template-design-brand-and-figma.mdx +150 -0
  1317. package/docs/content/template-design-collaboration-and-full-apps.mdx +125 -0
  1318. package/docs/content/template-design-developers.mdx +358 -0
  1319. package/docs/content/template-design-quality-and-components.mdx +95 -0
  1320. package/docs/content/template-design.mdx +20 -344
  1321. package/docs/content/template-dispatch-developers.mdx +121 -0
  1322. package/docs/content/template-dispatch-messaging-routing.mdx +114 -0
  1323. package/docs/content/template-dispatch-operations.mdx +160 -0
  1324. package/docs/content/template-dispatch-vault-integrations.mdx +316 -0
  1325. package/docs/content/template-dispatch.mdx +24 -283
  1326. package/docs/content/template-forms-building-publishing.mdx +135 -0
  1327. package/docs/content/template-forms-developers.mdx +195 -0
  1328. package/docs/content/template-forms-responses.mdx +120 -0
  1329. package/docs/content/template-forms.mdx +21 -230
  1330. package/docs/content/template-mail-agent.mdx +114 -0
  1331. package/docs/content/template-mail-developers.mdx +356 -0
  1332. package/docs/content/template-mail-drafts-and-queue.mdx +103 -0
  1333. package/docs/content/template-mail-inbox.mdx +118 -0
  1334. package/docs/content/template-mail.mdx +23 -274
  1335. package/docs/content/template-plan-automations.mdx +213 -0
  1336. package/docs/content/template-plan-developers.mdx +703 -0
  1337. package/docs/content/template-plan-local-and-desktop.mdx +236 -0
  1338. package/docs/content/template-plan-review-workflow.mdx +180 -0
  1339. package/docs/content/template-plan.mdx +60 -910
  1340. package/docs/content/template-slides-agent.mdx +102 -0
  1341. package/docs/content/template-slides-design-and-media.mdx +94 -0
  1342. package/docs/content/template-slides-developers.mdx +488 -0
  1343. package/docs/content/template-slides-editing.mdx +56 -0
  1344. package/docs/content/template-slides.mdx +20 -362
  1345. package/docs/content/toolkit-capability-packages.mdx +38 -13
  1346. package/docs/content/toolkit-context-knowledge.mdx +49 -9
  1347. package/docs/content/toolkit-editors-canvases.mdx +72 -10
  1348. package/docs/content/toolkit-resources.mdx +16 -0
  1349. package/docs/content/toolkit-settings.mdx +3 -3
  1350. package/docs/content/toolkit-sharing.mdx +5 -7
  1351. package/docs/content/using-your-agent.mdx +25 -2
  1352. package/docs/content/voice-input.mdx +11 -7
  1353. package/docs/content/what-is-agent-native.mdx +1 -0
  1354. package/docs/content/workspace-connections.mdx +21 -11
  1355. package/docs/content/workspace-management.mdx +1 -1
  1356. package/package.json +2 -4
  1357. package/src/a2a/client.ts +4 -2
  1358. package/src/agent/action-warnings.ts +103 -0
  1359. package/src/agent/durable-background.ts +42 -5
  1360. package/src/agent/engine/ai-sdk-engine.ts +58 -6
  1361. package/src/agent/engine/anthropic-engine.ts +51 -8
  1362. package/src/agent/engine/builder-engine.ts +56 -18
  1363. package/src/agent/engine/continuation-dispatch-retry.ts +10 -9
  1364. package/src/agent/engine/credential-errors.ts +11 -0
  1365. package/src/agent/engine/error-detail.ts +39 -0
  1366. package/src/agent/engine/prompt-cache.ts +44 -0
  1367. package/src/agent/engine/registry.ts +22 -30
  1368. package/src/agent/engine/tool-call-journal-seed.ts +2 -1
  1369. package/src/agent/engine/translate-anthropic.ts +99 -0
  1370. package/src/agent/loop-settings.ts +94 -7
  1371. package/src/agent/production-agent.ts +667 -157
  1372. package/src/agent/run-loop-with-resume.ts +27 -1
  1373. package/src/agent/run-manager.ts +229 -39
  1374. package/src/agent/run-store.ts +397 -64
  1375. package/src/agent/thread-data-builder.ts +5 -1
  1376. package/src/agent/types.ts +23 -6
  1377. package/src/application-state/script-helpers.ts +5 -2
  1378. package/src/cli/agents.ts +69 -1
  1379. package/src/cli/app-skill.ts +1 -1
  1380. package/src/cli/code-agent-executor.ts +7 -3
  1381. package/src/cli/design-connect.ts +82 -8
  1382. package/src/cli/skills-content/design-visual-edit-skill.ts +169 -24
  1383. package/src/cli/templates-meta.ts +12 -0
  1384. package/src/client/AssistantChat.tsx +623 -607
  1385. package/src/client/agent-chat-adapter.ts +176 -29
  1386. package/src/client/chat/message-components.tsx +13 -0
  1387. package/src/client/embed-auth.ts +3 -1
  1388. package/src/client/integrations/IntegrationCard.tsx +41 -24
  1389. package/src/client/integrations/IntegrationsPanel.tsx +37 -21
  1390. package/src/client/integrations/webhook-url.ts +29 -0
  1391. package/src/client/org/OrgSwitcher.tsx +41 -27
  1392. package/src/client/org/RequireActiveOrg.tsx +7 -0
  1393. package/src/client/org/TeamPage.tsx +144 -14
  1394. package/src/client/org/hooks.ts +27 -0
  1395. package/src/client/org/index.ts +2 -0
  1396. package/src/client/require-session.tsx +40 -29
  1397. package/src/client/session-replay.ts +1 -1
  1398. package/src/client/settings/DemoModeSection.tsx +0 -5
  1399. package/src/client/settings/SecretsSection.tsx +47 -42
  1400. package/src/client/settings/VoiceTranscriptionSection.tsx +0 -5
  1401. package/src/client/sse-event-processor.ts +83 -8
  1402. package/src/client/use-action.ts +22 -13
  1403. package/src/client/use-agent-engine-configured.ts +36 -4
  1404. package/src/client/use-db-sync.ts +21 -1
  1405. package/src/credentials/index.ts +124 -2
  1406. package/src/deploy/build.ts +93 -30
  1407. package/src/deploy/workspace-deploy.ts +21 -16
  1408. package/src/guards/no-localhost-fallback.ts +76 -14
  1409. package/src/integrations/google-docs-poller.ts +19 -12
  1410. package/src/integrations/webhook-handler.ts +56 -33
  1411. package/src/jobs/scheduler.ts +57 -23
  1412. package/src/localization/default-messages.ts +23 -1
  1413. package/src/observability/evals.ts +7 -8
  1414. package/src/observability/traces.ts +2 -0
  1415. package/src/org/accept-pending.ts +2 -2
  1416. package/src/org/active-org.ts +73 -0
  1417. package/src/org/auto-join-domain.ts +7 -2
  1418. package/src/org/context.ts +169 -66
  1419. package/src/org/handlers.ts +148 -10
  1420. package/src/org/plugin.ts +8 -1
  1421. package/src/org/types.ts +6 -1
  1422. package/src/provider-api/index.ts +6 -1
  1423. package/src/resources/handlers.ts +2 -6
  1424. package/src/resources/script-helpers.ts +2 -1
  1425. package/src/scripts/chat/search-chats.ts +5 -2
  1426. package/src/scripts/describe-workspace-apps.ts +59 -0
  1427. package/src/scripts/resources/delete-memory.ts +5 -2
  1428. package/src/scripts/resources/delete.ts +5 -2
  1429. package/src/scripts/resources/effective.ts +5 -2
  1430. package/src/scripts/resources/list.ts +5 -2
  1431. package/src/scripts/resources/read.ts +5 -2
  1432. package/src/scripts/resources/save-memory.ts +5 -2
  1433. package/src/scripts/resources/write.ts +5 -2
  1434. package/src/server/__snapshots__/agent-chat-plugin.surface.spec.ts.snap +11 -31
  1435. package/src/server/agent-capabilities.ts +147 -0
  1436. package/src/server/agent-chat/framework-prompts.ts +11 -13
  1437. package/src/server/agent-chat/prompt-resources.ts +183 -57
  1438. package/src/server/agent-chat/script-entries.ts +20 -7
  1439. package/src/server/agent-chat-plugin.ts +27 -0
  1440. package/src/server/auth.ts +38 -32
  1441. package/src/server/core-routes-plugin.ts +229 -179
  1442. package/src/server/credential-provider.ts +196 -44
  1443. package/src/server/embed-session.ts +10 -0
  1444. package/src/server/framework-request-handler.ts +43 -0
  1445. package/src/server/google-auth-plugin.ts +13 -450
  1446. package/src/server/index.ts +4 -1
  1447. package/src/server/onboarding-html.ts +20 -56
  1448. package/src/server/open-route.ts +6 -1
  1449. package/src/server/poll.ts +1 -1
  1450. package/src/server/prompts/framework-core-compact.ts +5 -5
  1451. package/src/server/prompts/framework-core.ts +7 -9
  1452. package/src/server/prompts/shared-rules.ts +20 -9
  1453. package/src/server/request-context.ts +58 -2
  1454. package/src/server/scoped-key-storage.ts +1 -1
  1455. package/src/settings/org-settings.ts +9 -0
  1456. package/src/settings/store.ts +29 -0
  1457. package/src/shared/index.ts +13 -0
  1458. package/src/shared/sign-in-journey.ts +331 -0
  1459. package/src/styles/agent-native.css +8 -0
  1460. package/src/templates/chat/.agents/skills/actions/SKILL.md +19 -1
  1461. package/src/templates/chat/.agents/skills/adding-a-feature/SKILL.md +2 -0
  1462. package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +20 -6
  1463. package/src/templates/chat/.agents/skills/security/SKILL.md +2 -0
  1464. package/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +4 -3
  1465. package/src/templates/chat/.agents/skills/shadcn-ui/SKILL.md +7 -3
  1466. package/src/templates/chat/.agents/skills/sharing/SKILL.md +228 -0
  1467. package/src/templates/chat/.agents/skills/storing-data/SKILL.md +178 -0
  1468. package/src/templates/chat/AGENTS.md +8 -0
  1469. package/src/templates/chat/app/entry.client.tsx +3 -0
  1470. package/src/templates/default/.agents/skills/actions/SKILL.md +19 -1
  1471. package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +2 -0
  1472. package/src/templates/default/.agents/skills/frontend-design/SKILL.md +20 -6
  1473. package/src/templates/default/.agents/skills/security/SKILL.md +2 -0
  1474. package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +4 -3
  1475. package/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +7 -3
  1476. package/src/templates/default/AGENTS.md +68 -195
  1477. package/src/templates/default/app/entry.client.tsx +3 -0
  1478. package/src/templates/default/app/i18n/ar-SA.ts +8 -0
  1479. package/src/templates/default/app/i18n/de-DE.ts +8 -0
  1480. package/src/templates/default/app/i18n/en-US.ts +8 -0
  1481. package/src/templates/default/app/i18n/es-ES.ts +8 -0
  1482. package/src/templates/default/app/i18n/fr-FR.ts +8 -0
  1483. package/src/templates/default/app/i18n/hi-IN.ts +8 -0
  1484. package/src/templates/default/app/i18n/ja-JP.ts +8 -0
  1485. package/src/templates/default/app/i18n/ko-KR.ts +8 -0
  1486. package/src/templates/default/app/i18n/pt-BR.ts +8 -0
  1487. package/src/templates/default/app/i18n/zh-CN.ts +8 -0
  1488. package/src/templates/default/app/i18n/zh-TW.ts +8 -0
  1489. package/src/templates/headless/.agents/skills/actions/SKILL.md +19 -1
  1490. package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +19 -1
  1491. package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +2 -0
  1492. package/src/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +100 -0
  1493. package/src/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +2 -1
  1494. package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +28 -0
  1495. package/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +14 -1
  1496. package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +20 -6
  1497. package/src/templates/workspace-core/.agents/skills/qa/SKILL.md +6 -3
  1498. package/src/templates/workspace-core/.agents/skills/security/SKILL.md +2 -0
  1499. package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +4 -3
  1500. package/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +7 -3
  1501. package/src/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +91 -0
  1502. package/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +60 -0
  1503. package/src/templates/workspace-core/AGENTS.md +62 -124
  1504. package/src/templates/workspace-root/AGENTS.md +6 -1
  1505. package/src/triggers/dispatcher.ts +28 -17
  1506. package/src/vite/client.ts +20 -8
  1507. package/corpus/core/src/client/components/MissingKeyCard.tsx +0 -61
  1508. package/corpus/core/src/client/extensions/agent-native-extension-runtime.ts +0 -495
  1509. package/corpus/core/src/client/settings/BackgroundAgentSection.tsx +0 -193
  1510. package/corpus/core/src/client/settings/BrowserSection.tsx +0 -110
  1511. package/corpus/templates/analytics/app/components/InlineMetric.tsx +0 -31
  1512. package/corpus/templates/analytics/app/components/auth/LoginScreen.tsx +0 -4
  1513. package/corpus/templates/analytics/app/components/dashboard/CumulativeNetChart.tsx +0 -128
  1514. package/corpus/templates/analytics/app/components/dashboard/DataTable.tsx +0 -264
  1515. package/corpus/templates/analytics/app/components/dashboard/RecentActivity.tsx +0 -84
  1516. package/corpus/templates/analytics/app/components/dashboard/RevenueChart.tsx +0 -92
  1517. package/corpus/templates/analytics/app/components/dashboard/RevenueComparisonChart.tsx +0 -154
  1518. package/corpus/templates/analytics/app/components/dashboard/StatsCard.tsx +0 -49
  1519. package/corpus/templates/analytics/app/components/dashboard/TimeSeriesChart.tsx +0 -120
  1520. package/corpus/templates/analytics/server/handlers/dashboard-views.ts +0 -85
  1521. package/corpus/templates/analytics/server/handlers/user-prefs.ts +0 -58
  1522. package/corpus/templates/analytics/server/routes/api/dashboard-views/[dashboardId]/[viewId].delete.ts +0 -1
  1523. package/corpus/templates/analytics/server/routes/api/dashboard-views/[dashboardId].get.ts +0 -1
  1524. package/corpus/templates/analytics/server/routes/api/dashboard-views/[dashboardId].post.ts +0 -1
  1525. package/corpus/templates/analytics/server/routes/api/theme.get.ts +0 -17
  1526. package/corpus/templates/analytics/server/routes/api/theme.post.ts +0 -15
  1527. package/corpus/templates/analytics/server/routes/api/user-prefs/[key].delete.ts +0 -1
  1528. package/corpus/templates/analytics/server/routes/api/user-prefs/[key].get.ts +0 -1
  1529. package/corpus/templates/analytics/server/routes/api/user-prefs/[key].put.ts +0 -1
  1530. package/corpus/templates/assets/app/components/library/CreateLibraryDialog.tsx +0 -156
  1531. package/corpus/templates/assets/app/components/library/LibraryCard.tsx +0 -213
  1532. package/corpus/templates/calendar/app/components/calendar/GoogleSyncButton.tsx +0 -49
  1533. package/corpus/templates/calendar/server/routes/api/events/[id].delete.ts +0 -1
  1534. package/corpus/templates/calendar/server/routes/api/events/[id].get.ts +0 -1
  1535. package/corpus/templates/calendar/server/routes/api/events/[id].put.ts +0 -1
  1536. package/corpus/templates/content/app/components/layout/AppLayout.tsx +0 -9
  1537. package/corpus/templates/content/server/routes/api/comments/[id].delete.ts +0 -69
  1538. package/corpus/templates/content/server/routes/api/comments/[id].patch.ts +0 -109
  1539. package/corpus/templates/content/server/routes/api/documents/[id]/versions.get.ts +0 -53
  1540. package/corpus/templates/design/app/components/design/code-workbench/ActivityBar.tsx +0 -85
  1541. package/corpus/templates/design/app/components/design-system/DesignSystemCard.tsx +0 -129
  1542. package/corpus/templates/forms/app/components/layout/AppLayout.tsx +0 -9
  1543. package/corpus/templates/mail/app/components/email/SnoozePopover.tsx +0 -213
  1544. package/corpus/templates/mail/server/handlers/aliases.ts +0 -98
  1545. package/corpus/templates/mail/server/routes/api/aliases/[id].delete.ts +0 -1
  1546. package/corpus/templates/mail/server/routes/api/aliases/[id].patch.ts +0 -1
  1547. package/corpus/templates/mail/server/routes/api/aliases/index.get.ts +0 -1
  1548. package/corpus/templates/mail/server/routes/api/aliases/index.post.ts +0 -1
  1549. package/corpus/templates/mail/server/routes/api/automations/[id].delete.ts +0 -1
  1550. package/corpus/templates/mail/server/routes/api/automations/[id].patch.ts +0 -1
  1551. package/corpus/templates/mail/server/routes/api/automations/index.get.ts +0 -1
  1552. package/corpus/templates/mail/server/routes/api/automations/index.post.ts +0 -1
  1553. package/corpus/templates/mail/server/routes/api/automations/settings.get.ts +0 -22
  1554. package/corpus/templates/mail/server/routes/api/automations/settings.put.ts +0 -25
  1555. package/corpus/templates/mail/server/routes/api/scheduled-jobs/[id].delete.ts +0 -1
  1556. package/corpus/templates/mail/server/routes/api/scheduled-jobs/[id].patch.ts +0 -1
  1557. package/corpus/templates/mail/server/routes/api/scheduled-jobs/index.get.ts +0 -1
  1558. package/corpus/templates/mail/server/routes/api/scheduled-jobs/index.post.ts +0 -1
  1559. package/corpus/templates/mail/server/routes/api/settings.get.ts +0 -1
  1560. package/corpus/templates/mail/server/routes/api/settings.patch.ts +0 -1
  1561. package/corpus/templates/slides/app/components/deck/BuilderLogo.tsx +0 -22
  1562. package/corpus/templates/slides/app/components/design-system/DesignSystemPreview.tsx +0 -176
  1563. package/corpus/templates/slides/app/components/editor/GenerateSlidesDialog.tsx +0 -244
  1564. package/corpus/templates/slides/app/components/editor/ImportButton.tsx +0 -84
  1565. package/corpus/templates/slides/server/routes/api/comments/[id].delete.ts +0 -43
  1566. package/corpus/templates/slides/server/routes/api/comments/[id].patch.ts +0 -50
  1567. package/corpus/templates/slides/server/routes/api/decks/[id].delete.ts +0 -1
  1568. package/corpus/templates/slides/server/routes/api/decks/[id].get.ts +0 -1
  1569. package/corpus/templates/slides/server/routes/api/decks/[id].put.ts +0 -1
  1570. package/corpus/templates/slides/server/routes/api/decks/index.get.ts +0 -1
  1571. package/corpus/templates/slides/server/routes/api/decks/index.post.ts +0 -1
  1572. package/dist/client/components/MissingKeyCard.d.ts +0 -7
  1573. package/dist/client/components/MissingKeyCard.d.ts.map +0 -1
  1574. package/dist/client/components/MissingKeyCard.js +0 -32
  1575. package/dist/client/components/MissingKeyCard.js.map +0 -1
  1576. package/dist/client/extensions/agent-native-extension-runtime.d.ts +0 -69
  1577. package/dist/client/extensions/agent-native-extension-runtime.d.ts.map +0 -1
  1578. package/dist/client/extensions/agent-native-extension-runtime.js +0 -348
  1579. package/dist/client/extensions/agent-native-extension-runtime.js.map +0 -1
  1580. package/dist/client/settings/BackgroundAgentSection.d.ts +0 -2
  1581. package/dist/client/settings/BackgroundAgentSection.d.ts.map +0 -1
  1582. package/dist/client/settings/BackgroundAgentSection.js +0 -68
  1583. package/dist/client/settings/BackgroundAgentSection.js.map +0 -1
  1584. package/dist/client/settings/BrowserSection.d.ts +0 -2
  1585. package/dist/client/settings/BrowserSection.d.ts.map +0 -1
  1586. package/dist/client/settings/BrowserSection.js +0 -40
  1587. package/dist/client/settings/BrowserSection.js.map +0 -1
  1588. package/dist/templates/chat/.react-router/types/+server-build.d.ts +0 -18
  1589. package/dist/templates/chat/.react-router/types/app/+types/root.ts +0 -68
  1590. package/src/client/components/MissingKeyCard.tsx +0 -61
  1591. package/src/client/extensions/agent-native-extension-runtime.ts +0 -495
  1592. package/src/client/settings/BackgroundAgentSection.tsx +0 -193
  1593. package/src/client/settings/BrowserSection.tsx +0 -110
  1594. package/src/templates/chat/.react-router/types/+server-build.d.ts +0 -18
  1595. package/src/templates/chat/.react-router/types/app/+types/root.ts +0 -68
@@ -1 +1 @@
1
- {"version":3,"file":"credential-provider.js","sourceRoot":"","sources":["../../src/server/credential-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5E;;;;;;;;GAQG;AACH,MAAM,UAAU,2BAA2B,CACzC,KAAa,EACb,KAAgC,EAChC,IAA+B;IAE/B,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,CAAC,EAAE,CAAC;QACpD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC1C,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IACzC,kBAAkB,CAAS;IAC3B,iBAAiB,CAAU;IAC3B,WAAW,CAAU;IAE9B,YAAY,IAKX;QACC,KAAK,CACH,IAAI,CAAC,OAAO;YACV,gCAAgC,IAAI,CAAC,kBAAkB,yCAAyC,CACnG,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;QACxC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAClD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAChD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IACtC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAW;IACjD,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;AACvC,CAAC;AAED,MAAM,mCAAmC,GAAG,IAAI,GAAG,CAAC;IAClD,mBAAmB;IACnB,YAAY;IACZ,8BAA8B;IAC9B,qBAAqB;IACrB,gBAAgB;IAChB,iBAAiB;IACjB,oBAAoB;IACpB,kBAAkB;IAClB,sBAAsB;IACtB,8BAA8B;IAC9B,cAAc;IACd,iBAAiB;IACjB,gBAAgB;IAChB,gBAAgB;IAChB,kBAAkB;CACnB,CAAC,CAAC;AAEH,SAAS,gCAAgC,CAAC,GAAuB;IAC/D,OAAO,CAAC,CAAC,GAAG,IAAI,mCAAmC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,iCAAiC;IAC/C,IAAI,CAAC,uBAAuB,EAAE;QAAE,OAAO,IAAI,CAAC;IAC5C,OAAO,eAAe,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,wCAAwC,CACtD,GAAY;IAEZ,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;IACpC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,gCAAgC,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,wBAAwB,EAAE;QAAE,OAAO,KAAK,CAAC;IAC7C,IAAI,CAAC,uBAAuB,EAAE;QAAE,OAAO,IAAI,CAAC;IAC5C,OAAO,eAAe,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,uBAAuB,GAAG;IAC9B,qBAAqB;IACrB,oBAAoB;IACpB,iBAAiB;IACjB,kBAAkB;IAClB,kBAAkB;IAClB,sBAAsB;IACtB,4BAA4B;IAC5B,2BAA2B;IAC3B,uBAAuB;IACvB,yBAAyB;CACjB,CAAC;AAEX,SAAS,sBAAsB,CAAC,GAAW;IACzC,OAAQ,uBAA6C,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,wBAAwB;IAC/B,MAAM,gBAAgB,GAAG,OAAO,CAC9B,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAC9B,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAC7B,OAAO,CAAC,GAAG,CAAC,sBAAsB,CACnC,CAAC;IACF,OAAO,CACL,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,EAAE,CAAC;QAC5D,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,EAAE,CAAC;QACjE,gBAAgB,CACjB,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB;IAC9B,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;QACrC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;QAC7C,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;QAC5C,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;QAC9C,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,wBAAwB;YACpC,OAAO,CAAC,GAAG,CAAC,iBAAiB;YAC7B,OAAO,CAAC,GAAG,CAAC,wBAAwB;YACpC,OAAO,CAAC,GAAG,CAAC,SAAS;YACrB,OAAO,CAAC,GAAG,CAAC,MAAM,CACnB,CACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAS,+CAA+C;IACtD,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;IACpC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,mBAAmB,GAAG,uBAAuB,EAAE,CAAC;IACtD,6EAA6E;IAC7E,6EAA6E;IAC7E,6CAA6C;IAC7C,MAAM,aAAa,GACjB,CAAC,mBAAmB;QACpB,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC;IAEvE,IAAI,wBAAwB,EAAE,IAAI,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC;IAE/D,4EAA4E;IAC5E,OAAO,CAAC,mBAAmB,IAAI,eAAe,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,4BAA4B;IACnC,OAAO,aAAa,CAAC,IAAI,CACvB,OAAO,CAAC,GAAG,CAAC,qCAAqC;QAC/C,OAAO,CAAC,GAAG,CAAC,wBAAwB;QACpC,EAAE,CACL,CAAC;AACJ,CAAC;AAgCD,SAAS,2BAA2B,CAAC,KAAiC;IACpE,OAAO,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,0BAA0B,CACjC,KAAgC;IAEhC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAC/C,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAgC;IAClE,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACtE,CAAC;AAED,KAAK,UAAU,0BAA0B,CACvC,cAAqE,EACrE,KAAmC,EACnC,OAAe;IAEf,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC;QACnC,IAAI,EAAE,uBAAuB;QAC7B,KAAK;QACL,OAAO;KACR,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,CAAC,GAAW,EAAiB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC;IAC9E,OAAO;QACL,UAAU,EAAE,KAAK,CAAC,qBAAqB,CAAC;QACxC,SAAS,EAAE,KAAK,CAAC,oBAAoB,CAAC;QACtC,MAAM,EAAE,KAAK,CAAC,iBAAiB,CAAC;QAChC,OAAO,EAAE,KAAK,CAAC,kBAAkB,CAAC;QAClC,OAAO,EAAE,KAAK,CAAC,kBAAkB,CAAC;QAClC,YAAY,EAAE,KAAK,CAAC,sBAAsB,CAAC;QAC3C,iBAAiB,EAAE,KAAK,CAAC,4BAA4B,CAAC;QACtD,gBAAgB,EAAE,KAAK,CAAC,2BAA2B,CAAC;QACpD,YAAY,EAAE,0BAA0B,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACxE,aAAa,EAAE,0BAA0B,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC3E,MAAM,EAAE,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK;KACpD,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,2BAA2B,CACxC,KAAa;IAEb,IAAI,CAAC;QACH,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACnE,OAAO,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,8BAA8B,CAC3C,GAAW;IAEX,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;IACpC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,yEAAyE;IACzE,sEAAsE;IACtE,MAAM,WAAW,GAAG,4BAA4B,EAAE,CAAC;IACnD,IAAI,cAAc,GAAG,MAAM,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAEhE,sEAAsE;QACtE,iEAAiE;QACjE,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC;YACrC,GAAG;YACH,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QACH,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CACT,4BAA4B,GAAG,UAAU,KAAK,sBAAsB,CACrE,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACrD,CAAC;QAED,IAAI,KAAK,GAA8B,eAAe,EAAE,CAAC;QACzD,IAAI,SAAS,GAA0C,KAAK;YAC1D,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,MAAM,CAAC;QACX,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,MAAM,2BAA2B,CAAC,KAAK,CAAC,CAAC;YACjD,IAAI,KAAK;gBAAE,SAAS,GAAG,gBAAgB,CAAC;QAC1C,CAAC;QAED,mEAAmE;QACnE,iEAAiE;QACjE,+DAA+D;QAC/D,6DAA6D;QAC7D,mEAAmE;QACnE,IAAI,KAAK,EAAE,CAAC;YACV,cAAc,GAAG,KAAK,CAAC;YACvB,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC;gBACpC,GAAG;gBACH,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;YACH,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,WAAW,EAAE,CAAC;oBAChB,OAAO,CAAC,GAAG,CACT,4BAA4B,GAAG,UAAU,KAAK,UAAU,KAAK,cAAc,SAAS,qBAAqB,CAC1G,CAAC;gBACJ,CAAC;gBACD,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YACnD,CAAC;YAED,iEAAiE;YACjE,qEAAqE;YACrE,yEAAyE;YACzE,cAAc,GAAG,WAAW,CAAC;YAC7B,MAAM,eAAe,GAAG,MAAM,aAAa,CAAC;gBAC1C,GAAG;gBACH,KAAK,EAAE,WAAW;gBAClB,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;YACH,IAAI,eAAe,EAAE,CAAC;gBACpB,IAAI,WAAW,EAAE,CAAC;oBAChB,OAAO,CAAC,GAAG,CACT,4BAA4B,GAAG,UAAU,KAAK,UAAU,KAAK,cAAc,SAAS,2BAA2B,CAChH,CAAC;gBACJ,CAAC;gBACD,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;YAC/D,CAAC;YACD,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CACT,4BAA4B,GAAG,UAAU,KAAK,UAAU,KAAK,cAAc,SAAS,gCAAgC,CACrH,CAAC;YACJ,CAAC;QACH,CAAC;QAED,sEAAsE;QACtE,yEAAyE;QACzE,mEAAmE;QACnE,uCAAuC;QACvC,cAAc,GAAG,gBAAgB,CAAC;QAClC,MAAM,mBAAmB,GAAG,MAAM,aAAa,CAAC;YAC9C,GAAG;YACH,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE,QAAQ,KAAK,EAAE;SACzB,CAAC,CAAC;QACH,IAAI,mBAAmB,EAAE,CAAC;YACxB,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CACT,4BAA4B,GAAG,UAAU,KAAK,UAAU,KAAK,IAAI,QAAQ,cAAc,SAAS,gCAAgC,CACjI,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QACnE,CAAC;QACD,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CACT,4BAA4B,GAAG,UAAU,KAAK,UAAU,KAAK,IAAI,QAAQ,cAAc,SAAS,eAAe,KAAK,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,qBAAqB,EAAE,CACrL,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CACT,4BAA4B,GAAG,UAAU,KAAK,UAAU,cAAc,UAAW,GAAa,EAAE,OAAO,IAAI,GAAG,EAAE,CACjH,CAAC;QACJ,CAAC;QACD,8CAA8C;IAChD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAYD,KAAK,UAAU,+BAA+B;IAC5C,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;IACpC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;IAExD,MAAM,WAAW,GAAG,4BAA4B,EAAE,CAAC;IACnD,IAAI,cAAc,GAAG,MAAM,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,CACjB,KAAiC,EACjC,OAAe,EACf,KAAK,GAAG,EAAE,EACV,EAAE;YACF,IAAI,CAAC,WAAW;gBAAE,OAAO;YACzB,OAAO,CAAC,GAAG,CACT,8BAA8B,KAAK,CAAC,MAAM,YAAY,OAAO,UAAU,KAAK,GAAG,KAAK,aAAa,2BAA2B,CAAC,KAAK,CAAC,YAAY,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAC9M,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,MAAM,0BAA0B,CAChD,cAAc,EACd,MAAM,EACN,KAAK,CACN,CAAC;QACF,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC7B,IAAI,2BAA2B,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QACnD,CAAC;QAED,IAAI,KAAK,GAA8B,eAAe,EAAE,CAAC;QACzD,IAAI,SAAS,GAA0C,KAAK;YAC1D,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,MAAM,CAAC;QACX,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,MAAM,2BAA2B,CAAC,KAAK,CAAC,CAAC;YACjD,IAAI,KAAK;gBAAE,SAAS,GAAG,gBAAgB,CAAC;QAC1C,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,cAAc,GAAG,KAAK,CAAC;YACvB,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAC/C,cAAc,EACd,KAAK,EACL,KAAK,CACN,CAAC;YACF,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,cAAc,SAAS,EAAE,CAAC,CAAC;YACvD,IAAI,2BAA2B,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;YAClD,CAAC;YAED,cAAc,GAAG,WAAW,CAAC;YAC7B,MAAM,cAAc,GAAG,MAAM,0BAA0B,CACrD,cAAc,EACd,WAAW,EACX,KAAK,CACN,CAAC;YACF,UAAU,CAAC,cAAc,EAAE,KAAK,EAAE,cAAc,SAAS,EAAE,CAAC,CAAC;YAC7D,IAAI,2BAA2B,CAAC,cAAc,CAAC,EAAE,CAAC;gBAChD,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;YACxD,CAAC;QACH,CAAC;QAED,yEAAyE;QACzE,qEAAqE;QACrE,yBAAyB;QACzB,cAAc,GAAG,gBAAgB,CAAC;QAClC,MAAM,WAAW,GAAG,QAAQ,KAAK,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,MAAM,0BAA0B,CAChD,cAAc,EACd,WAAW,EACX,WAAW,CACZ,CAAC;QACF,UAAU,CACR,SAAS,EACT,WAAW,EACX,UAAU,KAAK,IAAI,QAAQ,cAAc,SAAS,EAAE,CACrD,CAAC;QACF,IAAI,2BAA2B,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QACnD,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CACT,8BAA8B,KAAK,UAAU,cAAc,sBAAuB,GAAa,EAAE,OAAO,IAAI,GAAG,EAAE,CAClH,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAC7C,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AAC9C,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,GAAW;IAEX,MAAM,MAAM,GAAG,MAAM,8BAA8B,CAAC,GAAG,CAAC,CAAC;IACzD,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC;IAChC,IAAI,CAAC,+CAA+C,EAAE;QAAE,OAAO,IAAI,CAAC;IACpE,OAAO,uBAAuB,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAC5C,OAAO,wBAAwB,CAAC,qBAAqB,CAAC,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAC5C,MAAM,GAAG,GAAG,MAAM,wBAAwB,EAAE,CAAC;IAC7C,OAAO,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B;IAC/C,OAAO,CAAC,CAAC,CAAC,MAAM,wBAAwB,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mCAAmC;IACvD,MAAM,KAAK,GAAG,MAAM,yBAAyB,EAAE,CAAC;IAChD,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B;IAClD,MAAM,QAAQ,GAAG,MAAM,iCAAiC,EAAE,CAAC;IAC3D,OAAO,QAAQ,CAAC,MAAM,CAAC;AACzB,CAAC;AAsBD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,iCAAiC;IACrD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,GACnC,MAAM,+BAA+B,EAAE,CAAC;IAC1C,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,EACJ,UAAU,EACV,SAAS,EACT,MAAM,EACN,OAAO,EACP,OAAO,EACP,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,MAAM,GACP,GAAG,MAAM,CAAC;QACX,OAAO;YACL,UAAU;YACV,SAAS;YACT,MAAM;YACN,OAAO;YACP,OAAO;YACP,YAAY;YACZ,iBAAiB;YACjB,gBAAgB;YAChB,YAAY;YACZ,aAAa;YACb,MAAM;YACN,YAAY,EAAE,KAAK;SACpB,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,+CAA+C,EAAE,CAAC;IACpE,MAAM,UAAU,GAAG,SAAS;QAC1B,CAAC,CAAC,CAAC,uBAAuB,CAAC,qBAAqB,CAAC,IAAI,IAAI,CAAC;QAC1D,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,SAAS,GAAG,SAAS;QACzB,CAAC,CAAC,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC;QACzD,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,MAAM,GAAG,SAAS;QACtB,CAAC,CAAC,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC;QACtD,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,OAAO,GAAG,SAAS;QACvB,CAAC,CAAC,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC;QACvD,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,OAAO,GAAG,SAAS;QACvB,CAAC,CAAC,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC;QACvD,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,YAAY,GAAG,SAAS;QAC5B,CAAC,CAAC,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,IAAI,IAAI,CAAC;QAC3D,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,iBAAiB,GAAG,SAAS;QACjC,CAAC,CAAC,CAAC,uBAAuB,CAAC,4BAA4B,CAAC,IAAI,IAAI,CAAC;QACjE,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,gBAAgB,GAAG,SAAS;QAChC,CAAC,CAAC,CAAC,uBAAuB,CAAC,2BAA2B,CAAC,IAAI,IAAI,CAAC;QAChE,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,YAAY,GAAG,SAAS;QAC5B,CAAC,CAAC,0BAA0B,CACxB,uBAAuB,CAAC,uBAAuB,CAAC,CACjD;QACH,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,aAAa,GAAG,SAAS;QAC7B,CAAC,CAAC,0BAA0B,CACxB,uBAAuB,CAAC,yBAAyB,CAAC,CACnD;QACH,CAAC,CAAC,IAAI,CAAC;IACT,OAAO;QACL,UAAU;QACV,SAAS;QACT,MAAM;QACN,OAAO;QACP,OAAO;QACP,YAAY;QACZ,iBAAiB;QACjB,gBAAgB;QAChB,YAAY;QACZ,aAAa;QACb,MAAM,EAAE,SAAS,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;QAC9C,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAY7C,MAAM,EACJ,UAAU,EACV,SAAS,EACT,MAAM,EACN,OAAO,EACP,OAAO,EACP,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,aAAa,GACd,GAAG,MAAM,iCAAiC,EAAE,CAAC;IAC9C,OAAO;QACL,UAAU;QACV,SAAS;QACT,MAAM;QACN,OAAO;QACP,OAAO;QACP,YAAY;QACZ,iBAAiB;QACjB,gBAAgB;QAChB,YAAY;QACZ,aAAa;KACd,CAAC;AACJ,CAAC;AAED,MAAM,mCAAmC,GAAG,uBAAuB,CAAC;AACpE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAY1D,MAAM,UAAU,4BAA4B,CAC1C,UAA0B,EAC1B,SAAyB;IAEzB,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC3C,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,UAAU,CAAC;SAClB,MAAM,CAAC,IAAI,CAAC;SACZ,MAAM,CAAC,SAAS,CAAC;SACjB,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAmB;IACvD,OAAO,GAAG,mCAAmC,GAAG,WAAW,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,KAAK,GAGD,EAAE;IAEN,MAAM,WAAW,GAAG,4BAA4B,CAC9C,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,SAAS,CAChB,CAAC;IACF,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,4BAA4B,CAAC,WAAW,CAAC,CAAC;QAC7D,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,MAAM,EAAE,GAAG,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5D,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,2BAA2B,EAAE,CAAC;YAClD,IAAI,OAAO,QAAQ,CAAC,aAAa,KAAK,UAAU,EAAE,CAAC;gBACjD,MAAM,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC3D,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO;YACL,WAAW;YACX,OAAO,EACL,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO;gBAC5C,CAAC,CAAC,GAAG,CAAC,OAAO;gBACb,CAAC,CAAC,mEAAmE;YACzE,MAAM,EAAE,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YAC/D,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YACzD,EAAE;YACF,UAAU,EACR,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;YACjE,KAAK,EAAE,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;SAC7D,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kCAAkC,CAAC,OAIxD;IACC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,yBAAyB,EAAE,CAAC;QAChD,MAAM,WAAW,GAAG,4BAA4B,CAC9C,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,SAAS,CAChB,CAAC;QACF,IAAI,CAAC,WAAW;YAAE,OAAO;QACzB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC5D,MAAM,UAAU,CAAC,4BAA4B,CAAC,WAAW,CAAC,EAAE;YAC1D,WAAW;YACX,OAAO,EACL,OAAO,EAAE,OAAO;gBAChB,mEAAmE;YACrE,GAAG,CAAC,OAAO,OAAO,EAAE,MAAM,KAAK,QAAQ,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;YACtE,GAAG,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;YAC5C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,UAAU,EAAE,mBAAmB,EAAE,IAAI,IAAI;YACzC,KAAK,EAAE,eAAe,EAAE,IAAI,IAAI;SACjC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;IAC3E,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iCAAiC,CAAC,KAGvD;IACC,MAAM,WAAW,GAAG,4BAA4B,CAC9C,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,SAAS,CAChB,CAAC;IACF,IAAI,CAAC,WAAW;QAAE,OAAO;IACzB,IAAI,CAAC;QACH,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC/D,MAAM,aAAa,CAAC,4BAA4B,CAAC,WAAW,CAAC,CAAC,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,qEAAqE;IACvE,CAAC;AACH,CAAC;AAED,MAAM,oCAAoC,GAAG,wBAAwB,CAAC;AACtE,4FAA4F;AAC5F,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAa3D,MAAM,UAAU,6BAA6B,CAC3C,GAAmB,EACnB,KAAqB;IAErB,MAAM,aAAa,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChD,MAAM,eAAe,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IACtC,IAAI,CAAC,aAAa,IAAI,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IACpD,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,aAAa,CAAC;SACrB,MAAM,CAAC,IAAI,CAAC;SACZ,MAAM,CAAC,eAAe,CAAC;SACvB,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,6BAA6B,CAAC,WAAmB;IACxD,OAAO,GAAG,oCAAoC,GAAG,WAAW,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gCAAgC,CAAC,IAGtD;IACC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IACjD,MAAM,WAAW,GAAG,6BAA6B,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACnE,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,6BAA6B,CAAC,WAAW,CAAC,CAAC;QAC9D,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,IAAI,GAAG,CAAC,WAAW,KAAK,WAAW;YAAE,OAAO,IAAI,CAAC;QACjD,MAAM,EAAE,GAAG,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5D,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,4BAA4B,EAAE,CAAC;YACnD,IAAI,OAAO,QAAQ,CAAC,aAAa,KAAK,UAAU,EAAE,CAAC;gBACjD,MAAM,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC3D,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO;YACL,WAAW;YACX,GAAG,EACD,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,GAAG;gBACpC,CAAC,CAAC,GAAG,CAAC,GAAG;gBACT,CAAC,CAAC,GAAG,IAAI,sBAAsB;YACnC,OAAO,EACL,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO;gBAC5C,CAAC,CAAC,GAAG,CAAC,OAAO;gBACb,CAAC,CAAC,gDAAgD;YACtD,MAAM,EAAE,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YAC/D,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YACzD,EAAE;YACF,UAAU,EACR,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;YACjE,KAAK,EAAE,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;SAC7D,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mCAAmC,CAAC,IAMzD;IACC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,6BAA6B,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,WAAW;YAAE,OAAO;QACzB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC5D,MAAM,UAAU,CAAC,6BAA6B,CAAC,WAAW,CAAC,EAAE;YAC3D,WAAW;YACX,GAAG;YACH,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,gDAAgD;YACzE,GAAG,CAAC,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/D,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YACrC,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,UAAU,EAAE,mBAAmB,EAAE,IAAI,IAAI;YACzC,KAAK,EAAE,eAAe,EAAE,IAAI,IAAI;SACjC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;IAC3E,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kCAAkC,CAAC,IAGxD;IACC,MAAM,WAAW,GAAG,6BAA6B,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACxE,IAAI,CAAC,WAAW;QAAE,OAAO;IACzB,IAAI,CAAC;QACH,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC/D,MAAM,aAAa,CAAC,6BAA6B,CAAC,WAAW,CAAC,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,uEAAuE;IACzE,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,KAAa,EACb,KAWC,EACD,OAAyD;IAEzD,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IACzC,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CACb,uKAAuK,CACxK,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,GACvC,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,2BAA2B,CACxC,KAAK,EACL,OAAO,EAAE,KAAK,IAAI,IAAI,EACtB,OAAO,EAAE,IAAI,IAAI,IAAI,CACtB,CAAC;IAEF,yEAAyE;IACzE,8CAA8C;IAC9C,MAAM,QAAQ,GAA4B,uBAAuB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAC5E,eAAe,CAAC;QACd,GAAG;QACH,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CACnB,CAAC;IACF,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;QAC3B,KAAK,MAAM,GAAG,IAAI,uBAAuB,EAAE,CAAC;YAC1C,QAAQ,CAAC,IAAI,CACX,eAAe,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CACxE,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE5B,MAAM,OAAO,GAA0C;QACrD,EAAE,GAAG,EAAE,qBAAqB,EAAE,KAAK,EAAE,UAAU,EAAE;QACjD,EAAE,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,SAAS,EAAE;KAChD,CAAC;IACF,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,sBAAsB,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC;YACX,GAAG,EAAE,4BAA4B;YACjC,KAAK,EAAE,KAAK,CAAC,iBAAiB;SAC/B,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC;YACX,GAAG,EAAE,2BAA2B;YAChC,KAAK,EAAE,KAAK,CAAC,gBAAgB;SAC9B,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC;YACX,GAAG,EAAE,uBAAuB;YAC5B,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC;YACX,GAAG,EAAE,yBAAyB;YAC9B,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC;SACnC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAC7B,cAAc,CAAC;QACb,GAAG;QACH,KAAK;QACL,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CACH,CACF,CAAC;IACF,MAAM,iCAAiC,CAAC;QACtC,UAAU;QACV,SAAS;KACV,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,KAAa,EACb,OAAyD;IAEzD,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,2BAA2B,CACxC,KAAK,EACL,OAAO,EAAE,KAAK,IAAI,IAAI,EACtB,OAAO,EAAE,IAAI,IAAI,IAAI,CACtB,CAAC;IACF,MAAM,OAAO,CAAC,GAAG,CACf,uBAAuB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAClC,eAAe,CAAC;QACd,GAAG;QACH,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CACnB,CACF,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,2CAA2C;AAC3C,EAAE;AACF,0EAA0E;AAC1E,wEAAwE;AACxE,0EAA0E;AAC1E,4EAA4E;AAC5E,8EAA8E;AAC9E,+DAA+D;AAC/D,gFAAgF;AAChF,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW;IAC7C,MAAM,WAAW,GAAG,4BAA4B,EAAE,CAAC;IACnD,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;IACpC,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC;YACH,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;YAChE,2BAA2B;YAC3B,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC;gBACrC,GAAG;gBACH,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;YACH,IAAI,UAAU,EAAE,KAAK,EAAE,CAAC;gBACtB,IAAI,WAAW,EAAE,CAAC;oBAChB,OAAO,CAAC,GAAG,CACT,wBAAwB,GAAG,UAAU,KAAK,sBAAsB,CACjE,CAAC;gBACJ,CAAC;gBACD,OAAO,UAAU,CAAC,KAAK,CAAC;YAC1B,CAAC;YAED,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;YAChC,IAAI,KAAK,EAAE,CAAC;gBACV,kEAAkE;gBAClE,2CAA2C;gBAC3C,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC;oBACpC,GAAG;oBACH,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,KAAK;iBACf,CAAC,CAAC;gBACH,IAAI,SAAS,EAAE,KAAK,EAAE,CAAC;oBACrB,IAAI,WAAW,EAAE,CAAC;wBAChB,OAAO,CAAC,GAAG,CACT,wBAAwB,GAAG,UAAU,KAAK,UAAU,KAAK,qBAAqB,CAC/E,CAAC;oBACJ,CAAC;oBACD,OAAO,SAAS,CAAC,KAAK,CAAC;gBACzB,CAAC;gBAED,6DAA6D;gBAC7D,mEAAmE;gBACnE,4BAA4B;gBAC5B,MAAM,eAAe,GAAG,MAAM,aAAa,CAAC;oBAC1C,GAAG;oBACH,KAAK,EAAE,WAAW;oBAClB,OAAO,EAAE,KAAK;iBACf,CAAC,CAAC;gBACH,IAAI,eAAe,EAAE,KAAK,EAAE,CAAC;oBAC3B,IAAI,WAAW,EAAE,CAAC;wBAChB,OAAO,CAAC,GAAG,CACT,wBAAwB,GAAG,UAAU,KAAK,UAAU,KAAK,2BAA2B,CACrF,CAAC;oBACJ,CAAC;oBACD,OAAO,eAAe,CAAC,KAAK,CAAC;gBAC/B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,mBAAmB,GAAG,MAAM,aAAa,CAAC;oBAC9C,GAAG;oBACH,KAAK,EAAE,WAAW;oBAClB,OAAO,EAAE,QAAQ,KAAK,EAAE;iBACzB,CAAC,CAAC;gBACH,IAAI,mBAAmB,EAAE,KAAK,EAAE,CAAC;oBAC/B,IAAI,WAAW,EAAE,CAAC;wBAChB,OAAO,CAAC,GAAG,CACT,wBAAwB,GAAG,UAAU,KAAK,gCAAgC,CAC3E,CAAC;oBACJ,CAAC;oBACD,OAAO,mBAAmB,CAAC,KAAK,CAAC;gBACnC,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CACT,wBAAwB,GAAG,UAAU,KAAK,oBAAqB,GAAa,EAAE,OAAO,IAAI,GAAG,EAAE,CAC/F,CAAC;YACJ,CAAC;YACD,8CAA8C;QAChD,CAAC;QACD,4EAA4E;QAC5E,6EAA6E;QAC7E,4EAA4E;QAC5E,8DAA8D;QAC9D,MAAM,WAAW,GAAG,CAClB,sBAAsB,CAAC,GAAG,CAAC;YACzB,CAAC,CAAC,+CAA+C,EAAE;YACnD,CAAC,CAAC,wCAAwC,CAAC,GAAG,CAAC,CAClD;YACC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI;YAC1B,CAAC,CAAC,IAAI,CAAC;QACT,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CACT,wBAAwB,GAAG,UAAU,KAAK,UAAU,eAAe,EAAE,IAAI,QAAQ,UAAU,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,CAAC,WAAW,EAAE,CACxJ,CAAC;QACJ,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,uEAAuE;IACvE,mDAAmD;IACnD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACvC,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CACT,wBAAwB,GAAG,yCAAyC,CAAC,CAAC,KAAK,EAAE,CAC9E,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8EAA8E;AAC9E,uEAAuE;AACvE,iEAAiE;AACjE,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAC3C,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,qBAAqB;IACnC,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,oBAAoB;QAChC,OAAO,CAAC,GAAG,CAAC,QAAQ;QACpB,OAAO,CAAC,GAAG,CAAC,gBAAgB;QAC5B,wBAAwB,CACzB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,wBAAwB;QACpC,gDAAgD,CACjD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gCAAgC;IAC9C,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,iCAAiC;QAC7C,+CAA+C,CAChD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B;IACxC,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,2BAA2B;QACvC,mDAAmD,CACpD,CAAC;AACJ,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,oBAAoB;IAClC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAC5C,OAAO,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACtC,CAAC","sourcesContent":["/**\n * Credential provider abstraction.\n *\n * Every feature that needs an external credential (Anthropic API key,\n * Google OAuth tokens, OpenAI key, Slack bot token, etc.) should go through\n * one of the resolve*() helpers here instead of reading `process.env`\n * directly. That way the same feature can work in three modes:\n *\n * 1. User set their own key in .env → use it directly\n * 2. User connected Builder via `/cli-auth` → route through Builder proxy\n * 3. Neither → throw FeatureNotConfigured\n *\n * Templates catch FeatureNotConfigured and show a \"Connect Builder (1 click) /\n * set up your own key (guide)\" card.\n *\n * Today these helpers are used by the Builder-hosted LLM gateway, and the\n * shape is meant to grow to cover future managed credential integrations\n * (e.g. additional Builder-hosted services) without rewrites.\n */\n\nimport { createHash } from \"node:crypto\";\n\nimport { isLocalDatabase } from \"../db/client.js\";\nimport { getRequestUserEmail, getRequestOrgId } from \"./request-context.js\";\n\n/**\n * Decide which `app_secrets` scope a Builder/credential write should use.\n *\n * Org scope (\"everyone in this org sees these credentials\") wins when the\n * connecting user is an owner or admin of an active org — the write\n * privileges shared infra. A plain member or a user without an active\n * org falls through to per-user scope so a teammate can't silently\n * overwrite the org-shared connection.\n */\nexport function resolveCredentialWriteScope(\n email: string,\n orgId: string | null | undefined,\n role: string | null | undefined,\n): { scope: \"user\" | \"org\"; scopeId: string } {\n if (orgId && (role === \"owner\" || role === \"admin\")) {\n return { scope: \"org\", scopeId: orgId };\n }\n return { scope: \"user\", scopeId: email };\n}\n\nexport class FeatureNotConfiguredError extends Error {\n readonly requiredCredential: string;\n readonly builderConnectUrl?: string;\n readonly byokDocsUrl?: string;\n\n constructor(opts: {\n requiredCredential: string;\n message?: string;\n builderConnectUrl?: string;\n byokDocsUrl?: string;\n }) {\n super(\n opts.message ??\n `Feature requires credential \"${opts.requiredCredential}\". Connect Builder or set your own key.`,\n );\n this.name = \"FeatureNotConfiguredError\";\n this.requiredCredential = opts.requiredCredential;\n this.builderConnectUrl = opts.builderConnectUrl;\n this.byokDocsUrl = opts.byokDocsUrl;\n }\n}\n\n/**\n * Deployment-level credential fallback for single-tenant/local operation.\n * Multi-tenant call sites must gate this explicitly before calling.\n */\nexport function readDeployCredentialEnv(key: string): string | undefined {\n return process.env[key] || undefined;\n}\n\nconst APP_PROVIDED_DEPLOY_CREDENTIAL_KEYS = new Set([\n \"ANTHROPIC_API_KEY\",\n \"EMAIL_FROM\",\n \"EMAIL_INBOUND_WEBHOOK_SECRET\",\n \"EMAIL_AGENT_ADDRESS\",\n \"OPENAI_API_KEY\",\n \"OPENAI_BASE_URL\",\n \"OPENROUTER_API_KEY\",\n \"GOOGLE_CLIENT_ID\",\n \"GOOGLE_CLIENT_SECRET\",\n \"GOOGLE_GENERATIVE_AI_API_KEY\",\n \"GROQ_API_KEY\",\n \"MISTRAL_API_KEY\",\n \"COHERE_API_KEY\",\n \"RESEND_API_KEY\",\n \"SENDGRID_API_KEY\",\n]);\n\nfunction isAppProvidedDeployCredentialKey(key: string | undefined): boolean {\n return !!key && APP_PROVIDED_DEPLOY_CREDENTIAL_KEYS.has(key);\n}\n\n/**\n * Deployment-level credentials are safe as a runtime fallback only in local /\n * single-tenant contexts. In hosted production with a shared database, every\n * signed-in user needs their own user/org/workspace credential for\n * identity-bearing provider keys so one deploy key does not silently\n * impersonate another tenant. App-provided service credentials are different:\n * they configure the deployed app itself rather than identifying a user. This\n * includes LLM keys that let the app developer pay for model usage, email\n * transport configuration owned by the deployment, and OAuth client\n * credentials whose per-user identity remains in scoped OAuth tokens. Key-aware\n * callers may use those env vars.\n *\n * @deprecated Use `canUseDeployCredentialFallbackForRequest()` for generic\n * provider secrets. This stricter helper remains for legacy call sites with\n * identity-bearing deploy credentials.\n */\nexport function isDeployCredentialFallbackAllowed(): boolean {\n if (!isProductionLikeRuntime()) return true;\n return isLocalDatabase();\n}\n\nexport function canUseDeployCredentialFallbackForRequest(\n key?: string,\n): boolean {\n const email = getRequestUserEmail();\n if (!email) return true;\n if (isAppProvidedDeployCredentialKey(key)) return true;\n if (isHostedWorkspaceRuntime()) return false;\n if (!isProductionLikeRuntime()) return true;\n return isLocalDatabase();\n}\n\nconst BUILDER_CREDENTIAL_KEYS = [\n \"BUILDER_PRIVATE_KEY\",\n \"BUILDER_PUBLIC_KEY\",\n \"BUILDER_USER_ID\",\n \"BUILDER_ORG_NAME\",\n \"BUILDER_ORG_KIND\",\n \"BUILDER_SUBSCRIPTION\",\n \"BUILDER_SUBSCRIPTION_LEVEL\",\n \"BUILDER_SUBSCRIPTION_NAME\",\n \"BUILDER_IS_ENTERPRISE\",\n \"BUILDER_IS_FREE_ACCOUNT\",\n] as const;\n\nfunction isBuilderCredentialKey(key: string): boolean {\n return (BUILDER_CREDENTIAL_KEYS as readonly string[]).includes(key);\n}\n\nfunction isHostedWorkspaceRuntime(): boolean {\n const hasFusionPreview = Boolean(\n process.env.FUSION_ENVIRONMENT ||\n process.env.FUSION_ENV_ORIGIN ||\n process.env.VITE_FUSION_ENV_ORIGIN,\n );\n return (\n /^(1|true)$/i.test(process.env.AGENT_NATIVE_WORKSPACE ?? \"\") ||\n /^(1|true)$/i.test(process.env.VITE_AGENT_NATIVE_WORKSPACE ?? \"\") ||\n hasFusionPreview\n );\n}\n\nfunction isProductionLikeRuntime(): boolean {\n return (\n process.env.NODE_ENV === \"production\" ||\n /^(1|true)$/i.test(process.env.NETLIFY ?? \"\") ||\n /^(1|true)$/i.test(process.env.VERCEL ?? \"\") ||\n /^(1|true)$/i.test(process.env.CF_PAGES ?? \"\") ||\n Boolean(\n process.env.AWS_LAMBDA_FUNCTION_NAME ||\n process.env.AWS_EXECUTION_ENV ||\n process.env.FUNCTIONS_WORKER_RUNTIME ||\n process.env.K_SERVICE ||\n process.env.RENDER,\n )\n );\n}\n\n/**\n * Whether deployment-level Builder env keys may back the current request.\n *\n * This is intentionally self-contained rather than delegating to\n * `canUseDeployCredentialFallbackForRequest`. That generic helper blocks the\n * deploy fallback for any signed-in user in a hosted workspace runtime, so the\n * Builder dogfooding escape hatch must apply its own hosted-workspace exception\n * here instead of inheriting the generic helper's stricter (and hatch-unaware)\n * decision. Reading the env once into locals keeps the rules legible.\n *\n * Rules (all evaluated against the live request/runtime, not a build-time value):\n * - No signed-in user → safe to use the deploy env (nobody to mis-identify).\n * - Hosted workspace + signed-in user → deploy-level Builder keys would\n * impersonate that user, so block them — UNLESS a developer has explicitly\n * opted into the local dogfooding escape hatch (non-prod only). Default OFF;\n * hosted/shared production deployments are never affected.\n * - Otherwise → allowed in non-prod, or on a local/single-tenant database.\n */\nfunction canUseBuilderDeployCredentialFallbackForRequest(): boolean {\n const email = getRequestUserEmail();\n if (!email) return true;\n\n const isProductionRuntime = isProductionLikeRuntime();\n // Local dogfooding escape hatch: lets the env / root-`.env` Builder key back\n // a signed-in user so running the app locally doesn't require completing the\n // Builder connect flow first. Non-prod only.\n const localDevOptIn =\n !isProductionRuntime &&\n /^(1|true)$/i.test(process.env.AGENT_NATIVE_LOCAL_BUILDER_ENV ?? \"\");\n\n if (isHostedWorkspaceRuntime() && !localDevOptIn) return false;\n\n // Deploy fallback is safe in non-prod or on a local/single-tenant database.\n return !isProductionRuntime || isLocalDatabase();\n}\n\nfunction shouldTraceCredentialResolve(): boolean {\n return /^(1|true)$/i.test(\n process.env.AGENT_NATIVE_DEBUG_CREDENTIAL_RESOLVE ??\n process.env.DEBUG_CREDENTIAL_RESOLVE ??\n \"\",\n );\n}\n\n// ---------------------------------------------------------------------------\n// Builder credential resolution:\n//\n// 1. **Request-scoped credentials.** A signed-in user can connect Builder\n// through the CLI-auth flow. Owner/admin connections land at org scope;\n// member/no-org connections land at user scope.\n//\n// 2. **Deployment fallback.** BUILDER_PRIVATE_KEY in env still makes local\n// and single-tenant deploys work out of the box, but it no longer blocks\n// per-user connect. Request-scoped credentials win whenever present.\n//\n// To run multi-tenant SaaS: prefer leaving BUILDER_PRIVATE_KEY unset unless a\n// shared fallback identity is intentional.\n// ---------------------------------------------------------------------------\n\ntype BuilderCredentialSource = \"user\" | \"org\" | \"workspace\" | \"env\";\ninterface BuilderResolvedCredentials {\n privateKey: string | null;\n publicKey: string | null;\n userId: string | null;\n orgName: string | null;\n orgKind: string | null;\n subscription: string | null;\n subscriptionLevel: string | null;\n subscriptionName: string | null;\n isEnterprise: boolean | null;\n isFreeAccount: boolean | null;\n source: Exclude<BuilderCredentialSource, \"env\">;\n}\n\nfunction isCompleteBuilderConnection(creds: BuilderResolvedCredentials) {\n return Boolean(creds.privateKey && creds.publicKey);\n}\n\nfunction readOptionalBuilderBoolean(\n value: string | null | undefined,\n): boolean | null {\n if (value == null || value === \"\") return null;\n return /^(1|true)$/i.test(value);\n}\n\nexport function isBuilderPrivateKey(value: string | null | undefined): boolean {\n return typeof value === \"string\" && value.trim().startsWith(\"bpk-\");\n}\n\nasync function readBuilderCredentialScope(\n readAppSecrets: typeof import(\"../secrets/storage.js\").readAppSecrets,\n scope: \"user\" | \"org\" | \"workspace\",\n scopeId: string,\n): Promise<BuilderResolvedCredentials> {\n const secrets = await readAppSecrets({\n keys: BUILDER_CREDENTIAL_KEYS,\n scope,\n scopeId,\n });\n const value = (key: string): string | null => secrets.get(key)?.value ?? null;\n return {\n privateKey: value(\"BUILDER_PRIVATE_KEY\"),\n publicKey: value(\"BUILDER_PUBLIC_KEY\"),\n userId: value(\"BUILDER_USER_ID\"),\n orgName: value(\"BUILDER_ORG_NAME\"),\n orgKind: value(\"BUILDER_ORG_KIND\"),\n subscription: value(\"BUILDER_SUBSCRIPTION\"),\n subscriptionLevel: value(\"BUILDER_SUBSCRIPTION_LEVEL\"),\n subscriptionName: value(\"BUILDER_SUBSCRIPTION_NAME\"),\n isEnterprise: readOptionalBuilderBoolean(value(\"BUILDER_IS_ENTERPRISE\")),\n isFreeAccount: readOptionalBuilderBoolean(value(\"BUILDER_IS_FREE_ACCOUNT\")),\n source: scope === \"workspace\" ? \"workspace\" : scope,\n };\n}\n\n/**\n * A transient org_members read failure makes getOrgContext report no org, which\n * would otherwise hide an org-scoped Builder connection behind a permanent-\n * sounding \"not configured\" error. resolveOrgIdForEmail honors an explicit\n * Personal selection, so this cannot promote a user into an org they left.\n */\nasync function resolveOrgIdForRequestEmail(\n email: string,\n): Promise<string | null> {\n try {\n const { resolveOrgIdForEmail } = await import(\"../org/context.js\");\n return await resolveOrgIdForEmail(email);\n } catch {\n return null;\n }\n}\n\nasync function resolveScopedBuilderCredential(\n key: string,\n): Promise<{ value: string; source: \"user\" | \"org\" | \"workspace\" } | null> {\n const email = getRequestUserEmail();\n if (!email) return null;\n\n // Trace only when explicitly requested. These diagnostics are useful for\n // support, but they include account identifiers and run on hot paths.\n const traceLookup = shouldTraceCredentialResolve();\n let scopeAttempted = \"user\";\n try {\n const { readAppSecret } = await import(\"../secrets/storage.js\");\n\n // 1. Per-user override: a user can paste their own key in settings to\n // overrule the org-shared one (handy for a personal sandbox).\n const userSecret = await readAppSecret({\n key,\n scope: \"user\",\n scopeId: email,\n });\n if (userSecret) {\n if (traceLookup) {\n console.log(\n `[builder-credential] key=${key} email=${email} scope=user hit=true`,\n );\n }\n return { value: userSecret.value, source: \"user\" };\n }\n\n let orgId: string | null | undefined = getRequestOrgId();\n let orgSource: \"request\" | \"email-fallback\" | \"none\" = orgId\n ? \"request\"\n : \"none\";\n if (!orgId) {\n orgId = await resolveOrgIdForRequestEmail(email);\n if (orgId) orgSource = \"email-fallback\";\n }\n\n // 2. Per-org shared credential: when one teammate connects Builder\n // as an owner/admin we write the OAuth result at org scope so\n // every member of that org gets the AI chat working without\n // re-running the connect flow. Resolution falls back here\n // silently — the caller never has to know which scope answered.\n if (orgId) {\n scopeAttempted = \"org\";\n const orgSecret = await readAppSecret({\n key,\n scope: \"org\",\n scopeId: orgId,\n });\n if (orgSecret) {\n if (traceLookup) {\n console.log(\n `[builder-credential] key=${key} email=${email} orgId=${orgId} orgSource=${orgSource} scope=org hit=true`,\n );\n }\n return { value: orgSecret.value, source: \"org\" };\n }\n\n // Older setup flows wrote shared credentials at workspace scope.\n // Keep reading those rows so status UIs and runtime resolution agree\n // for users who connected before org-scoped Builder credentials existed.\n scopeAttempted = \"workspace\";\n const workspaceSecret = await readAppSecret({\n key,\n scope: \"workspace\",\n scopeId: orgId,\n });\n if (workspaceSecret) {\n if (traceLookup) {\n console.log(\n `[builder-credential] key=${key} email=${email} orgId=${orgId} orgSource=${orgSource} scope=workspace hit=true`,\n );\n }\n return { value: workspaceSecret.value, source: \"workspace\" };\n }\n if (traceLookup) {\n console.log(\n `[builder-credential] key=${key} email=${email} orgId=${orgId} orgSource=${orgSource} miss tried=user,org,workspace`,\n );\n }\n }\n\n // 3. Solo-workspace fallback: always checked, even when an org id was\n // found above. Older no-org connect flows wrote here, so a credential\n // written before the user joined/created an org must not become\n // unreachable once that org exists.\n scopeAttempted = \"workspace-solo\";\n const soloWorkspaceSecret = await readAppSecret({\n key,\n scope: \"workspace\",\n scopeId: `solo:${email}`,\n });\n if (soloWorkspaceSecret) {\n if (traceLookup) {\n console.log(\n `[builder-credential] key=${key} email=${email} orgId=${orgId ?? \"(none)\"} orgSource=${orgSource} scope=workspace-solo hit=true`,\n );\n }\n return { value: soloWorkspaceSecret.value, source: \"workspace\" };\n }\n if (traceLookup) {\n console.log(\n `[builder-credential] key=${key} email=${email} orgId=${orgId ?? \"(none)\"} orgSource=${orgSource} miss tried=${orgId ? \"user,org,workspace,workspace-solo\" : \"user,workspace-solo\"}`,\n );\n }\n } catch (err) {\n if (traceLookup) {\n console.log(\n `[builder-credential] key=${key} email=${email} scope=${scopeAttempted} error=${(err as Error)?.message ?? err}`,\n );\n }\n // Secrets table not ready — treat as missing.\n }\n return null;\n}\n\ninterface ScopedBuilderCredentialsResult {\n creds: BuilderResolvedCredentials | null;\n /**\n * True when reading the credential store itself threw (db timeout, etc),\n * as opposed to the store answering cleanly with \"no row\". Callers must\n * report this as retryable rather than \"not configured\".\n */\n lookupFailed: boolean;\n}\n\nasync function resolveScopedBuilderCredentials(): Promise<ScopedBuilderCredentialsResult> {\n const email = getRequestUserEmail();\n if (!email) return { creds: null, lookupFailed: false };\n\n const traceLookup = shouldTraceCredentialResolve();\n let scopeAttempted = \"user\";\n try {\n const { readAppSecrets } = await import(\"../secrets/storage.js\");\n const traceScope = (\n creds: BuilderResolvedCredentials,\n scopeId: string,\n extra = \"\",\n ) => {\n if (!traceLookup) return;\n console.log(\n `[builder-credential] scope=${creds.source} scopeId=${scopeId} email=${email}${extra} complete=${isCompleteBuilderConnection(creds)} private=${Boolean(creds.privateKey)} public=${Boolean(creds.publicKey)}`,\n );\n };\n\n const userCreds = await readBuilderCredentialScope(\n readAppSecrets,\n \"user\",\n email,\n );\n traceScope(userCreds, email);\n if (isCompleteBuilderConnection(userCreds)) {\n return { creds: userCreds, lookupFailed: false };\n }\n\n let orgId: string | null | undefined = getRequestOrgId();\n let orgSource: \"request\" | \"email-fallback\" | \"none\" = orgId\n ? \"request\"\n : \"none\";\n if (!orgId) {\n orgId = await resolveOrgIdForRequestEmail(email);\n if (orgId) orgSource = \"email-fallback\";\n }\n\n if (orgId) {\n scopeAttempted = \"org\";\n const orgCreds = await readBuilderCredentialScope(\n readAppSecrets,\n \"org\",\n orgId,\n );\n traceScope(orgCreds, orgId, ` orgSource=${orgSource}`);\n if (isCompleteBuilderConnection(orgCreds)) {\n return { creds: orgCreds, lookupFailed: false };\n }\n\n scopeAttempted = \"workspace\";\n const workspaceCreds = await readBuilderCredentialScope(\n readAppSecrets,\n \"workspace\",\n orgId,\n );\n traceScope(workspaceCreds, orgId, ` orgSource=${orgSource}`);\n if (isCompleteBuilderConnection(workspaceCreds)) {\n return { creds: workspaceCreds, lookupFailed: false };\n }\n }\n\n // Solo-workspace fallback: always checked, even when an org id was found\n // above. See resolveScopedBuilderCredential for why this must not be\n // gated behind \"no org\".\n scopeAttempted = \"workspace-solo\";\n const soloScopeId = `solo:${email}`;\n const soloCreds = await readBuilderCredentialScope(\n readAppSecrets,\n \"workspace\",\n soloScopeId,\n );\n traceScope(\n soloCreds,\n soloScopeId,\n ` orgId=${orgId ?? \"(none)\"} orgSource=${orgSource}`,\n );\n if (isCompleteBuilderConnection(soloCreds)) {\n return { creds: soloCreds, lookupFailed: false };\n }\n } catch (err) {\n if (traceLookup) {\n console.log(\n `[builder-credential] email=${email} scope=${scopeAttempted} credentials error=${(err as Error)?.message ?? err}`,\n );\n }\n return { creds: null, lookupFailed: true };\n }\n return { creds: null, lookupFailed: false };\n}\n\n/**\n * Resolve a Builder credential for the current request. User/org credentials\n * win; deployment env is only a fallback. This lets local/root .env keys keep\n * a template working while still allowing users to connect their own Builder\n * account from Settings or onboarding.\n */\nexport async function resolveBuilderCredential(\n key: string,\n): Promise<string | null> {\n const scoped = await resolveScopedBuilderCredential(key);\n if (scoped) return scoped.value;\n if (!canUseBuilderDeployCredentialFallbackForRequest()) return null;\n return readDeployCredentialEnv(key) ?? null;\n}\n\n/**\n * True when `BUILDER_PRIVATE_KEY` is set at the deployment level. This means\n * a deploy-level fallback exists; it does not prevent per-user connect.\n */\nexport function isBuilderEnvManaged(): boolean {\n return !!process.env.BUILDER_PRIVATE_KEY;\n}\n\n/**\n * Resolve the Builder private key for the current request. User/org OAuth\n * credentials win; deploy-level `BUILDER_PRIVATE_KEY` is the fallback.\n */\nexport async function resolveBuilderPrivateKey(): Promise<string | null> {\n return resolveBuilderCredential(\"BUILDER_PRIVATE_KEY\");\n}\n\n/**\n * Resolve the current user's Builder auth header.\n * Returns `\"Bearer <key>\"` or null.\n */\nexport async function resolveBuilderAuthHeader(): Promise<string | null> {\n const key = await resolveBuilderPrivateKey();\n return key ? `Bearer ${key}` : null;\n}\n\n/**\n * Check whether the current user has a Builder private key configured\n * (per-user or deployment-level).\n */\nexport async function resolveHasBuilderPrivateKey(): Promise<boolean> {\n return !!(await resolveBuilderPrivateKey());\n}\n\n/**\n * Check whether the current request has the complete Builder credential bundle\n * needed for Builder-backed assistant/image-generation calls.\n */\nexport async function resolveHasCompleteBuilderConnection(): Promise<boolean> {\n const creds = await resolveBuilderCredentials();\n return !!(creds.privateKey && creds.publicKey);\n}\n\n/**\n * Resolve where the effective Builder assistant connection came from. This\n * intentionally requires a complete private+public key pair from one scope so\n * status UIs don't report a mixed user/org credential set as connected.\n */\nexport async function resolveBuilderCredentialSource(): Promise<BuilderCredentialSource | null> {\n const detailed = await resolveBuilderCredentialsDetailed();\n return detailed.source;\n}\n\nexport interface BuilderCredentialsDetailed {\n privateKey: string | null;\n publicKey: string | null;\n userId: string | null;\n orgName: string | null;\n orgKind: string | null;\n subscription: string | null;\n subscriptionLevel: string | null;\n subscriptionName: string | null;\n isEnterprise: boolean | null;\n isFreeAccount: boolean | null;\n /** Which scope answered, or null when nothing did. */\n source: BuilderCredentialSource | null;\n /**\n * True when reading the credential store itself failed (db timeout, etc).\n * Callers must report this as retryable rather than \"not configured\".\n */\n lookupFailed: boolean;\n}\n\n/**\n * Resolve the Builder assistant credential bundle from one complete scope,\n * plus where it came from and whether the credential-store read itself\n * failed. A partial user row is treated as a miss so the org-shared\n * connection can still power the assistant for teammates.\n *\n * Callers that only need the plain credential bundle (the historical shape)\n * should use `resolveBuilderCredentials()` instead.\n */\nexport async function resolveBuilderCredentialsDetailed(): Promise<BuilderCredentialsDetailed> {\n const { creds: scoped, lookupFailed } =\n await resolveScopedBuilderCredentials();\n if (scoped) {\n const {\n privateKey,\n publicKey,\n userId,\n orgName,\n orgKind,\n subscription,\n subscriptionLevel,\n subscriptionName,\n isEnterprise,\n isFreeAccount,\n source,\n } = scoped;\n return {\n privateKey,\n publicKey,\n userId,\n orgName,\n orgKind,\n subscription,\n subscriptionLevel,\n subscriptionName,\n isEnterprise,\n isFreeAccount,\n source,\n lookupFailed: false,\n };\n }\n const canUseEnv = canUseBuilderDeployCredentialFallbackForRequest();\n const privateKey = canUseEnv\n ? (readDeployCredentialEnv(\"BUILDER_PRIVATE_KEY\") ?? null)\n : null;\n const publicKey = canUseEnv\n ? (readDeployCredentialEnv(\"BUILDER_PUBLIC_KEY\") ?? null)\n : null;\n const userId = canUseEnv\n ? (readDeployCredentialEnv(\"BUILDER_USER_ID\") ?? null)\n : null;\n const orgName = canUseEnv\n ? (readDeployCredentialEnv(\"BUILDER_ORG_NAME\") ?? null)\n : null;\n const orgKind = canUseEnv\n ? (readDeployCredentialEnv(\"BUILDER_ORG_KIND\") ?? null)\n : null;\n const subscription = canUseEnv\n ? (readDeployCredentialEnv(\"BUILDER_SUBSCRIPTION\") ?? null)\n : null;\n const subscriptionLevel = canUseEnv\n ? (readDeployCredentialEnv(\"BUILDER_SUBSCRIPTION_LEVEL\") ?? null)\n : null;\n const subscriptionName = canUseEnv\n ? (readDeployCredentialEnv(\"BUILDER_SUBSCRIPTION_NAME\") ?? null)\n : null;\n const isEnterprise = canUseEnv\n ? readOptionalBuilderBoolean(\n readDeployCredentialEnv(\"BUILDER_IS_ENTERPRISE\"),\n )\n : null;\n const isFreeAccount = canUseEnv\n ? readOptionalBuilderBoolean(\n readDeployCredentialEnv(\"BUILDER_IS_FREE_ACCOUNT\"),\n )\n : null;\n return {\n privateKey,\n publicKey,\n userId,\n orgName,\n orgKind,\n subscription,\n subscriptionLevel,\n subscriptionName,\n isEnterprise,\n isFreeAccount,\n source: canUseEnv && privateKey ? \"env\" : null,\n lookupFailed,\n };\n}\n\n/**\n * Resolve the Builder assistant credential bundle from one complete scope.\n * Kept to its original return shape (no `source`/`lookupFailed`) for existing\n * callers; use `resolveBuilderCredentialsDetailed()` for those fields.\n */\nexport async function resolveBuilderCredentials(): Promise<{\n privateKey: string | null;\n publicKey: string | null;\n userId: string | null;\n orgName: string | null;\n orgKind: string | null;\n subscription: string | null;\n subscriptionLevel: string | null;\n subscriptionName: string | null;\n isEnterprise: boolean | null;\n isFreeAccount: boolean | null;\n}> {\n const {\n privateKey,\n publicKey,\n userId,\n orgName,\n orgKind,\n subscription,\n subscriptionLevel,\n subscriptionName,\n isEnterprise,\n isFreeAccount,\n } = await resolveBuilderCredentialsDetailed();\n return {\n privateKey,\n publicKey,\n userId,\n orgName,\n orgKind,\n subscription,\n subscriptionLevel,\n subscriptionName,\n isEnterprise,\n isFreeAccount,\n };\n}\n\nconst BUILDER_AUTH_FAILURE_SETTING_PREFIX = \"builder-auth-failure:\";\n/**\n * Stale markers expire so a rejected model or a transient gateway failure\n * cannot pin a signed-in user to \"Builder not connected\" forever. Only a\n * successful gateway call clears the marker early, and that call never happens\n * while the marker is what makes the connection look broken.\n */\nexport const BUILDER_AUTH_FAILURE_TTL_MS = 15 * 60 * 1000;\n\nexport interface BuilderCredentialAuthFailure {\n fingerprint: string;\n message: string;\n status?: number;\n code?: string;\n at: number;\n ownerEmail?: string | null;\n orgId?: string | null;\n}\n\nexport function builderCredentialFingerprint(\n privateKey?: string | null,\n publicKey?: string | null,\n): string | null {\n if (!privateKey || !publicKey) return null;\n return createHash(\"sha256\")\n .update(privateKey)\n .update(\"\\0\")\n .update(publicKey)\n .digest(\"hex\")\n .slice(0, 24);\n}\n\nfunction builderAuthFailureSettingKey(fingerprint: string): string {\n return `${BUILDER_AUTH_FAILURE_SETTING_PREFIX}${fingerprint}`;\n}\n\nexport async function getBuilderCredentialAuthFailure(\n creds: {\n privateKey?: string | null;\n publicKey?: string | null;\n } = {},\n): Promise<BuilderCredentialAuthFailure | null> {\n const fingerprint = builderCredentialFingerprint(\n creds.privateKey,\n creds.publicKey,\n );\n if (!fingerprint) return null;\n try {\n const settings = await import(\"../settings/store.js\");\n const settingKey = builderAuthFailureSettingKey(fingerprint);\n const row = await settings.getSetting(settingKey);\n if (!row) return null;\n const at = typeof row.at === \"number\" ? row.at : Date.now();\n if (Date.now() - at > BUILDER_AUTH_FAILURE_TTL_MS) {\n if (typeof settings.deleteSetting === \"function\") {\n await settings.deleteSetting(settingKey).catch(() => {});\n }\n return null;\n }\n return {\n fingerprint,\n message:\n typeof row.message === \"string\" && row.message\n ? row.message\n : \"Builder rejected the connected credentials. Reconnect Builder.io.\",\n status: typeof row.status === \"number\" ? row.status : undefined,\n code: typeof row.code === \"string\" ? row.code : undefined,\n at,\n ownerEmail:\n typeof row.ownerEmail === \"string\" ? row.ownerEmail : undefined,\n orgId: typeof row.orgId === \"string\" ? row.orgId : undefined,\n };\n } catch {\n return null;\n }\n}\n\nexport async function recordBuilderCredentialAuthFailure(details?: {\n status?: number;\n code?: string;\n message?: string;\n}): Promise<void> {\n try {\n const creds = await resolveBuilderCredentials();\n const fingerprint = builderCredentialFingerprint(\n creds.privateKey,\n creds.publicKey,\n );\n if (!fingerprint) return;\n const { putSetting } = await import(\"../settings/store.js\");\n await putSetting(builderAuthFailureSettingKey(fingerprint), {\n fingerprint,\n message:\n details?.message ||\n \"Builder rejected the connected credentials. Reconnect Builder.io.\",\n ...(typeof details?.status === \"number\" && { status: details.status }),\n ...(details?.code && { code: details.code }),\n at: Date.now(),\n ownerEmail: getRequestUserEmail() ?? null,\n orgId: getRequestOrgId() ?? null,\n });\n } catch {\n // Best-effort marker only; the chat error is still returned to the user.\n }\n}\n\nexport async function clearBuilderCredentialAuthFailure(creds: {\n privateKey?: string | null;\n publicKey?: string | null;\n}): Promise<void> {\n const fingerprint = builderCredentialFingerprint(\n creds.privateKey,\n creds.publicKey,\n );\n if (!fingerprint) return;\n try {\n const { deleteSetting } = await import(\"../settings/store.js\");\n await deleteSetting(builderAuthFailureSettingKey(fingerprint));\n } catch {\n // A stale failure marker should not block writing fresh credentials.\n }\n}\n\nconst PROVIDER_AUTH_FAILURE_SETTING_PREFIX = \"provider-auth-failure:\";\n/** Stale failure markers expire so a transient 401 cannot permanently block deploy keys. */\nexport const PROVIDER_AUTH_FAILURE_TTL_MS = 15 * 60 * 1000;\n\nexport interface ProviderCredentialAuthFailure {\n fingerprint: string;\n key: string;\n message: string;\n status?: number;\n code?: string;\n at: number;\n ownerEmail?: string | null;\n orgId?: string | null;\n}\n\nexport function providerCredentialFingerprint(\n key?: string | null,\n value?: string | null,\n): string | null {\n const normalizedKey = key?.trim().toUpperCase();\n const normalizedValue = value?.trim();\n if (!normalizedKey || !normalizedValue) return null;\n return createHash(\"sha256\")\n .update(normalizedKey)\n .update(\"\\0\")\n .update(normalizedValue)\n .digest(\"hex\")\n .slice(0, 24);\n}\n\nfunction providerAuthFailureSettingKey(fingerprint: string): string {\n return `${PROVIDER_AUTH_FAILURE_SETTING_PREFIX}${fingerprint}`;\n}\n\nexport async function getProviderCredentialAuthFailure(opts: {\n key?: string | null;\n value?: string | null;\n}): Promise<ProviderCredentialAuthFailure | null> {\n const key = opts.key?.trim().toUpperCase() ?? \"\";\n const fingerprint = providerCredentialFingerprint(key, opts.value);\n if (!fingerprint) return null;\n try {\n const settings = await import(\"../settings/store.js\");\n const settingKey = providerAuthFailureSettingKey(fingerprint);\n const row = await settings.getSetting(settingKey);\n if (!row) return null;\n if (row.fingerprint !== fingerprint) return null;\n const at = typeof row.at === \"number\" ? row.at : Date.now();\n if (Date.now() - at > PROVIDER_AUTH_FAILURE_TTL_MS) {\n if (typeof settings.deleteSetting === \"function\") {\n await settings.deleteSetting(settingKey).catch(() => {});\n }\n return null;\n }\n return {\n fingerprint,\n key:\n typeof row.key === \"string\" && row.key\n ? row.key\n : key || \"UNKNOWN_PROVIDER_KEY\",\n message:\n typeof row.message === \"string\" && row.message\n ? row.message\n : \"The model provider rejected the saved API key.\",\n status: typeof row.status === \"number\" ? row.status : undefined,\n code: typeof row.code === \"string\" ? row.code : undefined,\n at,\n ownerEmail:\n typeof row.ownerEmail === \"string\" ? row.ownerEmail : undefined,\n orgId: typeof row.orgId === \"string\" ? row.orgId : undefined,\n };\n } catch {\n return null;\n }\n}\n\nexport async function recordProviderCredentialAuthFailure(opts: {\n key?: string | null;\n value?: string | null;\n status?: number;\n code?: string;\n message?: string;\n}): Promise<void> {\n try {\n const key = opts.key?.trim().toUpperCase() ?? \"\";\n const value = opts.value?.trim();\n const fingerprint = providerCredentialFingerprint(key, value);\n if (!fingerprint) return;\n const { putSetting } = await import(\"../settings/store.js\");\n await putSetting(providerAuthFailureSettingKey(fingerprint), {\n fingerprint,\n key,\n message: opts.message || \"The model provider rejected the saved API key.\",\n ...(typeof opts.status === \"number\" && { status: opts.status }),\n ...(opts.code && { code: opts.code }),\n at: Date.now(),\n ownerEmail: getRequestUserEmail() ?? null,\n orgId: getRequestOrgId() ?? null,\n });\n } catch {\n // Best-effort marker only; the chat error is still returned to the user.\n }\n}\n\nexport async function clearProviderCredentialAuthFailure(opts: {\n key?: string | null;\n value?: string | null;\n}): Promise<void> {\n const fingerprint = providerCredentialFingerprint(opts.key, opts.value);\n if (!fingerprint) return;\n try {\n const { deleteSetting } = await import(\"../settings/store.js\");\n await deleteSetting(providerAuthFailureSettingKey(fingerprint));\n } catch {\n // A stale failure marker should not block writing or using fresh keys.\n }\n}\n\n/**\n * Write Builder credentials to `app_secrets`.\n *\n * Scope decision (see `resolveCredentialWriteScope`): when the connecting\n * user is owner/admin of an active org we write at `scope: \"org\"` so every\n * member of that org auto-resolves the credentials via\n * `resolveBuilderCredential`'s org fallback — no per-user re-connect\n * needed. A plain member or a user with no active org writes at\n * `scope: \"user\"` (the safe default that doesn't trample the org's shared\n * connection).\n *\n * Stale-credential cleanup: before writing the new values we (1) clear ALL\n * five BUILDER_* keys at the target scope, so optional fields the new\n * connection doesn't carry (e.g. user picked a Builder space that returns\n * no orgName) don't leave the previous connection's metadata behind, and\n * (2) when writing at org scope, also clear the writer's own user-scope\n * BUILDER_* rows so a stale personal override from an earlier connect\n * doesn't shadow the new org write on resolution (user scope wins org\n * scope by design — see `resolveScopedBuilderCredential`). The org-scope\n * row is intentionally left alone when writing at user scope: that row is\n * shared with the rest of the org and a single user's personal override\n * shouldn't blow it away. (Victoria's \"I signed in again with my Builder\n * space and it still says no credits\" report on 2026-05-11 was exactly\n * this stale-shadow case.)\n *\n * Returns the actual scope/scopeId used so the caller can show \"Connected\n * for Builder.io\" vs \"Connected (personal)\" in the UI.\n */\nexport async function writeBuilderCredentials(\n email: string,\n creds: {\n privateKey: string;\n publicKey: string;\n userId?: string | null;\n orgName?: string | null;\n orgKind?: string | null;\n subscription?: string | null;\n subscriptionLevel?: string | null;\n subscriptionName?: string | null;\n isEnterprise?: boolean | null;\n isFreeAccount?: boolean | null;\n },\n options?: { orgId?: string | null; role?: string | null },\n): Promise<{ scope: \"user\" | \"org\"; scopeId: string }> {\n const privateKey = creds.privateKey.trim();\n const publicKey = creds.publicKey.trim();\n if (!isBuilderPrivateKey(privateKey)) {\n throw new Error(\n \"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.\",\n );\n }\n if (!publicKey) {\n throw new Error(\n \"Builder did not return a public API key. Restart the Builder connect flow.\",\n );\n }\n\n const { writeAppSecret, deleteAppSecret } =\n await import(\"../secrets/storage.js\");\n const target = resolveCredentialWriteScope(\n email,\n options?.orgId ?? null,\n options?.role ?? null,\n );\n\n // Clear stale rows before writing the new connection. See the function's\n // doc comment for the two cases this handles.\n const cleanups: Array<Promise<unknown>> = BUILDER_CREDENTIAL_KEYS.map((key) =>\n deleteAppSecret({\n key,\n scope: target.scope,\n scopeId: target.scopeId,\n }).catch(() => {}),\n );\n if (target.scope === \"org\") {\n for (const key of BUILDER_CREDENTIAL_KEYS) {\n cleanups.push(\n deleteAppSecret({ key, scope: \"user\", scopeId: email }).catch(() => {}),\n );\n }\n }\n await Promise.all(cleanups);\n\n const entries: Array<{ key: string; value: string }> = [\n { key: \"BUILDER_PRIVATE_KEY\", value: privateKey },\n { key: \"BUILDER_PUBLIC_KEY\", value: publicKey },\n ];\n if (creds.userId) {\n entries.push({ key: \"BUILDER_USER_ID\", value: creds.userId });\n }\n if (creds.orgName) {\n entries.push({ key: \"BUILDER_ORG_NAME\", value: creds.orgName });\n }\n if (creds.orgKind) {\n entries.push({ key: \"BUILDER_ORG_KIND\", value: creds.orgKind });\n }\n if (creds.subscription) {\n entries.push({ key: \"BUILDER_SUBSCRIPTION\", value: creds.subscription });\n }\n if (creds.subscriptionLevel) {\n entries.push({\n key: \"BUILDER_SUBSCRIPTION_LEVEL\",\n value: creds.subscriptionLevel,\n });\n }\n if (creds.subscriptionName) {\n entries.push({\n key: \"BUILDER_SUBSCRIPTION_NAME\",\n value: creds.subscriptionName,\n });\n }\n if (typeof creds.isEnterprise === \"boolean\") {\n entries.push({\n key: \"BUILDER_IS_ENTERPRISE\",\n value: String(creds.isEnterprise),\n });\n }\n if (typeof creds.isFreeAccount === \"boolean\") {\n entries.push({\n key: \"BUILDER_IS_FREE_ACCOUNT\",\n value: String(creds.isFreeAccount),\n });\n }\n await Promise.all(\n entries.map(({ key, value }) =>\n writeAppSecret({\n key,\n value,\n scope: target.scope,\n scopeId: target.scopeId,\n }),\n ),\n );\n await clearBuilderCredentialAuthFailure({\n privateKey,\n publicKey,\n });\n return target;\n}\n\n/**\n * Delete Builder credentials.\n *\n * Default behaviour: clears only this user's per-user override (so a\n * member can disconnect their personal Builder identity without\n * collapsing the org-wide connection for every teammate). To revoke the\n * org's shared connection, pass `{ orgId, role }` for an owner/admin —\n * matching the same authority gate `writeBuilderCredentials` uses on\n * write. Plain members can never reach the org-scoped row.\n */\nexport async function deleteBuilderCredentials(\n email: string,\n options?: { orgId?: string | null; role?: string | null },\n): Promise<{ scope: \"user\" | \"org\"; scopeId: string }> {\n const { deleteAppSecret } = await import(\"../secrets/storage.js\");\n const target = resolveCredentialWriteScope(\n email,\n options?.orgId ?? null,\n options?.role ?? null,\n );\n await Promise.all(\n BUILDER_CREDENTIAL_KEYS.map((key) =>\n deleteAppSecret({\n key,\n scope: target.scope,\n scopeId: target.scopeId,\n }).catch(() => {}),\n ),\n );\n return target;\n}\n\n// ---------------------------------------------------------------------------\n// Generic request-scoped secret resolution\n//\n// New consumers should prefer this over reading `process.env.X` directly.\n// User-pasted and shared secrets live in `app_secrets` (encrypted). The\n// settings UI / onboarding panels can write user, org, or workspace rows.\n// Deploy-level env vars are the fallback for unauthenticated/CLI/background\n// contexts where there's no user to scope by. Authenticated requests may also\n// use app-provided LLM provider keys such as OPENAI_API_KEY or\n// ANTHROPIC_API_KEY, but Builder identity keys keep the stricter scoped policy.\n// ---------------------------------------------------------------------------\n\n/**\n * Resolve a request-scoped secret. Reads from `app_secrets` first (current\n * user override, active org, then workspace row); falls back to `process.env`\n * only when the deploy fallback policy allows it.\n */\nexport async function resolveSecret(key: string): Promise<string | null> {\n const traceLookup = shouldTraceCredentialResolve();\n const email = getRequestUserEmail();\n if (email) {\n try {\n const { readAppSecret } = await import(\"../secrets/storage.js\");\n // Per-user override first.\n const userSecret = await readAppSecret({\n key,\n scope: \"user\",\n scopeId: email,\n });\n if (userSecret?.value) {\n if (traceLookup) {\n console.log(\n `[resolve-secret] key=${key} email=${email} scope=user hit=true`,\n );\n }\n return userSecret.value;\n }\n\n const orgId = getRequestOrgId();\n if (orgId) {\n // Fall back to the active org's shared row, when present. Builder\n // Connect uses this first-class org scope.\n const orgSecret = await readAppSecret({\n key,\n scope: \"org\",\n scopeId: orgId,\n });\n if (orgSecret?.value) {\n if (traceLookup) {\n console.log(\n `[resolve-secret] key=${key} email=${email} orgId=${orgId} scope=org hit=true`,\n );\n }\n return orgSecret.value;\n }\n\n // Registered secrets historically used \"workspace\" scope for\n // org-shared configuration. Keep reading it so Settings status and\n // runtime resolution agree.\n const workspaceSecret = await readAppSecret({\n key,\n scope: \"workspace\",\n scopeId: orgId,\n });\n if (workspaceSecret?.value) {\n if (traceLookup) {\n console.log(\n `[resolve-secret] key=${key} email=${email} orgId=${orgId} scope=workspace hit=true`,\n );\n }\n return workspaceSecret.value;\n }\n } else {\n const soloWorkspaceSecret = await readAppSecret({\n key,\n scope: \"workspace\",\n scopeId: `solo:${email}`,\n });\n if (soloWorkspaceSecret?.value) {\n if (traceLookup) {\n console.log(\n `[resolve-secret] key=${key} email=${email} scope=workspace-solo hit=true`,\n );\n }\n return soloWorkspaceSecret.value;\n }\n }\n } catch (err) {\n if (traceLookup) {\n console.log(\n `[resolve-secret] key=${key} email=${email} scope=error err=${(err as Error)?.message ?? err}`,\n );\n }\n // Secrets table not ready — treat as missing.\n }\n // Read deployment-provided env values as fallbacks; framework code must not\n // write to `process.env`, but keys supplied by the host remain valid config.\n // Builder credentials keep a narrower path below because those keys carry a\n // Builder identity rather than just enabling a provider call.\n const envFallback = (\n isBuilderCredentialKey(key)\n ? canUseBuilderDeployCredentialFallbackForRequest()\n : canUseDeployCredentialFallbackForRequest(key)\n )\n ? process.env[key] || null\n : null;\n if (traceLookup) {\n console.log(\n `[resolve-secret] key=${key} email=${email} orgId=${getRequestOrgId() ?? \"(none)\"} scope=${envFallback ? \"env-fallback\" : \"none\"} hit=${!!envFallback}`,\n );\n }\n return envFallback;\n }\n // Unauthenticated / local-dev / CLI / background context: env fallback\n // is safe because there's no user to mis-identify.\n const value = process.env[key] || null;\n if (traceLookup) {\n console.log(\n `[resolve-secret] key=${key} email=(none) scope=env-anonymous hit=${!!value}`,\n );\n }\n return value;\n}\n\n// ---------------------------------------------------------------------------\n// Synchronous helpers — env-only fallbacks for contexts where per-user\n// lookup isn't possible (sync isConfigured checks, CLI scripts).\n// ---------------------------------------------------------------------------\n\n/**\n * True when a Builder private key is configured at the deployment level.\n *\n * This is the same env-only check as `isBuilderEnvManaged()`. For \"does this\n * request have access to Builder via user/org/env credentials?\" use the async\n * `resolveHasBuilderPrivateKey()`.\n */\nexport function hasBuilderPrivateKey(): boolean {\n return !!process.env.BUILDER_PRIVATE_KEY;\n}\n\n/** The origin for Builder-proxied API calls. Overridable for testing. */\nexport function getBuilderProxyOrigin(): string {\n return (\n process.env.BUILDER_PROXY_ORIGIN ||\n process.env.AIR_HOST ||\n process.env.BUILDER_API_HOST ||\n \"https://api.builder.io\"\n );\n}\n\n/**\n * Base URL for the public Builder LLM gateway, which lives at\n * api.builder.io/agent-native/gateway.\n * Override via BUILDER_GATEWAY_BASE_URL for staging / testing.\n */\nexport function getBuilderGatewayBaseUrl(): string {\n return (\n process.env.BUILDER_GATEWAY_BASE_URL ||\n \"https://api.builder.io/agent-native/gateway/v1\"\n );\n}\n\n/**\n * Base URL for Builder-managed image generation.\n * Override via BUILDER_IMAGE_GENERATION_BASE_URL for staging / testing.\n */\nexport function getBuilderImageGenerationBaseUrl(): string {\n return (\n process.env.BUILDER_IMAGE_GENERATION_BASE_URL ||\n \"https://api.builder.io/agent-native/images/v1\"\n );\n}\n\n/**\n * Base URL for Builder-managed web search.\n * Override via BUILDER_WEB_SEARCH_BASE_URL for staging / testing.\n */\nexport function getBuilderWebSearchBaseUrl(): string {\n return (\n process.env.BUILDER_WEB_SEARCH_BASE_URL ||\n \"https://api.builder.io/agent-native/web-search/v1\"\n );\n}\n\n/** Authorization header value for Builder-proxied calls (env-only). */\nexport function getBuilderAuthHeader(): string | null {\n const key = process.env.BUILDER_PRIVATE_KEY;\n return key ? `Bearer ${key}` : null;\n}\n"]}
1
+ {"version":3,"file":"credential-provider.js","sourceRoot":"","sources":["../../src/server/credential-provider.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Credential provider abstraction.\n *\n * Every feature that needs an external credential (Anthropic API key,\n * Google OAuth tokens, OpenAI key, Slack bot token, etc.) should go through\n * one of the resolve*() helpers here instead of reading `process.env`\n * directly. That way the same feature can work in three modes:\n *\n * 1. User set their own key in .env → use it directly\n * 2. User connected Builder via `/cli-auth` → route through Builder proxy\n * 3. Neither → throw FeatureNotConfigured\n *\n * Templates catch FeatureNotConfigured and show a \"Connect Builder (1 click) /\n * set up your own key (guide)\" card.\n *\n * Today these helpers are used by the Builder-hosted LLM gateway, and the\n * shape is meant to grow to cover future managed credential integrations\n * (e.g. additional Builder-hosted services) without rewrites.\n */\n\nimport { createHash } from \"node:crypto\";\n\nimport { CREDENTIAL_STORE_UNAVAILABLE_ERROR_CODE } from \"../agent/engine/credential-errors.js\";\nimport { isLocalDatabase, isTransientDatabaseError } from \"../db/client.js\";\nimport { getRequestUserEmail, getRequestOrgId } from \"./request-context.js\";\n\n/**\n * Decide which `app_secrets` scope a Builder/credential write should use.\n *\n * Org scope (\"everyone in this org sees these credentials\") wins when the\n * connecting user is an owner or admin of an active org — the write\n * privileges shared infra. A plain member or a user without an active\n * org falls through to per-user scope so a teammate can't silently\n * overwrite the org-shared connection.\n */\nexport function resolveCredentialWriteScope(\n email: string,\n orgId: string | null | undefined,\n role: string | null | undefined,\n): { scope: \"user\" | \"org\"; scopeId: string } {\n if (orgId && (role === \"owner\" || role === \"admin\")) {\n return { scope: \"org\", scopeId: orgId };\n }\n return { scope: \"user\", scopeId: email };\n}\n\nexport class FeatureNotConfiguredError extends Error {\n readonly requiredCredential: string;\n readonly builderConnectUrl?: string;\n readonly byokDocsUrl?: string;\n\n constructor(opts: {\n requiredCredential: string;\n message?: string;\n builderConnectUrl?: string;\n byokDocsUrl?: string;\n }) {\n super(\n opts.message ??\n `Feature requires credential \"${opts.requiredCredential}\". Connect Builder or set your own key.`,\n );\n this.name = \"FeatureNotConfiguredError\";\n this.requiredCredential = opts.requiredCredential;\n this.builderConnectUrl = opts.builderConnectUrl;\n this.byokDocsUrl = opts.byokDocsUrl;\n }\n}\n\n/**\n * The credential store could not be read — which is NOT the same as the\n * credential being absent. Never render this as \"not configured\": the user has\n * nothing to configure, they have something to retry.\n */\nexport class CredentialStoreUnavailableError extends Error {\n readonly errorCode = CREDENTIAL_STORE_UNAVAILABLE_ERROR_CODE;\n readonly retryable = true;\n\n constructor(cause?: unknown) {\n super(\n \"Could not read your saved connections — the app database did not answer. This is temporary; try again in a moment.\",\n { cause },\n );\n this.name = \"CredentialStoreUnavailableError\";\n }\n}\n\n/**\n * The one place that decides when an unanswered credential lookup becomes a\n * user-visible retryable error. A store that is not configured at all is a real\n * \"no credential\"; a store that timed out or dropped the connection is not.\n */\nexport function assertCredentialStoreReadable(result: {\n lookupFailed: boolean;\n cause?: unknown;\n}): void {\n if (result.lookupFailed && isTransientDatabaseError(result.cause)) {\n throw new CredentialStoreUnavailableError(result.cause);\n }\n}\n\n/**\n * Deployment-level credential fallback for single-tenant/local operation.\n * Multi-tenant call sites must gate this explicitly before calling.\n */\nexport function readDeployCredentialEnv(key: string): string | undefined {\n return process.env[key] || undefined;\n}\n\nconst APP_PROVIDED_DEPLOY_CREDENTIAL_KEYS = new Set([\n \"ANTHROPIC_API_KEY\",\n \"EMAIL_FROM\",\n \"EMAIL_INBOUND_WEBHOOK_SECRET\",\n \"EMAIL_AGENT_ADDRESS\",\n \"OPENAI_API_KEY\",\n \"OPENAI_BASE_URL\",\n \"OPENROUTER_API_KEY\",\n \"GOOGLE_CLIENT_ID\",\n \"GOOGLE_CLIENT_SECRET\",\n \"GOOGLE_GENERATIVE_AI_API_KEY\",\n \"GROQ_API_KEY\",\n \"MISTRAL_API_KEY\",\n \"COHERE_API_KEY\",\n \"RESEND_API_KEY\",\n \"SENDGRID_API_KEY\",\n]);\n\nfunction isAppProvidedDeployCredentialKey(key: string | undefined): boolean {\n return !!key && APP_PROVIDED_DEPLOY_CREDENTIAL_KEYS.has(key);\n}\n\n/**\n * Deployment-level credentials are safe as a runtime fallback only in local /\n * single-tenant contexts. In hosted production with a shared database, every\n * signed-in user needs their own user/org/workspace credential for\n * identity-bearing provider keys so one deploy key does not silently\n * impersonate another tenant. App-provided service credentials are different:\n * they configure the deployed app itself rather than identifying a user. This\n * includes LLM keys that let the app developer pay for model usage, email\n * transport configuration owned by the deployment, and OAuth client\n * credentials whose per-user identity remains in scoped OAuth tokens. Key-aware\n * callers may use those env vars.\n *\n * @deprecated Use `canUseDeployCredentialFallbackForRequest()` for generic\n * provider secrets. This stricter helper remains for legacy call sites with\n * identity-bearing deploy credentials.\n */\nexport function isDeployCredentialFallbackAllowed(): boolean {\n if (!isProductionLikeRuntime()) return true;\n return isLocalDatabase();\n}\n\nexport function canUseDeployCredentialFallbackForRequest(\n key?: string,\n): boolean {\n const email = getRequestUserEmail();\n if (!email) return true;\n if (isAppProvidedDeployCredentialKey(key)) return true;\n if (isHostedWorkspaceRuntime()) return false;\n if (!isProductionLikeRuntime()) return true;\n return isLocalDatabase();\n}\n\nconst BUILDER_CREDENTIAL_KEYS = [\n \"BUILDER_PRIVATE_KEY\",\n \"BUILDER_PUBLIC_KEY\",\n \"BUILDER_USER_ID\",\n \"BUILDER_ORG_NAME\",\n \"BUILDER_ORG_KIND\",\n \"BUILDER_SUBSCRIPTION\",\n \"BUILDER_SUBSCRIPTION_LEVEL\",\n \"BUILDER_SUBSCRIPTION_NAME\",\n \"BUILDER_IS_ENTERPRISE\",\n \"BUILDER_IS_FREE_ACCOUNT\",\n] as const;\n\nfunction isBuilderCredentialKey(key: string): boolean {\n return (BUILDER_CREDENTIAL_KEYS as readonly string[]).includes(key);\n}\n\nfunction isHostedWorkspaceRuntime(): boolean {\n const hasFusionPreview = Boolean(\n process.env.FUSION_ENVIRONMENT ||\n process.env.FUSION_ENV_ORIGIN ||\n process.env.VITE_FUSION_ENV_ORIGIN,\n );\n return (\n /^(1|true)$/i.test(process.env.AGENT_NATIVE_WORKSPACE ?? \"\") ||\n /^(1|true)$/i.test(process.env.VITE_AGENT_NATIVE_WORKSPACE ?? \"\") ||\n hasFusionPreview\n );\n}\n\nfunction isProductionLikeRuntime(): boolean {\n return (\n process.env.NODE_ENV === \"production\" ||\n /^(1|true)$/i.test(process.env.NETLIFY ?? \"\") ||\n /^(1|true)$/i.test(process.env.VERCEL ?? \"\") ||\n /^(1|true)$/i.test(process.env.CF_PAGES ?? \"\") ||\n Boolean(\n process.env.AWS_LAMBDA_FUNCTION_NAME ||\n process.env.AWS_EXECUTION_ENV ||\n process.env.FUNCTIONS_WORKER_RUNTIME ||\n process.env.K_SERVICE ||\n process.env.RENDER,\n )\n );\n}\n\n/**\n * Whether deployment-level Builder env keys may back the current request.\n *\n * This is intentionally self-contained rather than delegating to\n * `canUseDeployCredentialFallbackForRequest`. That generic helper blocks the\n * deploy fallback for any signed-in user in a hosted workspace runtime, so the\n * Builder dogfooding escape hatch must apply its own hosted-workspace exception\n * here instead of inheriting the generic helper's stricter (and hatch-unaware)\n * decision. Reading the env once into locals keeps the rules legible.\n *\n * Rules (all evaluated against the live request/runtime, not a build-time value):\n * - No signed-in user → safe to use the deploy env (nobody to mis-identify).\n * - Hosted workspace + signed-in user → deploy-level Builder keys would\n * impersonate that user, so block them — UNLESS a developer has explicitly\n * opted into the local dogfooding escape hatch (non-prod only). Default OFF;\n * hosted/shared production deployments are never affected.\n * - Otherwise → allowed in non-prod, or on a local/single-tenant database.\n */\nfunction canUseBuilderDeployCredentialFallbackForRequest(): boolean {\n const email = getRequestUserEmail();\n if (!email) return true;\n\n const isProductionRuntime = isProductionLikeRuntime();\n // Local dogfooding escape hatch: lets the env / root-`.env` Builder key back\n // a signed-in user so running the app locally doesn't require completing the\n // Builder connect flow first. Non-prod only.\n const localDevOptIn =\n !isProductionRuntime &&\n /^(1|true)$/i.test(process.env.AGENT_NATIVE_LOCAL_BUILDER_ENV ?? \"\");\n\n if (isHostedWorkspaceRuntime() && !localDevOptIn) return false;\n\n // Deploy fallback is safe in non-prod or on a local/single-tenant database.\n return !isProductionRuntime || isLocalDatabase();\n}\n\nfunction shouldTraceCredentialResolve(): boolean {\n return /^(1|true)$/i.test(\n process.env.AGENT_NATIVE_DEBUG_CREDENTIAL_RESOLVE ??\n process.env.DEBUG_CREDENTIAL_RESOLVE ??\n \"\",\n );\n}\n\n// ---------------------------------------------------------------------------\n// Builder credential resolution:\n//\n// 1. **Request-scoped credentials.** A signed-in user can connect Builder\n// through the CLI-auth flow. Owner/admin connections land at org scope;\n// member/no-org connections land at user scope.\n//\n// 2. **Deployment fallback.** BUILDER_PRIVATE_KEY in env still makes local\n// and single-tenant deploys work out of the box, but it no longer blocks\n// per-user connect. Request-scoped credentials win whenever present.\n//\n// To run multi-tenant SaaS: prefer leaving BUILDER_PRIVATE_KEY unset unless a\n// shared fallback identity is intentional.\n// ---------------------------------------------------------------------------\n\ntype BuilderCredentialSource = \"user\" | \"org\" | \"workspace\" | \"env\";\ninterface BuilderResolvedCredentials {\n privateKey: string | null;\n publicKey: string | null;\n userId: string | null;\n orgName: string | null;\n orgKind: string | null;\n subscription: string | null;\n subscriptionLevel: string | null;\n subscriptionName: string | null;\n isEnterprise: boolean | null;\n isFreeAccount: boolean | null;\n source: Exclude<BuilderCredentialSource, \"env\">;\n}\n\nfunction isCompleteBuilderConnection(creds: BuilderResolvedCredentials) {\n return Boolean(creds.privateKey && creds.publicKey);\n}\n\nfunction readOptionalBuilderBoolean(\n value: string | null | undefined,\n): boolean | null {\n if (value == null || value === \"\") return null;\n return /^(1|true)$/i.test(value);\n}\n\nexport function isBuilderPrivateKey(value: string | null | undefined): boolean {\n return typeof value === \"string\" && value.trim().startsWith(\"bpk-\");\n}\n\nasync function readBuilderCredentialScope(\n readAppSecrets: typeof import(\"../secrets/storage.js\").readAppSecrets,\n scope: \"user\" | \"org\" | \"workspace\",\n scopeId: string,\n): Promise<BuilderResolvedCredentials> {\n const secrets = await readAppSecrets({\n keys: BUILDER_CREDENTIAL_KEYS,\n scope,\n scopeId,\n });\n const value = (key: string): string | null => secrets.get(key)?.value ?? null;\n return {\n privateKey: value(\"BUILDER_PRIVATE_KEY\"),\n publicKey: value(\"BUILDER_PUBLIC_KEY\"),\n userId: value(\"BUILDER_USER_ID\"),\n orgName: value(\"BUILDER_ORG_NAME\"),\n orgKind: value(\"BUILDER_ORG_KIND\"),\n subscription: value(\"BUILDER_SUBSCRIPTION\"),\n subscriptionLevel: value(\"BUILDER_SUBSCRIPTION_LEVEL\"),\n subscriptionName: value(\"BUILDER_SUBSCRIPTION_NAME\"),\n isEnterprise: readOptionalBuilderBoolean(value(\"BUILDER_IS_ENTERPRISE\")),\n isFreeAccount: readOptionalBuilderBoolean(value(\"BUILDER_IS_FREE_ACCOUNT\")),\n source: scope === \"workspace\" ? \"workspace\" : scope,\n };\n}\n\n/**\n * A transient org_members read failure makes getOrgContext report no org, which\n * would otherwise hide an org-scoped Builder connection behind a permanent-\n * sounding \"not configured\" error. resolveOrgIdForEmail honors an explicit\n * Personal selection, so this cannot promote a user into an org they left.\n */\nasync function resolveOrgIdForRequestEmail(\n email: string,\n): Promise<{ orgId: string | null; cause?: unknown }> {\n try {\n const { resolveOrgIdForEmail } = await import(\"../org/context.js\");\n return { orgId: await resolveOrgIdForEmail(email) };\n } catch (err) {\n // Could not read org membership, so org- and workspace-scoped rows were\n // never searched. Report the failure instead of the empty answer.\n return { orgId: null, cause: err };\n }\n}\n\ninterface ScopedCredentialResult {\n value: string | null;\n source: \"user\" | \"org\" | \"workspace\" | null;\n /** The failure, when there was one, so callers can classify it. */\n cause?: unknown;\n /**\n * True when reading the store (or the org membership that decides which\n * scopes to search) failed, as opposed to the store answering \"no row\".\n */\n lookupFailed: boolean;\n}\n\nconst NOT_FOUND: ScopedCredentialResult = {\n value: null,\n source: null,\n lookupFailed: false,\n};\n\nasync function resolveScopedBuilderCredential(\n key: string,\n): Promise<ScopedCredentialResult> {\n const email = getRequestUserEmail();\n if (!email) return NOT_FOUND;\n\n // Trace only when explicitly requested. These diagnostics are useful for\n // support, but they include account identifiers and run on hot paths.\n const traceLookup = shouldTraceCredentialResolve();\n let scopeAttempted = \"user\";\n let orgLookupCause: unknown;\n try {\n const { readAppSecret } = await import(\"../secrets/storage.js\");\n\n // 1. Per-user override: a user can paste their own key in settings to\n // overrule the org-shared one (handy for a personal sandbox).\n const userSecret = await readAppSecret({\n key,\n scope: \"user\",\n scopeId: email,\n });\n if (userSecret) {\n if (traceLookup) {\n console.log(\n `[builder-credential] key=${key} email=${email} scope=user hit=true`,\n );\n }\n return { value: userSecret.value, source: \"user\", lookupFailed: false };\n }\n\n let orgId: string | null | undefined = getRequestOrgId();\n let orgSource: \"request\" | \"email-fallback\" | \"none\" = orgId\n ? \"request\"\n : \"none\";\n if (!orgId) {\n const resolved = await resolveOrgIdForRequestEmail(email);\n orgLookupCause = resolved.cause;\n orgId = resolved.orgId;\n if (orgId) orgSource = \"email-fallback\";\n }\n\n // 2. Per-org shared credential: when one teammate connects Builder\n // as an owner/admin we write the OAuth result at org scope so\n // every member of that org gets the AI chat working without\n // re-running the connect flow. Resolution falls back here\n // silently — the caller never has to know which scope answered.\n if (orgId) {\n scopeAttempted = \"org\";\n const orgSecret = await readAppSecret({\n key,\n scope: \"org\",\n scopeId: orgId,\n });\n if (orgSecret) {\n if (traceLookup) {\n console.log(\n `[builder-credential] key=${key} email=${email} orgId=${orgId} orgSource=${orgSource} scope=org hit=true`,\n );\n }\n return { value: orgSecret.value, source: \"org\", lookupFailed: false };\n }\n\n // Older setup flows wrote shared credentials at workspace scope.\n // Keep reading those rows so status UIs and runtime resolution agree\n // for users who connected before org-scoped Builder credentials existed.\n scopeAttempted = \"workspace\";\n const workspaceSecret = await readAppSecret({\n key,\n scope: \"workspace\",\n scopeId: orgId,\n });\n if (workspaceSecret) {\n if (traceLookup) {\n console.log(\n `[builder-credential] key=${key} email=${email} orgId=${orgId} orgSource=${orgSource} scope=workspace hit=true`,\n );\n }\n return {\n value: workspaceSecret.value,\n source: \"workspace\",\n lookupFailed: false,\n };\n }\n if (traceLookup) {\n console.log(\n `[builder-credential] key=${key} email=${email} orgId=${orgId} orgSource=${orgSource} miss tried=user,org,workspace`,\n );\n }\n }\n\n // Membership lookup failure means the org scopes were never searched.\n // Do not let a pre-org solo row silently impersonate the current org while\n // the membership read is retryable.\n if (orgLookupCause !== undefined) {\n return {\n value: null,\n source: null,\n lookupFailed: true,\n cause: orgLookupCause,\n };\n }\n\n // 3. Solo-workspace fallback: always checked, even when an org id was\n // found above. Older no-org connect flows wrote here, so a credential\n // written before the user joined/created an org must not become\n // unreachable once that org exists.\n scopeAttempted = \"workspace-solo\";\n const soloWorkspaceSecret = await readAppSecret({\n key,\n scope: \"workspace\",\n scopeId: `solo:${email}`,\n });\n if (soloWorkspaceSecret) {\n if (traceLookup) {\n console.log(\n `[builder-credential] key=${key} email=${email} orgId=${orgId ?? \"(none)\"} orgSource=${orgSource} scope=workspace-solo hit=true`,\n );\n }\n return {\n value: soloWorkspaceSecret.value,\n source: \"workspace\",\n lookupFailed: false,\n };\n }\n if (traceLookup) {\n console.log(\n `[builder-credential] key=${key} email=${email} orgId=${orgId ?? \"(none)\"} orgSource=${orgSource} miss tried=${orgId ? \"user,org,workspace,workspace-solo\" : \"user,workspace-solo\"}`,\n );\n }\n } catch (err) {\n if (traceLookup) {\n console.log(\n `[builder-credential] key=${key} email=${email} scope=${scopeAttempted} error=${(err as Error)?.message ?? err}`,\n );\n }\n return { value: null, source: null, lookupFailed: true, cause: err };\n }\n return {\n value: null,\n source: null,\n lookupFailed: orgLookupCause !== undefined,\n cause: orgLookupCause,\n };\n}\n\ninterface ScopedBuilderCredentialsResult {\n creds: BuilderResolvedCredentials | null;\n /** The failure, when there was one, so callers can classify it. */\n cause?: unknown;\n /**\n * True when reading the credential store itself threw (db timeout, etc),\n * as opposed to the store answering cleanly with \"no row\". Callers must\n * report this as retryable rather than \"not configured\".\n */\n lookupFailed: boolean;\n}\n\nasync function resolveScopedBuilderCredentials(): Promise<ScopedBuilderCredentialsResult> {\n const email = getRequestUserEmail();\n if (!email) return { creds: null, lookupFailed: false };\n\n const traceLookup = shouldTraceCredentialResolve();\n let scopeAttempted = \"user\";\n let orgLookupCause: unknown;\n try {\n const { readAppSecrets } = await import(\"../secrets/storage.js\");\n const traceScope = (\n creds: BuilderResolvedCredentials,\n scopeId: string,\n extra = \"\",\n ) => {\n if (!traceLookup) return;\n console.log(\n `[builder-credential] scope=${creds.source} scopeId=${scopeId} email=${email}${extra} complete=${isCompleteBuilderConnection(creds)} private=${Boolean(creds.privateKey)} public=${Boolean(creds.publicKey)}`,\n );\n };\n\n const userCreds = await readBuilderCredentialScope(\n readAppSecrets,\n \"user\",\n email,\n );\n traceScope(userCreds, email);\n if (isCompleteBuilderConnection(userCreds)) {\n return { creds: userCreds, lookupFailed: false };\n }\n\n let orgId: string | null | undefined = getRequestOrgId();\n let orgSource: \"request\" | \"email-fallback\" | \"none\" = orgId\n ? \"request\"\n : \"none\";\n if (!orgId) {\n const resolved = await resolveOrgIdForRequestEmail(email);\n orgLookupCause = resolved.cause;\n orgId = resolved.orgId;\n if (orgId) orgSource = \"email-fallback\";\n }\n\n if (orgId) {\n scopeAttempted = \"org\";\n const orgCreds = await readBuilderCredentialScope(\n readAppSecrets,\n \"org\",\n orgId,\n );\n traceScope(orgCreds, orgId, ` orgSource=${orgSource}`);\n if (isCompleteBuilderConnection(orgCreds)) {\n return { creds: orgCreds, lookupFailed: false };\n }\n\n scopeAttempted = \"workspace\";\n const workspaceCreds = await readBuilderCredentialScope(\n readAppSecrets,\n \"workspace\",\n orgId,\n );\n traceScope(workspaceCreds, orgId, ` orgSource=${orgSource}`);\n if (isCompleteBuilderConnection(workspaceCreds)) {\n return { creds: workspaceCreds, lookupFailed: false };\n }\n }\n\n if (orgLookupCause !== undefined) {\n return { creds: null, lookupFailed: true, cause: orgLookupCause };\n }\n\n // Solo-workspace fallback: always checked, even when an org id was found\n // above. See resolveScopedBuilderCredential for why this must not be\n // gated behind \"no org\".\n scopeAttempted = \"workspace-solo\";\n const soloScopeId = `solo:${email}`;\n const soloCreds = await readBuilderCredentialScope(\n readAppSecrets,\n \"workspace\",\n soloScopeId,\n );\n traceScope(\n soloCreds,\n soloScopeId,\n ` orgId=${orgId ?? \"(none)\"} orgSource=${orgSource}`,\n );\n if (isCompleteBuilderConnection(soloCreds)) {\n return { creds: soloCreds, lookupFailed: false };\n }\n } catch (err) {\n if (traceLookup) {\n console.log(\n `[builder-credential] email=${email} scope=${scopeAttempted} credentials error=${(err as Error)?.message ?? err}`,\n );\n }\n return { creds: null, lookupFailed: true, cause: err };\n }\n return {\n creds: null,\n lookupFailed: orgLookupCause !== undefined,\n cause: orgLookupCause,\n };\n}\n\n/**\n * Resolve a Builder credential for the current request. User/org credentials\n * win; deployment env is only a fallback. This lets local/root .env keys keep\n * a template working while still allowing users to connect their own Builder\n * account from Settings or onboarding.\n */\nexport async function resolveBuilderCredential(\n key: string,\n): Promise<string | null> {\n const scoped = await resolveScopedBuilderCredential(key);\n if (scoped.value) return scoped.value;\n const envValue = canUseBuilderDeployCredentialFallbackForRequest()\n ? (readDeployCredentialEnv(key) ?? null)\n : null;\n if (envValue) return envValue;\n // Nothing answered AND the store never gave a real answer: that is not\n // \"not connected\", it is \"we could not look\".\n assertCredentialStoreReadable(scoped);\n return null;\n}\n\n/**\n * True when `BUILDER_PRIVATE_KEY` is set at the deployment level. This means\n * a deploy-level fallback exists; it does not prevent per-user connect.\n */\nexport function isBuilderEnvManaged(): boolean {\n return !!process.env.BUILDER_PRIVATE_KEY;\n}\n\n/**\n * Resolve the Builder private key for the current request. User/org OAuth\n * credentials win; deploy-level `BUILDER_PRIVATE_KEY` is the fallback.\n */\nexport async function resolveBuilderPrivateKey(): Promise<string | null> {\n return resolveBuilderCredential(\"BUILDER_PRIVATE_KEY\");\n}\n\n/**\n * Resolve the current user's Builder auth header.\n * Returns `\"Bearer <key>\"` or null.\n */\nexport async function resolveBuilderAuthHeader(): Promise<string | null> {\n const key = await resolveBuilderPrivateKey();\n return key ? `Bearer ${key}` : null;\n}\n\n/**\n * Check whether the current user has a Builder private key configured\n * (per-user or deployment-level).\n */\nexport async function resolveHasBuilderPrivateKey(): Promise<boolean> {\n return !!(await resolveBuilderPrivateKey());\n}\n\n/**\n * Check whether the current request has the complete Builder credential bundle\n * needed for Builder-backed assistant/image-generation calls.\n */\nexport async function resolveHasCompleteBuilderConnection(): Promise<boolean> {\n const creds = await resolveBuilderCredentials();\n return !!(creds.privateKey && creds.publicKey);\n}\n\n/**\n * Resolve where the effective Builder assistant connection came from. This\n * intentionally requires a complete private+public key pair from one scope so\n * status UIs don't report a mixed user/org credential set as connected.\n */\nexport async function resolveBuilderCredentialSource(): Promise<BuilderCredentialSource | null> {\n const detailed = await resolveBuilderCredentialsDetailed();\n return detailed.source;\n}\n\nexport interface BuilderCredentialsDetailed {\n privateKey: string | null;\n publicKey: string | null;\n userId: string | null;\n orgName: string | null;\n orgKind: string | null;\n subscription: string | null;\n subscriptionLevel: string | null;\n subscriptionName: string | null;\n isEnterprise: boolean | null;\n isFreeAccount: boolean | null;\n /** Which scope answered, or null when nothing did. */\n source: BuilderCredentialSource | null;\n /**\n * True when reading the credential store itself failed (db timeout, etc).\n * Callers must report this as retryable rather than \"not configured\".\n */\n lookupFailed: boolean;\n /** The failure, when there was one, so callers can classify it. */\n cause?: unknown;\n}\n\n/**\n * Resolve the Builder assistant credential bundle from one complete scope,\n * plus where it came from and whether the credential-store read itself\n * failed. A partial user row is treated as a miss so the org-shared\n * connection can still power the assistant for teammates.\n *\n * Callers that only need the plain credential bundle (the historical shape)\n * should use `resolveBuilderCredentials()` instead.\n */\nexport async function resolveBuilderCredentialsDetailed(): Promise<BuilderCredentialsDetailed> {\n const {\n creds: scoped,\n lookupFailed,\n cause,\n } = await resolveScopedBuilderCredentials();\n if (scoped) {\n const {\n privateKey,\n publicKey,\n userId,\n orgName,\n orgKind,\n subscription,\n subscriptionLevel,\n subscriptionName,\n isEnterprise,\n isFreeAccount,\n source,\n } = scoped;\n return {\n privateKey,\n publicKey,\n userId,\n orgName,\n orgKind,\n subscription,\n subscriptionLevel,\n subscriptionName,\n isEnterprise,\n isFreeAccount,\n source,\n lookupFailed: false,\n };\n }\n const canUseEnv = canUseBuilderDeployCredentialFallbackForRequest();\n const privateKey = canUseEnv\n ? (readDeployCredentialEnv(\"BUILDER_PRIVATE_KEY\") ?? null)\n : null;\n const publicKey = canUseEnv\n ? (readDeployCredentialEnv(\"BUILDER_PUBLIC_KEY\") ?? null)\n : null;\n const userId = canUseEnv\n ? (readDeployCredentialEnv(\"BUILDER_USER_ID\") ?? null)\n : null;\n const orgName = canUseEnv\n ? (readDeployCredentialEnv(\"BUILDER_ORG_NAME\") ?? null)\n : null;\n const orgKind = canUseEnv\n ? (readDeployCredentialEnv(\"BUILDER_ORG_KIND\") ?? null)\n : null;\n const subscription = canUseEnv\n ? (readDeployCredentialEnv(\"BUILDER_SUBSCRIPTION\") ?? null)\n : null;\n const subscriptionLevel = canUseEnv\n ? (readDeployCredentialEnv(\"BUILDER_SUBSCRIPTION_LEVEL\") ?? null)\n : null;\n const subscriptionName = canUseEnv\n ? (readDeployCredentialEnv(\"BUILDER_SUBSCRIPTION_NAME\") ?? null)\n : null;\n const isEnterprise = canUseEnv\n ? readOptionalBuilderBoolean(\n readDeployCredentialEnv(\"BUILDER_IS_ENTERPRISE\"),\n )\n : null;\n const isFreeAccount = canUseEnv\n ? readOptionalBuilderBoolean(\n readDeployCredentialEnv(\"BUILDER_IS_FREE_ACCOUNT\"),\n )\n : null;\n return {\n privateKey,\n publicKey,\n userId,\n orgName,\n orgKind,\n subscription,\n subscriptionLevel,\n subscriptionName,\n isEnterprise,\n isFreeAccount,\n source: canUseEnv && privateKey ? \"env\" : null,\n lookupFailed,\n cause,\n };\n}\n\n/**\n * Resolve the Builder assistant credential bundle from one complete scope.\n * Kept to its original return shape (no `source`/`lookupFailed`) for existing\n * callers; use `resolveBuilderCredentialsDetailed()` for those fields.\n */\nexport async function resolveBuilderCredentials(): Promise<{\n privateKey: string | null;\n publicKey: string | null;\n userId: string | null;\n orgName: string | null;\n orgKind: string | null;\n subscription: string | null;\n subscriptionLevel: string | null;\n subscriptionName: string | null;\n isEnterprise: boolean | null;\n isFreeAccount: boolean | null;\n}> {\n const {\n privateKey,\n publicKey,\n userId,\n orgName,\n orgKind,\n subscription,\n subscriptionLevel,\n subscriptionName,\n isEnterprise,\n isFreeAccount,\n } = await resolveBuilderCredentialsDetailed();\n return {\n privateKey,\n publicKey,\n userId,\n orgName,\n orgKind,\n subscription,\n subscriptionLevel,\n subscriptionName,\n isEnterprise,\n isFreeAccount,\n };\n}\n\nconst BUILDER_AUTH_FAILURE_SETTING_PREFIX = \"builder-auth-failure:\";\n/**\n * Stale markers expire so a rejected model or a transient gateway failure\n * cannot pin a signed-in user to \"Builder not connected\" forever. Only a\n * successful gateway call clears the marker early, and that call never happens\n * while the marker is what makes the connection look broken.\n */\nexport const BUILDER_AUTH_FAILURE_TTL_MS = 15 * 60 * 1000;\n\nexport interface BuilderCredentialAuthFailure {\n fingerprint: string;\n message: string;\n status?: number;\n code?: string;\n at: number;\n ownerEmail?: string | null;\n orgId?: string | null;\n}\n\nexport function builderCredentialFingerprint(\n privateKey?: string | null,\n publicKey?: string | null,\n): string | null {\n if (!privateKey || !publicKey) return null;\n return createHash(\"sha256\")\n .update(privateKey)\n .update(\"\\0\")\n .update(publicKey)\n .digest(\"hex\")\n .slice(0, 24);\n}\n\nfunction builderAuthFailureSettingKey(fingerprint: string): string {\n return `${BUILDER_AUTH_FAILURE_SETTING_PREFIX}${fingerprint}`;\n}\n\nexport async function getBuilderCredentialAuthFailure(\n creds: {\n privateKey?: string | null;\n publicKey?: string | null;\n } = {},\n): Promise<BuilderCredentialAuthFailure | null> {\n const fingerprint = builderCredentialFingerprint(\n creds.privateKey,\n creds.publicKey,\n );\n if (!fingerprint) return null;\n try {\n const settings = await import(\"../settings/store.js\");\n const settingKey = builderAuthFailureSettingKey(fingerprint);\n const row = await settings.getSetting(settingKey);\n if (!row) return null;\n const at = typeof row.at === \"number\" ? row.at : Date.now();\n if (Date.now() - at > BUILDER_AUTH_FAILURE_TTL_MS) {\n if (typeof settings.deleteSetting === \"function\") {\n await settings.deleteSetting(settingKey).catch(() => {});\n }\n return null;\n }\n return {\n fingerprint,\n message:\n typeof row.message === \"string\" && row.message\n ? row.message\n : \"Builder rejected the connected credentials. Reconnect Builder.io.\",\n status: typeof row.status === \"number\" ? row.status : undefined,\n code: typeof row.code === \"string\" ? row.code : undefined,\n at,\n ownerEmail:\n typeof row.ownerEmail === \"string\" ? row.ownerEmail : undefined,\n orgId: typeof row.orgId === \"string\" ? row.orgId : undefined,\n };\n } catch {\n return null;\n }\n}\n\nexport async function recordBuilderCredentialAuthFailure(details?: {\n status?: number;\n code?: string;\n message?: string;\n}): Promise<void> {\n try {\n const creds = await resolveBuilderCredentials();\n const fingerprint = builderCredentialFingerprint(\n creds.privateKey,\n creds.publicKey,\n );\n if (!fingerprint) return;\n const { putSetting } = await import(\"../settings/store.js\");\n await putSetting(builderAuthFailureSettingKey(fingerprint), {\n fingerprint,\n message:\n details?.message ||\n \"Builder rejected the connected credentials. Reconnect Builder.io.\",\n ...(typeof details?.status === \"number\" && { status: details.status }),\n ...(details?.code && { code: details.code }),\n at: Date.now(),\n ownerEmail: getRequestUserEmail() ?? null,\n orgId: getRequestOrgId() ?? null,\n });\n } catch {\n // Best-effort marker only; the chat error is still returned to the user.\n }\n}\n\nexport async function clearBuilderCredentialAuthFailure(creds: {\n privateKey?: string | null;\n publicKey?: string | null;\n}): Promise<void> {\n const fingerprint = builderCredentialFingerprint(\n creds.privateKey,\n creds.publicKey,\n );\n if (!fingerprint) return;\n try {\n const { deleteSetting } = await import(\"../settings/store.js\");\n await deleteSetting(builderAuthFailureSettingKey(fingerprint));\n } catch {\n // A stale failure marker should not block writing fresh credentials.\n }\n}\n\nconst PROVIDER_AUTH_FAILURE_SETTING_PREFIX = \"provider-auth-failure:\";\n/** Stale failure markers expire so a transient 401 cannot permanently block deploy keys. */\nexport const PROVIDER_AUTH_FAILURE_TTL_MS = 15 * 60 * 1000;\n\nexport interface ProviderCredentialAuthFailure {\n fingerprint: string;\n key: string;\n message: string;\n status?: number;\n code?: string;\n at: number;\n ownerEmail?: string | null;\n orgId?: string | null;\n}\n\nexport function providerCredentialFingerprint(\n key?: string | null,\n value?: string | null,\n): string | null {\n const normalizedKey = key?.trim().toUpperCase();\n const normalizedValue = value?.trim();\n if (!normalizedKey || !normalizedValue) return null;\n return createHash(\"sha256\")\n .update(normalizedKey)\n .update(\"\\0\")\n .update(normalizedValue)\n .digest(\"hex\")\n .slice(0, 24);\n}\n\nfunction providerAuthFailureSettingKey(fingerprint: string): string {\n return `${PROVIDER_AUTH_FAILURE_SETTING_PREFIX}${fingerprint}`;\n}\n\nexport async function getProviderCredentialAuthFailure(opts: {\n key?: string | null;\n value?: string | null;\n}): Promise<ProviderCredentialAuthFailure | null> {\n const key = opts.key?.trim().toUpperCase() ?? \"\";\n const fingerprint = providerCredentialFingerprint(key, opts.value);\n if (!fingerprint) return null;\n try {\n const settings = await import(\"../settings/store.js\");\n const settingKey = providerAuthFailureSettingKey(fingerprint);\n const row = await settings.getSetting(settingKey);\n if (!row) return null;\n if (row.fingerprint !== fingerprint) return null;\n const at = typeof row.at === \"number\" ? row.at : Date.now();\n if (Date.now() - at > PROVIDER_AUTH_FAILURE_TTL_MS) {\n if (typeof settings.deleteSetting === \"function\") {\n await settings.deleteSetting(settingKey).catch(() => {});\n }\n return null;\n }\n return {\n fingerprint,\n key:\n typeof row.key === \"string\" && row.key\n ? row.key\n : key || \"UNKNOWN_PROVIDER_KEY\",\n message:\n typeof row.message === \"string\" && row.message\n ? row.message\n : \"The model provider rejected the saved API key.\",\n status: typeof row.status === \"number\" ? row.status : undefined,\n code: typeof row.code === \"string\" ? row.code : undefined,\n at,\n ownerEmail:\n typeof row.ownerEmail === \"string\" ? row.ownerEmail : undefined,\n orgId: typeof row.orgId === \"string\" ? row.orgId : undefined,\n };\n } catch {\n return null;\n }\n}\n\nexport async function recordProviderCredentialAuthFailure(opts: {\n key?: string | null;\n value?: string | null;\n status?: number;\n code?: string;\n message?: string;\n}): Promise<void> {\n try {\n const key = opts.key?.trim().toUpperCase() ?? \"\";\n const value = opts.value?.trim();\n const fingerprint = providerCredentialFingerprint(key, value);\n if (!fingerprint) return;\n const { putSetting } = await import(\"../settings/store.js\");\n await putSetting(providerAuthFailureSettingKey(fingerprint), {\n fingerprint,\n key,\n message: opts.message || \"The model provider rejected the saved API key.\",\n ...(typeof opts.status === \"number\" && { status: opts.status }),\n ...(opts.code && { code: opts.code }),\n at: Date.now(),\n ownerEmail: getRequestUserEmail() ?? null,\n orgId: getRequestOrgId() ?? null,\n });\n } catch {\n // Best-effort marker only; the chat error is still returned to the user.\n }\n}\n\nexport async function clearProviderCredentialAuthFailure(opts: {\n key?: string | null;\n value?: string | null;\n}): Promise<void> {\n const fingerprint = providerCredentialFingerprint(opts.key, opts.value);\n if (!fingerprint) return;\n try {\n const { deleteSetting } = await import(\"../settings/store.js\");\n await deleteSetting(providerAuthFailureSettingKey(fingerprint));\n } catch {\n // A stale failure marker should not block writing or using fresh keys.\n }\n}\n\n/**\n * Write Builder credentials to `app_secrets`.\n *\n * Scope decision (see `resolveCredentialWriteScope`): when the connecting\n * user is owner/admin of an active org we write at `scope: \"org\"` so every\n * member of that org auto-resolves the credentials via\n * `resolveBuilderCredential`'s org fallback — no per-user re-connect\n * needed. A plain member or a user with no active org writes at\n * `scope: \"user\"` (the safe default that doesn't trample the org's shared\n * connection).\n *\n * Stale-credential cleanup: before writing the new values we (1) clear ALL\n * five BUILDER_* keys at the target scope, so optional fields the new\n * connection doesn't carry (e.g. user picked a Builder space that returns\n * no orgName) don't leave the previous connection's metadata behind, and\n * (2) when writing at org scope, also clear the writer's own user-scope\n * BUILDER_* rows so a stale personal override from an earlier connect\n * doesn't shadow the new org write on resolution (user scope wins org\n * scope by design — see `resolveScopedBuilderCredential`). The org-scope\n * row is intentionally left alone when writing at user scope: that row is\n * shared with the rest of the org and a single user's personal override\n * shouldn't blow it away. (Victoria's \"I signed in again with my Builder\n * space and it still says no credits\" report on 2026-05-11 was exactly\n * this stale-shadow case.)\n *\n * Returns the actual scope/scopeId used so the caller can show \"Connected\n * for Builder.io\" vs \"Connected (personal)\" in the UI.\n */\nexport async function writeBuilderCredentials(\n email: string,\n creds: {\n privateKey: string;\n publicKey: string;\n userId?: string | null;\n orgName?: string | null;\n orgKind?: string | null;\n subscription?: string | null;\n subscriptionLevel?: string | null;\n subscriptionName?: string | null;\n isEnterprise?: boolean | null;\n isFreeAccount?: boolean | null;\n },\n options?: { orgId?: string | null; role?: string | null },\n): Promise<{ scope: \"user\" | \"org\"; scopeId: string }> {\n const privateKey = creds.privateKey.trim();\n const publicKey = creds.publicKey.trim();\n if (!isBuilderPrivateKey(privateKey)) {\n throw new Error(\n \"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.\",\n );\n }\n if (!publicKey) {\n throw new Error(\n \"Builder did not return a public API key. Restart the Builder connect flow.\",\n );\n }\n\n const { writeAppSecret, deleteAppSecret } =\n await import(\"../secrets/storage.js\");\n const target = resolveCredentialWriteScope(\n email,\n options?.orgId ?? null,\n options?.role ?? null,\n );\n\n // Clear stale rows before writing the new connection. See the function's\n // doc comment for the two cases this handles.\n const cleanups: Array<Promise<unknown>> = BUILDER_CREDENTIAL_KEYS.map((key) =>\n deleteAppSecret({\n key,\n scope: target.scope,\n scopeId: target.scopeId,\n }).catch(() => {}),\n );\n if (target.scope === \"org\") {\n for (const key of BUILDER_CREDENTIAL_KEYS) {\n cleanups.push(\n deleteAppSecret({ key, scope: \"user\", scopeId: email }).catch(() => {}),\n );\n }\n }\n await Promise.all(cleanups);\n\n const entries: Array<{ key: string; value: string }> = [\n { key: \"BUILDER_PRIVATE_KEY\", value: privateKey },\n { key: \"BUILDER_PUBLIC_KEY\", value: publicKey },\n ];\n if (creds.userId) {\n entries.push({ key: \"BUILDER_USER_ID\", value: creds.userId });\n }\n if (creds.orgName) {\n entries.push({ key: \"BUILDER_ORG_NAME\", value: creds.orgName });\n }\n if (creds.orgKind) {\n entries.push({ key: \"BUILDER_ORG_KIND\", value: creds.orgKind });\n }\n if (creds.subscription) {\n entries.push({ key: \"BUILDER_SUBSCRIPTION\", value: creds.subscription });\n }\n if (creds.subscriptionLevel) {\n entries.push({\n key: \"BUILDER_SUBSCRIPTION_LEVEL\",\n value: creds.subscriptionLevel,\n });\n }\n if (creds.subscriptionName) {\n entries.push({\n key: \"BUILDER_SUBSCRIPTION_NAME\",\n value: creds.subscriptionName,\n });\n }\n if (typeof creds.isEnterprise === \"boolean\") {\n entries.push({\n key: \"BUILDER_IS_ENTERPRISE\",\n value: String(creds.isEnterprise),\n });\n }\n if (typeof creds.isFreeAccount === \"boolean\") {\n entries.push({\n key: \"BUILDER_IS_FREE_ACCOUNT\",\n value: String(creds.isFreeAccount),\n });\n }\n await Promise.all(\n entries.map(({ key, value }) =>\n writeAppSecret({\n key,\n value,\n scope: target.scope,\n scopeId: target.scopeId,\n }),\n ),\n );\n await clearBuilderCredentialAuthFailure({\n privateKey,\n publicKey,\n });\n return target;\n}\n\n/**\n * Delete Builder credentials.\n *\n * Default behaviour: clears only this user's per-user override (so a\n * member can disconnect their personal Builder identity without\n * collapsing the org-wide connection for every teammate). To revoke the\n * org's shared connection, pass `{ orgId, role }` for an owner/admin —\n * matching the same authority gate `writeBuilderCredentials` uses on\n * write. Plain members can never reach the org-scoped row.\n */\nexport async function deleteBuilderCredentials(\n email: string,\n options?: { orgId?: string | null; role?: string | null },\n): Promise<{ scope: \"user\" | \"org\"; scopeId: string }> {\n const { deleteAppSecret } = await import(\"../secrets/storage.js\");\n const target = resolveCredentialWriteScope(\n email,\n options?.orgId ?? null,\n options?.role ?? null,\n );\n await Promise.all(\n BUILDER_CREDENTIAL_KEYS.map((key) =>\n deleteAppSecret({\n key,\n scope: target.scope,\n scopeId: target.scopeId,\n }).catch(() => {}),\n ),\n );\n return target;\n}\n\n// ---------------------------------------------------------------------------\n// Generic request-scoped secret resolution\n//\n// New consumers should prefer this over reading `process.env.X` directly.\n// User-pasted and shared secrets live in `app_secrets` (encrypted). The\n// settings UI / onboarding panels can write user, org, or workspace rows.\n// Deploy-level env vars are the fallback for unauthenticated/CLI/background\n// contexts where there's no user to scope by. Authenticated requests may also\n// use app-provided LLM provider keys such as OPENAI_API_KEY or\n// ANTHROPIC_API_KEY, but Builder identity keys keep the stricter scoped policy.\n// ---------------------------------------------------------------------------\n\n/**\n * Resolve a request-scoped secret. Reads from `app_secrets` first (current\n * user override, active org, workspace row for that org, then the solo\n * workspace row); falls back to `process.env` only when the deploy fallback\n * policy allows it.\n */\nexport async function resolveSecret(key: string): Promise<string | null> {\n const resolved = await resolveSecretDetailed(key);\n if (resolved.value) return resolved.value;\n // Nothing answered AND the store never gave a real answer. Reporting null\n // here is what turns a database blip into \"you never configured this\".\n assertCredentialStoreReadable(resolved);\n return null;\n}\n\n/**\n * `resolveSecret` without the throw: reports whether the miss is definitive\n * (`lookupFailed: false` — no such row anywhere the caller can reach) or just\n * unknown (`lookupFailed: true` — the store or the org membership behind it\n * could not be read).\n */\nexport async function resolveSecretDetailed(\n key: string,\n): Promise<{ value: string | null; lookupFailed: boolean; cause?: unknown }> {\n const traceLookup = shouldTraceCredentialResolve();\n const email = getRequestUserEmail();\n let lookupFailed = false;\n let cause: unknown;\n if (email) {\n try {\n const { readAppSecret } = await import(\"../secrets/storage.js\");\n // Per-user override first.\n const userSecret = await readAppSecret({\n key,\n scope: \"user\",\n scopeId: email,\n });\n if (userSecret?.value) {\n if (traceLookup) {\n console.log(\n `[resolve-secret] key=${key} email=${email} scope=user hit=true`,\n );\n }\n return { value: userSecret.value, lookupFailed: false };\n }\n\n // Mirrors resolveScopedBuilderCredential: a transient org_members read\n // failure makes getOrgContext report no org, which would otherwise hide\n // an org-scoped vault row behind an intermittent \"not configured\" error.\n let orgId: string | null | undefined = getRequestOrgId();\n if (!orgId) {\n const resolved = await resolveOrgIdForRequestEmail(email);\n cause = resolved.cause;\n lookupFailed = cause !== undefined;\n orgId = resolved.orgId;\n }\n\n if (orgId) {\n // Fall back to the active org's shared row, when present. Builder\n // Connect uses this first-class org scope.\n const orgSecret = await readAppSecret({\n key,\n scope: \"org\",\n scopeId: orgId,\n });\n if (orgSecret?.value) {\n if (traceLookup) {\n console.log(\n `[resolve-secret] key=${key} email=${email} orgId=${orgId} scope=org hit=true`,\n );\n }\n return { value: orgSecret.value, lookupFailed: false };\n }\n\n // Registered secrets historically used \"workspace\" scope for\n // org-shared configuration. Keep reading it so Settings status and\n // runtime resolution agree.\n const workspaceSecret = await readAppSecret({\n key,\n scope: \"workspace\",\n scopeId: orgId,\n });\n if (workspaceSecret?.value) {\n if (traceLookup) {\n console.log(\n `[resolve-secret] key=${key} email=${email} orgId=${orgId} scope=workspace hit=true`,\n );\n }\n return { value: workspaceSecret.value, lookupFailed: false };\n }\n }\n\n if (lookupFailed) {\n return { value: null, lookupFailed: true, cause };\n }\n\n // Solo-workspace fallback: always checked, even when an org id was found\n // above. A secret written before the user joined/created an org lives\n // here, and must not become unreachable once that org exists. It stays\n // inside this try so a failed org-scoped read still surfaces as\n // retryable instead of being answered by a stale pre-org row.\n const soloWorkspaceSecret = await readAppSecret({\n key,\n scope: \"workspace\",\n scopeId: `solo:${email}`,\n });\n if (soloWorkspaceSecret?.value) {\n if (traceLookup) {\n console.log(\n `[resolve-secret] key=${key} email=${email} orgId=${orgId ?? \"(none)\"} scope=workspace-solo hit=true`,\n );\n }\n return { value: soloWorkspaceSecret.value, lookupFailed: false };\n }\n } catch (err) {\n if (traceLookup) {\n console.log(\n `[resolve-secret] key=${key} email=${email} scope=error err=${(err as Error)?.message ?? err}`,\n );\n }\n // Keep looking (env may still have the key), but remember that the store\n // never actually answered \"no row\".\n lookupFailed = true;\n cause = err;\n }\n // Read deployment-provided env values as fallbacks; framework code must not\n // write to `process.env`, but keys supplied by the host remain valid config.\n // Builder credentials keep a narrower path below because those keys carry a\n // Builder identity rather than just enabling a provider call.\n const envFallback = (\n isBuilderCredentialKey(key)\n ? canUseBuilderDeployCredentialFallbackForRequest()\n : canUseDeployCredentialFallbackForRequest(key)\n )\n ? process.env[key] || null\n : null;\n if (traceLookup) {\n console.log(\n `[resolve-secret] key=${key} email=${email} orgId=${getRequestOrgId() ?? \"(none)\"} scope=${envFallback ? \"env-fallback\" : \"none\"} hit=${!!envFallback}`,\n );\n }\n return {\n value: envFallback,\n lookupFailed: lookupFailed && !envFallback,\n cause,\n };\n }\n // Unauthenticated / local-dev / CLI / background context: env fallback\n // is safe because there's no user to mis-identify.\n const value = process.env[key] || null;\n if (traceLookup) {\n console.log(\n `[resolve-secret] key=${key} email=(none) scope=env-anonymous hit=${!!value}`,\n );\n }\n return { value, lookupFailed: false };\n}\n\n// ---------------------------------------------------------------------------\n// Synchronous helpers — env-only fallbacks for contexts where per-user\n// lookup isn't possible (sync isConfigured checks, CLI scripts).\n// ---------------------------------------------------------------------------\n\n/**\n * True when a Builder private key is configured at the deployment level.\n *\n * This is the same env-only check as `isBuilderEnvManaged()`. For \"does this\n * request have access to Builder via user/org/env credentials?\" use the async\n * `resolveHasBuilderPrivateKey()`.\n */\nexport function hasBuilderPrivateKey(): boolean {\n return !!process.env.BUILDER_PRIVATE_KEY;\n}\n\n/** The origin for Builder-proxied API calls. Overridable for testing. */\nexport function getBuilderProxyOrigin(): string {\n return (\n process.env.BUILDER_PROXY_ORIGIN ||\n process.env.AIR_HOST ||\n process.env.BUILDER_API_HOST ||\n \"https://api.builder.io\"\n );\n}\n\n/**\n * Base URL for the public Builder LLM gateway, which lives at\n * api.builder.io/agent-native/gateway.\n * Override via BUILDER_GATEWAY_BASE_URL for staging / testing.\n */\nexport function getBuilderGatewayBaseUrl(): string {\n return (\n process.env.BUILDER_GATEWAY_BASE_URL ||\n \"https://api.builder.io/agent-native/gateway/v1\"\n );\n}\n\n/**\n * Base URL for Builder-managed image generation.\n * Override via BUILDER_IMAGE_GENERATION_BASE_URL for staging / testing.\n */\nexport function getBuilderImageGenerationBaseUrl(): string {\n return (\n process.env.BUILDER_IMAGE_GENERATION_BASE_URL ||\n \"https://api.builder.io/agent-native/images/v1\"\n );\n}\n\n/**\n * Base URL for Builder-managed web search.\n * Override via BUILDER_WEB_SEARCH_BASE_URL for staging / testing.\n */\nexport function getBuilderWebSearchBaseUrl(): string {\n return (\n process.env.BUILDER_WEB_SEARCH_BASE_URL ||\n \"https://api.builder.io/agent-native/web-search/v1\"\n );\n}\n\n/** Authorization header value for Builder-proxied calls (env-only). */\nexport function getBuilderAuthHeader(): string | null {\n const key = process.env.BUILDER_PRIVATE_KEY;\n return key ? `Bearer ${key}` : null;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"embed-session.d.ts","sourceRoot":"","sources":["../../src/server/embed-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"embed-session.d.ts","sourceRoot":"","sources":["../../src/server/embed-session.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { getCookie, getHeader, getQuery, setCookie, setResponseHeader, } from "h
3
3
  import { getDbExec, intType, isPostgres } from "../db/client.js";
4
4
  import { ensureTableExists } from "../db/ddl-guard.js";
5
5
  import { EMBED_MODE_QUERY_PARAM, EMBED_SESSION_COOKIE, EMBED_TARGET_HEADER, EMBED_TOKEN_QUERY_PARAM, } from "../shared/embed-auth.js";
6
+ import { normalizeAppPath } from "../shared/sign-in-journey.js";
6
7
  import { getConfiguredAppBasePath } from "./app-base-path.js";
7
8
  import { getWorkspaceA2ADerivedSecret } from "./derived-secret.js";
8
9
  const TOKEN_KIND = "agent-native-embed-session";
@@ -382,6 +383,15 @@ export function normalizeEmbedTargetPath(raw, requestOrigin) {
382
383
  return null;
383
384
  if (/^\/[a-z][a-z0-9+.-]*:/i.test(path))
384
385
  return null;
386
+ // A ticket minted for an auth entry path used to be honoured, redirecting
387
+ // the embed straight at a login form. Fails closed on the existing
388
+ // "Invalid embed target." 400 instead.
389
+ const base = getConfiguredAppBasePath();
390
+ const pathForValidation = base && (path === base || path.startsWith(`${base}/`))
391
+ ? path
392
+ : `${base}${path}`;
393
+ if (normalizeAppPath(pathForValidation, base) === null)
394
+ return null;
385
395
  return stripConfiguredBasePath(path);
386
396
  }
387
397
  export async function createEmbedSessionTicket(input) {