Skip to content

feat: nested subagent tree — parent-tagged lifecycle events + Agents tab UI - #8

Merged
mfethe1 merged 4 commits into
product/mainfrom
feat/nested-subagents
Sep 3, 2026
Merged

mfethe1 merged 4 commits into
product/mainfrom
feat/nested-subagents

Conversation

@mfethe1

@mfethe1 mfethe1 commented Sep 2, 2026

Copy link
Copy Markdown
Owner

What

  • buzz-acp: SubagentTracker (toolCallId→subagent correlation), emits kind:20003 subagent_lifecycle observer events with ["parent", <parent-pubkey>] tag; payload {subagent_name, status, summary?} (280-char summary cap). 8 unit tests.
  • Desktop: SubagentTree.tsx nested rows under agent cards (expand/collapse, default-collapsed); pure ingestion module lib/subagentLifecycleIngest.ts + store wiring (observerRelayStore.ts subagentsByParent); useSubagents hook.
  • No relay/DB schema change — nesting derived client-side from the parent tag. Spec: ~/buzz-program/SPEC-nested-subagents.md.

Sync-merge regressions fixed (found by this branch's gates)

  • buzz-acp/src/lib.rs: un-awaited handle_switch_model_control call (dropped future, no control_result emit — compiler-invisible)
  • AgentIdentityCard.tsx/UnifiedAgentsSection.tsx: modelLabel/subtitle JSX collision breaking typecheck AND 3 'pre-existing' UnifiedAgentsSectionCardTarget test failures
  • AgentsView.tsx: unused merge-leftover imports

Evidence

  • cargo test -p buzz-acp: 953/953
  • cargo check --workspace --all-targets: 0 errors
  • desktop tsc: clean; pnpm test: 6,059/6,059 (3 prior fails fixed by this branch)
  • biome + px-text + pubkey-truncation: clean; pubkey-normalization fails only at HEAD (verified identical on clean stash)

… Agents tab UI

Workstream A (buzz-acp): SubagentTracker correlating delegation tool calls to
subagent lifecycle events (spawned/running/complete/failed) with parent tag
from the harness's own agent pubkey; hooks in ACP session-update handler;
8 unit tests.

Workstream B (desktop): SubagentTree component (default-collapsed, live
count badge, status dots), grouping by parent pubkey first; 41 tests.

Wiring: observerRelayStore ingests subagent_lifecycle events into
subagentsByParent via pure lib/subagentLifecycleIngest (alias-free,
node --test, 5 tests); useSubagents hook; AgentsView passes live records.

Merge-regression fixes: un-awaited async handle_switch_model_control call in
observer_channel_controls test path (sync artifact); AgentIdentityCard JSX
malformed by conflict resolution (restored modelLabel line + de-duped
subtitle prop); UnifiedAgentsSection restored fork's modelLabel prop;
removed unused imports.

Gates: cargo check --workspace --all-targets 0 errors; cargo test -p
buzz-acp 953/953; desktop tsc clean; pnpm test 6059/6059.

Signed-off-by: Michael Fethe <mfethe1@gmail.com>
@coderabbitai

coderabbitai Bot commented Sep 2, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Team

Run ID: 7b2b2510-947d-4253-85ee-20c53c8dc8dd

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

…e transport, version subagent cache

- subagent.rs/kind.rs: 20003 documented as RESERVED (observer frames are the
  transport; frame agent tag = parent identity) — review #1/#2
- observerRelayStore: subagentsVersion bump on every real fold + reset, cache
  keyed on version not length — review #3 (stale-tree UI bug)
- SPEC wire contract section updated to as-built

Signed-off-by: Michael Feth <mfethe1@gmail.com>
@mfethe1

mfethe1 commented Sep 2, 2026

Copy link
Copy Markdown
Owner Author

Review fixes landed (328f2eb61): (1) 20003 documented as RESERVED — observer-frame transport is the contract, frame agent tag = parent; (2) subagent.rs doc corrected; (3) store cache versioned (subagentsVersion) so same-length folds re-render; (4) SPEC wire-contract section rewritten to as-built. Gates re-run: cargo 953/953, tsc clean, desktop 6059/6059. Items 5-7 (Pulse card, publish-path integration test, orphan surfacing) accepted as fast-follow.

…pair overlap)

# Conflicts:
#	desktop/src/features/agents/ui/AgentIdentityCard.tsx
#	desktop/src/features/agents/ui/UnifiedAgentsSection.tsx
Signed-off-by: Michael Feth <mfethe1@gmail.com>
@mfethe1
mfethe1 merged commit 9df4409 into product/main Sep 3, 2026
30 of 35 checks passed
mfethe1 added a commit that referenced this pull request Sep 3, 2026
…e transport, version subagent cache

- subagent.rs/kind.rs: 20003 documented as RESERVED (observer frames are the
  transport; frame agent tag = parent identity) — review #1/#2
- observerRelayStore: subagentsVersion bump on every real fold + reset, cache
  keyed on version not length — review #3 (stale-tree UI bug)
- SPEC wire contract section updated to as-built

Signed-off-by: Michael Feth <mfethe1@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant