@agent-native/core 0.119.1 → 0.119.3

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 (233) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +21 -0
  3. package/corpus/core/package.json +1 -1
  4. package/corpus/core/src/a2a/client.ts +4 -0
  5. package/corpus/core/src/agent/production-agent.ts +1 -0
  6. package/corpus/core/src/cli/create.ts +44 -5
  7. package/corpus/core/src/client/AssistantChat.tsx +11 -50
  8. package/corpus/core/src/client/ErrorBoundary.tsx +25 -19
  9. package/corpus/core/src/client/agent-page/AgentTabFrame.tsx +1 -1
  10. package/corpus/core/src/client/agent-page/AgentTabsPage.tsx +23 -0
  11. package/corpus/core/src/client/components/ui/message-scroller.tsx +1 -9
  12. package/corpus/core/src/client/resources/ResourceTree.tsx +3 -3
  13. package/corpus/core/src/client/resources/ResourcesPanel.tsx +64 -60
  14. package/corpus/core/src/client/settings/AccountSettingsCard.tsx +228 -0
  15. package/corpus/core/src/client/settings/SecretsSection.tsx +7 -5
  16. package/corpus/core/src/client/settings/SettingsPanel.tsx +67 -244
  17. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +88 -21
  18. package/corpus/core/src/client/settings/agent-settings-search.ts +0 -2
  19. package/corpus/core/src/client/settings/index.ts +7 -0
  20. package/corpus/core/src/client/vite-dev-recovery-script.ts +18 -1
  21. package/corpus/core/src/db/client.ts +65 -15
  22. package/corpus/core/src/db/index.ts +2 -0
  23. package/corpus/core/src/localization/default-messages.ts +1 -0
  24. package/corpus/core/src/server/email.ts +33 -1
  25. package/corpus/core/src/styles/agent-native.css +23 -0
  26. package/corpus/core/src/templates/default/.agents/skills/frontend-design/SKILL.md +28 -0
  27. package/corpus/core/src/templates/default/app/routes/settings.tsx +2 -0
  28. package/corpus/core/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +28 -0
  29. package/corpus/core/src/vite/client.ts +76 -8
  30. package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +28 -0
  31. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +3 -1
  32. package/corpus/templates/analytics/app/components/layout/Layout.tsx +9 -13
  33. package/corpus/templates/analytics/app/components/layout/layout-route-policy.ts +2 -2
  34. package/corpus/templates/analytics/app/global.css +0 -5
  35. package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +0 -13
  36. package/corpus/templates/analytics/app/lib/sql-query.ts +15 -2
  37. package/corpus/templates/analytics/app/pages/Settings.tsx +2 -24
  38. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +6 -0
  39. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +11 -1
  40. package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +8 -1
  41. package/corpus/templates/analytics/app/pages/settings/settings-search.ts +1 -1
  42. package/corpus/templates/analytics/changelog/2026-07-22-fixed-dashboards-and-analyses-missing-a-copyable-share-link.md +6 -0
  43. package/corpus/templates/analytics/changelog/2026-07-23-ask-analytics-is-better-centered-with-a-quieter-chat-rail-an.md +6 -0
  44. package/corpus/templates/analytics/changelog/2026-07-23-daily-dashboard-emails-load-read-heavy-panels-reliably.md +6 -0
  45. package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +2 -2
  46. package/corpus/templates/analytics/server/jobs/dashboard-report.ts +39 -5
  47. package/corpus/templates/analytics/server/lib/dashboard-report.ts +186 -62
  48. package/corpus/templates/analytics/server/lib/first-party-analytics.ts +3 -0
  49. package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +18 -2
  50. package/corpus/templates/analytics/shared/dashboard-report-timeouts.ts +3 -0
  51. package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +28 -0
  52. package/corpus/templates/assets/app/components/layout/Layout.tsx +3 -4
  53. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +1 -1
  54. package/corpus/templates/assets/app/global.css +0 -5
  55. package/corpus/templates/assets/app/hooks/use-navigation-state.ts +0 -22
  56. package/corpus/templates/assets/app/routes/settings.tsx +2 -0
  57. package/corpus/templates/assets/changelog/2026-07-23-create-and-chat-surfaces-are-better-centered-with-quieter-ch.md +6 -0
  58. package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +28 -0
  59. package/corpus/templates/brain/app/components/layout/Layout.tsx +1 -1
  60. package/corpus/templates/brain/app/components/layout/Sidebar.tsx +1 -1
  61. package/corpus/templates/brain/app/global.css +0 -9
  62. package/corpus/templates/brain/app/hooks/use-navigation-state.ts +0 -12
  63. package/corpus/templates/brain/app/i18n-data.ts +1 -0
  64. package/corpus/templates/brain/app/lib/settings-navigation.ts +1 -1
  65. package/corpus/templates/brain/app/routes/settings.tsx +21 -22
  66. package/corpus/templates/brain/changelog/2026-07-23-ask-brain-is-better-centered-with-quieter-chat-history-and-a.md +6 -0
  67. package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +28 -0
  68. package/corpus/templates/calendar/app/pages/Settings.tsx +2 -0
  69. package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +28 -0
  70. package/corpus/templates/chat/app/components/layout/Layout.tsx +1 -1
  71. package/corpus/templates/chat/app/components/layout/Sidebar.tsx +1 -1
  72. package/corpus/templates/chat/app/hooks/use-navigation-state.ts +0 -15
  73. package/corpus/templates/chat/app/routes/settings.tsx +2 -0
  74. package/corpus/templates/chat/changelog/2026-07-23-full-page-chat-is-better-centered-with-quieter-chat-history-.md +6 -0
  75. package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +28 -0
  76. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +2 -0
  77. package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +28 -0
  78. package/corpus/templates/content/app/routes/_app.settings.tsx +2 -0
  79. package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +28 -0
  80. package/corpus/templates/design/app/routes/settings.tsx +2 -0
  81. package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +28 -0
  82. package/corpus/templates/dispatch/app/routes/settings.tsx +2 -0
  83. package/corpus/templates/dispatch/changelog/2026-07-23-quieter-progressive-disclosure.md +6 -0
  84. package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +28 -0
  85. package/corpus/templates/forms/app/global.css +0 -5
  86. package/corpus/templates/forms/app/hooks/use-navigation-state.ts +0 -7
  87. package/corpus/templates/forms/app/root.tsx +1 -7
  88. package/corpus/templates/forms/app/routes/_app.settings.tsx +2 -0
  89. package/corpus/templates/forms/changelog/2026-07-23-ask-forms-is-better-centered-with-quieter-chat-history-and-a.md +6 -0
  90. package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +28 -0
  91. package/corpus/templates/macros/app/routes/settings.tsx +2 -0
  92. package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +28 -0
  93. package/corpus/templates/mail/app/pages/SettingsPage.tsx +3 -1
  94. package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +28 -0
  95. package/corpus/templates/plan/app/components/layout/Layout.tsx +2 -2
  96. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +1 -13
  97. package/corpus/templates/plan/app/hooks/use-navigation-state.ts +0 -4
  98. package/corpus/templates/plan/app/routes/settings.tsx +2 -0
  99. package/corpus/templates/plan/changelog/2026-07-23-ask-plan-is-now-a-clean-full-page-chat-surface-with-better-c.md +6 -0
  100. package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +28 -0
  101. package/corpus/templates/slides/app/routes/settings.tsx +2 -0
  102. package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +28 -0
  103. package/corpus/toolkit/CHANGELOG.md +6 -0
  104. package/corpus/toolkit/package.json +1 -1
  105. package/corpus/toolkit/src/chat-history.css +2 -2
  106. package/corpus/toolkit/src/composer/PromptComposer.tsx +0 -31
  107. package/corpus/toolkit/src/composer/RealtimeVoiceMode.tsx +7 -2
  108. package/corpus/toolkit/src/styles.css +183 -36
  109. package/dist/a2a/client.d.ts +2 -0
  110. package/dist/a2a/client.d.ts.map +1 -1
  111. package/dist/a2a/client.js +2 -0
  112. package/dist/a2a/client.js.map +1 -1
  113. package/dist/agent/production-agent.d.ts.map +1 -1
  114. package/dist/agent/production-agent.js +1 -0
  115. package/dist/agent/production-agent.js.map +1 -1
  116. package/dist/cli/create.d.ts +2 -1
  117. package/dist/cli/create.d.ts.map +1 -1
  118. package/dist/cli/create.js +43 -6
  119. package/dist/cli/create.js.map +1 -1
  120. package/dist/client/AssistantChat.d.ts.map +1 -1
  121. package/dist/client/AssistantChat.js +11 -42
  122. package/dist/client/AssistantChat.js.map +1 -1
  123. package/dist/client/ErrorBoundary.d.ts.map +1 -1
  124. package/dist/client/ErrorBoundary.js +3 -2
  125. package/dist/client/ErrorBoundary.js.map +1 -1
  126. package/dist/client/agent-page/AgentTabFrame.js +1 -1
  127. package/dist/client/agent-page/AgentTabFrame.js.map +1 -1
  128. package/dist/client/agent-page/AgentTabsPage.d.ts.map +1 -1
  129. package/dist/client/agent-page/AgentTabsPage.js +13 -1
  130. package/dist/client/agent-page/AgentTabsPage.js.map +1 -1
  131. package/dist/client/components/ui/message-scroller.d.ts.map +1 -1
  132. package/dist/client/components/ui/message-scroller.js +2 -2
  133. package/dist/client/components/ui/message-scroller.js.map +1 -1
  134. package/dist/client/resources/ResourceTree.js +2 -2
  135. package/dist/client/resources/ResourceTree.js.map +1 -1
  136. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  137. package/dist/client/resources/ResourcesPanel.js +11 -11
  138. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  139. package/dist/client/settings/AccountSettingsCard.d.ts +9 -0
  140. package/dist/client/settings/AccountSettingsCard.d.ts.map +1 -0
  141. package/dist/client/settings/AccountSettingsCard.js +78 -0
  142. package/dist/client/settings/AccountSettingsCard.js.map +1 -0
  143. package/dist/client/settings/SecretsSection.d.ts.map +1 -1
  144. package/dist/client/settings/SecretsSection.js +2 -2
  145. package/dist/client/settings/SecretsSection.js.map +1 -1
  146. package/dist/client/settings/SettingsPanel.d.ts +3 -0
  147. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  148. package/dist/client/settings/SettingsPanel.js +25 -77
  149. package/dist/client/settings/SettingsPanel.js.map +1 -1
  150. package/dist/client/settings/SettingsTabsPage.d.ts +5 -1
  151. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
  152. package/dist/client/settings/SettingsTabsPage.js +35 -9
  153. package/dist/client/settings/SettingsTabsPage.js.map +1 -1
  154. package/dist/client/settings/agent-settings-search.d.ts.map +1 -1
  155. package/dist/client/settings/agent-settings-search.js +0 -2
  156. package/dist/client/settings/agent-settings-search.js.map +1 -1
  157. package/dist/client/settings/index.d.ts +2 -1
  158. package/dist/client/settings/index.d.ts.map +1 -1
  159. package/dist/client/settings/index.js +2 -1
  160. package/dist/client/settings/index.js.map +1 -1
  161. package/dist/client/vite-dev-recovery-script.d.ts.map +1 -1
  162. package/dist/client/vite-dev-recovery-script.js +18 -1
  163. package/dist/client/vite-dev-recovery-script.js.map +1 -1
  164. package/dist/collab/routes.d.ts +1 -1
  165. package/dist/db/client.d.ts +18 -8
  166. package/dist/db/client.d.ts.map +1 -1
  167. package/dist/db/client.js +34 -11
  168. package/dist/db/client.js.map +1 -1
  169. package/dist/db/index.d.ts +1 -1
  170. package/dist/db/index.d.ts.map +1 -1
  171. package/dist/db/index.js.map +1 -1
  172. package/dist/localization/default-messages.d.ts +1 -0
  173. package/dist/localization/default-messages.d.ts.map +1 -1
  174. package/dist/localization/default-messages.js +1 -0
  175. package/dist/localization/default-messages.js.map +1 -1
  176. package/dist/notifications/routes.d.ts +1 -1
  177. package/dist/provider-api/actions/custom-provider-registration.d.ts +7 -7
  178. package/dist/provider-api/actions/provider-api.d.ts +7 -7
  179. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  180. package/dist/resources/handlers.d.ts +1 -1
  181. package/dist/secrets/routes.d.ts +9 -9
  182. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  183. package/dist/server/email.d.ts +1 -0
  184. package/dist/server/email.d.ts.map +1 -1
  185. package/dist/server/email.js +29 -1
  186. package/dist/server/email.js.map +1 -1
  187. package/dist/server/realtime-token.d.ts +1 -1
  188. package/dist/styles/agent-native.css +23 -0
  189. package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +28 -0
  190. package/dist/templates/chat/app/components/layout/Layout.tsx +1 -1
  191. package/dist/templates/chat/app/components/layout/Sidebar.tsx +1 -1
  192. package/dist/templates/chat/app/hooks/use-navigation-state.ts +0 -15
  193. package/dist/templates/chat/app/routes/settings.tsx +2 -0
  194. package/dist/templates/chat/changelog/2026-07-23-full-page-chat-is-better-centered-with-quieter-chat-history-.md +6 -0
  195. package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +28 -0
  196. package/dist/templates/default/app/routes/settings.tsx +2 -0
  197. package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +28 -0
  198. package/dist/vite/client.d.ts.map +1 -1
  199. package/dist/vite/client.js +68 -6
  200. package/dist/vite/client.js.map +1 -1
  201. package/package.json +2 -2
  202. package/src/a2a/client.ts +4 -0
  203. package/src/agent/production-agent.ts +1 -0
  204. package/src/cli/create.ts +44 -5
  205. package/src/client/AssistantChat.tsx +11 -50
  206. package/src/client/ErrorBoundary.tsx +25 -19
  207. package/src/client/agent-page/AgentTabFrame.tsx +1 -1
  208. package/src/client/agent-page/AgentTabsPage.tsx +23 -0
  209. package/src/client/components/ui/message-scroller.tsx +1 -9
  210. package/src/client/resources/ResourceTree.tsx +3 -3
  211. package/src/client/resources/ResourcesPanel.tsx +64 -60
  212. package/src/client/settings/AccountSettingsCard.tsx +228 -0
  213. package/src/client/settings/SecretsSection.tsx +7 -5
  214. package/src/client/settings/SettingsPanel.tsx +67 -244
  215. package/src/client/settings/SettingsTabsPage.tsx +88 -21
  216. package/src/client/settings/agent-settings-search.ts +0 -2
  217. package/src/client/settings/index.ts +7 -0
  218. package/src/client/vite-dev-recovery-script.ts +18 -1
  219. package/src/db/client.ts +65 -15
  220. package/src/db/index.ts +2 -0
  221. package/src/localization/default-messages.ts +1 -0
  222. package/src/server/email.ts +33 -1
  223. package/src/styles/agent-native.css +23 -0
  224. package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +28 -0
  225. package/src/templates/chat/app/components/layout/Layout.tsx +1 -1
  226. package/src/templates/chat/app/components/layout/Sidebar.tsx +1 -1
  227. package/src/templates/chat/app/hooks/use-navigation-state.ts +0 -15
  228. package/src/templates/chat/app/routes/settings.tsx +2 -0
  229. package/src/templates/chat/changelog/2026-07-23-full-page-chat-is-better-centered-with-quieter-chat-history-.md +6 -0
  230. package/src/templates/default/.agents/skills/frontend-design/SKILL.md +28 -0
  231. package/src/templates/default/app/routes/settings.tsx +2 -0
  232. package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +28 -0
  233. package/src/vite/client.ts +76 -8
