Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions frontend/design-system/tokens.css
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@
--c-key-edge: rgba(15, 23, 42, 0.14);
--c-key-inset: inset 0 1px 0 rgba(255, 255, 255, 0.9), 0 1px 2px rgba(16, 24, 40, 0.06);
--c-shadow-pane: 0 0 0 1px rgba(16, 24, 40, 0.07), 0 1px 2px rgba(16, 24, 40, 0.04), 0 12px 28px -20px rgba(16, 24, 40, 0.18);
--c-ring-card: 0 0 0 1px var(--c-border-soft), 0 1px 2px rgba(16, 24, 40, 0.04); /* card edge: ring + 1px lift */
--c-shadow-pop: 0 0 0 1px rgba(16, 24, 40, 0.08), 0 2px 4px rgba(16, 24, 40, 0.04), 0 18px 36px -14px rgba(16, 24, 40, 0.28);
--c-scrim: rgba(16, 24, 40, 0.18);
--c-av-ring: rgba(16, 24, 40, 0.07);
Expand Down
1 change: 1 addition & 0 deletions frontend/src/i18n/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -2440,6 +2440,7 @@
}
},
"connect": {
"intro": "MCP uses an agent token created during setup.",
"cliHeading": "Connect the CLI or MCP",
"copy": "Copy",
"copied": "Copied",
Expand Down
1 change: 1 addition & 0 deletions frontend/src/i18n/locales/zh-CN.json
Original file line number Diff line number Diff line change
Expand Up @@ -2428,6 +2428,7 @@
}
},
"connect": {
"intro": "MCP 用的是接入时创建的智能体密钥。",
"cliHeading": "连接 CLI 或 MCP",
"copy": "复制",
"copied": "已复制",
Expand Down
9 changes: 5 additions & 4 deletions frontend/src/v2/V2App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ const V2AgentProfileRoute: React.FC = () => {
return (
<V2AgentProfile
shell={isAuthenticated
? (page) => <V2AuthenticatedShell>{feature(t('common.pageTitle.agentProfile'), page, false, false)}</V2AuthenticatedShell>
? (page) => <V2AuthenticatedShell>{feature(t('common.pageTitle.agentProfile'), page, false, false, 'v2-feature--bar v2-feature--aprofile')}</V2AuthenticatedShell>
: undefined}
/>
);
Expand Down Expand Up @@ -346,6 +346,7 @@ const V2App: React.FC = () => {
/* V2YourTeamPage owns its own header — suppress the
generic V2FeaturePage chrome to avoid stacked titles. */
false,
'v2-feature--bar',
)}
/>
<Route
Expand All @@ -366,7 +367,7 @@ const V2App: React.FC = () => {
/>
<Route
path="connect"
element={<V2FeaturePage title="Connect" hint="MCP uses an agent token created during setup."><V2ConnectPage /></V2FeaturePage>}
element={<V2FeaturePage title="Connect"><V2ConnectPage /></V2FeaturePage>}
/>
<Route
path="connectors"
Expand All @@ -385,7 +386,7 @@ const V2App: React.FC = () => {
/>
<Route
path="pods/:podId/runs/:runId"
element={feature(t('runTrace.title'), <V2RunTrace />, false, false, 'v2-feature--run-trace')}
element={feature(t('runTrace.title'), <V2RunTrace />, false, false, 'v2-feature--bar v2-feature--run-trace')}
/>
<Route
path="pods/:podId/tasks/:taskId/record"
Expand All @@ -409,7 +410,7 @@ const V2App: React.FC = () => {
/>
<Route
path="profile/:id"
element={feature(t('common.pageTitle.profile'), <V2PersonProfile />, false, false, 'v2-feature--profile')}
element={feature(t('common.pageTitle.profile'), <V2PersonProfile />, false, false, 'v2-feature--bar v2-feature--profile')}
/>
<Route
path="admin/integrations/global"
Expand Down
21 changes: 16 additions & 5 deletions frontend/src/v2/__tests__/signalTokens.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -141,13 +141,24 @@ describe('dark-safe surfaces (TASK-681)', () => {
expect(rd('../agents/v2-agent-profile.css')).toMatch(/\.v2-aprofile__bar\s*\{[^}]*background: var\(--v2-surface\)/);
});
test('ink primary buttons take theme tokens, never a literal colour', () => {
// R06 lifted Your team onto the d215 frame: Hire and Answer are its ink
// key, the --v2-fill-* gradient with --v2-on-fill text, in the page's sheet.
const css = rd('../components/V2YourTeamPage.css');
const rule = css.match(/\n\.v2-team \.v2-team__hire, \.v2-team \.v2-team-card__answer \{[^}]*\}/);
// Rulings 11-04: Your team's Hire and Answer are the v2p ink key
// (.v2p-b-p), the --v2-fill-* gradient with --v2-on-fill text.
expect(rd('../components/V2YourTeamPage.tsx')).toContain('v2p-b v2p-b-p v2p-b-sm v2-team__hire');
const css = rd('../primitives/primitives.css');
const rule = css.match(/\n\.v2p-b-p \{[^}]*\}/);
expect(rule?.[0]).toContain('background: linear-gradient(180deg, var(--v2-fill-a), var(--v2-fill-b))');
expect(rule?.[0]).toContain('color: var(--v2-on-fill)');
expect(rule?.[0]).not.toMatch(/#[0-9a-f]{3,8}\b|rgba?\(/i);
expect(rule?.[0]).not.toMatch(/#[0-9a-f]{3,8}\b/i);
// The fill and text declarations are exactly the two tokenised ones: any added or changed
// background or colour (a literal, a named colour, an override) fails, with no colour list to keep.
const paint = [...(rule?.[0] ?? '').matchAll(/(?:^|[;{\s])(background(?:-color|-image)?|color):\s*([^;}]+)/g)]
.map(([, prop, value]) => [prop, value.trim()]).sort();
expect(paint).toEqual([
['background', 'linear-gradient(180deg, var(--v2-fill-a), var(--v2-fill-b))'],
['color', 'var(--v2-on-fill)'],
]);
// Your team's own sheet adds no colour to the ink keys.
expect(rd('../components/V2YourTeamPage.css')).not.toMatch(/v2-team__hire[^{]*\{[^}]*(?:background|color):/);
});
test('the board drawer scrim is --v2-scrim', () => {
// S4: the board's rules live in its own sheet; the scrim backs the phone sheet.
Expand Down
Loading
Loading