diff --git a/app/shared/src/styles/tokens-base.css b/app/shared/src/styles/tokens-base.css index a98ccb72b..37defe8d7 100644 --- a/app/shared/src/styles/tokens-base.css +++ b/app/shared/src/styles/tokens-base.css @@ -419,12 +419,16 @@ } /* ── Global Reset ──────────────────────────────────────────────────── */ -*, -*::before, -*::after { - box-sizing: border-box; - margin: 0; - padding: 0; +/* Layered so Tailwind utilities (h-, p-, m-, gap-…) can override the reset. + An unlayered reset silently wins over every `@layer utilities` rule. */ +@layer base { + *, + *::before, + *::after { + box-sizing: border-box; + margin: 0; + padding: 0; + } } html, diff --git a/app/workbench/src/ComposerContextParts.test.tsx b/app/workbench/src/ComposerContextParts.test.tsx index c61dc984d..e8784cab7 100644 --- a/app/workbench/src/ComposerContextParts.test.tsx +++ b/app/workbench/src/ComposerContextParts.test.tsx @@ -2,7 +2,6 @@ import '@testing-library/jest-dom/vitest'; import { fireEvent, render, screen } from '@testing-library/react'; import { beforeAll, describe, expect, it, vi } from 'vitest'; import { - ComposerMainchainStrip, ComposerMentionChips, ComposerQuoteBar, ComposerReplyBar, @@ -59,20 +58,8 @@ describe('ComposerContextParts', () => { expect(onRemove).toHaveBeenCalledWith('profile-builder'); }); - it('renders mainchain and status strips', () => { - render( - , - ); - expect(screen.getByText('Agent @Builder')).toBeInTheDocument(); - expect(screen.getByText('目标未选')).toBeInTheDocument(); - expect(screen.getByText('需填写内容')).toBeInTheDocument(); - - render(); - expect(screen.getByText('数据:真实数据')).toBeInTheDocument(); + it('renders the status strip as one quiet line', () => { + render(); + expect(screen.getByRole('status')).toHaveTextContent('数据:真实数据 · 目标:就绪'); }); }); diff --git a/app/workbench/src/ComposerContextParts.tsx b/app/workbench/src/ComposerContextParts.tsx index fe7e6e4fa..f9ca11cc2 100644 --- a/app/workbench/src/ComposerContextParts.tsx +++ b/app/workbench/src/ComposerContextParts.tsx @@ -9,12 +9,8 @@ import { Button } from '@shared/shadcn/ui/button'; import { cn } from '@shared/lib/utils'; import { DesignNavIcon } from './designIcons'; import { - formatMainchainAgentLabel, - formatMainchainTargetLabel, - formatMainchainTaskLabel, formatMentionChipLabel, formatReplyToLabel, - mainchainDataState, } from './ComposerPartsHelpers'; import { formatQuotePreview } from './unifiedComposerHelpers'; @@ -153,67 +149,18 @@ export function ComposerMentionChips({ ); } -export function ComposerMainchainStrip({ - selectedAgentLabel, - selectedTargetLabel, - targetSelected, - mainchainTask, -}: { - selectedAgentLabel: string; - selectedTargetLabel: string | undefined; - targetSelected: boolean; - mainchainTask: 'ready' | 'draft required'; -}): React.ReactElement { - const { t } = useTranslation(CHATVIEW_I18N_NAMESPACE); - return ( -
- - {formatMainchainAgentLabel(selectedAgentLabel, t)} - - - {formatMainchainTargetLabel(selectedTargetLabel, t)} - - - {formatMainchainTaskLabel(mainchainTask, t)} - -
- ); -} - export function ComposerStatusStrip({ statusItems, }: { statusItems: string[]; }): React.ReactElement { return ( -
- {statusItems.map((item) => ( - - - ))} -
+ {statusItems.join(' · ')} +

); } diff --git a/app/workbench/src/ComposerControlParts.tsx b/app/workbench/src/ComposerControlParts.tsx index e883acb35..9f99578a5 100644 --- a/app/workbench/src/ComposerControlParts.tsx +++ b/app/workbench/src/ComposerControlParts.tsx @@ -36,31 +36,28 @@ export function ComposerAgentPicker({ onSelect: (agentId: string) => void; }): React.ReactElement { const { t } = useTranslation(CHATVIEW_I18N_NAMESPACE); + const placeholder = agentPickerPlaceholder(availableMentionOptions.length, t); return ( -