@agent-native/core 0.132.1 → 0.133.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (456) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +198 -0
  3. package/corpus/core/package.json +1 -1
  4. package/corpus/core/src/a2a/correlation.ts +11 -1
  5. package/corpus/core/src/a2a/types.ts +11 -3
  6. package/corpus/core/src/agent/engine/ai-sdk-engine.ts +33 -46
  7. package/corpus/core/src/agent/engine/builder-engine.ts +22 -10
  8. package/corpus/core/src/agent/engine/error-detail.ts +184 -3
  9. package/corpus/core/src/agent/engine/failure-taxonomy.ts +123 -0
  10. package/corpus/core/src/agent/engine/index.ts +8 -0
  11. package/corpus/core/src/agent/engine/registry.ts +92 -8
  12. package/corpus/core/src/agent/engine/translate-ai-sdk.ts +17 -2
  13. package/corpus/core/src/agent/production-agent.ts +13 -33
  14. package/corpus/core/src/agent/run-loop-with-resume.ts +1 -1
  15. package/corpus/core/src/agent/run-manager.ts +43 -14
  16. package/corpus/core/src/agent/run-store.ts +30 -3
  17. package/corpus/core/src/agent/thread-data-builder.ts +36 -4
  18. package/corpus/core/src/chat-threads/store.ts +42 -0
  19. package/corpus/core/src/cli/templates-meta.ts +13 -0
  20. package/corpus/core/src/cli/workspace-dev.ts +1 -0
  21. package/corpus/core/src/client/error-format.ts +12 -0
  22. package/corpus/core/src/client/use-chat-threads.ts +76 -16
  23. package/corpus/core/src/credentials/index.ts +51 -12
  24. package/corpus/core/src/extensions/url-safety.ts +46 -12
  25. package/corpus/core/src/integrations/adapters/slack.ts +32 -10
  26. package/corpus/core/src/integrations/google-docs-poller.ts +12 -1
  27. package/corpus/core/src/integrations/installations-store.ts +30 -0
  28. package/corpus/core/src/integrations/plugin.ts +5 -5
  29. package/corpus/core/src/integrations/types.ts +7 -0
  30. package/corpus/core/src/integrations/webhook-handler.ts +24 -1
  31. package/corpus/core/src/jobs/background-automation-runner.ts +38 -1
  32. package/corpus/core/src/provider-api/index.ts +8 -2
  33. package/corpus/core/src/scripts/call-agent.ts +6 -0
  34. package/corpus/core/src/server/agent-chat-plugin.ts +46 -10
  35. package/corpus/core/src/server/agent-discovery.ts +2 -0
  36. package/corpus/core/src/server/builder-design-systems.ts +21 -0
  37. package/corpus/core/src/server/credential-provider.ts +51 -12
  38. package/corpus/core/src/server/index.ts +1 -0
  39. package/corpus/core/src/server/onboarding-html.ts +37 -2
  40. package/corpus/core/src/shared/reasoning-effort.ts +1 -1
  41. package/corpus/core/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +11 -0
  42. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +6 -2
  43. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +39 -19
  44. package/corpus/templates/assets/changelog/2026-07-31-the-agent-native-logo-stays-visible-when-the-sidebar-is-coll.md +6 -0
  45. package/corpus/templates/brain/app/components/layout/Sidebar.tsx +30 -3
  46. package/corpus/templates/brain/changelog/2026-07-31-clicking-the-agent-native-logo-now-toggles-the-app-sidebar.md +6 -0
  47. package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +1 -1
  48. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +54 -25
  49. package/corpus/templates/calendar/changelog/2026-07-31-the-agent-native-logo-stays-visible-when-the-sidebar-is-coll.md +6 -0
  50. package/corpus/templates/chat/app/components/layout/Sidebar.tsx +30 -3
  51. package/corpus/templates/chat/changelog/2026-07-31-clicking-the-agent-native-logo-now-toggles-the-app-sidebar.md +6 -0
  52. package/corpus/templates/clips/app/components/library/library-layout.tsx +37 -21
  53. package/corpus/templates/clips/changelog/2026-07-30-meeting-microphone-transcription-works-reliably-from-the-fir.md +6 -0
  54. package/corpus/templates/clips/changelog/2026-07-31-the-agent-native-logo-stays-visible-when-the-sidebar-is-coll.md +6 -0
  55. package/corpus/templates/clips/desktop/src/hooks/useMediaDevices.ts +1 -1
  56. package/corpus/templates/clips/desktop/src/lib/media-capture-constraints.ts +1 -1
  57. package/corpus/templates/clips/desktop/src-tauri/src/native_screen/custom_capture.rs +13 -0
  58. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +2 -0
  59. package/corpus/templates/clips/desktop/src-tauri/src/system_audio.rs +25 -132
  60. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +34 -17
  61. package/corpus/templates/content/changelog/2026-07-31-the-agent-native-logo-stays-visible-when-the-sidebar-is-coll.md +6 -0
  62. package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +6 -2
  63. package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +5 -0
  64. package/corpus/templates/design/actions/create-design-system.ts +1 -0
  65. package/corpus/templates/design/actions/set-default-design-system.ts +34 -26
  66. package/corpus/templates/design/app/components/design/KeyboardShortcutsPanel.tsx +5 -3
  67. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +23 -0
  68. package/corpus/templates/design/app/components/design/keyboard-shortcuts.ts +3 -0
  69. package/corpus/templates/design/app/components/layout/Sidebar.tsx +21 -4
  70. package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +11 -7
  71. package/corpus/templates/design/app/i18n-data.ts +39 -0
  72. package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +229 -12
  73. package/corpus/templates/design/app/pages/DesignSystems.tsx +10 -4
  74. package/corpus/templates/design/changelog/2026-07-30-fixed-the-keyboard-shortcuts-panel-not-opening-with-ctrl-shi.md +6 -0
  75. package/corpus/templates/design/changelog/2026-07-31-clicking-the-agent-native-logo-now-toggles-the-app-sidebar.md +6 -0
  76. package/corpus/templates/design/changelog/2026-07-31-design-system-indexing-keeps-your-chosen-name-when-you-uploa.md +6 -0
  77. package/corpus/templates/design/server/lib/builder-design-system-proxy.ts +19 -4
  78. package/corpus/templates/dispatch/AGENTS.md +4 -0
  79. package/corpus/templates/factory/.agents/skills/actions/SKILL.md +562 -0
  80. package/corpus/templates/factory/.agents/skills/adding-a-feature/SKILL.md +198 -0
  81. package/corpus/templates/factory/.agents/skills/agent-native-docs/SKILL.md +115 -0
  82. package/corpus/templates/factory/.agents/skills/agent-native-toolkit/SKILL.md +182 -0
  83. package/corpus/templates/factory/.agents/skills/capture-learnings/SKILL.md +89 -0
  84. package/corpus/templates/factory/.agents/skills/create-skill/SKILL.md +221 -0
  85. package/corpus/templates/factory/.agents/skills/customizing-agent-native/SKILL.md +220 -0
  86. package/corpus/templates/factory/.agents/skills/delegate-to-agent/SKILL.md +263 -0
  87. package/corpus/templates/factory/.agents/skills/factory-graphs/SKILL.md +52 -0
  88. package/corpus/templates/factory/.agents/skills/feature-flags/SKILL.md +169 -0
  89. package/corpus/templates/factory/.agents/skills/frontend-design/SKILL.md +174 -0
  90. package/corpus/templates/factory/.agents/skills/real-time-sync/SKILL.md +232 -0
  91. package/corpus/templates/factory/.agents/skills/security/SKILL.md +324 -0
  92. package/corpus/templates/factory/.agents/skills/self-modifying-code/SKILL.md +119 -0
  93. package/corpus/templates/factory/.agents/skills/shadcn-ui/SKILL.md +123 -0
  94. package/corpus/templates/factory/.agents/skills/sharing/SKILL.md +232 -0
  95. package/corpus/templates/factory/.agents/skills/storing-data/SKILL.md +178 -0
  96. package/corpus/templates/factory/.agents/skills/upgrade-agent-native/SKILL.md +122 -0
  97. package/corpus/templates/factory/.env.example +24 -0
  98. package/corpus/templates/factory/.ignore +0 -0
  99. package/corpus/templates/factory/.oxfmtrc.json +8 -0
  100. package/corpus/templates/factory/AGENTS.md +90 -0
  101. package/corpus/templates/factory/CHANGELOG.md +10 -0
  102. package/corpus/templates/factory/DEVELOPING.md +185 -0
  103. package/corpus/templates/factory/README.md +64 -0
  104. package/corpus/templates/factory/_gitignore +42 -0
  105. package/corpus/templates/factory/actions/add-factory-comment.ts +55 -0
  106. package/corpus/templates/factory/actions/approve-factory-item.ts +214 -0
  107. package/corpus/templates/factory/actions/babysit-pull-request.ts +126 -0
  108. package/corpus/templates/factory/actions/evaluate-triage-item.ts +172 -0
  109. package/corpus/templates/factory/actions/get-factory-graph.ts +62 -0
  110. package/corpus/templates/factory/actions/get-triage-config.ts +42 -0
  111. package/corpus/templates/factory/actions/get-triage-item.ts +74 -0
  112. package/corpus/templates/factory/actions/hello.ts +13 -0
  113. package/corpus/templates/factory/actions/ingest-github-observation.ts +100 -0
  114. package/corpus/templates/factory/actions/list-factories.ts +40 -0
  115. package/corpus/templates/factory/actions/list-factory-comments.ts +40 -0
  116. package/corpus/templates/factory/actions/list-triage-items.ts +85 -0
  117. package/corpus/templates/factory/actions/list-triage-rules.ts +44 -0
  118. package/corpus/templates/factory/actions/navigate.ts +41 -0
  119. package/corpus/templates/factory/actions/poll-slack-channel.ts +118 -0
  120. package/corpus/templates/factory/actions/reconcile-triage-run.ts +179 -0
  121. package/corpus/templates/factory/actions/record-triage-feedback.ts +58 -0
  122. package/corpus/templates/factory/actions/run.ts +2 -0
  123. package/corpus/templates/factory/actions/save-factory-graph.ts +129 -0
  124. package/corpus/templates/factory/actions/save-triage-config.ts +67 -0
  125. package/corpus/templates/factory/actions/save-triage-rule.ts +89 -0
  126. package/corpus/templates/factory/actions/suggest-factory-rules.ts +70 -0
  127. package/corpus/templates/factory/actions/view-screen.ts +73 -0
  128. package/corpus/templates/factory/app/components/factory/FactoryCanvas.tsx +441 -0
  129. package/corpus/templates/factory/app/components/factory/FactoryInspector.tsx +388 -0
  130. package/corpus/templates/factory/app/components/layout/Header.tsx +60 -0
  131. package/corpus/templates/factory/app/components/layout/Layout.tsx +190 -0
  132. package/corpus/templates/factory/app/components/layout/Sidebar.tsx +538 -0
  133. package/corpus/templates/factory/app/components/triage/triage-status-pill.tsx +28 -0
  134. package/corpus/templates/factory/app/components/ui/button.tsx +1 -0
  135. package/corpus/templates/factory/app/components/ui/card.tsx +1 -0
  136. package/corpus/templates/factory/app/components/ui/dropdown-menu.tsx +1 -0
  137. package/corpus/templates/factory/app/components/ui/input.tsx +1 -0
  138. package/corpus/templates/factory/app/components/ui/label.tsx +1 -0
  139. package/corpus/templates/factory/app/components/ui/sheet.tsx +1 -0
  140. package/corpus/templates/factory/app/components/ui/textarea.tsx +1 -0
  141. package/corpus/templates/factory/app/components/ui/toolkit-provider.tsx +17 -0
  142. package/corpus/templates/factory/app/components/ui/tooltip.tsx +1 -0
  143. package/corpus/templates/factory/app/design-system.ts +3 -0
  144. package/corpus/templates/factory/app/entry.client.tsx +22 -0
  145. package/corpus/templates/factory/app/entry.server.tsx +10 -0
  146. package/corpus/templates/factory/app/global.css +93 -0
  147. package/corpus/templates/factory/app/hooks/use-navigation-state.ts +113 -0
  148. package/corpus/templates/factory/app/i18n/en-US.ts +211 -0
  149. package/corpus/templates/factory/app/i18n/index.ts +34 -0
  150. package/corpus/templates/factory/app/i18n-data.ts +556 -0
  151. package/corpus/templates/factory/app/lib/agent-page.tsx +49 -0
  152. package/corpus/templates/factory/app/lib/app-config.ts +11 -0
  153. package/corpus/templates/factory/app/lib/tab-id.ts +1 -0
  154. package/corpus/templates/factory/app/lib/utils.ts +1 -0
  155. package/corpus/templates/factory/app/root.tsx +175 -0
  156. package/corpus/templates/factory/app/routes/_index.tsx +94 -0
  157. package/corpus/templates/factory/app/routes/agent.tsx +24 -0
  158. package/corpus/templates/factory/app/routes/chat.$threadId.tsx +1 -0
  159. package/corpus/templates/factory/app/routes/database.tsx +17 -0
  160. package/corpus/templates/factory/app/routes/extensions.$id.$slug.tsx +2 -0
  161. package/corpus/templates/factory/app/routes/extensions.$id.tsx +11 -0
  162. package/corpus/templates/factory/app/routes/extensions._index.tsx +11 -0
  163. package/corpus/templates/factory/app/routes/extensions.tsx +5 -0
  164. package/corpus/templates/factory/app/routes/factory.tsx +1003 -0
  165. package/corpus/templates/factory/app/routes/observability.tsx +19 -0
  166. package/corpus/templates/factory/app/routes/settings.tsx +89 -0
  167. package/corpus/templates/factory/app/routes/team.tsx +11 -0
  168. package/corpus/templates/factory/app/routes.ts +4 -0
  169. package/corpus/templates/factory/app/vite-env.d.ts +6 -0
  170. package/corpus/templates/factory/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  171. package/corpus/templates/factory/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  172. package/corpus/templates/factory/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  173. package/corpus/templates/factory/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
  174. package/corpus/templates/factory/changelog/2026-06-29-chat-layouts-adapt-when-the-agent-sidebar-is-open.md +6 -0
  175. package/corpus/templates/factory/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  176. package/corpus/templates/factory/changelog/2026-07-10-chat-now-makes-ai-connection-setup-clear-without-shifting-th.md +6 -0
  177. package/corpus/templates/factory/changelog/2026-07-13-a-full-agent-page-now-brings-context-files-connections-jobs-.md +6 -0
  178. package/corpus/templates/factory/changelog/2026-07-14-chat-opens-reliably-on-hosted-deployments-instead-of-failing.md +6 -0
  179. package/corpus/templates/factory/changelog/2026-07-14-fixed-chat-template-startup-with-older-core-versions.md +6 -0
  180. package/corpus/templates/factory/changelog/2026-07-15-chat-navigation-focuses-on-chat-and-agent.md +6 -0
  181. package/corpus/templates/factory/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  182. package/corpus/templates/factory/changelog/2026-07-22-compact-sidebar-footer.md +6 -0
  183. package/corpus/templates/factory/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +6 -0
  184. package/corpus/templates/factory/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  185. package/corpus/templates/factory/changelog/2026-07-22-recent-chats-are-easier-to-scan-and-expand.md +6 -0
  186. package/corpus/templates/factory/changelog/2026-07-23-full-page-chat-is-better-centered-with-quieter-chat-history-.md +6 -0
  187. package/corpus/templates/factory/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  188. package/corpus/templates/factory/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  189. package/corpus/templates/factory/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  190. package/corpus/templates/factory/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  191. package/corpus/templates/factory/changelog/2026-07-31-added-an-inspectable-observe-only-factory-queue-for-slack-.md +6 -0
  192. package/corpus/templates/factory/changelog/2026-07-31-clicking-the-agent-native-logo-now-toggles-the-app-sidebar.md +6 -0
  193. package/corpus/templates/factory/components.json +20 -0
  194. package/corpus/templates/factory/data/sync-config.json +1 -0
  195. package/corpus/templates/factory/learnings.defaults.md +5 -0
  196. package/corpus/templates/factory/netlify.toml +10 -0
  197. package/corpus/templates/factory/package.json +105 -0
  198. package/corpus/templates/factory/public/agent-native-icon-dark.svg +10 -0
  199. package/corpus/templates/factory/public/agent-native-icon-light.svg +10 -0
  200. package/corpus/templates/factory/public/agent-native-logo-dark.svg +21 -0
  201. package/corpus/templates/factory/public/agent-native-logo-light.svg +21 -0
  202. package/corpus/templates/factory/public/favicon.svg +1 -0
  203. package/corpus/templates/factory/public/icon-180.svg +1 -0
  204. package/corpus/templates/factory/public/icon-192.svg +1 -0
  205. package/corpus/templates/factory/public/icon-512.svg +1 -0
  206. package/corpus/templates/factory/public/manifest.json +21 -0
  207. package/corpus/templates/factory/react-router.config.ts +7 -0
  208. package/corpus/templates/factory/server/connectors/credentials.ts +129 -0
  209. package/corpus/templates/factory/server/connectors/slack.ts +129 -0
  210. package/corpus/templates/factory/server/db/index.ts +6 -0
  211. package/corpus/templates/factory/server/db/schema.ts +193 -0
  212. package/corpus/templates/factory/server/factory-graph/contracts.ts +212 -0
  213. package/corpus/templates/factory/server/factory-graph/store.ts +121 -0
  214. package/corpus/templates/factory/server/lib/require-workspace-member.ts +55 -0
  215. package/corpus/templates/factory/server/middleware/auth.ts +15 -0
  216. package/corpus/templates/factory/server/plugins/agent-chat.ts +58 -0
  217. package/corpus/templates/factory/server/plugins/auth.ts +14 -0
  218. package/corpus/templates/factory/server/plugins/factory-migrations.ts +247 -0
  219. package/corpus/templates/factory/server/plugins/factory-scheduler-job.ts +116 -0
  220. package/corpus/templates/factory/server/plugins/integrations.ts +46 -0
  221. package/corpus/templates/factory/server/routes/[...page].get.ts +5 -0
  222. package/corpus/templates/factory/server/routes/_agent-native/factory/builder-callback.post.ts +116 -0
  223. package/corpus/templates/factory/server/triage/ai-services-git.ts +197 -0
  224. package/corpus/templates/factory/server/triage/builder-executor.ts +118 -0
  225. package/corpus/templates/factory/server/triage/contracts.ts +164 -0
  226. package/corpus/templates/factory/server/triage/github-ingestion.ts +35 -0
  227. package/corpus/templates/factory/server/triage/guards.ts +121 -0
  228. package/corpus/templates/factory/server/triage/ids.ts +27 -0
  229. package/corpus/templates/factory/server/triage/pr-babysit.ts +100 -0
  230. package/corpus/templates/factory/server/triage/pr-monitor.ts +220 -0
  231. package/corpus/templates/factory/server/triage/slack-client.ts +55 -0
  232. package/corpus/templates/factory/server/triage/slack-poller.ts +152 -0
  233. package/corpus/templates/factory/ssr-entry.ts +15 -0
  234. package/corpus/templates/factory/tsconfig.json +21 -0
  235. package/corpus/templates/factory/vite.config.ts +19 -0
  236. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +55 -5
  237. package/corpus/templates/forms/changelog/2026-07-31-the-agent-native-logo-stays-visible-when-the-sidebar-is-coll.md +6 -0
  238. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +6 -2
  239. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +21 -6
  240. package/corpus/templates/plan/changelog/2026-07-31-clicking-the-agent-native-logo-now-toggles-the-app-sidebar.md +6 -0
  241. package/corpus/templates/slides/.agents/skills/create-deck/SKILL.md +12 -0
  242. package/corpus/templates/slides/.agents/skills/design-systems/SKILL.md +9 -0
  243. package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +11 -0
  244. package/corpus/templates/slides/AGENTS.md +5 -6
  245. package/corpus/templates/slides/actions/_await-fit-check.ts +20 -10
  246. package/corpus/templates/slides/actions/add-slide.ts +17 -4
  247. package/corpus/templates/slides/actions/create-design-system.ts +16 -4
  248. package/corpus/templates/slides/actions/delete-design-system.ts +18 -2
  249. package/corpus/templates/slides/actions/get-layout-overflows.ts +88 -0
  250. package/corpus/templates/slides/actions/import-file.ts +1 -0
  251. package/corpus/templates/slides/actions/index-design-system-with-builder.ts +8 -0
  252. package/corpus/templates/slides/actions/patch-deck.ts +48 -16
  253. package/corpus/templates/slides/actions/set-default-design-system.ts +49 -19
  254. package/corpus/templates/slides/actions/update-slide.ts +13 -3
  255. package/corpus/templates/slides/actions/view-screen.ts +87 -10
  256. package/corpus/templates/slides/app/components/deck/SlideRenderer.tsx +155 -28
  257. package/corpus/templates/slides/app/components/design-system/DesignSystemCard.tsx +21 -17
  258. package/corpus/templates/slides/app/components/design-system/DesignSystemSetup.tsx +849 -341
  259. package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +102 -2
  260. package/corpus/templates/slides/app/components/editor/PromptDialog.tsx +13 -16
  261. package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +60 -12
  262. package/corpus/templates/slides/app/components/editor/SlideOverflowWarning.tsx +11 -1
  263. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +66 -19
  264. package/corpus/templates/slides/app/i18n/en-US.ts +23 -0
  265. package/corpus/templates/slides/app/lib/normalize-slide-padding.ts +8 -15
  266. package/corpus/templates/slides/app/pages/DeckEditor.tsx +4 -3
  267. package/corpus/templates/slides/app/pages/DesignSystems.tsx +4 -3
  268. package/corpus/templates/slides/app/pages/Index.tsx +1 -1
  269. package/corpus/templates/slides/changelog/2026-07-31-design-system-details-now-show-their-source-and-indexing-sta.md +6 -0
  270. package/corpus/templates/slides/changelog/2026-07-31-design-system-indexing-keeps-your-chosen-name-when-you-uploa.md +6 -0
  271. package/corpus/templates/slides/changelog/2026-07-31-design-system-setup-keeps-focus-rings-visible-and-uses-a-sim.md +6 -0
  272. package/corpus/templates/slides/changelog/2026-07-31-skip-prompt-is-now-available-in-the-new-deck-prompt-header.md +6 -0
  273. package/corpus/templates/slides/changelog/2026-07-31-slides-now-detect-real-text-and-box-overflow-across-the-deck.md +6 -0
  274. package/corpus/templates/slides/changelog/2026-07-31-the-agent-native-logo-stays-visible-when-the-sidebar-is-coll.md +6 -0
  275. package/corpus/templates/slides/server/handlers/design-systems.ts +1 -0
  276. package/corpus/templates/slides/server/handlers/index-design-system-sources.ts +1 -0
  277. package/corpus/templates/slides/server/lib/builder-design-system-proxy.ts +23 -4
  278. package/corpus/templates/slides/server/plugins/agent-chat.ts +5 -0
  279. package/corpus/templates/slides/server/plugins/creative-context.ts +16 -3
  280. package/corpus/templates/slides/server/workspace-defaults.ts +5 -1
  281. package/corpus/templates/slides/shared/slide-fit.ts +26 -0
  282. package/corpus/templates/tasks/app/components/layout/Sidebar.tsx +30 -3
  283. package/corpus/templates/tasks/changelog/2026-07-31-clicking-the-agent-native-logo-now-toggles-the-app-sidebar.md +6 -0
  284. package/dist/a2a/correlation.d.ts +4 -1
  285. package/dist/a2a/correlation.d.ts.map +1 -1
  286. package/dist/a2a/correlation.js +8 -1
  287. package/dist/a2a/correlation.js.map +1 -1
  288. package/dist/a2a/types.d.ts +11 -3
  289. package/dist/a2a/types.d.ts.map +1 -1
  290. package/dist/a2a/types.js.map +1 -1
  291. package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
  292. package/dist/agent/engine/ai-sdk-engine.js +27 -41
  293. package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
  294. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  295. package/dist/agent/engine/builder-engine.js +18 -8
  296. package/dist/agent/engine/builder-engine.js.map +1 -1
  297. package/dist/agent/engine/error-detail.d.ts +61 -0
  298. package/dist/agent/engine/error-detail.d.ts.map +1 -1
  299. package/dist/agent/engine/error-detail.js +145 -3
  300. package/dist/agent/engine/error-detail.js.map +1 -1
  301. package/dist/agent/engine/failure-taxonomy.d.ts +24 -0
  302. package/dist/agent/engine/failure-taxonomy.d.ts.map +1 -0
  303. package/dist/agent/engine/failure-taxonomy.js +88 -0
  304. package/dist/agent/engine/failure-taxonomy.js.map +1 -0
  305. package/dist/agent/engine/index.d.ts +2 -1
  306. package/dist/agent/engine/index.d.ts.map +1 -1
  307. package/dist/agent/engine/index.js +2 -1
  308. package/dist/agent/engine/index.js.map +1 -1
  309. package/dist/agent/engine/registry.d.ts +16 -0
  310. package/dist/agent/engine/registry.d.ts.map +1 -1
  311. package/dist/agent/engine/registry.js +71 -6
  312. package/dist/agent/engine/registry.js.map +1 -1
  313. package/dist/agent/engine/translate-ai-sdk.d.ts.map +1 -1
  314. package/dist/agent/engine/translate-ai-sdk.js +14 -2
  315. package/dist/agent/engine/translate-ai-sdk.js.map +1 -1
  316. package/dist/agent/production-agent.d.ts.map +1 -1
  317. package/dist/agent/production-agent.js +13 -24
  318. package/dist/agent/production-agent.js.map +1 -1
  319. package/dist/agent/run-loop-with-resume.js +1 -1
  320. package/dist/agent/run-loop-with-resume.js.map +1 -1
  321. package/dist/agent/run-manager.d.ts.map +1 -1
  322. package/dist/agent/run-manager.js +39 -10
  323. package/dist/agent/run-manager.js.map +1 -1
  324. package/dist/agent/run-store.d.ts +10 -0
  325. package/dist/agent/run-store.d.ts.map +1 -1
  326. package/dist/agent/run-store.js +20 -3
  327. package/dist/agent/run-store.js.map +1 -1
  328. package/dist/agent/thread-data-builder.d.ts.map +1 -1
  329. package/dist/agent/thread-data-builder.js +28 -4
  330. package/dist/agent/thread-data-builder.js.map +1 -1
  331. package/dist/chat-threads/store.d.ts +13 -0
  332. package/dist/chat-threads/store.d.ts.map +1 -1
  333. package/dist/chat-threads/store.js +35 -0
  334. package/dist/chat-threads/store.js.map +1 -1
  335. package/dist/cli/templates-meta.d.ts.map +1 -1
  336. package/dist/cli/templates-meta.js +13 -0
  337. package/dist/cli/templates-meta.js.map +1 -1
  338. package/dist/cli/workspace-dev.d.ts.map +1 -1
  339. package/dist/cli/workspace-dev.js +1 -0
  340. package/dist/cli/workspace-dev.js.map +1 -1
  341. package/dist/client/error-format.d.ts.map +1 -1
  342. package/dist/client/error-format.js +10 -0
  343. package/dist/client/error-format.js.map +1 -1
  344. package/dist/client/use-chat-threads.d.ts.map +1 -1
  345. package/dist/client/use-chat-threads.js +66 -16
  346. package/dist/client/use-chat-threads.js.map +1 -1
  347. package/dist/collab/awareness.d.ts +2 -2
  348. package/dist/collab/awareness.d.ts.map +1 -1
  349. package/dist/collab/struct-routes.d.ts +1 -1
  350. package/dist/credentials/index.d.ts +9 -2
  351. package/dist/credentials/index.d.ts.map +1 -1
  352. package/dist/credentials/index.js +50 -8
  353. package/dist/credentials/index.js.map +1 -1
  354. package/dist/extensions/url-safety.d.ts.map +1 -1
  355. package/dist/extensions/url-safety.js +38 -12
  356. package/dist/extensions/url-safety.js.map +1 -1
  357. package/dist/integrations/adapters/slack.d.ts.map +1 -1
  358. package/dist/integrations/adapters/slack.js +25 -8
  359. package/dist/integrations/adapters/slack.js.map +1 -1
  360. package/dist/integrations/google-docs-poller.d.ts.map +1 -1
  361. package/dist/integrations/google-docs-poller.js +13 -1
  362. package/dist/integrations/google-docs-poller.js.map +1 -1
  363. package/dist/integrations/installations-store.d.ts +10 -0
  364. package/dist/integrations/installations-store.d.ts.map +1 -1
  365. package/dist/integrations/installations-store.js +24 -0
  366. package/dist/integrations/installations-store.js.map +1 -1
  367. package/dist/integrations/plugin.d.ts.map +1 -1
  368. package/dist/integrations/plugin.js +6 -5
  369. package/dist/integrations/plugin.js.map +1 -1
  370. package/dist/integrations/types.d.ts +7 -0
  371. package/dist/integrations/types.d.ts.map +1 -1
  372. package/dist/integrations/types.js.map +1 -1
  373. package/dist/integrations/webhook-handler.d.ts.map +1 -1
  374. package/dist/integrations/webhook-handler.js +16 -1
  375. package/dist/integrations/webhook-handler.js.map +1 -1
  376. package/dist/jobs/background-automation-runner.d.ts.map +1 -1
  377. package/dist/jobs/background-automation-runner.js +35 -2
  378. package/dist/jobs/background-automation-runner.js.map +1 -1
  379. package/dist/notifications/routes.d.ts +6 -6
  380. package/dist/observability/routes.d.ts +3 -3
  381. package/dist/provider-api/actions/custom-provider-registration.d.ts +14 -14
  382. package/dist/provider-api/actions/provider-api.d.ts +8 -8
  383. package/dist/provider-api/index.js +7 -3
  384. package/dist/provider-api/index.js.map +1 -1
  385. package/dist/scripts/call-agent.d.ts.map +1 -1
  386. package/dist/scripts/call-agent.js +6 -1
  387. package/dist/scripts/call-agent.js.map +1 -1
  388. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  389. package/dist/server/agent-chat-plugin.js +38 -9
  390. package/dist/server/agent-chat-plugin.js.map +1 -1
  391. package/dist/server/agent-discovery.d.ts +2 -0
  392. package/dist/server/agent-discovery.d.ts.map +1 -1
  393. package/dist/server/agent-discovery.js.map +1 -1
  394. package/dist/server/builder-design-systems.d.ts +4 -1
  395. package/dist/server/builder-design-systems.d.ts.map +1 -1
  396. package/dist/server/builder-design-systems.js +11 -1
  397. package/dist/server/builder-design-systems.js.map +1 -1
  398. package/dist/server/credential-provider.d.ts.map +1 -1
  399. package/dist/server/credential-provider.js +49 -12
  400. package/dist/server/credential-provider.js.map +1 -1
  401. package/dist/server/index.d.ts +1 -1
  402. package/dist/server/index.d.ts.map +1 -1
  403. package/dist/server/index.js.map +1 -1
  404. package/dist/server/onboarding-html.d.ts.map +1 -1
  405. package/dist/server/onboarding-html.js +37 -2
  406. package/dist/server/onboarding-html.js.map +1 -1
  407. package/dist/server/transcribe-voice.d.ts +1 -1
  408. package/dist/shared/reasoning-effort.d.ts +1 -0
  409. package/dist/shared/reasoning-effort.d.ts.map +1 -1
  410. package/dist/shared/reasoning-effort.js +1 -1
  411. package/dist/shared/reasoning-effort.js.map +1 -1
  412. package/dist/templates/chat/app/components/layout/Sidebar.tsx +30 -3
  413. package/dist/templates/chat/changelog/2026-07-31-clicking-the-agent-native-logo-now-toggles-the-app-sidebar.md +6 -0
  414. package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +11 -0
  415. package/package.json +1 -1
  416. package/src/a2a/correlation.ts +11 -1
  417. package/src/a2a/types.ts +11 -3
  418. package/src/agent/engine/ai-sdk-engine.ts +33 -46
  419. package/src/agent/engine/builder-engine.ts +22 -10
  420. package/src/agent/engine/error-detail.ts +184 -3
  421. package/src/agent/engine/failure-taxonomy.ts +123 -0
  422. package/src/agent/engine/index.ts +8 -0
  423. package/src/agent/engine/registry.ts +92 -8
  424. package/src/agent/engine/translate-ai-sdk.ts +17 -2
  425. package/src/agent/production-agent.ts +13 -33
  426. package/src/agent/run-loop-with-resume.ts +1 -1
  427. package/src/agent/run-manager.ts +43 -14
  428. package/src/agent/run-store.ts +30 -3
  429. package/src/agent/thread-data-builder.ts +36 -4
  430. package/src/chat-threads/store.ts +42 -0
  431. package/src/cli/templates-meta.ts +13 -0
  432. package/src/cli/workspace-dev.ts +1 -0
  433. package/src/client/error-format.ts +12 -0
  434. package/src/client/use-chat-threads.ts +76 -16
  435. package/src/credentials/index.ts +51 -12
  436. package/src/extensions/url-safety.ts +46 -12
  437. package/src/integrations/adapters/slack.ts +32 -10
  438. package/src/integrations/google-docs-poller.ts +12 -1
  439. package/src/integrations/installations-store.ts +30 -0
  440. package/src/integrations/plugin.ts +5 -5
  441. package/src/integrations/types.ts +7 -0
  442. package/src/integrations/webhook-handler.ts +24 -1
  443. package/src/jobs/background-automation-runner.ts +38 -1
  444. package/src/provider-api/index.ts +8 -2
  445. package/src/scripts/call-agent.ts +6 -0
  446. package/src/server/agent-chat-plugin.ts +46 -10
  447. package/src/server/agent-discovery.ts +2 -0
  448. package/src/server/builder-design-systems.ts +21 -0
  449. package/src/server/credential-provider.ts +51 -12
  450. package/src/server/index.ts +1 -0
  451. package/src/server/onboarding-html.ts +37 -2
  452. package/src/shared/reasoning-effort.ts +1 -1
  453. package/src/templates/chat/app/components/layout/Sidebar.tsx +30 -3
  454. package/src/templates/chat/changelog/2026-07-31-clicking-the-agent-native-logo-now-toggles-the-app-sidebar.md +6 -0
  455. package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +11 -0
  456. package/corpus/templates/clips/desktop/src/lib/media-device-selection.ts +0 -157
