Handoff: Event log with agent (recipe)
What and why
When an agent joins an event log it needs to be clear where it started, what it did and where it handed back. This is a recipe, not a component: a story and Usage page that compose existing proposals. It adds no props, classes, tokens or CSS of its own, so there is nothing to port. The engineer ports the components it uses (below) and copies the composition from the story as documentation; what the screen owns is where the agent's region starts and stops, the divider wording, and which entries are agentic.
- Figma / Jira: none. Source: designer screenshots (2026-10-16) of a deploy log with a "Zappy engaged" divider and an agent sandbox investigation.
- Context:
context.md
Exploration and decisions
- Recipe, not a component. Where the agent starts and stops, the divider wording and which entries are agentic are screen decisions; a component would need props for each and break for a log with two runs or none. A
TimelineGroupcan be added later if the same region keeps being rebuilt. - Both ends use the same agentic
LabeledDivider("Zappy engaged", "Zappy finished"), withtone='agentic'(the gradient; the purpleagentic-filledwas removed 2026-10-21). - Dividers are
size='xs'. Thesdefault is too big next to the rows. The component default stayss; the recipe setsxs, so copy that prop. - Two stories: the agent still working (a
ThinkingStateis the live last entry, no closing divider) and finished (a done item and the closing divider).
Full list and reasons: decisions.md.
API
None. The composition (see the story for the exact props):
TimelinewithhasRailholds the log.- Neutral
TimelineItems before the agent joins. - An agentic
LabeledDivider(tone='agentic',size='xs',prefixIcon='zappy') opens the region. isAgenticTimelineItems, aChainOfThoughtand aThinkingStateare the agent's entries.- A second agentic
LabeledDividercloses it.
The rail joins neighbouring items and stops at a divider, a Chain of Thought or a Thinking State. Stories: AgentWorking, AgentFinished.
Tokens used
None of its own: no CSS, and npm run check:tokens -- --report EventLogWithAgent lists no tokens, classes, custom variables or raw values. The stories are story-only composition. See the handoffs of the components it uses.
Impact
From impact.md: nothing reaches existing components, no --pds-* token is redefined, and no other proposal imports or uses this recipe. It depends on the proposals below, and changes to them change what the stories show.
Reused vs net-new
- Reused: Timeline and TimelineItem (
../Timeline/HANDOFF.md), LabeledDivider (part of this release;../LabeledDivider/HANDOFF.md), ChainOfThought (../ChainOfThought/HANDOFF.md) and ThinkingState (../ThinkingState/HANDOFF.md). - Net-new: none. See
custom.md. - Ready for dev: Timeline, TimelineItem, ChainOfThought and ThinkingState are tagged ready. LabeledDivider is being handed off in this release, so check its tag before porting. Port the components first.
Accessibility
- Nothing of its own; keyboard and focus come from the components. The expandable
TimelineItemand the Chain of Thought summary are nativedetails/summary, so they work with Enter and Space and show the browser's focus ring. - The a11y panel has not been run on either story, and light and dark were not checked by eye in a session.
Decisions and open questions
For the engineer or designer to settle:
- Divider styling on the component. Which agentic
LabeledDividerstyling the component keeps (gradient border or filled) is decided on that proposal. The recipe uses the filled one. - Does the region need a tint or bracket between the dividers, beyond
isAgenticand the dividers? Not needed for this release.
Port notes
Nothing to generate or port. Port Timeline, TimelineItem, LabeledDivider, ChainOfThought and ThinkingState first, then keep the stories as documentation for the composition (they live under Recipes in Storybook, not in the component source).
Preview
npm run storybook, then Recipes / Event log with agent (stories Agent Working and Agent Finished). Figma: none.