@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":"use-db-sync.js","sourceRoot":"","sources":["../../src/client/use-db-sync.ts"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useRef, useState } from \"react\";\n\nimport { ensureDemoModeFetchInterceptor } from \"../demo/fetch-interceptor.js\";\nimport {\n parseHandshakeFrame,\n parseTokenFrame,\n REALTIME_PROTOCOL_VERSION,\n REALTIME_SSE_HANDSHAKE_EVENT,\n REALTIME_SSE_TOKEN_EVENT,\n} from \"../realtime-protocol.js\";\nimport { agentNativePath } from \"./api-path.js\";\nimport { getBrowserTabId } from \"./browser-tab-id.js\";\nimport {\n ensureEmbedAuthFetchInterceptor,\n isEmbedAuthActive,\n} from \"./embed-auth.js\";\nimport { bumpChangeVersion } from \"./use-change-version.js\";\n\ninterface Query {\n queryKey: readonly unknown[];\n}\n\ninterface QueryClient {\n invalidateQueries(\n opts?: {\n queryKey?: string[];\n predicate?: (query: Query) => boolean;\n },\n options?: { cancelRefetch?: boolean },\n ): unknown;\n isFetching?(filters?: {\n queryKey?: string[];\n predicate?: (query: Query) => boolean;\n }): number;\n}\n\nconst POLL_ABORT_MIN_MS = 10_000;\n// SSE delivers changes immediately in the normal path. The poll is a\n// cross-process/serverless safety net, so an idle tab should not bill the host\n// four times per minute forever. Focus and active agent work still poll now.\nconst SSE_FALLBACK_INTERVAL_MS = 60_000;\nconst IDLE_POLL_INTERVAL_MS = 60_000;\nconst HIDDEN_POLL_INTERVAL_MS = 10_000;\nconst POLL_AUTH_FAILURE_COOLDOWN_MS = 60_000;\n/**\n * Max cadence for SSE/poll-driven query invalidation in `useDbSync`. Events\n * that arrive within this window of the first one in a burst are merged into\n * a single `invalidateForEvents` call instead of one call per event — see the\n * `queueInvalidateBatch` comment at the call site.\n */\nconst INVALIDATE_COALESCE_MS = 250;\n\nclass HttpStatusError extends Error {\n status: number;\n\n constructor(status: number) {\n super(\"HTTP \" + status);\n this.status = status;\n }\n}\n\nexport type SyncEvent = {\n version?: number;\n source?: string;\n type?: string;\n key?: string;\n requestSource?: string;\n [k: string]: unknown;\n};\n\ntype PollResponse = {\n version: number;\n events: SyncEvent[];\n};\n\n/** Callback delivered to each transport subscriber for every batch of events. */\ntype EventSubscriber = (\n events: SyncEvent[],\n version: number | undefined,\n) => void;\n\nfunction getPollAbortMs(interval: number): number {\n return Math.max(POLL_ABORT_MIN_MS, interval * 4);\n}\n\nfunction isDocumentHidden(): boolean {\n return (\n typeof document !== \"undefined\" && document.visibilityState === \"hidden\"\n );\n}\n\nfunction resolveSseUrl(sseUrl: string | false | undefined): string | false {\n if (sseUrl === false) return false;\n if (isEmbedAuthActive()) return false;\n return agentNativePath(sseUrl ?? \"/_agent-native/events\");\n}\n\n// --- Hosted Realtime Gateway binding ----------------------------------------\n//\n// When the app is configured for the hosted gateway, the transport connects to\n// the gateway (cross-origin) instead of the Netlify app, carrying a short-lived\n// subscribe token minted from the app's own same-origin endpoint. All of this\n// is gated on a non-null binding — apps without hosted config keep the exact\n// local behavior below.\n\nconst REALTIME_GATEWAY_SSE_PATH = \"/stream\";\nconst REALTIME_GATEWAY_POLL_PATH = \"/poll\";\nconst REALTIME_TOKEN_MINT_PATH = \"/_agent-native/realtime-token\";\n/** Consecutive gateway failures before health-gating back to the local app. */\nconst HOSTED_UNHEALTHY_THRESHOLD = 3;\n\ninterface RealtimeGatewayBinding {\n /** Gateway SSE URL (token appended per connect). */\n sseUrl: string;\n /** Gateway poll URL (token appended per request). */\n pollUrl: string;\n /** Same-origin app endpoint that mints the subscribe token. */\n tokenMintUrl: string;\n}\n\nfunction getRealtimeConfig():\n | { transport?: string; gatewayBaseUrl?: string }\n | undefined {\n if (typeof window === \"undefined\") return undefined;\n return window.__AGENT_NATIVE_CONFIG__?.realtime;\n}\n\n/**\n * Resolve the hosted-gateway binding, or null to stay on the local app. Gated\n * on: SSE enabled (the gateway is push-first), not embed auth (needs the\n * same-origin session to mint), and `transport: \"hosted\"` with a base URL in\n * the impersonal SSR config.\n */\nfunction resolveGatewayBinding(\n localSseUrl: string | false,\n): RealtimeGatewayBinding | null {\n if (localSseUrl === false) return null;\n if (isEmbedAuthActive()) return null;\n const config = getRealtimeConfig();\n if (config?.transport !== \"hosted\") return null;\n const base = config.gatewayBaseUrl?.replace(/\\/+$/, \"\");\n if (!base) return null;\n return {\n sseUrl: `${base}${REALTIME_GATEWAY_SSE_PATH}`,\n pollUrl: `${base}${REALTIME_GATEWAY_POLL_PATH}`,\n tokenMintUrl: agentNativePath(REALTIME_TOKEN_MINT_PATH),\n };\n}\n\n/** ±20% jitter so gateway timeout/deploy-driven reconnects don't stampede. */\nfunction applyReconnectJitter(delay: number): number {\n const jitter = delay * 0.2 * (Math.random() * 2 - 1);\n return Math.max(0, Math.round(delay + jitter));\n}\n\nfunction normalizeEventPayload(payload: unknown): SyncEvent[] {\n if (!payload || typeof payload !== \"object\") return [];\n const record = payload as { type?: unknown; events?: unknown };\n if (record.type === \"batch\" && Array.isArray(record.events)) {\n return record.events.filter(\n (event): event is SyncEvent => !!event && typeof event === \"object\",\n );\n }\n if (Array.isArray(record.events)) {\n return record.events.filter(\n (event): event is SyncEvent => !!event && typeof event === \"object\",\n );\n }\n return [payload as SyncEvent];\n}\n\nfunction isAuthFailure(error: unknown): boolean {\n return (\n !!error &&\n typeof error === \"object\" &&\n \"status\" in error &&\n ((error as { status?: unknown }).status === 401 ||\n (error as { status?: unknown }).status === 403)\n );\n}\n\n/**\n * App-state keys that drive immediate UI navigation/interaction and must\n * never sit behind the invalidation coalesce window (see\n * `isInteractionCriticalSyncEvent`).\n */\nconst INTERACTION_CRITICAL_APP_STATE_KEYS = [\n \"navigate\",\n \"show-questions\",\n \"__set_url__\",\n];\n\n/**\n * True for sync events that drive immediate, agent-initiated UI navigation\n * or interaction rather than passive data invalidation — app-state writes in\n * general (they back `[\"app-state\"]` queries directly), and specifically the\n * `navigate` / `show-questions` / `__set_url__` app-state keys that\n * `invalidateForEvents` special-cases into their own query keys below.\n *\n * `useDbSync` batches ordinary invalidation-driving events (action/collab/db\n * change events) into one flush per `INVALIDATE_COALESCE_MS` so a chatty doc\n * doesn't refetch on every keystroke. That trade-off is wrong for these\n * events: agent-driven navigation, `set-url`, and guided-questions prompts\n * must land as close to instantly as possible, so any batch containing one\n * of these bypasses the coalesce window and flushes immediately instead.\n *\n * Exported as a small pure predicate so this classification is unit-testable\n * independent of the transport/timer plumbing around it.\n */\nexport function isInteractionCriticalSyncEvent(event: SyncEvent): boolean {\n return (\n event.source === \"app-state\" &&\n (event.key === \"*\" ||\n INTERACTION_CRITICAL_APP_STATE_KEYS.some(\n (key) =>\n event.key === key ||\n (typeof event.key === \"string\" && event.key.startsWith(`${key}:`)),\n ))\n );\n}\n\nasync function fetchPollJson<T>(\n pollUrl: string,\n since: number,\n interval: number,\n token?: string,\n): Promise<T> {\n const controller =\n typeof AbortController === \"undefined\" ? null : new AbortController();\n const timeout = controller\n ? setTimeout(() => controller.abort(), getPollAbortMs(interval))\n : null;\n\n // Local path stays exactly `?since=N`; the hosted gateway also carries the\n // subscribe token on the query string (a cross-origin fetch can't set the\n // Authorization header for the SSE sibling either, so both use the query).\n const url = token\n ? `${pollUrl}${pollUrl.includes(\"?\") ? \"&\" : \"?\"}since=${since}&token=${encodeURIComponent(token)}`\n : `${pollUrl}?since=${since}`;\n\n try {\n const res = await fetch(\n url,\n controller ? { signal: controller.signal } : undefined,\n );\n if (!res.ok) throw new HttpStatusError(res.status);\n // Await the json before the finally so a body-stream abort doesn't\n // produce a dangling promise that escapes as an unhandled rejection.\n return await res.json();\n } finally {\n if (timeout) clearTimeout(timeout);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Shared SSE + poll transport\n//\n// One SyncTransport per (pollUrl, sseUrl) pair is held in a module-level\n// registry. Both `useDbSync` and `useScreenRefreshKey` subscribe to it, so a\n// single browser tab opens exactly ONE SSE connection and ONE poll loop\n// regardless of how many hook instances are mounted.\n//\n// Lifecycle: the transport starts when the first subscriber joins and shuts\n// down when the last subscriber leaves. This makes it safe to SSR and to\n// mount/unmount hooks independently.\n// ---------------------------------------------------------------------------\n\ninterface TransportSubscription {\n onEvents: EventSubscriber;\n /**\n * Whether this subscriber wants the transport to pause when the tab is\n * hidden. The transport pauses only when ALL subscribers request it — any\n * subscriber with `pauseWhenHidden: false` keeps the connection alive.\n */\n pauseWhenHidden: boolean;\n /**\n * Requested poll interval in ms. The transport uses the minimum across all\n * subscribers so the most-frequent caller is satisfied.\n */\n interval: number;\n /** Requested poll interval while the tab has no active agent work. */\n idleInterval: number;\n /** Requested fallback interval while SSE is connected. */\n fallbackInterval: number;\n /**\n * Optional: notified when the shared SSE connection opens or closes (also\n * fired once with the current state when the subscriber joins). Lets\n * subscribers with their own fallback loops (e.g. the collab doc poll)\n * relax their cadence while the push path is healthy.\n */\n onSseStateChange?: (\n connected: boolean,\n capabilities?: readonly string[],\n ) => void;\n}\n\nclass SyncTransport {\n private subscribers = new Map<symbol, TransportSubscription>();\n private versionRef = 0;\n private timer: ReturnType<typeof setTimeout> | null = null;\n private stopped = false;\n private inFlight = false;\n private eventSource: EventSource | null = null;\n private sseConnected = false;\n private authFailureUntil = 0;\n private consecutiveFailures = 0;\n private activeChatIds = new Set<string>();\n // Hosted-gateway state. `mode` starts \"hosted\" when a binding is present and\n // flips to \"local\" on health-gate revert; `token` is the current subscribe\n // token (minted from the app, rotated over the stream), never part of any\n // registry key.\n private mode: \"hosted\" | \"local\";\n private token: string | null = null;\n private tokenMintInFlight: Promise<boolean> | null = null;\n private gatewayReconnectTimer: ReturnType<typeof setTimeout> | null = null;\n private capabilities: string[] = [];\n\n constructor(\n private readonly pollUrl: string,\n private readonly sseUrl: string | false,\n private readonly gateway: RealtimeGatewayBinding | null = null,\n ) {\n this.mode = gateway ? \"hosted\" : \"local\";\n }\n\n /** Capabilities advertised by the gateway handshake (e.g. `no-awareness`). */\n getCapabilities(): readonly string[] {\n return this.capabilities;\n }\n\n private get activeSseUrl(): string | false {\n if (this.mode === \"hosted\" && this.gateway) {\n if (!this.token) return this.gateway.sseUrl;\n const base = `${this.gateway.sseUrl}?token=${encodeURIComponent(this.token)}`;\n // Cursor lets the gateway replay the reconnect gap on connect instead of\n // deferring it to the next poll; 0 on first connect means nothing to replay.\n return this.versionRef > 0 ? `${base}&since=${this.versionRef}` : base;\n }\n return this.sseUrl;\n }\n\n private get activePollUrl(): string {\n return this.mode === \"hosted\" && this.gateway\n ? this.gateway.pollUrl\n : this.pollUrl;\n }\n\n /**\n * Mint a subscribe token from the app's same-origin endpoint.\n *\n * Only TERMINAL outcomes health-gate to local: 404 (gateway not provisioned)\n * and 401/403 (not authorized) — retrying those for this tab is pointless.\n * TRANSIENT failures (5xx/429 from a cold Netlify function, network errors)\n * keep the hosted intent and ride the jittered reconnect + unhealthy-threshold\n * path, so a deploy / scale-to-zero blip doesn't permanently abandon the\n * gateway for the tab.\n */\n private mintToken(): Promise<boolean> {\n if (!this.gateway || this.mode !== \"hosted\") return Promise.resolve(false);\n if (this.tokenMintInFlight) return this.tokenMintInFlight;\n const mintUrl = this.gateway.tokenMintUrl;\n this.tokenMintInFlight = (async () => {\n // Bound the mint like fetchPollJson bounds polls: a black-holed request\n // must resolve as a transient failure, not hang tokenMintInFlight forever\n // (poll() awaits this while holding inFlight, so a hung mint would stall\n // the whole transport with no timer pending).\n const controller =\n typeof AbortController === \"undefined\" ? null : new AbortController();\n const timeout = controller\n ? setTimeout(() => controller.abort(), POLL_ABORT_MIN_MS)\n : null;\n try {\n const res = await fetch(mintUrl, {\n credentials: \"same-origin\",\n ...(controller ? { signal: controller.signal } : {}),\n });\n if (res.ok) {\n const data = (await res.json()) as { token?: unknown };\n if (typeof data?.token === \"string\" && data.token) {\n this.token = data.token;\n // Deliberately NOT resetting consecutiveFailures here: minting\n // succeeds via the app origin even when the GATEWAY is down, so a\n // reset would let a mint-ok -> stream-fail loop run forever below\n // the unhealthy threshold. Only real gateway connectivity (stream\n // onopen / poll success) clears the count.\n return true;\n }\n // 2xx without a token is a terminal misconfiguration.\n this.revertToLocal();\n return false;\n }\n if (res.status === 404 || res.status === 401 || res.status === 403) {\n this.revertToLocal();\n return false;\n }\n this.onGatewayTransientFailure();\n return false;\n } catch {\n this.onGatewayTransientFailure();\n return false;\n } finally {\n if (timeout) clearTimeout(timeout);\n this.tokenMintInFlight = null;\n }\n })();\n return this.tokenMintInFlight;\n }\n\n /**\n * A transient gateway failure (mint 5xx/429, network). Keep hosted intent but\n * count toward the unhealthy threshold; revert to local only once it trips.\n */\n private onGatewayTransientFailure(): void {\n this.consecutiveFailures++;\n if (this.consecutiveFailures >= HOSTED_UNHEALTHY_THRESHOLD) {\n this.revertToLocal();\n }\n }\n\n /**\n * Health-gate back to the app's own /poll + /events with the cursor intact\n * (versionRef is untouched), so delivery stays poll-equivalent — never a\n * silent stall.\n */\n private revertToLocal(): void {\n if (this.mode === \"local\") return;\n this.mode = \"local\";\n this.token = null;\n // The local in-process SSE path sends no handshake, so hosted capabilities\n // (e.g. no-awareness) must not survive the fallback — stale caps would keep\n // collab on its fast presence cadence against the local stream. Subscribers\n // are re-notified via the close/connect cycle below.\n this.capabilities = [];\n if (this.gatewayReconnectTimer) {\n clearTimeout(this.gatewayReconnectTimer);\n this.gatewayReconnectTimer = null;\n }\n this.closeEvents();\n if (!this.stopped) {\n this.connectEvents();\n this.schedulePoll();\n }\n }\n\n private scheduleGatewayReconnect(): void {\n if (this.stopped || this.gatewayReconnectTimer) return;\n this.gatewayReconnectTimer = setTimeout(() => {\n this.gatewayReconnectTimer = null;\n if (!this.stopped && !this.eventSource) this.connectEvents();\n }, applyReconnectJitter(1000));\n }\n\n // -------------------------------------------------------------------------\n // Subscriber management\n // -------------------------------------------------------------------------\n\n add(id: symbol, sub: TransportSubscription): void {\n const wasEmpty = this.subscribers.size === 0;\n const wasActive = this.isActive;\n this.subscribers.set(id, sub);\n if (wasEmpty) {\n this.stopped = false;\n this.start();\n } else if (!wasActive && this.isActive) {\n // A collab surface (or other active subscriber) just joined. Catch up\n // immediately rather than waiting out an idle-cadence timer.\n this.pollNow();\n } else {\n this.reschedule();\n }\n sub.onSseStateChange?.(this.sseConnected, this.capabilities);\n }\n\n remove(id: symbol): void {\n this.subscribers.delete(id);\n if (this.subscribers.size === 0) {\n this.teardown();\n } else {\n // Recalculate poll interval in case the leaving subscriber was the\n // fastest caller; reschedule with the updated cadence.\n this.reschedule();\n }\n }\n\n // -------------------------------------------------------------------------\n // Derived settings (aggregate over active subscribers)\n // -------------------------------------------------------------------------\n\n private get effectivePauseWhenHidden(): boolean {\n // Pause only if every subscriber has opted in.\n for (const sub of this.subscribers.values()) {\n if (!sub.pauseWhenHidden) return false;\n }\n return true;\n }\n\n private get effectiveInterval(): number {\n let min = Infinity;\n for (const sub of this.subscribers.values()) {\n if (sub.interval < min) min = sub.interval;\n }\n return isFinite(min) ? min : 2000;\n }\n\n private get effectiveIdleInterval(): number {\n let min = Infinity;\n for (const sub of this.subscribers.values()) {\n if (sub.idleInterval < min) min = sub.idleInterval;\n }\n return isFinite(min) ? min : IDLE_POLL_INTERVAL_MS;\n }\n\n private get isActive(): boolean {\n return this.activeChatIds.size > 0;\n }\n\n private get effectiveFallbackInterval(): number {\n let min = Infinity;\n for (const sub of this.subscribers.values()) {\n if (sub.fallbackInterval < min) min = sub.fallbackInterval;\n }\n return isFinite(min) ? min : SSE_FALLBACK_INTERVAL_MS;\n }\n\n // -------------------------------------------------------------------------\n // Event fan-out\n // -------------------------------------------------------------------------\n\n private fan(events: SyncEvent[], version: number | undefined): void {\n for (const sub of this.subscribers.values()) {\n sub.onEvents(events, version);\n }\n }\n\n private setSseConnected(connected: boolean): void {\n if (this.sseConnected === connected) return;\n this.sseConnected = connected;\n this.notifySseState();\n }\n\n /**\n * Notify subscribers of the current SSE state AND the negotiated gateway\n * capabilities. Called on connect/disconnect and again once the handshake\n * arrives, so a consumer (e.g. collab) can decide — for instance — not to\n * relax its presence cadence on a `no-awareness` hosted stream.\n */\n private notifySseState(): void {\n for (const sub of this.subscribers.values()) {\n sub.onSseStateChange?.(this.sseConnected, this.capabilities);\n }\n }\n\n // -------------------------------------------------------------------------\n // SSE + poll loop (mirrors the original per-hook logic exactly)\n // -------------------------------------------------------------------------\n\n private authFailureDelayMs(): number {\n return Math.max(0, this.authFailureUntil - Date.now());\n }\n\n private schedulePoll(): void {\n if (this.stopped) return;\n if (this.effectivePauseWhenHidden && isDocumentHidden()) return;\n if (this.timer) clearTimeout(this.timer);\n const authDelay = this.authFailureDelayMs();\n if (authDelay > 0) {\n this.timer = setTimeout(() => {\n this.timer = null;\n void this.poll();\n }, authDelay);\n return;\n }\n const visibleBase = this.isActive\n ? this.effectiveInterval\n : this.sseConnected\n ? this.effectiveFallbackInterval\n : this.effectiveIdleInterval;\n const base = isDocumentHidden()\n ? Math.max(visibleBase, HIDDEN_POLL_INTERVAL_MS)\n : visibleBase;\n // Exponential backoff while polls keep failing (500s during a deploy,\n // DNS blips, a struggling DB). Auth failures have their own cooldown\n // above; this covers everything else so a down server isn't hammered at\n // full cadence. Resets on the first successful poll.\n const backoff =\n this.consecutiveFailures > 0\n ? Math.min(base * 2 ** Math.min(this.consecutiveFailures, 5), 300_000)\n : base;\n // Jitter only for gateway-capable transports so reconnect/poll retries\n // don't stampede a gateway deploy; apps with no gateway config keep the\n // exact deterministic cadence.\n const delay = this.gateway ? applyReconnectJitter(backoff) : backoff;\n this.timer = setTimeout(() => {\n this.timer = null;\n void this.poll();\n }, delay);\n }\n\n private reschedule(): void {\n // Only need to act if a timer is already pending; next natural tick will\n // pick up the new effective interval otherwise.\n if (this.timer !== null) {\n clearTimeout(this.timer);\n this.timer = null;\n this.schedulePoll();\n }\n }\n\n private closeEvents(): void {\n if (!this.eventSource) return;\n this.eventSource.close();\n this.eventSource = null;\n this.setSseConnected(false);\n }\n\n private connectEvents(): void {\n if (\n this.stopped ||\n this.eventSource ||\n typeof EventSource === \"undefined\" ||\n (this.effectivePauseWhenHidden && isDocumentHidden())\n ) {\n return;\n }\n\n // Hosted gateway needs a subscribe token before the stream can open.\n // EventSource can't set headers, so the token rides the connect query\n // string (see activeSseUrl). Mint first, then connect.\n if (this.mode === \"hosted\" && this.gateway && !this.token) {\n void this.mintToken().then((ok) => {\n if (this.stopped) return;\n if (ok && !this.eventSource) {\n this.connectEvents();\n } else if (!ok && this.mode === \"hosted\") {\n // Transient mint failure (terminal ones already reverted to local,\n // flipping mode). Without a retry timer nothing would ever reopen\n // SSE — connectEvents is only reachable from focus/visibility/run\n // events — leaving the tab poll-only at the idle cadence.\n this.scheduleGatewayReconnect();\n }\n });\n return;\n }\n\n const url = this.activeSseUrl;\n if (!url) return;\n\n const source = new EventSource(url);\n this.eventSource = source;\n source.onopen = () => {\n this.setSseConnected(true);\n if (this.mode === \"hosted\") {\n // A live gateway stream is the real health signal: clear failure\n // counts accumulated by mint/stream retries. Local mode keeps main's\n // semantics (only a successful poll resets the poll backoff).\n this.consecutiveFailures = 0;\n }\n this.schedulePoll();\n };\n source.onerror = () => {\n // A replaced/closed source can still fire late; ignore it so it can't\n // flip the connected state or tear down the current stream.\n if (this.eventSource !== source) return;\n this.setSseConnected(false);\n if (this.mode === \"hosted\" && this.gateway) {\n // Browser auto-reconnect reuses the URL frozen at construction, so it\n // would replay from a stale `since`. Own the reconnect so the next\n // connect rebuilds activeSseUrl from the current versionRef. CLOSED also\n // refreshes the token (expired/rotated/deploy); CONNECTING keeps it. A\n // successful reconnect resets the count in onopen; a hard-down gateway\n // trips the threshold and health-gates to local.\n if (source.readyState === EventSource.CLOSED) this.token = null;\n this.closeEvents();\n this.onGatewayTransientFailure();\n if (this.mode === \"hosted\") this.scheduleGatewayReconnect();\n return;\n }\n // Local mode: native EventSource reconnect is fine. Drop a CLOSED ref so a\n // later connectEvents() (focus/visibility) can establish a fresh stream.\n if (source.readyState === EventSource.CLOSED) {\n this.eventSource = null;\n }\n this.schedulePoll();\n };\n source.onmessage = (message) => {\n try {\n const payload = JSON.parse(message.data);\n const events = normalizeEventPayload(payload);\n const version =\n typeof payload?.version === \"number\" ? payload.version : undefined;\n this.applyVersion(events, version);\n this.fan(events, version);\n } catch {\n // Ignore malformed SSE frames; polling is the safety net.\n }\n };\n\n if (this.mode === \"hosted\" && this.gateway) {\n // Control frames ride NAMED SSE events so they never reach onmessage /\n // normalizeEventPayload as spurious data events.\n source.addEventListener(REALTIME_SSE_HANDSHAKE_EVENT, (e) => {\n const hs = parseHandshakeFrame((e as MessageEvent).data);\n if (!hs) return;\n if (hs.protocol !== REALTIME_PROTOCOL_VERSION) {\n // Surface an unexpected protocol rather than silently adopting its\n // capabilities; keep the conservative (no advertised capabilities)\n // stance so downstream (collab) does not relax on assumptions.\n console.warn(\n `[agent-native] unsupported realtime protocol ${hs.protocol} (expected ${REALTIME_PROTOCOL_VERSION})`,\n );\n return;\n }\n this.capabilities = hs.capabilities;\n // Re-notify subscribers now that capabilities are known — the initial\n // connected notification fired before the handshake arrived.\n this.notifySseState();\n });\n source.addEventListener(REALTIME_SSE_TOKEN_EVENT, (e) => {\n const frame = parseTokenFrame((e as MessageEvent).data);\n if (!frame?.token) return;\n this.token = frame.token;\n // EventSource can't change a live stream's URL, and its auto-reconnect\n // reuses the original (old-token) URL. Close and reconnect (jittered) so\n // the rotated token is actually used on the next connect.\n this.closeEvents();\n this.scheduleGatewayReconnect();\n });\n }\n }\n\n /**\n * Advance the transport's shared version cursor. Subscribers receive the\n * raw events and decide independently which ones are \"fresh\" relative to\n * their own cursor, but the transport-level cursor ensures the poll\n * `?since=` parameter always advances.\n */\n private applyVersion(events: SyncEvent[], version: number | undefined): void {\n let max = typeof version === \"number\" ? version : 0;\n for (const evt of events) {\n const v = typeof evt.version === \"number\" ? evt.version : 0;\n if (v > max) max = v;\n }\n if (max > this.versionRef) this.versionRef = max;\n }\n\n private async poll(): Promise<void> {\n if (this.stopped || this.inFlight) return;\n this.inFlight = true;\n try {\n if (this.mode === \"hosted\" && this.gateway && !this.token) {\n // No token yet — mint before polling the gateway. A failed mint has\n // already reverted us to local; a scheduled poll will pick it up.\n const ok = await this.mintToken();\n if (!ok || this.stopped) return;\n }\n const data = await fetchPollJson<PollResponse>(\n this.activePollUrl,\n this.versionRef,\n this.effectiveInterval,\n this.mode === \"hosted\" ? (this.token ?? undefined) : undefined,\n );\n if (this.stopped) return;\n this.consecutiveFailures = 0;\n const events = data.events ?? [];\n this.applyVersion(events, data.version);\n this.fan(events, data.version);\n } catch (err) {\n if (this.stopped) return;\n this.consecutiveFailures++;\n if (this.mode === \"hosted\" && this.gateway) {\n // Gateway auth failure → re-mint (expired/rotated token), WITHOUT\n // tripping the poll-401 cooldown. Persistent failures of any kind\n // health-gate back to the local app.\n if (isAuthFailure(err)) {\n this.token = null;\n void this.mintToken();\n }\n if (this.consecutiveFailures >= HOSTED_UNHEALTHY_THRESHOLD) {\n this.revertToLocal();\n }\n } else if (isAuthFailure(err)) {\n this.authFailureUntil = Date.now() + POLL_AUTH_FAILURE_COOLDOWN_MS;\n this.closeEvents();\n }\n // Network error — retried on the next (backed-off) interval.\n } finally {\n this.inFlight = false;\n this.schedulePoll();\n }\n }\n\n private pollNow(): void {\n if (this.effectivePauseWhenHidden && isDocumentHidden()) return;\n if (this.authFailureDelayMs() > 0) {\n this.schedulePoll();\n return;\n }\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n this.connectEvents();\n void this.poll();\n }\n\n private handleVisibilityChange = (): void => {\n if (document.visibilityState === \"visible\") {\n this.connectEvents();\n this.pollNow();\n } else if (this.effectivePauseWhenHidden) {\n this.closeEvents();\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n } else {\n // Keep push connected and the polling safety net alive in backgrounded\n // tabs, but relax an active chat's cadence so hidden work stays current\n // without polling as aggressively as the visible surface.\n this.reschedule();\n }\n };\n\n private handleFocus = (): void => {\n this.pollNow();\n };\n\n private handleChatRunning = (event: Event): void => {\n const detail = (\n event as CustomEvent<{\n isRunning?: unknown;\n running?: unknown;\n tabId?: unknown;\n }>\n ).detail;\n const running =\n typeof detail?.isRunning === \"boolean\"\n ? detail.isRunning\n : typeof detail?.running === \"boolean\"\n ? detail.running\n : null;\n if (running === null) return;\n\n const id =\n typeof detail?.tabId === \"string\" && detail.tabId\n ? detail.tabId\n : \"__default__\";\n const wasActive = this.isActive;\n if (running) this.activeChatIds.add(id);\n else this.activeChatIds.delete(id);\n if (wasActive === this.isActive) return;\n\n if (this.isActive) {\n // Run start is a high-signal indication that cross-process writes are\n // imminent. Catch up now, then stay on the active cadence.\n this.pollNow();\n } else {\n this.reschedule();\n }\n };\n\n private start(): void {\n // Universal browser-local demo-mode presentation redaction. Idempotent and\n // a no-op until the local preference is on. Lives here because every root\n // already mounts useDbSync, so this needs zero per-template wiring.\n ensureEmbedAuthFetchInterceptor();\n ensureDemoModeFetchInterceptor();\n\n if (!this.effectivePauseWhenHidden || !isDocumentHidden()) {\n this.connectEvents();\n void this.poll();\n }\n window.addEventListener(\"focus\", this.handleFocus);\n window.addEventListener(\"agentNative.chatRunning\", this.handleChatRunning);\n document.addEventListener(\"visibilitychange\", this.handleVisibilityChange);\n }\n\n private teardown(): void {\n this.stopped = true;\n this.closeEvents();\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n if (this.gatewayReconnectTimer) {\n clearTimeout(this.gatewayReconnectTimer);\n this.gatewayReconnectTimer = null;\n }\n window.removeEventListener(\"focus\", this.handleFocus);\n window.removeEventListener(\n \"agentNative.chatRunning\",\n this.handleChatRunning,\n );\n document.removeEventListener(\n \"visibilitychange\",\n this.handleVisibilityChange,\n );\n }\n}\n\n/**\n * Registry of active transports keyed by \"<pollUrl>\\0<sseUrl>\".\n * Module-level singleton: survives React render cycles, shared across all\n * hook instances in the same browser tab.\n */\nconst transportRegistry = new Map<string, SyncTransport>();\n\nfunction getOrCreateTransport(\n pollUrl: string,\n sseUrl: string | false,\n gateway: RealtimeGatewayBinding | null = null,\n): SyncTransport {\n // Key on the LOCAL urls only — a transport may flip hosted→local at runtime,\n // and the token must never fragment the registry, so neither is in the key.\n const key = `${pollUrl}\\0${String(sseUrl)}`;\n let transport = transportRegistry.get(key);\n if (!transport) {\n transport = new SyncTransport(pollUrl, sseUrl, gateway);\n transportRegistry.set(key, transport);\n }\n return transport;\n}\n\n/** Remove a transport from the registry once torn down (last subscriber left). */\nfunction releaseTransport(pollUrl: string, sseUrl: string | false): void {\n const key = `${pollUrl}\\0${String(sseUrl)}`;\n // Leave the entry in place: SSE/poll is already stopped inside the class;\n // the next subscriber will re-start it via `add()`. Clearing the map entry\n // prevents any dangling reference from the old SyncTransport instance.\n transportRegistry.delete(key);\n}\n\n// ---------------------------------------------------------------------------\n// Internal test helper — reset transport registry between tests.\n// ---------------------------------------------------------------------------\n/** @internal */\nexport function _resetSyncTransportRegistryForTests(): void {\n transportRegistry.clear();\n}\n\nexport interface SubscribeSyncEventsOptions {\n /** Receives every batch of change events (SSE push or poll). */\n onEvents: (events: SyncEvent[], version: number | undefined) => void;\n /** Notified when the shared SSE connection opens/closes (and once on join). */\n onSseStateChange?: (\n connected: boolean,\n capabilities?: readonly string[],\n ) => void;\n pollUrl?: string;\n sseUrl?: string | false;\n pauseWhenHidden?: boolean;\n /**\n * Poll cadence this subscriber requests from the SHARED poll loop. The\n * transport uses the minimum across subscribers, so the defaults here are\n * deliberately high: subscribing must not speed up the shared poll —\n * useDbSync (mounted by every template root) already sets the pace.\n */\n interval?: number;\n fallbackInterval?: number;\n}\n\n/**\n * Subscribe to the shared SSE + poll transport without the React Query\n * invalidation behavior of `useDbSync`. Use this instead of opening another\n * `EventSource` to `/_agent-native/events` — a browser tab should hold ONE\n * SSE connection no matter how many features listen to it (extra streams eat\n * the per-origin connection budget and starve data fetches, especially on\n * HTTP/1.1 dev servers).\n *\n * Returns an unsubscribe function. Safe to call only in browser contexts.\n */\nexport function subscribeSyncEvents(\n options: SubscribeSyncEventsOptions,\n): () => void {\n const pollUrl = agentNativePath(options.pollUrl ?? \"/_agent-native/poll\");\n const sseUrl = resolveSseUrl(options.sseUrl);\n const transport = getOrCreateTransport(\n pollUrl,\n sseUrl,\n resolveGatewayBinding(sseUrl),\n );\n const id = Symbol(\"subscribeSyncEvents\");\n transport.add(id, {\n onEvents: options.onEvents,\n onSseStateChange: options.onSseStateChange,\n pauseWhenHidden: options.pauseWhenHidden ?? false,\n interval: options.interval ?? 60_000,\n idleInterval: options.interval ?? 60_000,\n fallbackInterval: options.fallbackInterval ?? 60_000,\n });\n return () => {\n transport.remove(id);\n if (!transport[\"subscribers\"].size) {\n releaseTransport(pollUrl, sseUrl);\n }\n };\n}\n\n/**\n * Hook that listens to /_agent-native/events for DB change events and\n * invalidates react-query caches when changes are detected. Falls back to\n * /_agent-native/poll so cross-process/serverless writes still show up.\n *\n * Works in all deployment environments (serverless, edge, long-lived server).\n * SSE is the fast path; polling is the safety net.\n *\n * @param options.queryClient - The react-query QueryClient instance\n * @param options.queryKeys - **Deprecated and ignored.** The hook uses\n * framework-owned fixed prefixes plus per-source change counters instead of\n * caller-supplied key lists. Kept in the type signature for backward\n * compatibility — existing call sites that still pass this option keep\n * working but the value has no effect.\n * @param options.pollUrl - Poll endpoint URL. Default: \"/_agent-native/poll\"\n * @param options.sseUrl - SSE endpoint URL. Default: \"/_agent-native/events\".\n * Pass false to disable SSE and use polling only.\n * @param options.onEvent - Optional callback for each change event\n * @param options.interval - Poll interval in ms. Default: 2000\n * @param options.fallbackInterval - Poll interval while SSE is connected.\n * Default: 60000\n * @param options.pauseWhenHidden - Pause sync while the tab is hidden.\n * Default: false. Hidden tabs keep SSE connected and poll no faster than\n * every 10 seconds while active; idle polling remains at 60 seconds.\n * @param options.ignoreSource - Skip events whose `requestSource` matches this\n * value. Use a per-tab ID so the UI ignores its own writes while still\n * picking up changes from other tabs, agents, and scripts.\n * @param options.actionInvalidatePredicate - Optional filter for the broad\n * compatibility invalidate triggered by `action` events. Use this to keep\n * expensive active queries on explicit-refresh semantics while still letting\n * normal source-versioned queries react through `useChangeVersion`.\n * @param options.suppressActionInvalidationFor - Action names whose sync events\n * should not invalidate all action queries. Use only for high-volume\n * background actions that perform their own narrow client invalidation.\n */\nexport function useDbSync(\n options: {\n queryClient?: QueryClient;\n queryKeys?: string[];\n pollUrl?: string;\n sseUrl?: string | false;\n /** @deprecated Use pollUrl instead */\n eventsUrl?: string;\n onEvent?: (data: any) => void;\n interval?: number;\n fallbackInterval?: number;\n pauseWhenHidden?: boolean;\n ignoreSource?: string;\n actionInvalidatePredicate?: (query: Query) => boolean;\n suppressActionInvalidationFor?: string[];\n } = {},\n): void {\n const {\n queryClient,\n pollUrl = agentNativePath(options.eventsUrl ?? \"/_agent-native/poll\"),\n sseUrl = resolveSseUrl(options.sseUrl),\n interval = 2000,\n fallbackInterval = Math.max(\n options.fallbackInterval ?? SSE_FALLBACK_INTERVAL_MS,\n interval,\n ),\n pauseWhenHidden = false,\n } = options;\n const idleInterval =\n options.interval === undefined ? IDLE_POLL_INTERVAL_MS : interval;\n\n const onEventRef = useRef(options.onEvent);\n onEventRef.current = options.onEvent;\n\n const ignoreSourceRef = useRef(options.ignoreSource);\n ignoreSourceRef.current = options.ignoreSource;\n const actionInvalidatePredicateRef = useRef(\n options.actionInvalidatePredicate,\n );\n actionInvalidatePredicateRef.current = options.actionInvalidatePredicate;\n const suppressActionInvalidationForRef = useRef(\n options.suppressActionInvalidationFor,\n );\n suppressActionInvalidationForRef.current =\n options.suppressActionInvalidationFor;\n\n useEffect(() => {\n const id = Symbol(\"useDbSync\");\n // Per-subscriber version cursor: tracks which events have already been\n // processed by THIS subscriber so stale poll re-deliveries are ignored.\n let subscriberVersion = 0;\n\n // Coalesce bursts of SSE-driven invalidation into at most one flush per\n // INVALIDATE_COALESCE_MS. A chatty doc (many small agent edits, several\n // peers editing at once) can otherwise deliver a handful of `action`/\n // `collab` events within a few hundred ms, each independently calling\n // `queryClient.invalidateQueries` and firing `onEvent` — every one of\n // those touches whatever query subscribers are mounted (e.g. a\n // full-page editor) even though the end state only needs to be\n // refreshed once. Version bookkeeping stays synchronous (below) so\n // freshness filtering for the NEXT batch is unaffected by the delay.\n //\n // This coalesce window is wrong for interaction-critical events (agent\n // navigation, `set-url`, guided questions — see\n // `isInteractionCriticalSyncEvent`): those must reach the UI immediately,\n // not up to INVALIDATE_COALESCE_MS late. So a fresh batch containing one\n // of those flushes synchronously (queued + new events together,\n // canceling any pending timer) instead of joining the coalesce window.\n // Pure invalidation bursts with no interaction-critical members keep the\n // coalesced behavior.\n let pendingInvalidateEvents: SyncEvent[] = [];\n let invalidateTimer: ReturnType<typeof setTimeout> | null = null;\n\n function flushInvalidateBatch() {\n if (invalidateTimer) {\n clearTimeout(invalidateTimer);\n invalidateTimer = null;\n }\n if (pendingInvalidateEvents.length === 0) return;\n const batch = pendingInvalidateEvents;\n pendingInvalidateEvents = [];\n invalidateForEvents(batch);\n }\n\n function queueInvalidateBatch(events: SyncEvent[]) {\n pendingInvalidateEvents.push(...events);\n if (events.some(isInteractionCriticalSyncEvent)) {\n flushInvalidateBatch();\n return;\n }\n if (invalidateTimer) return;\n invalidateTimer = setTimeout(\n flushInvalidateBatch,\n INVALIDATE_COALESCE_MS,\n );\n }\n\n function hasAppStateEvent(events: SyncEvent[], key: string): boolean {\n return events.some(\n (event) =>\n event.source === \"app-state\" &&\n (event.key === key ||\n event.key === \"*\" ||\n (typeof event.key === \"string\" && event.key.startsWith(`${key}:`))),\n );\n }\n\n function invalidateForEvents(events: SyncEvent[]) {\n const ignore = ignoreSourceRef.current;\n const ownBrowserSource = getBrowserTabId();\n const relevant = events.filter(\n (event) =>\n !(\n event.source === \"action\" &&\n event.requestSource === ownBrowserSource\n ) &&\n (!ignore || event.requestSource !== ignore),\n );\n const suppressedActions = new Set(\n suppressActionInvalidationForRef.current ?? [],\n );\n const isSuppressedActionEvent = (evt: SyncEvent) =>\n evt.source === \"action\" &&\n typeof evt.key === \"string\" &&\n suppressedActions.has(evt.key);\n const nonAwareness = relevant.filter((e) => e.source !== \"awareness\");\n const suppressesWholeBatch =\n nonAwareness.length > 0 &&\n nonAwareness.every((evt) => evt.source === \"action\") &&\n nonAwareness.every(isSuppressedActionEvent);\n\n // Bump per-source change counters. Components that read these via\n // `useChangeVersion(source)` and fold the value into a React Query\n // queryKey get a targeted refetch — no whole-cache invalidate, no\n // request storm. See `use-change-version.ts` for the contract.\n for (const evt of relevant) {\n const src = typeof evt.source === \"string\" ? evt.source : \"\";\n const ver = typeof evt.version === \"number\" ? evt.version : 0;\n if (src && ver > 0) {\n bumpChangeVersion(src, ver);\n if (typeof evt.key === \"string\" && evt.key) {\n bumpChangeVersion(`${src}:${evt.key}`, ver);\n }\n }\n }\n\n // Awareness (cursor/presence) events never change action/extension/\n // app-state query results, but they arrive on every peer keystroke and\n // carry no version (so the freshness filter always passes them). Keep\n // them out of the invalidate block or an idle collaborative doc turns\n // every peer's cursor move into a framework-wide refetch storm; they\n // still reach onEvent below for callers that render presence.\n const invalidating = relevant.filter((e) => e.source !== \"awareness\");\n\n if (invalidating.length > 0 && queryClient) {\n // Sync events describe completed writes. If a matching read is already\n // in flight, let it finish instead of aborting and immediately\n // launching the same request again. Repeated action events otherwise\n // turn a slow endpoint into a cancel/restart loop that never settles.\n const invalidateWithoutCancel = (filters?: {\n queryKey?: string[];\n predicate?: (query: Query) => boolean;\n }) => {\n const needsTrailingRefresh =\n (queryClient.isFetching?.(filters) ?? 0) > 0;\n const completion = queryClient.invalidateQueries(filters, {\n cancelRefetch: false,\n });\n // TanStack Query deliberately leaves an in-flight fetch alone when\n // cancelRefetch is false. Queue one post-settlement invalidation so\n // a write that landed after that read began cannot be cleared as\n // fresh by the older response.\n if (needsTrailingRefresh && completion instanceof Promise) {\n void completion.then(\n () => queryClient.invalidateQueries(filters),\n () => {},\n );\n }\n };\n const hasActionEvent = invalidating.some(\n (evt) => evt.source === \"action\" && !isSuppressedActionEvent(evt),\n );\n if (hasActionEvent) {\n // Action-backed reads share the [\"action\"] prefix. Keep the default\n // refresh targeted to those queries; invalidating every active query\n // makes one agent write fan out across unrelated provider reads,\n // dashboards, and background status checks. Older apps that still\n // need broad compatibility can opt in with a predicate.\n const predicate = actionInvalidatePredicateRef.current;\n invalidateWithoutCancel(\n predicate ? { predicate } : { queryKey: [\"action\"] },\n );\n }\n\n // Framework-level invalidate: a small, fixed list of query-key\n // prefixes the framework's own hooks/components use (action results,\n // extension state, application-state, the agent's `set-url` channel,\n // etc.). Templates' own data queries do NOT live here — they react\n // through `useChangeVersion(source)` in their query keys instead, so\n // a single change event doesn't fan out into \"refetch everything\".\n // Suppressed-action-only batches skip this whole list (their\n // mutations perform their own narrow invalidation) — but events must\n // STILL reach the onEvent forwarding below, so guard, don't return.\n //\n // Invalidation is scoped by source. Data-query prefixes (action,\n // extension, tool) refetch only when the batch carries an event that\n // can actually change action/extension-backed data — action\n // mutations, settings, extension, collab, screen-refresh, etc.\n // `app-state` events (agent/UI navigation, selection, and the\n // set-url/questions command channel) drive their OWN keys below and\n // must NEVER fan out into \"refetch every action query\": an active\n // agent session mirrors navigation + selection into application_state\n // continuously, and the serverless poll path replays those writes\n // back to the originating tab (the DB-scan fallback cannot preserve\n // `requestSource`, so `ignoreSource` can't filter them). Fanning each\n // one into a full `[\"action\"]` refetch turned a normal session into a\n // client fetch storm that exhausted the DB connection pool — which in\n // turn starved run heartbeat writes and surfaced as `stale_run`.\n if (!suppressesWholeBatch) {\n const hasDataChangingEvent = invalidating.some(\n (evt) => evt.source !== \"app-state\",\n );\n if (hasDataChangingEvent) {\n const hasFrameworkPrefixEvent = invalidating.some((evt) =>\n [\"extensions\", \"extension\", \"tool\", \"tools\", \"slots\"].includes(\n evt.source ?? \"\",\n ),\n );\n // The action-specific invalidation above already refreshed\n // [\"action\"]. A mixed action + extension/tool batch still needs\n // the independent framework prefixes, while pure action batches\n // retain their narrow storm-resistant invalidation.\n if (!hasActionEvent) {\n invalidateWithoutCancel({ queryKey: [\"action\"] });\n }\n if (!hasActionEvent || hasFrameworkPrefixEvent) {\n invalidateWithoutCancel({ queryKey: [\"extension\"] });\n invalidateWithoutCancel({ queryKey: [\"extensions\"] });\n invalidateWithoutCancel({ queryKey: [\"extension-slots\"] });\n invalidateWithoutCancel({ queryKey: [\"slot-installs\"] });\n invalidateWithoutCancel({ queryKey: [\"slot-available\"] });\n invalidateWithoutCancel({ queryKey: [\"tool\"] });\n invalidateWithoutCancel({ queryKey: [\"tools\"] });\n }\n }\n if (invalidating.some((evt) => evt.source === \"app-state\")) {\n invalidateWithoutCancel({ queryKey: [\"app-state\"] });\n }\n if (hasAppStateEvent(invalidating, \"navigate\")) {\n invalidateWithoutCancel({ queryKey: [\"navigate-command\"] });\n }\n if (hasAppStateEvent(invalidating, \"show-questions\")) {\n invalidateWithoutCancel({ queryKey: [\"show-questions\"] });\n }\n if (hasAppStateEvent(invalidating, \"__set_url__\")) {\n invalidateWithoutCancel({ queryKey: [\"__set_url__\"] });\n }\n }\n }\n\n // Always forward all events to onEvent — templates can layer surgical\n // logic on top (e.g. ignore their own writes via requestSource, or\n // invalidate inactive queries for a specific source).\n for (const evt of events) {\n onEventRef.current?.(evt);\n }\n }\n\n function onEvents(events: SyncEvent[], version: number | undefined): void {\n const freshEvents = events.filter((event) => {\n const v = typeof event.version === \"number\" ? event.version : 0;\n return v === 0 || v > subscriberVersion;\n });\n\n if (freshEvents.length > 0) {\n queueInvalidateBatch(freshEvents);\n }\n\n const maxEventVersion = freshEvents.reduce(\n (max, event) =>\n Math.max(max, typeof event.version === \"number\" ? event.version : 0),\n 0,\n );\n subscriberVersion = Math.max(\n subscriberVersion,\n version ?? 0,\n maxEventVersion,\n );\n }\n\n const transport = getOrCreateTransport(\n pollUrl,\n sseUrl,\n resolveGatewayBinding(sseUrl),\n );\n transport.add(id, {\n onEvents,\n pauseWhenHidden,\n interval,\n idleInterval,\n fallbackInterval,\n });\n\n return () => {\n if (invalidateTimer) {\n clearTimeout(invalidateTimer);\n // Flush synchronously on unmount so a pending batch isn't silently\n // dropped (e.g. a route change right after an agent edit lands).\n flushInvalidateBatch();\n }\n transport.remove(id);\n // If the registry still holds this transport, and the transport is now\n // empty, evict it so the next mount gets a fresh instance rather than a\n // stopped-but-still-registered one (the registry entry being cleared by\n // releaseTransport is the signal to rebuild state).\n if (!transport[\"subscribers\"].size) {\n releaseTransport(pollUrl, sseUrl);\n }\n };\n }, [\n pollUrl,\n sseUrl,\n queryClient,\n interval,\n idleInterval,\n fallbackInterval,\n pauseWhenHidden,\n ]);\n}\n\n/** @deprecated Use useDbSync instead */\nexport const useFileWatcher = useDbSync;\n\n/**\n * Subscribe to `refresh-screen` events from the agent. Returns an integer\n * that increments every time the agent invokes the framework's `refresh-screen`\n * tool. Apply it as a React `key` on the main content wrapper (the part\n * OUTSIDE the agent chat sidebar) so that region remounts and re-fetches its\n * data while the chat, sidebar, and any other persistent chrome keep their\n * in-flight state.\n *\n * Usage in a template's root:\n *\n * const screenKey = useScreenRefreshKey();\n * return (\n * <AppLayout>\n * <div key={screenKey}>\n * <Outlet />\n * </div>\n * </AppLayout>\n * );\n */\nexport function useScreenRefreshKey(\n options: {\n pollUrl?: string;\n sseUrl?: string | false;\n interval?: number;\n fallbackInterval?: number;\n pauseWhenHidden?: boolean;\n } = {},\n): number {\n const {\n pollUrl = agentNativePath(options.pollUrl ?? \"/_agent-native/poll\"),\n sseUrl = resolveSseUrl(options.sseUrl),\n interval = 2000,\n fallbackInterval = Math.max(\n options.fallbackInterval ?? SSE_FALLBACK_INTERVAL_MS,\n interval,\n ),\n pauseWhenHidden = false,\n } = options;\n const idleInterval =\n options.interval === undefined ? IDLE_POLL_INTERVAL_MS : interval;\n const [key, setKey] = useState(0);\n\n useEffect(() => {\n const id = Symbol(\"useScreenRefreshKey\");\n // Per-subscriber version cursor (same freshness logic as useDbSync).\n let subscriberVersion = 0;\n\n function onEvents(events: SyncEvent[], version: number | undefined): void {\n const freshEvents = events.filter((event) => {\n const v = typeof event.version === \"number\" ? event.version : 0;\n return v === 0 || v > subscriberVersion;\n });\n if (freshEvents.some((e) => e.source === \"screen-refresh\")) {\n setKey((k) => k + 1);\n }\n const maxEventVersion = freshEvents.reduce(\n (max, event) =>\n Math.max(max, typeof event.version === \"number\" ? event.version : 0),\n 0,\n );\n subscriberVersion = Math.max(\n subscriberVersion,\n version ?? 0,\n maxEventVersion,\n );\n }\n\n const transport = getOrCreateTransport(\n pollUrl,\n sseUrl,\n resolveGatewayBinding(sseUrl),\n );\n transport.add(id, {\n onEvents,\n pauseWhenHidden,\n interval,\n idleInterval,\n fallbackInterval,\n });\n\n return () => {\n transport.remove(id);\n if (!transport[\"subscribers\"].size) {\n releaseTransport(pollUrl, sseUrl);\n }\n };\n }, [\n pollUrl,\n sseUrl,\n interval,\n idleInterval,\n fallbackInterval,\n pauseWhenHidden,\n ]);\n\n return key;\n}\n"]}
1
+ {"version":3,"file":"use-db-sync.js","sourceRoot":"","sources":["../../src/client/use-db-sync.ts"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useRef, useState } from \"react\";\n\nimport { ensureDemoModeFetchInterceptor } from \"../demo/fetch-interceptor.js\";\nimport {\n parseHandshakeFrame,\n parseTokenFrame,\n REALTIME_PROTOCOL_VERSION,\n REALTIME_SSE_HANDSHAKE_EVENT,\n REALTIME_SSE_TOKEN_EVENT,\n} from \"../realtime-protocol.js\";\nimport { agentNativePath } from \"./api-path.js\";\nimport { getBrowserTabId } from \"./browser-tab-id.js\";\nimport {\n ensureEmbedAuthFetchInterceptor,\n isEmbedAuthActive,\n} from \"./embed-auth.js\";\nimport { bumpChangeVersion } from \"./use-change-version.js\";\n\ninterface Query {\n queryKey: readonly unknown[];\n state?: { error?: unknown };\n}\n\ninterface QueryClient {\n invalidateQueries(\n opts?: {\n queryKey?: string[];\n predicate?: (query: Query) => boolean;\n },\n options?: { cancelRefetch?: boolean },\n ): unknown;\n isFetching?(filters?: {\n queryKey?: string[];\n predicate?: (query: Query) => boolean;\n }): number;\n}\n\nconst POLL_ABORT_MIN_MS = 10_000;\n// SSE delivers changes immediately in the normal path. The poll is a\n// cross-process/serverless safety net, so an idle tab should not bill the host\n// four times per minute forever. Focus and active agent work still poll now.\nconst SSE_FALLBACK_INTERVAL_MS = 60_000;\nconst IDLE_POLL_INTERVAL_MS = 60_000;\nconst HIDDEN_POLL_INTERVAL_MS = 10_000;\nconst POLL_AUTH_FAILURE_COOLDOWN_MS = 60_000;\n/**\n * Max cadence for SSE/poll-driven query invalidation in `useDbSync`. Events\n * that arrive within this window of the first one in a burst are merged into\n * a single `invalidateForEvents` call instead of one call per event — see the\n * `queueInvalidateBatch` comment at the call site.\n */\nconst INVALIDATE_COALESCE_MS = 250;\n\nclass HttpStatusError extends Error {\n status: number;\n\n constructor(status: number) {\n super(\"HTTP \" + status);\n this.status = status;\n }\n}\n\nexport type SyncEvent = {\n version?: number;\n source?: string;\n type?: string;\n key?: string;\n requestSource?: string;\n [k: string]: unknown;\n};\n\ntype PollResponse = {\n version: number;\n events: SyncEvent[];\n};\n\n/** Callback delivered to each transport subscriber for every batch of events. */\ntype EventSubscriber = (\n events: SyncEvent[],\n version: number | undefined,\n) => void;\n\nfunction getPollAbortMs(interval: number): number {\n return Math.max(POLL_ABORT_MIN_MS, interval * 4);\n}\n\nfunction isDocumentHidden(): boolean {\n return (\n typeof document !== \"undefined\" && document.visibilityState === \"hidden\"\n );\n}\n\nfunction resolveSseUrl(sseUrl: string | false | undefined): string | false {\n if (sseUrl === false) return false;\n if (isEmbedAuthActive()) return false;\n return agentNativePath(sseUrl ?? \"/_agent-native/events\");\n}\n\n// --- Hosted Realtime Gateway binding ----------------------------------------\n//\n// When the app is configured for the hosted gateway, the transport connects to\n// the gateway (cross-origin) instead of the Netlify app, carrying a short-lived\n// subscribe token minted from the app's own same-origin endpoint. All of this\n// is gated on a non-null binding — apps without hosted config keep the exact\n// local behavior below.\n\nconst REALTIME_GATEWAY_SSE_PATH = \"/stream\";\nconst REALTIME_GATEWAY_POLL_PATH = \"/poll\";\nconst REALTIME_TOKEN_MINT_PATH = \"/_agent-native/realtime-token\";\n/** Consecutive gateway failures before health-gating back to the local app. */\nconst HOSTED_UNHEALTHY_THRESHOLD = 3;\n\ninterface RealtimeGatewayBinding {\n /** Gateway SSE URL (token appended per connect). */\n sseUrl: string;\n /** Gateway poll URL (token appended per request). */\n pollUrl: string;\n /** Same-origin app endpoint that mints the subscribe token. */\n tokenMintUrl: string;\n}\n\nfunction getRealtimeConfig():\n | { transport?: string; gatewayBaseUrl?: string }\n | undefined {\n if (typeof window === \"undefined\") return undefined;\n return window.__AGENT_NATIVE_CONFIG__?.realtime;\n}\n\n/**\n * Resolve the hosted-gateway binding, or null to stay on the local app. Gated\n * on: SSE enabled (the gateway is push-first), not embed auth (needs the\n * same-origin session to mint), and `transport: \"hosted\"` with a base URL in\n * the impersonal SSR config.\n */\nfunction resolveGatewayBinding(\n localSseUrl: string | false,\n): RealtimeGatewayBinding | null {\n if (localSseUrl === false) return null;\n if (isEmbedAuthActive()) return null;\n const config = getRealtimeConfig();\n if (config?.transport !== \"hosted\") return null;\n const base = config.gatewayBaseUrl?.replace(/\\/+$/, \"\");\n if (!base) return null;\n return {\n sseUrl: `${base}${REALTIME_GATEWAY_SSE_PATH}`,\n pollUrl: `${base}${REALTIME_GATEWAY_POLL_PATH}`,\n tokenMintUrl: agentNativePath(REALTIME_TOKEN_MINT_PATH),\n };\n}\n\n/** ±20% jitter so gateway timeout/deploy-driven reconnects don't stampede. */\nfunction applyReconnectJitter(delay: number): number {\n const jitter = delay * 0.2 * (Math.random() * 2 - 1);\n return Math.max(0, Math.round(delay + jitter));\n}\n\nfunction normalizeEventPayload(payload: unknown): SyncEvent[] {\n if (!payload || typeof payload !== \"object\") return [];\n const record = payload as { type?: unknown; events?: unknown };\n if (record.type === \"batch\" && Array.isArray(record.events)) {\n return record.events.filter(\n (event): event is SyncEvent => !!event && typeof event === \"object\",\n );\n }\n if (Array.isArray(record.events)) {\n return record.events.filter(\n (event): event is SyncEvent => !!event && typeof event === \"object\",\n );\n }\n return [payload as SyncEvent];\n}\n\nfunction isAuthFailure(error: unknown): boolean {\n return (\n !!error &&\n typeof error === \"object\" &&\n \"status\" in error &&\n ((error as { status?: unknown }).status === 401 ||\n (error as { status?: unknown }).status === 403)\n );\n}\n\n/**\n * True for a query whose last fetch failed authorization. Such a query needs a\n * new session, not another request: every background invalidation reissues the\n * identical 401. One expired session used to turn the sync loop into a poll\n * storm (135k 401s over 20h across a handful of action queries), so sync-driven\n * invalidation skips these. A remount, a mutation, or an explicit refetch still\n * retries them.\n */\nfunction hasTerminalAuthFailure(query: Query): boolean {\n return isAuthFailure(query.state?.error);\n}\n\n/**\n * App-state keys that drive immediate UI navigation/interaction and must\n * never sit behind the invalidation coalesce window (see\n * `isInteractionCriticalSyncEvent`).\n */\nconst INTERACTION_CRITICAL_APP_STATE_KEYS = [\n \"navigate\",\n \"show-questions\",\n \"__set_url__\",\n];\n\n/**\n * True for sync events that drive immediate, agent-initiated UI navigation\n * or interaction rather than passive data invalidation — app-state writes in\n * general (they back `[\"app-state\"]` queries directly), and specifically the\n * `navigate` / `show-questions` / `__set_url__` app-state keys that\n * `invalidateForEvents` special-cases into their own query keys below.\n *\n * `useDbSync` batches ordinary invalidation-driving events (action/collab/db\n * change events) into one flush per `INVALIDATE_COALESCE_MS` so a chatty doc\n * doesn't refetch on every keystroke. That trade-off is wrong for these\n * events: agent-driven navigation, `set-url`, and guided-questions prompts\n * must land as close to instantly as possible, so any batch containing one\n * of these bypasses the coalesce window and flushes immediately instead.\n *\n * Exported as a small pure predicate so this classification is unit-testable\n * independent of the transport/timer plumbing around it.\n */\nexport function isInteractionCriticalSyncEvent(event: SyncEvent): boolean {\n return (\n event.source === \"app-state\" &&\n (event.key === \"*\" ||\n INTERACTION_CRITICAL_APP_STATE_KEYS.some(\n (key) =>\n event.key === key ||\n (typeof event.key === \"string\" && event.key.startsWith(`${key}:`)),\n ))\n );\n}\n\nasync function fetchPollJson<T>(\n pollUrl: string,\n since: number,\n interval: number,\n token?: string,\n): Promise<T> {\n const controller =\n typeof AbortController === \"undefined\" ? null : new AbortController();\n const timeout = controller\n ? setTimeout(() => controller.abort(), getPollAbortMs(interval))\n : null;\n\n // Local path stays exactly `?since=N`; the hosted gateway also carries the\n // subscribe token on the query string (a cross-origin fetch can't set the\n // Authorization header for the SSE sibling either, so both use the query).\n const url = token\n ? `${pollUrl}${pollUrl.includes(\"?\") ? \"&\" : \"?\"}since=${since}&token=${encodeURIComponent(token)}`\n : `${pollUrl}?since=${since}`;\n\n try {\n const res = await fetch(\n url,\n controller ? { signal: controller.signal } : undefined,\n );\n if (!res.ok) throw new HttpStatusError(res.status);\n // Await the json before the finally so a body-stream abort doesn't\n // produce a dangling promise that escapes as an unhandled rejection.\n return await res.json();\n } finally {\n if (timeout) clearTimeout(timeout);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Shared SSE + poll transport\n//\n// One SyncTransport per (pollUrl, sseUrl) pair is held in a module-level\n// registry. Both `useDbSync` and `useScreenRefreshKey` subscribe to it, so a\n// single browser tab opens exactly ONE SSE connection and ONE poll loop\n// regardless of how many hook instances are mounted.\n//\n// Lifecycle: the transport starts when the first subscriber joins and shuts\n// down when the last subscriber leaves. This makes it safe to SSR and to\n// mount/unmount hooks independently.\n// ---------------------------------------------------------------------------\n\ninterface TransportSubscription {\n onEvents: EventSubscriber;\n /**\n * Whether this subscriber wants the transport to pause when the tab is\n * hidden. The transport pauses only when ALL subscribers request it — any\n * subscriber with `pauseWhenHidden: false` keeps the connection alive.\n */\n pauseWhenHidden: boolean;\n /**\n * Requested poll interval in ms. The transport uses the minimum across all\n * subscribers so the most-frequent caller is satisfied.\n */\n interval: number;\n /** Requested poll interval while the tab has no active agent work. */\n idleInterval: number;\n /** Requested fallback interval while SSE is connected. */\n fallbackInterval: number;\n /**\n * Optional: notified when the shared SSE connection opens or closes (also\n * fired once with the current state when the subscriber joins). Lets\n * subscribers with their own fallback loops (e.g. the collab doc poll)\n * relax their cadence while the push path is healthy.\n */\n onSseStateChange?: (\n connected: boolean,\n capabilities?: readonly string[],\n ) => void;\n}\n\nclass SyncTransport {\n private subscribers = new Map<symbol, TransportSubscription>();\n private versionRef = 0;\n private timer: ReturnType<typeof setTimeout> | null = null;\n private stopped = false;\n private inFlight = false;\n private eventSource: EventSource | null = null;\n private sseConnected = false;\n private authFailureUntil = 0;\n private consecutiveFailures = 0;\n private activeChatIds = new Set<string>();\n // Hosted-gateway state. `mode` starts \"hosted\" when a binding is present and\n // flips to \"local\" on health-gate revert; `token` is the current subscribe\n // token (minted from the app, rotated over the stream), never part of any\n // registry key.\n private mode: \"hosted\" | \"local\";\n private token: string | null = null;\n private tokenMintInFlight: Promise<boolean> | null = null;\n private gatewayReconnectTimer: ReturnType<typeof setTimeout> | null = null;\n private capabilities: string[] = [];\n\n constructor(\n private readonly pollUrl: string,\n private readonly sseUrl: string | false,\n private readonly gateway: RealtimeGatewayBinding | null = null,\n ) {\n this.mode = gateway ? \"hosted\" : \"local\";\n }\n\n /** Capabilities advertised by the gateway handshake (e.g. `no-awareness`). */\n getCapabilities(): readonly string[] {\n return this.capabilities;\n }\n\n private get activeSseUrl(): string | false {\n if (this.mode === \"hosted\" && this.gateway) {\n if (!this.token) return this.gateway.sseUrl;\n const base = `${this.gateway.sseUrl}?token=${encodeURIComponent(this.token)}`;\n // Cursor lets the gateway replay the reconnect gap on connect instead of\n // deferring it to the next poll; 0 on first connect means nothing to replay.\n return this.versionRef > 0 ? `${base}&since=${this.versionRef}` : base;\n }\n return this.sseUrl;\n }\n\n private get activePollUrl(): string {\n return this.mode === \"hosted\" && this.gateway\n ? this.gateway.pollUrl\n : this.pollUrl;\n }\n\n /**\n * Mint a subscribe token from the app's same-origin endpoint.\n *\n * Only TERMINAL outcomes health-gate to local: 404 (gateway not provisioned)\n * and 401/403 (not authorized) — retrying those for this tab is pointless.\n * TRANSIENT failures (5xx/429 from a cold Netlify function, network errors)\n * keep the hosted intent and ride the jittered reconnect + unhealthy-threshold\n * path, so a deploy / scale-to-zero blip doesn't permanently abandon the\n * gateway for the tab.\n */\n private mintToken(): Promise<boolean> {\n if (!this.gateway || this.mode !== \"hosted\") return Promise.resolve(false);\n if (this.tokenMintInFlight) return this.tokenMintInFlight;\n const mintUrl = this.gateway.tokenMintUrl;\n this.tokenMintInFlight = (async () => {\n // Bound the mint like fetchPollJson bounds polls: a black-holed request\n // must resolve as a transient failure, not hang tokenMintInFlight forever\n // (poll() awaits this while holding inFlight, so a hung mint would stall\n // the whole transport with no timer pending).\n const controller =\n typeof AbortController === \"undefined\" ? null : new AbortController();\n const timeout = controller\n ? setTimeout(() => controller.abort(), POLL_ABORT_MIN_MS)\n : null;\n try {\n const res = await fetch(mintUrl, {\n credentials: \"same-origin\",\n ...(controller ? { signal: controller.signal } : {}),\n });\n if (res.ok) {\n const data = (await res.json()) as { token?: unknown };\n if (typeof data?.token === \"string\" && data.token) {\n this.token = data.token;\n // Deliberately NOT resetting consecutiveFailures here: minting\n // succeeds via the app origin even when the GATEWAY is down, so a\n // reset would let a mint-ok -> stream-fail loop run forever below\n // the unhealthy threshold. Only real gateway connectivity (stream\n // onopen / poll success) clears the count.\n return true;\n }\n // 2xx without a token is a terminal misconfiguration.\n this.revertToLocal();\n return false;\n }\n if (res.status === 404 || res.status === 401 || res.status === 403) {\n this.revertToLocal();\n return false;\n }\n this.onGatewayTransientFailure();\n return false;\n } catch {\n this.onGatewayTransientFailure();\n return false;\n } finally {\n if (timeout) clearTimeout(timeout);\n this.tokenMintInFlight = null;\n }\n })();\n return this.tokenMintInFlight;\n }\n\n /**\n * A transient gateway failure (mint 5xx/429, network). Keep hosted intent but\n * count toward the unhealthy threshold; revert to local only once it trips.\n */\n private onGatewayTransientFailure(): void {\n this.consecutiveFailures++;\n if (this.consecutiveFailures >= HOSTED_UNHEALTHY_THRESHOLD) {\n this.revertToLocal();\n }\n }\n\n /**\n * Health-gate back to the app's own /poll + /events with the cursor intact\n * (versionRef is untouched), so delivery stays poll-equivalent — never a\n * silent stall.\n */\n private revertToLocal(): void {\n if (this.mode === \"local\") return;\n this.mode = \"local\";\n this.token = null;\n // The local in-process SSE path sends no handshake, so hosted capabilities\n // (e.g. no-awareness) must not survive the fallback — stale caps would keep\n // collab on its fast presence cadence against the local stream. Subscribers\n // are re-notified via the close/connect cycle below.\n this.capabilities = [];\n if (this.gatewayReconnectTimer) {\n clearTimeout(this.gatewayReconnectTimer);\n this.gatewayReconnectTimer = null;\n }\n this.closeEvents();\n if (!this.stopped) {\n this.connectEvents();\n this.schedulePoll();\n }\n }\n\n private scheduleGatewayReconnect(): void {\n if (this.stopped || this.gatewayReconnectTimer) return;\n this.gatewayReconnectTimer = setTimeout(() => {\n this.gatewayReconnectTimer = null;\n if (!this.stopped && !this.eventSource) this.connectEvents();\n }, applyReconnectJitter(1000));\n }\n\n // -------------------------------------------------------------------------\n // Subscriber management\n // -------------------------------------------------------------------------\n\n add(id: symbol, sub: TransportSubscription): void {\n const wasEmpty = this.subscribers.size === 0;\n const wasActive = this.isActive;\n this.subscribers.set(id, sub);\n if (wasEmpty) {\n this.stopped = false;\n this.start();\n } else if (!wasActive && this.isActive) {\n // A collab surface (or other active subscriber) just joined. Catch up\n // immediately rather than waiting out an idle-cadence timer.\n this.pollNow();\n } else {\n this.reschedule();\n }\n sub.onSseStateChange?.(this.sseConnected, this.capabilities);\n }\n\n remove(id: symbol): void {\n this.subscribers.delete(id);\n if (this.subscribers.size === 0) {\n this.teardown();\n } else {\n // Recalculate poll interval in case the leaving subscriber was the\n // fastest caller; reschedule with the updated cadence.\n this.reschedule();\n }\n }\n\n // -------------------------------------------------------------------------\n // Derived settings (aggregate over active subscribers)\n // -------------------------------------------------------------------------\n\n private get effectivePauseWhenHidden(): boolean {\n // Pause only if every subscriber has opted in.\n for (const sub of this.subscribers.values()) {\n if (!sub.pauseWhenHidden) return false;\n }\n return true;\n }\n\n private get effectiveInterval(): number {\n let min = Infinity;\n for (const sub of this.subscribers.values()) {\n if (sub.interval < min) min = sub.interval;\n }\n return isFinite(min) ? min : 2000;\n }\n\n private get effectiveIdleInterval(): number {\n let min = Infinity;\n for (const sub of this.subscribers.values()) {\n if (sub.idleInterval < min) min = sub.idleInterval;\n }\n return isFinite(min) ? min : IDLE_POLL_INTERVAL_MS;\n }\n\n private get isActive(): boolean {\n return this.activeChatIds.size > 0;\n }\n\n private get effectiveFallbackInterval(): number {\n let min = Infinity;\n for (const sub of this.subscribers.values()) {\n if (sub.fallbackInterval < min) min = sub.fallbackInterval;\n }\n return isFinite(min) ? min : SSE_FALLBACK_INTERVAL_MS;\n }\n\n // -------------------------------------------------------------------------\n // Event fan-out\n // -------------------------------------------------------------------------\n\n private fan(events: SyncEvent[], version: number | undefined): void {\n for (const sub of this.subscribers.values()) {\n sub.onEvents(events, version);\n }\n }\n\n private setSseConnected(connected: boolean): void {\n if (this.sseConnected === connected) return;\n this.sseConnected = connected;\n this.notifySseState();\n }\n\n /**\n * Notify subscribers of the current SSE state AND the negotiated gateway\n * capabilities. Called on connect/disconnect and again once the handshake\n * arrives, so a consumer (e.g. collab) can decide — for instance — not to\n * relax its presence cadence on a `no-awareness` hosted stream.\n */\n private notifySseState(): void {\n for (const sub of this.subscribers.values()) {\n sub.onSseStateChange?.(this.sseConnected, this.capabilities);\n }\n }\n\n // -------------------------------------------------------------------------\n // SSE + poll loop (mirrors the original per-hook logic exactly)\n // -------------------------------------------------------------------------\n\n private authFailureDelayMs(): number {\n return Math.max(0, this.authFailureUntil - Date.now());\n }\n\n private schedulePoll(): void {\n if (this.stopped) return;\n if (this.effectivePauseWhenHidden && isDocumentHidden()) return;\n if (this.timer) clearTimeout(this.timer);\n const authDelay = this.authFailureDelayMs();\n if (authDelay > 0) {\n this.timer = setTimeout(() => {\n this.timer = null;\n void this.poll();\n }, authDelay);\n return;\n }\n const visibleBase = this.isActive\n ? this.effectiveInterval\n : this.sseConnected\n ? this.effectiveFallbackInterval\n : this.effectiveIdleInterval;\n const base = isDocumentHidden()\n ? Math.max(visibleBase, HIDDEN_POLL_INTERVAL_MS)\n : visibleBase;\n // Exponential backoff while polls keep failing (500s during a deploy,\n // DNS blips, a struggling DB). Auth failures have their own cooldown\n // above; this covers everything else so a down server isn't hammered at\n // full cadence. Resets on the first successful poll.\n const backoff =\n this.consecutiveFailures > 0\n ? Math.min(base * 2 ** Math.min(this.consecutiveFailures, 5), 300_000)\n : base;\n // Jitter only for gateway-capable transports so reconnect/poll retries\n // don't stampede a gateway deploy; apps with no gateway config keep the\n // exact deterministic cadence.\n const delay = this.gateway ? applyReconnectJitter(backoff) : backoff;\n this.timer = setTimeout(() => {\n this.timer = null;\n void this.poll();\n }, delay);\n }\n\n private reschedule(): void {\n // Only need to act if a timer is already pending; next natural tick will\n // pick up the new effective interval otherwise.\n if (this.timer !== null) {\n clearTimeout(this.timer);\n this.timer = null;\n this.schedulePoll();\n }\n }\n\n private closeEvents(): void {\n if (!this.eventSource) return;\n this.eventSource.close();\n this.eventSource = null;\n this.setSseConnected(false);\n }\n\n private connectEvents(): void {\n if (\n this.stopped ||\n this.eventSource ||\n typeof EventSource === \"undefined\" ||\n (this.effectivePauseWhenHidden && isDocumentHidden())\n ) {\n return;\n }\n\n // Hosted gateway needs a subscribe token before the stream can open.\n // EventSource can't set headers, so the token rides the connect query\n // string (see activeSseUrl). Mint first, then connect.\n if (this.mode === \"hosted\" && this.gateway && !this.token) {\n void this.mintToken().then((ok) => {\n if (this.stopped) return;\n if (ok && !this.eventSource) {\n this.connectEvents();\n } else if (!ok && this.mode === \"hosted\") {\n // Transient mint failure (terminal ones already reverted to local,\n // flipping mode). Without a retry timer nothing would ever reopen\n // SSE — connectEvents is only reachable from focus/visibility/run\n // events — leaving the tab poll-only at the idle cadence.\n this.scheduleGatewayReconnect();\n }\n });\n return;\n }\n\n const url = this.activeSseUrl;\n if (!url) return;\n\n const source = new EventSource(url);\n this.eventSource = source;\n source.onopen = () => {\n this.setSseConnected(true);\n if (this.mode === \"hosted\") {\n // A live gateway stream is the real health signal: clear failure\n // counts accumulated by mint/stream retries. Local mode keeps main's\n // semantics (only a successful poll resets the poll backoff).\n this.consecutiveFailures = 0;\n }\n this.schedulePoll();\n };\n source.onerror = () => {\n // A replaced/closed source can still fire late; ignore it so it can't\n // flip the connected state or tear down the current stream.\n if (this.eventSource !== source) return;\n this.setSseConnected(false);\n if (this.mode === \"hosted\" && this.gateway) {\n // Browser auto-reconnect reuses the URL frozen at construction, so it\n // would replay from a stale `since`. Own the reconnect so the next\n // connect rebuilds activeSseUrl from the current versionRef. CLOSED also\n // refreshes the token (expired/rotated/deploy); CONNECTING keeps it. A\n // successful reconnect resets the count in onopen; a hard-down gateway\n // trips the threshold and health-gates to local.\n if (source.readyState === EventSource.CLOSED) this.token = null;\n this.closeEvents();\n this.onGatewayTransientFailure();\n if (this.mode === \"hosted\") this.scheduleGatewayReconnect();\n return;\n }\n // Local mode: native EventSource reconnect is fine. Drop a CLOSED ref so a\n // later connectEvents() (focus/visibility) can establish a fresh stream.\n if (source.readyState === EventSource.CLOSED) {\n this.eventSource = null;\n }\n this.schedulePoll();\n };\n source.onmessage = (message) => {\n try {\n const payload = JSON.parse(message.data);\n const events = normalizeEventPayload(payload);\n const version =\n typeof payload?.version === \"number\" ? payload.version : undefined;\n this.applyVersion(events, version);\n this.fan(events, version);\n } catch {\n // Ignore malformed SSE frames; polling is the safety net.\n }\n };\n\n if (this.mode === \"hosted\" && this.gateway) {\n // Control frames ride NAMED SSE events so they never reach onmessage /\n // normalizeEventPayload as spurious data events.\n source.addEventListener(REALTIME_SSE_HANDSHAKE_EVENT, (e) => {\n const hs = parseHandshakeFrame((e as MessageEvent).data);\n if (!hs) return;\n if (hs.protocol !== REALTIME_PROTOCOL_VERSION) {\n // Surface an unexpected protocol rather than silently adopting its\n // capabilities; keep the conservative (no advertised capabilities)\n // stance so downstream (collab) does not relax on assumptions.\n console.warn(\n `[agent-native] unsupported realtime protocol ${hs.protocol} (expected ${REALTIME_PROTOCOL_VERSION})`,\n );\n return;\n }\n this.capabilities = hs.capabilities;\n // Re-notify subscribers now that capabilities are known — the initial\n // connected notification fired before the handshake arrived.\n this.notifySseState();\n });\n source.addEventListener(REALTIME_SSE_TOKEN_EVENT, (e) => {\n const frame = parseTokenFrame((e as MessageEvent).data);\n if (!frame?.token) return;\n this.token = frame.token;\n // EventSource can't change a live stream's URL, and its auto-reconnect\n // reuses the original (old-token) URL. Close and reconnect (jittered) so\n // the rotated token is actually used on the next connect.\n this.closeEvents();\n this.scheduleGatewayReconnect();\n });\n }\n }\n\n /**\n * Advance the transport's shared version cursor. Subscribers receive the\n * raw events and decide independently which ones are \"fresh\" relative to\n * their own cursor, but the transport-level cursor ensures the poll\n * `?since=` parameter always advances.\n */\n private applyVersion(events: SyncEvent[], version: number | undefined): void {\n let max = typeof version === \"number\" ? version : 0;\n for (const evt of events) {\n const v = typeof evt.version === \"number\" ? evt.version : 0;\n if (v > max) max = v;\n }\n if (max > this.versionRef) this.versionRef = max;\n }\n\n private async poll(): Promise<void> {\n if (this.stopped || this.inFlight) return;\n this.inFlight = true;\n try {\n if (this.mode === \"hosted\" && this.gateway && !this.token) {\n // No token yet — mint before polling the gateway. A failed mint has\n // already reverted us to local; a scheduled poll will pick it up.\n const ok = await this.mintToken();\n if (!ok || this.stopped) return;\n }\n const data = await fetchPollJson<PollResponse>(\n this.activePollUrl,\n this.versionRef,\n this.effectiveInterval,\n this.mode === \"hosted\" ? (this.token ?? undefined) : undefined,\n );\n if (this.stopped) return;\n this.consecutiveFailures = 0;\n const events = data.events ?? [];\n this.applyVersion(events, data.version);\n this.fan(events, data.version);\n } catch (err) {\n if (this.stopped) return;\n this.consecutiveFailures++;\n if (this.mode === \"hosted\" && this.gateway) {\n // Gateway auth failure → re-mint (expired/rotated token), WITHOUT\n // tripping the poll-401 cooldown. Persistent failures of any kind\n // health-gate back to the local app.\n if (isAuthFailure(err)) {\n this.token = null;\n void this.mintToken();\n }\n if (this.consecutiveFailures >= HOSTED_UNHEALTHY_THRESHOLD) {\n this.revertToLocal();\n }\n } else if (isAuthFailure(err)) {\n this.authFailureUntil = Date.now() + POLL_AUTH_FAILURE_COOLDOWN_MS;\n this.closeEvents();\n }\n // Network error — retried on the next (backed-off) interval.\n } finally {\n this.inFlight = false;\n this.schedulePoll();\n }\n }\n\n private pollNow(): void {\n if (this.effectivePauseWhenHidden && isDocumentHidden()) return;\n if (this.authFailureDelayMs() > 0) {\n this.schedulePoll();\n return;\n }\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n this.connectEvents();\n void this.poll();\n }\n\n private handleVisibilityChange = (): void => {\n if (document.visibilityState === \"visible\") {\n this.connectEvents();\n this.pollNow();\n } else if (this.effectivePauseWhenHidden) {\n this.closeEvents();\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n } else {\n // Keep push connected and the polling safety net alive in backgrounded\n // tabs, but relax an active chat's cadence so hidden work stays current\n // without polling as aggressively as the visible surface.\n this.reschedule();\n }\n };\n\n private handleFocus = (): void => {\n this.pollNow();\n };\n\n private handleChatRunning = (event: Event): void => {\n const detail = (\n event as CustomEvent<{\n isRunning?: unknown;\n running?: unknown;\n tabId?: unknown;\n }>\n ).detail;\n const running =\n typeof detail?.isRunning === \"boolean\"\n ? detail.isRunning\n : typeof detail?.running === \"boolean\"\n ? detail.running\n : null;\n if (running === null) return;\n\n const id =\n typeof detail?.tabId === \"string\" && detail.tabId\n ? detail.tabId\n : \"__default__\";\n const wasActive = this.isActive;\n if (running) this.activeChatIds.add(id);\n else this.activeChatIds.delete(id);\n if (wasActive === this.isActive) return;\n\n if (this.isActive) {\n // Run start is a high-signal indication that cross-process writes are\n // imminent. Catch up now, then stay on the active cadence.\n this.pollNow();\n } else {\n this.reschedule();\n }\n };\n\n private start(): void {\n // Universal browser-local demo-mode presentation redaction. Idempotent and\n // a no-op until the local preference is on. Lives here because every root\n // already mounts useDbSync, so this needs zero per-template wiring.\n ensureEmbedAuthFetchInterceptor();\n ensureDemoModeFetchInterceptor();\n\n if (!this.effectivePauseWhenHidden || !isDocumentHidden()) {\n this.connectEvents();\n void this.poll();\n }\n window.addEventListener(\"focus\", this.handleFocus);\n window.addEventListener(\"agentNative.chatRunning\", this.handleChatRunning);\n document.addEventListener(\"visibilitychange\", this.handleVisibilityChange);\n }\n\n private teardown(): void {\n this.stopped = true;\n this.closeEvents();\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n if (this.gatewayReconnectTimer) {\n clearTimeout(this.gatewayReconnectTimer);\n this.gatewayReconnectTimer = null;\n }\n window.removeEventListener(\"focus\", this.handleFocus);\n window.removeEventListener(\n \"agentNative.chatRunning\",\n this.handleChatRunning,\n );\n document.removeEventListener(\n \"visibilitychange\",\n this.handleVisibilityChange,\n );\n }\n}\n\n/**\n * Registry of active transports keyed by \"<pollUrl>\\0<sseUrl>\".\n * Module-level singleton: survives React render cycles, shared across all\n * hook instances in the same browser tab.\n */\nconst transportRegistry = new Map<string, SyncTransport>();\n\nfunction getOrCreateTransport(\n pollUrl: string,\n sseUrl: string | false,\n gateway: RealtimeGatewayBinding | null = null,\n): SyncTransport {\n // Key on the LOCAL urls only — a transport may flip hosted→local at runtime,\n // and the token must never fragment the registry, so neither is in the key.\n const key = `${pollUrl}\\0${String(sseUrl)}`;\n let transport = transportRegistry.get(key);\n if (!transport) {\n transport = new SyncTransport(pollUrl, sseUrl, gateway);\n transportRegistry.set(key, transport);\n }\n return transport;\n}\n\n/** Remove a transport from the registry once torn down (last subscriber left). */\nfunction releaseTransport(pollUrl: string, sseUrl: string | false): void {\n const key = `${pollUrl}\\0${String(sseUrl)}`;\n // Leave the entry in place: SSE/poll is already stopped inside the class;\n // the next subscriber will re-start it via `add()`. Clearing the map entry\n // prevents any dangling reference from the old SyncTransport instance.\n transportRegistry.delete(key);\n}\n\n// ---------------------------------------------------------------------------\n// Internal test helper — reset transport registry between tests.\n// ---------------------------------------------------------------------------\n/** @internal */\nexport function _resetSyncTransportRegistryForTests(): void {\n transportRegistry.clear();\n}\n\nexport interface SubscribeSyncEventsOptions {\n /** Receives every batch of change events (SSE push or poll). */\n onEvents: (events: SyncEvent[], version: number | undefined) => void;\n /** Notified when the shared SSE connection opens/closes (and once on join). */\n onSseStateChange?: (\n connected: boolean,\n capabilities?: readonly string[],\n ) => void;\n pollUrl?: string;\n sseUrl?: string | false;\n pauseWhenHidden?: boolean;\n /**\n * Poll cadence this subscriber requests from the SHARED poll loop. The\n * transport uses the minimum across subscribers, so the defaults here are\n * deliberately high: subscribing must not speed up the shared poll —\n * useDbSync (mounted by every template root) already sets the pace.\n */\n interval?: number;\n fallbackInterval?: number;\n}\n\n/**\n * Subscribe to the shared SSE + poll transport without the React Query\n * invalidation behavior of `useDbSync`. Use this instead of opening another\n * `EventSource` to `/_agent-native/events` — a browser tab should hold ONE\n * SSE connection no matter how many features listen to it (extra streams eat\n * the per-origin connection budget and starve data fetches, especially on\n * HTTP/1.1 dev servers).\n *\n * Returns an unsubscribe function. Safe to call only in browser contexts.\n */\nexport function subscribeSyncEvents(\n options: SubscribeSyncEventsOptions,\n): () => void {\n const pollUrl = agentNativePath(options.pollUrl ?? \"/_agent-native/poll\");\n const sseUrl = resolveSseUrl(options.sseUrl);\n const transport = getOrCreateTransport(\n pollUrl,\n sseUrl,\n resolveGatewayBinding(sseUrl),\n );\n const id = Symbol(\"subscribeSyncEvents\");\n transport.add(id, {\n onEvents: options.onEvents,\n onSseStateChange: options.onSseStateChange,\n pauseWhenHidden: options.pauseWhenHidden ?? false,\n interval: options.interval ?? 60_000,\n idleInterval: options.interval ?? 60_000,\n fallbackInterval: options.fallbackInterval ?? 60_000,\n });\n return () => {\n transport.remove(id);\n if (!transport[\"subscribers\"].size) {\n releaseTransport(pollUrl, sseUrl);\n }\n };\n}\n\n/**\n * Hook that listens to /_agent-native/events for DB change events and\n * invalidates react-query caches when changes are detected. Falls back to\n * /_agent-native/poll so cross-process/serverless writes still show up.\n *\n * Works in all deployment environments (serverless, edge, long-lived server).\n * SSE is the fast path; polling is the safety net.\n *\n * @param options.queryClient - The react-query QueryClient instance\n * @param options.queryKeys - **Deprecated and ignored.** The hook uses\n * framework-owned fixed prefixes plus per-source change counters instead of\n * caller-supplied key lists. Kept in the type signature for backward\n * compatibility — existing call sites that still pass this option keep\n * working but the value has no effect.\n * @param options.pollUrl - Poll endpoint URL. Default: \"/_agent-native/poll\"\n * @param options.sseUrl - SSE endpoint URL. Default: \"/_agent-native/events\".\n * Pass false to disable SSE and use polling only.\n * @param options.onEvent - Optional callback for each change event\n * @param options.interval - Poll interval in ms. Default: 2000\n * @param options.fallbackInterval - Poll interval while SSE is connected.\n * Default: 60000\n * @param options.pauseWhenHidden - Pause sync while the tab is hidden.\n * Default: false. Hidden tabs keep SSE connected and poll no faster than\n * every 10 seconds while active; idle polling remains at 60 seconds.\n * @param options.ignoreSource - Skip events whose `requestSource` matches this\n * value. Use a per-tab ID so the UI ignores its own writes while still\n * picking up changes from other tabs, agents, and scripts.\n * @param options.actionInvalidatePredicate - Optional filter for the broad\n * compatibility invalidate triggered by `action` events. Use this to keep\n * expensive active queries on explicit-refresh semantics while still letting\n * normal source-versioned queries react through `useChangeVersion`.\n * @param options.suppressActionInvalidationFor - Action names whose sync events\n * should not invalidate all action queries. Use only for high-volume\n * background actions that perform their own narrow client invalidation.\n */\nexport function useDbSync(\n options: {\n queryClient?: QueryClient;\n queryKeys?: string[];\n pollUrl?: string;\n sseUrl?: string | false;\n /** @deprecated Use pollUrl instead */\n eventsUrl?: string;\n onEvent?: (data: any) => void;\n interval?: number;\n fallbackInterval?: number;\n pauseWhenHidden?: boolean;\n ignoreSource?: string;\n actionInvalidatePredicate?: (query: Query) => boolean;\n suppressActionInvalidationFor?: string[];\n } = {},\n): void {\n const {\n queryClient,\n pollUrl = agentNativePath(options.eventsUrl ?? \"/_agent-native/poll\"),\n sseUrl = resolveSseUrl(options.sseUrl),\n interval = 2000,\n fallbackInterval = Math.max(\n options.fallbackInterval ?? SSE_FALLBACK_INTERVAL_MS,\n interval,\n ),\n pauseWhenHidden = false,\n } = options;\n const idleInterval =\n options.interval === undefined ? IDLE_POLL_INTERVAL_MS : interval;\n\n const onEventRef = useRef(options.onEvent);\n onEventRef.current = options.onEvent;\n\n const ignoreSourceRef = useRef(options.ignoreSource);\n ignoreSourceRef.current = options.ignoreSource;\n const actionInvalidatePredicateRef = useRef(\n options.actionInvalidatePredicate,\n );\n actionInvalidatePredicateRef.current = options.actionInvalidatePredicate;\n const suppressActionInvalidationForRef = useRef(\n options.suppressActionInvalidationFor,\n );\n suppressActionInvalidationForRef.current =\n options.suppressActionInvalidationFor;\n\n useEffect(() => {\n const id = Symbol(\"useDbSync\");\n // Per-subscriber version cursor: tracks which events have already been\n // processed by THIS subscriber so stale poll re-deliveries are ignored.\n let subscriberVersion = 0;\n\n // Coalesce bursts of SSE-driven invalidation into at most one flush per\n // INVALIDATE_COALESCE_MS. A chatty doc (many small agent edits, several\n // peers editing at once) can otherwise deliver a handful of `action`/\n // `collab` events within a few hundred ms, each independently calling\n // `queryClient.invalidateQueries` and firing `onEvent` — every one of\n // those touches whatever query subscribers are mounted (e.g. a\n // full-page editor) even though the end state only needs to be\n // refreshed once. Version bookkeeping stays synchronous (below) so\n // freshness filtering for the NEXT batch is unaffected by the delay.\n //\n // This coalesce window is wrong for interaction-critical events (agent\n // navigation, `set-url`, guided questions — see\n // `isInteractionCriticalSyncEvent`): those must reach the UI immediately,\n // not up to INVALIDATE_COALESCE_MS late. So a fresh batch containing one\n // of those flushes synchronously (queued + new events together,\n // canceling any pending timer) instead of joining the coalesce window.\n // Pure invalidation bursts with no interaction-critical members keep the\n // coalesced behavior.\n let pendingInvalidateEvents: SyncEvent[] = [];\n let invalidateTimer: ReturnType<typeof setTimeout> | null = null;\n\n function flushInvalidateBatch() {\n if (invalidateTimer) {\n clearTimeout(invalidateTimer);\n invalidateTimer = null;\n }\n if (pendingInvalidateEvents.length === 0) return;\n const batch = pendingInvalidateEvents;\n pendingInvalidateEvents = [];\n invalidateForEvents(batch);\n }\n\n function queueInvalidateBatch(events: SyncEvent[]) {\n pendingInvalidateEvents.push(...events);\n if (events.some(isInteractionCriticalSyncEvent)) {\n flushInvalidateBatch();\n return;\n }\n if (invalidateTimer) return;\n invalidateTimer = setTimeout(\n flushInvalidateBatch,\n INVALIDATE_COALESCE_MS,\n );\n }\n\n function hasAppStateEvent(events: SyncEvent[], key: string): boolean {\n return events.some(\n (event) =>\n event.source === \"app-state\" &&\n (event.key === key ||\n event.key === \"*\" ||\n (typeof event.key === \"string\" && event.key.startsWith(`${key}:`))),\n );\n }\n\n function invalidateForEvents(events: SyncEvent[]) {\n const ignore = ignoreSourceRef.current;\n const ownBrowserSource = getBrowserTabId();\n const relevant = events.filter(\n (event) =>\n !(\n event.source === \"action\" &&\n event.requestSource === ownBrowserSource\n ) &&\n (!ignore || event.requestSource !== ignore),\n );\n const suppressedActions = new Set(\n suppressActionInvalidationForRef.current ?? [],\n );\n const isSuppressedActionEvent = (evt: SyncEvent) =>\n evt.source === \"action\" &&\n typeof evt.key === \"string\" &&\n suppressedActions.has(evt.key);\n const nonAwareness = relevant.filter((e) => e.source !== \"awareness\");\n const suppressesWholeBatch =\n nonAwareness.length > 0 &&\n nonAwareness.every((evt) => evt.source === \"action\") &&\n nonAwareness.every(isSuppressedActionEvent);\n\n // Bump per-source change counters. Components that read these via\n // `useChangeVersion(source)` and fold the value into a React Query\n // queryKey get a targeted refetch — no whole-cache invalidate, no\n // request storm. See `use-change-version.ts` for the contract.\n for (const evt of relevant) {\n const src = typeof evt.source === \"string\" ? evt.source : \"\";\n const ver = typeof evt.version === \"number\" ? evt.version : 0;\n if (src && ver > 0) {\n bumpChangeVersion(src, ver);\n if (typeof evt.key === \"string\" && evt.key) {\n bumpChangeVersion(`${src}:${evt.key}`, ver);\n }\n }\n }\n\n // Awareness (cursor/presence) events never change action/extension/\n // app-state query results, but they arrive on every peer keystroke and\n // carry no version (so the freshness filter always passes them). Keep\n // them out of the invalidate block or an idle collaborative doc turns\n // every peer's cursor move into a framework-wide refetch storm; they\n // still reach onEvent below for callers that render presence.\n const invalidating = relevant.filter((e) => e.source !== \"awareness\");\n\n if (invalidating.length > 0 && queryClient) {\n // Sync events describe completed writes. If a matching read is already\n // in flight, let it finish instead of aborting and immediately\n // launching the same request again. Repeated action events otherwise\n // turn a slow endpoint into a cancel/restart loop that never settles.\n const invalidateWithoutCancel = (requested?: {\n queryKey?: string[];\n predicate?: (query: Query) => boolean;\n }) => {\n const callerPredicate = requested?.predicate;\n const filters = {\n ...requested,\n predicate: (query: Query) =>\n !hasTerminalAuthFailure(query) &&\n (callerPredicate?.(query) ?? true),\n };\n const needsTrailingRefresh =\n (queryClient.isFetching?.(filters) ?? 0) > 0;\n const completion = queryClient.invalidateQueries(filters, {\n cancelRefetch: false,\n });\n // TanStack Query deliberately leaves an in-flight fetch alone when\n // cancelRefetch is false. Queue one post-settlement invalidation so\n // a write that landed after that read began cannot be cleared as\n // fresh by the older response.\n if (needsTrailingRefresh && completion instanceof Promise) {\n void completion.then(\n () => queryClient.invalidateQueries(filters),\n () => {},\n );\n }\n };\n const hasActionEvent = invalidating.some(\n (evt) => evt.source === \"action\" && !isSuppressedActionEvent(evt),\n );\n if (hasActionEvent) {\n // Action-backed reads share the [\"action\"] prefix. Keep the default\n // refresh targeted to those queries; invalidating every active query\n // makes one agent write fan out across unrelated provider reads,\n // dashboards, and background status checks. Older apps that still\n // need broad compatibility can opt in with a predicate.\n const predicate = actionInvalidatePredicateRef.current;\n invalidateWithoutCancel(\n predicate ? { predicate } : { queryKey: [\"action\"] },\n );\n }\n\n // Framework-level invalidate: a small, fixed list of query-key\n // prefixes the framework's own hooks/components use (action results,\n // extension state, application-state, the agent's `set-url` channel,\n // etc.). Templates' own data queries do NOT live here — they react\n // through `useChangeVersion(source)` in their query keys instead, so\n // a single change event doesn't fan out into \"refetch everything\".\n // Suppressed-action-only batches skip this whole list (their\n // mutations perform their own narrow invalidation) — but events must\n // STILL reach the onEvent forwarding below, so guard, don't return.\n //\n // Invalidation is scoped by source. Data-query prefixes (action,\n // extension, tool) refetch only when the batch carries an event that\n // can actually change action/extension-backed data — action\n // mutations, settings, extension, collab, screen-refresh, etc.\n // `app-state` events (agent/UI navigation, selection, and the\n // set-url/questions command channel) drive their OWN keys below and\n // must NEVER fan out into \"refetch every action query\": an active\n // agent session mirrors navigation + selection into application_state\n // continuously, and the serverless poll path replays those writes\n // back to the originating tab (the DB-scan fallback cannot preserve\n // `requestSource`, so `ignoreSource` can't filter them). Fanning each\n // one into a full `[\"action\"]` refetch turned a normal session into a\n // client fetch storm that exhausted the DB connection pool — which in\n // turn starved run heartbeat writes and surfaced as `stale_run`.\n if (!suppressesWholeBatch) {\n const hasDataChangingEvent = invalidating.some(\n (evt) => evt.source !== \"app-state\",\n );\n if (hasDataChangingEvent) {\n const hasFrameworkPrefixEvent = invalidating.some((evt) =>\n [\"extensions\", \"extension\", \"tool\", \"tools\", \"slots\"].includes(\n evt.source ?? \"\",\n ),\n );\n // The action-specific invalidation above already refreshed\n // [\"action\"]. A mixed action + extension/tool batch still needs\n // the independent framework prefixes, while pure action batches\n // retain their narrow storm-resistant invalidation.\n if (!hasActionEvent) {\n invalidateWithoutCancel({ queryKey: [\"action\"] });\n }\n if (!hasActionEvent || hasFrameworkPrefixEvent) {\n invalidateWithoutCancel({ queryKey: [\"extension\"] });\n invalidateWithoutCancel({ queryKey: [\"extensions\"] });\n invalidateWithoutCancel({ queryKey: [\"extension-slots\"] });\n invalidateWithoutCancel({ queryKey: [\"slot-installs\"] });\n invalidateWithoutCancel({ queryKey: [\"slot-available\"] });\n invalidateWithoutCancel({ queryKey: [\"tool\"] });\n invalidateWithoutCancel({ queryKey: [\"tools\"] });\n }\n }\n if (invalidating.some((evt) => evt.source === \"app-state\")) {\n invalidateWithoutCancel({ queryKey: [\"app-state\"] });\n }\n if (hasAppStateEvent(invalidating, \"navigate\")) {\n invalidateWithoutCancel({ queryKey: [\"navigate-command\"] });\n }\n if (hasAppStateEvent(invalidating, \"show-questions\")) {\n invalidateWithoutCancel({ queryKey: [\"show-questions\"] });\n }\n if (hasAppStateEvent(invalidating, \"__set_url__\")) {\n invalidateWithoutCancel({ queryKey: [\"__set_url__\"] });\n }\n }\n }\n\n // Always forward all events to onEvent — templates can layer surgical\n // logic on top (e.g. ignore their own writes via requestSource, or\n // invalidate inactive queries for a specific source).\n for (const evt of events) {\n onEventRef.current?.(evt);\n }\n }\n\n function onEvents(events: SyncEvent[], version: number | undefined): void {\n const freshEvents = events.filter((event) => {\n const v = typeof event.version === \"number\" ? event.version : 0;\n return v === 0 || v > subscriberVersion;\n });\n\n if (freshEvents.length > 0) {\n queueInvalidateBatch(freshEvents);\n }\n\n const maxEventVersion = freshEvents.reduce(\n (max, event) =>\n Math.max(max, typeof event.version === \"number\" ? event.version : 0),\n 0,\n );\n subscriberVersion = Math.max(\n subscriberVersion,\n version ?? 0,\n maxEventVersion,\n );\n }\n\n const transport = getOrCreateTransport(\n pollUrl,\n sseUrl,\n resolveGatewayBinding(sseUrl),\n );\n transport.add(id, {\n onEvents,\n pauseWhenHidden,\n interval,\n idleInterval,\n fallbackInterval,\n });\n\n return () => {\n if (invalidateTimer) {\n clearTimeout(invalidateTimer);\n // Flush synchronously on unmount so a pending batch isn't silently\n // dropped (e.g. a route change right after an agent edit lands).\n flushInvalidateBatch();\n }\n transport.remove(id);\n // If the registry still holds this transport, and the transport is now\n // empty, evict it so the next mount gets a fresh instance rather than a\n // stopped-but-still-registered one (the registry entry being cleared by\n // releaseTransport is the signal to rebuild state).\n if (!transport[\"subscribers\"].size) {\n releaseTransport(pollUrl, sseUrl);\n }\n };\n }, [\n pollUrl,\n sseUrl,\n queryClient,\n interval,\n idleInterval,\n fallbackInterval,\n pauseWhenHidden,\n ]);\n}\n\n/** @deprecated Use useDbSync instead */\nexport const useFileWatcher = useDbSync;\n\n/**\n * Subscribe to `refresh-screen` events from the agent. Returns an integer\n * that increments every time the agent invokes the framework's `refresh-screen`\n * tool. Apply it as a React `key` on the main content wrapper (the part\n * OUTSIDE the agent chat sidebar) so that region remounts and re-fetches its\n * data while the chat, sidebar, and any other persistent chrome keep their\n * in-flight state.\n *\n * Usage in a template's root:\n *\n * const screenKey = useScreenRefreshKey();\n * return (\n * <AppLayout>\n * <div key={screenKey}>\n * <Outlet />\n * </div>\n * </AppLayout>\n * );\n */\nexport function useScreenRefreshKey(\n options: {\n pollUrl?: string;\n sseUrl?: string | false;\n interval?: number;\n fallbackInterval?: number;\n pauseWhenHidden?: boolean;\n } = {},\n): number {\n const {\n pollUrl = agentNativePath(options.pollUrl ?? \"/_agent-native/poll\"),\n sseUrl = resolveSseUrl(options.sseUrl),\n interval = 2000,\n fallbackInterval = Math.max(\n options.fallbackInterval ?? SSE_FALLBACK_INTERVAL_MS,\n interval,\n ),\n pauseWhenHidden = false,\n } = options;\n const idleInterval =\n options.interval === undefined ? IDLE_POLL_INTERVAL_MS : interval;\n const [key, setKey] = useState(0);\n\n useEffect(() => {\n const id = Symbol(\"useScreenRefreshKey\");\n // Per-subscriber version cursor (same freshness logic as useDbSync).\n let subscriberVersion = 0;\n\n function onEvents(events: SyncEvent[], version: number | undefined): void {\n const freshEvents = events.filter((event) => {\n const v = typeof event.version === \"number\" ? event.version : 0;\n return v === 0 || v > subscriberVersion;\n });\n if (freshEvents.some((e) => e.source === \"screen-refresh\")) {\n setKey((k) => k + 1);\n }\n const maxEventVersion = freshEvents.reduce(\n (max, event) =>\n Math.max(max, typeof event.version === \"number\" ? event.version : 0),\n 0,\n );\n subscriberVersion = Math.max(\n subscriberVersion,\n version ?? 0,\n maxEventVersion,\n );\n }\n\n const transport = getOrCreateTransport(\n pollUrl,\n sseUrl,\n resolveGatewayBinding(sseUrl),\n );\n transport.add(id, {\n onEvents,\n pauseWhenHidden,\n interval,\n idleInterval,\n fallbackInterval,\n });\n\n return () => {\n transport.remove(id);\n if (!transport[\"subscribers\"].size) {\n releaseTransport(pollUrl, sseUrl);\n }\n };\n }, [\n pollUrl,\n sseUrl,\n interval,\n idleInterval,\n fallbackInterval,\n pauseWhenHidden,\n ]);\n\n return key;\n}\n"]}
@@ -62,11 +62,11 @@ export declare const postAwareness: import("h3").EventHandlerWithFetch<import("h
62
62
  error: string;
63
63
  states?: undefined;
64
64
  } | {
65
+ error?: undefined;
65
66
  states: {
66
67
  clientId: number;
67
68
  state: string;
68
69
  }[];
69
- error?: undefined;
70
70
  }>>;