@@ -280,8 +280,23 @@ interface BuilderResolvedCredentials {
280
280
  source: Exclude<BuilderCredentialSource, "env">;
281
281
  }
282
282
 
283
- function isCompleteBuilderConnection(creds: BuilderResolvedCredentials) {
284
- return Boolean(creds.privateKey && creds.publicKey);
283
+ /**
284
+ * A complete key pair is not necessarily a usable one: the gateway may have
285
+ * already rejected this exact private+public pair (see
286
+ * `recordBuilderCredentialAuthFailure`). Treating a marked-bad pair as
287
+ * "complete" is how a rejected credential got resent on every subsequent
288
+ * turn forever — this is the read side of that write, symmetric with
289
+ * `resolveUsableProviderSecret` for every non-Builder provider.
290
+ */
291
+ async function isCompleteBuilderConnection(
292
+ creds: BuilderResolvedCredentials,
293
+ ): Promise<boolean> {
294
+ if (!creds.privateKey || !creds.publicKey) return false;
295
+ const failure = await getBuilderCredentialAuthFailure({
296
+ privateKey: creds.privateKey,
297
+ publicKey: creds.publicKey,
298
+ });
299
+ return !failure;
285
300
  }
286
301
 
287
302
  function readOptionalBuilderBoolean(
@@ -524,14 +539,14 @@ async function resolveScopedBuilderCredentials(): Promise<ScopedBuilderCredentia
524
539
  let orgLookupCause: unknown;
525
540
  try {
526
541
  const { readAppSecrets } = await import("../secrets/storage.js");
527
- const traceScope = (
542
+ const traceScope = async (
528
543
  creds: BuilderResolvedCredentials,
529
544
  scopeId: string,
530
545
  extra = "",
531
546
  ) => {
532
547
  if (!traceLookup) return;
533
548
  console.log(
534
- `[builder-credential] scope=${creds.source} scopeId=${scopeId} email=${email}${extra} complete=${isCompleteBuilderConnection(creds)} private=${Boolean(creds.privateKey)} public=${Boolean(creds.publicKey)}`,
549
+ `[builder-credential] scope=${creds.source} scopeId=${scopeId} email=${email}${extra} complete=${await isCompleteBuilderConnection(creds)} private=${Boolean(creds.privateKey)} public=${Boolean(creds.publicKey)}`,
535
550
  );
536
551
  };
537
552
 
@@ -540,8 +555,8 @@ async function resolveScopedBuilderCredentials(): Promise<ScopedBuilderCredentia
540
555
  "user",
541
556
  email,
542
557
  );
543
- traceScope(userCreds, email);
544
- if (isCompleteBuilderConnection(userCreds)) {
558
+ await traceScope(userCreds, email);
559
+ if (await isCompleteBuilderConnection(userCreds)) {
545
560
  return { creds: userCreds, lookupFailed: false };
546
561
  }
547
562
 
@@ -563,8 +578,8 @@ async function resolveScopedBuilderCredentials(): Promise<ScopedBuilderCredentia
563
578
  "org",
564
579
  orgId,
565
580
  );
566
- traceScope(orgCreds, orgId, ` orgSource=${orgSource}`);
567
- if (isCompleteBuilderConnection(orgCreds)) {
581
+ await traceScope(orgCreds, orgId, ` orgSource=${orgSource}`);
582
+ if (await isCompleteBuilderConnection(orgCreds)) {
568
583
  return { creds: orgCreds, lookupFailed: false };
569
584
  }
570
585
 
@@ -574,8 +589,8 @@ async function resolveScopedBuilderCredentials(): Promise<ScopedBuilderCredentia
574
589
  "workspace",
575
590
  orgId,
576
591
  );
577
- traceScope(workspaceCreds, orgId, ` orgSource=${orgSource}`);
578
- if (isCompleteBuilderConnection(workspaceCreds)) {
592
+ await traceScope(workspaceCreds, orgId, ` orgSource=${orgSource}`);
593
+ if (await isCompleteBuilderConnection(workspaceCreds)) {
579
594
  return { creds: workspaceCreds, lookupFailed: false };
580
595
  }
581
596
  }
@@ -594,12 +609,12 @@ async function resolveScopedBuilderCredentials(): Promise<ScopedBuilderCredentia
594
609
  "workspace",
595
610
  soloScopeId,
596
611
  );
597
- traceScope(
612
+ await traceScope(
598
613
  soloCreds,
599
614
  soloScopeId,
600
615
  ` orgId=${orgId ?? "(none)"} orgSource=${orgSource}`,
601
616
  );
602
- if (isCompleteBuilderConnection(soloCreds)) {
617
+ if (await isCompleteBuilderConnection(soloCreds)) {
603
618
  return { creds: soloCreds, lookupFailed: false };
604
619
  }
605
620
  } catch (err) {
@@ -791,6 +806,30 @@ export async function resolveBuilderCredentialsDetailed(): Promise<BuilderCreden
791
806
  readDeployCredentialEnv("BUILDER_IS_FREE_ACCOUNT"),
792
807
  )
793
808
  : null;
809
+ // The deploy-level fallback is a candidate scope like any other: a pair the
810
+ // gateway already rejected must not be handed back as the "configured"
811
+ // credential just because no per-user/org row exists to shadow it.
812
+ const envFailure =
813
+ privateKey && publicKey
814
+ ? await getBuilderCredentialAuthFailure({ privateKey, publicKey })
815
+ : null;
816
+ if (envFailure) {
817
+ return {
818
+ privateKey: null,
819
+ publicKey: null,
820
+ userId: null,
821
+ orgName: null,
822
+ orgKind: null,
823
+ subscription: null,
824
+ subscriptionLevel: null,
825
+ subscriptionName: null,
826
+ isEnterprise: null,
827
+ isFreeAccount: null,
828
+ source: null,
829
+ lookupFailed,
830
+ cause,
831
+ };
832
+ }
794
833
  return {
795
834
  privateKey,
796
835
  publicKey,
@@ -514,6 +514,7 @@ export {
514
514
  type BuilderDesignSystemProxyFields,
515
515
  type BuilderDesignSystemProxyFieldsOptions,
516
516
  type BuilderDesignSystemProxyReference,
517
+ type BuilderDesignSystemSourceKind,
517
518
  } from "./builder-design-systems.js";
518
519
  export {
519
520
  getBuilderBranchProjectId,
@@ -3264,6 +3264,32 @@ ${
3264
3264
  var RESEND_VERIFICATION_COOLDOWN_SECONDS = 60;
3265
3265
  var resendVerificationCooldownUntil = 0;
3266
3266
  var resendVerificationCooldownTimer = null;
3267
+ var PENDING_SIGNUP_EMAIL_STORAGE_KEY = 'an.onboarding.pendingSignupEmail';
3268
+ // The verification link can open in a new tab, so in-memory pending state
3269
+ // cannot be the only source of the account email. Keep only the address,
3270
+ // never the password, for the manual-login fallback.
3271
+ function pendingSignupEmailStorageKey() {
3272
+ return PENDING_SIGNUP_EMAIL_STORAGE_KEY + ':' + (__anBasePath() || '/');
3273
+ }
3274
+ function rememberPendingSignupEmail(email) {
3275
+ try {
3276
+ if (email) localStorage.setItem(pendingSignupEmailStorageKey(), email);
3277
+ else localStorage.removeItem(pendingSignupEmailStorageKey());
3278
+ // coercion-ok: localStorage is optional; the in-memory and form fallbacks remain available.
3279
+ } catch (e) {}
3280
+ }
3281
+ function readRememberedPendingSignupEmail() {
3282
+ try {
3283
+ var email = localStorage.getItem(pendingSignupEmailStorageKey()) || '';
3284
+ return __anIsValidAuthEmail(email) ? __anNormalizeAuthEmail(email) : '';
3285
+ // coercion-ok: localStorage is optional; callers fall back to the in-memory or form value.
3286
+ } catch (e) {
3287
+ return '';
3288
+ }
3289
+ }
3290
+ function clearRememberedPendingSignupEmail() {
3291
+ rememberPendingSignupEmail('');
3292
+ }
3267
3293
  function setActiveTab(name, opts) {
3268
3294
  if (name !== 'signup' && name !== 'login') return;
3269
3295
  var form = document.getElementById(name + '-form');
@@ -3283,6 +3309,7 @@ ${
3283
3309
  function showVerificationStep(email, password) {
3284
3310
  pendingSignupEmail = email || '';
3285
3311
  pendingSignupPassword = password || '';
3312
+ rememberPendingSignupEmail(pendingSignupEmail);
3286
3313
  tabs.forEach(function(x) { x.classList.remove('active'); });
3287
3314
  forms.forEach(function(x) { x.classList.remove('active'); });
3288
3315
  var card = document.querySelector('.card');
@@ -3313,7 +3340,7 @@ ${
3313
3340
  function getPendingSignupEmail() {
3314
3341
  var signupEmail = document.getElementById('s-email');
3315
3342
  var loginEmail = document.getElementById('l-email');
3316
- return (pendingSignupEmail || (signupEmail && signupEmail.value) || (loginEmail && loginEmail.value) || '').trim();
3343
+ return (pendingSignupEmail || readRememberedPendingSignupEmail() || (signupEmail && signupEmail.value) || (loginEmail && loginEmail.value) || '').trim();
3317
3344
  }
3318
3345
  function getPendingSignupPassword() {
3319
3346
  var signupPassword = document.getElementById('s-pass');
@@ -3366,6 +3393,7 @@ ${
3366
3393
  body: JSON.stringify({ email: email, password: password }),
3367
3394
  });
3368
3395
  if (res.ok) {
3396
+ clearRememberedPendingSignupEmail();
3369
3397
  __anRedirectToSignedInApp();
3370
3398
  return { ok: true };
3371
3399
  }
@@ -3398,6 +3426,7 @@ ${
3398
3426
  });
3399
3427
  var data = await res.json().catch(function() { return {}; });
3400
3428
  if (res.ok && data && data.email && !data.error) {
3429
+ clearRememberedPendingSignupEmail();
3401
3430
  __anRedirectToSignedInApp();
3402
3431
  return;
3403
3432
  }
@@ -3464,7 +3493,7 @@ ${
3464
3493
  async function resendVerificationEmail() {
3465
3494
  var btn = document.getElementById('resend-verification');
3466
3495
  var msg = document.getElementById('verify-msg');
3467
- var email = pendingSignupEmail || document.getElementById('s-email').value;
3496
+ var email = getPendingSignupEmail();
3468
3497
  if (!email) return;
3469
3498
  if (resendVerificationCooldownUntil > Date.now()) {
3470
3499
  updateResendVerificationCooldown();
@@ -3533,6 +3562,9 @@ ${
3533
3562
  setActiveTab(initial, { persist: false });
3534
3563
  try {
3535
3564
  if (__anIsVerifiedRedirectSuccess()) {
3565
+ var rememberedEmail = readRememberedPendingSignupEmail();
3566
+ var loginEmail = document.getElementById('l-email');
3567
+ if (loginEmail && rememberedEmail) loginEmail.value = rememberedEmail;
3536
3568
  var msg = document.getElementById('l-msg');
3537
3569
  if (msg) {
3538
3570
  msg.textContent = __anT('emailVerifiedFinishing');
@@ -3591,6 +3623,7 @@ ${
3591
3623
  body: JSON.stringify({ email: email, password: pass }),
3592
3624
  });
3593
3625
  if (loginRes.ok) {
3626
+ clearRememberedPendingSignupEmail();
3594
3627
  msg.textContent = __anT('accountCreatedSigningIn');
3595
3628
  msg.classList.add('show', 'success');
3596
3629
  __anRedirectToSignedInApp();
@@ -3630,6 +3663,7 @@ ${
3630
3663
  var backToSignup = document.getElementById('back-to-signup');
3631
3664
  if (backToSignup) backToSignup.addEventListener('click', function(e) {
3632
3665
  e.preventDefault();
3666
+ clearRememberedPendingSignupEmail();
3633
3667
  setActiveTab('signup', { persist: true });
3634
3668
  var email = document.getElementById('s-email');
3635
3669
  setTimeout(function() { if (email) email.focus(); }, 0);
@@ -3724,6 +3758,7 @@ ${
3724
3758
  }),
3725
3759
  });
3726
3760
  if (res.ok) {
3761
+ clearRememberedPendingSignupEmail();
3727
3762
  __anRedirectToSignedInApp();
3728
3763
  return;
3729
3764
  }
@@ -156,7 +156,7 @@ export function stepDownReasoningEffort(
156
156
  return REASONING_EFFORT_STEP_DOWN[effort] ?? effort;
157
157
  }
158
158
 
159
- function isGPTReasoningModel(model: string) {
159
+ export function isGPTReasoningModel(model: string) {
160
160
  const id = model.toLowerCase().replace(/^openai\//, "");
161
161
  return /^gpt-5/.test(id) || /^o\d/.test(id);
162
162
  }
@@ -17,6 +17,17 @@ Agents call other agents over A2A, a JSON-RPC protocol for discovery and
17
17
  delegation. Use it when work belongs to a different agent entirely — not the
18
18
  local agent chat.
19
19
 
20
+ **No workarounds when A2A feels flaky.** The strong default is `ask_app` (or
21
+ `call-agent`) working reliably, full stop — not apps reaching around it. Do
22
+ not have app A generate and execute raw SQL against app B's database, and do
23
+ not expose B's internal tools directly to A as a substitute for delegation.
24
+ The receiving agent has context, skills, and guardrails the caller doesn't;
25
+ bypassing it to work around a flaky A2A call reintroduces exactly the bugs A2A
26
+ exists to prevent, and makes the real reliability problem invisible instead of
27
+ fixing it. If A2A delegation is unreliable, fix A2A — file it as a bug in the
28
+ delegation path (timeout handling, retries, typed terminal states), don't
29
+ route around it app by app.
30
+
20
31
  Connecting app A to app B is two independent things, and both must be true:
21
32
 
22
33
  1. **B is registered on A** as a `remote-agents/<id>.json` resource.
@@ -2229,13 +2229,17 @@ export function Sidebar({ mobile }: { mobile?: boolean } = {}) {
2229
2229
  src={appPath("/agent-native-icon-light.svg")}
2230
2230
  alt=""
2231
2231
  aria-hidden="true"
2232
- className="block h-5 w-auto shrink-0 dark:hidden"
2232
+ width={35}
2233
+ height={20}
2234
+ className="block h-5 w-[35px] shrink-0 object-contain object-center dark:hidden"
2233
2235
  />
2234
2236
  <img
2235
2237
  src={appPath("/agent-native-icon-dark.svg")}
2236
2238
  alt=""
2237
2239
  aria-hidden="true"
2238
- className="hidden h-5 w-auto shrink-0 dark:block"
2240
+ width={35}
2241
+ height={20}
2242
+ className="hidden h-5 w-[35px] shrink-0 object-contain object-center dark:block"
2239
2243
  />
2240
2244
  <span className="text-lg font-bold tracking-tight">
2241
2245
  {t("navigation.brand")}
@@ -377,6 +377,44 @@ export function Sidebar() {
377
377
  className={collapsed ? "h-8 w-8" : "min-w-0"}
378
378
  />
379
379
  );
380
+ const brandControl = (
381
+ <button
382
+ type="button"
383
+ onClick={() => setCollapsed((value) => !value)}
384
+ aria-label={
385
+ collapsed
386
+ ? t("navigation.expandSidebar")
387
+ : t("navigation.collapseSidebar")
388
+ }
389
+ className={cn(
390
+ "flex items-center gap-2 rounded outline-none transition-colors hover:bg-sidebar-accent/50 focus-visible:ring-2 focus-visible:ring-ring",
391
+ collapsed ? "size-8 justify-center" : "text-start",
392
+ )}
393
+ data-sidebar-brand-toggle
394
+ >
395
+ <img
396
+ src={appPath("/agent-native-icon-light.svg")}
397
+ alt=""
398
+ aria-hidden="true"
399
+ width={28}
400
+ height={16}
401
+ className="block h-4 w-7 shrink-0 object-contain object-center dark:hidden"
402
+ />
403
+ <img
404
+ src={appPath("/agent-native-icon-dark.svg")}
405
+ alt=""
406
+ aria-hidden="true"
407
+ width={28}
408
+ height={16}
409
+ className="hidden h-4 w-7 shrink-0 object-contain object-center dark:block"
410
+ />
411
+ {!collapsed && (
412
+ <span className="text-sm font-semibold tracking-tight">
413
+ {t("navigation.brand")}
414
+ </span>
415
+ )}
416
+ </button>
417
+ );
380
418
 
381
419
  return (
382
420
  <aside
@@ -391,25 +429,7 @@ export function Sidebar() {
391
429
  collapsed ? "justify-center px-2" : "justify-between px-4",
392
430
  )}
393
431
  >
394
- {!collapsed && (
395
- <div className="flex items-center gap-2">
396
- <img
397
- src={appPath("/agent-native-icon-light.svg")}
398
- alt=""
399
- aria-hidden="true"
400
- className="block h-4 w-auto dark:hidden"
401
- />
402
- <img
403
- src={appPath("/agent-native-icon-dark.svg")}
404
- alt=""
405
- aria-hidden="true"
406
- className="hidden h-4 w-auto dark:block"
407
- />
408
- <span className="text-sm font-semibold tracking-tight">
409
- {t("navigation.brand")}
410
- </span>
411
- </div>
412
- )}
432
+ {brandControl}
413
433
  </div>
414
434
 
415
435
  <div className="flex min-h-0 flex-1 flex-col overflow-y-auto">
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-31
4
+ ---
5
+
6
+ The Agent Native logo stays visible when the sidebar is collapsed and toggles the sidebar when clicked.
@@ -310,23 +310,50 @@ export function Sidebar({
310
310
  >
311
311
  <Link
312
312
  to="/"
313
+ onClick={(event) => {
314
+ if (
315
+ !collapsible ||
316
+ !onCollapsedChange ||
317
+ event.metaKey ||
318
+ event.ctrlKey ||
319
+ event.shiftKey ||
320
+ event.altKey ||
321
+ event.button !== 0
322
+ ) {
323
+ return;
324
+ }
325
+ event.preventDefault();
326
+ onCollapsedChange(!collapsed);
327
+ }}
313
328
  className={cn(
314
329
  "flex min-w-0 items-center rounded outline-none focus-visible:ring-2 focus-visible:ring-ring",
315
330
  collapsed ? "size-8 justify-center" : "flex-1 gap-3",
316
331
  )}
317
- aria-label={collapsed ? t("navigation.brand") : undefined}
332
+ aria-label={
333
+ collapsible && onCollapsedChange
334
+ ? collapsed
335
+ ? t("navigation.expandSidebar")
336
+ : t("navigation.collapseSidebar")
337
+ : collapsed
338
+ ? t("navigation.brand")
339
+ : undefined
340
+ }
318
341
  >
319
342
  <img
320
343
  src={appPath("/agent-native-icon-light.svg")}
321
344
  alt=""
322
345
  aria-hidden="true"
323
- className="block h-4 w-auto shrink-0 dark:hidden"
346
+ width={28}
347
+ height={16}
348
+ className="block h-4 w-7 shrink-0 object-contain object-center dark:hidden"
324
349
  />
325
350
  <img
326
351
  src={appPath("/agent-native-icon-dark.svg")}
327
352
  alt=""
328
353
  aria-hidden="true"
329
- className="hidden h-4 w-auto shrink-0 dark:block"
354
+ width={28}
355
+ height={16}
356
+ className="hidden h-4 w-7 shrink-0 object-contain object-center dark:block"
330
357
  />
331
358
  <div className={cn("min-w-0", collapsed && "sr-only")}>
332
359
  <p className="truncate text-sm font-semibold text-sidebar-accent-foreground">
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-31
4
+ ---
5
+
6
+ Clicking the Agent Native logo now toggles the app sidebar.
@@ -386,7 +386,7 @@ export function AppLayout({ children }: AppLayoutProps) {
386
386
  open={sidebarOpen}
387
387
  onClose={() => setSidebarOpen(false)}
388
388
  collapsed={!isMobile && sidebarCollapsed}
389
- onCollapsedChange={setSidebarCollapsed}
389
+ onCollapsedChange={isMobile ? undefined : setSidebarCollapsed}
390
390
  />
391
391
  <AgentSidebar
392
392
  position="right"
@@ -775,31 +775,60 @@ export function Sidebar({
775
775
  collapsed ? "px-1" : "px-4",
776
776
  )}
777
777
  >
778
- {!collapsed && (
779
- <>
780
- <Link
781
- to="/"
782
- onClick={onClose}
783
- className="flex items-center gap-2 rounded outline-none focus-visible:ring-2 focus-visible:ring-ring"
784
- >
785
- <img
786
- src={appPath("/agent-native-icon-light.svg")}
787
- alt=""
788
- aria-hidden="true"
789
- className="block h-4 w-auto shrink-0 dark:hidden"
790
- />
791
- <img
792
- src={appPath("/agent-native-icon-dark.svg")}
793
- alt=""
794
- aria-hidden="true"
795
- className="hidden h-4 w-auto shrink-0 dark:block"
796
- />
797
- <span className="text-base font-semibold tracking-tight">
798
- {t("navigation.brand")}
799
- </span>
800
- </Link>
801
- </>
802
- )}
778
+ <Link
779
+ to="/"
780
+ onClick={(event) => {
781
+ onClose();
782
+ if (
783
+ !onCollapsedChange ||
784
+ event.metaKey ||
785
+ event.ctrlKey ||
786
+ event.shiftKey ||
787
+ event.altKey ||
788
+ event.button !== 0
789
+ ) {
790
+ return;
791
+ }
792
+ event.preventDefault();
793
+ onCollapsedChange(!collapsed);
794
+ }}
795
+ className={cn(
796
+ "flex items-center gap-2 rounded outline-none focus-visible:ring-2 focus-visible:ring-ring",
797
+ collapsed ? "size-8 justify-center" : "flex-1",
798
+ )}
799
+ aria-label={
800
+ onCollapsedChange
801
+ ? collapsed
802
+ ? t("sidebar.expandSidebar")
803
+ : t("sidebar.collapseSidebar")
804
+ : collapsed
805
+ ? t("navigation.brand")
806
+ : undefined
807
+ }
808
+ data-sidebar-brand-toggle
809
+ >
810
+ <img
811
+ src={appPath("/agent-native-icon-light.svg")}
812
+ alt=""
813
+ aria-hidden="true"
814
+ width={28}
815
+ height={16}
816
+ className="block h-4 w-7 shrink-0 object-contain object-center dark:hidden"
817
+ />
818
+ <img
819
+ src={appPath("/agent-native-icon-dark.svg")}
820
+ alt=""
821
+ aria-hidden="true"
822
+ width={28}
823
+ height={16}
824
+ className="hidden h-4 w-7 shrink-0 object-contain object-center dark:block"
825
+ />
826
+ {!collapsed && (
827
+ <span className="text-base font-semibold tracking-tight">
828
+ {t("navigation.brand")}
829
+ </span>
830
+ )}
831
+ </Link>
803
832
  </div>
804
833
 
805
834
  <div className="min-h-0 flex-1 overflow-y-auto">
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-31
4
+ ---
5
+
6
+ The Agent Native logo stays visible when the sidebar is collapsed and toggles the sidebar when clicked.
@@ -358,23 +358,50 @@ export function Sidebar({
358
358
  >
359
359
  <Link
360
360
  to="/"
361
+ onClick={(event) => {
362
+ if (
363
+ !collapsible ||
364
+ !onCollapsedChange ||
365
+ event.metaKey ||
366
+ event.ctrlKey ||
367
+ event.shiftKey ||
368
+ event.altKey ||
369
+ event.button !== 0
370
+ ) {
371
+ return;
372
+ }
373
+ event.preventDefault();
374
+ onCollapsedChange(!collapsed);
375
+ }}
361
376
  className={cn(
362
377
  "flex min-w-0 items-center rounded outline-none focus-visible:ring-2 focus-visible:ring-ring",
363
378
  collapsed ? "size-7 justify-center" : "flex-1 gap-3",
364
379
  )}
365
- aria-label={collapsed ? APP_TITLE : undefined}
380
+ aria-label={
381
+ collapsible && onCollapsedChange
382
+ ? collapsed
383
+ ? t("navigation.expandSidebar")
384
+ : t("navigation.collapseSidebar")
385
+ : collapsed
386
+ ? APP_TITLE
387
+ : undefined
388
+ }
366
389
  >
367
390
  <img
368
391
  src={appPath("/agent-native-icon-light.svg")}
369
392
  alt=""
370
393
  aria-hidden="true"
371
- className="block h-4 w-auto shrink-0 dark:hidden"
394
+ width={28}
395
+ height={16}
396
+ className="block h-4 w-7 shrink-0 object-contain object-center dark:hidden"
372
397
  />
373
398
  <img
374
399
  src={appPath("/agent-native-icon-dark.svg")}
375
400
  alt=""
376
401
  aria-hidden="true"
377
- className="hidden h-4 w-auto shrink-0 dark:block"
402
+ width={28}
403
+ height={16}
404
+ className="hidden h-4 w-7 shrink-0 object-contain object-center dark:block"
378
405
  />
379
406
  <div className={cn("min-w-0", collapsed && "sr-only")}>
380
407
  <p className="truncate text-sm font-semibold text-sidebar-accent-foreground">
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-31
4
+ ---
5
+
6
+ Clicking the Agent Native logo now toggles the app sidebar.
@@ -336,32 +336,48 @@ export function LibraryLayout({ children }: LibraryLayoutProps) {
336
336
  showCollapsedSidebar ? "justify-center px-2" : "px-4",
337
337
  )}
338
338
  >
339
- <div
339
+ <button
340
+ type="button"
341
+ onClick={() => {
342
+ if (!isMobile) setSidebarCollapsed((value) => !value);
343
+ }}
344
+ aria-label={
345
+ isMobile
346
+ ? t("navigation.brand")
347
+ : showCollapsedSidebar
348
+ ? t("navigation.expandSidebar")
349
+ : t("navigation.collapseSidebar")
350
+ }
340
351
  className={cn(
341
- "flex min-w-0 items-center gap-2",
342
- !showCollapsedSidebar && "flex-1",
352
+ "flex min-w-0 items-center gap-2 rounded outline-none focus-visible:ring-2 focus-visible:ring-ring",
353
+ showCollapsedSidebar
354
+ ? "size-8 justify-center"
355
+ : "flex-1 text-start",
343
356
  )}
357
+ data-sidebar-brand-toggle
344
358
  >
359
+ <img
360
+ src={appPath("/agent-native-icon-light.svg")}
361
+ alt=""
362
+ aria-hidden="true"
363
+ width={28}
364
+ height={16}
365
+ className="block h-4 w-7 shrink-0 object-contain object-center dark:hidden"
366
+ />
367
+ <img
368
+ src={appPath("/agent-native-icon-dark.svg")}
369
+ alt=""
370
+ aria-hidden="true"
371
+ width={28}
372
+ height={16}
373
+ className="hidden h-4 w-7 shrink-0 object-contain object-center dark:block"
374
+ />
345
375
  {!showCollapsedSidebar && (
346
- <>
347
- <img
348
- src={appPath("/agent-native-icon-light.svg")}
349
- alt=""
350
- aria-hidden="true"
351
- className="block h-4 w-auto shrink-0 dark:hidden"
352
- />
353
- <img
354
- src={appPath("/agent-native-icon-dark.svg")}
355
- alt=""
356
- aria-hidden="true"
357
- className="hidden h-4 w-auto shrink-0 dark:block"
358
- />
359
- <span className="truncate text-sm font-semibold text-foreground">
360
- {t("navigation.brand")}
361
- </span>
362
- </>
376
+ <span className="truncate text-sm font-semibold text-foreground">
377
+ {t("navigation.brand")}
378
+ </span>
363
379
  )}
364
- </div>
380
+ </button>
365
381
  </div>
366
382
  <div className="min-h-0 flex-1 overflow-y-auto">
367
383
  {showCollapsedSidebar ? (