@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
@@ -5,6 +5,7 @@ import { parseA2AAgentActivityPart } from "../a2a/activity.js";
5
5
  import { isAgentActionStopError, } from "../action.js";
6
6
  import { readAppState } from "../application-state/script-helpers.js";
7
7
  import { isReadOnlyShellCommand } from "../coding-tools/index.js";
8
+ import { getDbExec } from "../db/client.js";
8
9
  import { extensionIdFromPathname } from "../extensions/path.js";
9
10
  import { preUploadAttachments } from "../file-upload/pre-upload-attachments.js";
10
11
  import { isMcpActionResult } from "../mcp-client/app-result.js";
@@ -19,6 +20,7 @@ import { getRequestRunContext, ensureRequestRunContext, getRequestContext, getRe
19
20
  import { fireInternalDispatch } from "../server/self-dispatch.js";
20
21
  import { isReasoningEffort, normalizeReasoningEffortForRequest, stepDownReasoningEffort, } from "../shared/reasoning-effort.js";
21
22
  import { actionPreparationContinuationNote } from "./action-continuation-guidance.js";
23
+ import { drainAgentWarnings, formatAgentWarningsForToolResult, } from "./action-warnings.js";
22
24
  import { buildSystemManifestSections, readContextXraySystemSections, } from "./context-xray/manifest.js";
23
25
  import { AGENT_CHAT_BACKGROUND_RUN_FIELD, AGENT_CHAT_PROCESS_RUN_PATH, backgroundRuntimeDiagnosticDetail, dispatchPathTargetsNetlifyBackgroundFunction, isAgentChatDurableBackgroundEnabled, isAgentChatForegroundSelfChainEnabled, isInBackgroundFunctionRuntime, resolveAgentChatProcessRunDispatchPath, shouldUseBackgroundFunctionTimeoutForWorker, } from "./durable-background.js";
24
26
  import { applyContextXrayTransformForIteration } from "./engine/context-directives-transform.js";
@@ -30,13 +32,13 @@ import { PROVIDER_TO_ENV } from "./engine/provider-env-vars.js";
30
32
  import { loadPriorTurnToolCallJournal } from "./engine/tool-call-journal-seed.js";
31
33
  import { backfillEngineMessagesToolResults, stringifyToolUseInputForGateway, unmatchedToolResultReplayText, } from "./engine/translate-anthropic.js";
32
34
  import { EngineError } from "./engine/types.js";
33
- import { getDefaultMaxIterations, MAX_AGENT_MAX_ITERATIONS, MIN_AGENT_MAX_ITERATIONS, normalizeMaxIterations, readAgentLoopSettings, } from "./loop-settings.js";
35
+ import { getDefaultMaxIterations, getDefaultMaxRunInputTokens, MAX_AGENT_MAX_ITERATIONS, MIN_AGENT_MAX_ITERATIONS, normalizeMaxIterations, normalizeMaxRunInputTokens, readAgentLoopSettings, } from "./loop-settings.js";
34
36
  import { maybeCompactThread, buildObservationalContext, hasObservationalMemory, serializeObservationalMemoryBlock, } from "./observational-memory/index.js";
35
37
  import { ProcessorChain, TripWire, toolCallsFromContent, } from "./processors.js";
36
- import { startRun, subscribeToRun, getActiveRunForThread, getActiveRunForThreadAsync, getRun, abortRun, abortRunDurably, tryClaimRunSlot, isHostedRuntime, resolveRunSoftTimeoutMs, } from "./run-manager.js";
37
- import { writeLedgerEntry, readLedgerEntry, clearLedgerForThread, insertRun, isTurnAborted, markRunAborted, updateRunHeartbeat, updateRunStatusIfRunning, setRunError, setRunTerminalReason, claimBackgroundRun, readBackgroundRunClaim, recordRunDiagnostic, countRunsForTurn, RUN_DIAG_STAGE, UNCLAIMED_BACKGROUND_RUN_GRACE_MS, } from "./run-store.js";
38
+ import { startRun, subscribeToRun, getActiveRunForThread, getActiveRunForThreadAsync, getRun, abortRun, abortRunDurably, tryClaimRunSlot, isHostedRuntime, resolveRunSoftTimeoutMs, resolveRunToolTimeoutCeilingMs, } from "./run-manager.js";
39
+ import { writeLedgerEntry, readLedgerEntry, clearLedgerForThread, insertRun, insertRunEvent, isTurnAborted, markRunAborted, updateRunHeartbeat, updateRunStatusIfRunning, setRunError, setRunTerminalReason, claimBackgroundRun, readBackgroundRunClaim, recordRunDiagnostic, countRunsForTurn, RUN_DIAG_STAGE, UNCLAIMED_BACKGROUND_RUN_GRACE_MS, } from "./run-store.js";
38
40
  import { buildCurrentTimeUserContext } from "./runtime-context.js";
39
- import { findCompletedJournalEntry } from "./tool-call-journal.js";
41
+ import { findCompletedJournalEntry, } from "./tool-call-journal.js";
40
42
  import { redactSensitiveFields, sanitizeToolErrorText, sanitizeToolErrorValue, } from "./tool-error-redaction.js";
41
43
  import { describeToolResultImages, extractAgentImagesFromActionResult, } from "./tool-result-images.js";
42
44
  import { createToolSearchEntry, TOOL_SEARCH_ACTION_NAME, } from "./tool-search.js";
@@ -600,9 +602,11 @@ const MODEL_STREAM_NO_PROGRESS_TIMEOUT_MS = 90_000;
600
602
  * around 40s, so that watchdog could never actually fire: the run died as a
601
603
  * silent platform kill instead of a recoverable checkpoint (observed: ~40s of
602
604
  * "Contacting model" with zero tokens, then a hard timeout with no
603
- * auto_continue ever emitted). Once ANY event (including a heartbeat) has
604
- * been observed for this model call, subsequent gaps revert to the normal 90s
605
- * watchdog — this only guards the "nothing has happened yet" window.
605
+ * auto_continue ever emitted). Once a real model event has been observed for
606
+ * this model call, subsequent gaps revert to the normal 90s watchdog — this
607
+ * only guards the "nothing has happened yet" window. A `gateway-heartbeat`
608
+ * does NOT count as that first event (it proves the transport is up, not that
609
+ * the model started); it is excluded from stream progress for the same reason.
606
610
  *
607
611
  * ORDERING INVARIANT (each bound must stay strictly smaller than the next —
608
612
  * do not change one without re-checking the others). This cap exists ONLY
@@ -636,6 +640,16 @@ const MAX_RESOURCE_INVENTORY_ITEMS = 40;
636
640
  const MAX_RESOURCE_INVENTORY_DESCRIPTION_CHARS = 160;
637
641
  const MAX_INLINE_SKILL_REFERENCE_CHARS = 40_000;
638
642
  const SOURCE_SWEEP_TOOL_CALL_THRESHOLD = 12;
