@agent-native/core 0.95.0 → 0.96.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 (316) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +35 -0
  3. package/corpus/core/docs/content/locales/ar-SA/template-design.mdx +13 -0
  4. package/corpus/core/docs/content/locales/de-DE/template-design.mdx +18 -0
  5. package/corpus/core/docs/content/locales/es-ES/template-design.mdx +16 -0
  6. package/corpus/core/docs/content/locales/fr-FR/template-design.mdx +17 -0
  7. package/corpus/core/docs/content/locales/hi-IN/template-design.mdx +16 -0
  8. package/corpus/core/docs/content/locales/ja-JP/template-design.mdx +17 -0
  9. package/corpus/core/docs/content/locales/ko-KR/template-design.mdx +15 -0
  10. package/corpus/core/docs/content/locales/pt-BR/template-design.mdx +16 -0
  11. package/corpus/core/docs/content/locales/zh-CN/template-design.mdx +11 -0
  12. package/corpus/core/docs/content/locales/zh-TW/template-design.mdx +12 -0
  13. package/corpus/core/docs/content/template-design.mdx +16 -0
  14. package/corpus/core/package.json +4 -2
  15. package/corpus/core/src/a2a/client.ts +11 -1
  16. package/corpus/core/src/agent/production-agent.ts +107 -27
  17. package/corpus/core/src/agent/thread-data-builder.ts +48 -22
  18. package/corpus/core/src/chat-threads/store.ts +20 -1
  19. package/corpus/core/src/cli/code-agent-executor.ts +1 -0
  20. package/corpus/core/src/cli/code-agent-runs.ts +14 -0
  21. package/corpus/core/src/client/AgentPanel.tsx +32 -25
  22. package/corpus/core/src/client/AssistantChat.tsx +286 -45
  23. package/corpus/core/src/client/MultiTabAssistantChat.tsx +141 -90
  24. package/corpus/core/src/client/chat/ChatHistoryList.tsx +404 -0
  25. package/corpus/core/src/client/chat/index.ts +6 -0
  26. package/corpus/core/src/client/chat/tool-call-display.tsx +38 -4
  27. package/corpus/core/src/client/chat/use-reconnect-reader-owner.ts +28 -0
  28. package/corpus/core/src/client/code-agent-chat-adapter.ts +72 -4
  29. package/corpus/core/src/client/composer/RealtimeVoiceMode.tsx +52 -11
  30. package/corpus/core/src/client/composer/TiptapComposer.tsx +157 -20
  31. package/corpus/core/src/client/composer/VoiceButton.tsx +28 -0
  32. package/corpus/core/src/client/composer/useRealtimeVoiceMode.tsx +5 -0
  33. package/corpus/core/src/client/conversation/code-agent-transcript.ts +4 -5
  34. package/corpus/core/src/client/guided-questions.tsx +11 -2
  35. package/corpus/core/src/client/index.ts +11 -0
  36. package/corpus/core/src/client/integrations/IntegrationsPanel.tsx +6 -7
  37. package/corpus/core/src/client/sse-event-processor.ts +90 -21
  38. package/corpus/core/src/client/use-chat-threads.ts +10 -1
  39. package/corpus/core/src/client/voice-provider-status.ts +44 -0
  40. package/corpus/core/src/code-agents/transcript-normalizer.ts +76 -0
  41. package/corpus/core/src/connections/catalog.ts +2 -2
  42. package/corpus/core/src/deploy/build.ts +12 -8
  43. package/corpus/core/src/integrations/a2a-continuation-processor.ts +35 -5
  44. package/corpus/core/src/integrations/adapters/slack.ts +74 -21
  45. package/corpus/core/src/integrations/catalog.ts +2 -2
  46. package/corpus/core/src/integrations/webhook-handler.ts +14 -0
  47. package/corpus/core/src/localization/default-messages.ts +6 -0
  48. package/corpus/core/src/observability/hosted-model-experiment.ts +118 -0
  49. package/corpus/core/src/observability/routes.ts +17 -0
  50. package/corpus/core/src/observability/store.ts +4 -1
  51. package/corpus/core/src/observability/traces.ts +41 -2
  52. package/corpus/core/src/scripts/agent-engines/list-agent-engines.ts +19 -1
  53. package/corpus/core/src/scripts/call-agent.ts +53 -3
  54. package/corpus/core/src/scripts/chat/search-chats.ts +11 -8
  55. package/corpus/core/src/secrets/register-framework-secrets.ts +1 -1
  56. package/corpus/core/src/server/agent-chat-plugin.ts +41 -6
  57. package/corpus/core/src/server/auth.ts +1 -1
  58. package/corpus/core/src/server/core-routes-plugin.ts +15 -0
  59. package/corpus/core/src/server/credential-provider.ts +7 -3
  60. package/corpus/core/src/server/realtime-voice.ts +71 -24
  61. package/corpus/core/src/server/voice-providers-status.ts +4 -3
  62. package/corpus/core/src/shared/cache-control.ts +4 -4
  63. package/corpus/core/src/styles/agent-native.css +1 -0
  64. package/corpus/core/src/styles/chat-history-list.css +313 -0
  65. package/corpus/core/src/templates/workspace-core/.agents/skills/observability/SKILL.md +20 -0
  66. package/corpus/core/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +8 -4
  67. package/corpus/core/src/vite/client.ts +1 -0
  68. package/corpus/templates/analytics/AGENTS.md +7 -0
  69. package/corpus/templates/analytics/actions/bigquery.ts +26 -2
  70. package/corpus/templates/analytics/actions/data-source-status.ts +18 -0
  71. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +5 -4
  72. package/corpus/templates/analytics/app/global.css +10 -0
  73. package/corpus/templates/analytics/app/lib/data-sources.ts +5 -4
  74. package/corpus/templates/analytics/app/pages/Ask.tsx +25 -2
  75. package/corpus/templates/analytics/changelog/2026-07-10-analytics-answers-simple-time-bounded-metrics-without-unnece.md +6 -0
  76. package/corpus/templates/analytics/changelog/2026-07-10-analytics-chat-reliably-uses-connected-data-sources-across-s.md +6 -0
  77. package/corpus/templates/analytics/changelog/2026-07-10-chat-threads-now-stay-clear-of-top-actions-and-fade-smoothly.md +6 -0
  78. package/corpus/templates/analytics/changelog/2026-07-10-context-chips-can-now-be-selected-and-removed-one-at-a-time-.md +6 -0
  79. package/corpus/templates/analytics/changelog/2026-07-10-slack-token-setup-marked-legacy.md +6 -0
  80. package/corpus/templates/analytics/changelog/2026-07-10-the-ask-composer-no-longer-carries-dashboard-or-panel-contex.md +6 -0
  81. package/corpus/templates/analytics/changelog/2026-07-10-the-ask-section-stays-highlighted-while-its-chat-history-is-.md +6 -0
  82. package/corpus/templates/analytics/server/lib/bigquery.ts +90 -14
  83. package/corpus/templates/analytics/server/lib/credential-keys.ts +6 -2
  84. package/corpus/templates/analytics/server/plugins/agent-chat.ts +82 -7
  85. package/corpus/templates/brain/changelog/2026-07-10-slack-backfill-token-marked-legacy.md +6 -0
  86. package/corpus/templates/brain/server/register-secrets.ts +2 -2
  87. package/corpus/templates/clips/app/components/library/library-layout.tsx +7 -1
  88. package/corpus/templates/clips/app/components/library/page-header.tsx +19 -3
  89. package/corpus/templates/clips/app/routes/_app.library._index.tsx +16 -12
  90. package/corpus/templates/clips/changelog/2026-07-10-new-recording-appears-once-when-the-library-sidebar-is-open.md +6 -0
  91. package/corpus/templates/clips/changelog/2026-07-10-slack-token-fallback-guidance.md +6 -0
  92. package/corpus/templates/clips/server/register-secrets.ts +1 -1
  93. package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +0 -66
  94. package/corpus/templates/content/app/routes/_app.local-files.tsx +7 -47
  95. package/corpus/templates/content/changelog/2026-07-10-local-folders-now-wait-for-an-explicit-pull-before-content-r.md +6 -0
  96. package/corpus/templates/content/package.json +1 -1
  97. package/corpus/templates/design/actions/generate-design.ts +128 -31
  98. package/corpus/templates/design/actions/present-design-variants.ts +37 -9
  99. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +9 -3
  100. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +32 -10
  101. package/corpus/templates/design/app/components/design/QuestionFlow.tsx +2 -2
  102. package/corpus/templates/design/app/components/design/TweaksPanel.tsx +9 -1
  103. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +7 -5
  104. package/corpus/templates/design/app/components/design/multi-screen/types.ts +3 -0
  105. package/corpus/templates/design/app/global.css +10 -0
  106. package/corpus/templates/design/app/hooks/use-question-flow.ts +9 -2
  107. package/corpus/templates/design/app/i18n/zh-TW.ts +1 -0
  108. package/corpus/templates/design/app/i18n-data.ts +21 -11
  109. package/corpus/templates/design/changelog/2026-07-10-editor-panels-are-easier-to-distinguish-and-design-intake-qu.md +6 -0
  110. package/corpus/templates/design/changelog/2026-07-10-interact-mode-now-stays-on-the-full-canvas-matches-edit-visu.md +6 -0
  111. package/corpus/templates/design/changelog/2026-07-10-new-web-designs-open-at-desktop-size-and-adapt-across-mobile.md +6 -0
  112. package/corpus/templates/design/changelog/2026-07-10-tweaks-now-link-to-full-documentation.md +6 -0
  113. package/corpus/templates/design/server/plugins/agent-chat.ts +2 -0
  114. package/corpus/templates/mail/app/i18n/ar-SA.ts +3 -3
  115. package/corpus/templates/mail/app/i18n/de-DE.ts +3 -3
  116. package/corpus/templates/mail/app/i18n/en-US.ts +4 -3
  117. package/corpus/templates/mail/app/i18n/es-ES.ts +3 -3
  118. package/corpus/templates/mail/app/i18n/fr-FR.ts +3 -3
  119. package/corpus/templates/mail/app/i18n/hi-IN.ts +3 -3
  120. package/corpus/templates/mail/app/i18n/ja-JP.ts +3 -3
  121. package/corpus/templates/mail/app/i18n/ko-KR.ts +3 -3
  122. package/corpus/templates/mail/app/i18n/pt-BR.ts +3 -3
  123. package/corpus/templates/mail/app/i18n/zh-CN.ts +3 -3
  124. package/corpus/templates/mail/app/i18n/zh-TW.ts +3 -3
  125. package/corpus/templates/mail/changelog/2026-07-10-slack-intake-marked-legacy.md +6 -0
  126. package/corpus/templates/mail/server/lib/env-config.ts +5 -4
  127. package/corpus/templates/plan/package.json +1 -1
  128. package/dist/a2a/client.d.ts +7 -0
  129. package/dist/a2a/client.d.ts.map +1 -1
  130. package/dist/a2a/client.js +2 -1
  131. package/dist/a2a/client.js.map +1 -1
  132. package/dist/agent/production-agent.d.ts +6 -0
  133. package/dist/agent/production-agent.d.ts.map +1 -1
  134. package/dist/agent/production-agent.js +83 -26
  135. package/dist/agent/production-agent.js.map +1 -1
  136. package/dist/agent/thread-data-builder.d.ts +1 -0
  137. package/dist/agent/thread-data-builder.d.ts.map +1 -1
  138. package/dist/agent/thread-data-builder.js +42 -23
  139. package/dist/agent/thread-data-builder.js.map +1 -1
  140. package/dist/chat-threads/store.d.ts +10 -0
  141. package/dist/chat-threads/store.d.ts.map +1 -1
  142. package/dist/chat-threads/store.js +6 -0
  143. package/dist/chat-threads/store.js.map +1 -1
  144. package/dist/cli/code-agent-executor.d.ts.map +1 -1
  145. package/dist/cli/code-agent-executor.js +1 -0
  146. package/dist/cli/code-agent-executor.js.map +1 -1
  147. package/dist/cli/code-agent-runs.d.ts +12 -0
  148. package/dist/cli/code-agent-runs.d.ts.map +1 -1
  149. package/dist/cli/code-agent-runs.js +1 -0
  150. package/dist/cli/code-agent-runs.js.map +1 -1
  151. package/dist/client/AgentPanel.d.ts.map +1 -1
  152. package/dist/client/AgentPanel.js +3 -3
  153. package/dist/client/AgentPanel.js.map +1 -1
  154. package/dist/client/AssistantChat.d.ts +14 -1
  155. package/dist/client/AssistantChat.d.ts.map +1 -1
  156. package/dist/client/AssistantChat.js +207 -32
  157. package/dist/client/AssistantChat.js.map +1 -1
  158. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  159. package/dist/client/MultiTabAssistantChat.js +83 -10
  160. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  161. package/dist/client/chat/ChatHistoryList.d.ts +88 -0
  162. package/dist/client/chat/ChatHistoryList.d.ts.map +1 -0
  163. package/dist/client/chat/ChatHistoryList.js +83 -0
  164. package/dist/client/chat/ChatHistoryList.js.map +1 -0
  165. package/dist/client/chat/index.d.ts +1 -0
  166. package/dist/client/chat/index.d.ts.map +1 -1
  167. package/dist/client/chat/index.js +1 -0
  168. package/dist/client/chat/index.js.map +1 -1
  169. package/dist/client/chat/tool-call-display.d.ts +13 -1
  170. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  171. package/dist/client/chat/tool-call-display.js +11 -3
  172. package/dist/client/chat/tool-call-display.js.map +1 -1
  173. package/dist/client/chat/use-reconnect-reader-owner.d.ts +11 -0
  174. package/dist/client/chat/use-reconnect-reader-owner.d.ts.map +1 -0
  175. package/dist/client/chat/use-reconnect-reader-owner.js +21 -0
  176. package/dist/client/chat/use-reconnect-reader-owner.js.map +1 -0
  177. package/dist/client/code-agent-chat-adapter.d.ts +17 -1
  178. package/dist/client/code-agent-chat-adapter.d.ts.map +1 -1
  179. package/dist/client/code-agent-chat-adapter.js +47 -3
  180. package/dist/client/code-agent-chat-adapter.js.map +1 -1
  181. package/dist/client/composer/RealtimeVoiceMode.d.ts +11 -1
  182. package/dist/client/composer/RealtimeVoiceMode.d.ts.map +1 -1
  183. package/dist/client/composer/RealtimeVoiceMode.js +5 -3
  184. package/dist/client/composer/RealtimeVoiceMode.js.map +1 -1
  185. package/dist/client/composer/TiptapComposer.d.ts +25 -2
  186. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  187. package/dist/client/composer/TiptapComposer.js +96 -5
  188. package/dist/client/composer/TiptapComposer.js.map +1 -1
  189. package/dist/client/composer/VoiceButton.d.ts.map +1 -1
  190. package/dist/client/composer/VoiceButton.js +21 -1
  191. package/dist/client/composer/VoiceButton.js.map +1 -1
  192. package/dist/client/composer/useRealtimeVoiceMode.d.ts.map +1 -1
  193. package/dist/client/composer/useRealtimeVoiceMode.js +5 -0
  194. package/dist/client/composer/useRealtimeVoiceMode.js.map +1 -1
  195. package/dist/client/conversation/code-agent-transcript.d.ts +2 -0
  196. package/dist/client/conversation/code-agent-transcript.d.ts.map +1 -1
  197. package/dist/client/conversation/code-agent-transcript.js +3 -5
  198. package/dist/client/conversation/code-agent-transcript.js.map +1 -1
  199. package/dist/client/guided-questions.d.ts.map +1 -1
  200. package/dist/client/guided-questions.js +7 -2
  201. package/dist/client/guided-questions.js.map +1 -1
  202. package/dist/client/index.d.ts +3 -1
  203. package/dist/client/index.d.ts.map +1 -1
  204. package/dist/client/index.js +3 -1
  205. package/dist/client/index.js.map +1 -1
  206. package/dist/client/integrations/IntegrationsPanel.d.ts.map +1 -1
  207. package/dist/client/integrations/IntegrationsPanel.js +5 -7
  208. package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
  209. package/dist/client/sse-event-processor.d.ts.map +1 -1
  210. package/dist/client/sse-event-processor.js +67 -20
  211. package/dist/client/sse-event-processor.js.map +1 -1
  212. package/dist/client/use-chat-threads.d.ts.map +1 -1
  213. package/dist/client/use-chat-threads.js +9 -1
  214. package/dist/client/use-chat-threads.js.map +1 -1
  215. package/dist/client/voice-provider-status.d.ts +10 -0
  216. package/dist/client/voice-provider-status.d.ts.map +1 -0
  217. package/dist/client/voice-provider-status.js +32 -0
  218. package/dist/client/voice-provider-status.js.map +1 -0
  219. package/dist/code-agents/transcript-normalizer.d.ts +29 -0
  220. package/dist/code-agents/transcript-normalizer.d.ts.map +1 -1
  221. package/dist/code-agents/transcript-normalizer.js +55 -0
  222. package/dist/code-agents/transcript-normalizer.js.map +1 -1
  223. package/dist/collab/struct-routes.d.ts +1 -1
  224. package/dist/connections/catalog.d.ts +2 -2
  225. package/dist/connections/catalog.js +2 -2
  226. package/dist/connections/catalog.js.map +1 -1
  227. package/dist/deploy/build.d.ts.map +1 -1
  228. package/dist/deploy/build.js +12 -8
  229. package/dist/deploy/build.js.map +1 -1
  230. package/dist/integrations/a2a-continuation-processor.d.ts.map +1 -1
  231. package/dist/integrations/a2a-continuation-processor.js +25 -5
  232. package/dist/integrations/a2a-continuation-processor.js.map +1 -1
  233. package/dist/integrations/adapters/slack.d.ts.map +1 -1
  234. package/dist/integrations/adapters/slack.js +55 -21
  235. package/dist/integrations/adapters/slack.js.map +1 -1
  236. package/dist/integrations/catalog.js +2 -2
  237. package/dist/integrations/catalog.js.map +1 -1
  238. package/dist/integrations/webhook-handler.d.ts.map +1 -1
  239. package/dist/integrations/webhook-handler.js +11 -0
  240. package/dist/integrations/webhook-handler.js.map +1 -1
  241. package/dist/localization/default-messages.d.ts +5 -0
  242. package/dist/localization/default-messages.d.ts.map +1 -1
  243. package/dist/localization/default-messages.js +5 -0
  244. package/dist/localization/default-messages.js.map +1 -1
  245. package/dist/observability/hosted-model-experiment.d.ts +39 -0
  246. package/dist/observability/hosted-model-experiment.d.ts.map +1 -0
  247. package/dist/observability/hosted-model-experiment.js +90 -0
  248. package/dist/observability/hosted-model-experiment.js.map +1 -0
  249. package/dist/observability/routes.d.ts.map +1 -1
  250. package/dist/observability/routes.js +16 -0
  251. package/dist/observability/routes.js.map +1 -1
  252. package/dist/observability/store.d.ts.map +1 -1
  253. package/dist/observability/store.js +4 -1
  254. package/dist/observability/store.js.map +1 -1
  255. package/dist/observability/traces.d.ts +6 -0
  256. package/dist/observability/traces.d.ts.map +1 -1
  257. package/dist/observability/traces.js +28 -2
  258. package/dist/observability/traces.js.map +1 -1
  259. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  260. package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
  261. package/dist/scripts/agent-engines/list-agent-engines.js +19 -1
  262. package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
  263. package/dist/scripts/call-agent.d.ts.map +1 -1
  264. package/dist/scripts/call-agent.js +43 -3
  265. package/dist/scripts/call-agent.js.map +1 -1
  266. package/dist/scripts/chat/search-chats.d.ts +1 -1
  267. package/dist/scripts/chat/search-chats.d.ts.map +1 -1
  268. package/dist/scripts/chat/search-chats.js +11 -8
  269. package/dist/scripts/chat/search-chats.js.map +1 -1
  270. package/dist/secrets/register-framework-secrets.js +1 -1
  271. package/dist/secrets/register-framework-secrets.js.map +1 -1
  272. package/dist/server/agent-chat-plugin.d.ts +11 -0
  273. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  274. package/dist/server/agent-chat-plugin.js +27 -6
  275. package/dist/server/agent-chat-plugin.js.map +1 -1
  276. package/dist/server/auth.js +1 -1
  277. package/dist/server/auth.js.map +1 -1
  278. package/dist/server/core-routes-plugin.d.ts +3 -0
  279. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  280. package/dist/server/core-routes-plugin.js +13 -0
  281. package/dist/server/core-routes-plugin.js.map +1 -1
  282. package/dist/server/credential-provider.d.ts +5 -3
  283. package/dist/server/credential-provider.d.ts.map +1 -1
  284. package/dist/server/credential-provider.js +7 -3
  285. package/dist/server/credential-provider.js.map +1 -1
  286. package/dist/server/realtime-voice.d.ts.map +1 -1
  287. package/dist/server/realtime-voice.js +55 -21
  288. package/dist/server/realtime-voice.js.map +1 -1
  289. package/dist/server/voice-providers-status.d.ts.map +1 -1
  290. package/dist/server/voice-providers-status.js +2 -3
  291. package/dist/server/voice-providers-status.js.map +1 -1
  292. package/dist/shared/cache-control.d.ts +6 -6
  293. package/dist/shared/cache-control.d.ts.map +1 -1
  294. package/dist/shared/cache-control.js +3 -3
  295. package/dist/shared/cache-control.js.map +1 -1
  296. package/dist/styles/agent-native.css +1 -0
  297. package/dist/styles/chat-history-list.css +313 -0
  298. package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +20 -0
  299. package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +8 -4
  300. package/dist/vite/client.d.ts.map +1 -1
  301. package/dist/vite/client.js +1 -0
  302. package/dist/vite/client.js.map +1 -1
  303. package/docs/content/locales/ar-SA/template-design.mdx +13 -0
  304. package/docs/content/locales/de-DE/template-design.mdx +18 -0
  305. package/docs/content/locales/es-ES/template-design.mdx +16 -0
  306. package/docs/content/locales/fr-FR/template-design.mdx +17 -0
  307. package/docs/content/locales/hi-IN/template-design.mdx +16 -0
  308. package/docs/content/locales/ja-JP/template-design.mdx +17 -0
  309. package/docs/content/locales/ko-KR/template-design.mdx +15 -0
  310. package/docs/content/locales/pt-BR/template-design.mdx +16 -0
  311. package/docs/content/locales/zh-CN/template-design.mdx +11 -0
  312. package/docs/content/locales/zh-TW/template-design.mdx +12 -0
  313. package/docs/content/template-design.mdx +16 -0
  314. package/package.json +4 -2
  315. package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +20 -0
  316. package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +8 -4
