Files
buzz/desktop
ss-dev-00 3a585fd8ed broker: back the agents.* capabilities with the real Desktop commands
Implements `AgentService` and `AgentRoster` against the same commands the UI
calls — `create_managed_agent`, `update_managed_agent`,
`delete_managed_agent` — rather than reimplementing the mutations. Two agent
creation routines would drift, and the broker's would be the one nobody looks
at.

The credential boundary is narrowed here: `create_managed_agent` returns the
minted `private_key_nsec`, and this is the one stack frame that sees it. The
outcome type has no field that could carry it, so the secret cannot reach the
pipeline, the execution log, or the wire.

Request translation is pure and tested directly, because the policy it encodes
is worth pinning:

- A brokered create neither spawns a process nor sets `start_on_app_launch`. A
  remote requester asking for an agent to exist has not asked for a local
  process to run on a schedule nobody at the keyboard chose.
- It links no definition or team — that would pin someone else's config
  snapshot onto the new agent, a decision the request never made.
- An update sends `None` for every field the request did not name. The broker
  has no "clear to default" verb, so it never emits the explicit null that
  would wipe stored config.
- A requested runtime is resolved through the catalog before it can become a
  stored harness pin, and an unknown id fails here instead of surfacing later
  as an unrelated spawn error.
- A delete leaves `force_remote_delete` unset, so the deployed-remote guard
  still holds: orphaning provisioned infrastructure stays a human decision.

Channel attachment is its own failable step after the agent exists, so it maps
to `Unknown` rather than `Failed` — telling a requester nothing happened while
an agent sits in the roster would be the worse lie.

Name targets resolve case-insensitively but must be unambiguous. Two agents
can legitimately share a name, and guessing would mutate or delete an agent
the requester never identified.

The roster refuses to answer for an owner this host does not hold keys for,
rather than authorizing against the wrong agent set.

Co-authored-by: Bradley Axen <baxen@squareup.com>
Signed-off-by: Bradley Axen <baxen@squareup.com>
2026-08-21 19:55:23 -07:00
..
…

Buzz

Desktop chat shell with:

  • Tauri + React + TypeScript + Vite
  • Tailwind CSS
  • shadcn/ui-ready shared components
  • Biome (lint/format/check)
  • Feature-driven frontend structure

Scripts

  • pnpm dev - run the web frontend
  • pnpm tauri dev - run the desktop app
  • pnpm build - typecheck and build frontend
  • pnpm typecheck - TypeScript checks
  • pnpm lint - Biome lint
  • pnpm format - Biome format (write)
  • pnpm check - Biome check

Structure

  • src/shared - reusable app-wide code (ui, lib, styles)
  • src/features - feature modules (vertical slices)
  • src/app - top-level app composition