@agent-native/core 0.79.17 → 0.79.19

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 (355) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +14 -0
  3. package/corpus/core/docs/content/file-uploads.md +11 -4
  4. package/corpus/core/docs/content/locales/ar-SA/multi-app-workspace.md +3 -3
  5. package/corpus/core/docs/content/locales/de-DE/multi-app-workspace.md +3 -3
  6. package/corpus/core/docs/content/locales/es-ES/multi-app-workspace.md +3 -3
  7. package/corpus/core/docs/content/locales/fr-FR/multi-app-workspace.md +3 -3
  8. package/corpus/core/docs/content/locales/hi-IN/multi-app-workspace.md +3 -3
  9. package/corpus/core/docs/content/locales/ja-JP/multi-app-workspace.md +3 -3
  10. package/corpus/core/docs/content/locales/ko-KR/multi-app-workspace.md +3 -3
  11. package/corpus/core/docs/content/locales/pt-BR/multi-app-workspace.md +3 -3
  12. package/corpus/core/docs/content/locales/zh-CN/multi-app-workspace.md +3 -3
  13. package/corpus/core/docs/content/locales/zh-TW/multi-app-workspace.md +3 -3
  14. package/corpus/core/docs/content/multi-app-workspace.md +3 -3
  15. package/corpus/core/docs/content/template-clips.md +14 -5
  16. package/corpus/core/package.json +1 -1
  17. package/corpus/core/src/agent/engine/builder-engine.ts +8 -3
  18. package/corpus/core/src/cli/mcp.ts +11 -6
  19. package/corpus/core/src/client/AssistantChat.tsx +6 -2
  20. package/corpus/core/src/client/chat/markdown-renderer.tsx +1 -0
  21. package/corpus/core/src/client/i18n.tsx +77 -65
  22. package/corpus/core/src/client/index.ts +7 -1
  23. package/corpus/core/src/client/org/OrgSwitcher.tsx +5 -5
  24. package/corpus/core/src/client/org/TeamPage.tsx +11 -3
  25. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +216 -0
  26. package/corpus/core/src/client/settings/index.ts +5 -0
  27. package/corpus/core/src/file-upload/index.ts +1 -0
  28. package/corpus/core/src/file-upload/registry.ts +22 -6
  29. package/corpus/core/src/file-upload/types.ts +6 -1
  30. package/corpus/core/src/integrations/adapters/email.ts +26 -18
  31. package/corpus/core/src/integrations/adapters/slack.ts +8 -7
  32. package/corpus/core/src/integrations/adapters/telegram.ts +9 -11
  33. package/corpus/core/src/integrations/adapters/whatsapp.ts +12 -9
  34. package/corpus/core/src/integrations/plugin.ts +79 -13
  35. package/corpus/core/src/onboarding/default-steps.ts +6 -3
  36. package/corpus/core/src/onboarding/types.ts +1 -1
  37. package/corpus/core/src/org/handlers.ts +1 -1
  38. package/corpus/core/src/server/agent-chat-plugin.ts +4 -7
  39. package/corpus/core/src/server/better-auth-instance.ts +19 -62
  40. package/corpus/core/src/server/core-routes-plugin.ts +93 -180
  41. package/corpus/core/src/server/create-server.ts +55 -116
  42. package/corpus/core/src/server/email-actions.ts +3 -6
  43. package/corpus/core/src/server/email.ts +52 -17
  44. package/corpus/core/src/server/index.ts +2 -1
  45. package/corpus/core/src/server/scoped-key-storage.ts +223 -0
  46. package/corpus/core/src/shared/agent-env.ts +3 -3
  47. package/corpus/core/src/sharing/actions/share-resource.ts +1 -1
  48. package/corpus/core/src/styles/agent-native.css +47 -3
  49. package/corpus/core/src/templates/workspace-root/AGENTS.md +3 -2
  50. package/corpus/core/src/templates/workspace-root/README.md +1 -1
  51. package/corpus/core/src/templates/workspace-root/scripts/repair-workspace-org.ts +29 -90
  52. package/corpus/core/src/terminal/pty-server.ts +3 -38
  53. package/corpus/core/src/triggers/dispatcher.ts +1 -2
  54. package/corpus/templates/.retired/issues/package.json +7 -0
  55. package/corpus/templates/.retired/meeting-notes/package.json +7 -0
  56. package/corpus/templates/.retired/recruiting/package.json +7 -0
  57. package/corpus/templates/.retired/scheduling/package.json +7 -0
  58. package/corpus/templates/.retired/voice/package.json +7 -0
  59. package/corpus/templates/analytics/app/components/layout/Header.tsx +0 -1
  60. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +1 -18
  61. package/corpus/templates/analytics/app/global.css +15 -0
  62. package/corpus/templates/analytics/app/i18n/zh-TW.ts +7 -1
  63. package/corpus/templates/analytics/app/i18n-data.ts +71 -2
  64. package/corpus/templates/analytics/app/pages/Ask.tsx +1 -1
  65. package/corpus/templates/analytics/app/pages/Settings.tsx +120 -73
  66. package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +0 -11
  67. package/corpus/templates/analytics/app/routes/catalog.tsx +33 -176
  68. package/corpus/templates/analytics/app/routes/team.tsx +3 -2
  69. package/corpus/templates/analytics/changelog/2026-06-26-dashboard-templates-are-tucked-into-settings-and-show-simple.md +6 -0
  70. package/corpus/templates/analytics/changelog/2026-06-26-the-ask-tab-uses-a-softer-dark-gray-canvas-while-sidebar-cha.md +6 -0
  71. package/corpus/templates/analytics/changelog/2026-06-26-the-sessions-page-shows-a-single-page-title-instead-of-repea.md +6 -0
  72. package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +37 -28
  73. package/corpus/templates/assets/app/routes/settings.tsx +65 -43
  74. package/corpus/templates/assets/app/routes/team.tsx +2 -10
  75. package/corpus/templates/brain/app/routes/settings.tsx +390 -358
  76. package/corpus/templates/brain/app/routes/team.tsx +2 -8
  77. package/corpus/templates/calendar/actions/db-connect.ts +5 -29
  78. package/corpus/templates/calendar/app/components/CloudUpgrade.tsx +8 -51
  79. package/corpus/templates/calendar/app/components/calendar/GoogleConnectBanner.tsx +2 -1
  80. package/corpus/templates/calendar/app/components/calendar/GoogleSetupWizard.tsx +4 -2
  81. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +0 -2
  82. package/corpus/templates/calendar/app/pages/Settings.tsx +304 -271
  83. package/corpus/templates/calendar/app/routes/_app.team.tsx +2 -17
  84. package/corpus/templates/calendar/server/handlers/google-auth.ts +22 -9
  85. package/corpus/templates/calendar/server/lib/booking-emails.ts +1 -1
  86. package/corpus/templates/calendar/server/lib/event-guest-notifications.ts +1 -1
  87. package/corpus/templates/calendar/server/lib/google-calendar.ts +48 -28
  88. package/corpus/templates/chat/app/components/layout/Header.tsx +0 -1
  89. package/corpus/templates/chat/app/hooks/use-navigation-state.ts +4 -2
  90. package/corpus/templates/chat/app/routes/settings.tsx +54 -54
  91. package/corpus/templates/chat/app/routes/team.tsx +2 -10
  92. package/corpus/templates/clips/.agents/skills/ai-video-tools/SKILL.md +7 -2
  93. package/corpus/templates/clips/.agents/skills/recording/SKILL.md +1 -1
  94. package/corpus/templates/clips/.agents/skills/video-sharing/SKILL.md +7 -0
  95. package/corpus/templates/clips/AGENTS.md +8 -0
  96. package/corpus/templates/clips/actions/invite-member.ts +1 -1
  97. package/corpus/templates/clips/actions/request-transcript.ts +1 -1
  98. package/corpus/templates/clips/app/components/library/library-layout.tsx +325 -333
  99. package/corpus/templates/clips/app/components/player/delete-recording-menu.tsx +80 -40
  100. package/corpus/templates/clips/app/components/player/transcript-panel.tsx +2 -0
  101. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +629 -643
  102. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +263 -158
  103. package/corpus/templates/clips/app/routes/share.$shareId.tsx +10 -2
  104. package/corpus/templates/clips/changelog/2026-06-26-long-desktop-recordings-are-checkpointed-so-macos-finalizati.md +6 -0
  105. package/corpus/templates/clips/changelog/2026-06-26-non-mac-desktop-recordings-wait-for-upload-transcription.md +6 -0
  106. package/corpus/templates/clips/changelog/2026-06-26-recording-details-button-stays-at-the-far-right-on-small-screen.md +6 -0
  107. package/corpus/templates/clips/changelog/2026-06-26-s3-compatible-storage-keys-now-save-securely-from-clips-sett.md +6 -0
  108. package/corpus/templates/clips/changelog/2026-06-26-shared-clip-links-guide-agents-through-processing-transcripts.md +6 -0
  109. package/corpus/templates/clips/changelog/2026-06-26-the-agent-sidebar-now-slides-in-smoothly-without-duplicate-e.md +6 -0
  110. package/corpus/templates/clips/changelog/2026-06-26-the-clip-details-sidebar-now-collapses-into-a-slide-out-pane.md +6 -0
  111. package/corpus/templates/clips/desktop/src/lib/recorder.ts +55 -3
  112. package/corpus/templates/clips/desktop/src/lib/transcription-capture.ts +217 -5
  113. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +1 -0
  114. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +176 -5
  115. package/corpus/templates/clips/server/lib/public-agent-context.ts +31 -0
  116. package/corpus/templates/clips/server/lib/s3-upload-provider.ts +60 -14
  117. package/corpus/templates/clips/server/lib/video-storage.ts +37 -9
  118. package/corpus/templates/clips/server/routes/api/agent-transcript.json.get.ts +5 -0
  119. package/corpus/templates/content/app/components/layout/Header.tsx +0 -1
  120. package/corpus/templates/content/app/components/sidebar/NotionButton.tsx +1 -0
  121. package/corpus/templates/content/app/routes/_app.settings.tsx +54 -55
  122. package/corpus/templates/content/app/routes/_app.team.tsx +2 -28
  123. package/corpus/templates/content/server/lib/notion.ts +43 -11
  124. package/corpus/templates/content/server/routes/api/notion/auth-url.get.ts +2 -2
  125. package/corpus/templates/content/server/routes/api/notion/status.get.ts +3 -3
  126. package/corpus/templates/design/app/routes/settings.tsx +60 -38
  127. package/corpus/templates/design/app/routes/team.tsx +2 -10
  128. package/corpus/templates/dispatch/app/hooks/use-navigation-state.ts +2 -2
  129. package/corpus/templates/dispatch/app/routes/settings.tsx +70 -55
  130. package/corpus/templates/dispatch/app/routes/team.tsx +5 -1
  131. package/corpus/templates/forms/actions/db-connect.ts +7 -36
  132. package/corpus/templates/forms/actions/navigate.ts +2 -2
  133. package/corpus/templates/forms/app/components/CloudUpgrade.tsx +8 -47
  134. package/corpus/templates/forms/app/components/layout/Header.tsx +0 -1
  135. package/corpus/templates/forms/app/components/layout/Layout.tsx +42 -25
  136. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +35 -76
  137. package/corpus/templates/forms/app/global.css +9 -25
  138. package/corpus/templates/forms/app/hooks/use-navigation-state.ts +4 -4
  139. package/corpus/templates/forms/app/i18n/ar-SA.ts +1 -0
  140. package/corpus/templates/forms/app/i18n/de-DE.ts +1 -0
  141. package/corpus/templates/forms/app/i18n/en-US.ts +1 -0
  142. package/corpus/templates/forms/app/i18n/es-ES.ts +1 -0
  143. package/corpus/templates/forms/app/i18n/fr-FR.ts +1 -0
  144. package/corpus/templates/forms/app/i18n/hi-IN.ts +1 -0
  145. package/corpus/templates/forms/app/i18n/ja-JP.ts +1 -0
  146. package/corpus/templates/forms/app/i18n/ko-KR.ts +1 -0
  147. package/corpus/templates/forms/app/i18n/pt-BR.ts +1 -0
  148. package/corpus/templates/forms/app/i18n/zh-CN.ts +1 -0
  149. package/corpus/templates/forms/app/i18n/zh-TW.ts +1 -0
  150. package/corpus/templates/forms/app/lib/route-prewarm.ts +9 -8
  151. package/corpus/templates/forms/app/pages/AskPage.tsx +70 -0
  152. package/corpus/templates/forms/app/pages/FormsListPage.tsx +74 -81
  153. package/corpus/templates/forms/app/root.tsx +1 -1
  154. package/corpus/templates/forms/app/routes/_app.ask.tsx +14 -0
  155. package/corpus/templates/forms/app/routes/_app.settings.tsx +54 -54
  156. package/corpus/templates/forms/app/routes/_app.team.tsx +2 -9
  157. package/corpus/templates/forms/app/routes/_index.tsx +21 -130
  158. package/corpus/templates/forms/changelog/2026-06-26-ask-forms-opens-as-a-standard-app-tab-with-a-simpler-sidebar.md +6 -0
  159. package/corpus/templates/forms/changelog/2026-06-26-forms-are-shown-in-a-tighter-row-list-with-a-denser-sidebar.md +6 -0
  160. package/corpus/templates/forms/shared/navigation.ts +4 -2
  161. package/corpus/templates/macros/app/routes/settings.tsx +54 -54
  162. package/corpus/templates/macros/app/routes/team.tsx +2 -10
  163. package/corpus/templates/mail/actions/helpers.ts +2 -2
  164. package/corpus/templates/mail/app/components/GoogleConnectBanner.tsx +2 -1
  165. package/corpus/templates/mail/app/pages/SettingsPage.tsx +5 -5
  166. package/corpus/templates/mail/app/routes/team.tsx +3 -2
  167. package/corpus/templates/mail/server/handlers/emails.ts +3 -2
  168. package/corpus/templates/mail/server/handlers/google-auth.ts +19 -12
  169. package/corpus/templates/mail/server/lib/automation-engine.ts +3 -2
  170. package/corpus/templates/mail/server/lib/email-state.ts +2 -3
  171. package/corpus/templates/mail/server/lib/google-auth.ts +28 -11
  172. package/corpus/templates/mail/server/lib/jobs.ts +3 -2
  173. package/corpus/templates/mail/server/onboarding.ts +9 -6
  174. package/corpus/templates/mail/server/routes/api/attachments.get.ts +3 -3
  175. package/corpus/templates/plan/actions/request-plan-access.ts +1 -1
  176. package/corpus/templates/plan/app/components/layout/Header.tsx +0 -1
  177. package/corpus/templates/plan/app/components/plan/CanvasArea.tsx +56 -4
  178. package/corpus/templates/plan/app/global.css +8 -3
  179. package/corpus/templates/plan/app/hooks/use-navigation-state.ts +4 -2
  180. package/corpus/templates/plan/app/lib/route-prewarm.ts +0 -4
  181. package/corpus/templates/plan/app/pages/PlansPage.tsx +1 -1
  182. package/corpus/templates/plan/app/routes/settings.tsx +75 -73
  183. package/corpus/templates/plan/app/routes/team.tsx +2 -8
  184. package/corpus/templates/plan/changelog/2026-06-26-canvas-grid-panning-now-stays-smooth-and-fills-the-workspace.md +6 -0
  185. package/corpus/templates/plan/server/lib/comment-notifications.ts +1 -1
  186. package/corpus/templates/slides/actions/check-image-gen.ts +2 -1
  187. package/corpus/templates/slides/actions/db-connect.ts +7 -45
  188. package/corpus/templates/slides/actions/edit-image.ts +6 -3
  189. package/corpus/templates/slides/actions/generate-image-api.ts +1 -1
  190. package/corpus/templates/slides/actions/generate-image.ts +2 -2
  191. package/corpus/templates/slides/actions/generate-slides-ai.ts +5 -3
  192. package/corpus/templates/slides/actions/image-gen-status.ts +4 -3
  193. package/corpus/templates/slides/actions/image-search.ts +6 -3
  194. package/corpus/templates/slides/actions/search-images.ts +6 -3
  195. package/corpus/templates/slides/app/components/CloudUpgrade.tsx +8 -51
  196. package/corpus/templates/slides/app/components/layout/Header.tsx +0 -1
  197. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +0 -2
  198. package/corpus/templates/slides/app/routes/settings.tsx +54 -54
  199. package/corpus/templates/slides/app/routes/team.tsx +2 -12
  200. package/corpus/templates/slides/server/handlers/google-docs-auth.ts +9 -9
  201. package/corpus/templates/slides/server/handlers/image-gen.ts +5 -1
  202. package/corpus/templates/slides/server/handlers/image-providers/gemini.ts +9 -1
  203. package/corpus/templates/slides/server/handlers/image-providers/index.ts +18 -8
  204. package/corpus/templates/slides/server/handlers/image-providers/openai.ts +10 -4
  205. package/corpus/templates/slides/server/handlers/image-providers/types.ts +1 -0
  206. package/corpus/templates/slides/server/lib/google-docs-oauth.ts +59 -34
  207. package/corpus/templates/slides/server/register-secrets.ts +60 -0
  208. package/corpus/templates/videos/actions/db-connect.ts +7 -45
  209. package/corpus/templates/videos/app/components/CloudUpgrade.tsx +8 -51
  210. package/corpus/templates/videos/app/components/Sidebar.tsx +1 -9
  211. package/corpus/templates/videos/app/components/layout/Header.tsx +0 -1
  212. package/corpus/templates/videos/app/components/layout/NavSidebar.tsx +0 -3
  213. package/corpus/templates/videos/app/routes/settings.tsx +54 -54
  214. package/corpus/templates/videos/app/routes/team.tsx +2 -8
  215. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  216. package/dist/agent/engine/builder-engine.js +8 -3
  217. package/dist/agent/engine/builder-engine.js.map +1 -1
  218. package/dist/cli/mcp.d.ts.map +1 -1
  219. package/dist/cli/mcp.js +3 -4
  220. package/dist/cli/mcp.js.map +1 -1
  221. package/dist/client/AssistantChat.d.ts.map +1 -1
  222. package/dist/client/AssistantChat.js +6 -2
  223. package/dist/client/AssistantChat.js.map +1 -1
  224. package/dist/client/chat/markdown-renderer.d.ts.map +1 -1
  225. package/dist/client/chat/markdown-renderer.js +1 -0
  226. package/dist/client/chat/markdown-renderer.js.map +1 -1
  227. package/dist/client/i18n.d.ts.map +1 -1
  228. package/dist/client/i18n.js +20 -9
  229. package/dist/client/i18n.js.map +1 -1
  230. package/dist/client/index.d.ts +1 -1
  231. package/dist/client/index.d.ts.map +1 -1
  232. package/dist/client/index.js +1 -1
  233. package/dist/client/index.js.map +1 -1
  234. package/dist/client/org/OrgSwitcher.d.ts +3 -3
  235. package/dist/client/org/OrgSwitcher.js +2 -2
  236. package/dist/client/org/OrgSwitcher.js.map +1 -1
  237. package/dist/client/org/TeamPage.d.ts +6 -1
  238. package/dist/client/org/TeamPage.d.ts.map +1 -1
  239. package/dist/client/org/TeamPage.js +2 -2
  240. package/dist/client/org/TeamPage.js.map +1 -1
  241. package/dist/client/settings/SettingsTabsPage.d.ts +27 -0
  242. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -0
  243. package/dist/client/settings/SettingsTabsPage.js +108 -0
  244. package/dist/client/settings/SettingsTabsPage.js.map +1 -0
  245. package/dist/client/settings/index.d.ts +1 -0
  246. package/dist/client/settings/index.d.ts.map +1 -1
  247. package/dist/client/settings/index.js +1 -0
  248. package/dist/client/settings/index.js.map +1 -1
  249. package/dist/file-upload/index.d.ts +1 -1
  250. package/dist/file-upload/index.d.ts.map +1 -1
  251. package/dist/file-upload/index.js +1 -1
  252. package/dist/file-upload/index.js.map +1 -1
  253. package/dist/file-upload/registry.d.ts +1 -0
  254. package/dist/file-upload/registry.d.ts.map +1 -1
  255. package/dist/file-upload/registry.js +24 -6
  256. package/dist/file-upload/registry.js.map +1 -1
  257. package/dist/file-upload/types.d.ts +6 -1
  258. package/dist/file-upload/types.d.ts.map +1 -1
  259. package/dist/file-upload/types.js.map +1 -1
  260. package/dist/integrations/adapters/email.d.ts.map +1 -1
  261. package/dist/integrations/adapters/email.js +18 -18
  262. package/dist/integrations/adapters/email.js.map +1 -1
  263. package/dist/integrations/adapters/slack.d.ts.map +1 -1
  264. package/dist/integrations/adapters/slack.js +8 -7
  265. package/dist/integrations/adapters/slack.js.map +1 -1
  266. package/dist/integrations/adapters/telegram.d.ts.map +1 -1
  267. package/dist/integrations/adapters/telegram.js +9 -9
  268. package/dist/integrations/adapters/telegram.js.map +1 -1
  269. package/dist/integrations/adapters/whatsapp.d.ts.map +1 -1
  270. package/dist/integrations/adapters/whatsapp.js +10 -9
  271. package/dist/integrations/adapters/whatsapp.js.map +1 -1
  272. package/dist/integrations/plugin.d.ts.map +1 -1
  273. package/dist/integrations/plugin.js +47 -13
  274. package/dist/integrations/plugin.js.map +1 -1
  275. package/dist/notifications/routes.d.ts +3 -3
  276. package/dist/observability/routes.d.ts +6 -6
  277. package/dist/onboarding/default-steps.d.ts.map +1 -1
  278. package/dist/onboarding/default-steps.js +6 -5
  279. package/dist/onboarding/default-steps.js.map +1 -1
  280. package/dist/onboarding/types.d.ts +1 -1
  281. package/dist/onboarding/types.d.ts.map +1 -1
  282. package/dist/onboarding/types.js.map +1 -1
  283. package/dist/org/handlers.js +1 -1
  284. package/dist/org/handlers.js.map +1 -1
  285. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  286. package/dist/server/agent-chat-plugin.js +4 -6
  287. package/dist/server/agent-chat-plugin.js.map +1 -1
  288. package/dist/server/agent-engine-api-key-route.d.ts +2 -2
  289. package/dist/server/better-auth-instance.d.ts.map +1 -1
  290. package/dist/server/better-auth-instance.js +17 -56
  291. package/dist/server/better-auth-instance.js.map +1 -1
  292. package/dist/server/core-routes-plugin.d.ts +1 -1
  293. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  294. package/dist/server/core-routes-plugin.js +67 -153
  295. package/dist/server/core-routes-plugin.js.map +1 -1
  296. package/dist/server/create-server.d.ts +3 -9
  297. package/dist/server/create-server.d.ts.map +1 -1
  298. package/dist/server/create-server.js +37 -91
  299. package/dist/server/create-server.js.map +1 -1
  300. package/dist/server/email-actions.d.ts +2 -3
  301. package/dist/server/email-actions.d.ts.map +1 -1
  302. package/dist/server/email-actions.js +3 -6
  303. package/dist/server/email-actions.js.map +1 -1
  304. package/dist/server/email.d.ts +3 -3
  305. package/dist/server/email.d.ts.map +1 -1
  306. package/dist/server/email.js +40 -19
  307. package/dist/server/email.js.map +1 -1
  308. package/dist/server/index.d.ts +3 -3
  309. package/dist/server/index.d.ts.map +1 -1
  310. package/dist/server/index.js +3 -3
  311. package/dist/server/index.js.map +1 -1
  312. package/dist/server/scoped-key-storage.d.ts +22 -0
  313. package/dist/server/scoped-key-storage.d.ts.map +1 -0
  314. package/dist/server/scoped-key-storage.js +152 -0
  315. package/dist/server/scoped-key-storage.js.map +1 -0
  316. package/dist/shared/agent-env.d.ts +3 -3
  317. package/dist/shared/agent-env.d.ts.map +1 -1
  318. package/dist/shared/agent-env.js +3 -3
  319. package/dist/shared/agent-env.js.map +1 -1
  320. package/dist/sharing/actions/share-resource.js +1 -1
  321. package/dist/sharing/actions/share-resource.js.map +1 -1
  322. package/dist/styles/agent-native.css +47 -3
  323. package/dist/templates/workspace-root/AGENTS.md +3 -2
  324. package/dist/templates/workspace-root/README.md +1 -1
  325. package/dist/templates/workspace-root/scripts/repair-workspace-org.ts +29 -90
  326. package/dist/terminal/pty-server.d.ts.map +1 -1
  327. package/dist/terminal/pty-server.js +3 -36
  328. package/dist/terminal/pty-server.js.map +1 -1
  329. package/dist/triggers/dispatcher.js +1 -1
  330. package/dist/triggers/dispatcher.js.map +1 -1
  331. package/docs/content/file-uploads.md +11 -4
  332. package/docs/content/locales/ar-SA/multi-app-workspace.md +3 -3
  333. package/docs/content/locales/de-DE/multi-app-workspace.md +3 -3
  334. package/docs/content/locales/es-ES/multi-app-workspace.md +3 -3
  335. package/docs/content/locales/fr-FR/multi-app-workspace.md +3 -3
  336. package/docs/content/locales/hi-IN/multi-app-workspace.md +3 -3
  337. package/docs/content/locales/ja-JP/multi-app-workspace.md +3 -3
  338. package/docs/content/locales/ko-KR/multi-app-workspace.md +3 -3
  339. package/docs/content/locales/pt-BR/multi-app-workspace.md +3 -3
  340. package/docs/content/locales/zh-CN/multi-app-workspace.md +3 -3
  341. package/docs/content/locales/zh-TW/multi-app-workspace.md +3 -3
  342. package/docs/content/multi-app-workspace.md +3 -3
  343. package/docs/content/template-clips.md +14 -5
  344. package/package.json +1 -1
  345. package/src/templates/workspace-root/AGENTS.md +3 -2
  346. package/src/templates/workspace-root/README.md +1 -1
  347. package/src/templates/workspace-root/scripts/repair-workspace-org.ts +29 -90
  348. package/corpus/core/src/server/env-var-writes.ts +0 -16
  349. package/corpus/templates/analytics/app/pages/Team.tsx +0 -9
  350. package/corpus/templates/calendar/app/pages/Team.tsx +0 -12
  351. package/corpus/templates/mail/app/pages/Team.tsx +0 -17
  352. package/dist/server/env-var-writes.d.ts +0 -10
  353. package/dist/server/env-var-writes.d.ts.map +0 -1
  354. package/dist/server/env-var-writes.js +0 -18
  355. package/dist/server/env-var-writes.js.map +0 -1
