@agent-native/core 0.119.1 → 0.119.2
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.
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +15 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/a2a/client.ts +4 -0
- package/corpus/core/src/agent/production-agent.ts +1 -0
- package/corpus/core/src/client/AssistantChat.tsx +11 -50
- package/corpus/core/src/client/ErrorBoundary.tsx +25 -19
- package/corpus/core/src/client/agent-page/AgentTabFrame.tsx +1 -1
- package/corpus/core/src/client/agent-page/AgentTabsPage.tsx +23 -0
- package/corpus/core/src/client/components/ui/message-scroller.tsx +1 -9
- package/corpus/core/src/client/resources/ResourceTree.tsx +3 -3
- package/corpus/core/src/client/resources/ResourcesPanel.tsx +64 -60
- package/corpus/core/src/client/settings/AccountSettingsCard.tsx +228 -0
- package/corpus/core/src/client/settings/SecretsSection.tsx +7 -5
- package/corpus/core/src/client/settings/SettingsPanel.tsx +67 -244
- package/corpus/core/src/client/settings/SettingsTabsPage.tsx +88 -21
- package/corpus/core/src/client/settings/agent-settings-search.ts +0 -2
- package/corpus/core/src/client/settings/index.ts +7 -0
- package/corpus/core/src/client/vite-dev-recovery-script.ts +18 -1
- package/corpus/core/src/db/client.ts +65 -15
- package/corpus/core/src/db/index.ts +2 -0
- package/corpus/core/src/localization/default-messages.ts +1 -0
- package/corpus/core/src/server/email.ts +33 -1
- package/corpus/core/src/styles/agent-native.css +23 -0
- package/corpus/core/src/templates/default/.agents/skills/frontend-design/SKILL.md +28 -0
- package/corpus/core/src/templates/default/app/routes/settings.tsx +2 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +28 -0
- package/corpus/core/src/vite/client.ts +76 -8
- package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +28 -0
- package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +3 -1
- package/corpus/templates/analytics/app/components/layout/Layout.tsx +9 -13
- package/corpus/templates/analytics/app/components/layout/layout-route-policy.ts +2 -2
- package/corpus/templates/analytics/app/global.css +0 -5
- package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +0 -13
- package/corpus/templates/analytics/app/lib/sql-query.ts +15 -2
- package/corpus/templates/analytics/app/pages/Settings.tsx +2 -24
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +6 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +4 -0
- package/corpus/templates/analytics/app/pages/settings/settings-search.ts +1 -1
- package/corpus/templates/analytics/changelog/2026-07-23-ask-analytics-is-better-centered-with-a-quieter-chat-rail-an.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-23-daily-dashboard-emails-load-read-heavy-panels-reliably.md +6 -0
- package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +2 -2
- package/corpus/templates/analytics/server/jobs/dashboard-report.ts +39 -5
- package/corpus/templates/analytics/server/lib/dashboard-report.ts +186 -62
- package/corpus/templates/analytics/server/lib/first-party-analytics.ts +3 -0
- package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +18 -2
- package/corpus/templates/analytics/shared/dashboard-report-timeouts.ts +3 -0
- package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +28 -0
- package/corpus/templates/assets/app/components/layout/Layout.tsx +3 -4
- package/corpus/templates/assets/app/components/layout/Sidebar.tsx +1 -1
- package/corpus/templates/assets/app/global.css +0 -5
- package/corpus/templates/assets/app/hooks/use-navigation-state.ts +0 -22
- package/corpus/templates/assets/app/routes/settings.tsx +2 -0
- package/corpus/templates/assets/changelog/2026-07-23-create-and-chat-surfaces-are-better-centered-with-quieter-ch.md +6 -0
- package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +28 -0
- package/corpus/templates/brain/app/components/layout/Layout.tsx +1 -1
- package/corpus/templates/brain/app/components/layout/Sidebar.tsx +1 -1
- package/corpus/templates/brain/app/global.css +0 -9
- package/corpus/templates/brain/app/hooks/use-navigation-state.ts +0 -12
- package/corpus/templates/brain/app/i18n-data.ts +1 -0
- package/corpus/templates/brain/app/lib/settings-navigation.ts +1 -1
- package/corpus/templates/brain/app/routes/settings.tsx +21 -22
- package/corpus/templates/brain/changelog/2026-07-23-ask-brain-is-better-centered-with-quieter-chat-history-and-a.md +6 -0
- package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +28 -0
- package/corpus/templates/calendar/app/pages/Settings.tsx +2 -0
- package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +28 -0
- package/corpus/templates/chat/app/components/layout/Layout.tsx +1 -1
- package/corpus/templates/chat/app/components/layout/Sidebar.tsx +1 -1
- package/corpus/templates/chat/app/hooks/use-navigation-state.ts +0 -15
- package/corpus/templates/chat/app/routes/settings.tsx +2 -0
- package/corpus/templates/chat/changelog/2026-07-23-full-page-chat-is-better-centered-with-quieter-chat-history-.md +6 -0
- package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +28 -0
- package/corpus/templates/clips/app/routes/_app.settings._index.tsx +2 -0
- package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +28 -0
- package/corpus/templates/content/app/routes/_app.settings.tsx +2 -0
- package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +28 -0
- package/corpus/templates/design/app/routes/settings.tsx +2 -0
- package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +28 -0
- package/corpus/templates/dispatch/app/routes/settings.tsx +2 -0
- package/corpus/templates/dispatch/changelog/2026-07-23-quieter-progressive-disclosure.md +6 -0
- package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +28 -0
- package/corpus/templates/forms/app/global.css +0 -5
- package/corpus/templates/forms/app/hooks/use-navigation-state.ts +0 -7
- package/corpus/templates/forms/app/root.tsx +1 -7
- package/corpus/templates/forms/app/routes/_app.settings.tsx +2 -0
- package/corpus/templates/forms/changelog/2026-07-23-ask-forms-is-better-centered-with-quieter-chat-history-and-a.md +6 -0
- package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +28 -0
- package/corpus/templates/macros/app/routes/settings.tsx +2 -0
- package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +28 -0
- package/corpus/templates/mail/app/pages/SettingsPage.tsx +3 -1
- package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +28 -0
- package/corpus/templates/plan/app/components/layout/Layout.tsx +2 -2
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +1 -13
- package/corpus/templates/plan/app/hooks/use-navigation-state.ts +0 -4
- package/corpus/templates/plan/app/routes/settings.tsx +2 -0
- package/corpus/templates/plan/changelog/2026-07-23-ask-plan-is-now-a-clean-full-page-chat-surface-with-better-c.md +6 -0
- package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +28 -0
- package/corpus/templates/slides/app/routes/settings.tsx +2 -0
- package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +28 -0
- package/corpus/toolkit/CHANGELOG.md +6 -0
- package/corpus/toolkit/package.json +1 -1
- package/corpus/toolkit/src/chat-history.css +2 -2
- package/corpus/toolkit/src/composer/PromptComposer.tsx +0 -31
- package/corpus/toolkit/src/composer/RealtimeVoiceMode.tsx +7 -2
- package/corpus/toolkit/src/styles.css +183 -36
- package/dist/a2a/client.d.ts +2 -0
- package/dist/a2a/client.d.ts.map +1 -1
- package/dist/a2a/client.js +2 -0
- package/dist/a2a/client.js.map +1 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +1 -0
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +11 -42
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/ErrorBoundary.d.ts.map +1 -1
- package/dist/client/ErrorBoundary.js +3 -2
- package/dist/client/ErrorBoundary.js.map +1 -1
- package/dist/client/agent-page/AgentTabFrame.js +1 -1
- package/dist/client/agent-page/AgentTabFrame.js.map +1 -1
- package/dist/client/agent-page/AgentTabsPage.d.ts.map +1 -1
- package/dist/client/agent-page/AgentTabsPage.js +13 -1
- package/dist/client/agent-page/AgentTabsPage.js.map +1 -1
- package/dist/client/components/ui/message-scroller.d.ts.map +1 -1
- package/dist/client/components/ui/message-scroller.js +2 -2
- package/dist/client/components/ui/message-scroller.js.map +1 -1
- package/dist/client/resources/ResourceTree.js +2 -2
- package/dist/client/resources/ResourceTree.js.map +1 -1
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +11 -11
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/settings/AccountSettingsCard.d.ts +9 -0
- package/dist/client/settings/AccountSettingsCard.d.ts.map +1 -0
- package/dist/client/settings/AccountSettingsCard.js +78 -0
- package/dist/client/settings/AccountSettingsCard.js.map +1 -0
- package/dist/client/settings/SecretsSection.d.ts.map +1 -1
- package/dist/client/settings/SecretsSection.js +2 -2
- package/dist/client/settings/SecretsSection.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts +3 -0
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +25 -77
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/SettingsTabsPage.d.ts +5 -1
- package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
- package/dist/client/settings/SettingsTabsPage.js +35 -9
- package/dist/client/settings/SettingsTabsPage.js.map +1 -1
- package/dist/client/settings/agent-settings-search.d.ts.map +1 -1
- package/dist/client/settings/agent-settings-search.js +0 -2
- package/dist/client/settings/agent-settings-search.js.map +1 -1
- package/dist/client/settings/index.d.ts +2 -1
- package/dist/client/settings/index.d.ts.map +1 -1
- package/dist/client/settings/index.js +2 -1
- package/dist/client/settings/index.js.map +1 -1
- package/dist/client/vite-dev-recovery-script.d.ts.map +1 -1
- package/dist/client/vite-dev-recovery-script.js +18 -1
- package/dist/client/vite-dev-recovery-script.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/db/client.d.ts +18 -8
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +34 -11
- package/dist/db/client.js.map +1 -1
- package/dist/db/index.d.ts +1 -1
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js.map +1 -1
- package/dist/localization/default-messages.d.ts +1 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +1 -0
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/notifications/routes.d.ts +2 -2
- package/dist/observability/routes.d.ts +3 -3
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +7 -7
- package/dist/provider-api/actions/provider-api.d.ts +7 -7
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/secrets/routes.d.ts +9 -9
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/email.d.ts +1 -0
- package/dist/server/email.d.ts.map +1 -1
- package/dist/server/email.js +29 -1
- package/dist/server/email.js.map +1 -1
- package/dist/server/realtime-token.d.ts +1 -1
- package/dist/styles/agent-native.css +23 -0
- package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +28 -0
- package/dist/templates/chat/app/components/layout/Layout.tsx +1 -1
- package/dist/templates/chat/app/components/layout/Sidebar.tsx +1 -1
- package/dist/templates/chat/app/hooks/use-navigation-state.ts +0 -15
- package/dist/templates/chat/app/routes/settings.tsx +2 -0
- package/dist/templates/chat/changelog/2026-07-23-full-page-chat-is-better-centered-with-quieter-chat-history-.md +6 -0
- package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +28 -0
- package/dist/templates/default/app/routes/settings.tsx +2 -0
- package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +28 -0
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +68 -6
- package/dist/vite/client.js.map +1 -1
- package/package.json +2 -2
- package/src/a2a/client.ts +4 -0
- package/src/agent/production-agent.ts +1 -0
- package/src/client/AssistantChat.tsx +11 -50
- package/src/client/ErrorBoundary.tsx +25 -19
- package/src/client/agent-page/AgentTabFrame.tsx +1 -1
- package/src/client/agent-page/AgentTabsPage.tsx +23 -0
- package/src/client/components/ui/message-scroller.tsx +1 -9
- package/src/client/resources/ResourceTree.tsx +3 -3
- package/src/client/resources/ResourcesPanel.tsx +64 -60
- package/src/client/settings/AccountSettingsCard.tsx +228 -0
- package/src/client/settings/SecretsSection.tsx +7 -5
- package/src/client/settings/SettingsPanel.tsx +67 -244
- package/src/client/settings/SettingsTabsPage.tsx +88 -21
- package/src/client/settings/agent-settings-search.ts +0 -2
- package/src/client/settings/index.ts +7 -0
- package/src/client/vite-dev-recovery-script.ts +18 -1
- package/src/db/client.ts +65 -15
- package/src/db/index.ts +2 -0
- package/src/localization/default-messages.ts +1 -0
- package/src/server/email.ts +33 -1
- package/src/styles/agent-native.css +23 -0
- package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +28 -0
- package/src/templates/chat/app/components/layout/Layout.tsx +1 -1
- package/src/templates/chat/app/components/layout/Sidebar.tsx +1 -1
- package/src/templates/chat/app/hooks/use-navigation-state.ts +0 -15
- package/src/templates/chat/app/routes/settings.tsx +2 -0
- package/src/templates/chat/changelog/2026-07-23-full-page-chat-is-better-centered-with-quieter-chat-history-.md +6 -0
- package/src/templates/default/.agents/skills/frontend-design/SKILL.md +28 -0
- package/src/templates/default/app/routes/settings.tsx +2 -0
- package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +28 -0
- package/src/vite/client.ts +76 -8
|
@@ -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}
|
|
@@ -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.
|
|
@@ -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
|
|
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
|
-
<
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
? t("common.
|
|
675
|
-
:
|
|
676
|
-
|
|
677
|
-
|
|
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="
|
|
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>
|
|
@@ -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:
|
|
63
|
+
requireActiveHandoff: true,
|
|
64
64
|
});
|
|
65
65
|
|
|
66
66
|
useEffect(() => {
|
|
@@ -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}
|
|
@@ -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}
|
|
@@ -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,
|
|
@@ -44,6 +45,7 @@ export default function SettingsRoute() {
|
|
|
44
45
|
return (
|
|
45
46
|
<div className="flex h-full min-h-0 flex-col overflow-y-auto bg-background">
|
|
46
47
|
<SettingsTabsPage
|
|
48
|
+
account={<AccountSettingsCard />}
|
|
47
49
|
extraTabs={agentSettingsTabs}
|
|
48
50
|
generalSearchEntries={generalSearchEntries}
|
|
49
51
|
general={
|