@@ -77,7 +77,15 @@ export function TweaksPanelContent({
77
77
  data-tweaks-help
78
78
  className="mt-2 border-t border-border/60 pt-2 !text-[10px] leading-relaxed text-muted-foreground/70"
79
79
  >
80
- {t("designEditor.tweaksHelp")}
80
+ {t("designEditor.tweaksHelp")}{" "}
81
+ <a
82
+ href="/docs/template-design#tweaks"
83
+ target="_blank"
84
+ rel="noreferrer"
85
+ className="font-medium text-foreground/80 underline-offset-2 hover:text-foreground hover:underline"
86
+ >
87
+ {t("designEditor.tweaksDocs")}
88
+ </a>
81
89
  </p>
82
90
  </div>
83
91
  );
@@ -910,10 +910,12 @@ declare var __RUNTIME_LAYER_SNAPSHOT_ENABLED__: boolean;
910
910
 
911
911
  function selectionTargetForHit(hit: Element | null): Element | null {
912
912
  if (!hit || isDocumentRootElement(hit)) return hit;
913
- if (selectedEl && hit !== selectedEl && selectedEl.contains(hit))
914
- return hit;
915
- if (hasStableOwnSource(hit)) return hit;
916
- return closestStableSourceElement(hit) || hit;
913
+ // Select the deepest element under the pointer on the first click. The
914
+ // bridge can mint a pending node id and build a source-equivalent selector
915
+ // for id-less descendants, so climbing to the nearest tagged ancestor is
916
+ // no longer necessary and makes ordinary list labels select their parent
917
+ // container instead.
918
+ return hit;
917
919
  }
918
920
 
919
921
  function freshRuntimeNodeId(prefix: string): string {
@@ -1929,7 +1931,7 @@ declare var __RUNTIME_LAYER_SNAPSHOT_ENABLED__: boolean;
1929
1931
  var transformBadge = document.createElement("div");
1930
1932
  transformBadge.setAttribute("data-agent-native-transform-badge", "");
1931
1933
  transformBadge.style.cssText =
1932
- "position:fixed;z-index:100000;display:none;pointer-events:none;border:1px solid hsl(var(--border));border-radius:4px;background:hsl(var(--background) / 0.96);color:hsl(var(--foreground));font:11px/1.4 ui-monospace,SFMono-Regular,Menlo,monospace;padding:3px 5px;box-shadow:0 8px 20px color-mix(in srgb, hsl(var(--foreground)) 16%, transparent);";
1934
+ "position:fixed;z-index:100000;display:none;pointer-events:none;border:1px solid rgba(255,255,255,0.16);border-radius:4px;background:rgba(24,24,27,0.96);color:rgba(255,255,255,0.96);font:11px/1.4 ui-monospace,SFMono-Regular,Menlo,monospace;padding:3px 5px;box-shadow:0 8px 20px rgba(0,0,0,0.28);";
1933
1935
  document.body.appendChild(transformBadge);
1934
1936
 
1935
1937
  var spacingBadge = document.createElement("div");
@@ -130,6 +130,9 @@ export interface MultiScreenCanvasProps {
130
130
  * transformed directly from the overview canvas. */
131
131
  lockedScreenIds?: ReadonlySet<string> | readonly string[];
132
132
  fullViewScreenIds?: string[];
133
+ /** Lets every live frame receive native pointer interaction while the
134
+ * overview camera and frame chrome remain available. */
135
+ interactMode?: boolean;
133
136
  activeScreenHasHoveredChild?: boolean;
134
137
  hoveredChildScreenId?: string | null;
135
138
  directlyHoveredScreenId?: string | null;
@@ -84,6 +84,11 @@
84
84
  --design-editor-panel-raised-bg: hsl(var(--secondary));
85
85
  --design-editor-control-bg: hsl(var(--muted));
86
86
  --design-editor-control-border: hsl(var(--border));
87
+ --design-editor-question-option-bg: color-mix(
88
+ in srgb,
89
+ var(--design-editor-control-bg) 58%,
90
+ transparent
91
+ );
87
92
  --design-editor-canvas-bg: hsl(0 0% 92%);
88
93
  --design-editor-skeleton-canvas-bg: hsl(0 0% 92%);
89
94
  --design-editor-skeleton-panel-ghost-bg: color-mix(
@@ -162,6 +167,11 @@
162
167
  --design-editor-panel-raised-bg: hsl(0 0% 18%);
163
168
  --design-editor-control-bg: hsl(0 0% 18%);
164
169
  --design-editor-control-border: hsl(0 0% 24%);
170
+ --design-editor-question-option-bg: color-mix(
171
+ in srgb,
172
+ var(--design-editor-control-bg) 58%,
173
+ transparent
174
+ );
165
175
  --design-editor-canvas-bg: hsl(0 0% 10%);
166
176
  --design-editor-skeleton-canvas-bg: hsl(0 0% 11%);
167
177
  }
@@ -16,6 +16,9 @@ function designQuestionsStateKey(designId: string | undefined): string {
16
16
  return designId ? `show-questions:${designId}` : "show-questions";
17
17
  }
18
18
 
19
+ const RESPONSIVE_GENERATION_REQUIREMENTS =
20
+ 'Responsive behavior is mandatory for every web design. Read the form-factor answer above: for Desktop or Both/responsive, call generate-design with `primaryViewport: "desktop"` and a 1440x1024 canvas frame; use `primaryViewport: "mobile"` only for an explicitly mobile-primary choice. Use mobile-first responsive CSS, then take desktop and mobile screenshots and fix any overflow before reporting the design complete.';
21
+
19
22
  /**
20
23
  * Polls design-scoped question state. When the agent writes structured
21
24
  * questions, the editor surfaces a full-canvas overlay for only this design.
@@ -40,6 +43,8 @@ export function useQuestionFlow(
40
43
  "Answers:",
41
44
  formattedAnswers,
42
45
  "",
46
+ RESPONSIVE_GENERATION_REQUIREMENTS,
47
+ "",
43
48
  designId
44
49
  ? 'Now continue the design. Honor any answer about variations: if the user asked to explore options, call present-design-variants with 2-5 concise directions using label, description, accentColor, and feature bullets; omit large content HTML when needed because the action can render compact representative screens - wait for their chat pick, delete each unchosen variant screen at most once, call get-design-snapshot exactly once with fileId for the kept screen, then call edit-design exactly once on that same fileId in a bounded pass. Use mode "replace-file" when expanding the representative placeholder into a complete but compact product UI in the chosen direction. Prioritize the primary workflow and render secondary details as visible controls, states, or affordances if the feature list is too large for one reliable edit. Do not repeat delete/snapshot cycles. Do not call generate-design after a variant pick. Stop after the first successful edit-design save. Otherwise call generate-design with one complete, renderable index.html first. Do not ask another question unless a required decision is still genuinely missing.'
45
50
  : "Now continue the design. Honor any answer about variations: use variants only if requested; otherwise generate one polished direction.",
@@ -89,6 +94,8 @@ export function useQuestionFlow(
89
94
  "Answers:",
90
95
  formattedAnswers,
91
96
  "",
97
+ RESPONSIVE_GENERATION_REQUIREMENTS,
98
+ "",
92
99
  designId
93
100
  ? 'Now continue the design. Honor any answer about variations: if the user asked to explore options, call present-design-variants with 2-5 concise directions using label, description, accentColor, and feature bullets; omit large content HTML when needed because the action can render compact representative screens - wait for their chat pick, delete each unchosen variant screen at most once, call get-design-snapshot exactly once with fileId for the kept screen, then call edit-design exactly once on that same fileId in a bounded pass. Use mode "replace-file" when expanding the representative placeholder into a complete but compact product UI in the chosen direction. Prioritize the primary workflow and render secondary details as visible controls, states, or affordances if the feature list is too large for one reliable edit. Do not repeat delete/snapshot cycles. Do not call generate-design after a variant pick. Stop after the first successful edit-design save. Otherwise call generate-design with one complete, renderable index.html first. Do not ask another question unless a required decision is still genuinely missing.'
94
101
  : "Now continue the design. Honor any answer about variations: use variants only if requested; otherwise generate one polished direction.",
@@ -105,8 +112,8 @@ export function useQuestionFlow(
105
112
  sendContinuation(
106
113
  "Skip the questions — decide for me.",
107
114
  designId
108
- ? `The user skipped the pre-generation questions for design ${designId}. Proceed with reasonable defaults. Generate one polished first direction unless the original prompt explicitly requested options.`
109
- : "The user skipped the pre-generation questions. Proceed with reasonable defaults. Generate one polished first direction unless the original prompt explicitly requested options.",
115
+ ? `The user skipped the pre-generation questions for design ${designId}. Proceed with reasonable defaults. ${RESPONSIVE_GENERATION_REQUIREMENTS} Generate one polished first direction unless the original prompt explicitly requested options.`
116
+ : `The user skipped the pre-generation questions. Proceed with reasonable defaults. ${RESPONSIVE_GENERATION_REQUIREMENTS} Generate one polished first direction unless the original prompt explicitly requested options.`,
110
117
  );
111
118
  }, [designId, sendContinuation]);
112
119
 
@@ -699,6 +699,7 @@ const messages = {
699
699
  closeTweaks: "關閉調整",
700
700
  tweaksHelp:
701
701
  "調整項是疊加在基礎設計上的中斷點與狀態專屬視覺覆寫。重設控制項可回到繼承值。",
702
+ tweaksDocs: "深入瞭解。",
702
703
  noTweakControls: "還沒有調整控制項。",
703
704
  extensions: "擴充功能",
704
705
  addExtension: "擴充功能",
@@ -846,6 +846,7 @@ const enUS = {
846
846
  closeTweaks: "Close tweaks",
847
847
  tweaksHelp:
848
848
  "Tweaks are breakpoint- and state-specific visual overrides layered on the base design. Reset a control to return to the inherited value.",
849
+ tweaksDocs: "Learn more.",
849
850
  noTweakControls: "No tweak controls yet.",
850
851
  extensions: "Extensions",
851
852
  addExtension: "Extension",
@@ -1041,7 +1042,7 @@ const enUS = {
1041
1042
  multiScreenCanvas: {
1042
1043
  duplicate: "Duplicate",
1043
1044
  fork: "Fork",
1044
- fullView: "Interact",
1045
+ fullView: "Full view",
1045
1046
  preview: "Preview",
1046
1047
  openAndDuplicate: "Select {{display}}. Use Interact for focused scrolling.",
1047
1048
  openAndPreview: "Select {{display}}. Use Interact for focused scrolling.",
@@ -5339,6 +5340,7 @@ const designRawLiteralOverrides = {
5339
5340
  addTweaks: "添加调整",
5340
5341
  addTweakControls: "添加调整控件",
5341
5342
  closeTweaks: "关闭调整",
5343
+ tweaksDocs: "了解详情。",
5342
5344
  noTweakControls: "还没有调整控件。",
5343
5345
  extensions: "扩展",
5344
5346
  addExtension: "扩展",
@@ -5494,6 +5496,7 @@ const designRawLiteralOverrides = {
5494
5496
  addTweaks: "Agregar ajustes",
5495
5497
  addTweakControls: "Agregar controles de ajuste",
5496
5498
  closeTweaks: "Cerrar ajustes",
5499
+ tweaksDocs: "Más información.",
5497
5500
  noTweakControls: "Aún no hay controles de ajuste.",
5498
5501
  extensions: "Extensiones",
5499
5502
  addExtension: "Extensión",
@@ -5654,6 +5657,7 @@ const designRawLiteralOverrides = {
5654
5657
  addTweaks: "Ajouter des ajustements",
5655
5658
  addTweakControls: "Ajouter des contrôles de réglage",
5656
5659
  closeTweaks: "Fermer les réglages",
5660
+ tweaksDocs: "En savoir plus.",
5657
5661
  noTweakControls: "Pas encore de contrôles de réglage.",
5658
5662
  extensions: "Extensions",
5659
5663
  addExtension: "Extension",
@@ -5814,6 +5818,7 @@ const designRawLiteralOverrides = {
5814
5818
  addTweaks: "Fügen Sie Optimierungen hinzu",
5815
5819
  addTweakControls: "Fügen Sie Optimierungssteuerelemente hinzu",
5816
5820
  closeTweaks: "Enge Optimierungen",
5821
+ tweaksDocs: "Mehr erfahren.",
5817
5822
  noTweakControls: "Noch keine Optimierungssteuerung.",
5818
5823
  extensions: "Erweiterungen",
5819
5824
  addExtension: "Erweiterung",
@@ -5975,6 +5980,7 @@ const designRawLiteralOverrides = {
5975
5980
  addTweaks: "微調整を追加する",
5976
5981
  addTweakControls: "微調整コントロールを追加する",
5977
5982
  closeTweaks: "微調整を閉じる",
5983
+ tweaksDocs: "詳細を見る。",
5978
5984
  noTweakControls: "まだ調整コントロールはありません。",
5979
5985
  extensions: "拡張機能",
5980
5986
  addExtension: "拡張機能",
@@ -6131,6 +6137,7 @@ const designRawLiteralOverrides = {
6131
6137
  addTweaks: "조정 추가",
6132
6138
  addTweakControls: "조정 컨트롤 추가",
6133
6139
  closeTweaks: "조정 닫기",
6140
+ tweaksDocs: "자세히 알아보기.",
6134
6141
  noTweakControls: "아직 조정 컨트롤이 없습니다.",
6135
6142
  extensions: "확장",
6136
6143
  addExtension: "확장",
@@ -6286,6 +6293,7 @@ const designRawLiteralOverrides = {
6286
6293
  addTweaks: "Adicionar ajustes",
6287
6294
  addTweakControls: "Adicionar controles de ajuste",
6288
6295
  closeTweaks: "Fechar ajustes",
6296
+ tweaksDocs: "Saiba mais.",
6289
6297
  noTweakControls: "Nenhum controle de ajuste ainda.",
6290
6298
  extensions: "Extensões",
6291
6299
  addExtension: "Extensão",
@@ -6446,6 +6454,7 @@ const designRawLiteralOverrides = {
6446
6454
  addTweaks: "बदलाव जोड़ें",
6447
6455
  addTweakControls: "ट्विक नियंत्रण जोड़ें",
6448
6456
  closeTweaks: "बदलाव बंद करें",
6457
+ tweaksDocs: "और जानें।",
6449
6458
  noTweakControls: "अभी तक कोई ट्विक नियंत्रण नहीं है.",
6450
6459
  extensions: "एक्सटेंशन",
6451
6460
  addExtension: "एक्सटेंशन",
@@ -6601,6 +6610,7 @@ const designRawLiteralOverrides = {
6601
6610
  addTweaks: "أضف تعديلات",
6602
6611
  addTweakControls: "إضافة الضوابط القرص",
6603
6612
  closeTweaks: "إغلاق القرص",
6613
+ tweaksDocs: "معرفة المزيد.",
6604
6614
  noTweakControls: "لا توجد ضوابط قرص حتى الآن.",
6605
6615
  extensions: "الإضافات",
6606
6616
  addExtension: "إضافة",
@@ -7709,7 +7719,7 @@ const designModeFeatureOverrides = {
7709
7719
  multiScreenCanvas: {
7710
7720
  duplicate: "複製",
7711
7721
  fork: "分支",
7712
- fullView: "互動",
7722
+ fullView: "完整檢視",
7713
7723
  preview: "預覽",
7714
7724
  openAndDuplicate: "選取 {{display}}。使用互動模式進行聚焦捲動。",
7715
7725
  openAndPreview: "選取 {{display}}。使用互動模式進行聚焦捲動。",
@@ -7873,7 +7883,7 @@ const designModeFeatureOverrides = {
7873
7883
  multiScreenCanvas: {
7874
7884
  duplicate: "复制",
7875
7885
  fork: "分支",
7876
- fullView: "互动",
7886
+ fullView: "完整视图",
7877
7887
  preview: "预览",
7878
7888
  openAndDuplicate: "选择 {{display}}。使用互动模式进行聚焦滚动。",
7879
7889
  openAndPreview: "选择 {{display}}。使用互动模式进行聚焦滚动。",
@@ -8038,7 +8048,7 @@ const designModeFeatureOverrides = {
8038
8048
  multiScreenCanvas: {
8039
8049
  duplicate: "Duplicar",
8040
8050
  fork: "Bifurcar",
8041
- fullView: "Interactuar",
8051
+ fullView: "Vista completa",
8042
8052
  preview: "Vista previa",
8043
8053
  openAndDuplicate:
8044
8054
  "Selecciona {{display}}. Usa Interactuar para desplazamiento enfocado.",
@@ -8224,7 +8234,7 @@ const designModeFeatureOverrides = {
8224
8234
  multiScreenCanvas: {
8225
8235
  duplicate: "Dupliquer",
8226
8236
  fork: "Créer une branche",
8227
- fullView: "Interagir",
8237
+ fullView: "Vue complète",
8228
8238
  preview: "Aperçu",
8229
8239
  openAndDuplicate:
8230
8240
  "Sélectionner {{display}}. Utilisez Interagir pour le défilement ciblé.",
@@ -8407,7 +8417,7 @@ const designModeFeatureOverrides = {
8407
8417
  multiScreenCanvas: {
8408
8418
  duplicate: "Duplizieren",
8409
8419
  fork: "Abzweigen",
8410
- fullView: "Interagieren",
8420
+ fullView: "Vollansicht",
8411
8421
  preview: "Vorschau",
8412
8422
  openAndDuplicate:
8413
8423
  "{{display}} auswählen. Verwenden Sie Interagieren zum fokussierten Scrollen.",
@@ -8595,7 +8605,7 @@ const designModeFeatureOverrides = {
8595
8605
  multiScreenCanvas: {
8596
8606
  duplicate: "複製",
8597
8607
  fork: "分岐",
8598
- fullView: "操作",
8608
+ fullView: "全体表示",
8599
8609
  preview: "プレビュー",
8600
8610
  openAndDuplicate:
8601
8611
  "{{display}} を選択します。集中してスクロールするには操作モードを使用。",
@@ -8778,7 +8788,7 @@ const designModeFeatureOverrides = {
8778
8788
  multiScreenCanvas: {
8779
8789
  duplicate: "복제",
8780
8790
  fork: "분기",
8781
- fullView: "상호작용",
8791
+ fullView: "전체 보기",
8782
8792
  preview: "미리보기",
8783
8793
  openAndDuplicate:
8784
8794
  "{{display}} 선택. 집중 스크롤에는 상호작용 모드를 사용하세요.",
@@ -8958,7 +8968,7 @@ const designModeFeatureOverrides = {
8958
8968
  multiScreenCanvas: {
8959
8969
  duplicate: "Duplicar",
8960
8970
  fork: "Ramificar",
8961
- fullView: "Interagir",
8971
+ fullView: "Vista completa",
8962
8972
  preview: "Prévia",
8963
8973
  openAndDuplicate:
8964
8974
  "Selecione {{display}}. Use Interagir para rolagem focada.",
@@ -9138,7 +9148,7 @@ const designModeFeatureOverrides = {
9138
9148
  multiScreenCanvas: {
9139
9149
  duplicate: "डुप्लिकेट",
9140
9150
  fork: "फोर्क",
9141
- fullView: "इंटरैक्ट करें",
9151
+ fullView: "पूर्ण दृश्य",
9142
9152
  preview: "पूर्वावलोकन",
9143
9153
  openAndDuplicate:
9144
9154
  "{{display}} चुनें। केंद्रित स्क्रॉलिंग के लिए इंटरैक्ट मोड का उपयोग करें।",
@@ -9318,7 +9328,7 @@ const designModeFeatureOverrides = {
9318
9328
  multiScreenCanvas: {
9319
9329
  duplicate: "تكرار",
9320
9330
  fork: "تفريع",
9321
- fullView: "تفاعل",
9331
+ fullView: "عرض كامل",
9322
9332
  preview: "معاينة",
9323
9333
  openAndDuplicate: "حدد {{display}}. استخدم وضع التفاعل للتمرير المركّز.",
9324
9334
  openAndPreview: "حدد {{display}}. استخدم وضع التفاعل للتمرير المركّز.",
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-10
4
+ ---
5
+
6
+ Editor panels are easier to distinguish, and design-intake questions stay visible while choosing options.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-10
4
+ ---
5
+
6
+ Interact mode now stays on the full canvas, matches Edit visuals, and selects nested elements directly.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-10
4
+ ---
5
+
6
+ New web designs open at desktop size and adapt across mobile and tablet breakpoints.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-10
4
+ ---
5
+
6
+ Tweaks now explain how responsive and state overrides work and link to full documentation.
@@ -54,6 +54,8 @@ export default createAgentChatPlugin({
54
54
 
55
55
  When the user asks for a new design and the current navigation view is list, settings, design-systems, or otherwise has no designId, create a new design first. Do not reuse, delete screens from, or edit a previous design unless the user explicitly names that design or the current navigation state is an editor/present view with that designId.
56
56
 
57
+ Every web design must be responsive. Use mobile-first CSS, a viewport meta tag, and responsive layout changes for narrow widths; never ship a fixed-width desktop shell. Desktop is the default primary artboard: use a 1440×1024 canvas frame (or primaryViewport "desktop") unless the user explicitly asks for a mobile- or tablet-primary design. After generation, inspect desktop and mobile screenshots and correct overflow or broken reflow before reporting completion.
58
+
57
59
  When the user asks to start from a template, call list-design-templates and then create-design-from-template. The copied files and canvas dimensions are already the starting point. If the user also supplied a prompt, call get-design-snapshot once and refine unlocked content with edit-design; do not call generate-design or replace the template with a fresh screen. Layers marked data-agent-native-locked="true" and their descendants must remain byte-for-byte unchanged. Ask the user to unlock one explicitly if they want it changed.
58
60
 
59
61
  When the user asks you to refine an existing design, call view-screen if the open design is unclear, then read the live current file with get-design-snapshot before editing. For small localized changes, call edit-design with exact search/replace edits. For broad copy-only changes such as translating all visible text, call edit-design in replace-file mode with the complete updated file content from the snapshot so the HTML structure, scripts, styles, and tweaks are preserved without dozens of fragile search blocks. Do not claim the design is updated until the mutating action succeeds.
@@ -515,10 +515,10 @@ const messages = {
515
515
  slackUpdateFailed: "فشل تحديث استقبال Slack",
516
516
  slackConfigured: "تم تكوين بيانات اعتماد Slack.",
517
517
  slackNeedsCredentials:
518
- "أضف SLACK_BOT_TOKEN و SLACK_SIGNING_SECRET لتفعيل استقبال Slack.",
519
- slackIntake: "استقبال Slack",
518
+ "يتطلب الاستقبال المخصص القديم SLACK_BOT_TOKEN وSLACK_SIGNING_SECRET. لأتمتة مراسلة Slack الجديدة، اربط مساحة عمل في الإعدادات > المراسلة.",
519
+ slackIntake: "استقبال Slack (قديم)",
520
520
  slackDescription:
521
- "اسمح لأعضاء المؤسسة بوضع مسودات البريد في قائمة الانتظار من Slack.",
521
+ "تكامل مخصص قديم يتيح لأعضاء المؤسسة وضع مسودات البريد في قائمة الانتظار من Slack.",
522
522
  enabled: "ممكّن",
523
523
  disable: "تعطيل",
524
524
  enable: "تمكين",
@@ -523,10 +523,10 @@ const messages = {
523
523
  slackUpdateFailed: "Slack-Eingang konnte nicht aktualisiert werden",
524
524
  slackConfigured: "Slack-Anmeldedaten sind konfiguriert.",
525
525
  slackNeedsCredentials:
526
- "Füge SLACK_BOT_TOKEN und SLACK_SIGNING_SECRET hinzu, um Slack-Eingang zu aktivieren.",
527
- slackIntake: "Slack-Eingang",
526
+ "Der alte benutzerdefinierte Eingang benötigt SLACK_BOT_TOKEN und SLACK_SIGNING_SECRET. Verbinde für neue Slack-Nachrichtenautomatisierungen einen Workspace unter Einstellungen > Messaging.",
527
+ slackIntake: "Slack-Eingang (veraltet)",
528
528
  slackDescription:
529
- "Ermöglicht Organisationsmitgliedern, E-Mail-Entwürfe aus Slack einzureihen.",
529
+ "Veraltete benutzerdefinierte Integration, mit der Organisationsmitglieder E-Mail-Entwürfe aus Slack einreihen können.",
530
530
  enabled: "Aktiviert",
531
531
  disable: "Deaktivieren",
532
532
  enable: "Aktivieren",
@@ -513,9 +513,10 @@ const messages = {
513
513
  slackUpdateFailed: "Failed to update Slack intake",
514
514
  slackConfigured: "Slack credentials are configured.",
515
515
  slackNeedsCredentials:
516
- "Add SLACK_BOT_TOKEN and SLACK_SIGNING_SECRET to enable Slack intake.",
517
- slackIntake: "Slack Intake",
518
- slackDescription: "Let organization members queue email drafts from Slack.",
516
+ "Legacy custom intake requires SLACK_BOT_TOKEN and SLACK_SIGNING_SECRET. For new Slack messaging automations, connect a workspace in Settings > Messaging.",
517
+ slackIntake: "Slack Intake (legacy)",
518
+ slackDescription:
519
+ "Legacy custom integration that lets organization members queue email drafts from Slack.",
519
520
  enabled: "Enabled",
520
521
  disable: "Disable",
521
522
  enable: "Enable",
@@ -522,10 +522,10 @@ const messages = {
522
522
  slackUpdateFailed: "No se pudo actualizar la entrada de Slack",
523
523
  slackConfigured: "Las credenciales de Slack están configuradas.",
524
524
  slackNeedsCredentials:
525
- "Añade SLACK_BOT_TOKEN y SLACK_SIGNING_SECRET para habilitar la entrada de Slack.",
526
- slackIntake: "Entrada de Slack",
525
+ "La entrada personalizada antigua requiere SLACK_BOT_TOKEN y SLACK_SIGNING_SECRET. Para nuevas automatizaciones de mensajería de Slack, conecta un espacio de trabajo en Configuración > Mensajería.",
526
+ slackIntake: "Entrada de Slack (antigua)",
527
527
  slackDescription:
528
- "Permite que miembros de la organización pongan borradores de correo en cola desde Slack.",
528
+ "Integración personalizada antigua que permite poner borradores de correo en cola desde Slack.",
529
529
  enabled: "Activado",
530
530
  disable: "Desactivar",
531
531
  enable: "Activar",
@@ -523,10 +523,10 @@ const messages = {
523
523
  slackUpdateFailed: "Échec de la mise à jour de l’entrée Slack",
524
524
  slackConfigured: "Les identifiants Slack sont configurés.",
525
525
  slackNeedsCredentials:
526
- "Ajoutez SLACK_BOT_TOKEN et SLACK_SIGNING_SECRET pour activer l’entrée Slack.",
527
- slackIntake: "Entrée Slack",
526
+ "L’entrée personnalisée héritée nécessite SLACK_BOT_TOKEN et SLACK_SIGNING_SECRET. Pour les nouvelles automatisations de messagerie Slack, connectez un espace de travail dans Paramètres > Messagerie.",
527
+ slackIntake: "Entrée Slack (héritée)",
528
528
  slackDescription:
529
- "Permet aux membres de l’organisation de mettre en file des brouillons depuis Slack.",
529
+ "Intégration personnalisée héritée permettant de mettre en file des brouillons depuis Slack.",
530
530
  enabled: "Activé",
531
531
  disable: "Désactiver",
532
532
  enable: "Activer",
@@ -516,10 +516,10 @@ const messages = {
516
516
  slackUpdateFailed: "Slack intake update करने में विफल",
517
517
  slackConfigured: "Slack credentials configured हैं।",
518
518
  slackNeedsCredentials:
519
- "Slack intake सक्षम करने के लिए SLACK_BOT_TOKEN और SLACK_SIGNING_SECRET जोड़ें।",
520
- slackIntake: "Slack intake",
519
+ "Legacy custom intake के लिए SLACK_BOT_TOKEN और SLACK_SIGNING_SECRET आवश्यक हैं। नए Slack messaging automations के लिए Settings > Messaging में workspace connect करें।",
520
+ slackIntake: "Slack intake (legacy)",
521
521
  slackDescription:
522
- "Organization members को Slack से email drafts queue करने दें।",
522
+ "Legacy custom integration जो organization members को Slack से email drafts queue करने देता है।",
523
523
  enabled: "सक्षम",
524
524
  disable: "अक्षम करें",
525
525
  enable: "सक्षम करें",
@@ -516,10 +516,10 @@ const messages = {
516
516
  slackUpdateFailed: "Slack 取り込みを更新できませんでした",
517
517
  slackConfigured: "Slack 認証情報は設定済みです。",
518
518
  slackNeedsCredentials:
519
- "Slack 取り込みを有効にするには SLACK_BOT_TOKEN と SLACK_SIGNING_SECRET を追加してください。",
520
- slackIntake: "Slack 取り込み",
519
+ "従来のカスタム取り込みには SLACK_BOT_TOKEN と SLACK_SIGNING_SECRET が必要です。新しい Slack メッセージ自動化では、設定 > メッセージングでワークスペースを接続してください。",
520
+ slackIntake: "Slack 取り込み(レガシー)",
521
521
  slackDescription:
522
- "組織メンバーが Slack からメール下書きをキューに入れられます。",
522
+ "組織メンバーが Slack からメール下書きをキューに入れられる従来のカスタム連携です。",
523
523
  enabled: "有効",
524
524
  disable: "無効化",
525
525
  enable: "有効化",
@@ -517,10 +517,10 @@ const messages = {
517
517
  slackUpdateFailed: "Slack 수신 설정을 업데이트하지 못했습니다",
518
518
  slackConfigured: "Slack 자격 증명이 구성되었습니다.",
519
519
  slackNeedsCredentials:
520
- "Slack 수신을 활성화하려면 SLACK_BOT_TOKEN 및 SLACK_SIGNING_SECRET 추가하세요.",
521
- slackIntake: "Slack 수신",
520
+ "레거시 사용자 지정 수신에는 SLACK_BOT_TOKEN 및 SLACK_SIGNING_SECRET 필요합니다. 새 Slack 메시징 자동화는 설정 > 메시징에서 워크스페이스를 연결하세요.",
521
+ slackIntake: "Slack 수신(레거시)",
522
522
  slackDescription:
523
- "조직 구성원이 Slack에서 이메일 초안을 대기열에 추가할 수 있습니다.",
523
+ "조직 구성원이 Slack에서 이메일 초안을 대기열에 추가할 수 있는 레거시 사용자 지정 통합입니다.",
524
524
  enabled: "활성화됨",
525
525
  disable: "비활성화",
526
526
  enable: "활성화",
@@ -521,10 +521,10 @@ const messages = {
521
521
  slackUpdateFailed: "Falha ao atualizar entrada do Slack",
522
522
  slackConfigured: "As credenciais do Slack estão configuradas.",
523
523
  slackNeedsCredentials:
524
- "Adicione SLACK_BOT_TOKEN e SLACK_SIGNING_SECRET para ativar a entrada do Slack.",
525
- slackIntake: "Entrada do Slack",
524
+ "A entrada personalizada legada requer SLACK_BOT_TOKEN e SLACK_SIGNING_SECRET. Para novas automações de mensagens do Slack, conecte um workspace em Configurações > Mensagens.",
525
+ slackIntake: "Entrada do Slack (legada)",
526
526
  slackDescription:
527
- "Permita que membros da organização coloquem rascunhos de email na fila pelo Slack.",
527
+ "Integração personalizada legada que permite colocar rascunhos de email na fila pelo Slack.",
528
528
  enabled: "Ativado",
529
529
  disable: "Desativar",
530
530
  enable: "Ativar",
@@ -505,9 +505,9 @@ const messages = {
505
505
  slackUpdateFailed: "更新 Slack 收件入口失败",
506
506
  slackConfigured: "Slack 凭据已配置。",
507
507
  slackNeedsCredentials:
508
- "添加 SLACK_BOT_TOKEN 和 SLACK_SIGNING_SECRET 以启用 Slack 收件入口。",
509
- slackIntake: "Slack 收件入口",
510
- slackDescription: "允许组织成员从 Slack 排队邮件草稿。",
508
+ "旧版自定义收件入口需要 SLACK_BOT_TOKEN 和 SLACK_SIGNING_SECRET。新的 Slack 消息自动化请在设置 > 消息中连接工作区。",
509
+ slackIntake: "Slack 收件入口(旧版)",
510
+ slackDescription: "允许组织成员从 Slack 排队邮件草稿的旧版自定义集成。",
511
511
  enabled: "已启用",
512
512
  disable: "停用",
513
513
  enable: "启用",
@@ -502,9 +502,9 @@ const messages = {
502
502
  slackUpdateFailed: "更新 Slack 收件入口失敗",
503
503
  slackConfigured: "Slack 憑證已設定。",
504
504
  slackNeedsCredentials:
505
- "新增 SLACK_BOT_TOKEN 和 SLACK_SIGNING_SECRET 以啟用 Slack 收件入口。",
506
- slackIntake: "Slack 收件入口",
507
- slackDescription: "允許組織成員從 Slack 排隊郵件草稿。",
505
+ "舊版自訂收件入口需要 SLACK_BOT_TOKEN 和 SLACK_SIGNING_SECRET。新的 Slack 訊息自動化請在設定 > 訊息中連接工作區。",
506
+ slackIntake: "Slack 收件入口(舊版)",
507
+ slackDescription: "允許組織成員從 Slack 排隊郵件草稿的舊版自訂整合。",
508
508
  enabled: "已啟用",
509
509
  disable: "停用",
510
510
  enable: "啟用",
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-10
4
+ ---
5
+
6
+ Slack intake settings now distinguish the legacy custom integration from the recommended workspace connection flow.
@@ -9,16 +9,17 @@ export const envKeys: EnvKeyConfig[] = [
9
9
  },
10
10
  {
11
11
  key: "SLACK_BOT_TOKEN",
12
- label: "Slack Bot Token",
12
+ label: "Slack Bot Token (legacy intake)",
13
13
  required: false,
14
14
  helpText:
15
- "Bot User OAuth Token for Slack draft intake. Needs chat:write and users:read.email.",
15
+ "Legacy single-workspace token for custom Slack draft intake. New messaging automations should connect Slack in Settings > Messaging. Needs chat:write and users:read.email.",
16
16
  },
17
17
  {
18
18
  key: "SLACK_SIGNING_SECRET",
19
- label: "Slack Signing Secret",
19
+ label: "Slack Signing Secret (legacy intake)",
20
20
  required: false,
21
- helpText: "Used to verify Slack Events API webhooks.",
21
+ helpText:
22
+ "Used only to verify webhooks for the legacy custom Slack draft intake.",
22
23
  },
23
24
  {
24
25
  key: "ANTHROPIC_API_KEY",
@@ -77,7 +77,7 @@
77
77
  "@react-router/fs-routes": "^8.1.0",
78
78
  "@tailwindcss/typography": "^0.5.20",
79
79
  "@tailwindcss/vite": "catalog:",
80
- "@tanstack/react-query": "^5.99.2",
80
+ "@tanstack/react-query": "5.101.2",
81
81
  "@types/node": "^24.2.1",
82
82
  "@types/react": "catalog:",
83
83
  "@types/react-dom": "catalog:",
@@ -114,6 +114,13 @@ export declare function callAgent(url: string, text: string, opts?: {
114
114
  timeoutMs?: number;
115
115
  /** Poll interval for async calls. Primarily useful for tests/retries. */
116
116
  pollIntervalMs?: number;
117
+ /**
118
+ * Return receiver-verified artifact text from the last polled task when
119
+ * the call times out. Defaults to true for backwards compatibility.
120
+ * Callers that can continue polling the remote task separately should set
121
+ * this to false so the A2ATaskTimeoutError (and its taskId) is preserved.
122
+ */
123
+ returnRecoverableArtifactsOnTimeout?: boolean;
117
124
  /**
118
125
  * Called with each successfully polled task while an async call is still
119
126
  * in flight (see `A2AClient.sendAndWait`). Fires once per real poll
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/a2a/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/a2a/client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,SAAS,EAGT,OAAO,EACP,IAAI,EACL,MAAM,YAAY,CAAC;AAEpB,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,YAAY,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAU5D;CACF;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC7B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC,GACA,OAAO,CAAC,MAAM,CAAC,CA+BjB;AAED,wBAAgB,2BAA2B,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAEvE;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,kBAAkB,CAAgB;IAC1C,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAElC,YACE,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,EAepE;IAED;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAuBrC;IAED,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,mBAAmB;YAQb,GAAG;IA+CX,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,CAUvC;IAEK,IAAI,CACR,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE;QACL,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnC;;;;;;;WAOG;QACH,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,GACA,OAAO,CAAC,IAAI,CAAC,CAef;IAED;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ3C;IAED;;;;;;;;OAQG;IACG,WAAW,CACf,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE;QACL,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnC,wDAAwD;QACxD,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,iCAAiC;QACjC,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,oEAAoE;QACpE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;KACjC,GACA,OAAO,CAAC,IAAI,CAAC,CA2Bf;IAEM,MAAM,CACX,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAChE,cAAc,CAAC,IAAI,CAAC,CAsEtB;YAEa,wBAAwB;YAyBxB,QAAQ;CA2BvB;AAgFD;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;IACL,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,mCAAmC,CAAC,EAAE,OAAO,CAAC;IAC9C;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;CACjC,GACA,OAAO,CAAC,MAAM,CAAC,CAuEjB"}
@@ -450,7 +450,8 @@ export async function callAgent(url, text, opts) {
450
450
  return "";
451
451
  }
452
452
  catch (err) {
453
- if (err instanceof A2ATaskTimeoutError) {
453
+ if (opts?.returnRecoverableArtifactsOnTimeout !== false &&
454
+ err instanceof A2ATaskTimeoutError) {
454
455
  const recoverableText = extractRecoverableArtifactText(err.lastTask);
455
456
  if (recoverableText)
456
457
  return recoverableText;