Repository navigation
Refine agent Attention cards, watch details, and status controls - #2717
Conversation
Co-authored-by: Codex <[email protected]> Signed-off-by: Arjun Mahanti <[email protected]>
Signed-off-by: Arjun Mahanti <[email protected]> Co-authored-by: Codex <[email protected]>
|
🤖 Screenshots of the actual updated Attention components at
|
Co-authored-by: Codex <[email protected]> Signed-off-by: Arjun Mahanti <[email protected]>
Co-authored-by: Codex <[email protected]> Signed-off-by: Arjun Mahanti <[email protected]>
Co-authored-by: Codex <[email protected]> Signed-off-by: Arjun Mahanti <[email protected]>
Co-authored-by: Codex <[email protected]> Signed-off-by: Arjun Mahanti <[email protected]>
Co-authored-by: Codex <[email protected]> Signed-off-by: Arjun Mahanti <[email protected]>
Co-authored-by: Codex <[email protected]> Signed-off-by: Arjun Mahanti <[email protected]>
Co-authored-by: Codex <[email protected]> Signed-off-by: Arjun Mahanti <[email protected]>
Co-authored-by: Codex <[email protected]> Signed-off-by: Arjun Mahanti <[email protected]>
Co-authored-by: Codex <[email protected]> Signed-off-by: Arjun Mahanti <[email protected]>
Co-authored-by: Codex <[email protected]> Signed-off-by: Arjun Mahanti <[email protected]>
Co-authored-by: Codex <[email protected]> Signed-off-by: Arjun Mahanti <[email protected]>
Co-authored-by: Codex <[email protected]> Signed-off-by: Arjun Mahanti <[email protected]>
|
🤖 Production Attention UI at b8d7e9f, captured with synthetic fixture data using the actual profile-host components (not the local playground).
Chromium and WebKit checks passed; final native human acceptance remains pending. |
kalvinnchau
left a comment
There was a problem hiding this comment.
🤖 Two actionable regressions: fresh-agent Attention onboarding is blocked, and watch status labels conceal the reason activation is unavailable.
| onClick: () => | ||
| return ( | ||
| <div className="attention-agent"> | ||
| {!empty && ( |
There was a problem hiding this comment.
🤖 [P1] Keep device enablement reachable for an empty agent
A fresh agent defaults Attention off. This empty-state guard hides the Active/Paused control, while the onboarding text tells the user to message the agent. Attention operations are rejected while off (src/buzz-mcp/session-tools.ts:209), so the agent cannot create its first Interest and the pane cannot become populated. This reproduced through the actual app/profile, production broker and Agents service in Chromium and WebKit with disposable identities and modeled upstreams; substituting the merge-base Tab restored successful enablement in both engines. Keep AttentionStatus available in the empty state and replace the onboarding test's manually injected first Interest with the real enable-first flow.
| !description.spent | ||
| ? "Active" | ||
| : "Paused"; | ||
| const section = (label: string, content: React.ReactNode) => ( |
There was a problem hiding this comment.
🤖 [P2] Preserve the reason a watch cannot activate
An enabled watch now displays Paused when device Attention is off, its timer is spent, or its source is completed. The menu still derives availability from watch.enabled (lines 371–376), so these rows disable Activate and offer Pause despite already displaying Paused. The previous labels distinguished these states. Restore distinct device-paused/completed/used-up labels or explain the blocking reason in the menu, reserving Paused for !watch.enabled. Device-paused watches require the header control; spent timers require rearming; completed sources are done. The completed-source assertion in Tab.test.tsx:852 currently preserves this mismatch.
Co-authored-by: Codex <[email protected]> Signed-off-by: Arjun Mahanti <[email protected]>
johnmatthewtennant
left a comment
There was a problem hiding this comment.
🤖 Reviewed this head. John chose to address the identified issues in a follow-up.
…leanup * origin/main: test(mentions): serve the mentions fixture as a build so cold loads fit (#2776) test(browser): let a late publication land after its page closed (#2565) test(relay): wait for the verified owner before a guest edits an agent (#2413) test: wait for the companion default width measurement (#2750) test(browser): preserve conversation scroll while revealing actions (#2715) test(browser): wait for link hit-testing after thread close (#2792) perf(messages): skip micromark for plain prose bodies (#2780) perf(inbox): load the emoji name table on first use (#2774) perf(messages): cut main-thread work while a busy channel is open (#2729) Refine agent Attention cards, watch details, and status controls (#2717) fix(bestie): remove a Bestie from its agent card on any device (#2720) feat(agents): preview Builderlab agent card links with Add to Buzz (#2719)
Co-authored-by: Eva <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@buzz.block.builderlab.xyz> Co-authored-by: Tyler Longwell <[email protected]> Signed-off-by: Tyler Longwell <[email protected]> * origin/main: test(messages): wait for the row measurement frame before thread catch-up dwell (#2837) Keep agent coordination history readable after work finishes (#2454) test(mentions): serve the mentions fixture as a build so cold loads fit (#2776) test(browser): let a late publication land after its page closed (#2565) test(relay): wait for the verified owner before a guest edits an agent (#2413) test: wait for the companion default width measurement (#2750) test(browser): preserve conversation scroll while revealing actions (#2715) test(browser): wait for link hit-testing after thread close (#2792) perf(messages): skip micromark for plain prose bodies (#2780) perf(inbox): load the emoji name table on first use (#2774) perf(messages): cut main-thread work while a busy channel is open (#2729) Refine agent Attention cards, watch details, and status controls (#2717) fix(bestie): remove a Bestie from its agent card on any device (#2720) feat(agents): preview Builderlab agent card links with Add to Buzz (#2719) Restore macOS Cmd-W window closing when no tab handles it (#2443) Make agent transcripts quieter and link finished replies to activity (#2424)
…ve-enter * origin/main: (21 commits) Make drafts and sent part of Messages (#2728) fix(canvas): render every Canvas within the save limit (#2839) test(messages): wait for the row measurement frame before thread catch-up dwell (#2837) Keep agent coordination history readable after work finishes (#2454) test(mentions): serve the mentions fixture as a build so cold loads fit (#2776) test(browser): let a late publication land after its page closed (#2565) test(relay): wait for the verified owner before a guest edits an agent (#2413) test: wait for the companion default width measurement (#2750) test(browser): preserve conversation scroll while revealing actions (#2715) test(browser): wait for link hit-testing after thread close (#2792) perf(messages): skip micromark for plain prose bodies (#2780) perf(inbox): load the emoji name table on first use (#2774) perf(messages): cut main-thread work while a busy channel is open (#2729) Refine agent Attention cards, watch details, and status controls (#2717) fix(bestie): remove a Bestie from its agent card on any device (#2720) feat(agents): preview Builderlab agent card links with Add to Buzz (#2719) Restore macOS Cmd-W window closing when no tab handles it (#2443) Make agent transcripts quieter and link finished replies to activity (#2424) fix(channels): wrap unread conversation stepping around the sidebar (#2682) fix(navigation): let bare buzz:// open Buzz without a broken-link notice (#2718) ...
Co-authored-by: BuzzPRReviewAssistant1 <a581a7e8115222acdc32ffb14bfce55d48c24478d98e155f8eba126b69b83c7b@buzz.block.builderlab.xyz> * origin/main: (71 commits) test(activity): scope preview assertions to the request row (#2843) perf(search): fold people names once across palette keystrokes (#2570) fix(github): keep PR watches running when localStorage is full (#2699) Make drafts and sent part of Messages (#2728) fix(canvas): render every Canvas within the save limit (#2839) test(messages): wait for the row measurement frame before thread catch-up dwell (#2837) Keep agent coordination history readable after work finishes (#2454) test(mentions): serve the mentions fixture as a build so cold loads fit (#2776) test(browser): let a late publication land after its page closed (#2565) test(relay): wait for the verified owner before a guest edits an agent (#2413) test: wait for the companion default width measurement (#2750) test(browser): preserve conversation scroll while revealing actions (#2715) test(browser): wait for link hit-testing after thread close (#2792) perf(messages): skip micromark for plain prose bodies (#2780) perf(inbox): load the emoji name table on first use (#2774) perf(messages): cut main-thread work while a busy channel is open (#2729) Refine agent Attention cards, watch details, and status controls (#2717) fix(bestie): remove a Bestie from its agent card on any device (#2720) feat(agents): preview Builderlab agent card links with Add to Buzz (#2719) Restore macOS Cmd-W window closing when no tab handles it (#2443) ... Signed-off-by: Ravneet Arora <[email protected]>
…ime-hint * upstream/main: (26 commits) Make drafts and sent part of Messages (block#2728) fix(canvas): render every Canvas within the save limit (block#2839) test(messages): wait for the row measurement frame before thread catch-up dwell (block#2837) Keep agent coordination history readable after work finishes (block#2454) test(mentions): serve the mentions fixture as a build so cold loads fit (block#2776) test(browser): let a late publication land after its page closed (block#2565) test(relay): wait for the verified owner before a guest edits an agent (block#2413) test: wait for the companion default width measurement (block#2750) test(browser): preserve conversation scroll while revealing actions (block#2715) test(browser): wait for link hit-testing after thread close (block#2792) perf(messages): skip micromark for plain prose bodies (block#2780) perf(inbox): load the emoji name table on first use (block#2774) perf(messages): cut main-thread work while a busy channel is open (block#2729) Refine agent Attention cards, watch details, and status controls (block#2717) fix(bestie): remove a Bestie from its agent card on any device (block#2720) feat(agents): preview Builderlab agent card links with Add to Buzz (block#2719) Restore macOS Cmd-W window closing when no tab handles it (block#2443) Make agent transcripts quieter and link finished replies to activity (block#2424) fix(channels): wrap unread conversation stepping around the sidebar (block#2682) fix(navigation): let bare buzz:// open Buzz without a broken-link notice (block#2718) ... Signed-off-by: Cheng Peng <[email protected]> Co-authored-by: Cursor <[email protected]>
…ivity and pause fixes (#2860) Follow-ups to [the Attention card refresh](#2717) and [per-Interest pause controls](#2847). ## Problem - An Interest card had no real title or summary. It guessed the title from a leading `# heading` or the slug, so you had to open the instructions to learn what an Interest does. - An Activity row showed spoiler text before it was revealed: `Status: ||private result||` appeared in full in the row and its accessible label. - A timer that had fired still said "No activity yet", because a timer wake saved only its time. - The Interest delete confirmation button read "Delete Interest" and wrapped under Cancel. - `watch_add` rejected timer budgets from MCP clients that send numbers as digits, and `github_watch_pr` hid gh's error, so an agent could not tell a missing repository from an expired login. - Agents wrote Interest instructions full of raw IDs. A person linked as `[Name](nostr:npub…)` showed as the name, but clicking it tried to open an external app. - Pausing an Interest did not fully protect its watches on older builds. A watch over the watch limit is kept as is and written back, so it stayed runnable by an older build with a higher limit, and deleting its Interest left it behind. A paused watch's history was also saved twice, which could push a large record over the 4 MiB storage limit and stop the pause from saving. ## Solution - Interests take an optional title and summary. `interest_set` accepts both and asks agents to fill them in, and the card shows the title with the summary under it. Existing Interests look as they do today until their agent next updates them. - Activity summaries use the same spoiler-aware preview as notifications, so a spoiler reads `[Spoiler]`. - Each timer wake is saved as an Activity entry holding the timer's prompt, the way a watch saves its event. - The confirmation button says "Delete". - `watch_add` accepts numbers sent as digits, and `github_watch_pr` includes gh's message in its error. - A person written as `[Name](nostr:npub…)` in Interest instructions shows as the name and opens their profile: beside the conversation in the profile panel, or by selecting that agent on the Agents page. Plugin agent tabs get an optional `open(target)` for this, and `interest_set` asks agents to name people that way and to link PRs, messages and channels instead of pasting IDs. - A paused Interest's over-limit watches are saved in the same envelope older builds reject, unwrapped on resume, and deleted with their Interest on the owner's Attention tab, which confirms first. An agent's `interest_remove` refuses while one remains, rather than orphaning it. A paused watch's history is saved once, inside the envelope. Compatibility: a build without this change skips an Interest saved with a title or summary, the same fail-closed path paused Interests already use. ## Reproduction 1. Ask an agent to create an Interest. Before: the card's title is its slug and there is no summary. After: the agent's title, with its summary underneath. 2. Give an agent a watch that wakes on a message containing `||secret||`, then open its Activity. Before: the row reads `secret`. After: `[Spoiler]`. 3. Ask an agent for a timer that fires in a minute, wait for it, then open the timer's Activity. Before: "No activity yet". After: one event showing the timer's prompt. 4. Ask an agent to write an Interest naming a teammate, then open its instructions. Before: an npub, or a name that does nothing in-app. After: the name, which opens their profile. 5. With an agent over its watch limit, pause the Interest that owns the extra watch, then open the record in an older build. Before: the older build runs that watch without its Interest. After: it skips it. Delete the Interest and the extra watch is gone too. ## Testing Red/green: the spoiler, fired-timer and timer-wake tests fail on main and pass here, as does the overflow reproducer from the review of the pause controls, run against the actual older reader. `src/features/agents`, `src/bundled/watching` and `src/buzz-mcp` pass (2,093 tests), `tsc --noEmit` and Biome are clean, and `tests/browser/agent-attention.spec.mjs` passes in Chromium and WebKit, including clicking a person in the instructions. ## Screenshots ### A titled Interest with its summary, below an older Interest without them  ### Titled Interests with summaries, triggers and sources in the app  ### A person in the instructions, shown by name  🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Signed-off-by: Arjun Mahanti <[email protected]> Signed-off-by: John Tennant <[email protected]> Signed-off-by: John Tennant <[email protected]> Co-authored-by: Arjun Mahanti <[email protected]> Co-authored-by: Codex <[email protected]> Co-authored-by: Poppy <ace4dfe51b23bb4244ab9117dfd5e13b8239445e333225608c352e68cb3fe2b5@buzz.block.builderlab.xyz> Co-authored-by: Claude Opus 5.5 <[email protected]>






Agent Attention mixed instructions, sources, response destinations, and controls in stacked rows that were hard to scan. Give each interest its own card with compact watch tables and expandable configuration and activity.
Validation
Remaining acceptance
Draft pending final human testing in the native agent profile and hosted checks. Native desktop launched, but identity/community loading was not visually verified; the launcher also reported an upstream bundled buzz-cli compilation failure. Browser fixture evidence does not establish native integration acceptance.