@agent-native/core 0.120.2 → 0.120.4

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 (278) hide show
  1. package/corpus/README.md +3 -3
  2. package/corpus/core/CHANGELOG.md +28 -0
  3. package/corpus/core/package.json +1 -1
  4. package/corpus/core/src/cli/context-xray-local.ts +1 -1
  5. package/corpus/core/src/cli/index.ts +63 -18
  6. package/corpus/core/src/cli/skills.ts +5 -0
  7. package/corpus/core/src/cli/telemetry.ts +118 -1
  8. package/corpus/core/src/client/AgentPanel.tsx +10 -0
  9. package/corpus/core/src/client/CommandMenu.tsx +13 -1
  10. package/corpus/core/src/client/agent-page/AgentTabsPage.tsx +39 -4
  11. package/corpus/core/src/client/analytics.ts +13 -0
  12. package/corpus/core/src/client/error-capture.ts +6 -1
  13. package/corpus/core/src/client/extensions/ExtensionsListPage.tsx +12 -5
  14. package/corpus/core/src/client/extensions/agent-native-extension-runtime.ts +1 -1
  15. package/corpus/core/src/client/navigation/index.ts +2 -0
  16. package/corpus/core/src/client/org/OrgSwitcher.tsx +14 -32
  17. package/corpus/core/src/client/settings/ExtensionsSettingsContent.tsx +1 -1
  18. package/corpus/core/src/extensions/theme.ts +1 -1
  19. package/corpus/core/src/localization/default-messages.ts +2 -0
  20. package/corpus/core/src/server/core-routes-plugin.ts +10 -1
  21. package/corpus/core/src/server/framework-request-handler.ts +17 -26
  22. package/corpus/core/src/styles/agent-native.css +13 -0
  23. package/corpus/core/src/templates/chat/app/components/layout/Layout.tsx +3 -0
  24. package/corpus/core/src/templates/chat/app/components/layout/Sidebar.tsx +78 -45
  25. package/corpus/core/src/templates/chat/app/global.css +1 -1
  26. package/corpus/core/src/templates/default/app/global.css +1 -1
  27. package/corpus/core/src/tracking/error-capture.ts +151 -0
  28. package/corpus/core/src/tracking/index.ts +5 -0
  29. package/corpus/templates/analytics/app/components/dashboard/CumulativeNetChart.tsx +1 -1
  30. package/corpus/templates/analytics/app/components/dashboard/DashboardHistoryPanel.tsx +1 -4
  31. package/corpus/templates/analytics/app/components/dashboard/DashboardPanelSkeleton.tsx +1 -1
  32. package/corpus/templates/analytics/app/components/dashboard/DataTable.tsx +1 -1
  33. package/corpus/templates/analytics/app/components/dashboard/DateRangePicker.tsx +2 -2
  34. package/corpus/templates/analytics/app/components/dashboard/MetricCard.tsx +1 -1
  35. package/corpus/templates/analytics/app/components/dashboard/RecentActivity.tsx +1 -1
  36. package/corpus/templates/analytics/app/components/dashboard/RevenueChart.tsx +1 -1
  37. package/corpus/templates/analytics/app/components/dashboard/RevenueComparisonChart.tsx +1 -1
  38. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +41 -9
  39. package/corpus/templates/analytics/app/components/dashboard/StatsCard.tsx +1 -1
  40. package/corpus/templates/analytics/app/components/dashboard/TimeSeriesChart.tsx +1 -1
  41. package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +2 -0
  42. package/corpus/templates/analytics/app/components/layout/Layout.tsx +28 -14
  43. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +152 -124
  44. package/corpus/templates/analytics/app/global.css +5 -5
  45. package/corpus/templates/analytics/app/lib/dashboard-report-capture.ts +42 -0
  46. package/corpus/templates/analytics/app/pages/adhoc/_shared/KpiChart.tsx +1 -1
  47. package/corpus/templates/analytics/app/pages/adhoc/explorer/components/ChartTypePicker.tsx +1 -1
  48. package/corpus/templates/analytics/app/pages/adhoc/explorer/components/DateRangePicker.tsx +1 -1
  49. package/corpus/templates/analytics/app/pages/adhoc/explorer/components/EventRow.tsx +1 -1
  50. package/corpus/templates/analytics/app/pages/adhoc/explorer/components/SqlPreview.tsx +2 -2
  51. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/DashboardFilterBar.tsx +3 -3
  52. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/EmailReportDialog.tsx +2 -2
  53. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +1 -1
  54. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +1 -1
  55. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +162 -51
  56. package/corpus/templates/analytics/app/root.tsx +28 -0
  57. package/corpus/templates/analytics/changelog/2026-07-24-analytics-charts-now-explain-slow-loads-and-offer-a-direct-r.md +6 -0
  58. package/corpus/templates/analytics/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  59. package/corpus/templates/analytics/changelog/2026-07-24-daily-dashboard-emails-now-load-signed-reports-more-reliably.md +6 -0
  60. package/corpus/templates/analytics/changelog/2026-07-24-manage-agent-is-clearly-marked-as-a-link-to-its-dedicated-pa.md +6 -0
  61. package/corpus/templates/analytics/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  62. package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +1 -1
  63. package/corpus/templates/analytics/server/db/schema.ts +5 -0
  64. package/corpus/templates/analytics/server/jobs/dashboard-report.ts +21 -0
  65. package/corpus/templates/analytics/server/lib/canonical-first-party-dashboard-repair.ts +11 -0
  66. package/corpus/templates/analytics/server/lib/dashboard-report-subscriptions.ts +54 -0
  67. package/corpus/templates/analytics/server/lib/dashboard-report.ts +235 -26
  68. package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +4 -1
  69. package/corpus/templates/analytics/server/plugins/db.ts +9 -0
  70. package/corpus/templates/analytics/shared/dashboard-report-timeouts.ts +1 -1
  71. package/corpus/templates/assets/app/components/asset/AssetPreviewDialog.tsx +376 -0
  72. package/corpus/templates/assets/app/components/create/RecentDraftsSection.tsx +14 -4
  73. package/corpus/templates/assets/app/components/layout/Layout.tsx +5 -0
  74. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +118 -74
  75. package/corpus/templates/assets/app/global.css +1 -1
  76. package/corpus/templates/assets/app/i18n-data.ts +10 -0
  77. package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +99 -10
  78. package/corpus/templates/assets/app/routes/library.tsx +21 -198
  79. package/corpus/templates/assets/changelog/2026-07-21-unified-asset-preview-click-any-asset-to-open-one-preview-wi.md +6 -0
  80. package/corpus/templates/assets/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  81. package/corpus/templates/assets/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  82. package/corpus/templates/brain/app/components/layout/Layout.tsx +3 -0
  83. package/corpus/templates/brain/app/components/layout/Sidebar.tsx +76 -43
  84. package/corpus/templates/brain/app/global.css +1 -1
  85. package/corpus/templates/brain/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  86. package/corpus/templates/brain/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  87. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +67 -52
  88. package/corpus/templates/calendar/app/global.css +1 -1
  89. package/corpus/templates/calendar/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  90. package/corpus/templates/calendar/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  91. package/corpus/templates/chat/app/components/layout/Layout.tsx +3 -0
  92. package/corpus/templates/chat/app/components/layout/Sidebar.tsx +78 -45
  93. package/corpus/templates/chat/app/global.css +1 -1
  94. package/corpus/templates/chat/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  95. package/corpus/templates/chat/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  96. package/corpus/templates/clips/app/components/library/library-layout.tsx +65 -31
  97. package/corpus/templates/clips/app/components/library/organization-switcher.tsx +2 -2
  98. package/corpus/templates/clips/app/components/player/video-player.tsx +16 -1
  99. package/corpus/templates/clips/app/global.css +1 -1
  100. package/corpus/templates/clips/app/hooks/use-view-tracking.ts +55 -12
  101. package/corpus/templates/clips/app/routes/embed.$shareId.tsx +6 -5
  102. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +7 -7
  103. package/corpus/templates/clips/app/routes/share.$shareId.tsx +6 -5
  104. package/corpus/templates/clips/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  105. package/corpus/templates/clips/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  106. package/corpus/templates/clips/server/plugins/db.ts +113 -68
  107. package/corpus/templates/content/actions/update-document.ts +145 -91
  108. package/corpus/templates/content/app/components/editor/CommentComposer.tsx +4 -1
  109. package/corpus/templates/content/app/components/editor/CommentsSidebar.tsx +366 -164
  110. package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +51 -28
  111. package/corpus/templates/content/app/components/editor/database/sidebar.tsx +19 -8
  112. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +66 -42
  113. package/corpus/templates/content/app/global.css +1 -1
  114. package/corpus/templates/content/app/i18n-data.ts +15 -0
  115. package/corpus/templates/content/changelog/2026-07-23-shared-pages-now-keep-durable-content-visible-and-comment-th.md +6 -0
  116. package/corpus/templates/content/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  117. package/corpus/templates/content/changelog/2026-07-24-comment-drafts-now-stay-open-when-saving-fails-and-long-live.md +6 -0
  118. package/corpus/templates/content/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  119. package/corpus/templates/design/actions/update-file.ts +85 -18
  120. package/corpus/templates/design/app/components/layout/Sidebar.tsx +65 -30
  121. package/corpus/templates/design/app/entry.client.tsx +14 -1
  122. package/corpus/templates/design/app/global.css +1 -1
  123. package/corpus/templates/design/app/lib/design-save-outbox.ts +39 -0
  124. package/corpus/templates/design/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  125. package/corpus/templates/design/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  126. package/corpus/templates/dispatch/app/global.css +1 -1
  127. package/corpus/templates/dispatch/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  128. package/corpus/templates/dispatch/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  129. package/corpus/templates/forms/app/components/layout/Layout.tsx +3 -0
  130. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +72 -37
  131. package/corpus/templates/forms/app/global.css +1 -1
  132. package/corpus/templates/forms/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  133. package/corpus/templates/forms/changelog/2026-07-24-forms-sidebar-actions-now-keep-search-language-feedback-and-.md +6 -0
  134. package/corpus/templates/forms/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  135. package/corpus/templates/macros/app/components/DailyProgress.tsx +5 -5
  136. package/corpus/templates/macros/app/components/ExerciseCard.tsx +2 -2
  137. package/corpus/templates/macros/app/components/MealCard.tsx +2 -2
  138. package/corpus/templates/macros/app/components/WeightCard.tsx +2 -2
  139. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +56 -29
  140. package/corpus/templates/macros/app/components/ui/button.tsx +1 -2
  141. package/corpus/templates/macros/app/components/ui/card.tsx +1 -1
  142. package/corpus/templates/macros/app/global.css +1 -1
  143. package/corpus/templates/macros/app/routes/_index.tsx +1 -1
  144. package/corpus/templates/macros/app/routes/analytics.tsx +4 -7
  145. package/corpus/templates/macros/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  146. package/corpus/templates/macros/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  147. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +125 -37
  148. package/corpus/templates/mail/app/global.css +1 -1
  149. package/corpus/templates/mail/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  150. package/corpus/templates/mail/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  151. package/corpus/templates/plan/app/components/layout/Layout.tsx +3 -0
  152. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +90 -60
  153. package/corpus/templates/plan/app/global.css +1 -1
  154. package/corpus/templates/plan/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  155. package/corpus/templates/plan/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  156. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +69 -32
  157. package/corpus/templates/slides/app/global.css +1 -1
  158. package/corpus/templates/slides/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  159. package/corpus/templates/slides/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  160. package/corpus/templates/tasks/app/global.css +1 -1
  161. package/corpus/templates/tasks/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  162. package/corpus/toolkit/CHANGELOG.md +14 -0
  163. package/corpus/toolkit/README.md +8 -1
  164. package/corpus/toolkit/agent-native.eject.json +1 -1
  165. package/corpus/toolkit/package.json +1 -1
  166. package/corpus/toolkit/src/app-shell/index.ts +1 -0
  167. package/corpus/toolkit/src/app-shell/sidebar-footer-actions.tsx +48 -0
  168. package/corpus/toolkit/src/chat-history.css +52 -1
  169. package/corpus/toolkit/src/design-system/default-adapter.tsx +1 -1
  170. package/corpus/toolkit/src/editor/useCollabReconcile.ts +83 -15
  171. package/corpus/toolkit/src/ui/button.tsx +1 -2
  172. package/corpus/toolkit/src/ui/card.tsx +1 -1
  173. package/corpus/toolkit/src/ui/table.tsx +4 -11
  174. package/dist/cli/context-xray-local.js +1 -1
  175. package/dist/cli/context-xray-local.js.map +1 -1
  176. package/dist/cli/index.js +56 -17
  177. package/dist/cli/index.js.map +1 -1
  178. package/dist/cli/skills.d.ts.map +1 -1
  179. package/dist/cli/skills.js +5 -0
  180. package/dist/cli/skills.js.map +1 -1
  181. package/dist/cli/telemetry.d.ts +7 -0
  182. package/dist/cli/telemetry.d.ts.map +1 -1
  183. package/dist/cli/telemetry.js +91 -1
  184. package/dist/cli/telemetry.js.map +1 -1
  185. package/dist/client/AgentPanel.d.ts +7 -1
  186. package/dist/client/AgentPanel.d.ts.map +1 -1
  187. package/dist/client/AgentPanel.js +2 -2
  188. package/dist/client/AgentPanel.js.map +1 -1
  189. package/dist/client/CommandMenu.d.ts +2 -0
  190. package/dist/client/CommandMenu.d.ts.map +1 -1
  191. package/dist/client/CommandMenu.js +12 -1
  192. package/dist/client/CommandMenu.js.map +1 -1
  193. package/dist/client/agent-page/AgentTabsPage.d.ts +4 -0
  194. package/dist/client/agent-page/AgentTabsPage.d.ts.map +1 -1
  195. package/dist/client/agent-page/AgentTabsPage.js +8 -4
  196. package/dist/client/agent-page/AgentTabsPage.js.map +1 -1
  197. package/dist/client/analytics.d.ts.map +1 -1
  198. package/dist/client/analytics.js +7 -0
  199. package/dist/client/analytics.js.map +1 -1
  200. package/dist/client/error-capture.d.ts.map +1 -1
  201. package/dist/client/error-capture.js +8 -1
  202. package/dist/client/error-capture.js.map +1 -1
  203. package/dist/client/extensions/ExtensionsListPage.d.ts.map +1 -1
  204. package/dist/client/extensions/ExtensionsListPage.js +2 -2
  205. package/dist/client/extensions/ExtensionsListPage.js.map +1 -1
  206. package/dist/client/extensions/agent-native-extension-runtime.js +1 -1
  207. package/dist/client/extensions/agent-native-extension-runtime.js.map +1 -1
  208. package/dist/client/navigation/index.d.ts +1 -1
  209. package/dist/client/navigation/index.d.ts.map +1 -1
  210. package/dist/client/navigation/index.js +1 -1
  211. package/dist/client/navigation/index.js.map +1 -1
  212. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  213. package/dist/client/org/OrgSwitcher.js +9 -13
  214. package/dist/client/org/OrgSwitcher.js.map +1 -1
  215. package/dist/client/settings/ExtensionsSettingsContent.js +1 -1
  216. package/dist/client/settings/ExtensionsSettingsContent.js.map +1 -1
  217. package/dist/collab/awareness.d.ts +2 -2
  218. package/dist/collab/awareness.d.ts.map +1 -1
  219. package/dist/collab/struct-routes.d.ts +1 -1
  220. package/dist/extensions/theme.js +1 -1
  221. package/dist/extensions/theme.js.map +1 -1
  222. package/dist/file-upload/actions/upload-image.d.ts +1 -1
  223. package/dist/localization/default-messages.d.ts +2 -0
  224. package/dist/localization/default-messages.d.ts.map +1 -1
  225. package/dist/localization/default-messages.js +2 -0
  226. package/dist/localization/default-messages.js.map +1 -1
  227. package/dist/provider-api/actions/provider-api.d.ts +2 -2
  228. package/dist/secrets/routes.d.ts +9 -9
  229. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  230. package/dist/server/core-routes-plugin.js +8 -1
  231. package/dist/server/core-routes-plugin.js.map +1 -1
  232. package/dist/server/framework-request-handler.d.ts.map +1 -1
  233. package/dist/server/framework-request-handler.js +17 -27
  234. package/dist/server/framework-request-handler.js.map +1 -1
  235. package/dist/server/realtime-token.d.ts +1 -1
  236. package/dist/styles/agent-native.css +13 -0
  237. package/dist/templates/chat/app/components/layout/Layout.tsx +3 -0
  238. package/dist/templates/chat/app/components/layout/Sidebar.tsx +78 -45
  239. package/dist/templates/chat/app/global.css +1 -1
  240. package/dist/templates/chat/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  241. package/dist/templates/chat/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  242. package/dist/templates/default/app/global.css +1 -1
  243. package/dist/tracking/error-capture.d.ts +14 -0
  244. package/dist/tracking/error-capture.d.ts.map +1 -0
  245. package/dist/tracking/error-capture.js +113 -0
  246. package/dist/tracking/error-capture.js.map +1 -0
  247. package/dist/tracking/index.d.ts +1 -0
  248. package/dist/tracking/index.d.ts.map +1 -1
  249. package/dist/tracking/index.js +1 -0
  250. package/dist/tracking/index.js.map +1 -1
  251. package/package.json +2 -2
  252. package/src/cli/context-xray-local.ts +1 -1
  253. package/src/cli/index.ts +63 -18
  254. package/src/cli/skills.ts +5 -0
  255. package/src/cli/telemetry.ts +118 -1
  256. package/src/client/AgentPanel.tsx +10 -0
  257. package/src/client/CommandMenu.tsx +13 -1
  258. package/src/client/agent-page/AgentTabsPage.tsx +39 -4
  259. package/src/client/analytics.ts +13 -0
  260. package/src/client/error-capture.ts +6 -1
  261. package/src/client/extensions/ExtensionsListPage.tsx +12 -5
  262. package/src/client/extensions/agent-native-extension-runtime.ts +1 -1
  263. package/src/client/navigation/index.ts +2 -0
  264. package/src/client/org/OrgSwitcher.tsx +14 -32
  265. package/src/client/settings/ExtensionsSettingsContent.tsx +1 -1
  266. package/src/extensions/theme.ts +1 -1
  267. package/src/localization/default-messages.ts +2 -0
  268. package/src/server/core-routes-plugin.ts +10 -1
  269. package/src/server/framework-request-handler.ts +17 -26
  270. package/src/styles/agent-native.css +13 -0
  271. package/src/templates/chat/app/components/layout/Layout.tsx +3 -0
  272. package/src/templates/chat/app/components/layout/Sidebar.tsx +78 -45
  273. package/src/templates/chat/app/global.css +1 -1
  274. package/src/templates/chat/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  275. package/src/templates/chat/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  276. package/src/templates/default/app/global.css +1 -1
  277. package/src/tracking/error-capture.ts +151 -0
  278. package/src/tracking/index.ts +5 -0
