@agent-native/core 0.127.3 → 0.128.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (457) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +101 -0
  3. package/corpus/core/README.md +5 -26
  4. package/corpus/core/docs/content/actions.mdx +47 -4
  5. package/corpus/core/docs/content/native-chat-ui.mdx +7 -0
  6. package/corpus/core/docs/content/organizations-teams-permissions.mdx +109 -3
  7. package/corpus/core/docs/content/template-design-collaboration-and-full-apps.mdx +15 -0
  8. package/corpus/core/docs/content/toolkit-org-team.mdx +72 -12
  9. package/corpus/core/package.json +2 -1
  10. package/corpus/core/src/a2a/artifact-response.ts +36 -29
  11. package/corpus/core/src/action.ts +83 -2
  12. package/corpus/core/src/chat-threads/store.ts +48 -43
  13. package/corpus/core/src/cli/skills-content/design-visual-edit-skill.ts +46 -3
  14. package/corpus/core/src/client/AgentPanel.tsx +26 -6
  15. package/corpus/core/src/client/AssistantChat.tsx +63 -7
  16. package/corpus/core/src/client/DefaultSpinner.tsx +29 -0
  17. package/corpus/core/src/client/org/TeamPage.tsx +161 -6
  18. package/corpus/core/src/client/org/hooks.ts +67 -0
  19. package/corpus/core/src/client/org/index.ts +9 -0
  20. package/corpus/core/src/client/transcription/use-live-transcription.ts +62 -10
  21. package/corpus/core/src/db/client.ts +42 -3
  22. package/corpus/core/src/db/ensure-additive-columns.ts +60 -33
  23. package/corpus/core/src/deploy/build.ts +31 -2
  24. package/corpus/core/src/mcp-client/routes.ts +10 -1
  25. package/corpus/core/src/org/app-roles-handlers.ts +152 -0
  26. package/corpus/core/src/org/app-roles.ts +355 -0
  27. package/corpus/core/src/org/index.ts +27 -1
  28. package/corpus/core/src/org/migrations.ts +22 -0
  29. package/corpus/core/src/org/plugin.ts +27 -0
  30. package/corpus/core/src/org/schema.ts +15 -0
  31. package/corpus/core/src/scripts/docs/search.ts +17 -0
  32. package/corpus/core/src/scripts/docs/source-search.ts +10 -0
  33. package/corpus/core/src/server/agent-chat/script-entries.ts +3 -0
  34. package/corpus/core/src/server/agent-chat-plugin.ts +53 -52
  35. package/corpus/core/src/server/builder-design-systems.ts +299 -82
  36. package/corpus/core/src/server/core-routes-plugin.ts +6 -1
  37. package/corpus/core/src/server/framework-request-handler.ts +44 -6
  38. package/corpus/core/src/server/index.ts +8 -0
  39. package/corpus/core/src/templates/default/.agents/skills/actions/SKILL.md +32 -0
  40. package/corpus/core/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +7 -0
  41. package/corpus/core/src/templates/default/.agents/skills/security/SKILL.md +31 -0
  42. package/corpus/core/src/templates/headless/.agents/skills/actions/SKILL.md +32 -0
  43. package/corpus/core/src/templates/workspace-core/.agents/skills/actions/SKILL.md +32 -0
  44. package/corpus/core/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +7 -0
  45. package/corpus/core/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +40 -0
  46. package/corpus/core/src/templates/workspace-core/.agents/skills/security/SKILL.md +31 -0
  47. package/corpus/core/src/templates/workspace-core/.agents/skills/sharing/SKILL.md +4 -0
  48. package/corpus/templates/analytics/.agents/skills/actions/SKILL.md +32 -0
  49. package/corpus/templates/analytics/.agents/skills/security/SKILL.md +31 -0
  50. package/corpus/templates/analytics/.agents/skills/sharing/SKILL.md +4 -0
  51. package/corpus/templates/analytics/_gitignore +2 -0
  52. package/corpus/templates/analytics/actions/data-source-status.ts +21 -12
  53. package/corpus/templates/analytics/app/global.css +7 -7
  54. package/corpus/templates/analytics/app/i18n-data.ts +30 -0
  55. package/corpus/templates/analytics/app/lib/data-source-status.ts +2 -1
  56. package/corpus/templates/analytics/app/pages/DataSources.tsx +54 -10
  57. package/corpus/templates/analytics/changelog/2026-07-28-analytics-pages-load-reliably-with-large-dashboard-workspaces.md +6 -0
  58. package/corpus/templates/analytics/changelog/2026-07-28-dashboard-loading-shimmer-now-flows-smoothly-in-one-directi.md +6 -0
  59. package/corpus/templates/analytics/server/lib/first-party-dashboard-repair.ts +5 -4
  60. package/corpus/templates/analytics/server/plugins/agent-chat.ts +54 -42
  61. package/corpus/templates/analytics/server/plugins/db.ts +1 -18
  62. package/corpus/templates/assets/.agents/skills/actions/SKILL.md +32 -0
  63. package/corpus/templates/assets/.agents/skills/security/SKILL.md +31 -0
  64. package/corpus/templates/assets/.agents/skills/sharing/SKILL.md +4 -0
  65. package/corpus/templates/assets/_gitignore +2 -0
  66. package/corpus/templates/brain/.agents/skills/actions/SKILL.md +32 -0
  67. package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +7 -0
  68. package/corpus/templates/brain/.agents/skills/security/SKILL.md +31 -0
  69. package/corpus/templates/brain/.agents/skills/sharing/SKILL.md +4 -0
  70. package/corpus/templates/calendar/.agents/skills/actions/SKILL.md +32 -0
  71. package/corpus/templates/calendar/.agents/skills/security/SKILL.md +31 -0
  72. package/corpus/templates/calendar/.agents/skills/sharing/SKILL.md +4 -0
  73. package/corpus/templates/calendar/_gitignore +2 -0
  74. package/corpus/templates/chat/.agents/skills/actions/SKILL.md +32 -0
  75. package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +7 -0
  76. package/corpus/templates/chat/.agents/skills/security/SKILL.md +31 -0
  77. package/corpus/templates/chat/.agents/skills/sharing/SKILL.md +4 -0
  78. package/corpus/templates/clips/.agents/skills/actions/SKILL.md +32 -0
  79. package/corpus/templates/clips/.agents/skills/security/SKILL.md +31 -0
  80. package/corpus/templates/clips/_gitignore +2 -0
  81. package/corpus/templates/clips/actions/request-transcript.ts +77 -11
  82. package/corpus/templates/clips/actions/save-browser-transcript.ts +28 -7
  83. package/corpus/templates/clips/app/routes/record.tsx +11 -3
  84. package/corpus/templates/clips/changelog/2026-07-28-browser-recordings-no-longer-save-a-truncated-transcript-as-.md +6 -0
  85. package/corpus/templates/clips/changelog/2026-07-28-browser-recordings-no-longer-stop-transcribing-partway-throu.md +6 -0
  86. package/corpus/templates/clips/changelog/2026-07-28-desktop-full-screen-clips-now-get-an-instant-local-transcrip.md +6 -0
  87. package/corpus/templates/clips/changelog/2026-07-28-long-transcriptions-no-longer-show-a-false-transcription-sto.md +6 -0
  88. package/corpus/templates/clips/changelog/2026-07-28-restarting-for-an-update-now-installs-the-newest-release-ins.md +6 -0
  89. package/corpus/templates/clips/changelog/2026-07-28-the-meeting-recording-pill-now-anchors-to-the-right-edge-of-.md +6 -0
  90. package/corpus/templates/clips/desktop/src/lib/audio-meter.ts +31 -2
  91. package/corpus/templates/clips/desktop/src/lib/recorder.ts +114 -13
  92. package/corpus/templates/clips/desktop/src/lib/updater.ts +12 -4
  93. package/corpus/templates/clips/desktop/src/overlays/live-audio-bars.tsx +40 -15
  94. package/corpus/templates/clips/desktop/src/styles.css +10 -7
  95. package/corpus/templates/clips/desktop/src-tauri/src/recording_indicator.rs +21 -14
  96. package/corpus/templates/clips/shared/transcript-status.ts +10 -0
  97. package/corpus/templates/content/.agents/skills/actions/SKILL.md +32 -0
  98. package/corpus/templates/content/.agents/skills/security/SKILL.md +31 -0
  99. package/corpus/templates/content/.agents/skills/sharing/SKILL.md +4 -0
  100. package/corpus/templates/content/_gitignore +2 -0
  101. package/corpus/templates/crm/.agents/skills/sharing/SKILL.md +4 -0
  102. package/corpus/templates/design/.agents/skills/actions/SKILL.md +32 -0
  103. package/corpus/templates/design/.agents/skills/security/SKILL.md +31 -0
  104. package/corpus/templates/design/.agents/skills/sharing/SKILL.md +4 -0
  105. package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +46 -3
  106. package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +7 -5
  107. package/corpus/templates/design/_gitignore +2 -0
  108. package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +2 -2
  109. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +7 -4
  110. package/corpus/templates/design/app/components/design/keyboard-shortcuts.ts +1 -1
  111. package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +10 -4
  112. package/corpus/templates/design/app/i18n-data.ts +10 -0
  113. package/corpus/templates/design/app/lib/builder-design-system-upload.ts +280 -0
  114. package/corpus/templates/design/app/lib/design-ui-events.ts +5 -0
  115. package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +90 -54
  116. package/corpus/templates/design/app/root.tsx +18 -1
  117. package/corpus/templates/design/changelog/2026-07-28-figma-fig-uploads-now-show-indexing-progress-and-an-open-in-.md +6 -0
  118. package/corpus/templates/design/changelog/2026-07-28-show-or-hide-design-editing-chrome-with-cmd-on-apple-devices.md +6 -0
  119. package/corpus/templates/design/server/handlers/design-system-decode-job-status.ts +49 -0
  120. package/corpus/templates/design/server/handlers/design-system-upload-start.ts +87 -0
  121. package/corpus/templates/design/server/handlers/index-design-system-sources.ts +82 -0
  122. package/corpus/templates/design/server/routes/api/design-system-decode-job-status.get.ts +1 -0
  123. package/corpus/templates/design/server/routes/api/design-system-upload-start.post.ts +1 -0
  124. package/corpus/templates/design/server/routes/api/index-design-system-sources.post.ts +1 -0
  125. package/corpus/templates/dispatch/.agents/skills/actions/SKILL.md +32 -0
  126. package/corpus/templates/dispatch/.agents/skills/security/SKILL.md +31 -0
  127. package/corpus/templates/dispatch/.agents/skills/sharing/SKILL.md +4 -0
  128. package/corpus/templates/dispatch/_gitignore +2 -0
  129. package/corpus/templates/forms/.agents/skills/actions/SKILL.md +32 -0
  130. package/corpus/templates/forms/.agents/skills/security/SKILL.md +31 -0
  131. package/corpus/templates/forms/.agents/skills/sharing/SKILL.md +4 -0
  132. package/corpus/templates/forms/_gitignore +2 -0
  133. package/corpus/templates/macros/.agents/skills/security/SKILL.md +31 -0
  134. package/corpus/templates/macros/.agents/skills/sharing/SKILL.md +4 -0
  135. package/corpus/templates/macros/_gitignore +2 -0
  136. package/corpus/templates/mail/.agents/skills/actions/SKILL.md +32 -0
  137. package/corpus/templates/mail/.agents/skills/security/SKILL.md +31 -0
  138. package/corpus/templates/mail/.agents/skills/sharing/SKILL.md +4 -0
  139. package/corpus/templates/mail/_gitignore +2 -0
  140. package/corpus/templates/plan/.agents/skills/actions/SKILL.md +32 -0
  141. package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +7 -0
  142. package/corpus/templates/plan/.agents/skills/security/SKILL.md +31 -0
  143. package/corpus/templates/plan/.agents/skills/sharing/SKILL.md +4 -0
  144. package/corpus/templates/plan/_gitignore +2 -0
  145. package/corpus/templates/slides/.agents/skills/actions/SKILL.md +32 -0
  146. package/corpus/templates/slides/.agents/skills/security/SKILL.md +31 -0
  147. package/corpus/templates/slides/.agents/skills/sharing/SKILL.md +4 -0
  148. package/corpus/templates/slides/_gitignore +2 -0
  149. package/corpus/templates/slides/app/components/design-system/DesignSystemSetup.tsx +126 -53
  150. package/corpus/templates/slides/app/components/design-system/builder-design-system-upload.ts +271 -0
  151. package/corpus/templates/slides/app/components/design-system/builder-index-response.ts +1 -1
  152. package/corpus/templates/slides/app/i18n/en-US.ts +1 -0
  153. package/corpus/templates/slides/server/handlers/design-system-decode-job-status.ts +49 -0
  154. package/corpus/templates/slides/server/handlers/design-system-upload-start.ts +87 -0
  155. package/corpus/templates/slides/server/handlers/index-design-system-sources.ts +79 -0
  156. package/corpus/templates/slides/server/routes/api/design-system-decode-job-status.get.ts +1 -0
  157. package/corpus/templates/slides/server/routes/api/design-system-upload-start.post.ts +1 -0
  158. package/corpus/templates/slides/server/routes/api/index-design-system-sources.post.ts +1 -0
  159. package/corpus/templates/tasks/.agents/skills/actions/SKILL.md +32 -0
  160. package/corpus/templates/tasks/.agents/skills/adding-a-feature/SKILL.md +7 -0
  161. package/corpus/templates/tasks/.agents/skills/security/SKILL.md +31 -0
  162. package/corpus/templates/tasks/.agents/skills/sharing/SKILL.md +4 -0
  163. package/corpus/templates/tasks/_gitignore +2 -0
  164. package/dist/a2a/artifact-response.d.ts.map +1 -1
  165. package/dist/a2a/artifact-response.js +30 -29
  166. package/dist/a2a/artifact-response.js.map +1 -1
  167. package/dist/action.d.ts +36 -0
  168. package/dist/action.d.ts.map +1 -1
  169. package/dist/action.js +37 -2
  170. package/dist/action.js.map +1 -1
  171. package/dist/chat-threads/store.d.ts +12 -0
  172. package/dist/chat-threads/store.d.ts.map +1 -1
  173. package/dist/chat-threads/store.js +48 -42
  174. package/dist/chat-threads/store.js.map +1 -1
  175. package/dist/cli/skills-content/design-visual-edit-skill.d.ts +1 -1
  176. package/dist/cli/skills-content/design-visual-edit-skill.d.ts.map +1 -1
  177. package/dist/cli/skills-content/design-visual-edit-skill.js +46 -3
  178. package/dist/cli/skills-content/design-visual-edit-skill.js.map +1 -1
  179. package/dist/client/AgentPanel.d.ts +3 -1
  180. package/dist/client/AgentPanel.d.ts.map +1 -1
  181. package/dist/client/AgentPanel.js +11 -9
  182. package/dist/client/AgentPanel.js.map +1 -1
  183. package/dist/client/AssistantChat.d.ts.map +1 -1
  184. package/dist/client/AssistantChat.js +57 -6
  185. package/dist/client/AssistantChat.js.map +1 -1
  186. package/dist/client/DefaultSpinner.d.ts +7 -0
  187. package/dist/client/DefaultSpinner.d.ts.map +1 -1
  188. package/dist/client/DefaultSpinner.js +25 -1
  189. package/dist/client/DefaultSpinner.js.map +1 -1
  190. package/dist/client/org/TeamPage.d.ts +13 -1
  191. package/dist/client/org/TeamPage.d.ts.map +1 -1
  192. package/dist/client/org/TeamPage.js +41 -11
  193. package/dist/client/org/TeamPage.js.map +1 -1
  194. package/dist/client/org/hooks.d.ts +37 -0
  195. package/dist/client/org/hooks.d.ts.map +1 -1
  196. package/dist/client/org/hooks.js +37 -0
  197. package/dist/client/org/hooks.js.map +1 -1
  198. package/dist/client/org/index.d.ts +3 -2
  199. package/dist/client/org/index.d.ts.map +1 -1
  200. package/dist/client/org/index.js +1 -1
  201. package/dist/client/org/index.js.map +1 -1
  202. package/dist/client/transcription/use-live-transcription.d.ts +8 -0
  203. package/dist/client/transcription/use-live-transcription.d.ts.map +1 -1
  204. package/dist/client/transcription/use-live-transcription.js +38 -11
  205. package/dist/client/transcription/use-live-transcription.js.map +1 -1
  206. package/dist/collab/routes.d.ts +1 -1
  207. package/dist/db/client.d.ts +12 -0
  208. package/dist/db/client.d.ts.map +1 -1
  209. package/dist/db/client.js +40 -3
  210. package/dist/db/client.js.map +1 -1
  211. package/dist/db/ensure-additive-columns.d.ts.map +1 -1
  212. package/dist/db/ensure-additive-columns.js +54 -32
  213. package/dist/db/ensure-additive-columns.js.map +1 -1
  214. package/dist/deploy/build.d.ts +1 -0
  215. package/dist/deploy/build.d.ts.map +1 -1
  216. package/dist/deploy/build.js +23 -2
  217. package/dist/deploy/build.js.map +1 -1
  218. package/dist/file-upload/actions/upload-image.d.ts +1 -1
  219. package/dist/mcp-client/routes.d.ts +3 -1
  220. package/dist/mcp-client/routes.d.ts.map +1 -1
  221. package/dist/mcp-client/routes.js +8 -2
  222. package/dist/mcp-client/routes.js.map +1 -1
  223. package/dist/notifications/routes.d.ts +1 -1
  224. package/dist/org/app-roles-handlers.d.ts +27 -0
  225. package/dist/org/app-roles-handlers.d.ts.map +1 -0
  226. package/dist/org/app-roles-handlers.js +125 -0
  227. package/dist/org/app-roles-handlers.js.map +1 -0
  228. package/dist/org/app-roles.d.ts +136 -0
  229. package/dist/org/app-roles.d.ts.map +1 -0
  230. package/dist/org/app-roles.js +216 -0
  231. package/dist/org/app-roles.js.map +1 -0
  232. package/dist/org/index.d.ts +4 -1
  233. package/dist/org/index.d.ts.map +1 -1
  234. package/dist/org/index.js +3 -1
  235. package/dist/org/index.js.map +1 -1
  236. package/dist/org/migrations.d.ts.map +1 -1
  237. package/dist/org/migrations.js +22 -0
  238. package/dist/org/migrations.js.map +1 -1
  239. package/dist/org/plugin.d.ts +2 -0
  240. package/dist/org/plugin.d.ts.map +1 -1
  241. package/dist/org/plugin.js +20 -0
  242. package/dist/org/plugin.js.map +1 -1
  243. package/dist/org/schema.d.ts +143 -0
  244. package/dist/org/schema.d.ts.map +1 -1
  245. package/dist/org/schema.js +14 -0
  246. package/dist/org/schema.js.map +1 -1
  247. package/dist/provider-api/actions/custom-provider-registration.d.ts +8 -8
  248. package/dist/provider-api/actions/provider-api.d.ts +4 -4
  249. package/dist/scripts/docs/search.d.ts.map +1 -1
  250. package/dist/scripts/docs/search.js +15 -0
  251. package/dist/scripts/docs/search.js.map +1 -1
  252. package/dist/scripts/docs/source-search.d.ts +7 -0
  253. package/dist/scripts/docs/source-search.d.ts.map +1 -1
  254. package/dist/scripts/docs/source-search.js +9 -0
  255. package/dist/scripts/docs/source-search.js.map +1 -1
  256. package/dist/secrets/routes.d.ts +9 -9
  257. package/dist/server/agent-chat/script-entries.d.ts.map +1 -1
  258. package/dist/server/agent-chat/script-entries.js +3 -0
  259. package/dist/server/agent-chat/script-entries.js.map +1 -1
  260. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  261. package/dist/server/agent-chat-plugin.js +46 -48
  262. package/dist/server/agent-chat-plugin.js.map +1 -1
  263. package/dist/server/builder-design-systems.d.ts +49 -0
  264. package/dist/server/builder-design-systems.d.ts.map +1 -1
  265. package/dist/server/builder-design-systems.js +221 -69
  266. package/dist/server/builder-design-systems.js.map +1 -1
  267. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  268. package/dist/server/core-routes-plugin.js +6 -1
  269. package/dist/server/core-routes-plugin.js.map +1 -1
  270. package/dist/server/framework-request-handler.d.ts.map +1 -1
  271. package/dist/server/framework-request-handler.js +42 -6
  272. package/dist/server/framework-request-handler.js.map +1 -1
  273. package/dist/server/index.d.ts +1 -1
  274. package/dist/server/index.d.ts.map +1 -1
  275. package/dist/server/index.js +1 -1
  276. package/dist/server/index.js.map +1 -1
  277. package/dist/server/realtime-token.d.ts +1 -1
  278. package/dist/templates/chat/.agents/skills/actions/SKILL.md +32 -0
  279. package/dist/templates/chat/.agents/skills/adding-a-feature/SKILL.md +7 -0
  280. package/dist/templates/chat/.agents/skills/security/SKILL.md +31 -0
  281. package/dist/templates/chat/.agents/skills/sharing/SKILL.md +4 -0
  282. package/dist/templates/default/.agents/skills/actions/SKILL.md +32 -0
  283. package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +7 -0
  284. package/dist/templates/default/.agents/skills/security/SKILL.md +31 -0
  285. package/dist/templates/headless/.agents/skills/actions/SKILL.md +32 -0
  286. package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +32 -0
  287. package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +7 -0
  288. package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +40 -0
  289. package/dist/templates/workspace-core/.agents/skills/security/SKILL.md +31 -0
  290. package/dist/templates/workspace-core/.agents/skills/sharing/SKILL.md +4 -0
  291. package/docs/content/actions.mdx +47 -4
  292. package/docs/content/native-chat-ui.mdx +7 -0
  293. package/docs/content/organizations-teams-permissions.mdx +109 -3
  294. package/docs/content/template-design-collaboration-and-full-apps.mdx +15 -0
  295. package/docs/content/toolkit-org-team.mdx +72 -12
  296. package/package.json +2 -1
  297. package/src/a2a/artifact-response.ts +36 -29
  298. package/src/action.ts +83 -2
  299. package/src/chat-threads/store.ts +48 -43
  300. package/src/cli/skills-content/design-visual-edit-skill.ts +46 -3
  301. package/src/client/AgentPanel.tsx +26 -6
  302. package/src/client/AssistantChat.tsx +63 -7
  303. package/src/client/DefaultSpinner.tsx +29 -0
  304. package/src/client/org/TeamPage.tsx +161 -6
  305. package/src/client/org/hooks.ts +67 -0
  306. package/src/client/org/index.ts +9 -0
  307. package/src/client/transcription/use-live-transcription.ts +62 -10
  308. package/src/db/client.ts +42 -3
  309. package/src/db/ensure-additive-columns.ts +60 -33
  310. package/src/deploy/build.ts +31 -2
  311. package/src/mcp-client/routes.ts +10 -1
  312. package/src/org/app-roles-handlers.ts +152 -0
  313. package/src/org/app-roles.ts +355 -0
  314. package/src/org/index.ts +27 -1
  315. package/src/org/migrations.ts +22 -0
  316. package/src/org/plugin.ts +27 -0
  317. package/src/org/schema.ts +15 -0
  318. package/src/scripts/docs/search.ts +17 -0
  319. package/src/scripts/docs/source-search.ts +10 -0
  320. package/src/server/agent-chat/script-entries.ts +3 -0
  321. package/src/server/agent-chat-plugin.ts +53 -52
  322. package/src/server/builder-design-systems.ts +299 -82
  323. package/src/server/core-routes-plugin.ts +6 -1
  324. package/src/server/framework-request-handler.ts +44 -6
  325. package/src/server/index.ts +8 -0
  326. package/src/templates/chat/.agents/skills/actions/SKILL.md +32 -0
  327. package/src/templates/chat/.agents/skills/adding-a-feature/SKILL.md +7 -0
  328. package/src/templates/chat/.agents/skills/security/SKILL.md +31 -0
  329. package/src/templates/chat/.agents/skills/sharing/SKILL.md +4 -0
  330. package/src/templates/default/.agents/skills/actions/SKILL.md +32 -0
  331. package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +7 -0
  332. package/src/templates/default/.agents/skills/security/SKILL.md +31 -0
  333. package/src/templates/headless/.agents/skills/actions/SKILL.md +32 -0
  334. package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +32 -0
  335. package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +7 -0
  336. package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +40 -0
  337. package/src/templates/workspace-core/.agents/skills/security/SKILL.md +31 -0
  338. package/src/templates/workspace-core/.agents/skills/sharing/SKILL.md +4 -0
  339. package/corpus/core/src/templates/chat/.agents/skills/actions/SKILL.md +0 -530
  340. package/corpus/core/src/templates/chat/.agents/skills/adding-a-feature/SKILL.md +0 -191
  341. package/corpus/core/src/templates/chat/.agents/skills/agent-native-docs/SKILL.md +0 -115
  342. package/corpus/core/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +0 -177
  343. package/corpus/core/src/templates/chat/.agents/skills/capture-learnings/SKILL.md +0 -89
  344. package/corpus/core/src/templates/chat/.agents/skills/create-skill/SKILL.md +0 -221
  345. package/corpus/core/src/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +0 -220
  346. package/corpus/core/src/templates/chat/.agents/skills/delegate-to-agent/SKILL.md +0 -263
  347. package/corpus/core/src/templates/chat/.agents/skills/feature-flags/SKILL.md +0 -169
  348. package/corpus/core/src/templates/chat/.agents/skills/frontend-design/SKILL.md +0 -174
  349. package/corpus/core/src/templates/chat/.agents/skills/real-time-sync/SKILL.md +0 -232
  350. package/corpus/core/src/templates/chat/.agents/skills/security/SKILL.md +0 -282
  351. package/corpus/core/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +0 -119
  352. package/corpus/core/src/templates/chat/.agents/skills/shadcn-ui/SKILL.md +0 -123
  353. package/corpus/core/src/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +0 -122
  354. package/corpus/core/src/templates/chat/.env.example +0 -5
  355. package/corpus/core/src/templates/chat/.ignore +0 -0
  356. package/corpus/core/src/templates/chat/.oxfmtrc.json +0 -8
  357. package/corpus/core/src/templates/chat/AGENTS.md +0 -77
  358. package/corpus/core/src/templates/chat/CHANGELOG.md +0 -10
  359. package/corpus/core/src/templates/chat/DEVELOPING.md +0 -185
  360. package/corpus/core/src/templates/chat/README.md +0 -32
  361. package/corpus/core/src/templates/chat/_gitignore +0 -46
  362. package/corpus/core/src/templates/chat/actions/hello.ts +0 -13
  363. package/corpus/core/src/templates/chat/actions/navigate.ts +0 -41
  364. package/corpus/core/src/templates/chat/actions/run.ts +0 -2
  365. package/corpus/core/src/templates/chat/actions/view-screen.ts +0 -31
  366. package/corpus/core/src/templates/chat/app/components/layout/Header.tsx +0 -60
  367. package/corpus/core/src/templates/chat/app/components/layout/Layout.tsx +0 -188
  368. package/corpus/core/src/templates/chat/app/components/layout/Sidebar.tsx +0 -505
  369. package/corpus/core/src/templates/chat/app/components/ui/button.tsx +0 -1
  370. package/corpus/core/src/templates/chat/app/components/ui/card.tsx +0 -1
  371. package/corpus/core/src/templates/chat/app/components/ui/dropdown-menu.tsx +0 -1
  372. package/corpus/core/src/templates/chat/app/components/ui/input.tsx +0 -1
  373. package/corpus/core/src/templates/chat/app/components/ui/label.tsx +0 -1
  374. package/corpus/core/src/templates/chat/app/components/ui/sheet.tsx +0 -1
  375. package/corpus/core/src/templates/chat/app/components/ui/toolkit-provider.tsx +0 -17
  376. package/corpus/core/src/templates/chat/app/components/ui/tooltip.tsx +0 -1
  377. package/corpus/core/src/templates/chat/app/design-system.ts +0 -3
  378. package/corpus/core/src/templates/chat/app/entry.client.tsx +0 -22
  379. package/corpus/core/src/templates/chat/app/entry.server.tsx +0 -10
  380. package/corpus/core/src/templates/chat/app/global.css +0 -93
  381. package/corpus/core/src/templates/chat/app/hooks/use-navigation-state.ts +0 -93
  382. package/corpus/core/src/templates/chat/app/i18n/ar-SA.ts +0 -68
  383. package/corpus/core/src/templates/chat/app/i18n/de-DE.ts +0 -71
  384. package/corpus/core/src/templates/chat/app/i18n/en-US.ts +0 -70
  385. package/corpus/core/src/templates/chat/app/i18n/es-ES.ts +0 -71
  386. package/corpus/core/src/templates/chat/app/i18n/fr-FR.ts +0 -71
  387. package/corpus/core/src/templates/chat/app/i18n/hi-IN.ts +0 -69
  388. package/corpus/core/src/templates/chat/app/i18n/index.ts +0 -34
  389. package/corpus/core/src/templates/chat/app/i18n/ja-JP.ts +0 -70
  390. package/corpus/core/src/templates/chat/app/i18n/ko-KR.ts +0 -70
  391. package/corpus/core/src/templates/chat/app/i18n/pt-BR.ts +0 -71
  392. package/corpus/core/src/templates/chat/app/i18n/zh-CN.ts +0 -66
  393. package/corpus/core/src/templates/chat/app/i18n/zh-TW.ts +0 -66
  394. package/corpus/core/src/templates/chat/app/i18n-data.ts +0 -556
  395. package/corpus/core/src/templates/chat/app/lib/agent-page.tsx +0 -49
  396. package/corpus/core/src/templates/chat/app/lib/app-config.ts +0 -11
  397. package/corpus/core/src/templates/chat/app/lib/tab-id.ts +0 -1
  398. package/corpus/core/src/templates/chat/app/lib/utils.ts +0 -1
  399. package/corpus/core/src/templates/chat/app/root.tsx +0 -173
  400. package/corpus/core/src/templates/chat/app/routes/_index.tsx +0 -94
  401. package/corpus/core/src/templates/chat/app/routes/agent.tsx +0 -24
  402. package/corpus/core/src/templates/chat/app/routes/chat.$threadId.tsx +0 -1
  403. package/corpus/core/src/templates/chat/app/routes/database.tsx +0 -17
  404. package/corpus/core/src/templates/chat/app/routes/extensions.$id.$slug.tsx +0 -2
  405. package/corpus/core/src/templates/chat/app/routes/extensions.$id.tsx +0 -11
  406. package/corpus/core/src/templates/chat/app/routes/extensions._index.tsx +0 -11
  407. package/corpus/core/src/templates/chat/app/routes/extensions.tsx +0 -5
  408. package/corpus/core/src/templates/chat/app/routes/observability.tsx +0 -19
  409. package/corpus/core/src/templates/chat/app/routes/settings.tsx +0 -89
  410. package/corpus/core/src/templates/chat/app/routes/team.tsx +0 -11
  411. package/corpus/core/src/templates/chat/app/routes.ts +0 -4
  412. package/corpus/core/src/templates/chat/app/vite-env.d.ts +0 -6
  413. package/corpus/core/src/templates/chat/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +0 -6
  414. package/corpus/core/src/templates/chat/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +0 -6
  415. package/corpus/core/src/templates/chat/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +0 -6
  416. package/corpus/core/src/templates/chat/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +0 -6
  417. package/corpus/core/src/templates/chat/changelog/2026-06-29-chat-layouts-adapt-when-the-agent-sidebar-is-open.md +0 -6
  418. package/corpus/core/src/templates/chat/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +0 -5
  419. package/corpus/core/src/templates/chat/changelog/2026-07-10-chat-now-makes-ai-connection-setup-clear-without-shifting-th.md +0 -6
  420. package/corpus/core/src/templates/chat/changelog/2026-07-13-a-full-agent-page-now-brings-context-files-connections-jobs-.md +0 -6
  421. package/corpus/core/src/templates/chat/changelog/2026-07-14-chat-opens-reliably-on-hosted-deployments-instead-of-failing.md +0 -6
  422. package/corpus/core/src/templates/chat/changelog/2026-07-14-fixed-chat-template-startup-with-older-core-versions.md +0 -6
  423. package/corpus/core/src/templates/chat/changelog/2026-07-15-chat-navigation-focuses-on-chat-and-agent.md +0 -6
  424. package/corpus/core/src/templates/chat/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +0 -6
  425. package/corpus/core/src/templates/chat/changelog/2026-07-22-compact-sidebar-footer.md +0 -6
  426. package/corpus/core/src/templates/chat/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +0 -6
  427. package/corpus/core/src/templates/chat/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +0 -6
  428. package/corpus/core/src/templates/chat/changelog/2026-07-22-recent-chats-are-easier-to-scan-and-expand.md +0 -6
  429. package/corpus/core/src/templates/chat/changelog/2026-07-23-full-page-chat-is-better-centered-with-quieter-chat-history-.md +0 -6
  430. package/corpus/core/src/templates/chat/changelog/2026-07-24-borderless-secondary-surfaces.md +0 -6
  431. package/corpus/core/src/templates/chat/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +0 -6
  432. package/corpus/core/src/templates/chat/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +0 -6
  433. package/corpus/core/src/templates/chat/components.json +0 -20
  434. package/corpus/core/src/templates/chat/learnings.defaults.md +0 -5
  435. package/corpus/core/src/templates/chat/netlify.toml +0 -11
  436. package/corpus/core/src/templates/chat/package.json +0 -92
  437. package/corpus/core/src/templates/chat/public/agent-native-icon-dark.svg +0 -10
  438. package/corpus/core/src/templates/chat/public/agent-native-icon-light.svg +0 -10
  439. package/corpus/core/src/templates/chat/public/agent-native-logo-dark.svg +0 -21
  440. package/corpus/core/src/templates/chat/public/agent-native-logo-light.svg +0 -21
  441. package/corpus/core/src/templates/chat/public/favicon.svg +0 -1
  442. package/corpus/core/src/templates/chat/public/icon-180.svg +0 -1
  443. package/corpus/core/src/templates/chat/public/icon-192.svg +0 -1
  444. package/corpus/core/src/templates/chat/public/icon-512.svg +0 -1
  445. package/corpus/core/src/templates/chat/public/manifest.json +0 -21
  446. package/corpus/core/src/templates/chat/react-router.config.ts +0 -7
  447. package/corpus/core/src/templates/chat/server/middleware/auth.ts +0 -15
  448. package/corpus/core/src/templates/chat/server/plugins/agent-chat.ts +0 -21
  449. package/corpus/core/src/templates/chat/server/plugins/auth.ts +0 -17
  450. package/corpus/core/src/templates/chat/server/routes/[...page].get.ts +0 -5
  451. package/corpus/core/src/templates/chat/ssr-entry.ts +0 -15
  452. package/corpus/core/src/templates/chat/tsconfig.json +0 -21
  453. package/corpus/core/src/templates/chat/vite.config.ts +0 -19
  454. package/corpus/templates/design/server/handlers/index-design-system-with-builder.ts +0 -151
  455. package/corpus/templates/design/server/routes/api/index-design-system-with-builder.post.ts +0 -1
  456. package/corpus/templates/slides/server/handlers/index-design-system-with-builder.ts +0 -119
  457. package/corpus/templates/slides/server/routes/api/index-design-system-with-builder.post.ts +0 -1