643
+ /**
644
+ * Serialized-byte threshold at which a run reports how much tool schema
645
+ * `expandActiveTools` has loaded on top of its starting set. Expansion is
646
+ * monotonic — schemas added mid-turn are never released — and failing runs
647
+ * carry ~3.4x the event payload of clean ones, but that is a correlation, not
648
+ * a cause. Measure first; a cap or LRU eviction can only be sized safely once
649
+ * the real distribution is known (dropping a tool the model is about to call
650
+ * is worse than a large request).
651
+ */
652
+ const EXPANDED_TOOL_SCHEMA_WARN_BYTES = 32_000;
639
653
  /**
640
654
  * Hard cap on the `<current-screen>` block injected into EVERY user message.
641
655
  *
@@ -812,6 +826,40 @@ export function trimOldToolResults(messages, keepTail = CONTEXT_TRIM_KEEP_TAIL)
812
826
  });
813
827
  return trimmed ? result : null;
814
828
  }
829
+ /** Upper bound (jitter included) on what `retryDelay(attempt)` will sleep. */
830
+ function maxRetryDelayMs(attempt) {
831
+ return RETRY_BASE_DELAY_MS * Math.pow(2, attempt) * 1.1;
832
+ }
833
+ /**
834
+ * Wall-clock left in this invocation's soft-timeout budget, measured from
835
+ * `startedAt`. `Infinity` off the hosted soft-timeout regime (local dev,
836
+ * self-hosted), where runs are genuinely unbounded. Uses the same ceiling
837
+ * `startRun` sizes the round to, so budget math here can't disagree with the
838
+ * soft timeout that actually aborts the run.
839
+ */
840
+ export function remainingRunBudgetMs(startedAt) {
841
+ const ceilingMs = resolveRunSoftTimeoutMs(undefined, {
842
+ useHostedDefault: true,
843
+ backgroundFunction: isInBackgroundFunctionRuntime(),
844
+ });
845
+ if (ceilingMs <= 0)
846
+ return Number.POSITIVE_INFINITY;
847
+ return ceilingMs - (Date.now() - startedAt);
848
+ }
849
+ /**
850
+ * Whether one more engine retry — its backoff sleep, plus a minimal window for
851
+ * the resume layer above — still fits in the run budget. Count-based retries
852
+ * alone burn the entire hosted foreground budget on a deterministic failure
853
+ * (observed: every failing run spent all 3 retries, ~14s of it asleep, and
854
+ * left nothing for recovery).
855
+ */
856
+ function hasBudgetForEngineRetry(startedAt, attempt) {
857
+ const remainingMs = remainingRunBudgetMs(startedAt);
858
+ if (remainingMs === Number.POSITIVE_INFINITY)
859
+ return true;
860
+ return (remainingMs - maxRetryDelayMs(attempt) >=
861
+ SELF_CHAIN_MIN_CONTINUATION_BUDGET_MS);
862
+ }
815
863
  /** Wait with exponential backoff, respecting abort signal */
816
864
  function retryDelay(attempt, signal) {
817
865
  const baseMs = RETRY_BASE_DELAY_MS * Math.pow(2, attempt);
@@ -1563,8 +1611,55 @@ async function applyObservationalMemoryToContext(messages, opts) {
1563
1611
  return messages;
1564
1612
  }
1565
1613
  }