@@ -10,9 +10,11 @@ import { agentNativePath, appPath } from "@agent-native/core/client/api-path";
10
10
  import { PromptComposer } from "@agent-native/core/client/composer";
11
11
  import { DevDatabaseLink } from "@agent-native/core/client/db-admin";
12
12
  import { useSession } from "@agent-native/core/client/hooks";
13
- import { useT } from "@agent-native/core/client/i18n";
13
+ import { LanguagePicker, useT } from "@agent-native/core/client/i18n";
14
+ import { openCommandMenu } from "@agent-native/core/client/navigation";
14
15
  import { OrgSwitcher } from "@agent-native/core/client/org";
15
16
  import { FeedbackButton } from "@agent-native/core/client/ui";
17
+ import { SidebarFooterActions } from "@agent-native/toolkit/app-shell";
16
18
  import {
17
19
  ChatHistoryRail,
18
20
  type ChatHistoryItem,
@@ -27,6 +29,7 @@ import {
27
29
  IconPlus,
28
30
  IconRefresh,
29
31
  IconSettings,
32
+ IconSearch,
30
33
  } from "@tabler/icons-react";
31
34
  import { useEffect, useMemo, useState, type MouseEvent } from "react";
32
35
  import { Link, useLocation, useNavigate } from "react-router";
@@ -146,7 +149,13 @@ function persistedActiveThreadId() {
146
149
  }
147
150
  }
