@agent-native/core 0.98.4 → 0.98.6

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 (314) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +28 -0
  3. package/corpus/core/docs/content/durable-background-runs.mdx +37 -0
  4. package/corpus/core/docs/content/external-agents.mdx +62 -7
  5. package/corpus/core/docs/content/locales/ar-SA/external-agents.mdx +38 -7
  6. package/corpus/core/docs/content/locales/ar-SA/tracking.mdx +2 -0
  7. package/corpus/core/docs/content/locales/de-DE/external-agents.mdx +39 -7
  8. package/corpus/core/docs/content/locales/de-DE/tracking.mdx +2 -0
  9. package/corpus/core/docs/content/locales/es-ES/external-agents.mdx +39 -7
  10. package/corpus/core/docs/content/locales/es-ES/tracking.mdx +2 -0
  11. package/corpus/core/docs/content/locales/fr-FR/external-agents.mdx +39 -7
  12. package/corpus/core/docs/content/locales/fr-FR/tracking.mdx +4 -2
  13. package/corpus/core/docs/content/locales/hi-IN/external-agents.mdx +38 -7
  14. package/corpus/core/docs/content/locales/hi-IN/tracking.mdx +2 -0
  15. package/corpus/core/docs/content/locales/ja-JP/external-agents.mdx +38 -7
  16. package/corpus/core/docs/content/locales/ja-JP/tracking.mdx +2 -0
  17. package/corpus/core/docs/content/locales/ko-KR/external-agents.mdx +38 -7
  18. package/corpus/core/docs/content/locales/ko-KR/tracking.mdx +2 -0
  19. package/corpus/core/docs/content/locales/pt-BR/external-agents.mdx +39 -7
  20. package/corpus/core/docs/content/locales/pt-BR/tracking.mdx +2 -0
  21. package/corpus/core/docs/content/locales/zh-CN/external-agents.mdx +37 -7
  22. package/corpus/core/docs/content/locales/zh-CN/tracking.mdx +2 -0
  23. package/corpus/core/docs/content/locales/zh-TW/durable-background-runs.mdx +14 -0
  24. package/corpus/core/docs/content/locales/zh-TW/external-agents.mdx +37 -7
  25. package/corpus/core/docs/content/locales/zh-TW/tracking.mdx +2 -0
  26. package/corpus/core/docs/content/tracking.mdx +2 -0
  27. package/corpus/core/package.json +1 -1
  28. package/corpus/core/src/a2a/handlers.ts +95 -21
  29. package/corpus/core/src/a2a/task-store.ts +65 -3
  30. package/corpus/core/src/agent/durable-background.ts +16 -16
  31. package/corpus/core/src/agent/engine/ai-sdk-engine.ts +25 -8
  32. package/corpus/core/src/agent/engine/anthropic-engine.ts +17 -3
  33. package/corpus/core/src/agent/engine/output-tokens.ts +6 -6
  34. package/corpus/core/src/agent/production-agent.ts +200 -27
  35. package/corpus/core/src/agent/run-manager.ts +81 -1
  36. package/corpus/core/src/agent/run-store.ts +301 -41
  37. package/corpus/core/src/client/AgentPanel.tsx +6 -2
  38. package/corpus/core/src/client/AssistantChat.tsx +364 -69
  39. package/corpus/core/src/client/agent-chat-adapter.ts +169 -1
  40. package/corpus/core/src/client/chat/message-components.tsx +3 -0
  41. package/corpus/core/src/client/chat/tool-call-display.tsx +20 -36
  42. package/corpus/core/src/client/conversation/use-near-bottom-autoscroll.ts +7 -0
  43. package/corpus/core/src/client/extensions/AgentNativeExtensionFrame.tsx +2 -0
  44. package/corpus/core/src/client/extensions/EmbeddedExtension.tsx +2 -0
  45. package/corpus/core/src/client/extensions/ExtensionEditor.tsx +9 -2
  46. package/corpus/core/src/client/extensions/ExtensionViewer.tsx +2 -0
  47. package/corpus/core/src/client/extensions/InlineExtensionFrame.tsx +2 -0
  48. package/corpus/core/src/client/extensions/portable-extension.ts +2 -0
  49. package/corpus/core/src/client/session-replay.ts +361 -29
  50. package/corpus/core/src/client/sse-event-processor.ts +43 -1
  51. package/corpus/core/src/demo/actions/toggle-demo-mode.ts +1 -1
  52. package/corpus/core/src/demo/config.ts +6 -6
  53. package/corpus/core/src/demo/fetch-interceptor.ts +13 -4
  54. package/corpus/core/src/demo/redact.ts +13 -149
  55. package/corpus/core/src/extensions/html-shell.ts +3 -0
  56. package/corpus/core/src/extensions/session-replay-iframe.ts +131 -0
  57. package/corpus/core/src/integrations/adapters/slack.ts +123 -13
  58. package/corpus/core/src/integrations/identity-links-store.ts +210 -0
  59. package/corpus/core/src/integrations/identity.ts +132 -0
  60. package/corpus/core/src/integrations/index.ts +6 -0
  61. package/corpus/core/src/integrations/plugin.ts +58 -1
  62. package/corpus/core/src/integrations/types.ts +7 -0
  63. package/corpus/core/src/mcp/build-server.ts +127 -22
  64. package/corpus/core/src/mcp/external-agent-policy.ts +18 -0
  65. package/corpus/core/src/mcp/index.ts +1 -0
  66. package/corpus/core/src/scripts/agent-engines/list-agent-engines.ts +1 -20
  67. package/corpus/core/src/server/agent-chat/plugin-options.ts +12 -1
  68. package/corpus/core/src/server/agent-chat/script-entries.ts +20 -3
  69. package/corpus/core/src/server/agent-chat-plugin.ts +3 -0
  70. package/corpus/core/src/session-replay-iframe-protocol.ts +58 -0
  71. package/corpus/core/src/shared/reasoning-effort.ts +35 -0
  72. package/corpus/core/src/styles/agent-conversation.css +26 -0
  73. package/corpus/core/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +34 -5
  74. package/corpus/core/src/templates/workspace-core/.agents/skills/observability/SKILL.md +0 -15
  75. package/corpus/templates/analytics/.agents/skills/session-replay/SKILL.md +30 -21
  76. package/corpus/templates/analytics/AGENTS.md +27 -0
  77. package/corpus/templates/analytics/actions/create-session-replay-agent-link.ts +0 -1
  78. package/corpus/templates/analytics/actions/get-error-issue.ts +1 -0
  79. package/corpus/templates/analytics/actions/get-session-replay-summary.ts +1 -0
  80. package/corpus/templates/analytics/actions/get-session-replay-timeline.ts +40 -0
  81. package/corpus/templates/analytics/actions/list-error-issues.ts +13 -0
  82. package/corpus/templates/analytics/actions/list-session-recordings.ts +1 -0
  83. package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +4 -0
  84. package/corpus/templates/analytics/app/global.css +2 -2
  85. package/corpus/templates/analytics/app/hooks/use-dashboard-chat-context.ts +41 -4
  86. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +52 -203
  87. package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +69 -16
  88. package/corpus/templates/analytics/changelog/2026-07-12-analytics-chat-retries-before-showing-a-generic-no-data-mess.md +6 -0
  89. package/corpus/templates/analytics/changelog/2026-07-12-analytics-sessions-search-no-longer-loses-fast-keystrokes-an.md +6 -0
  90. package/corpus/templates/analytics/changelog/2026-07-12-chart-selection-respects-chat-state.md +6 -0
  91. package/corpus/templates/analytics/changelog/2026-07-12-connected-external-agents-can-now-look-up-sessions-error-iss.md +6 -0
  92. package/corpus/templates/analytics/changelog/2026-07-12-demo-mode-anonymizes-error-reporting-emails.md +6 -0
  93. package/corpus/templates/analytics/changelog/2026-07-12-session-identities-stay-visible-when-demo-mode-is-off.md +6 -0
  94. package/corpus/templates/analytics/changelog/2026-07-12-session-replays-show-iframe-content.md +6 -0
  95. package/corpus/templates/analytics/netlify.toml +0 -3
  96. package/corpus/templates/analytics/server/lib/analytics-connector-catalog.ts +14 -0
  97. package/corpus/templates/analytics/server/lib/error-capture.ts +101 -2
  98. package/corpus/templates/analytics/server/lib/real-data-actions.ts +24 -0
  99. package/corpus/templates/analytics/server/lib/session-replay-agent-context.ts +49 -17
  100. package/corpus/templates/analytics/server/lib/session-replay.ts +18 -16
  101. package/corpus/templates/analytics/server/plugins/agent-chat.ts +43 -6
  102. package/corpus/templates/analytics/server/plugins/db.ts +15 -0
  103. package/corpus/templates/assets/app/global.css +1 -1
  104. package/corpus/templates/brain/app/global.css +2 -2
  105. package/corpus/templates/brain/changelog/2026-07-12-fix-long-response-progress.md +6 -0
  106. package/corpus/templates/forms/app/components/CloudUpgrade.tsx +1 -1
  107. package/corpus/templates/forms/app/components/ThemeToggle.tsx +22 -6
  108. package/corpus/templates/forms/app/components/builder/FieldPropertiesPanel.tsx +5 -5
  109. package/corpus/templates/forms/app/components/builder/FieldRenderer.tsx +3 -3
  110. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +16 -16
  111. package/corpus/templates/forms/app/global.css +164 -13
  112. package/corpus/templates/forms/app/pages/AskPage.tsx +35 -13
  113. package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +143 -67
  114. package/corpus/templates/forms/app/pages/FormFillPage.tsx +44 -11
  115. package/corpus/templates/forms/app/pages/FormsListPage.tsx +42 -24
  116. package/corpus/templates/forms/app/pages/ResponseInsightsPage.tsx +28 -15
  117. package/corpus/templates/forms/app/pages/ResponsesPage.tsx +46 -20
  118. package/corpus/templates/forms/app/routes/_app.settings.tsx +1 -1
  119. package/corpus/templates/forms/changelog/2026-07-12-ask-forms-suggestions-now-sit-beneath-the-composer-for-a-tig.md +6 -0
  120. package/corpus/templates/forms/changelog/2026-07-12-builder-response-tables-now-fill-the-view-without-a-redundan.md +6 -0
  121. package/corpus/templates/forms/changelog/2026-07-12-form-builder-surfaces-are-calmer-fields-stay-stable-on-hover.md +6 -0
  122. package/corpus/templates/forms/changelog/2026-07-12-response-tables-now-fill-the-available-pane-with-a-flexible-.md +6 -0
  123. package/corpus/templates/forms/changelog/2026-07-12-smoother-more-tactile-controls-throughout-animated-icon-and-.md +6 -0
  124. package/corpus/templates/mail/AGENTS.md +3 -1
  125. package/corpus/templates/mail/app/components/email/EmailThread.tsx +21 -13
  126. package/corpus/templates/mail/app/components/email/email-iframe-document.ts +18 -0
  127. package/corpus/templates/mail/server/lib/mail-integrations.ts +3 -0
  128. package/dist/a2a/handlers.d.ts.map +1 -1
  129. package/dist/a2a/handlers.js +84 -15
  130. package/dist/a2a/handlers.js.map +1 -1
  131. package/dist/a2a/task-store.d.ts +20 -1
  132. package/dist/a2a/task-store.d.ts.map +1 -1
  133. package/dist/a2a/task-store.js +57 -4
  134. package/dist/a2a/task-store.js.map +1 -1
  135. package/dist/agent/durable-background.d.ts +10 -10
  136. package/dist/agent/durable-background.d.ts.map +1 -1
  137. package/dist/agent/durable-background.js +16 -16
  138. package/dist/agent/durable-background.js.map +1 -1
  139. package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
  140. package/dist/agent/engine/ai-sdk-engine.js +19 -8
  141. package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
  142. package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
  143. package/dist/agent/engine/anthropic-engine.js +11 -3
  144. package/dist/agent/engine/anthropic-engine.js.map +1 -1
  145. package/dist/agent/engine/output-tokens.js +6 -6
  146. package/dist/agent/engine/output-tokens.js.map +1 -1
  147. package/dist/agent/production-agent.d.ts +52 -0
  148. package/dist/agent/production-agent.d.ts.map +1 -1
  149. package/dist/agent/production-agent.js +154 -26
  150. package/dist/agent/production-agent.js.map +1 -1
  151. package/dist/agent/run-manager.d.ts +9 -0
  152. package/dist/agent/run-manager.d.ts.map +1 -1
  153. package/dist/agent/run-manager.js +71 -1
  154. package/dist/agent/run-manager.js.map +1 -1
  155. package/dist/agent/run-store.d.ts +9 -0
  156. package/dist/agent/run-store.d.ts.map +1 -1
  157. package/dist/agent/run-store.js +243 -48
  158. package/dist/agent/run-store.js.map +1 -1
  159. package/dist/client/AgentPanel.d.ts.map +1 -1
  160. package/dist/client/AgentPanel.js +6 -2
  161. package/dist/client/AgentPanel.js.map +1 -1
  162. package/dist/client/AssistantChat.d.ts +21 -0
  163. package/dist/client/AssistantChat.d.ts.map +1 -1
  164. package/dist/client/AssistantChat.js +298 -67
  165. package/dist/client/AssistantChat.js.map +1 -1
  166. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  167. package/dist/client/agent-chat-adapter.js +146 -1
  168. package/dist/client/agent-chat-adapter.js.map +1 -1
  169. package/dist/client/chat/message-components.d.ts.map +1 -1
  170. package/dist/client/chat/message-components.js +2 -1
  171. package/dist/client/chat/message-components.js.map +1 -1
  172. package/dist/client/chat/tool-call-display.d.ts +3 -1
  173. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  174. package/dist/client/chat/tool-call-display.js +13 -37
  175. package/dist/client/chat/tool-call-display.js.map +1 -1
  176. package/dist/client/conversation/use-near-bottom-autoscroll.d.ts +1 -0
  177. package/dist/client/conversation/use-near-bottom-autoscroll.d.ts.map +1 -1
  178. package/dist/client/conversation/use-near-bottom-autoscroll.js +6 -0
  179. package/dist/client/conversation/use-near-bottom-autoscroll.js.map +1 -1
  180. package/dist/client/extensions/AgentNativeExtensionFrame.d.ts.map +1 -1
  181. package/dist/client/extensions/AgentNativeExtensionFrame.js +2 -1
  182. package/dist/client/extensions/AgentNativeExtensionFrame.js.map +1 -1
  183. package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
  184. package/dist/client/extensions/EmbeddedExtension.js +2 -1
  185. package/dist/client/extensions/EmbeddedExtension.js.map +1 -1
  186. package/dist/client/extensions/ExtensionEditor.d.ts.map +1 -1
  187. package/dist/client/extensions/ExtensionEditor.js +5 -2
  188. package/dist/client/extensions/ExtensionEditor.js.map +1 -1
  189. package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
  190. package/dist/client/extensions/ExtensionViewer.js +2 -1
  191. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  192. package/dist/client/extensions/InlineExtensionFrame.d.ts.map +1 -1
  193. package/dist/client/extensions/InlineExtensionFrame.js +2 -1
  194. package/dist/client/extensions/InlineExtensionFrame.js.map +1 -1
  195. package/dist/client/extensions/portable-extension.d.ts.map +1 -1
  196. package/dist/client/extensions/portable-extension.js +2 -0
  197. package/dist/client/extensions/portable-extension.js.map +1 -1
  198. package/dist/client/session-replay.d.ts.map +1 -1
  199. package/dist/client/session-replay.js +308 -29
  200. package/dist/client/session-replay.js.map +1 -1
  201. package/dist/client/sse-event-processor.d.ts +5 -0
  202. package/dist/client/sse-event-processor.d.ts.map +1 -1
  203. package/dist/client/sse-event-processor.js +37 -1
  204. package/dist/client/sse-event-processor.js.map +1 -1
  205. package/dist/collab/routes.d.ts +1 -1
  206. package/dist/demo/actions/toggle-demo-mode.js +1 -1
  207. package/dist/demo/actions/toggle-demo-mode.js.map +1 -1
  208. package/dist/demo/config.js +6 -6
  209. package/dist/demo/config.js.map +1 -1
  210. package/dist/demo/fetch-interceptor.d.ts.map +1 -1
  211. package/dist/demo/fetch-interceptor.js +13 -4
  212. package/dist/demo/fetch-interceptor.js.map +1 -1
  213. package/dist/demo/redact.d.ts +7 -7
  214. package/dist/demo/redact.d.ts.map +1 -1
  215. package/dist/demo/redact.js +8 -145
  216. package/dist/demo/redact.js.map +1 -1
  217. package/dist/extensions/html-shell.d.ts.map +1 -1
  218. package/dist/extensions/html-shell.js +2 -0
  219. package/dist/extensions/html-shell.js.map +1 -1
  220. package/dist/extensions/session-replay-iframe.d.ts +10 -0
  221. package/dist/extensions/session-replay-iframe.d.ts.map +1 -0
  222. package/dist/extensions/session-replay-iframe.js +121 -0
  223. package/dist/extensions/session-replay-iframe.js.map +1 -0
  224. package/dist/file-upload/actions/upload-image.d.ts +1 -1
  225. package/dist/integrations/adapters/slack.d.ts.map +1 -1
  226. package/dist/integrations/adapters/slack.js +98 -13
  227. package/dist/integrations/adapters/slack.js.map +1 -1
  228. package/dist/integrations/identity-links-store.d.ts +23 -0
  229. package/dist/integrations/identity-links-store.d.ts.map +1 -0
  230. package/dist/integrations/identity-links-store.js +158 -0
  231. package/dist/integrations/identity-links-store.js.map +1 -0
  232. package/dist/integrations/identity.d.ts +11 -0
  233. package/dist/integrations/identity.d.ts.map +1 -0
  234. package/dist/integrations/identity.js +100 -0
  235. package/dist/integrations/identity.js.map +1 -0
  236. package/dist/integrations/index.d.ts +2 -0
  237. package/dist/integrations/index.d.ts.map +1 -1
  238. package/dist/integrations/index.js +2 -0
  239. package/dist/integrations/index.js.map +1 -1
  240. package/dist/integrations/plugin.d.ts.map +1 -1
  241. package/dist/integrations/plugin.js +43 -1
  242. package/dist/integrations/plugin.js.map +1 -1
  243. package/dist/integrations/types.d.ts +6 -0
  244. package/dist/integrations/types.d.ts.map +1 -1
  245. package/dist/integrations/types.js.map +1 -1
  246. package/dist/mcp/build-server.d.ts +9 -2
  247. package/dist/mcp/build-server.d.ts.map +1 -1
  248. package/dist/mcp/build-server.js +97 -20
  249. package/dist/mcp/build-server.js.map +1 -1
  250. package/dist/mcp/external-agent-policy.d.ts +19 -0
  251. package/dist/mcp/external-agent-policy.d.ts.map +1 -0
  252. package/dist/mcp/external-agent-policy.js +2 -0
  253. package/dist/mcp/external-agent-policy.js.map +1 -0
  254. package/dist/mcp/index.d.ts +1 -0
  255. package/dist/mcp/index.d.ts.map +1 -1
  256. package/dist/mcp/index.js.map +1 -1
  257. package/dist/notifications/routes.d.ts +1 -1
  258. package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
  259. package/dist/scripts/agent-engines/list-agent-engines.js +1 -19
  260. package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
  261. package/dist/server/agent-chat/plugin-options.d.ts +11 -1
  262. package/dist/server/agent-chat/plugin-options.d.ts.map +1 -1
  263. package/dist/server/agent-chat/plugin-options.js.map +1 -1
  264. package/dist/server/agent-chat/script-entries.d.ts.map +1 -1
  265. package/dist/server/agent-chat/script-entries.js +16 -2
  266. package/dist/server/agent-chat/script-entries.js.map +1 -1
  267. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  268. package/dist/server/agent-chat-plugin.js +3 -0
  269. package/dist/server/agent-chat-plugin.js.map +1 -1
  270. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  271. package/dist/server/transcribe-voice.d.ts +1 -1
  272. package/dist/session-replay-iframe-protocol.d.ts +36 -0
  273. package/dist/session-replay-iframe-protocol.d.ts.map +1 -0
  274. package/dist/session-replay-iframe-protocol.js +24 -0
  275. package/dist/session-replay-iframe-protocol.js.map +1 -0
  276. package/dist/shared/reasoning-effort.d.ts +11 -0
  277. package/dist/shared/reasoning-effort.d.ts.map +1 -1
  278. package/dist/shared/reasoning-effort.js +36 -0
  279. package/dist/shared/reasoning-effort.js.map +1 -1
  280. package/dist/styles/agent-conversation.css +26 -0
  281. package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +34 -5
  282. package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +0 -15
  283. package/docs/content/durable-background-runs.mdx +37 -0
  284. package/docs/content/external-agents.mdx +62 -7
  285. package/docs/content/locales/ar-SA/external-agents.mdx +38 -7
  286. package/docs/content/locales/ar-SA/tracking.mdx +2 -0
  287. package/docs/content/locales/de-DE/external-agents.mdx +39 -7
  288. package/docs/content/locales/de-DE/tracking.mdx +2 -0
  289. package/docs/content/locales/es-ES/external-agents.mdx +39 -7
  290. package/docs/content/locales/es-ES/tracking.mdx +2 -0
  291. package/docs/content/locales/fr-FR/external-agents.mdx +39 -7
  292. package/docs/content/locales/fr-FR/tracking.mdx +4 -2
  293. package/docs/content/locales/hi-IN/external-agents.mdx +38 -7
  294. package/docs/content/locales/hi-IN/tracking.mdx +2 -0
  295. package/docs/content/locales/ja-JP/external-agents.mdx +38 -7
  296. package/docs/content/locales/ja-JP/tracking.mdx +2 -0
  297. package/docs/content/locales/ko-KR/external-agents.mdx +38 -7
  298. package/docs/content/locales/ko-KR/tracking.mdx +2 -0
  299. package/docs/content/locales/pt-BR/external-agents.mdx +39 -7
  300. package/docs/content/locales/pt-BR/tracking.mdx +2 -0
  301. package/docs/content/locales/zh-CN/external-agents.mdx +37 -7
  302. package/docs/content/locales/zh-CN/tracking.mdx +2 -0
  303. package/docs/content/locales/zh-TW/durable-background-runs.mdx +14 -0
  304. package/docs/content/locales/zh-TW/external-agents.mdx +37 -7
  305. package/docs/content/locales/zh-TW/tracking.mdx +2 -0
  306. package/docs/content/tracking.mdx +2 -0
  307. package/package.json +2 -2
  308. package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +34 -5
  309. package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +0 -15
  310. package/corpus/core/src/observability/hosted-model-experiment.ts +0 -118
  311. package/dist/observability/hosted-model-experiment.d.ts +0 -39
  312. package/dist/observability/hosted-model-experiment.d.ts.map +0 -1
  313. package/dist/observability/hosted-model-experiment.js +0 -90
  314. package/dist/observability/hosted-model-experiment.js.map +0 -1