@@ -1,188 +0,0 @@
1
- import {
2
- AgentSidebar,
3
- focusAgentChat,
4
- isAgentChatHomeHandoffActive,
5
- navigateWithAgentChatViewTransition,
6
- useAgentChatHomeHandoff,
7
- useAgentChatHomeHandoffLinks,
8
- } from "@agent-native/core/client/agent-chat";
9
- import { useT } from "@agent-native/core/client/i18n";
10
- import { HeaderActionsProvider } from "@agent-native/toolkit/app-shell";
11
- import { IconMenu2 } from "@tabler/icons-react";
12
- import { useState, useEffect } from "react";
13
- import { useLocation, useNavigate } from "react-router";
14
-
15
- import { Button } from "@/components/ui/button";
16
- import {
17
- Sheet,
18
- SheetContent,
19
- SheetDescription,
20
- SheetTitle,
21
- } from "@/components/ui/sheet";
22
- import { APP_TITLE } from "@/lib/app-config";
23
- import { TAB_ID } from "@/lib/tab-id";
24
-
25
- import { Header } from "./Header";
26
- import { Sidebar } from "./Sidebar";
27
-
28
- interface LayoutProps {
29
- children: React.ReactNode;
30
- }
31
-
32
- const SIDEBAR_COLLAPSE_KEY = "chat.sidebar.collapsed";
33
-
34
- /**
35
- * Routes whose page renders its own toolbar. Layout still wraps these with the
36
- * left Sidebar and agent surfaces but skips the global Header so they don't
37
- * double-stack chrome.
38
- */
39
- function routeOwnsToolbar(pathname: string): boolean {
40
- return (
41
- pathname === "/" ||
42
- pathname.startsWith("/chat/") ||
43
- pathname === "/database" ||
44
- pathname.startsWith("/extensions")
45
- );
46
- }
47
-
48
- export function Layout({ children }: LayoutProps) {
49
- const location = useLocation();
50
- const navigate = useNavigate();
51
- const t = useT();
52
- const [mobileSidebarOpen, setMobileSidebarOpen] = useState(false);
53
- const [sidebarCollapsed, setSidebarCollapsed] = useState(true);
54
- const isChatRoute =
55
- location.pathname === "/" || location.pathname.startsWith("/chat/");
56
- const chatHomeHandoffActive = useAgentChatHomeHandoff({
57
- storageKey: "chat",
58
- activePath: location.pathname,
59
- enabled: !isChatRoute,
60
- });
61
- const chatHomeHandoffPending = isAgentChatHomeHandoffActive("chat");
62
- useAgentChatHomeHandoffLinks({
63
- storageKey: "chat",
64
- isChatPath: (pathname) => pathname === "/" || pathname.startsWith("/chat/"),
65
- requireActiveHandoff: true,
66
- });
67
-
68
- useEffect(() => {
69
- setMobileSidebarOpen(false);
70
- }, [location.pathname]);
71
-
72
- useEffect(() => {
73
- const closeMobileSidebar = () => setMobileSidebarOpen(false);
74
- window.addEventListener("agent-chat:open-thread", closeMobileSidebar);
75
- return () => {
76
- window.removeEventListener("agent-chat:open-thread", closeMobileSidebar);
77
- };
78
- }, []);
79
-
80
- useEffect(() => {
81
- try {
82
- const stored = window.localStorage.getItem(SIDEBAR_COLLAPSE_KEY);
83
- if (stored !== null) setSidebarCollapsed(stored === "1");
84
- } catch {
85
- // Ignore storage access errors; the default collapsed state still works.
86
- }
87
- }, []);
88
-
89
- useEffect(() => {
90
- try {
91
- window.localStorage.setItem(
92
- SIDEBAR_COLLAPSE_KEY,
93
- sidebarCollapsed ? "1" : "0",
94
- );
95
- } catch {
96
- // Ignore storage access errors.
97
- }
98
- }, [sidebarCollapsed]);
99
-
100
- const ownsToolbar = routeOwnsToolbar(location.pathname);
101
- function openAskAgentFullscreen() {
102
- focusAgentChat();
103
- navigateWithAgentChatViewTransition(navigate, "/");
104
- }
105
-
106
- const contentFrame = (
107
- <div className="flex h-full min-w-0 flex-1 flex-col overflow-hidden">
108
- {isChatRoute ? (
109
- <div className="flex h-12 shrink-0 items-center gap-3 border-b border-border bg-card px-3 md:hidden">
110
- <Button
111
- type="button"
112
- variant="ghost"
113
- size="icon"
114
- onClick={() => setMobileSidebarOpen(true)}
115
- aria-label={t("navigation.openNavigation")}
116
- >
117
- <IconMenu2 className="size-4" />
118
- </Button>
119
- <span className="truncate text-sm font-semibold">{APP_TITLE}</span>
120
- </div>
121
- ) : ownsToolbar ? (
122
- <div className="flex h-12 shrink-0 items-center border-b border-border px-4 md:hidden">
123
- <button
124
- type="button"
125
- onClick={() => setMobileSidebarOpen(true)}
126
- aria-label={t("navigation.openNavigation")}
127
- className="flex h-9 w-9 cursor-pointer items-center justify-center rounded-md text-muted-foreground hover:bg-accent hover:text-foreground"
128
- >
129
- <IconMenu2 className="h-4 w-4" />
130
- </button>
131
- </div>
132
- ) : (
133
- <Header onOpenMobileSidebar={() => setMobileSidebarOpen(true)} />
134
- )}
135
- <main className="agent-native-app-main min-w-0 flex-1 overflow-y-auto overscroll-contain">
136
- {children}
137
- </main>
138
- </div>
139
- );
140
-
141
- return (
142
- <HeaderActionsProvider>
143
- <div className="agent-layout-shell flex h-screen w-full overflow-hidden bg-background text-foreground">
144
- <div className="agent-layout-left-drawer hidden md:block">
145
- <Sidebar
146
- collapsed={sidebarCollapsed}
147
- onCollapsedChange={setSidebarCollapsed}
148
- />
149
- </div>
150
- <Sheet open={mobileSidebarOpen} onOpenChange={setMobileSidebarOpen}>
151
- <SheetContent side="left" className="p-0 w-[260px]">
152
- <SheetTitle className="sr-only">
153
- {t("navigation.navigation")}
154
- </SheetTitle>
155
- <SheetDescription className="sr-only">
156
- {t("navigation.navigationDescription")}
157
- </SheetDescription>
158
- <Sidebar collapsed={false} collapsible={false} />
159
- </SheetContent>
160
- </Sheet>
161
- {isChatRoute ? (
162
- <div className="agent-layout-main-surface flex min-w-0 flex-1 overflow-hidden">
163
- {contentFrame}
164
- </div>
165
- ) : (
166
- <AgentSidebar
167
- position="right"
168
- chatViewTransition
169
- chatViewTransitionHandoff={chatHomeHandoffPending}
170
- storageKey="chat"
171
- browserTabId={TAB_ID}
172
- openOnChatRunning={chatHomeHandoffActive}
173
- onFullscreenRequest={openAskAgentFullscreen}
174
- emptyStateText={t("chat.inspectEmptyState")}
175
- agentPageHref="/agent"
176
- suggestions={[
177
- t("chat.inspectSuggestionCapabilities"),
178
- t("chat.inspectSuggestionHello"),
179
- t("chat.inspectSuggestionAction"),
180
- ]}
181
- >
182
- {contentFrame}
183
- </AgentSidebar>
184
- )}
185
- </div>
186
- </HeaderActionsProvider>
187
- );
188
- }
@@ -1,505 +0,0 @@
1
- import {
2
- navigateWithAgentChatViewTransition,
3
- useChatThreads,
4
- type ChatThreadSummary,
5
- } from "@agent-native/core/client/agent-chat";
6
- import { appPath } from "@agent-native/core/client/api-path";
7
- import { LanguagePicker, useT } from "@agent-native/core/client/i18n";
8
- import { openCommandMenu } from "@agent-native/core/client/navigation";
9
- import { OrgSwitcher } from "@agent-native/core/client/org";
10
- import { FeedbackButton } from "@agent-native/core/client/ui";
11
- import { SidebarFooterActions } from "@agent-native/toolkit/app-shell";
12
- import {
13
- ChatHistoryRail,
14
- type ChatHistoryItem,
15
- } from "@agent-native/toolkit/chat-history";
16
- import {
17
- IconLayoutSidebarLeftCollapse,
18
- IconLayoutSidebarLeftExpand,
19
- IconMessageCircle,
20
- IconSearch,
21
- IconSettings,
22
- } from "@tabler/icons-react";
23
- import { useEffect, useMemo } from "react";
24
- import { Link, useLocation, useNavigate } from "react-router";
25
- import { toast } from "sonner";
26
-
27
- import {
28
- Tooltip,
29
- TooltipContent,
30
- TooltipTrigger,
31
- } from "@/components/ui/tooltip";
32
- import { APP_TITLE } from "@/lib/app-config";
33
- import { cn } from "@/lib/utils";
34
-
35
- const navItems = [
36
- {
37
- icon: IconMessageCircle,
38
- labelKey: "navigation.chat",
39
- href: "/",
40
- view: "chat",
41
- },
42
- ];
43
-
44
- const bottomNavItems = [
45
- {
46
- icon: IconSettings,
47
- labelKey: "navigation.settings",
48
- href: "/settings",
49
- view: "settings",
50
- },
51
- ];
52
-
53
- const CHAT_STORAGE_KEY = "chat";
54
- const CHAT_ACTIVE_THREAD_KEY = `agent-chat-active-thread:${CHAT_STORAGE_KEY}`;
55
-
56
- interface SidebarProps {
57
- collapsed?: boolean;
58
- collapsible?: boolean;
59
- onCollapsedChange?: (collapsed: boolean) => void;
60
- }
61
-
62
- function formatThreadAge(updatedAt: number) {
63
- const diffMs = Math.max(0, Date.now() - updatedAt);
64
- const minutes = Math.floor(diffMs / 60_000);
65
- if (minutes < 1) return "now";
66
- if (minutes < 60) return `${minutes}m`;
67
- const hours = Math.floor(minutes / 60);
68
- if (hours < 24) return `${hours}h`;
69
- const days = Math.floor(hours / 24);
70
- if (days < 7) return `${days}d`;
71
- return new Date(updatedAt).toLocaleDateString([], {
72
- month: "short",
73
- day: "numeric",
74
- });
75
- }
76
-
77
- function threadTitle(thread: ChatThreadSummary) {
78
- return thread.title || thread.preview || "Untitled chat";
79
- }
80
-
81
- function threadUpdatedAt(thread: ChatThreadSummary) {
82
- return Number.isFinite(thread.updatedAt)
83
- ? thread.updatedAt
84
- : Number.isFinite(thread.createdAt)
85
- ? thread.createdAt
86
- : 0;
87
- }
88
-
89
- function compareThreads(a: ChatThreadSummary, b: ChatThreadSummary) {
90
- const aPinned = a.pinnedAt ?? 0;
91
- const bPinned = b.pinnedAt ?? 0;
92
- if (aPinned || bPinned) return bPinned - aPinned;
93
- return threadUpdatedAt(b) - threadUpdatedAt(a);
94
- }
95
-
96
- function persistedActiveThreadId() {
97
- try {
98
- return localStorage.getItem(CHAT_ACTIVE_THREAD_KEY);
99
- } catch {
100
- return null;
101
- }
102
- }
103
-
104
- function persistActiveThreadId(threadId: string) {
105
- try {
106
- localStorage.setItem(CHAT_ACTIVE_THREAD_KEY, threadId);
107
- } catch {}
108
- }
109
-
110
- function threadIdFromPath(pathname: string) {
111
- const match = pathname.match(/^\/chat\/([^/]+)/);
112
- if (!match) return null;
113
- try {
114
- const value = decodeURIComponent(match[1]).trim();
115
- return value || null;
116
- } catch {
117
- return null;
118
- }
119
- }
120
-
121
- function chatThreadPath(threadId: string) {
122
- return `/chat/${encodeURIComponent(threadId)}`;
123
- }
124
-
125
- function ChatThreadsSection({ open }: { open: boolean }) {
126
- const navigate = useNavigate();
127
- const location = useLocation();
128
- const t = useT();
129
- const {
130
- threads,
131
- activeThreadId,
132
- createThread,
133
- switchThread,
134
- pinThread,
135
- archiveThread,
136
- renameThread,
137
- refreshThreads,
138
- } = useChatThreads(undefined, CHAT_STORAGE_KEY, undefined, {
139
- autoCreate: false,
140
- restoreActiveThread: false,
141
- });
142
-
143
- const visibleThreads = useMemo(
144
- () =>
145
- threads
146
- .filter((thread) => thread.messageCount > 0 && !thread.archivedAt)
147
- .sort(compareThreads)
148
- .slice(0, 15),
149
- [threads],
150
- );
151
- const displayedActiveThreadId =
152
- threadIdFromPath(location.pathname) ??
153
- (location.pathname === "/" ? null : activeThreadId);
154
- const chatItems = useMemo<ChatHistoryItem[]>(
155
- () =>
156
- visibleThreads.map((thread) => ({
157
- id: thread.id,
158
- title: threadTitle(thread),
159
- titleText: threadTitle(thread),
160
- timestamp:
161
- thread.id === displayedActiveThreadId
162
- ? undefined
163
- : formatThreadAge(threadUpdatedAt(thread)),
164
- pinned: Boolean(thread.pinnedAt),
165
- })),
166
- [displayedActiveThreadId, visibleThreads],
167
- );
168
-
169
- useEffect(() => {
170
- const refresh = () => refreshThreads();
171
- const handleRunning = (event: Event) => {
172
- const detail = (event as CustomEvent).detail as
173
- | { isRunning?: unknown }
174
- | undefined;
175
- if (typeof detail?.isRunning === "boolean") refreshThreads();
176
- };
177
-
178
- window.addEventListener("agent-chat:threads-updated", refresh);
179
- window.addEventListener("agentNative.chatRunning", handleRunning);
180
- window.addEventListener("focus", refresh);
181
- return () => {
182
- window.removeEventListener("agent-chat:threads-updated", refresh);
183
- window.removeEventListener("agentNative.chatRunning", handleRunning);
184
- window.removeEventListener("focus", refresh);
185
- };
186
- }, [refreshThreads]);
187
-
188
- function openThread(threadId: string, options?: { isNew?: boolean }) {
189
- switchThread(threadId);
190
- persistActiveThreadId(threadId);
191
- navigateWithAgentChatViewTransition(
192
- navigate,
193
- options?.isNew ? "/" : chatThreadPath(threadId),
194
- );
195
- window.requestAnimationFrame(() => {
196
- window.dispatchEvent(
197
- new CustomEvent("agent-chat:open-thread", {
198
- detail: { threadId, newThread: options?.isNew === true },
199
- }),
200
- );
201
- });
202
- }
203
-
204
- async function handleNewChat() {
205
- const threadId = await createThread();
206
- if (threadId) openThread(threadId, { isNew: true });
207
- }
208
-
209
- async function handleArchiveThread(threadId: string) {
210
- const wasActive =
211
- threadId === activeThreadId || threadId === persistedActiveThreadId();
212
- const archived = await archiveThread(threadId);
213
- if (!archived) {
214
- toast.error(t("chat.archiveFailed"));
215
- return;
216
- }
217
- if (wasActive) {
218
- await handleNewChat();
219
- }
220
- }
221
-
222
- function handleRenameThread(threadId: string, title: string) {
223
- void renameThread(threadId, title).then((renamed) => {
224
- if (!renamed) toast.error(t("chat.renameFailed"));
225
- });
226
- }
227
-
228
- return (
229
- <div
230
- className="an-chat-history-rail__collapse"
231
- data-state={open ? "open" : "closed"}
232
- aria-hidden={!open}
233
- >
234
- <div className="ms-4">
235
- <ChatHistoryRail
236
- items={chatItems}
237
- activeId={displayedActiveThreadId}
238
- onSelect={(threadId) => openThread(threadId)}
239
- onNewChat={() => void handleNewChat()}
240
- railLabels={{
241
- newChat: t("chat.newChat"),
242
- showMore: t("chat.chats"),
243
- showLess: t("chat.chats"),
244
- }}
245
- renameMaxLength={160}
246
- onTogglePin={(threadId) => {
247
- const thread = visibleThreads.find((item) => item.id === threadId);
248
- if (thread) void pinThread(threadId, !thread.pinnedAt);
249
- }}
250
- onRename={handleRenameThread}
251
- onDelete={(threadId) => void handleArchiveThread(threadId)}
252
- labels={{
253
- options: (item) =>
254
- t("chat.optionsFor", { title: item.titleText ?? "" }),
255
- renameInput: (item) =>
256
- t("chat.renameThread", { title: item.titleText ?? "" }),
257
- rename: t("chat.renameChat"),
258
- pin: t("chat.pinChat"),
259
- unpin: t("chat.unpinChat"),
260
- delete: t("chat.archiveChat"),
261
- }}
262
- className="min-w-0"
263
- />
264
- </div>
265
- </div>
266
- );
267
- }
268
-
269
- export function Sidebar({
270
- collapsed = false,
271
- collapsible = true,
272
- onCollapsedChange,
273
- }: SidebarProps) {
274
- const location = useLocation();
275
- const navigate = useNavigate();
276
- const t = useT();
277
- const isChatRoute =
278
- location.pathname === "/" || location.pathname.startsWith("/chat/");
279
- const ToggleIcon = collapsed
280
- ? IconLayoutSidebarLeftExpand
281
- : IconLayoutSidebarLeftCollapse;
282
- const navClass = ({ isActive }: { isActive: boolean }) =>
283
- cn(
284
- "flex items-center text-sm transition-colors",
285
- collapsed
286
- ? "relative h-10 w-full justify-center rounded-none px-0"
287
- : "h-9 rounded-md gap-3 px-3",
288
- isActive
289
- ? collapsed
290
- ? "bg-sidebar-accent text-sidebar-accent-foreground"
291
- : "bg-sidebar-accent text-sidebar-accent-foreground"
292
- : collapsed
293
- ? "text-sidebar-foreground/70 hover:bg-sidebar-accent/55 hover:text-sidebar-accent-foreground"
294
- : "text-sidebar-foreground hover:bg-sidebar-accent/65 hover:text-sidebar-accent-foreground",
295
- );
296
- const collapseButton = collapsible ? (
297
- <Tooltip>
298
- <TooltipTrigger asChild>
299
- <button
300
- type="button"
301
- onClick={() => onCollapsedChange?.(!collapsed)}
302
- className={cn(
303
- "flex shrink-0 items-center justify-center rounded-md text-sidebar-foreground/65 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
304
- collapsed ? "size-8" : "size-7",
305
- )}
306
- aria-label={
307
- collapsed
308
- ? t("navigation.expandSidebar")
309
- : t("navigation.collapseSidebar")
310
- }
311
- >
312
- <ToggleIcon className="size-4" />
313
- </button>
314
- </TooltipTrigger>
315
- <TooltipContent side="right">
316
- {collapsed
317
- ? t("navigation.expandSidebar")
318
- : t("navigation.collapseSidebar")}
319
- </TooltipContent>
320
- </Tooltip>
321
- ) : null;
322
- const searchButton = (
323
- <Tooltip>
324
- <TooltipTrigger asChild>
325
- <button
326
- type="button"
327
- onClick={openCommandMenu}
328
- aria-label={t("root.commandSearch")}
329
- className="flex size-8 items-center justify-center rounded-md text-sidebar-foreground/65 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
330
- >
331
- <IconSearch className="size-4" />
332
- </button>
333
- </TooltipTrigger>
334
- <TooltipContent side="right">{t("root.commandSearch")}</TooltipContent>
335
- </Tooltip>
336
- );
337
- const translateButton = (
338
- <LanguagePicker variant="ghost-icon" label={t("settings.languageLabel")} />
339
- );
340
- const feedbackButton = (
341
- <FeedbackButton
342
- variant={collapsed ? "icon" : "sidebar"}
343
- side="right"
344
- className={collapsed ? "h-8 w-8" : "min-w-0"}
345
- />
346
- );
347
-
348
- return (
349
- <aside
350
- data-collapsed={collapsed ? "true" : "false"}
351
- className={cn(
352
- "flex h-full min-w-0 shrink-0 flex-col overflow-hidden border-e border-sidebar-border bg-sidebar text-sidebar-foreground transition-[width] duration-200 ease-out",
353
- collapsed ? "w-12" : "w-60",
354
- )}
355
- >
356
- <div
357
- className={cn(
358
- "flex shrink-0 items-center border-b border-sidebar-border",
359
- collapsed ? "h-12 justify-center px-0" : "h-14 px-3",
360
- )}
361
- >
362
- <Link
363
- to="/"
364
- className={cn(
365
- "flex min-w-0 items-center rounded outline-none focus-visible:ring-2 focus-visible:ring-ring",
366
- collapsed ? "size-7 justify-center" : "flex-1 gap-3",
367
- )}
368
- aria-label={collapsed ? APP_TITLE : undefined}
369
- >
370
- <img
371
- src={appPath("/agent-native-icon-light.svg")}
372
- alt=""
373
- aria-hidden="true"
374
- className="block h-4 w-auto shrink-0 dark:hidden"
375
- />
376
- <img
377
- src={appPath("/agent-native-icon-dark.svg")}
378
- alt=""
379
- aria-hidden="true"
380
- className="hidden h-4 w-auto shrink-0 dark:block"
381
- />
382
- <div className={cn("min-w-0", collapsed && "sr-only")}>
383
- <p className="truncate text-sm font-semibold text-sidebar-accent-foreground">
384
- {APP_TITLE}
385
- </p>
386
- </div>
387
- </Link>
388
- </div>
389
-
390
- <nav
391
- className={cn(
392
- "flex-1 overflow-y-auto",
393
- collapsed ? "px-0 py-2" : "px-2 py-3",
394
- )}
395
- >
396
- <div className={cn("grid", collapsed ? "gap-0" : "gap-1")}>
397
- {navItems.map((item) => {
398
- const Icon = item.icon;
399
- const isActive =
400
- item.href === "/"
401
- ? isChatRoute
402
- : location.pathname.startsWith(item.href);
403
- const link = (
404
- <Link
405
- to={item.href}
406
- onClick={(event) => {
407
- if (
408
- item.href === "/" &&
409
- !isChatRoute &&
410
- !event.metaKey &&
411
- !event.ctrlKey &&
412
- !event.shiftKey &&
413
- !event.altKey
414
- ) {
415
- event.preventDefault();
416
- navigateWithAgentChatViewTransition(navigate, "/");
417
- }
418
- }}
419
- className={navClass({ isActive })}
420
- aria-current={isActive ? "page" : undefined}
421
- aria-label={collapsed ? t(item.labelKey) : undefined}
422
- >
423
- <Icon className="size-4 shrink-0" />
424
- <span className={collapsed ? "sr-only" : "truncate"}>
425
- {t(item.labelKey)}
426
- </span>
427
- </Link>
428
- );
429
- return (
430
- <div key={item.href}>
431
- {collapsed ? (
432
- <Tooltip>
433
- <TooltipTrigger asChild>{link}</TooltipTrigger>
434
- <TooltipContent side="right">
435
- {t(item.labelKey)}
436
- </TooltipContent>
437
- </Tooltip>
438
- ) : (
439
- link
440
- )}
441
- {!collapsed && item.view === "chat" ? (
442
- <ChatThreadsSection open={isChatRoute} />
443
- ) : null}
444
- </div>
445
- );
446
- })}
447
- </div>
448
- </nav>
449
-
450
- <div className={cn("mt-auto shrink-0", collapsed && "py-2")}>
451
- <nav
452
- className={cn(
453
- "grid",
454
- collapsed ? "gap-0 px-1 py-1" : "gap-1 px-2 py-1",
455
- )}
456
- >
457
- {bottomNavItems.map((item) => {
458
- const Icon = item.icon;
459
- const isActive = location.pathname.startsWith(item.href);
460
- const link = (
461
- <Link
462
- to={item.href}
463
- className={navClass({ isActive })}
464
- aria-current={isActive ? "page" : undefined}
465
- aria-label={collapsed ? t(item.labelKey) : undefined}
466
- >
467
- <Icon className="size-4 shrink-0" />
468
- <span className={collapsed ? "sr-only" : "truncate"}>
469
- {t(item.labelKey)}
470
- </span>
471
- </Link>
472
- );
473
- return collapsed ? (
474
- <Tooltip key={item.href}>
475
- <TooltipTrigger asChild>{link}</TooltipTrigger>
476
- <TooltipContent side="right">{t(item.labelKey)}</TooltipContent>
477
- </Tooltip>
478
- ) : (
479
- <div key={item.href}>{link}</div>
480
- );
481
- })}
482
- </nav>
483
-
484
- <div className={cn(collapsed ? "px-1 py-1" : "px-3 py-2")}>
485
- <OrgSwitcher
486
- reserveSpace
487
- className={
488
- collapsed
489
- ? "h-8 justify-center px-0 [&>span]:sr-only [&>svg:last-child]:hidden"
490
- : undefined
491
- }
492
- />
493
- </div>
494
-
495
- <SidebarFooterActions
496
- collapsed={collapsed}
497
- feedback={feedbackButton}
498
- translate={translateButton}
499
- search={searchButton}
500
- collapse={collapseButton}
501
- />
502
- </div>
503
- </aside>
504
- );
505
- }
@@ -1 +0,0 @@
1
- export * from "@agent-native/toolkit/ui/button";
@@ -1 +0,0 @@
1
- export * from "@agent-native/toolkit/ui/card";
@@ -1 +0,0 @@
1
- export * from "@agent-native/toolkit/ui/dropdown-menu";
@@ -1 +0,0 @@
1
- export * from "@agent-native/toolkit/ui/input";