@@ -35,6 +35,34 @@ Then implement working code that is cohesive, accessible, responsive, and polish
35
35
 
36
36
  Default to Apple/Linear-level restraint: make the primary workflow obvious, then remove everything that does not help that workflow right now. A polished UI often has fewer visible controls, fewer borders, fewer labels, and fewer explanatory surfaces than the first reasonable implementation.
37
37
 
38
+ ### Progressive Disclosure Is A Design Requirement
39
+
40
+ Treat an all-at-once interface as a defect to fix during design, not as a
41
+ styling preference. Before coding, inventory every piece of content and action
42
+ on the surface, then assign each one to the smallest useful visibility level:
43
+
44
+ 1. **Immediate** — the page title, current state, one primary action, and the
45
+ compact context needed to choose what to do next.
46
+ 2. **Expanded** — the details needed for the selected item or active workflow.
47
+ 3. **On demand** — advanced settings, diagnostics, credentials, metadata,
48
+ destructive actions, documentation, and rarely used tools.
49
+
50
+ Use single-select accordions or simple disclosure rows for sibling panels when
51
+ the user is choosing one item at a time. Inside an expanded panel, keep another
52
+ layer for independent concerns instead of dumping every form, explanation, and
53
+ secondary action into the first reveal. Prefer one flat panel with alignment,
54
+ dividers, and whitespace over nested cards; provider or product icons should
55
+ not receive decorative borders or containers unless the container communicates
56
+ state or interaction. A collapsed row should still show the item name, status,
57
+ and a concise summary so the user can scan the whole surface without opening
58
+ everything.
59
+
60
+ Before shipping, ask: “What can disappear until the user asks for it?” Then
61
+ verify collapsed, expanded, loading, empty, error, and narrow-width states.
62
+ If the first viewport contains multiple forms, repeated explanatory copy,
63
+ documentation links, and controls for unrelated tasks, the surface has not
64
+ passed this requirement yet.
65
+
38
66
  - **Start by subtracting**: Before adding a visible control, banner, toolbar row, card, or explanatory block, ask what can be removed, merged, renamed, or moved into an existing affordance.