@@ -204,14 +204,14 @@ export function FieldRenderer({
204
204
  key={star}
205
205
  type="button"
206
206
  onClick={() => !disabled && handleChange(star)}
207
- className="cursor-pointer p-2 sm:p-1.5 disabled:cursor-not-allowed"
207
+ className="flex size-11 cursor-pointer items-center justify-center rounded-md p-2 transition-[color,transform] duration-150 ease-out active:scale-[0.96] motion-reduce:active:scale-100 disabled:cursor-not-allowed sm:size-10 sm:p-1.5"
208
208
  disabled={disabled}
209
209
  aria-label={`${star} star${star !== 1 ? "s" : ""}`}
210
210
  >
211
211
  {(value as number) >= star ? (
212
- <IconStarFilled className="h-7 w-7 sm:h-6 sm:w-6 text-amber-400" />
212
+ <IconStarFilled className="h-7 w-7 text-amber-400 sm:h-6 sm:w-6" />
213
213
  ) : (
214
- <IconStar className="h-7 w-7 sm:h-6 sm:w-6 text-muted-foreground/30" />
214
+ <IconStar className="h-7 w-7 text-muted-foreground/30 sm:h-6 sm:w-6" />
215
215
  )}
216
216
  </button>
217
217
  ))}
@@ -131,7 +131,7 @@ export function Sidebar() {
131
131
 
132
132
  const newFormButton = (
133
133
  <PopoverTrigger asChild>
134
- <button className="flex min-h-[44px] w-full cursor-pointer items-center gap-2.5 rounded-md px-3 py-2 text-sm text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground">
134
+ <button className="forms-sidebar-nav-item flex min-h-[44px] w-full cursor-pointer items-center gap-2.5 rounded-lg px-3 py-2 text-sm text-muted-foreground active:scale-[0.96] transition-[background-color,box-shadow,color,transform] hover:bg-accent/50 hover:text-foreground">
135
135
  <IconPlus className="h-4 w-4 shrink-0" />
136
136
  <span>{t("sidebar.newForm")}</span>
137
137
  </button>
@@ -143,7 +143,7 @@ export function Sidebar() {
143
143
  side="right"
144
144
  align="start"
145
145
  sideOffset={8}
146
- className="w-80 p-0 rounded-xl"
146
+ className="forms-new-form-popover w-80 rounded-2xl p-0"
147
147
  >
148
148
  <div className="p-4 pb-3">
149
149
  <p className="text-sm font-semibold">{t("sidebar.newForm")}</p>
@@ -168,7 +168,7 @@ export function Sidebar() {
168
168
  <Button
169
169
  variant="link"
170
170
  size="sm"
171
- className="h-auto p-0 text-xs text-muted-foreground"
171
+ className="min-h-10 px-2 text-xs text-muted-foreground active:scale-[0.96] transition-[background-color,color,transform]"
172
172
  onClick={handleSkip}
173
173
  >
174
174
  {t("sidebar.skipPrompt")}
@@ -180,7 +180,7 @@ export function Sidebar() {
180
180
  <Button
181
181
  variant="secondary"
182
182
  size="icon"
183
- className="h-7 w-7"
183
+ className="size-10 rounded-lg transition-[background-color,box-shadow,transform] active:scale-[0.96] motion-reduce:active:scale-100"
184
184
  onClick={handleSubmitPrompt}
185
185
  disabled={!prompt.trim() || promptRun.isActivePrompt(prompt)}
186
186
  aria-label={t("sidebar.sendPrompt")}
@@ -200,7 +200,7 @@ export function Sidebar() {
200
200
  <button
201
201
  type="button"
202
202
  onClick={() => setCollapsed(false)}
203
- className="flex h-10 w-10 items-center justify-center rounded-md text-muted-foreground/55 transition-colors hover:bg-accent/50 hover:text-muted-foreground"
203
+ className="forms-sidebar-nav-item flex size-10 items-center justify-center rounded-lg text-muted-foreground/55 transition-[background-color,box-shadow,color,transform] duration-150 ease-out hover:bg-accent/50 hover:text-muted-foreground active:scale-[0.96] motion-reduce:active:scale-100"
204
204
  aria-label={t("sidebar.expandSidebar")}
205
205
  >
206
206
  <IconLayoutSidebarLeftExpand className="h-4 w-4 rtl:-scale-x-100" />
@@ -219,7 +219,7 @@ export function Sidebar() {
219
219
  onClick={navigateHomeChat}
220
220
  aria-label={t("navigation.askForms")}
221
221
  className={cn(
222
- "flex h-10 w-10 items-center justify-center rounded-md transition-colors",
222
+ "forms-sidebar-nav-item flex size-10 items-center justify-center rounded-lg active:scale-[0.96] transition-[background-color,box-shadow,color,transform]",
223
223
  location.pathname === "/ask" || location.pathname === "/"
224
224
  ? "bg-accent text-accent-foreground"
225
225
  : "text-muted-foreground hover:bg-accent/50 hover:text-foreground",
@@ -239,7 +239,7 @@ export function Sidebar() {
239
239
  to="/forms"
240
240
  aria-label={t("navigation.allForms")}
241
241
  className={cn(
242
- "flex h-10 w-10 items-center justify-center rounded-md transition-colors",
242
+ "forms-sidebar-nav-item flex size-10 items-center justify-center rounded-lg active:scale-[0.96] transition-[background-color,box-shadow,color,transform]",
243
243
  location.pathname.startsWith("/forms")
244
244
  ? "bg-accent text-accent-foreground"
245
245
  : "text-muted-foreground hover:bg-accent/50 hover:text-foreground",
@@ -260,7 +260,7 @@ export function Sidebar() {
260
260
  <button
261
261
  type="button"
262
262
  aria-label={t("sidebar.newForm")}
263
- className="flex h-10 w-10 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground"
263
+ className="forms-sidebar-nav-item flex size-10 items-center justify-center rounded-lg text-muted-foreground transition-[background-color,box-shadow,color,transform] duration-150 ease-out hover:bg-accent/50 hover:text-foreground active:scale-[0.96] motion-reduce:active:scale-100"
264
264
  >
265
265
  <IconPlus className="h-4 w-4" />
266
266
  </button>
@@ -279,7 +279,7 @@ export function Sidebar() {
279
279
  to="/settings"
280
280
  aria-label={t("navigation.settings")}
281
281
  className={cn(
282
- "flex h-10 w-10 items-center justify-center rounded-md transition-colors",
282
+ "forms-sidebar-nav-item flex size-10 items-center justify-center rounded-lg active:scale-[0.96] transition-[background-color,box-shadow,color,transform]",
283
283
  location.pathname === "/settings"
284
284
  ? "bg-accent text-accent-foreground"
285
285
  : "text-muted-foreground hover:bg-accent/50 hover:text-foreground",
@@ -310,7 +310,7 @@ export function Sidebar() {
310
310
  <button
311
311
  type="button"
312
312
  aria-label={t("sidebar.openAskFullScreen")}
313
- className="flex min-w-0 items-center gap-2 rounded-md text-base font-semibold tracking-tight text-muted-foreground/80 transition-colors hover:text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
313
+ className="flex min-h-10 min-w-0 items-center gap-2 rounded-lg px-2 text-base font-semibold tracking-tight text-muted-foreground/80 active:scale-[0.96] transition-[color,transform] hover:text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
314
314
  onClick={toggleLogoView}
315
315
  >
316
316
  <img
@@ -337,7 +337,7 @@ export function Sidebar() {
337
337
  <Button
338
338
  variant="ghost"
339
339
  size="icon"
340
- className="h-8 w-8"
340
+ className="size-10 transition-[background-color,box-shadow,transform] active:scale-[0.96] motion-reduce:active:scale-100"
341
341
  onClick={() => setMobileOpen(false)}
342
342
  >
343
343
  <IconX size={18} />
@@ -349,7 +349,7 @@ export function Sidebar() {
349
349
  <Button
350
350
  variant="ghost"
351
351
  size="icon"
352
- className="h-8 w-8 text-muted-foreground/55 hover:bg-accent/50 hover:text-muted-foreground"
352
+ className="size-10 text-muted-foreground/55 transition-[background-color,box-shadow,color,transform] hover:bg-accent/50 hover:text-muted-foreground active:scale-[0.96] motion-reduce:active:scale-100"
353
353
  onClick={() => setCollapsed(true)}
354
354
  aria-label={t("sidebar.collapseSidebar")}
355
355
  >
@@ -374,7 +374,7 @@ export function Sidebar() {
374
374
  to="/ask"
375
375
  onClick={navigateHomeChat}
376
376
  className={cn(
377
- "flex min-h-[44px] w-full min-w-0 max-w-full items-center gap-2.5 overflow-hidden rounded-md px-3 py-2 text-sm transition-colors hover:text-primary",
377
+ "forms-sidebar-nav-item flex min-h-[44px] w-full min-w-0 max-w-full items-center gap-2.5 overflow-hidden rounded-lg px-3 py-2 text-sm active:scale-[0.96] transition-[background-color,box-shadow,color,transform] hover:text-primary",
378
378
  location.pathname === "/ask" || location.pathname === "/"
379
379
  ? "bg-accent text-accent-foreground"
380
380
  : "text-muted-foreground hover:bg-accent/50 hover:text-foreground",
@@ -390,7 +390,7 @@ export function Sidebar() {
390
390
  to="/forms"
391
391
  onClick={() => isMobile && setMobileOpen(false)}
392
392
  className={cn(
393
- "flex min-h-[44px] w-full min-w-0 max-w-full items-center gap-2.5 overflow-hidden rounded-md px-3 py-2 text-sm transition-colors hover:text-primary",
393
+ "forms-sidebar-nav-item flex min-h-[44px] w-full min-w-0 max-w-full items-center gap-2.5 overflow-hidden rounded-lg px-3 py-2 text-sm active:scale-[0.96] transition-[background-color,box-shadow,color,transform] hover:text-primary",
394
394
  location.pathname.startsWith("/forms")
395
395
  ? "bg-accent text-accent-foreground"
396
396
  : "text-muted-foreground hover:bg-accent/50 hover:text-foreground",
@@ -415,7 +415,7 @@ export function Sidebar() {
415
415
  to="/settings"
416
416
  onClick={() => isMobile && setMobileOpen(false)}
417
417
  className={cn(
418
- "flex w-full items-center gap-2.5 rounded-md px-3 py-2 text-sm min-h-[44px]",
418
+ "forms-sidebar-nav-item flex min-h-[44px] w-full items-center gap-2.5 rounded-lg px-3 py-2 text-sm active:scale-[0.96] transition-[background-color,box-shadow,color,transform]",
419
419
  location.pathname === "/settings"
420
420
  ? "bg-accent text-accent-foreground"
421
421
  : "text-muted-foreground hover:bg-accent/50 hover:text-foreground",
@@ -449,7 +449,7 @@ export function Sidebar() {
449
449
  <Button
450
450
  variant="ghost"
451
451
  size="icon"
452
- className="fixed top-2 start-2 z-40 h-10 w-10 md:hidden"
452
+ className="fixed top-2 start-2 z-40 size-10 active:scale-[0.96] transition-[background-color,box-shadow,transform] md:hidden"
453
453
  onClick={() => setMobileOpen(true)}
454
454
  aria-label={t("sidebar.openSidebar")}
455
455
  >
@@ -28,6 +28,21 @@
28
28
  --input: 0 0% 90%;
29
29
  --ring: 0 0% 40%;
30
30
  --radius: 0.5rem;
31
+ --forms-radius-control: 0.625rem;
32
+ --forms-radius-surface: 0.75rem;
33
+ --forms-radius-floating: 1rem;
34
+ --forms-shadow-surface:
35
+ 0 0 0 1px hsl(var(--foreground) / 0.04),
36
+ 0 1px 2px -1px hsl(var(--foreground) / 0.08);
37
+ --forms-shadow-surface-hover:
38
+ 0 0 0 1px hsl(var(--foreground) / 0.08),
39
+ 0 2px 6px -3px hsl(var(--foreground) / 0.1);
40
+ --forms-shadow-control: 0 0 0 1px hsl(var(--foreground) / 0.035);
41
+ --forms-shadow-floating:
42
+ 0 0 0 1px hsl(var(--foreground) / 0.06),
43
+ 0 6px 16px -10px hsl(var(--foreground) / 0.12);
44
+ --forms-shadow-focus:
45
+ 0 0 0 3px hsl(var(--ring) / 0.18), 0 0 0 1px hsl(var(--ring) / 0.55);
31
46
 
32
47
  --sidebar-background: 0 0% 97%;
33
48
  --sidebar-foreground: 0 0% 45%;
@@ -59,6 +74,12 @@
59
74
  --border: 0 0% 24%;
60
75
  --input: 0 0% 24%;
61
76
  --ring: 0 0% 60%;
77
+ --forms-shadow-surface: 0 0 0 1px hsl(var(--foreground) / 0.08);
78
+ --forms-shadow-surface-hover: 0 0 0 1px hsl(var(--foreground) / 0.14);
79
+ --forms-shadow-control: 0 0 0 1px hsl(var(--foreground) / 0.07);
80
+ --forms-shadow-floating: 0 0 0 1px hsl(var(--foreground) / 0.1);
81
+ --forms-shadow-focus:
82
+ 0 0 0 3px hsl(var(--ring) / 0.2), 0 0 0 1px hsl(var(--ring) / 0.65);
62
83
 
63
84
  --sidebar-background: 0 0% 10%;
64
85
  --sidebar-foreground: 0 0% 60%;
@@ -94,13 +115,73 @@
94
115
  background: hsl(var(--muted-foreground) / 0.4);
95
116
  }
96
117
 
118
+ .forms-list-shell,
119
+ .forms-selection-toolbar,
120
+ .forms-settings-card {
121
+ border-radius: var(--forms-radius-surface);
122
+ box-shadow: var(--forms-shadow-surface);
123
+ }
124
+
125
+ .forms-settings-card {
126
+ border: 0;
127
+ }
128
+
129
+ .forms-list-shell {
130
+ transition-property: box-shadow;
131
+ transition-duration: 180ms;
132
+ transition-timing-function: ease-out;
133
+ }
134
+
135
+ .forms-list-shell:hover,
136
+ .forms-settings-card:hover {
137
+ box-shadow: var(--forms-shadow-surface-hover);
138
+ }
139
+
140
+ .forms-selection-toolbar {
141
+ transition-property: box-shadow;
142
+ transition-duration: 150ms;
143
+ transition-timing-function: ease-out;
144
+ }
145
+
146
+ .forms-list-row {
147
+ transition-property: background-color, box-shadow, opacity;
148
+ transition-duration: 150ms;
149
+ transition-timing-function: ease-out;
150
+ }
151
+
152
+ .forms-list-row:hover {
153
+ box-shadow: var(--forms-shadow-control);
154
+ }
155
+
156
+ .forms-list-row:focus-visible {
157
+ outline: none;
158
+ box-shadow: var(--forms-shadow-focus);
159
+ }
160
+
161
+ .forms-empty-state {
162
+ box-shadow: var(--forms-shadow-control);
163
+ }
164
+
165
+ .forms-sidebar-nav-item {
166
+ border-radius: var(--forms-radius-control);
167
+ }
168
+
169
+ .forms-sidebar-nav-item:hover {
170
+ box-shadow: var(--forms-shadow-control);
171
+ }
172
+
173
+ .forms-new-form-popover {
174
+ border: 0;
175
+ box-shadow: var(--forms-shadow-floating);
176
+ }
177
+
97
178
  .forms-ask-chat-panel {
98
179
  width: 100%;
99
180
  }
100
181
 
101
182
  .forms-ask-chat-panel [data-agent-empty-state="centered"] {
102
183
  justify-content: center;
103
- padding-bottom: clamp(4rem, 12vh, 8rem);
184
+ padding-bottom: clamp(2rem, 6vh, 4rem);
104
185
  }
105
186
 
106
187
  .forms-ask-chat-panel [data-agent-empty-state="centered"] .agent-chat-scroll {
@@ -122,11 +203,12 @@
122
203
 
123
204
  @container agent-native-main (min-width: 720px) {
124
205
  .forms-list-skeleton-row {
125
- grid-template-columns: minmax(0, 1fr) 120px 120px 80px;
206
+ grid-template-columns: minmax(0, 1fr) 100px 110px 140px 88px 40px;
207
+ align-items: center;
126
208
  }
127
209
 
128
210
  .forms-list-row {
129
- grid-template-columns: minmax(0, 1fr) 110px 140px 88px 40px;
211
+ grid-template-columns: minmax(0, 1fr) 100px 110px 140px 88px 40px;
130
212
  align-items: center;
131
213
  }
132
214
  }
@@ -150,14 +232,36 @@
150
232
  }
151
233
 
152
234
  .forms-ask-chat-panel .agent-composer-root--hero {
153
- border-radius: 1.25rem;
235
+ border-radius: var(--forms-radius-floating);
154
236
  background: hsl(var(--background));
155
- box-shadow: none;
237
+ box-shadow: var(--forms-shadow-floating);
238
+ transition-property: border-color, box-shadow, transform;
239
+ transition-duration: 180ms;
240
+ transition-timing-function: ease-out;
241
+ }
242
+
243
+ .forms-ask-chat-panel .agent-composer-root--hero:hover {
244
+ box-shadow: var(--forms-shadow-surface-hover);
245
+ transform: translateY(-1px);
156
246
  }
157
247
 
158
248
  .forms-ask-chat-panel .agent-composer-root--hero:focus-within {
159
249
  border-color: hsl(var(--ring) / 0.9);
160
- box-shadow: none;
250
+ box-shadow: var(--forms-shadow-focus), var(--forms-shadow-floating);
251
+ }
252
+
253
+ @media (prefers-reduced-motion: reduce) {
254
+ .forms-list-shell,
255
+ .forms-selection-toolbar,
256
+ .forms-list-row,
257
+ .forms-sidebar-nav-item,
258
+ .forms-ask-chat-panel .agent-composer-root--hero {
259
+ transition: none;
260
+ }
261
+
262
+ .forms-ask-chat-panel .agent-composer-root--hero:hover {
263
+ transform: none;
264
+ }
161
265
  }
162
266
 
163
267
  .forms-chat-intro {
@@ -165,12 +269,28 @@
165
269
  }
166
270
 
167
271
  .forms-ask-chat-panel [data-agent-empty-state="centered"] .forms-chat-intro {
168
- display: grid;
169
- justify-items: center;
170
- gap: 0.75rem;
171
- margin: 0 auto 1rem;
172
- padding-bottom: 1.25rem;
272
+ display: contents;
273
+ }
274
+
275
+ .forms-ask-chat-panel [data-agent-empty-state="centered"] .forms-chat-intro h1,
276
+ .forms-ask-chat-panel [data-agent-empty-state="centered"] .forms-chat-intro p {
277
+ width: 100%;
173
278
  text-align: center;
279
+ order: 1;
280
+ }
281
+
282
+ .forms-ask-chat-panel [data-agent-empty-state="centered"] .forms-chat-intro h1 {
283
+ margin: 0 0 0.5rem;
284
+ }
285
+
286
+ .forms-ask-chat-panel [data-agent-empty-state="centered"] .forms-chat-intro p {
287
+ margin: 0 auto 1rem;
288
+ }
289
+
290
+ .forms-ask-chat-panel
291
+ [data-agent-empty-state="centered"]
292
+ .agent-composer-stack {
293
+ order: 2;
174
294
  }
175
295
 
176
296
  .forms-chat-intro h1 {
@@ -193,20 +313,51 @@
193
313
  flex-wrap: wrap;
194
314
  justify-content: center;
195
315
  gap: 0.5rem;
196
- padding-top: 0.125rem;
316
+ order: 3;
317
+ margin: 0.75rem auto 0;
197
318
  }
198
319
 
199
- .forms-chat-pill-row span {
320
+ .forms-chat-pill-row button {
200
321
  display: inline-flex;
201
322
  align-items: center;
202
323
  gap: 0.375rem;
203
324
  border: 1px solid hsl(var(--border));
204
325
  border-radius: 999px;
205
326
  background: hsl(var(--background) / 0.78);
327
+ box-shadow: var(--forms-shadow-control);
206
328
  padding: 0.375rem 0.625rem;
207
329
  color: hsl(var(--muted-foreground));
330
+ cursor: pointer;
208
331
  font-size: 0.75rem;
209
332
  font-weight: 600;
333
+ transition-property: background-color, border-color, color, scale;
334
+ transition-duration: 150ms;
335
+ transition-timing-function: ease-out;
336
+ }
337
+
338
+ .forms-chat-pill-row button:hover {
339
+ border-color: hsl(var(--foreground) / 0.2);
340
+ background: hsl(var(--background));
341
+ color: hsl(var(--foreground));
342
+ }
343
+
344
+ .forms-chat-pill-row button:focus-visible {
345
+ outline: none;
346
+ box-shadow: var(--forms-shadow-focus);
347
+ }
348
+
349
+ .forms-chat-pill-row button:active {
350
+ scale: 0.96;
351
+ }
352
+
353
+ @media (prefers-reduced-motion: reduce) {
354
+ .forms-chat-pill-row button {
355
+ transition: none;
356
+ }
357
+
358
+ .forms-chat-pill-row button:active {
359
+ scale: 1;
360
+ }
210
361
  }
211
362
 
212
363
  @media (min-width: 640px) {
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  AgentChatSurface,
3
3
  markAgentChatHomeHandoff,
4
+ sendToAgentChat,
4
5
  useT,
5
6
  } from "@agent-native/core/client";
6
7
  import { IconChartBar, IconDatabase, IconSettings } from "@tabler/icons-react";
@@ -26,6 +27,28 @@ export function AskPage() {
26
27
  };
27
28
  }, []);
28
29
 
30
+ function prefillSuggestion(message: string) {
31
+ sendToAgentChat({ message, submit: false, chatTarget: "local" });
32
+ }
33
+
34
+ const suggestions = [
35
+ {
36
+ label: t("home.pillForms"),
37
+ prompt: "@forms",
38
+ icon: IconDatabase,
39
+ },
40
+ {
41
+ label: t("home.pillAnalytics"),
42
+ prompt: "analytics",
43
+ icon: IconChartBar,
44
+ },
45
+ {
46
+ label: t("home.pillConfiguration"),
47
+ prompt: "configuration",
48
+ icon: IconSettings,
49
+ },
50
+ ];
51
+
29
52
  return (
30
53
  <div className="flex h-full min-h-0 flex-col bg-background">
31
54
  <AgentChatSurface
@@ -48,19 +71,18 @@ export function AskPage() {
48
71
  <div className="forms-chat-intro">
49
72
  <h1>{t("home.heading")}</h1>
50
73
  <p>{t("home.description")}</p>
51
- <div className="forms-chat-pill-row" aria-hidden="true">
52
- <span>
53
- <IconDatabase className="size-3.5" />
54
- {t("home.pillForms")}
55
- </span>
56
- <span>
57
- <IconChartBar className="size-3.5" />
58
- {t("home.pillAnalytics")}
59
- </span>
60
- <span>
61
- <IconSettings className="size-3.5" />
62
- {t("home.pillConfiguration")}
63
- </span>
74
+ <div className="forms-chat-pill-row">
75
+ {suggestions.map(({ icon: Icon, label, prompt }) => (
76
+ <button
77
+ key={prompt}
78
+ type="button"
79
+ className="forms-chat-pill"
80
+ onClick={() => prefillSuggestion(prompt)}
81
+ >
82
+ <Icon className="size-3.5" />
83
+ {label}
84
+ </button>
85
+ ))}
64
86
  </div>
65
87
  </div>
66
88
  }