Repository navigation
feat(agents): add a Watching tab to agent settings from the Agent Attention UI plugin - #1846
johnmatthewtennant wants to merge 6 commits into
Conversation
9c8472d to
d66d510
Compare
kalvinnchau
left a comment
There was a problem hiding this comment.
🤖 Two non-blocking maintenance findings; no reproduced functional or security blocker.
The Agent Attention page assumed the reader already knew what Interests, watches and classifiers are. It now opens with a plain explanation, shows suggested asks when empty, notes that watches run only while Buzz is open on this device, and uses plainer card and warning wording. The page is renamed Watching and moves from the topbar to the sidebar, directly below Inbox, through the existing bundled page order. The page id stays `attention`, so links keep working. Signed-off-by: John Tennant <jtennant@block.xyz> Co-authored-by: Poppy <ace4dfe51b23bb4244ab9117dfd5e13b8239445e333225608c352e68cb3fe2b5@buzz.block.builderlab.xyz> Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Replace the standalone Watching page and its sidebar entry with a
`buzz.watching` plugin (off by default) that adds a Watching tab to
every local agent's settings through a new
`ctx.agents.registerTab({ id, title, component })`.
The host places plugin tabs after Activity and before History and
Settings, for agents that run on this device and of any type, and
removes them when the plugin unloads. The tab shows the agent's
Interests and watches with the existing pause, delete and device
controls, and teaches an agent with nothing to watch what to ask for.
Mentions and the device switch stay in Settings, and the attention
runtime, tools and providers keep working with the plugin off.
The Agent Attention page registration and its sidebar order and icon
are removed; an old link to it opens as an unavailable destination.
The covered-pane focus test now makes room for the shell to scroll
instead of relying on how many pages the header happens to hold.
Signed-off-by: John Tennant <jtennant@block.xyz>
Co-authored-by: Poppy <ace4dfe51b23bb4244ab9117dfd5e13b8239445e333225608c352e68cb3fe2b5@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The plugin that adds each agent's Watching tab is now called Agent Attention UI, sits under Agent tools in Settings, and is on by default in both the app and the desktop plugin manager. Turning it off still hides only the tab; attention keeps running. Co-authored-by: Poppy <ace4dfe51b23bb4244ab9117dfd5e13b8239445e333225608c352e68cb3fe2b5@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: John Tennant <jtennant@block.xyz>
The vision still assigned the cross-agent Attention overview to the Agents plugin. Watch management now lives in the Agent Attention UI plugin's per-agent Watching tab. Co-authored-by: Poppy <ace4dfe51b23bb4244ab9117dfd5e13b8239445e333225608c352e68cb3fe2b5@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: John Tennant <jtennant@block.xyz>
The profile-tab and empty-state browser cases checked tab order and text that tabs.test.tsx, AgentTabs.test.tsx and Tab.test.tsx already cover, with no browser-only behavior. The mocked registration test repeats what entity-navigation.test.tsx checks through the real plugin service. Co-authored-by: Poppy <ace4dfe51b23bb4244ab9117dfd5e13b8239445e333225608c352e68cb3fe2b5@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: John Tennant <jtennant@block.xyz>
a3e3bd0 to
c490af7
Compare
kazemek21
left a comment
There was a problem hiding this comment.
Kyle reviewed the PR and the Nexus review-tracker notes and approves.
Posted by Codex (gpt-6.1-sol) on behalf of kylez
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord’s automated source review via Wes’s account. One P2 fix is detailed inline.
Optional: use consistent Attention/Watching wording for the same device switch in Settings and Watching.
Rocket, Mantis and Groot completed independent lanes, reconciled against head c490af74226d4c99cfc1fcd4137b1067d387f6d1, base ae48da8e79299b220f4177f7ab5eca3051267b8a. Source-only, including the public description and three screenshots; no tests, app execution, live-agent behavior or CI validation.
Pausing or deleting a watch kept its pending state inside the Watching tab, so switching agent tabs during the save unmounted it and a later failure was never shown. Each action now reports its pending save, so the agent's tabs stay on Watching until it settles. Co-authored-by: Poppy <ace4dfe51b23bb4244ab9117dfd5e13b8239445e333225608c352e68cb3fe2b5@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: John Tennant <jtennant@block.xyz>
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord’s automated source review via Wes’s account. The prior pending-save P2 is resolved: Watching now reports pending actions to the existing tab guard, preserving delayed errors; no new actionable findings in this follow-up.
Rocket, Mantis and Groot independently reviewed the two-file delta from c490af7, reconciled at head d94a487a87973821f45c65b0642abde832b47c79, base ae48da8e79299b220f4177f7ab5eca3051267b8a; unchanged feature coverage remains in the prior review. Source-only, including the unchanged description and three screenshots: tests, live tab switching, native behavior and CI were not validated.
Context
Agents can ask to be woken later (a message, a time, a change such as CI finishing), but nothing in Buzz explained that to someone meeting it for the first time, and the standalone Agent Attention page showed every agent's Interests and watches in one place. This puts what an agent is watching in that agent's own settings, as a "Watching" tab, from a new Agent Attention UI plugin that is on by default and listed under Agent tools. Core attention (runtime, tools, storage,
registerAttention,registerDiscovery) is unchanged and runs with the plugin off.Changes
ctx.agents.registerTab({ id, title, component })adds a tab to every agent that runs on this device (place === "here"), whatever its type. It sits after Activity and before History and Settings in the agent's profile and in the Agents page details. Ids are namespaced per plugin, an invalid tab or a duplicate id throws, and the tab goes when its plugin unloads. Typed insrc/plugins/author.ts, documented indocs/plugin-architecture.md.buzz.watching,src/bundled/watching/, category Agent tools,enabledByDefault: true, also incrates/plugin-manager's manifests and default-on list). Turning it off hides only the tab. Its Watching tab shows that agent's Interests and watches with the existing controls: pause and delete, plugin-presented source watches, and the on-this-device switch. The code moved out ofsrc/bundled/agents/attention/.bundledOrderentry. An oldbuzz.agents/attentionlink has no redirect: the shell treats an unknown page key as unavailable and shows "This destination couldn't open". There is no generic resolver hook, so none was added.tests/browser/focus-navigation.spec.mjs: "covered panes and notifications preserve focus and F6 recovery" scrolled the shell sideways by the header's natural overflow at 600px. With one fewer page in the header (this change removes one) the overflow fell 2.8px short and the test failed in Chromium. It now adds scroll room itself, so it no longer depends on how many pages the header holds. Product behavior is unchanged.registerTabregistration, state notification, validation and disposal; tab order andhere/hosted/elsewhereplacement; plugin on by default (tab present), then off (no tab, attention providers still registered) and on again through the real service; empty and populated Watching states; browser specs for the Watching tab's geometry, keyboard management and focus restoration, and the plugin default (on).docs/VISION_ATTENTION_SUBSCRIPTIONS.mdnow gives watch management to the Agent Attention UI plugin's per-agent Watching tab instead of the Agents plugin.Tests
Browser cases added then removed in review, because each repeated a lower-layer assertion without a browser-only contract (no focus, geometry or scrolling):
agent-library.spec.mjs"a local agent's profile without / with a plugin tab" (2 cases) and the fixture's?watchingoptionsrc/bundled/agents/AgentTabs.test.tsx:503"places plugin tabs after Activity and before Settings";src/features/agents/tabs.test.tsx:235"adds plugin tabs to local agents only, before History"agent-attention.spec.mjs"an agent with nothing watched suggests what to ask it" and the fixture's?emptyoptionsrc/bundled/watching/Tab.test.tsx:430"explains Watching to a new agent and switches it on this device"src/bundled/watching/index.test.ts(mockedregisterTabcall)src/app/entity-navigation.test.tsx, which loads the real plugin through the real plugin service and asserts thebuzz.watching/watchingtabFail-then-pass for the replacements, one mutation at a time:
Tab.tsx:Tab.test.tsxfails ("Unable to find … Nothing is being watched yet. Try asking Ada:").AgentTabs.tsxdrops theagent:added:sections:AgentTabs.test.tsxfails (1 of 14).tabs.tsxadds plugin tabs to every agent, not onlyhere:tabs.test.tsxfails (1 of 5).watching/index.tsxregisters no tab:entity-navigation.test.tsxfails (1 of 12, expected['buzz.watching/watching'], got[]).Browser cases kept:
agent-attention.spec.mjsthemes/sizes/keyboard management and deletion focus restoration (real focus and scroll geometry),plugin-defaults.spec.mjs(real Settings plugin list shows Agent Attention UI on), and thefocus-navigation.spec.mjschange below.Validation
focus-navigation.spec.mjs:255failed in Chromium on this branch before its test change while passing onmain; removing only the old Agent Attention page from the base reproduced it.Not tested:
AgentsServiceand plugin service, a fixture-hosted tab with modeled host data (no real relay or runtime), and the real Settings plugin list. The Watching screenshots come from that fixture, so they show the tab alone, not inside the agent's tab strip.Screenshots
An agent with nothing watched yet
An agent's Interests and watches, one expanded
Agent Attention UI under Agent tools in Settings → Plugins