Agent pane: a cleaner agent message card; signatures out, one chip per PR, quiet SHAs

Merged
TE
13d ago
+982-46

Leo's asks, about another agent's message in the agent pane:

we can render this with pics maybe and just... idk make it all look nicer

can you just enable all these

Leo-ask: ask-f10ccbb70c

This is part 1 of 2: a cleaner card. Part 2 (branch agent-message-pics) makes every file the message names open, with its images as thumbnails. It goes up once this lands, to keep each PR under about 800 lines.

What changes

What another agent's message card shows (IncomingMessageCard.tsx), for live messages and those loaded from history alike:

  • The [lane] signature is out on every path. [agent-message-style] … used to stay when the signature didn't match the provenance's name exactly. Now a signature that names the sending chat in any case or spacing, or as peer/name, is dropped on every path:

    • agent_message;
    • session_message and subsession_message;
    • the acpmux send envelope;
    • agent_digest, where each sender shows under its own name.

    The card also strips a signature still in a stored record, so history renders clean. A bracket that doesn't name the sender ([WIP]) stays. Leo's nightly was built at 17:41, before #23950 (which strips the exact-name case) merged at 18:15.

  • Every PR ref shows once. #N, owner/repo#N and hq#N written twice in a row, such as MERGED #23825 (4c656ea8) manaflow-ai/cmux#23825, become one chip (messageRefs.ts). A later mention in another sentence stays, as does one in a bracket with the agent's own words (Reverted #5 (#5 broke main)).

  • Commit SHAs are quiet monospace. They link to the commit when the repository is known. Replies keep their SHA chips.

  • A message from another machine names that machine's files. That means a message relayed by acpmux-peer#, or one from a listed chat on a peer. Each file draws as a dim chip with a lock and the tooltip "On :

  • The card is cleaner. It is glass at 6%, never opaque, with a hairline mixed with the theme accent (--agent-accent, never orange), a lighter top edge, a 12px radius and flush first and last lines.

The diff is 999 lines; 264 of them are the two new strings in all 21 locales.

Before / after

Public gallery captures (agent-pane.incoming-message, variants files and files-elsewhere, synthetic content):

Before (base)After
agent message card beforeagent message card after

Before: the [agent-message-style] prefix shows, #23825 appears twice, and the SHAs are blue chips. After: the prefix is gone, there is one #23825 chip, and the SHAs are quiet monospace. The locked image card is base behaviour, which part 2 replaces with a strip of thumbnails.

The same report relayed from another machine shows its file as a lock chip naming that machine, with no thumbnail and no host call:

agent message card after other machine

Overlap

  • #24091 (the sender-chip PR) changes the card's header line, not its body.
  • Part 2 changes the ReplyImage loadable line to match #23879's Swift host change; this part doesn't touch it.

Tests

  • conversation/incomingMessage.test.ts covers:
    • the lane signature on every path, any case or spacing;
    • each sender in an agent_digest;
    • unsigned;
    • remote for peer relays.
  • conversation/messageRefs.test.ts covers:
    • repeats in a row;
    • later mentions, other numbers and other repositories;
    • code and links between mentions;
    • brackets;
    • timing on long hex runs, 5,000 refs and 20,000 [.
  • webviews/test/agent-message-card.test.tsx (JSDOM) checks:
    • the signature is gone, #23825 is one chip, and the SHA is a quiet link;
    • a remote message draws lock chips naming the machine, with no link.inspect, image.load or link.openPath call.
  • Typecheck and lint pass, as do check-glass-never-opaque, check:catalog-keys and the prepush gate.

Agent session: Air-Blue

🤖 Generated with Claude Code