1566
- function seedReadOnlyToolResultsFromHistory(messages, actions) {
1614
+ /**
1615
+ * Cross-chunk read-only result cache seed.
1616
+ *
1617
+ * A chained continuation chunk rebuilds `messages` without the prior chunk's
1618
+ * tool results, so `seedReadOnlyToolResultsFromHistory` sees nothing and every
1619
+ * read-only tool (run-code, provider-api-request, tool-search, every research
1620
+ * tool) re-executes from scratch. Their only cross-chunk protection was the
1621
+ * prompt-level resume note, which truncates each result to 400 chars — a
1622
+ * 50,000-char run-code result came back as 400 chars, leaving the model no
1623
+ * option but to re-run it. Re-executed reads were the dominant term in
1624
+ * production spend.
1625
+ *
1626
+ * The full `tool_done` result IS in the durable run ledger, so seed the same
1627
+ * cache the in-run duplicate guard uses. The tool layer then serves the real
1628
+ * result while the prompt note keeps its short summary.
1629
+ *
1630
+ * Staleness is bounded to the CURRENT TURN: the journal is built from
1631
+ * `getCurrentTurnEventsForThread`, so nothing older than the user's current
1632
+ * request can be replayed, and a successful write inside the turn clears the
1633
+ * cache exactly as it does for in-chunk reads.
1634
+ */
1635
+ function seedReadOnlyToolResultsFromJournal(journal, actions) {
1567
1636
  const cache = new Map();
1637
+ if (!journal)
1638
+ return cache;
1639
+ for (const entry of journal.completed) {
1640
+ const action = actions[entry.tool];
1641
+ if (action?.readOnly !== true) {
1642
+ // Mirror the live loop: a completed write invalidates every cached read.
1643
+ cache.clear();
1644
+ continue;
1645
+ }
1646
+ if (action.dedupe === false)
1647
+ continue;
1648
+ const result = entry.result ?? "";
1649
+ if (!isReusableReadOnlyToolResult({
1650
+ type: "tool-result",
1651
+ toolCallId: "",
1652
+ toolName: entry.tool,
1653
+ content: result,
1654
+ })) {
1655
+ continue;
1656
+ }
1657
+ cache.set(toolCallCacheKey(entry.tool, entry.input), result);
1658
+ }
1659
+ return cache;
1660
+ }
1661
+ function seedReadOnlyToolResultsFromHistory(messages, actions, seed) {
1662
+ const cache = new Map(seed);
1568
1663
  if (!isInternalContinuationTurn(messages))
1569
1664
  return cache;
1570
1665
  // Scoped to the current turn only (same slice as
@@ -1754,6 +1849,21 @@ export function isCachedToolResultVisibleInContext(contextMessages, toolCall, ca
1754
1849
  const INTERRUPTED_TOOL_RESULT_MARKER = "Interrupted before this tool returned a result.";
1755
1850
  const MAX_WRITE_TOOL_INTERRUPTIONS = 2;
1756
1851
  const MAX_IDENTICAL_TOOL_ERRORS = 3;
1852
+ /**
1853
+ * Identical (tool, arguments) invocations tolerated in one turn before the turn
1854
+ * is stopped, whether or not they errored.
1855
+ *
1856
+ * This is the guard that distinguishes a spiral from deep work. Volume ceilings
1857
+ * cannot: prod contains a legitimate 117-tool-call analysis alongside turns that
1858
+ * issued 39 identical `run-code` webFetches and 43 identical `docs-search`
1859
+ * calls. Repetition is what separates them, so repetition is what we bound —
1860
+ * leaving genuinely long analyses free to keep making NEW calls.
1861
+ *
1862
+ * Above `MAX_IDENTICAL_TOOL_ERRORS` (3) because a repeated SUCCESS is weaker
1863
+ * evidence of a loop than a repeated failure: a few identical reads can be a
1864
+ * legitimate re-check after a write.
1865
+ */
1866
+ export const MAX_IDENTICAL_TOOL_CALLS = 8;
1757
1867
  function seedWriteToolInterruptionsFromHistory(messages, actions) {
1758
1868
  const interruptions = new Map();
1759
1869
  if (!isInternalContinuationTurn(messages))
@@ -1966,6 +2076,14 @@ const DEFAULT_INITIAL_TOOL_NAMES = new Set([
1966
2076
  "docs-search",
1967
2077
  "get-framework-context",
1968
2078
  "read-attachment",
2079
+ // The `<available-apps>` prompt block names these two BY NAME on the same
2080
+ // request, and "which app should I use for this?" is answered on turn one or
2081
+ // not at all. Omitting them made the model read the instruction, find no
2082
+ // schema, and answer from its own assumptions instead of spending a
2083
+ // tool-search turn — so users were told a capability did not exist while a
2084
+ // sibling app owned it.
2085
+ "describe-workspace-apps",
2086
+ "call-agent",
1969
2087
  ]);
1970
2088
  function isDefaultInitialToolName(name) {
1971
2089
  return DEFAULT_INITIAL_TOOL_NAMES.has(name);
@@ -2487,11 +2605,14 @@ function validateRawToolInput(entry, input) {
2487
2605
  */
2488
2606
  export async function runAgentLoop(opts) {
2489
2607
  const { engine, model, systemPrompt, tools, availableTools, messages, actions, send, signal, } = opts;
2608
+ const budgetStartedAt = opts.budgetStartedAt ?? Date.now();
2490
2609
  const finalResponseGuardRequestText = opts.finalResponseGuardRequestText ??
2491
2610
  resolveFinalResponseGuardRequestText(messages);
2492
2611
  const availableToolMap = new Map((availableTools ?? tools).map((tool) => [tool.name, tool]));
2493
2612
  const activeToolNames = new Set(tools.map((tool) => tool.name));
2494
2613
  let activeTools = tools;
2614
+ let expandedToolSchemaBytes = 0;
2615
+ let reportedExpandedToolSchemaBytes = false;
2495
2616
  const expandActiveTools = (names) => {
2496
2617
  const added = [];
2497
2618
  for (const name of names) {
@@ -2501,11 +2622,17 @@ export async function runAgentLoop(opts) {
2501
2622
  if (!tool)
2502
2623
  continue;
2503
2624
  activeToolNames.add(name);
2625
+ expandedToolSchemaBytes += JSON.stringify(tool).length;
2504
2626
  added.push(name);
2505
2627
  }
2506
2628
  if (added.length > 0) {
2507
2629
  activeTools = (availableTools ?? tools).filter((tool) => activeToolNames.has(tool.name));
2508
2630
  }
2631
+ if (!reportedExpandedToolSchemaBytes &&
2632
+ expandedToolSchemaBytes > EXPANDED_TOOL_SCHEMA_WARN_BYTES) {
2633
+ reportedExpandedToolSchemaBytes = true;
2634
+ console.warn(`[agent-loop] expanded tool schemas reached ${expandedToolSchemaBytes} bytes across ${activeToolNames.size} active tools (runId=${opts.runId ?? "none"})`);
2635
+ }
2509
2636
  return added;
2510
2637
  };
2511
2638
  expandActiveTools(extractToolSearchResultNamesFromMessages(messages));
@@ -2522,6 +2649,19 @@ export async function runAgentLoop(opts) {
2522
2649
  model,
2523
2650
  };
2524
2651
  const maxIterations = normalizeMaxIterations(opts.maxIterations, getDefaultMaxIterations());
2652
+ const maxRunInputTokens = normalizeMaxRunInputTokens(opts.maxRunInputTokens, getDefaultMaxRunInputTokens());
2653
+ const priorTurnInputTokens = typeof opts.priorTurnInputTokens === "number" &&
2654
+ Number.isFinite(opts.priorTurnInputTokens)
2655
+ ? Math.max(0, opts.priorTurnInputTokens)
2656
+ : 0;
2657
+ // A per-tool timeout above the chunk's own soft timeout can never fire — the
2658
+ // chunk boundary always wins — so the 12-minute default is dead code on a
2659
+ // ~40s hosted foreground chunk. Background-function runs resolve to a ~13min
2660
+ // ceiling and keep the default unchanged.
2661
+ const runToolTimeoutCeilingMs = resolveRunToolTimeoutCeilingMs(resolveRunSoftTimeoutMs(undefined, {
2662
+ useHostedDefault: true,
2663
+ backgroundFunction: isInBackgroundFunctionRuntime(),
2664
+ }));
2525
2665
  const toolCallHistory = [];
2526
2666
  const sourceSweepToolCallHistory = seedSourceSweepToolCallsFromHistory(messages, actions);
2527
2667
  let sourceSweepDelegationGuardActive = hasExhaustedSourceSweepBudget({
@@ -2534,22 +2674,26 @@ export async function runAgentLoop(opts) {
2534
2674
  runCtx.toolCalls = toolCallHistory;
2535
2675
  runCtx.toolResults = toolResultHistory;
2536
2676
  }
2537
- const readOnlyToolResultCache = seedReadOnlyToolResultsFromHistory(messages, actions);
2538
- const duplicateReadOnlyToolCalls = seedDuplicateReadOnlyToolCallsFromHistory(messages, actions);
2539
- const writeToolInterruptions = seedWriteToolInterruptionsFromHistory(messages, actions);
2540
- const repeatedToolErrors = new Map();
2541
2677
  // Tool-call journal hard-block (resume safety). See
2542
2678
  // `loadPriorTurnToolCallJournal` for the full rationale — snapshotted ONCE
2543
2679
  // here, before any tool runs in this chunk, and its prior-chunk tool
2544
2680
  // calls/results are folded into `toolCallHistory` / `toolResultHistory` so
2545
2681
  // final response guards see evidence from earlier chunks of this turn.
2546
2682
  const consumedJournalKeys = new Set();
2547
- const { toolCallJournal, priorToolCalls: journaledPriorToolCalls, priorToolResults: journaledPriorToolResults, } = await loadPriorTurnToolCallJournal(opts.threadId);
2683
+ const { toolCallJournal, priorToolCalls: journaledPriorToolCalls, priorToolResults: journaledPriorToolResults, } = await loadPriorTurnToolCallJournal(opts.threadId, opts.turnId);
2548
2684
  toolCallHistory.push(...journaledPriorToolCalls);
2549
2685
  toolResultHistory.push(...journaledPriorToolResults);
2686
+ const readOnlyToolResultCache = seedReadOnlyToolResultsFromHistory(messages, actions, seedReadOnlyToolResultsFromJournal(toolCallJournal, actions));
2687
+ const duplicateReadOnlyToolCalls = seedDuplicateReadOnlyToolCallsFromHistory(messages, actions);
2688
+ const writeToolInterruptions = seedWriteToolInterruptionsFromHistory(messages, actions);
2689
+ const repeatedToolErrors = new Map();
2690
+ const repeatedToolCalls = new Map();
2550
2691
  let finalGuardRetries = 0;
2551
2692
  let emptyFinalResponseRetries = 0;
2552
2693
  let iterations = 0;
2694
+ // `loop_limit` and `done` share one terminal-event slot in run-manager, so a
2695
+ // trailing `done` would overwrite the boundary the continuation logic reads.
2696
+ let endedAtLoopLimit = false;
2553
2697
  // Overridden (raised tokens, lowered effort) only after an empty-final-
2554
2698
  // response retry below — kept separate from `opts.maxOutputTokens`/
2555
2699
  // `opts.reasoningEffort` so the very first attempt is unaffected and later
@@ -2576,9 +2720,25 @@ export async function runAgentLoop(opts) {
2576
2720
  while (true) {
2577
2721
  if (signal.aborted)
2578
2722
  break;
2723
+ const turnInputTokens = priorTurnInputTokens + usage.inputTokens;
2724
+ if (turnInputTokens > maxRunInputTokens) {
2725
+ // Terminal for the whole TURN, not a chunk boundary: emitting
2726
+ // `loop_limit` here would hand off to a successor chunk that inherits the
2727
+ // same exhausted total and immediately re-terminate, burning the run
2728
+ // ledger 25 times over.
2729
+ emitTripwire(new TripWire(`I stopped because this request consumed ${turnInputTokens.toLocaleString()} input tokens, past the ${maxRunInputTokens.toLocaleString()} budget for a single turn. ` +
2730
+ `Anything already completed above is saved. Please retry as a smaller, more specific follow-up.`, { processor: "run-input-token-budget" }));
2731
+ break;
2732
+ }
2733
+ // Terminal, NOT a nudge-and-reset: the run ends at `loop_limit` and the
2734
+ // durable per-turn ledger (or the client's own continuation) decides
2735
+ // whether the turn gets another chunk. Resetting the counter in-process
2736
+ // made the budget unenforceable and meant this event was never emitted,
2737
+ // even though run-manager, thread-data-builder and the client all handle it.
2579
2738
  if (++iterations > maxIterations) {
2580
- appendAgentLoopContinuation(messages, "loop_limit");
2581
- iterations = 1;
2739
+ send({ type: "loop_limit", maxIterations });
2740
+ endedAtLoopLimit = true;
2741
+ break;
2582
2742
  }
2583
2743
  let assistantContent;
2584
2744
  let streamedAssistantText = "";
@@ -2639,10 +2799,10 @@ export async function runAgentLoop(opts) {
2639
2799
  let zeroByteToolInputRestart;
2640
2800
  let endedForNoProgress = false;
2641
2801
  let lastModelStreamProgressAt = Date.now();
2642
- // FIX 2: true once ANY engine-stream event (including a heartbeat)
2643
- // has been retrieved for THIS model call — gates
2644
- // `FOREGROUND_FIRST_MODEL_EVENT_TIMEOUT_MS` below to only the first
2645
- // await on a fresh `engine.stream()` call, never subsequent gaps.
2802
+ // FIX 2: true once a real (non-heartbeat) engine-stream event has been
2803
+ // retrieved for THIS model call — gates
2804
+ // `FOREGROUND_FIRST_MODEL_EVENT_TIMEOUT_MS` below to the window before
2805
+ // the model has produced anything, never subsequent gaps.
2646
2806
  let hasReceivedFirstEngineEvent = false;
2647
2807
  // Resolved once per model-call attempt (not per event) so a single
2648
2808
  // call's deadline math can't observe the runtime predicates changing
@@ -2818,17 +2978,17 @@ export async function runAgentLoop(opts) {
2818
2978
  eventIteratorDone = true;
2819
2979
  break;
2820
2980
  }
2821
- // FIX 2: only the deadline for THIS await could have been
2822
- // tightened by FOREGROUND_FIRST_MODEL_EVENT_TIMEOUT_MS — every
2823
- // subsequent call in this model call reverts to the normal 90s
2824
- // watchdog regardless of what kind of event this turned out to be.
2825
- hasReceivedFirstEngineEvent = true;
2826
2981
  const event = nextEvent.value;
2827
2982
  if (hasNoProgressStalled()) {
2828
2983
  checkpointNoProgress();
2829
2984
  break;
2830
2985
  }
2986
+ // A gateway keepalive proves the transport is up, not that the
2987
+ // model started: it must not release the 25s first-model-event cap
2988
+ // any more than it counts as stream progress, or an endless
2989
+ // keepalive stream rides the unreachable 90s watchdog instead.
2831
2990
  if (event.type !== "gateway-heartbeat") {
2991
+ hasReceivedFirstEngineEvent = true;
2832
2992
  lastModelStreamProgressAt = Date.now();
2833
2993
  }
2834
2994
  // In-loop processor seam (stream hook). Each chunk is offered to every
@@ -2939,10 +3099,18 @@ export async function runAgentLoop(opts) {
2939
3099
  assistantContent = event.parts;
2940
3100
  }
2941
3101
  else if (event.type === "usage") {
2942
- usage.inputTokens += event.inputTokens;
2943
- usage.outputTokens += event.outputTokens;
2944
- usage.cacheReadTokens += event.cacheReadTokens ?? 0;
2945
- usage.cacheWriteTokens += event.cacheWriteTokens ?? 0;
3102
+ const eventUsage = {
3103
+ inputTokens: event.inputTokens,
3104
+ outputTokens: event.outputTokens,
3105
+ cacheReadTokens: event.cacheReadTokens ?? 0,
3106
+ cacheWriteTokens: event.cacheWriteTokens ?? 0,
3107
+ model,
3108
+ };
3109
+ usage.inputTokens += eventUsage.inputTokens;
3110
+ usage.outputTokens += eventUsage.outputTokens;
3111
+ usage.cacheReadTokens += eventUsage.cacheReadTokens;
3112
+ usage.cacheWriteTokens += eventUsage.cacheWriteTokens;
3113
+ opts.onUsage?.(eventUsage);
2946
3114
  }
2947
3115
  else if (event.type === "stop") {
2948
3116
  terminalStopReason = event.reason;
@@ -3003,7 +3171,9 @@ export async function runAgentLoop(opts) {
3003
3171
  }
3004
3172
  throw new EngineError("Conversation has grown too long. The agent tried to recover automatically but the context is still too large. You can continue in a new chat, or ask the agent to summarize the conversation and continue.", { errorCode: "context_length_exceeded" });
3005
3173
  }
3006
- if (retry < maxRetriesForError(err) && isRetryableError(err)) {
3174
+ if (retry < maxRetriesForError(err) &&
3175
+ isRetryableError(err) &&
3176
+ hasBudgetForEngineRetry(budgetStartedAt, retry)) {
3007
3177
  // Clear partial text from the failed attempt so the retry
3008
3178
  // doesn't produce garbled duplicate output. Keep the retry itself
3009
3179
  // silent so transient provider/backend failures do not leak into
@@ -3211,12 +3381,28 @@ export async function runAgentLoop(opts) {
3211
3381
  emptyFinalResponseRetries = 0;
3212
3382
  flushUnstreamedAssistantText();
3213
3383
  let requestedActionStop = null;
3384
+ const noteRepeatedToolCall = (toolName, input) => {
3385
+ const key = toolCallCacheKey(toolName, input);
3386
+ const count = (repeatedToolCalls.get(key) ?? 0) + 1;
3387
+ repeatedToolCalls.set(key, count);
3388
+ if (count < MAX_IDENTICAL_TOOL_CALLS)
3389
+ return;
3390
+ requestedActionStop ??= {
3391
+ message: `Stopped because ${toolName} was called ${count} times with identical arguments in one turn, ` +
3392
+ `which means the same step is repeating rather than making progress. ` +
3393
+ `Everything completed before this point is preserved above.`,
3394
+ errorCode: "repeated_tool_call",
3395
+ };
3396
+ };
3214
3397
  // Human-in-the-loop approvals granted by the user for this turn (opt-in;
3215
3398
  // empty for the overwhelming majority of turns). Keyed by the stable
3216
3399
  // tool-call approval key so a re-issued continuation can let an approved
3217
3400
  // call run. The model cannot populate this — it comes from the request.
3218
3401
  const approvedToolCallKeys = new Set(opts.approvedToolCalls ?? []);
3219
3402
  const runToolCall = async (toolCall) => {
3403
+ // Counted before any journal/cache short-circuit: serving a repeat from
3404
+ // cache still means the model is asking the same question again.
3405
+ noteRepeatedToolCall(toolCall.name, toolCall.input);
3220
3406
  const actionEntry = actions[toolCall.name];
3221
3407
  const placeholderNormalization = actionEntry
3222
3408
  ? normalizeOptionalToolPlaceholders(actionEntry.tool.parameters, toolCall.input)
@@ -3456,9 +3642,12 @@ export async function runAgentLoop(opts) {
3456
3642
  // run-manager still aborts foreground hosted runs around 40s, while
3457
3643
  // background runs get nearly the full 15-minute function budget.
3458
3644
  const DEFAULT_TOOL_TIMEOUT_MS = 12 * 60_000;
3459
- const toolTimeoutMs = actionEntry.timeoutMs ??
3645
+ const requestedToolTimeoutMs = actionEntry.timeoutMs ??
3460
3646
  opts.toolLimits?.timeoutMs ??
3461
3647
  DEFAULT_TOOL_TIMEOUT_MS;
3648
+ const toolTimeoutMs = runToolTimeoutCeilingMs > 0
3649
+ ? Math.min(requestedToolTimeoutMs, runToolTimeoutCeilingMs)
3650
+ : requestedToolTimeoutMs;
3462
3651
  const toolMaxResultChars = actionEntry.maxResultChars ??
3463
3652
  opts.toolLimits?.maxResultChars ??
3464
3653
  DEFAULT_TOOL_RESULT_CHARS;
@@ -3474,6 +3663,12 @@ export async function runAgentLoop(opts) {
3474
3663
  // calls with no completed journal entry are completely unaffected). The
3475
3664
  // snapshot was taken before this chunk's tools ran, so it can only match a
3476
3665
  // PRIOR completion, never one from the current chunk.
3666
+ //
3667
+ // Read-only tools take the OTHER half of this protection:
3668
+ // `seedReadOnlyToolResultsFromJournal` puts their journaled results into
3669
+ // `readOnlyToolResultCache`, so the duplicate-read guard below serves them
3670
+ // as a cache hit (respecting `dedupe: false` and write invalidation)
3671
+ // instead of re-executing.
3477
3672
  if (!actionEntry.readOnly && toolCallJournal) {
3478
3673
  const journaled = findCompletedJournalEntry(toolCallJournal, toolCall.name, toolCall.input, consumedJournalKeys);
3479
3674
  if (journaled) {
@@ -3905,6 +4100,14 @@ export async function runAgentLoop(opts) {
3905
4100
  if (isError) {
3906
4101
  result = finalizeToolErrorResult(result);
3907
4102
  }
4103
+ // Side-channel warnings raised anywhere inside the action's call stack
4104
+ // (see `action-warnings.ts`). Drained here rather than in the success
4105
+ // branch so an action that warns and then throws still surfaces it, and
4106
+ // so nothing stays pending to bleed into a later tool's result.
4107
+ const agentWarnings = drainAgentWarnings();
4108
+ if (agentWarnings.length > 0) {
4109
+ result = `${result}\n\n${formatAgentWarningsForToolResult(agentWarnings)}`;
4110
+ }
3908
4111
  // Auto-refresh the UI after a successful mutating tool call. Any action
3909
4112
  // that isn't explicitly read-only is assumed to mutate. The client's
3910
4113
  // useDbSync listener sees a change event with source:"action" and
@@ -4037,7 +4240,7 @@ export async function runAgentLoop(opts) {
4037
4240
  }
4038
4241
  return usage;
4039
4242
  }
4040
- if (!signal.aborted) {
4243
+ if (!signal.aborted && !endedAtLoopLimit) {
4041
4244
  // In-loop processor seam (result hook). Fires once at clean run end with the
4042
4245
  // final assistant text so processors (e.g. a proof-of-done gate) can record
4043
4246
  // a verdict. A result-hook abort cannot un-finish a completed run, so a
@@ -4263,6 +4466,7 @@ export async function runAgentLoopWithMainChatInternalContinuations(opts) {
4263
4466
  usage.cacheWriteTokens += next.cacheWriteTokens;
4264
4467
  usage.model = next.model;
4265
4468
  };
4469
+ const budgetStartedAt = opts.budgetStartedAt ?? Date.now();
4266
4470
  const resumeResumableErrorsInProcess = opts.resumeResumableErrorsInProcess === true;
4267
4471
  const maxContinuations = typeof opts.maxContinuations === "number" && opts.maxContinuations > 0
4268
4472
  ? opts.maxContinuations
@@ -4285,19 +4489,26 @@ export async function runAgentLoopWithMainChatInternalContinuations(opts) {
4285
4489
  try {
4286
4490
  const nextUsage = await runAgentLoop({
4287
4491
  ...opts,
4492
+ budgetStartedAt,
4288
4493
  send,
4289
4494
  finalResponseGuardRequestText,
4290
4495
  });
4291
4496
  addUsage(nextUsage);
4292
4497
  }
4293
4498
  catch (err) {
4294
- // Preserve exact prior behavior unless explicitly opted in: an aborted
4295
- // signal (real soft-timeout / user stop) or a non-resumable error is
4296
- // always rethrown, and when `resumeResumableErrorsInProcess` is not
4297
- // set, EVERY thrown error is rethrown exactly as before.
4298
- if (!resumeResumableErrorsInProcess ||
4299
- opts.signal.aborted ||
4300
- !isResumableEngineError(err)) {
4499
+ // An aborted signal (real soft-timeout / user stop) or a non-resumable
4500
+ // error is always rethrown.
4501
+ if (opts.signal.aborted || !isResumableEngineError(err))
4502
+ throw err;
4503
+ // A caller with a proven long budget (`resumeResumableErrorsInProcess`)
4504
+ // always resumes here. Everyone else — notably the foreground chat turn,
4505
+ // where a resumable transport error previously ALWAYS propagated and in
4506
+ // practice was never resumed by any other layer — resumes too, but only
4507
+ // while enough wall-clock remains to attempt it without being cut off
4508
+ // mid-stream by the platform wall.
4509
+ if (!resumeResumableErrorsInProcess &&
4510
+ remainingRunBudgetMs(budgetStartedAt) <
4511
+ SELF_CHAIN_MIN_CONTINUATION_BUDGET_MS) {
4301
4512
  throw err;
4302
4513
  }
4303
4514
  continuationReason = continuationReasonForResumableError(err);
@@ -4432,6 +4643,8 @@ export async function claimBackgroundWorkerRunEarly(opts) {
4432
4643
  const insert = opts.deps?.insertRun ?? insertRun;
4433
4644
  const claim = opts.deps?.claimBackgroundRun ?? claimBackgroundRun;
4434
4645
  const heartbeat = opts.deps?.updateRunHeartbeat ?? updateRunHeartbeat;
4646
+ const turnAborted = opts.deps?.isTurnAborted ?? isTurnAborted;
4647
+ const abortRun = opts.deps?.markRunAborted ?? markRunAborted;
4435
4648
  const threadId = typeof opts.threadId === "string" && opts.threadId.trim()
4436
4649
  ? opts.threadId.trim()
4437
4650
  : opts.runId;
@@ -4447,11 +4660,21 @@ export async function claimBackgroundWorkerRunEarly(opts) {
4447
4660
  ]
4448
4661
  .filter(Boolean)
4449
4662
  .join(" ")).catch(() => { });
4663
+ // A failed durable abort read is fail-closed: never let a worker execute
4664
+ // after cancellation just because the database was temporarily unreadable.
4665
+ if (await turnAborted(threadId, turnId).catch(() => true)) {
4666
+ await abortRun(opts.runId, "user").catch(() => { });
4667
+ return { claimed: false, skipped: "turn-aborted" };
4668
+ }
4450
4669
  if (opts.continuationCount > 0) {
4451
4670
  await insert(opts.runId, threadId, turnId, {
4452
4671
  dispatchMode: "background",
4453
4672
  }).catch(() => { });
4454
4673
  }
4674
+ if (await turnAborted(threadId, turnId).catch(() => true)) {
4675
+ await abortRun(opts.runId, "user").catch(() => { });
4676
+ return { claimed: false, skipped: "turn-aborted" };
4677
+ }
4455
4678
  const won = await claim(opts.runId);
4456
4679
  if (!won) {
4457
4680
  await record(opts.runId, RUN_DIAG_STAGE.workerClaimLost).catch(() => { });
@@ -4459,8 +4682,82 @@ export async function claimBackgroundWorkerRunEarly(opts) {
4459
4682
  }
4460
4683
  await record(opts.runId, RUN_DIAG_STAGE.workerClaimed).catch(() => { });
4461
4684
  await heartbeat(opts.runId).catch(() => { });
4685
+ if (await turnAborted(threadId, turnId).catch(() => true)) {
4686
+ await abortRun(opts.runId, "user").catch(() => { });
4687
+ return { claimed: false, skipped: "turn-aborted" };
4688
+ }
4462
4689
  return { claimed: true };
4463
4690
  }
4691
+ /**
4692
+ * Wall-clock ceiling on a single logical turn. The run-count ledger alone is
4693
+ * not a time bound: in durable mode each of the ~25 permitted chunks may burn
4694
+ * ~780s, so the ledger's real worst case is over five hours (production has an
4695
+ * observed 2h34m turn). Nobody is waiting that long, and every minute past
4696
+ * this point is spend on a request the user has abandoned.
4697
+ */
4698
+ export const MAX_TURN_WALL_CLOCK_MS = 90 * 60_000;
4699
+ /**
4700
+ * Request-body field carrying the turn's running input-token total across
4701
+ * chunks. It rides the BODY (not the background-run marker) because the marker
4702
+ * is stripped from `continuationBody` on every handoff while the body is the
4703
+ * successor's persisted rehydration payload.
4704
+ */
4705
+ export const AGENT_CHAT_TURN_INPUT_TOKENS_FIELD = "__agentNativeTurnInputTokens";
4706
+ /**
4707
+ * First `started_at` for a logical turn — the turn's true wall-clock origin
4708
+ * (`agent_runs.started_at` is never bumped by heartbeats). Returns null when
4709
+ * the turn has no rows or the read fails, in which case the deadline simply
4710
+ * does not apply and the run-count ledger remains the only bound.
4711
+ *
4712
+ * Costs one extra round trip per chain. Folding `MIN(started_at)` into
4713
+ * `countRunsForTurn`'s existing SELECT in run-store.ts would remove it.
4714
+ */
4715
+ async function readTurnStartedAt(threadId, turnId) {
4716
+ const { rows } = await getDbExec().execute({
4717
+ sql: `SELECT MIN(started_at) AS turn_started_at FROM agent_runs WHERE thread_id = ? AND turn_id = ?`,
4718
+ args: [threadId, turnId],
4719
+ });
4720
+ const raw = rows?.[0]
4721
+ ?.turn_started_at;
4722
+ const startedAt = Number(raw);
4723
+ return Number.isFinite(startedAt) && startedAt > 0 ? startedAt : null;
4724
+ }
4725
+ /**
4726
+ * Append a user-visible assistant text event to a live run from outside the
4727
+ * agent loop. The budget-exhaustion paths below terminate a turn that has
4728
+ * already done real work; without this the user sees only a bare
4729
+ * `turn_continuation_budget_exhausted` error string and every completed tool
4730
+ * result looks discarded. Best-effort — a failed ledger write must not turn a
4731
+ * budget stop into a thrown error.
4732
+ */
4733
+ async function emitRunText(run, text) {
4734
+ const runEvent = {
4735
+ seq: run.events.length,
4736
+ event: { type: "text", text },
4737
+ };
4738
+ run.events.push(runEvent);
4739
+ for (const subscriber of run.subscribers) {
4740
+ try {
4741
+ subscriber(runEvent);
4742
+ }
4743
+ catch { }
4744
+ }
4745
+ await insertRunEvent(run.runId, runEvent.seq, JSON.stringify(runEvent.event)).catch(() => { });
4746
+ }
4747
+ /**
4748
+ * One sentence naming what the turn actually finished, derived from the same
4749
+ * per-turn journal the resume note uses (no new ledger read shape).
4750
+ */
4751
+ async function describeTurnProgress(threadId, turnId) {
4752
+ const { toolCallJournal } = await loadPriorTurnToolCallJournal(threadId, turnId);
4753
+ const completed = toolCallJournal?.completed ?? [];
4754
+ if (completed.length === 0)
4755
+ return "No steps had completed yet.";
4756
+ const names = [...new Set(completed.map((entry) => entry.tool))];
4757
+ const shown = names.slice(0, 8).join(", ");
4758
+ return (`${completed.length} step(s) completed before I stopped (${shown}` +
4759
+ `${names.length > 8 ? ", …" : ""}). Their results are in the messages above.`);
4760
+ }
4464
4761
  /**
4465
4762
  * Sizes the dispatch retry budget by *remaining wall-clock capacity*, not by
4466
4763
  * dispatch TARGET — the two are independent concerns. `chainViaDurableBackground`
@@ -4632,11 +4929,15 @@ export const MAX_NESTED_SELF_DISPATCH_DEPTH = 6;
4632
4929
  export async function chainServerDrivenContinuation(opts) {
4633
4930
  const d = {
4634
4931
  countRunsForTurn: opts.deps?.countRunsForTurn ?? countRunsForTurn,
4932
+ readTurnStartedAt: opts.deps?.readTurnStartedAt ?? readTurnStartedAt,
4933
+ isTurnAborted: opts.deps?.isTurnAborted ?? isTurnAborted,
4934
+ emitRunText: opts.deps?.emitRunText ?? emitRunText,
4635
4935
  insertRun: opts.deps?.insertRun ?? insertRun,
4636
4936
  fireInternalDispatch: opts.deps?.fireInternalDispatch ?? fireInternalDispatch,
4637
4937
  readBackgroundRunClaim: opts.deps?.readBackgroundRunClaim ?? readBackgroundRunClaim,
4638
4938
  updateRunHeartbeat: opts.deps?.updateRunHeartbeat ?? updateRunHeartbeat,
4639
4939
  updateRunStatusIfRunning: opts.deps?.updateRunStatusIfRunning ?? updateRunStatusIfRunning,
4940
+ markRunAborted: opts.deps?.markRunAborted ?? markRunAborted,
4640
4941
  setRunTerminalReason: opts.deps?.setRunTerminalReason ?? setRunTerminalReason,
4641
4942
  recordRunDiagnostic: opts.deps?.recordRunDiagnostic ?? recordRunDiagnostic,
4642
4943
  markBackgroundContinuationChunkTerminal: opts.deps?.markBackgroundContinuationChunkTerminal ??
@@ -4656,17 +4957,35 @@ export async function chainServerDrivenContinuation(opts) {
4656
4957
  const turnRunCount = await d
4657
4958
  .countRunsForTurn(effectiveThreadId, effectiveTurnId)
4658
4959
  .catch(() => null);
4659
- if (turnRunCount !== null &&
4660
- turnRunCount > MAX_BACKGROUND_RUN_CONTINUATIONS + 5) {
4661
- console.error(`[agent-chat] turn ${effectiveTurnId} consumed ${turnRunCount} runs refusing to chain further`, runId);
4960
+ const stopTurn = async (terminalReason, logLine, userMessage) => {
4961
+ console.error(`[agent-chat] ${logLine}`, runId);
4962
+ const progress = await describeTurnProgress(effectiveThreadId, effectiveTurnId).catch(() => "");
4963
+ await d
4964
+ .emitRunText(run, progress ? `${userMessage}\n\n${progress}` : userMessage)
4965
+ .catch(() => { });
4662
4966
  const statusUpdated = await d
4663
4967
  .updateRunStatusIfRunning(runId, "errored")
4664
4968
  .catch(() => false);
4665
4969
  if (statusUpdated) {
4666
- await d
4667
- .setRunTerminalReason(runId, "turn_continuation_budget_exhausted")
4668
- .catch(() => { });
4970
+ await d.setRunTerminalReason(runId, terminalReason).catch(() => { });
4669
4971
  }
4972
+ };
4973
+ if (turnRunCount !== null &&
4974
+ turnRunCount > MAX_BACKGROUND_RUN_CONTINUATIONS + 5) {
4975
+ await stopTurn("turn_continuation_budget_exhausted", `turn ${effectiveTurnId} consumed ${turnRunCount} runs — refusing to chain further`, `I stopped after ${turnRunCount} internal continuations without finishing this request.`);
4976
+ return;
4977
+ }
4978
+ // WALL-CLOCK CEILING. The run-count ledger above bounds chunks, not time: in
4979
+ // durable mode 25 chunks x ~780s is over five hours, and prod has an observed
4980
+ // 2h34m turn. Measured from the turn's FIRST run row, so it survives every
4981
+ // recovery path exactly like the run count does.
4982
+ const turnStartedAt = await d
4983
+ .readTurnStartedAt(effectiveThreadId, effectiveTurnId)
4984
+ .catch(() => null);
4985
+ const turnElapsedMs = turnStartedAt === null ? 0 : Date.now() - turnStartedAt;
4986
+ if (turnElapsedMs > MAX_TURN_WALL_CLOCK_MS) {
4987
+ const elapsedMinutes = Math.round(turnElapsedMs / 60_000);
4988
+ await stopTurn("turn_wall_clock_budget_exhausted", `turn ${effectiveTurnId} ran ${elapsedMinutes}min (limit ${Math.round(MAX_TURN_WALL_CLOCK_MS / 60_000)}min) — refusing to chain further`, `I stopped after ${elapsedMinutes} minutes without finishing this request.`);
4670
4989
  return;
4671
4990
  }
4672
4991
  // Mint the next chunk's runId here and sign the dispatch token over it, so
@@ -4698,9 +5017,18 @@ export async function chainServerDrivenContinuation(opts) {
4698
5017
  const continuationBody = {
4699
5018
  ...opts.requestBody,
4700
5019
  internalContinuation: true,
5020
+ ...(typeof opts.turnInputTokens === "number"
5021
+ ? { [AGENT_CHAT_TURN_INPUT_TOKENS_FIELD]: opts.turnInputTokens }
5022
+ : {}),
4701
5023
  };
4702
5024
  delete continuationBody[AGENT_CHAT_BACKGROUND_RUN_FIELD];
4703
5025
  try {
5026
+ if (await d
5027
+ .isTurnAborted(effectiveThreadId, effectiveTurnId)
5028
+ .catch(() => true)) {
5029
+ await d.markRunAborted(runId, "user").catch(() => { });
5030
+ return;
5031
+ }
4704
5032
  await d
4705
5033
  .recordRunDiagnostic(runId, RUN_DIAG_STAGE.workerSetupStep, `chain_dispatch_start nextRunId=${nextRunId} reason=${continuationReason} path=${continuationDispatchPath}`)
4706
5034
  .catch(() => { });
@@ -4734,6 +5062,14 @@ export async function chainServerDrivenContinuation(opts) {
4734
5062
  .catch(() => { });
4735
5063
  console.error("[agent-chat] continuation insertRun failed; dispatching with inline body:", insertErr instanceof Error ? insertErr.message : insertErr);
4736
5064
  }
5065
+ if (await d
5066
+ .isTurnAborted(effectiveThreadId, effectiveTurnId)
5067
+ .catch(() => true)) {
5068
+ if (nextRowInserted)
5069
+ await d.markRunAborted(nextRunId, "user").catch(() => { });
5070
+ await d.markRunAborted(runId, "user").catch(() => { });
5071
+ return;
5072
+ }
4737
5073
  const dispatchBody = nextRowInserted
4738
5074
  ? {
4739
5075
  internalContinuation: true,
@@ -4827,8 +5163,13 @@ export async function chainServerDrivenContinuation(opts) {
4827
5163
  console.error(`[agent-chat] background continuation dispatch deferred (${deferralClassification}); leaving the pre-inserted successor for the unclaimed-run sweep to redispatch:`, lastDispatchErr instanceof Error
4828
5164
  ? lastDispatchErr.message
4829
5165
  : lastDispatchErr);
5166
+ // `completed`, not `errored`: this chunk's work IS durably persisted
5167
+ // and a successor row exists for the sweep to redispatch. Only the
5168
+ // handoff attempt failed, and the terminal reason already says so —
5169
+ // recording the chunk as errored made a recoverable deferral look like
5170
+ // a failed turn everywhere run status is read.
4830
5171
  const statusUpdated = await d
4831
- .updateRunStatusIfRunning(runId, "errored")
5172
+ .updateRunStatusIfRunning(runId, "completed")
4832
5173
  .catch(() => false);
4833
5174
  if (statusUpdated) {
4834
5175
  await d
@@ -5514,6 +5855,8 @@ export function createProductionAgentHandler(options) {
5514
5855
  defaultMaxIterations: getDefaultMaxIterations(),
5515
5856
  minMaxIterations: MIN_AGENT_MAX_ITERATIONS,
5516
5857
  maxMaxIterations: MAX_AGENT_MAX_ITERATIONS,
5858
+ maxRunInputTokens: getDefaultMaxRunInputTokens(),
5859
+ defaultMaxRunInputTokens: getDefaultMaxRunInputTokens(),
5517
5860
  scope: "default",
5518
5861
  source: "default",
5519
5862
  };
@@ -5652,10 +5995,22 @@ export function createProductionAgentHandler(options) {
5652
5995
  : typeof requestTurnId === "string" && requestTurnId.trim()
5653
5996
  ? requestTurnId.trim()
5654
5997
  : runId;
5998
+ if (isBackgroundWorker &&
5999
+ (await isTurnAborted(effectiveThreadId, effectiveTurnId).catch(() => true))) {
6000
+ await markRunAborted(runId, "user").catch(() => { });
6001
+ return { ok: true, stopped: true };
6002
+ }
5655
6003
  const messageToPersist = typeof requestDisplayMessage === "string" &&
5656
6004
  requestDisplayMessage.trim().length > 0
5657
6005
  ? requestDisplayMessage
5658
6006
  : requestMessage;
6007
+ // Running per-turn input-token total. Seeded from the predecessor chunk's
6008
+ // body, advanced by this chunk's own usage, and handed to the successor so
6009
+ // the token ceiling bounds the TURN rather than resetting every chunk.
6010
+ const priorTurnInputTokensFromBody = Number(body[AGENT_CHAT_TURN_INPUT_TOKENS_FIELD]);
6011
+ let turnInputTokens = Number.isFinite(priorTurnInputTokensFromBody)
6012
+ ? Math.max(0, priorTurnInputTokensFromBody)
6013
+ : 0;
5659
6014
  // Server-driven background continuation: when the background worker re-fired
5660
6015
  // itself at a soft-timeout boundary (a chained continuation chunk), rebuild
5661
6016
  // the conversation from the persisted thread_data so the next chunk resumes
@@ -5761,6 +6116,16 @@ export function createProductionAgentHandler(options) {
5761
6116
  // the Authorization Bearer HMAC is preserved either way.
5762
6117
  path: backgroundDispatchPath,
5763
6118
  taskId: runId,
6119
+ // A Netlify background function 202s on enqueue in well under a
6120
+ // second, so a 404/401/508 from it is an IMMEDIATE, knowable failure.
6121
+ // Fire-and-forget recorded those as `dispatched = true` and the user
6122
+ // waited out the claim grace for a worker that never existed. Only
6123
+ // for a real background-function target: a regular-function target
6124
+ // replies only after the successor chunk finishes, so awaiting it
6125
+ // would time out on every healthy dispatch.
6126
+ ...(expectsNetlifyBackgroundFunction
6127
+ ? { awaitResponse: true, responseTimeoutMs: 5_000 }
6128
+ : {}),
5764
6129
  // When the row (and its persisted payload) landed, send only the
5765
6130
  // marker — the worker rehydrates the body from dispatch_payload
5766
6131
  // (`payloadRef`), keeping the self-POST far under Netlify's 256KB
@@ -6023,6 +6388,7 @@ export function createProductionAgentHandler(options) {
6023
6388
  effectiveTurnId,
6024
6389
  requestBody: body,
6025
6390
  backgroundContinuationCount,
6391
+ turnInputTokens,
6026
6392
  // Re-evaluate the durable gate rather than keying off
6027
6393
  // isBackgroundWorker: a successor chunk of a FOREGROUND
6028
6394
  // self-chain re-enters as a worker too, and must keep
@@ -6234,6 +6600,9 @@ export function createProductionAgentHandler(options) {
6234
6600
  cacheWriteTokens: subUsage.cacheWriteTokens,
6235
6601
  model: subUsage.model,
6236
6602
  label: `custom-agent:${ref.name}`,
6603
+ runId,
6604
+ threadId: effectiveThreadId,
6605
+ taskId: effectiveTurnId,
6237
6606
  });
6238
6607
  }
6239
6608
  catch { }
@@ -6326,6 +6695,13 @@ export function createProductionAgentHandler(options) {
6326
6695
  : typeof message === "string" && message.trim().length > 0
6327
6696
  ? message
6328
6697
  : undefined;
6698
+ const turnUsage = {
6699
+ inputTokens: 0,
6700
+ outputTokens: 0,
6701
+ cacheReadTokens: 0,
6702
+ cacheWriteTokens: 0,
6703
+ model: effectiveModel,
6704
+ };
6329
6705
  const agentLoopOpts = {
6330
6706
  engine,
6331
6707
  model: effectiveModel,
@@ -6338,6 +6714,13 @@ export function createProductionAgentHandler(options) {
6338
6714
  actions: requestActions,
6339
6715
  send,
6340
6716
  signal,
6717
+ onUsage: (usage) => {
6718
+ turnUsage.inputTokens += usage.inputTokens;
6719
+ turnUsage.outputTokens += usage.outputTokens;
6720
+ turnUsage.cacheReadTokens += usage.cacheReadTokens;
6721
+ turnUsage.cacheWriteTokens += usage.cacheWriteTokens;
6722
+ turnUsage.model = usage.model;
6723
+ },
6341
6724
  ownerEmail,
6342
6725
  orgId: getRequestOrgId() ?? null,
6343
6726
  attachments: requestAttachments,
@@ -6350,6 +6733,8 @@ export function createProductionAgentHandler(options) {
6350
6733
  providerOptions: options.providerOptions,
6351
6734
  executionMode: requestMode,
6352
6735
  maxIterations: loopSettings.maxIterations,
6736
+ maxRunInputTokens: loopSettings.maxRunInputTokens,
6737
+ priorTurnInputTokens: turnInputTokens,
6353
6738
  finalResponseGuard: options.finalResponseGuard,
6354
6739
  finalResponseGuardRequestText: messageToPersist,
6355
6740
  ...(options.toolLimits ? { toolLimits: options.toolLimits } : {}),
@@ -6388,91 +6773,99 @@ export function createProductionAgentHandler(options) {
6388
6773
  : {}),
6389
6774
  };
6390
6775
  send({ type: "activity", label: "Contacting model" });
6391
- // loopUsage is always assigned — either via instrumentAgentLoop or
6392
- // runAgentLoop before use below. The definite-assignment guard is
6393
- // conservative because the try/catch makes the control flow non-obvious.
6394
- let loopUsage = undefined;
6395
6776
  let instrumented = false;
6396
6777
  try {
6397
- const { getObservabilityConfig, instrumentAgentLoop } = await import("../observability/traces.js");
6398
- const obsConfig = await getObservabilityConfig();
6399
- if (obsConfig.enabled) {
6400
- instrumented = true;
6401
- loopUsage = await instrumentAgentLoop({
6402
- runAgentLoop: runAgentLoopWithMainChatInternalContinuations,
6403
- loopOpts: agentLoopOpts,
6404
- runId,
6405
- threadId: threadId ?? null,
6406
- userId: ownerEmail,
6407
- config: obsConfig,
6408
- metadata: {
6778
+ try {
6779
+ const { getObservabilityConfig, instrumentAgentLoop } = await import("../observability/traces.js");
6780
+ const obsConfig = await getObservabilityConfig();
6781
+ if (obsConfig.enabled) {
6782
+ instrumented = true;
6783
+ await instrumentAgentLoop({
6784
+ runAgentLoop: runAgentLoopWithMainChatInternalContinuations,
6785
+ loopOpts: agentLoopOpts,
6786
+ runId,
6787
+ threadId: threadId ?? null,
6788
+ userId: ownerEmail,
6789
+ config: obsConfig,
6790
+ metadata: {
6791
+ modelSelectionSource,
6792
+ ...(experimentAssignments.length > 0
6793
+ ? { experimentAssignments }
6794
+ : {}),
6795
+ },
6796
+ experimentAssignments,
6409
6797
  modelSelectionSource,
6410
- ...(experimentAssignments.length > 0
6411
- ? { experimentAssignments }
6412
- : {}),
6413
- },
6414
- experimentAssignments,
6415
- modelSelectionSource,
6416
- sentimentInput: shouldInferSentimentForTurn({
6417
- internalContinuation: Boolean(internalContinuation),
6418
- isBackgroundWorker,
6419
- backgroundContinuationCount,
6420
- hasUserText: Boolean(userVisibleSentimentInput),
6421
- })
6422
- ? userVisibleSentimentInput
6423
- : undefined,
6424
- classifyError: () => {
6425
- if (agentLoopOpts.signal.aborted &&
6426
- agentLoopOpts.signal.reason === "run_timeout") {
6427
- return {
6428
- status: "success",
6429
- errorMessage: null,
6430
- metadata: {
6431
- terminalReason: "run_timeout",
6432
- recoverableContinuation: true,
6433
- },
6434
- };
6435
- }
6436
- return null;
6437
- },
6438
- });
6798
+ sentimentInput: shouldInferSentimentForTurn({
6799
+ internalContinuation: Boolean(internalContinuation),
6800
+ isBackgroundWorker,
6801
+ backgroundContinuationCount,
6802
+ hasUserText: Boolean(userVisibleSentimentInput),
6803
+ })
6804
+ ? userVisibleSentimentInput
6805
+ : undefined,
6806
+ classifyError: () => {
6807
+ if (agentLoopOpts.signal.aborted &&
6808
+ agentLoopOpts.signal.reason === "run_timeout") {
6809
+ return {
6810
+ status: "success",
6811
+ errorMessage: null,
6812
+ metadata: {
6813
+ terminalReason: "run_timeout",
6814
+ recoverableContinuation: true,
6815
+ },
6816
+ };
6817
+ }
6818
+ return null;
6819
+ },
6820
+ });
6821
+ }
6439
6822
  }
6440
- }
6441
- catch (err) {
6442
- // If instrumentation setup failed, fall through to uninstrumented.
6443
- // If the agent loop itself failed (via instrumentAgentLoop), re-throw.
6444
- if (instrumented)
6445
- throw err;
6446
- }
6447
- if (!instrumented) {
6448
- loopUsage =
6823
+ catch (err) {
6824
+ // If instrumentation setup failed, fall through to uninstrumented.
6825
+ // If the agent loop itself failed, re-throw after the outer finally
6826
+ // records any usage events that arrived before the failure.
6827
+ if (instrumented)
6828
+ throw err;
6829
+ }
6830
+ if (!instrumented) {
6449
6831
  await runAgentLoopWithMainChatInternalContinuations(agentLoopOpts);
6450
- }
6451
- // Record token usage for cost monitoring so the Usage panel in
6452
- // settings works in every mode, including local dev.
6453
- try {
6454
- const ownerEmail = options.resolveOwnerEmail
6455
- ? await options.resolveOwnerEmail(event)
6456
- : getRequestUserEmail();
6457
- if (ownerEmail &&
6458
- (loopUsage.inputTokens > 0 ||
6459
- loopUsage.outputTokens > 0 ||
6460
- loopUsage.cacheReadTokens > 0 ||
6461
- loopUsage.cacheWriteTokens > 0)) {
6462
- const { recordUsage } = await import("../usage/store.js");
6463
- await recordUsage({
6464
- ownerEmail,
6465
- inputTokens: loopUsage.inputTokens,
6466
- outputTokens: loopUsage.outputTokens,
6467
- cacheReadTokens: loopUsage.cacheReadTokens,
6468
- cacheWriteTokens: loopUsage.cacheWriteTokens,
6469
- model: loopUsage.model,
6470
- label: body.usageLabel || "chat",
6471
- });
6472
6832
  }
6473
6833
  }
6474
- catch {
6475
- // Usage recording failed don't break the run
6834
+ finally {
6835
+ // Advance and persist usage even when the provider aborts the loop
6836
+ // before its promise resolves; the per-event accumulator is the only
6837
+ // durable view of those partial model calls.
6838
+ turnInputTokens += turnUsage.inputTokens;
6839
+ try {
6840
+ const resolvedOwnerEmail = options.resolveOwnerEmail
6841
+ ? await options.resolveOwnerEmail(event)
6842
+ : getRequestUserEmail();
6843
+ if (resolvedOwnerEmail &&
6844
+ (turnUsage.inputTokens > 0 ||
6845
+ turnUsage.outputTokens > 0 ||
6846
+ turnUsage.cacheReadTokens > 0 ||
6847
+ turnUsage.cacheWriteTokens > 0)) {
6848
+ const { recordUsage } = await import("../usage/store.js");
6849
+ await recordUsage({
6850
+ ownerEmail: resolvedOwnerEmail,
6851
+ inputTokens: turnUsage.inputTokens,
6852
+ outputTokens: turnUsage.outputTokens,
6853
+ cacheReadTokens: turnUsage.cacheReadTokens,
6854
+ cacheWriteTokens: turnUsage.cacheWriteTokens,
6855
+ model: turnUsage.model,
6856
+ label: body.usageLabel || "chat",
6857
+ // token_usage has had run_id/thread_id/task_id since it was
6858
+ // created and every row was NULL on all three, so no spend could
6859
+ // be tied back to a run, thread, or outcome.
6860
+ runId,
6861
+ threadId: effectiveThreadId,
6862
+ taskId: effectiveTurnId,
6863
+ });
6864
+ }
6865
+ }
6866
+ catch {
6867
+ // Usage recording failed — don't break the run
6868
+ }
6476
6869
  }
6477
6870
  }, handleRunComplete, {
6478
6871
  // A synchronous self-chain chunk with enough remaining budget gets