fix(web): align the context separator with ToolRow and name the caption

Review follow-ups on the context provenance row:

- the producer name now follows ToolRow's aria-hidden separator dot instead
  of a literal middot inside the text, so the two disclosure rows expose one
  accessible-name shape;
- the English steering caption becomes the noun `Interjection`, parallel to
  the Chinese 插话 and to the label this bubble carried before;
- the history fold gets its own provenance assertion, so the mapping it
  declares separately from TranscriptAdapter is pinned on both sides;
- the superseded-in-part bullet on the no-interjection-chrome note now
  enumerates the third Decision bullet too, whose no-badge and no-IconActions
  clauses had both lapsed.
This commit is contained in:
creatixchu
2026-08-04 18:25:44 +08:00
parent 95a89078d5
commit fab131a366
34 changed files with 105 additions and 71 deletions
@@ -12,13 +12,21 @@
color: var(--dsw-alias-label-secondary);
}
/* Producer name beside the role title: ToolRow's summary geometry, so the two
disclosure rows keep one 24px rhythm; subordinate color, truncated when long. */
/* Separator and producer name beside the role title: ToolRow's summary geometry,
so the two disclosure rows keep one 24px rhythm and one separator shape. */
.sep {
flex: none;
width: 2px;
height: 2px;
margin: 0 8px;
border-radius: 1px;
background: var(--dsw-alias-label-caption);
}
.source {
flex: 1 1 auto;
min-width: 0;
overflow: hidden;
margin-left: 4px;
color: var(--dsw-alias-label-tertiary);
font-size: 14px;
line-height: 24px;
@@ -80,7 +80,13 @@ export function ContextInjectionRow({ content, source, provenance, t }: ContextI
chevronClassName={css.chevron}
title={t(provenance.role === 'recall' ? 'message.contextRecall' : 'message.contextInjection')}
collapsedContent={provenance.label === null ? undefined : (
<span className={css.source} data-context-source>{`· ${provenance.label}`}</span>
/* ToolRow's separator shape: an aria-hidden dot, so the accessible name
stays the two readable parts and the two disclosure rows expose one
name shape. A source that names no producer drops the dot with it. */
<>
<span className={css.sep} aria-hidden />
<span className={css.source} data-context-source>{provenance.label}</span>
</>
)}
keepContentWhenOpen
open={open}
@@ -166,7 +166,7 @@ export const en = {
'message.extraBlock': 'Extra content block',
'message.contextInjection': 'Context injection',
'message.contextRecall': 'Session recall',
'message.steering': 'Steer',
'message.steering': 'Interjection',
'message.compaction': 'Context compacted',
'message.compaction.expand': 'View compaction summary',
'message.compaction.unavailable': 'Compaction summary unavailable',