71
71
  /**
72
72
  * GET /_agent-native/collab/:docId/users
@@ -77,10 +77,10 @@ export declare const getActiveUsers: import("h3").EventHandlerWithFetch<import("
77
77
  error: string;
78
78
  users?: undefined;
79
79
  } | {
80
+ error?: undefined;
80
81
  users: {
81
82
  clientId: number;
82
83
  lastSeen: number;
83
84
  }[];
84
- error?: undefined;
85
85
  }>>;
86
86
  //# sourceMappingURL=awareness.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"awareness.d.ts","sourceRoot":"","sources":["../../src/collab/awareness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAgB3C,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAOD,eAAO,MAAM,sBAAsB,EAAG,kBAA2B,CAAC;AAElE,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,kBAAkB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,MAAM,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAOD,wBAAgB,mBAAmB,IAAI,YAAY,CAElD;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,cAAc,GAAG,SAAS,GAChC,IAAI,CAON;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EAClD,KAAK,CAAC,EAAE,cAAc,GACrB,IAAI,CAgBN;AAoBD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAAmB,GAC7B,IAAI,CAON;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAE1E;AAiBD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAO1E;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,IAAI,CAOnE;AAkCD;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa;;;;;kBAwDa,MAAM;eAAS,MAAM;;;GAoB1D,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;;kBAYM,MAAM;kBAAY,MAAM;;;GAMvD,CAAC"}
1
+ {"version":3,"file":"awareness.d.ts","sourceRoot":"","sources":["../../src/collab/awareness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAgB3C,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAOD,eAAO,MAAM,sBAAsB,EAAG,kBAA2B,CAAC;AAElE,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,kBAAkB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,MAAM,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAOD,wBAAgB,mBAAmB,IAAI,YAAY,CAElD;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,cAAc,GAAG,SAAS,GAChC,IAAI,CAON;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EAClD,KAAK,CAAC,EAAE,cAAc,GACrB,IAAI,CAgBN;AAoBD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAAmB,GAC7B,IAAI,CAON;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAE1E;AAiBD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAO1E;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,IAAI,CAOnE;AAkCD;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa;;;;;;kBAwDa,MAAM;eAAS,MAAM;;GAoB1D,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;;;kBAYM,MAAM;kBAAY,MAAM;;GAMvD,CAAC"}
@@ -27,10 +27,38 @@ export declare function resolveCredentialForScope(key: string, ctx: CredentialCo
27
27
  * 3. org-scoped app_secrets
28
28
  * 4. legacy workspace-scoped app_secrets for the org
29
29
  * 5. org-scoped legacy settings credential
30
+ * 6. solo workspace-scoped app_secrets (`solo:<email>`)
30
31
  *
31
- * Without an active org, step 3 is replaced by the solo workspace scope.
32
+ * Steps 3-5 are skipped without an active org.
32
33
  */