@@ -93,55 +93,39 @@
93
93
  background: hsl(var(--muted-foreground) / 0.4);
94
94
  }
95
95
 
96
- .forms-home-page::before {
97
- content: "";
98
- position: absolute;
99
- inset: 0;
100
- background-image:
101
- linear-gradient(hsl(var(--border) / 0.24) 1px, transparent 1px),
102
- linear-gradient(90deg, hsl(var(--border) / 0.18) 1px, transparent 1px);
103
- background-size: 46px 46px;
104
- mask-image: linear-gradient(
105
- to bottom,
106
- transparent,
107
- black 14%,
108
- black 78%,
109
- transparent
110
- );
111
- }
112
-
113
- .forms-home-chat-panel {
96
+ .forms-ask-chat-panel {
114
97
  width: 100%;
115
98
  }
116
99
 
117
- .forms-home-chat-panel [data-agent-empty-state="centered"] {
100
+ .forms-ask-chat-panel [data-agent-empty-state="centered"] {
118
101
  justify-content: center;
119
102
  padding-bottom: clamp(4rem, 12vh, 8rem);
120
103
  }
121
104
 
122
- .forms-home-chat-panel [data-agent-empty-state="centered"] .agent-chat-scroll {
105
+ .forms-ask-chat-panel [data-agent-empty-state="centered"] .agent-chat-scroll {
123
106
  flex: 0 0 auto;
124
107
  min-height: 0;
125
108
  overflow: visible;
126
109
  }
127
110
 
128
- .forms-home-chat-panel .agent-composer-area--hero {
111
+ .forms-ask-chat-panel .agent-composer-area--hero {
129
112
  padding-inline: 0;
130
113
  filter: none;
131
114
  }
132
115
 
133
- .forms-home-chat-panel
116
+ .forms-ask-chat-panel
134
117
  [data-agent-empty-state="centered"]
135
118
  .agent-composer-area--hero {
136
119
  width: 100%;
137
120
  }
138
121
 
139
- .forms-home-chat-panel .agent-composer-root--hero {
122
+ .forms-ask-chat-panel .agent-composer-root--hero {
140
123
  border-radius: 1.25rem;
124
+ background: hsl(var(--background));
141
125
  box-shadow: none;
142
126
  }
143
127
 
144
- .forms-home-chat-panel .agent-composer-root--hero:focus-within {
128
+ .forms-ask-chat-panel .agent-composer-root--hero:focus-within {
145
129
  border-color: hsl(var(--ring) / 0.9);
146
130
  box-shadow: none;
147
131
  }
@@ -150,7 +134,7 @@
150
134
  display: none;
151
135
  }
152
136
 
153
- .forms-home-chat-panel [data-agent-empty-state="centered"] .forms-chat-intro {
137
+ .forms-ask-chat-panel [data-agent-empty-state="centered"] .forms-chat-intro {
154
138
  display: grid;
155
139
  justify-items: center;
156
140
  gap: 0.75rem;
@@ -84,8 +84,8 @@ export function useNavigationState() {
84
84
  getNavigationState: ({ pathname, searchParams }) => {
85
85
  const state: NavigationState = { view: "forms" };
86
86
 
87
- if (pathname === "/") {
88
- state.view = "home";
87
+ if (pathname === "/" || pathname === "/ask") {
88
+ state.view = "ask";
89
89
  } else if (pathname.startsWith("/forms")) {
90
90
  const formMatch = pathname.match(/\/forms\/([^/]+)/);
91
91
  if (formMatch) {
@@ -109,7 +109,7 @@ export function useNavigationState() {
109
109
  } else if (pathname.startsWith("/f/")) {
110
110
  state.view = "public-form";
111
111
  } else if (pathname.startsWith("/team")) {
112
- state.view = "team";
112
+ state.view = "settings";
113
113
  } else if (pathname.startsWith("/extensions")) {
114
114
  state.view = "extensions";
115
115
  } else if (pathname.startsWith("/form-preview")) {
@@ -132,7 +132,7 @@ export function useNavigationState() {
132
132
  navigateOptions: { flushSync: true, replace: true },
133
133
  onNavigate: (_command, path) => {
134
134
  void prewarmFormsRoutePath(path);
135
- if (location.pathname === "/" && path !== "/") {
135
+ if (location.pathname === "/ask" && path !== "/ask") {
136
136
  markAgentChatHomeHandoff("forms");
137
137
  }
138
138
  },
@@ -17,6 +17,7 @@ const messages = {
17
17
  settings: "الإعدادات",
18
18
  brand: "النماذج",
19
19
  askForms: "اسأل Forms",
20
+ allForms: "كل النماذج",
20
21
  team: "الفريق",
21
22
  },
22
23
  settings: {
@@ -17,6 +17,7 @@ const messages = {
17
17
  settings: "Einstellungen",
18
18
  brand: "Formulare",
19
19
  askForms: "Fragen Sie nach Formularen",
20
+ allForms: "Alle Formulare",
20
21
  team: "Team",
21
22
  },
22
23
  settings: {
@@ -17,6 +17,7 @@ const messages = {
17
17
  settings: "Settings",
18
18
  brand: "Forms",
19
19
  askForms: "Ask Forms",
20
+ allForms: "All forms",
20
21
  team: "Team",
21
22
  },
22
23
  settings: {
@@ -17,6 +17,7 @@ const messages = {
17
17
  settings: "Ajustes",
18
18
  brand: "Formularios",
19
19
  askForms: "Preguntar a Forms",
20
+ allForms: "Todos los formularios",
20
21
  team: "Equipo",
21
22
  },
22
23
  settings: {
@@ -17,6 +17,7 @@ const messages = {
17
17
  settings: "Paramètres",
18
18
  brand: "Formulaires",
19
19
  askForms: "Demander a Forms",
20
+ allForms: "Tous les formulaires",
20
21
  team: "Equipe",
21
22
  },
22
23
  settings: {
@@ -17,6 +17,7 @@ const messages = {
17
17
  settings: "सेटिंग्स",
18
18
  brand: "फॉर्म",
19
19
  askForms: "प्रपत्र पूछें",
20
+ allForms: "सभी फॉर्म",
20
21
  team: "टीम",
21
22
  },
22
23
  settings: {
@@ -17,6 +17,7 @@ const messages = {
17
17
  settings: "設定",
18
18
  brand: "フォーム",
19
19
  askForms: "フォームに質問する",
20
+ allForms: "すべてのフォーム",
20
21
  team: "チーム",
21
22
  },
22
23
  settings: {
@@ -17,6 +17,7 @@ const messages = {
17
17
  settings: "설정",
18
18
  brand: "양식",
19
19
  askForms: "양식에 문의하기",
20
+ allForms: "모든 양식",
20
21
  team: "팀",
21
22
  },
22
23
  settings: {
@@ -17,6 +17,7 @@ const messages = {
17
17
  settings: "Configurações",
18
18
  brand: "Formularios",
19
19
  askForms: "Perguntar ao Forms",
20
+ allForms: "Todos os formulários",
20
21
  team: "Equipe",
21
22
  },
22
23
  settings: {
@@ -17,6 +17,7 @@ const messages = {
17
17
  settings: "设置",
18
18
  brand: "表单",
19
19
  askForms: "询问表单",
20
+ allForms: "所有表单",
20
21
  team: "团队",
21
22
  },
22
23
  settings: {
@@ -17,6 +17,7 @@ const messages = {
17
17
  settings: "設定",
18
18
  brand: "表單",
19
19
  askForms: "詢問表單",
20
+ allForms: "所有表單",
20
21
  team: "團隊",
21
22
  },
22
23
  settings: {
@@ -23,7 +23,14 @@ export function prewarmFormsRoutePath(path: string) {
23
23
  const pathname = parsePath(path);
24
24
  const jobs: Promise<unknown>[] = [];
25
25
 
26
- if (pathname === "/" || pathname === "/forms") {
26
+ if (pathname === "/" || pathname === "/ask") {
27
+ jobs.push(
28
+ prewarm("layout", () => import("@/routes/_app")),
29
+ prewarm("ask", () => import("@/routes/_app.ask")),
30
+ );
31
+ }
32
+
33
+ if (pathname === "/forms") {
27
34
  jobs.push(
28
35
  prewarm("layout", () => import("@/routes/_app")),
29
36
  prewarm("forms-index", () => import("@/routes/_app.forms._index")),
@@ -52,13 +59,6 @@ export function prewarmFormsRoutePath(path: string) {
52
59
  );
53
60
  }
54
61
 
55
- if (pathname === "/team") {
56
- jobs.push(
57
- prewarm("layout", () => import("@/routes/_app")),
58
- prewarm("team", () => import("@/routes/_app.team")),
59
- );
60
- }
61
-
62
62
  if (pathname.startsWith("/extensions")) {
63
63
  jobs.push(
64
64
  prewarm("layout", () => import("@/routes/_app")),
@@ -86,6 +86,7 @@ export function prewarmFormsRoutePath(path: string) {
86
86
 
87
87
  export function prewarmCommonFormsRoutes() {
88
88
  return Promise.all([
89
+ prewarmFormsRoutePath("/ask"),
89
90
  prewarmFormsRoutePath("/forms"),
90
91
  prewarmFormsRoutePath("/forms/__route_prewarm__?tab=edit"),
91
92
  prewarmFormsRoutePath("/forms/__route_prewarm__/responses"),
@@ -0,0 +1,70 @@
1
+ import {
2
+ AgentChatSurface,
3
+ markAgentChatHomeHandoff,
4
+ useT,
5
+ } from "@agent-native/core/client";
6
+ import { IconChartBar, IconDatabase, IconSettings } from "@tabler/icons-react";
7
+ import { useEffect } from "react";
8
+
9
+ import { scheduleFormsRoutePrewarm } from "@/lib/route-prewarm";
10
+ import { TAB_ID } from "@/lib/tab-id";
11
+
12
+ export function AskPage() {
13
+ const t = useT();
14
+
15
+ useEffect(() => {
16
+ function handleChatRunning(event: Event) {
17
+ const detail = (event as CustomEvent).detail;
18
+ if (detail?.isRunning === true) markAgentChatHomeHandoff("forms");
19
+ }
20
+
21
+ const cancelRoutePrewarm = scheduleFormsRoutePrewarm();
22
+ window.addEventListener("agentNative.chatRunning", handleChatRunning);
23
+ return () => {
24
+ cancelRoutePrewarm();
25
+ window.removeEventListener("agentNative.chatRunning", handleChatRunning);
26
+ };
27
+ }, []);
28
+
29
+ return (
30
+ <div className="flex h-full min-h-0 flex-col bg-background">
31
+ <AgentChatSurface
32
+ mode="page"
33
+ chatViewTransition
34
+ className="forms-ask-chat-panel bg-background shadow-none"
35
+ defaultMode="chat"
36
+ storageKey="forms"
37
+ browserTabId={TAB_ID}
38
+ showHeader={false}
39
+ showTabBar={false}
40
+ dynamicSuggestions={false}
41
+ suggestions={[]}
42
+ emptyStateText={t("home.emptyState")}
43
+ emptyStateDisplay="hidden"
44
+ centerComposerWhenEmpty
45
+ composerLayoutVariant="hero"
46
+ composerPlaceholder={t("home.composerPlaceholder")}
47
+ composerSlot={
48
+ <div className="forms-chat-intro">
49
+ <h1>{t("home.heading")}</h1>
50
+ <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>
64
+ </div>
65
+ </div>
66
+ }
67
+ />
68
+ </div>
69
+ );
70
+ }
@@ -269,26 +269,19 @@ export function FormsListPage() {
269
269
  if (isLoading) {
270
270
  return (
271
271
  <div className="p-3 sm:p-6 max-w-5xl mx-auto">
272
- <div className="grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
272
+ <div className="overflow-hidden rounded-lg border border-border bg-card">
273
273
  {Array.from({ length: 6 }).map((_, i) => (
274
274
  <div
275
275
  key={i}
276
- className="border border-border rounded-xl p-4 sm:p-5 bg-card"
276
+ className="grid gap-3 border-b border-border px-3 py-3 last:border-b-0 md:grid-cols-[minmax(0,1fr)_120px_120px_80px]"
277
277
  >
278
- <div className="flex items-start justify-between mb-3 gap-2">
279
- <div className="flex-1 min-w-0 space-y-2">
280
- <Skeleton className="h-4 w-3/4" />
281
- <Skeleton className="h-3 w-1/2" />
282
- </div>
283
- <Skeleton className="h-8 w-8 rounded-md shrink-0" />
284
- </div>
285
- <div className="flex items-center justify-between gap-2">
286
- <Skeleton className="h-4 w-14 rounded-full" />
287
- <div className="flex items-center gap-3">
288
- <Skeleton className="h-3 w-16" />
289
- <Skeleton className="h-3 w-10" />
290
- </div>
278
+ <div className="min-w-0 space-y-2">
279
+ <Skeleton className="h-4 w-3/4" />
280
+ <Skeleton className="h-3 w-1/2" />
291
281
  </div>
282
+ <Skeleton className="h-5 w-20 rounded-full" />
283
+ <Skeleton className="h-4 w-24" />
284
+ <Skeleton className="h-8 w-8 rounded-md md:ms-auto" />
292
285
  </div>
293
286
  ))}
294
287
  </div>
@@ -446,20 +439,32 @@ export function FormsListPage() {
446
439
  )}
447
440
  </div>
448
441
  ) : (
449
- <div className="grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
442
+ <div className="overflow-hidden rounded-lg border border-border bg-card">
450
443
  {forms.map((form: any) => {
451
444
  const selected = selectedIds.has(form.id);
445
+ const dateLabel =
446
+ isArchive && (form as any).deletedAt
447
+ ? t("forms.deletedDate", {
448
+ date: formatDate((form as any).deletedAt, {
449
+ month: "short",
450
+ day: "numeric",
451
+ }),
452
+ })
453
+ : formatDate(form.createdAt, {
454
+ month: "short",
455
+ day: "numeric",
456
+ });
452
457
 
453
458
  return (
454
459
  <div
455
460
  key={form.id}
456
461
  className={cn(
457
- "group relative border border-border rounded-xl p-4 sm:p-5 cursor-pointer bg-card",
462
+ "group grid cursor-pointer gap-3 border-b border-border px-3 py-3 last:border-b-0 md:grid-cols-[minmax(0,1fr)_110px_140px_88px_40px] md:items-center",
458
463
  isArchive
459
- ? "opacity-80 hover:opacity-100 hover:border-border"
460
- : "hover:border-primary/30",
461
- selectionMode && "hover:border-primary/40 hover:bg-accent/20",
462
- selected && "border-primary/60 ring-1 ring-primary/20",
464
+ ? "opacity-80 hover:opacity-100 hover:bg-accent/25"
465
+ : "hover:bg-accent/25",
466
+ selectionMode && "hover:bg-accent/30",
467
+ selected && "bg-accent/35 ring-1 ring-inset ring-primary/20",
463
468
  )}
464
469
  role="button"
465
470
  tabIndex={0}
@@ -493,36 +498,57 @@ export function FormsListPage() {
493
498
  }
494
499
  }}
495
500
  >
496
- <div className="flex items-start justify-between gap-2 mb-3 min-w-0">
497
- <div className="flex flex-1 items-start gap-2 min-w-0">
498
- {selectionMode && (
499
- <Checkbox
500
- checked={selected}
501
- onCheckedChange={() => toggleSelection(form.id)}
502
- onClick={(e) => e.stopPropagation()}
503
- aria-label={t("forms.selectForm", {
504
- title: form.title,
505
- })}
506
- className="mt-0.5 shrink-0"
501
+ <div className="flex min-w-0 items-start gap-2.5">
502
+ {selectionMode && (
503
+ <Checkbox
504
+ checked={selected}
505
+ onCheckedChange={() => toggleSelection(form.id)}
506
+ onClick={(e) => e.stopPropagation()}
507
+ aria-label={t("forms.selectForm", {
508
+ title: form.title,
509
+ })}
510
+ className="mt-0.5 shrink-0"
511
+ />
512
+ )}
513
+ <div className="min-w-0 flex-1">
514
+ <div className="flex min-w-0 items-center gap-2">
515
+ <h3 className="min-w-0 flex-1 truncate text-sm font-medium">
516
+ {form.title}
517
+ </h3>
518
+ <VisibilityBadge
519
+ visibility={(form as any).visibility}
520
+ className="shrink-0"
507
521
  />
508
- )}
509
- <div className="flex-1 min-w-0">
510
- <div className="flex items-center gap-2 min-w-0">
511
- <h3 className="font-medium truncate flex-1 min-w-0">
512
- {form.title}
513
- </h3>
514
- <VisibilityBadge
515
- visibility={(form as any).visibility}
516
- className="shrink-0"
517
- />
518
- </div>
519
- {form.description && (
520
- <p className="text-xs text-muted-foreground mt-0.5 truncate">
521
- {form.description}
522
- </p>
523
- )}
524
522
  </div>
523
+ {form.description && (
524
+ <p className="mt-0.5 truncate text-xs text-muted-foreground">
525
+ {form.description}
526
+ </p>
527
+ )}
525
528
  </div>
529
+ </div>
530
+
531
+ <div className="flex items-center md:justify-start">
532
+ <Badge
533
+ variant="outline"
534
+ className={cn("text-[10px]", statusColors[form.status])}
535
+ >
536
+ {form.status}
537
+ </Badge>
538
+ </div>
539
+
540
+ <div className="min-w-0 text-xs text-muted-foreground">
541
+ {t("responses.totalCount", {
542
+ count: form.responseCount ?? 0,
543
+ formattedCount: formatNumber(form.responseCount ?? 0),
544
+ })}
545
+ </div>
546
+
547
+ <div className="min-w-0 text-xs text-muted-foreground">
548
+ {dateLabel}
549
+ </div>
550
+
551
+ <div className="flex justify-end">
526
552
  {!selectionMode && (
527
553
  <DropdownMenu>
528
554
  <DropdownMenuTrigger
@@ -649,39 +675,6 @@ export function FormsListPage() {
649
675
  </DropdownMenu>
650
676
  )}
651
677
  </div>
652
-
653
- <div className="flex flex-wrap items-center justify-between gap-2">
654
- <Badge
655
- variant="outline"
656
- className={cn(
657
- "text-[10px] shrink-0",
658
- statusColors[form.status],
659
- )}
660
- >
661
- {form.status}
662
- </Badge>
663
- <div className="flex min-w-0 flex-wrap items-center justify-end gap-x-3 gap-y-1 text-xs text-muted-foreground">
664
- <span className="block min-w-0 max-w-full truncate">
665
- {t("responses.totalCount", {
666
- count: form.responseCount ?? 0,
667
- formattedCount: formatNumber(form.responseCount ?? 0),
668
- })}
669
- </span>
670
- <span className="block min-w-0 max-w-full truncate">
671
- {isArchive && (form as any).deletedAt
672
- ? t("forms.deletedDate", {
673
- date: formatDate((form as any).deletedAt, {
674
- month: "short",
675
- day: "numeric",
676
- }),
677
- })
678
- : formatDate(form.createdAt, {
679
- month: "short",
680
- day: "numeric",
681
- })}
682
- </span>
683
- </div>
684
- </div>
685
678
  </div>
686
679
  );
687
680
  })}
@@ -198,7 +198,7 @@ function OpenLinkInterceptor() {
198
198
  if (!path) return;
199
199
 
200
200
  event.preventDefault();
201
- if (location.pathname === "/" && path !== "/") {
201
+ if (location.pathname === "/ask" && path !== "/ask") {
202
202
  markAgentChatHomeHandoff("forms");
203
203
  }
204
204
  navigateWithAgentChatViewTransition(navigate, path);
@@ -0,0 +1,14 @@
1
+ import messages from "@/i18n/en-US";
2
+ import { AskPage } from "@/pages/AskPage";
3
+
4
+ export function meta() {
5
+ return [
6
+ {
7
+ title: `${messages.navigation.askForms} - ${messages.navigation.brand}`,
8
+ },
9
+ ];
10
+ }
11
+
12
+ export default function AskRoute() {
13
+ return <AskPage />;
14
+ }