148
151
 
149
- function PlanChatsSection({ collapsed }: { collapsed: boolean }) {
152
+ function PlanChatsSection({
153
+ collapsed,
154
+ open,
155
+ }: {
156
+ collapsed: boolean;
157
+ open: boolean;
158
+ }) {
150
159
  const navigate = useNavigate();
151
160
  const t = useT();
152
161
  const {
@@ -244,35 +253,41 @@ function PlanChatsSection({ collapsed }: { collapsed: boolean }) {
244
253
  }
245
254
 
246
255
  return (
247
- <div className="mt-2 ms-4">
248
- <ChatHistoryRail
249
- items={chatItems}
250
- activeId={activeThreadId}
251
- onSelect={(threadId) => openThread(threadId)}
252
- onNewChat={() => void handleNewChat()}
253
- railLabels={{
254
- newChat: t("sidebar.newChat"),
255
- showMore: t("sidebar.chats"),
256
- showLess: t("sidebar.chats"),
257
- }}
258
- renameMaxLength={160}
259
- onTogglePin={(threadId) => {
260
- const thread = visibleThreads.find((item) => item.id === threadId);
261
- if (thread) void pinThread(threadId, !thread.pinnedAt);
262
- }}
263
- onRename={handleRenameThread}
264
- onDelete={(threadId) => void handleArchiveThread(threadId)}
265
- labels={{
266
- options: (item) => `${t("sidebar.chats")}: ${item.titleText ?? ""}`,
267
- renameInput: (item) =>
268
- `${t("sidebar.renameChat")}: ${item.titleText ?? ""}`,
269
- rename: t("sidebar.renameChat"),
270
- pin: t("sidebar.pinChat"),
271
- unpin: t("sidebar.unpinChat"),
272
- delete: t("sidebar.archiveChat"),
273
- }}
274
- className="min-w-0"
275
- />
256
+ <div
257
+ className="an-chat-history-rail__collapse"
258
+ data-state={open ? "open" : "closed"}
259
+ aria-hidden={!open}
260
+ >
261
+ <div className="ms-4">
262
+ <ChatHistoryRail
263
+ items={chatItems}
264
+ activeId={activeThreadId}
265
+ onSelect={(threadId) => openThread(threadId)}
266
+ onNewChat={() => void handleNewChat()}
267
+ railLabels={{
268
+ newChat: t("sidebar.newChat"),
269
+ showMore: t("sidebar.chats"),
270
+ showLess: t("sidebar.chats"),
271
+ }}
272
+ renameMaxLength={160}
273
+ onTogglePin={(threadId) => {
274
+ const thread = visibleThreads.find((item) => item.id === threadId);
275
+ if (thread) void pinThread(threadId, !thread.pinnedAt);
276
+ }}
277
+ onRename={handleRenameThread}
278
+ onDelete={(threadId) => void handleArchiveThread(threadId)}
279
+ labels={{
280
+ options: (item) => `${t("sidebar.chats")}: ${item.titleText ?? ""}`,
281
+ renameInput: (item) =>
282
+ `${t("sidebar.renameChat")}: ${item.titleText ?? ""}`,
283
+ rename: t("sidebar.renameChat"),
284
+ pin: t("sidebar.pinChat"),
285
+ unpin: t("sidebar.unpinChat"),
286
+ delete: t("sidebar.archiveChat"),
287
+ }}
288
+ className="min-w-0"
289
+ />
290
+ </div>
276
291
  </div>
277
292
  );
278
293
  }
@@ -554,6 +569,35 @@ export function Sidebar({
554
569
  </TooltipContent>
555
570
  </Tooltip>
556
571
  ) : null;
572
+ const searchButton = (
573
+ <Tooltip>
574
+ <TooltipTrigger asChild>
575
+ <Button
576
+ type="button"
577
+ size="icon"
578
+ variant="ghost"
579
+ className="size-8 shrink-0 text-muted-foreground"
580
+ onClick={openCommandMenu}
581
+ aria-label={t("plansPage.overview.searchPlaceholder")}
582
+ >
583
+ <IconSearch className="size-4" />
584
+ </Button>
585
+ </TooltipTrigger>
586
+ <TooltipContent side="right">
587
+ {t("plansPage.overview.searchPlaceholder")}
588
+ </TooltipContent>
589
+ </Tooltip>
590
+ );
591
+ const translateButton = (
592
+ <LanguagePicker variant="ghost-icon" label={t("settings.languageLabel")} />
593
+ );
594
+ const feedbackButton = (
595
+ <FeedbackButton
596
+ variant={collapsed ? "icon" : "sidebar"}
597
+ side="right"
598
+ className={collapsed ? "size-8" : "min-w-0"}
599
+ />
600
+ );
557
601
 
558
602
  return (
559
603
  <aside
@@ -630,7 +674,7 @@ export function Sidebar({
630
674
  <div key={item.href}>
631
675
  {link}
632
676
  {item.href === "/" && isActive ? (
633
- <PlanChatsSection collapsed={collapsed} />
677
+ <PlanChatsSection collapsed={collapsed} open />
634
678
  ) : null}
635
679
  {item.href === "/plans" && isActive ? (
636
680
  <PlansSidebarSection collapsed={collapsed} />
@@ -676,25 +720,15 @@ export function Sidebar({
676
720
  </nav>
677
721
 
678
722
  {!collapsed && session ? (
679
- <>
680
- <div className="space-y-2 px-3 py-2">
681
- <DevDatabaseLink />
682
- <div className="flex items-center justify-end gap-1">
683
- <FeedbackButton className="min-w-0 flex-1" side="right" />
684
- {collapseButton}
685
- </div>
686
- <OrgSwitcher />
687
- </div>
688
- </>
723
+ <div className="space-y-2 px-3 py-2">
724
+ <DevDatabaseLink />
725
+ <OrgSwitcher />
726
+ </div>
689
727
  ) : null}
690
728
 
691
729
  {!collapsed && !sessionLoading && !session ? (
692
730
  <div className="space-y-2 px-3 py-2">
693
731
  <DevDatabaseLink />
694
- <div className="flex items-center justify-end gap-1">
695
- <FeedbackButton className="min-w-0 flex-1" side="right" />
696
- {collapseButton}
697
- </div>
698
732
  <Button
699
733
  type="button"
700
734
  size="sm"
@@ -707,23 +741,19 @@ export function Sidebar({
707
741
  </div>
708
742
  ) : null}
709
743
 
710
- {collapsed && collapsible ? (
711
- <div
712
- className={cn(
713
- "px-2 py-2",
714
- collapsed ? "flex justify-center" : "flex justify-end",
715
- )}
716
- >
717
- {collapseButton}
744
+ {!collapsed && sessionLoading ? (
745
+ <div className="px-3 py-2">
746
+ <DevDatabaseLink />
718
747
  </div>
719
748
  ) : null}
720
749
 
721
- {!collapsed && sessionLoading && collapsible ? (
722
- <div className="flex items-center justify-end gap-1 px-3 py-2">
723
- <FeedbackButton className="min-w-0 flex-1" side="right" />
724
- {collapseButton}
725
- </div>
726
- ) : null}
750
+ <SidebarFooterActions
751
+ collapsed={collapsed}
752
+ feedback={feedbackButton}
753
+ translate={translateButton}
754
+ search={searchButton}
755
+ collapse={collapseButton}
756
+ />
727
757
  </aside>
728
758
  );
729
759
  }
@@ -88,7 +88,7 @@
88
88
  --muted-foreground: 0 0% 60%;
89
89
  --accent: 0 0% 18%;
90
90
  --accent-foreground: 0 0% 90%;
91
- --destructive: 0 84% 60%;
91
+ --destructive: 0 91% 71%;
92
92
  --destructive-foreground: 0 0% 98%;
93
93
  --border: 0 0% 24%;
94
94
  --input: 0 0% 24%;
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-24
4
+ ---
5
+
6
+ Secondary controls and dashboard surfaces now use quieter borderless styling.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-24
4
+ ---
5
+
6
+ Sidebar utility controls now follow a consistent footer order.
@@ -1,8 +1,10 @@
1
1
  import { appPath } from "@agent-native/core/client/api-path";
2
2
  import { DevDatabaseLink } from "@agent-native/core/client/db-admin";
3
- import { useT } from "@agent-native/core/client/i18n";
3
+ import { LanguagePicker, useT } from "@agent-native/core/client/i18n";
4
+ import { openCommandMenu } from "@agent-native/core/client/navigation";
4
5
  import { OrgSwitcher } from "@agent-native/core/client/org";
5
6
  import { FeedbackButton } from "@agent-native/core/client/ui";
7
+ import { SidebarFooterActions } from "@agent-native/toolkit/app-shell";
6
8
  import {
7
9
  IconStack2,
8
10
  IconHierarchy2,
@@ -10,6 +12,7 @@ import {
10
12
  IconSettings,
11
13
  IconLayoutSidebarLeftCollapse,
12
14
  IconLayoutSidebarLeftExpand,
15
+ IconSearch,
13
16
  } from "@tabler/icons-react";
14
17
  import { Link, useLocation } from "react-router";
15
18
 
@@ -50,25 +53,60 @@ export function Sidebar({ collapsed, onToggleCollapsed }: SidebarProps) {
50
53
  ? location.pathname === "/"
51
54
  : location.pathname.startsWith(href);
52
55
 
56
+ const collapseButton = onToggleCollapsed ? (
57
+ <Tooltip>
58
+ <TooltipTrigger asChild>
59
+ <button
60
+ type="button"
61
+ onClick={onToggleCollapsed}
62
+ aria-label={
63
+ collapsed
64
+ ? t("sidebar.expandSidebar")
65
+ : t("sidebar.collapseSidebar")
66
+ }
67
+ className="flex size-8 items-center justify-center rounded-md text-muted-foreground hover:bg-sidebar-accent/50 hover:text-foreground"
68
+ >
69
+ {collapsed ? (
70
+ <IconLayoutSidebarLeftExpand className="h-4 w-4 rtl:-scale-x-100" />
71
+ ) : (
72
+ <IconLayoutSidebarLeftCollapse className="h-4 w-4 rtl:-scale-x-100" />
73
+ )}
74
+ </button>
75
+ </TooltipTrigger>
76
+ <TooltipContent side="right">
77
+ {collapsed ? t("sidebar.expandSidebar") : t("sidebar.collapseSidebar")}
78
+ </TooltipContent>
79
+ </Tooltip>
80
+ ) : null;
81
+ const searchButton = (
82
+ <Tooltip>
83
+ <TooltipTrigger asChild>
84
+ <button
85
+ type="button"
86
+ onClick={openCommandMenu}
87
+ aria-label={t("root.searchDecks")}
88
+ className="flex size-8 items-center justify-center rounded-md text-muted-foreground hover:bg-sidebar-accent/50 hover:text-foreground"
89
+ >
90
+ <IconSearch className="h-4 w-4" />
91
+ </button>
92
+ </TooltipTrigger>
93
+ <TooltipContent side="right">{t("root.searchDecks")}</TooltipContent>
94
+ </Tooltip>
95
+ );
96
+ const translateButton = (
97
+ <LanguagePicker variant="ghost-icon" label={t("settings.languageLabel")} />
98
+ );
99
+ const feedbackButton = (
100
+ <FeedbackButton
101
+ variant={collapsed ? "icon" : "sidebar"}
102
+ side="right"
103
+ className={collapsed ? "size-8" : "min-w-0"}
104
+ />
105
+ );
106
+
53
107
  if (collapsed) {
54
108
  return (
55
109
  <aside className="flex h-full w-12 shrink-0 flex-col items-center gap-1 overflow-hidden border-e border-border bg-sidebar py-2 text-sidebar-foreground transition-[width] duration-200 ease-out">
56
- {onToggleCollapsed && (
57
- <Tooltip delayDuration={0}>
58
- <TooltipTrigger asChild>
59
- <button
60
- onClick={onToggleCollapsed}
61
- aria-label={t("sidebar.expandSidebar")}
62
- className="flex h-10 w-10 items-center justify-center rounded-md text-muted-foreground hover:bg-sidebar-accent/50 hover:text-foreground"
63
- >
64
- <IconLayoutSidebarLeftExpand className="h-4 w-4 rtl:-scale-x-100" />
65
- </button>
66
- </TooltipTrigger>
67
- <TooltipContent side="right">
68
- {t("sidebar.expandSidebar")}
69
- </TooltipContent>
70
- </Tooltip>
71
- )}
72
110
  <nav className="flex min-h-0 flex-1 flex-col items-center gap-1 overflow-y-auto pt-1">
73
111
  {navItems.map((item) => {
74
112
  const Icon = item.icon;
@@ -117,6 +155,13 @@ export function Sidebar({ collapsed, onToggleCollapsed }: SidebarProps) {
117
155
  );
118
156
  })}
119
157
  </nav>
158
+ <SidebarFooterActions
159
+ collapsed
160
+ feedback={feedbackButton}
161
+ translate={translateButton}
162
+ search={searchButton}
163
+ collapse={collapseButton}
164
+ />
120
165
  </aside>
121
166
  );
122
167
  }
@@ -141,20 +186,6 @@ export function Sidebar({ collapsed, onToggleCollapsed }: SidebarProps) {
141
186
  {t("navigation.brand")}
142
187
  </span>
143
188
  </div>
144
- {onToggleCollapsed && (
145
- <Tooltip>
146
- <TooltipTrigger asChild>
147
- <button
148
- onClick={onToggleCollapsed}
149
- aria-label={t("sidebar.collapseSidebar")}
150
- className="flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground hover:bg-sidebar-accent/50 hover:text-foreground"
151
- >
152
- <IconLayoutSidebarLeftCollapse className="h-4 w-4 rtl:-scale-x-100" />
153
- </button>
154
- </TooltipTrigger>
155
- <TooltipContent>{t("sidebar.collapseSidebar")}</TooltipContent>
156
- </Tooltip>
157
- )}
158
189
  </div>
159
190
 
160
191
  <div className="flex min-h-0 flex-1 flex-col overflow-y-auto">
@@ -209,8 +240,14 @@ export function Sidebar({ collapsed, onToggleCollapsed }: SidebarProps) {
209
240
 
210
241
  <div className="px-3 py-2 empty:hidden">
211
242
  <DevDatabaseLink />
212
- <FeedbackButton />
213
243
  </div>
244
+ <SidebarFooterActions
245
+ feedback={feedbackButton}
246
+ translate={translateButton}
247
+ search={searchButton}
248
+ collapse={collapseButton}
249
+ className="px-0 py-0"
250
+ />
214
251
  </div>
215
252
  </div>
216
253
  </aside>
@@ -42,7 +42,7 @@ button[title="Open agent sidebar"] {
42
42
  --accent: 0 0% 18%;
43
43
  --accent-foreground: 0 0% 93%;
44
44
 
45
- --destructive: 0 72% 51%;
45
+ --destructive: 0 91% 71%;
46
46
  --destructive-foreground: 0 0% 100%;
47
47
 
48
48
  --border: 0 0% 24%;
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-24
4
+ ---
5
+
6
+ Secondary controls and dashboard surfaces now use quieter borderless styling.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-24
4
+ ---
5
+
6
+ Sidebar utility controls now follow a consistent footer order.
@@ -22,7 +22,7 @@
22
22
  --muted-foreground: 220 5% 45%;
23
23
  --accent: 220 10% 95%;
24
24
  --accent-foreground: 220 10% 15%;
25
- --destructive: 0 84% 60%;
25
+ --destructive: 0 91% 71%;
26
26
  --destructive-foreground: 0 0% 98%;
27
27
  --border: 220 10% 90%;
28
28
  --input: 220 10% 90%;
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-24
4
+ ---
5
+
6
+ Secondary controls and dashboard surfaces now use quieter borderless styling.
@@ -1,5 +1,19 @@
1
1
  # @agent-native/toolkit
2
2
 
3
+ ## 0.10.6
4
+
5
+ ### Patch Changes
6
+
7
+ - 8afb252: Allow newly created empty collaborative editors to persist their first real user edit after the shared document finishes loading.
8
+
9
+ ## 0.10.5
10
+
11
+ ### Patch Changes
12
+
13
+ - 0e2c19d: Use borderless accent styling for shared secondary controls and organization pickers.
14
+ - 0e2c19d: Align shared chat history rails with left-aligned New Chat controls and animate chat-list expansion using intrinsic sizing.
15
+ - 0e2c19d: Expose a shared command-menu open event and sidebar footer action composition primitive.
16
+
3
17
  ## 0.10.4
4
18
 
5
19
  ### Patch Changes
@@ -45,7 +45,10 @@ import { VisibilityBadge } from "@agent-native/toolkit/sharing";
45
45
  import { Button } from "@agent-native/toolkit/ui/button";
46
46
  import { Toaster } from "@agent-native/toolkit/ui/sonner";
47
47
  import { useToast } from "@agent-native/toolkit/hooks/use-toast";
48
- import { useSetHeaderActions } from "@agent-native/toolkit/app-shell";
48
+ import {
49
+ SidebarFooterActions,
50
+ useSetHeaderActions,
51
+ } from "@agent-native/toolkit/app-shell";
49
52
  ```
50
53
 
51
54
  Import `@agent-native/toolkit/styles.css` after Tailwind to include Toolkit's
@@ -59,6 +62,10 @@ action in a footer row with the ellipsis disclosure on its right. The app
59
62
  continues to own thread persistence, sorting, routing, and mutations through
60
63
  Core.
61
64
 
65
+ Use `SidebarFooterActions` for the shared left-sidebar utility row. Provide the
66
+ app-owned controls through its slots; the rendered order is feedback, translate,
67
+ search, then collapse, with the same order stacked in collapsed sidebars.
68
+
62
69
  Inside template apps, prefer local adapters such as `@/components/ui/button` so
63
70
  apps can replace their primitives without changing every callsite.
64
71
 
@@ -94,7 +94,7 @@
94
94
  "strategy": "source-copy",
95
95
  "sourceEntries": ["src/app-shell"],
96
96
  "targetRoot": "app/components/agent-native/toolkit",
97
- "dependencies": ["react"],
97
+ "dependencies": ["clsx", "react", "tailwind-merge"],
98
98
  "verification": ["pnpm typecheck"]
99
99
  },
100
100
  {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/toolkit",
3
- "version": "0.10.4",
3
+ "version": "0.10.6",
4
4
  "description": "Reusable app-building UI and helpers for Agent-Native apps.",
5
5
  "homepage": "https://github.com/BuilderIO/agent-native#readme",
6
6
  "bugs": {
@@ -1 +1,2 @@
1
1
  export * from "./header-actions.js";
2
+ export * from "./sidebar-footer-actions.js";
@@ -0,0 +1,48 @@
1
+ import type { ReactNode } from "react";
2
+
3
+ import { cn } from "../utils.js";
4
+
5
+ export interface SidebarFooterActionsProps {
6
+ feedback?: ReactNode;
7
+ translate?: ReactNode;
8
+ search?: ReactNode;
9
+ collapse?: ReactNode;
10
+ collapsed?: boolean;
11
+ className?: string;
12
+ }
13
+
14
+ /**
15
+ * Keeps the shared left-sidebar utility order stable while apps provide their
16
+ * own controls and behavior.
17
+ */
18
+ export function SidebarFooterActions({
19
+ feedback,
20
+ translate,
21
+ search,
22
+ collapse,
23
+ collapsed = false,
24
+ className,
25
+ }: SidebarFooterActionsProps) {
26
+ return (
27
+ <div
28
+ className={cn(
29
+ "flex items-center gap-1",
30
+ collapsed ? "flex-col px-1 py-1" : "min-w-0 justify-end px-3 py-2",
31
+ className,
32
+ )}
33
+ data-sidebar-footer-actions
34
+ >
35
+ {feedback ? (
36
+ <div
37
+ className={cn("min-w-0", !collapsed && "flex-1")}
38
+ data-sidebar-footer-feedback
39
+ >
40
+ {feedback}
41
+ </div>
42
+ ) : null}
43
+ {translate ? <div data-sidebar-footer-translate>{translate}</div> : null}
44
+ {search ? <div data-sidebar-footer-search>{search}</div> : null}
45
+ {collapse ? <div data-sidebar-footer-collapse>{collapse}</div> : null}
46
+ </div>
47
+ );
48
+ }
@@ -78,6 +78,56 @@
78
78
  color: hsl(38 92% 50%);
79
79
  }
80
80
 
81
+ .an-chat-history-rail__collapse {
82
+ display: flow-root;
83
+ height: auto;
84
+ overflow: hidden;
85
+ overflow: clip;
86
+ opacity: 1;
87
+ clip-path: inset(0);
88
+ interpolate-size: allow-keywords;
89
+ transition:
90
+ height 200ms var(--ease-collapse),
91
+ opacity 150ms ease,
92
+ clip-path 200ms var(--ease-collapse);
93
+ }
94
+
95
+ .an-chat-history-rail__collapse[data-state="closed"] {
96
+ height: 0;
97
+ opacity: 0;
98
+ clip-path: inset(0 0 100% 0);
99
+ pointer-events: none;
100
+ }
101
+
102
+ @starting-style {
103
+ .an-chat-history-rail__collapse[data-state="open"] {
104
+ height: 0;
105
+ opacity: 0;
106
+ clip-path: inset(0 0 100% 0);
107
+ }
108
+ }
109
+
110
+ @supports not (interpolate-size: allow-keywords) {
111
+ .an-chat-history-rail__collapse {
112
+ height: auto;
113
+ max-height: 64rem;
114
+ transition:
115
+ max-height 200ms var(--ease-collapse),
116
+ opacity 150ms ease,
117
+ clip-path 200ms var(--ease-collapse);
118
+ }
119
+
120
+ .an-chat-history-rail__collapse[data-state="closed"] {
121
+ max-height: 0;
122
+ }
123
+ }
124
+
125
+ @media (prefers-reduced-motion: reduce) {
126
+ .an-chat-history-rail__collapse {
127
+ transition: opacity 150ms ease;
128
+ }
129
+ }
130
+
81
131
  .an-chat-history-rail__footer {
82
132
  display: flex;
83
133
  align-items: center;
@@ -118,7 +168,8 @@
118
168
  }
119
169
 
120
170
  .an-chat-history-rail__new-chat {
121
- flex: 1 1 auto;
171
+ flex: 0 0 auto;
172
+ margin-inline-end: auto;
122
173
  gap: 8px;
123
174
  height: auto;
124
175
  min-width: 0;
@@ -332,7 +332,7 @@ const DefaultSurface: DesignSystemComponents["Surface"] = ({
332
332
  const elementProps = {
333
333
  ...props,
334
334
  className: cn(
335
- "rounded-lg border bg-card text-card-foreground",
335
+ "rounded-lg bg-card text-card-foreground",
336
336
  elevation === "none" && "shadow-none",
337
337
  elevation === "low" && "shadow-sm",
338
338
  elevation === "medium" && "shadow-md",