39
67
  - **One primary action**: Each surface should have one dominant next action. Secondary actions belong in menus, popovers, command palettes, disclosure rows, or contextual hover/focus states unless they are used constantly.
40
68
  - **Progressively disclose rare work**: Advanced options, diagnostics, metadata, settings, import/export, destructive actions, and inspection tools should stay tucked away until requested. Prefer small icon triggers with tooltips, popovers, drawers, or detail panels over permanent chrome.
@@ -68,10 +68,9 @@ export function Layout({ children }: LayoutProps) {
68
68
  useAgentChatHomeHandoffLinks({
69
69
  storageKey: ASSETS_CHAT_STORAGE_KEY,
70
70
  isChatPath: (pathname) => pathname === "/" || pathname.startsWith("/chat/"),
71
- // A direct /chat/:id link already names the thread and must preserve the
72
- // normal chat-to-sidebar transition. Only the empty home chat needs the
73
- // recent marker that proves an agent handoff is in flight.
74
- requireActiveHandoff: false,
71
+ // Only preserve the transition when chat activity has recorded an active
72
+ // handoff; an empty home chat should keep the destination sidebar closed.
73
+ requireActiveHandoff: true,
75
74
  });
76
75
 
77
76
  useEffect(() => {
@@ -240,7 +240,7 @@ function AssetsChatsSection() {
240
240
  }
241
241
 
242
242
  return (
243
- <div className="mt-2 border-s border-border/70 ps-3">
243
+ <div className="mt-2 ms-4">
244
244
  <ChatHistoryRail
245
245
  items={chatItems}
246
246
  activeId={displayedActiveThreadId}
@@ -92,11 +92,6 @@
92
92
  background: hsl(var(--muted-foreground) / 0.4);
93
93
  }
94
94
 
95
- .assets-create-chat-panel [data-agent-empty-state="centered"] {
96
- justify-content: center;
97
- padding-bottom: clamp(4rem, 12vh, 8rem);
98
- }
99
-
100
95
  .assets-create-chat-intro {
101
96
  display: none;
102
97
  }
@@ -1,10 +1,5 @@
1
- import { markAgentChatHomeHandoff } from "@agent-native/core/client/agent-chat";
2
1
  import { getBrowserTabId } from "@agent-native/core/client/hooks";
3
2
  import { useAgentRouteState } from "@agent-native/core/client/navigation";
4
- import { useLocation } from "react-router";
5
-
6
- import { ASSETS_CHAT_STORAGE_KEY } from "@/lib/chat";
7
-
8
3
  function optionalParam(params: URLSearchParams, key: string) {
9
4
  const value = params.get(key)?.trim();
10
5
  return value ? value : undefined;
@@ -191,28 +186,15 @@ function pathFromCommand(command: any): string | null {
191
186
  }
192
187
 
193
188
  export function useNavigationState() {
194
- const location = useLocation();
195
189
  useAgentRouteState({
196
190
  browserTabId: getBrowserTabId(),
197
191
  requestSource: getBrowserTabId(),
198
192
  getNavigationState: ({ pathname, search }) =>
199
193
  navigationFromPath(pathname, search),
200
194
  getCommandPath: (command) => pathFromCommand(command),
201
- onNavigate: (_command, path) => {
202
- if (
203
- isCreatePath(location.pathname) &&
204
- !isCreatePath(pathnameFromPath(path))
205
- ) {
206
- markAgentChatHomeHandoff(ASSETS_CHAT_STORAGE_KEY);
207
- }
208
- },
209
195
  });
210
196
  }
211
197
 
212
- function pathnameFromPath(path: string): string {
213
- return path.split(/[?#]/, 1)[0] || "/";
214
- }
215
-
216
198
  function decodePathParam(value: string): string {
217
199
  try {
218
200
  return decodeURIComponent(value);
@@ -220,7 +202,3 @@ function decodePathParam(value: string): string {
220
202
  return value;
221
203
  }
222
204
  }
223
-
224
- function isCreatePath(pathname: string): boolean {
225
- return pathname === "/" || pathname.startsWith("/chat/");
226
- }
@@ -9,6 +9,7 @@ import {
9
9
  } from "@agent-native/core/client/onboarding";
10
10
  import { TeamPage } from "@agent-native/core/client/org";
11
11
  import {
12
+ AccountSettingsCard,
12
13
  SettingsTabsPage,
13
14
  useAgentSettingsTabs,
14
15
  useBuilderConnectFlow,
@@ -107,6 +108,7 @@ export default function SettingsPage() {
107
108
  className="max-w-5xl"
108
109
  >
109
110
  <SettingsTabsPage
111
+ account={<AccountSettingsCard />}
110
112
  teamLabel={t("team.title")}
111
113
  extraTabs={agentSettingsTabs}
112
114
  generalSearchEntries={generalSearchEntries}
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-23
4
+ ---
5
+
6
+ Create and chat surfaces are better centered, with quieter chat history and a left-aligned New chat action.
@@ -35,6 +35,34 @@ Then implement working code that is cohesive, accessible, responsive, and polish
35
35
 
36
36
  Default to Apple/Linear-level restraint: make the primary workflow obvious, then remove everything that does not help that workflow right now. A polished UI often has fewer visible controls, fewer borders, fewer labels, and fewer explanatory surfaces than the first reasonable implementation.
37
37
 
38
+ ### Progressive Disclosure Is A Design Requirement
39
+
40
+ Treat an all-at-once interface as a defect to fix during design, not as a
41
+ styling preference. Before coding, inventory every piece of content and action
42
+ on the surface, then assign each one to the smallest useful visibility level:
43
+
44
+ 1. **Immediate** — the page title, current state, one primary action, and the
45
+ compact context needed to choose what to do next.
46
+ 2. **Expanded** — the details needed for the selected item or active workflow.
47
+ 3. **On demand** — advanced settings, diagnostics, credentials, metadata,
48
+ destructive actions, documentation, and rarely used tools.
49
+
50
+ Use single-select accordions or simple disclosure rows for sibling panels when
51
+ the user is choosing one item at a time. Inside an expanded panel, keep another
52
+ layer for independent concerns instead of dumping every form, explanation, and
53
+ secondary action into the first reveal. Prefer one flat panel with alignment,
54
+ dividers, and whitespace over nested cards; provider or product icons should
55
+ not receive decorative borders or containers unless the container communicates
56
+ state or interaction. A collapsed row should still show the item name, status,
57
+ and a concise summary so the user can scan the whole surface without opening
58
+ everything.
59
+
60
+ Before shipping, ask: “What can disappear until the user asks for it?” Then
61
+ verify collapsed, expanded, loading, empty, error, and narrow-width states.
62
+ If the first viewport contains multiple forms, repeated explanatory copy,
63
+ documentation links, and controls for unrelated tasks, the surface has not
64
+ passed this requirement yet.
65
+
38
66
  - **Start by subtracting**: Before adding a visible control, banner, toolbar row, card, or explanatory block, ask what can be removed, merged, renamed, or moved into an existing affordance.
39
67
  - **One primary action**: Each surface should have one dominant next action. Secondary actions belong in menus, popovers, command palettes, disclosure rows, or contextual hover/focus states unless they are used constantly.
40
68
  - **Progressively disclose rare work**: Advanced options, diagnostics, metadata, settings, import/export, destructive actions, and inspection tools should stay tucked away until requested. Prefer small icon triggers with tooltips, popovers, drawers, or detail panels over permanent chrome.
@@ -47,7 +47,7 @@ export function Layout({ children }: { children: React.ReactNode }) {
47
47
  useAgentChatHomeHandoffLinks({
48
48
  storageKey: "brain",
49
49
  chatPath: "/",
50
- requireActiveHandoff: false,
50
+ requireActiveHandoff: true,
51
51
  });
52
52
 
53
53
  useEffect(() => {
@@ -175,7 +175,7 @@ function BrainChatsSection() {
175
175
  }
176
176
 
177
177
  return (
178
- <div className="mt-2 border-s border-sidebar-border/70 ps-3">
178
+ <div className="mt-2 ms-4">
179
179
  <ChatHistoryRail
180
180
  items={chatItems}
181
181
  activeId={activeThreadId}
@@ -85,10 +85,6 @@
85
85
  }
86
86
 
87
87
  @container agent-native-main (min-width: 980px) {
88
- .brain-settings-general-grid {
89
- grid-template-columns: minmax(0, 1fr) 360px;
90
- }
91
-
92
88
  .brain-source-card-grid {
93
89
  grid-template-columns: minmax(0, 1fr) minmax(20rem, auto) auto;
94
90
  align-items: center;
@@ -123,11 +119,6 @@
123
119
  background: hsl(var(--muted-foreground) / 0.4);
124
120
  }
125
121
 
126
- .brain-chat-panel [data-agent-empty-state="centered"] {
127
- justify-content: center;
128
- padding-bottom: clamp(4rem, 12vh, 8rem);
129
- }
130
-
131
122
  .brain-chat-intro {
132
123
  display: none;
133
124
  }
@@ -1,7 +1,5 @@
1
- import { markAgentChatHomeHandoff } from "@agent-native/core/client/agent-chat";
2
1
  import { appBasePath, appPath } from "@agent-native/core/client/api-path";
3
2
  import { useAgentRouteState } from "@agent-native/core/client/navigation";
4
- import { useLocation } from "react-router";
5
3
 
6
4
  import { pathFromView, viewFromPath, type BrainView } from "@/lib/brain";
7
5
  import { TAB_ID } from "@/lib/tab-id";
@@ -32,7 +30,6 @@ export interface NavigationState {
32
30
  }
33
31
 
34
32
  export function useNavigationState() {
35
- const location = useLocation();
36
33
  useAgentRouteState<NavigationState>({
37
34
  browserTabId: TAB_ID,
38
35
  requestSource: TAB_ID,
@@ -105,18 +102,9 @@ export function useNavigationState() {
105
102
  );
106
103
  return `${path}${params.size ? `?${params.toString()}` : ""}`;
107
104
  },
108
- onNavigate: (_command, path) => {
109
- if (location.pathname === "/" && pathnameFromPath(path) !== "/") {
110
- markAgentChatHomeHandoff("brain");
111
- }
112
- },
113
105
  });
114
106
  }
115
107
 
116
- function pathnameFromPath(path: string): string {
117
- return path.split(/[?#]/, 1)[0] || "/";
118
- }
119
-
120
108
  /**
121
109
  * Resolve a navigate command `view` to a router path. `view: "capture"` (or any
122
110
  * command that only carries a `captureId`) resolves to the Search surface,
@@ -57,6 +57,7 @@ const enUS = {
57
57
  brainNavigationDescription: "Navigate between Brain work surfaces.",
58
58
  },
59
59
  settings: {
60
+ pageTitle: "Settings",
60
61
  agentTitle: "Manage agent",
61
62
  agentDescription:
62
63
  "Manage the agent's model, API keys, automations, voice, and other controls.",
@@ -1,7 +1,7 @@
1
1
  export function createSettingsSectionIds(
2
2
  appSectionIds: Iterable<string>,
3
3
  ): Set<string> {
4
- return new Set(["general", "team", "whats-new", ...appSectionIds]);
4
+ return new Set(["general", "account", "team", "whats-new", ...appSectionIds]);
5
5
  }
6
6
 
7
7
  export function resolveSettingsSection(
@@ -6,6 +6,7 @@ import {
6
6
  import { LanguagePicker, useT } from "@agent-native/core/client/i18n";
7
7
  import { TeamPage } from "@agent-native/core/client/org";
8
8
  import {
9
+ AccountSettingsCard,
9
10
  SettingsTabsPage,
10
11
  useAgentSettingsTabs,
11
12
  type SettingsSearchEntry,
@@ -24,7 +25,7 @@ import {
24
25
  import { useEffect, useMemo, useState } from "react";
25
26
  import { useSearchParams } from "react-router";
26
27
 
27
- import { EmptyActionState, PageHeader } from "@/components/brain/Surface";
28
+ import { EmptyActionState } from "@/components/brain/Surface";
28
29
  import { Badge } from "@/components/ui/badge";
29
30
  import { Button } from "@/components/ui/button";
30
31
  import {
@@ -658,35 +659,33 @@ export default function SettingsRoute() {
658
659
 
659
660
  return (
660
661
  <div className="min-h-full bg-background">
661
- <PageHeader
662
- eyebrow={t("settings.eyebrow")}
663
- title={t("settings.title")}
664
- description={t("settings.description")}
665
- actions={
666
- <Button
667
- size="sm"
668
- className="w-full sm:w-auto"
669
- disabled={saveSettings.isPending || !isDirty}
670
- onClick={() => saveSettings.mutate(settings)}
671
- >
672
- <IconDeviceFloppy className="size-4" />
673
- {saveSettings.isPending
674
- ? t("common.saving")
675
- : isDirty
676
- ? t("common.saveChanges")
677
- : t("common.saved")}
678
- </Button>
679
- }
680
- />
662
+ <header className="flex items-center justify-between gap-4 px-4 py-3 sm:px-5 lg:px-7">
663
+ <h1 className="text-lg font-semibold tracking-tight text-foreground">
664
+ {t("settings.pageTitle")}
665
+ </h1>
666
+ <Button
667
+ size="sm"
668
+ disabled={saveSettings.isPending || !isDirty}
669
+ onClick={() => saveSettings.mutate(settings)}
670
+ >
671
+ <IconDeviceFloppy className="size-4" />
672
+ {saveSettings.isPending
673
+ ? t("common.saving")
674
+ : isDirty
675
+ ? t("common.saveChanges")
676
+ : t("common.saved")}
677
+ </Button>
678
+ </header>
681
679
 
682
680
  <SettingsTabsPage
681
+ account={<AccountSettingsCard />}
683
682
  teamLabel={t("team.title")}
684
683
  extraTabs={settingsTabs}
685
684
  generalSearchEntries={generalSearchEntries}
686
685
  value={activeSection}
687
686
  onValueChange={handleSectionChange}
688
687
  general={
689
- <div className="brain-settings-general-grid grid gap-5">
688
+ <div className="mx-auto grid w-full max-w-3xl gap-5">
690
689
  <main className="grid gap-5">
691
690
  <Card id="identity" className="scroll-mt-4">
692
691
  <CardHeader>
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-23
4
+ ---
5
+
6
+ Ask Brain is better centered, with quieter chat history and a left-aligned New chat action.
@@ -35,6 +35,34 @@ Then implement working code that is cohesive, accessible, responsive, and polish
35
35
 
36
36
  Default to Apple/Linear-level restraint: make the primary workflow obvious, then remove everything that does not help that workflow right now. A polished UI often has fewer visible controls, fewer borders, fewer labels, and fewer explanatory surfaces than the first reasonable implementation.
37
37
 
38
+ ### Progressive Disclosure Is A Design Requirement
39
+
40
+ Treat an all-at-once interface as a defect to fix during design, not as a
41
+ styling preference. Before coding, inventory every piece of content and action
42
+ on the surface, then assign each one to the smallest useful visibility level:
43
+
44
+ 1. **Immediate** — the page title, current state, one primary action, and the
45
+ compact context needed to choose what to do next.
46
+ 2. **Expanded** — the details needed for the selected item or active workflow.
47
+ 3. **On demand** — advanced settings, diagnostics, credentials, metadata,
48
+ destructive actions, documentation, and rarely used tools.
49
+
50
+ Use single-select accordions or simple disclosure rows for sibling panels when
51
+ the user is choosing one item at a time. Inside an expanded panel, keep another
52
+ layer for independent concerns instead of dumping every form, explanation, and
53
+ secondary action into the first reveal. Prefer one flat panel with alignment,
54
+ dividers, and whitespace over nested cards; provider or product icons should
55
+ not receive decorative borders or containers unless the container communicates
56
+ state or interaction. A collapsed row should still show the item name, status,
57
+ and a concise summary so the user can scan the whole surface without opening
58
+ everything.
59
+
60
+ Before shipping, ask: “What can disappear until the user asks for it?” Then
61
+ verify collapsed, expanded, loading, empty, error, and narrow-width states.
62
+ If the first viewport contains multiple forms, repeated explanatory copy,
63
+ documentation links, and controls for unrelated tasks, the surface has not
64
+ passed this requirement yet.
65
+
38
66
  - **Start by subtracting**: Before adding a visible control, banner, toolbar row, card, or explanatory block, ask what can be removed, merged, renamed, or moved into an existing affordance.
39
67
  - **One primary action**: Each surface should have one dominant next action. Secondary actions belong in menus, popovers, command palettes, disclosure rows, or contextual hover/focus states unless they are used constantly.
40
68
  - **Progressively disclose rare work**: Advanced options, diagnostics, metadata, settings, import/export, destructive actions, and inspection tools should stay tucked away until requested. Prefer small icon triggers with tooltips, popovers, drawers, or detail panels over permanent chrome.
@@ -3,6 +3,7 @@ import { callAction } from "@agent-native/core/client/hooks";
3
3
  import { LanguagePicker, useT } from "@agent-native/core/client/i18n";
4
4
  import { TeamPage } from "@agent-native/core/client/org";
5
5
  import {
6
+ AccountSettingsCard,
6
7
  SettingsTabsPage,
7
8
  useAgentSettingsTabs,
8
9
  type SettingsSearchEntry,
@@ -197,6 +198,7 @@ export default function Settings() {
197
198
 
198
199
  return (
199
200
  <SettingsTabsPage
201
+ account={<AccountSettingsCard />}
200
202
  generalLabel={t("settings.general")}
201
203
  teamLabel={t("navigation.team")}
202
204
  extraTabs={agentSettingsTabs}
@@ -35,6 +35,34 @@ Then implement working code that is cohesive, accessible, responsive, and polish
35
35
 
36
36
  Default to Apple/Linear-level restraint: make the primary workflow obvious, then remove everything that does not help that workflow right now. A polished UI often has fewer visible controls, fewer borders, fewer labels, and fewer explanatory surfaces than the first reasonable implementation.
37
37
 
38
+ ### Progressive Disclosure Is A Design Requirement
39
+
40
+ Treat an all-at-once interface as a defect to fix during design, not as a
41
+ styling preference. Before coding, inventory every piece of content and action
42
+ on the surface, then assign each one to the smallest useful visibility level:
43
+
44
+ 1. **Immediate** — the page title, current state, one primary action, and the
45
+ compact context needed to choose what to do next.
46
+ 2. **Expanded** — the details needed for the selected item or active workflow.
47
+ 3. **On demand** — advanced settings, diagnostics, credentials, metadata,
48
+ destructive actions, documentation, and rarely used tools.
49
+
50
+ Use single-select accordions or simple disclosure rows for sibling panels when
51
+ the user is choosing one item at a time. Inside an expanded panel, keep another
52
+ layer for independent concerns instead of dumping every form, explanation, and
53
+ secondary action into the first reveal. Prefer one flat panel with alignment,
54
+ dividers, and whitespace over nested cards; provider or product icons should
55
+ not receive decorative borders or containers unless the container communicates
56
+ state or interaction. A collapsed row should still show the item name, status,
57
+ and a concise summary so the user can scan the whole surface without opening
58
+ everything.
59
+
60
+ Before shipping, ask: “What can disappear until the user asks for it?” Then
61
+ verify collapsed, expanded, loading, empty, error, and narrow-width states.
62
+ If the first viewport contains multiple forms, repeated explanatory copy,
63
+ documentation links, and controls for unrelated tasks, the surface has not
64
+ passed this requirement yet.
65
+
38
66
  - **Start by subtracting**: Before adding a visible control, banner, toolbar row, card, or explanatory block, ask what can be removed, merged, renamed, or moved into an existing affordance.
39
67
  - **One primary action**: Each surface should have one dominant next action. Secondary actions belong in menus, popovers, command palettes, disclosure rows, or contextual hover/focus states unless they are used constantly.
40
68
  - **Progressively disclose rare work**: Advanced options, diagnostics, metadata, settings, import/export, destructive actions, and inspection tools should stay tucked away until requested. Prefer small icon triggers with tooltips, popovers, drawers, or detail panels over permanent chrome.
@@ -60,7 +60,7 @@ export function Layout({ children }: LayoutProps) {
60
60
  useAgentChatHomeHandoffLinks({
61
61
  storageKey: "chat",
62
62
  isChatPath: (pathname) => pathname === "/" || pathname.startsWith("/chat/"),
63
- requireActiveHandoff: false,
63
+ requireActiveHandoff: true,
64
64
  });
65
65
 
66
66
  useEffect(() => {
@@ -228,7 +228,7 @@ function ChatThreadsSection() {
228
228
  }
229
229
 
230
230
  return (
231
- <div className="mt-2 border-s border-sidebar-border/70 ps-3">
231
+ <div className="mt-2 ms-4">
232
232
  <ChatHistoryRail
233
233
  items={chatItems}
234
234
  activeId={displayedActiveThreadId}
@@ -1,7 +1,5 @@
1
- import { markAgentChatHomeHandoff } from "@agent-native/core/client/agent-chat";
2
1
  import { appBasePath, appPath } from "@agent-native/core/client/api-path";
3
2
  import { useAgentRouteState } from "@agent-native/core/client/navigation";
4
- import { useLocation } from "react-router";
5
3
 
6
4
  import { TAB_ID } from "@/lib/tab-id";
7
5
 
@@ -12,7 +10,6 @@ export interface NavigationState {
12
10
  }
13
11
 
14
12
  export function useNavigationState() {
15
- const location = useLocation();
16
13
  useAgentRouteState<NavigationState>({
17
14
  browserTabId: TAB_ID,
18
15
  requestSource: TAB_ID,
@@ -26,21 +23,9 @@ export function useNavigationState() {
26
23
  },
27
24
  getCommandPath: (command) =>
28
25
  routerPath(command.path || pathForCommand(command)),
29
- onNavigate: (_command, path) => {
30
- if (
31
- isChatPath(location.pathname) &&
32
- !isChatPath(pathnameFromPath(path))
33
- ) {
34
- markAgentChatHomeHandoff("chat");
35
- }
36
- },
37
26
  });
38
27
  }
39
28
 
40
- function pathnameFromPath(path: string): string {
41
- return path.split(/[?#]/, 1)[0] || "/";
42
- }
43
-
44
29
  function threadIdFromPath(pathname: string): string | null {
45
30
  const match = pathname.match(/^\/chat\/([^/]+)/);
46
31
  if (!match) return null;
@@ -2,6 +2,7 @@ import { ChangelogSettingsCard } from "@agent-native/core/client/changelog";
2
2
  import { LanguagePicker, useT } from "@agent-native/core/client/i18n";
3
3
  import { TeamPage } from "@agent-native/core/client/org";
4
4
  import {
5
+ AccountSettingsCard,
5
6
  SettingsTabsPage,
6
7
  useAgentSettingsTabs,
7
8
  type SettingsSearchEntry,
@@ -44,6 +45,7 @@ export default function SettingsRoute() {
44
45
 
45
46
  return (
46
47
  <SettingsTabsPage
48
+ account={<AccountSettingsCard />}
47
49
  teamLabel={t("navigation.team")}
48
50
  extraTabs={agentSettingsTabs}
49
51
  generalSearchEntries={generalSearchEntries}
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-23
4
+ ---
5
+
6
+ Full-page chat is better centered, with quieter chat history and a left-aligned New chat action.
@@ -35,6 +35,34 @@ Then implement working code that is cohesive, accessible, responsive, and polish
35
35
 
36
36
  Default to Apple/Linear-level restraint: make the primary workflow obvious, then remove everything that does not help that workflow right now. A polished UI often has fewer visible controls, fewer borders, fewer labels, and fewer explanatory surfaces than the first reasonable implementation.
37
37
 
38
+ ### Progressive Disclosure Is A Design Requirement
39
+
40
+ Treat an all-at-once interface as a defect to fix during design, not as a
41
+ styling preference. Before coding, inventory every piece of content and action
42
+ on the surface, then assign each one to the smallest useful visibility level:
43
+
44
+ 1. **Immediate** — the page title, current state, one primary action, and the
45
+ compact context needed to choose what to do next.
46
+ 2. **Expanded** — the details needed for the selected item or active workflow.
47
+ 3. **On demand** — advanced settings, diagnostics, credentials, metadata,
48
+ destructive actions, documentation, and rarely used tools.
49
+
50
+ Use single-select accordions or simple disclosure rows for sibling panels when
51
+ the user is choosing one item at a time. Inside an expanded panel, keep another
52
+ layer for independent concerns instead of dumping every form, explanation, and
53
+ secondary action into the first reveal. Prefer one flat panel with alignment,
54
+ dividers, and whitespace over nested cards; provider or product icons should
55
+ not receive decorative borders or containers unless the container communicates
56
+ state or interaction. A collapsed row should still show the item name, status,
57
+ and a concise summary so the user can scan the whole surface without opening
58
+ everything.
59
+
60
+ Before shipping, ask: “What can disappear until the user asks for it?” Then
61
+ verify collapsed, expanded, loading, empty, error, and narrow-width states.
62
+ If the first viewport contains multiple forms, repeated explanatory copy,
63
+ documentation links, and controls for unrelated tasks, the surface has not
64
+ passed this requirement yet.
65
+
38
66
  - **Start by subtracting**: Before adding a visible control, banner, toolbar row, card, or explanatory block, ask what can be removed, merged, renamed, or moved into an existing affordance.
39
67
  - **One primary action**: Each surface should have one dominant next action. Secondary actions belong in menus, popovers, command palettes, disclosure rows, or contextual hover/focus states unless they are used constantly.
40
68
  - **Progressively disclose rare work**: Advanced options, diagnostics, metadata, settings, import/export, destructive actions, and inspection tools should stay tucked away until requested. Prefer small icon triggers with tooltips, popovers, drawers, or detail panels over permanent chrome.
@@ -7,6 +7,7 @@ import { useSession, useActionQuery } from "@agent-native/core/client/hooks";
7
7
  import { LanguagePicker, useT } from "@agent-native/core/client/i18n";
8
8
  import { TeamPage, useOrg, useSwitchOrg } from "@agent-native/core/client/org";
9
9
  import {
10
+ AccountSettingsCard,
10
11
  useBuilderConnectFlow,
11
12
  useBuilderStatus,
12
13
  SettingsTabsPage,
@@ -836,6 +837,7 @@ export default function SettingsIndexRoute() {
836
837
  </h1>
837
838
  </PageHeader>
838
839
  <SettingsTabsPage
840
+ account={<AccountSettingsCard />}
839
841
  whatsNewLabel={t("settings.whatsNew")}
840
842
  extraTabs={agentSettingsTabs}
841
843
  generalSearchEntries={generalSearchEntries}
@@ -35,6 +35,34 @@ Then implement working code that is cohesive, accessible, responsive, and polish
35
35
 
36
36
  Default to Apple/Linear-level restraint: make the primary workflow obvious, then remove everything that does not help that workflow right now. A polished UI often has fewer visible controls, fewer borders, fewer labels, and fewer explanatory surfaces than the first reasonable implementation.
37
37
 
38
+ ### Progressive Disclosure Is A Design Requirement
39
+
40
+ Treat an all-at-once interface as a defect to fix during design, not as a
41
+ styling preference. Before coding, inventory every piece of content and action
42
+ on the surface, then assign each one to the smallest useful visibility level:
43
+
44
+ 1. **Immediate** — the page title, current state, one primary action, and the
45
+ compact context needed to choose what to do next.
46
+ 2. **Expanded** — the details needed for the selected item or active workflow.
47
+ 3. **On demand** — advanced settings, diagnostics, credentials, metadata,
48
+ destructive actions, documentation, and rarely used tools.
49
+
50
+ Use single-select accordions or simple disclosure rows for sibling panels when
51
+ the user is choosing one item at a time. Inside an expanded panel, keep another
52
+ layer for independent concerns instead of dumping every form, explanation, and
53
+ secondary action into the first reveal. Prefer one flat panel with alignment,
54
+ dividers, and whitespace over nested cards; provider or product icons should
55
+ not receive decorative borders or containers unless the container communicates
56
+ state or interaction. A collapsed row should still show the item name, status,
57
+ and a concise summary so the user can scan the whole surface without opening
58
+ everything.
59
+
60
+ Before shipping, ask: “What can disappear until the user asks for it?” Then
61
+ verify collapsed, expanded, loading, empty, error, and narrow-width states.
62
+ If the first viewport contains multiple forms, repeated explanatory copy,
63
+ documentation links, and controls for unrelated tasks, the surface has not
64
+ passed this requirement yet.
65
+
38
66
  - **Start by subtracting**: Before adding a visible control, banner, toolbar row, card, or explanatory block, ask what can be removed, merged, renamed, or moved into an existing affordance.
39
67
  - **One primary action**: Each surface should have one dominant next action. Secondary actions belong in menus, popovers, command palettes, disclosure rows, or contextual hover/focus states unless they are used constantly.
40
68
  - **Progressively disclose rare work**: Advanced options, diagnostics, metadata, settings, import/export, destructive actions, and inspection tools should stay tucked away until requested. Prefer small icon triggers with tooltips, popovers, drawers, or detail panels over permanent chrome.
@@ -2,6 +2,7 @@ import { ChangelogSettingsCard } from "@agent-native/core/client/changelog";
2
2
  import { LanguagePicker, useT } from "@agent-native/core/client/i18n";
3
3
  import { TeamPage } from "@agent-native/core/client/org";
4
4
  import {
5
+ AccountSettingsCard,
5
6
  SettingsTabsPage,
6
7
  useAgentSettingsTabs,
7
8
  type SettingsSearchEntry,
@@ -39,6 +40,7 @@ export default function SettingsRoute() {
39
40
  return (
40
41
  <div className="flex-1 overflow-auto">
41
42
  <SettingsTabsPage
43
+ account={<AccountSettingsCard />}
42
44
  teamLabel={t("team.pageTitle")}
43
45
  extraTabs={agentSettingsTabs}
44
46
  generalSearchEntries={generalSearchEntries}