33
34
  export declare function resolveCredential(key: string, ctx: CredentialContext): Promise<string | undefined>;
35
+ /**
36
+ * Explain an empty credential lookup when a key of that name is saved in a
37
+ * scope the caller cannot read.
38
+ *
39
+ * Two distinct causes produce the same "the key is right there and it still
40
+ * says it's missing" report:
41
+ *
42
+ * - Non-interactive runs — integration/webhook deliveries, scheduled jobs,
43
+ * automations, and inbound A2A calls — resolve credentials as an owner
44
+ * identity rather than as the person who triggered them, so a teammate's
45
+ * Personal key is invisible to them even though the vault visibly holds it.
46
+ * - The key is saved in a DIFFERENT organization the caller also belongs to.
47
+ * Credentials are per-organization, so gaining a second organization (or
48
+ * having `active-org-id` repointed at one) orphans every key synced under
49
+ * the first. Without this, the only symptom is a missing-env-var error that
50
+ * names the key rather than the org mismatch that actually caused it.
51
+ *
52
+ * SECURITY: both probes are bounded to organizations the caller is a member
53
+ * of, report only the scope kind (and, for the cross-org case, the name of an
54
+ * org the caller already belongs to), and never return the owning account, how
55
+ * many rows matched, or any part of the value. Without an active org there is
56
+ * no boundary to bound the probe to, so it declines to answer rather than
57
+ * revealing that some other tenant holds a key of the same name.
58
+ *
59
+ * Returns null when nothing safe and useful can be said.
60
+ */
61
+ export declare function describeCredentialScopeGap(keys: readonly string[], ctx: CredentialContext): Promise<string | null>;
34
62
  /**
35
63
  * Check if a credential is available for the given context.
36
64
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/credentials/index.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,KAAK,CAAC;AA2CpD;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,iBAAiB,GAAG;IAAE,KAAK,EAAE,sBAAsB,CAAA;CAAE,GACzD,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAO7B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,iBAAiB,GACrB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA2B7B;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,iBAAiB,GACrB,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,iBAAiB,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;CAAE,GAClD,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,iBAAiB,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;CAAE,GAClD,OAAO,CAAC,IAAI,CAAC,CAcf"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/credentials/index.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,KAAK,CAAC;AA2CpD;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,iBAAiB,GAAG;IAAE,KAAK,EAAE,sBAAsB,CAAA;CAAE,GACzD,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAO7B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,iBAAiB,GACrB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAmC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,iBAAiB,GACrB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2BxB;AAwDD;;GAEG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,iBAAiB,GACrB,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,iBAAiB,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;CAAE,GAClD,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,iBAAiB,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;CAAE,GAClD,OAAO,CAAC,IAAI,CAAC,CAcf"}