Skip to content

feat: add managed agents to channels from profiles - #196

Merged
kalvinnchau merged 7 commits into
mainfrom
am/profile-add-agent
Sep 24, 2026
Merged

kalvinnchau merged 7 commits into
mainfrom
am/profile-add-agent

Conversation

@kalvinnchau

@kalvinnchau kalvinnchau commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Stack

Depends on #188 (read-only profile channels). Review against am/profile-agent-channels head 2c546f9fd55609202cff2337cdeac1bad06e3bd6 to isolate admission changes.

What changed

  • Offer Add to channel only for exact same-community native-managed agents with a managed session choice and eligible classified channel.
  • Recheck native and roster evidence before signed invitation; enforce admission through publisher entry, retain outbox outcome, and promote restored legacy invitations to guarded intent when reused.
  • Hide generic Retry for guarded invitations; renew eligibility through the channel or profile.
  • Review fixes: membership appearing during a pending admission no longer cancels its gate; saved invitation intents older than the relay’s 15-minute event window fail with explicit membership/Outbox recovery instructions rather than being republished forever. Added regressions for both.

Verification

  • Head 5c5756221254fb6c13c13689b88606d5f8ed7d86: production typecheck/build; three focused test files (31/31); source-fixture profile browser journeys in Chromium/WebKit (8/8); pre-push TypeScript, related unit tests (90 files, 1,218 tests) and design-system guards passed locally.
  • Native picker-to-relay success, live relay authorization, and durable restart behavior remain unverified. Hosted CI and independent re-review pending; the PR stays draft until those gates are assessed.

Sample screenshot

Kalvin’s supplied example of the tester profile’s Add to channel row, hosted as an uncommitted GitHub attachment; no human photograph. This is an example of the feature, not proof of the final head’s live native-to-relay flow.

Supplied example of the Add to channel action on the tester profile

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Carl, an automated reviewer, commenting via Wes’s GitHub account.

Changes requested: one P2 recovery defect, detailed inline. A failed native refresh removes the active dialog and hides the result instead of giving the user a recovery path.

Merge criterion: preserve a visible outcome/retry surface when eligibility disappears, without weakening admission checks; cover the transition with notifying stores or the real native controller.

Source-only review of 55165717b9e058a374f20e04d13fcbbbf099517c against stacked base 99e6e936b62e040b297f6c2c68889115a1dbf284, including independent UI/native review and coordinator verification. Existing exact-head CI passed its required gate and both browser engines; Windows native validation was skipped. No local tests or PR code execution. Live native-to-relay authorization, packaged behavior and actual restart recovery remain unverified.

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Carl, an automated reviewer, commenting via Wes’s GitHub account.

Focused re-review: the prior native-refresh recovery blocker is resolved; no new blocking defects found in the changed paths. The open dialog now retains its failure/retry surface while current eligibility still fences admission. The notifying-store regression covers failure, disabled submission, native recovery and explicit resubmission. One non-blocking documentation clarification is inline; the unchanged ordinary-composer path is not being certified as guarded by this re-review.

Reviewed 9153501f8e618fbd84517fafda95ab918ded9a51 against stacked base 99e6e936b62e040b297f6c2c68889115a1dbf284, focusing on the two-file delta from 55165717b9e058a374f20e04d13fcbbbf099517c and its admission/native-control callers. Source-only review with independent UI/native recovery analysis; no PR code or tests executed. Existing exact-head CI passed its required gate and Chromium/WebKit journeys. Windows native validation was skipped; live native-to-relay authorization, packaged behavior and actual durable restart remain unverified. This is a COMMENTED review, not approval or live acceptance.

Comment thread docs/profiles.md Resolved
Base automatically changed from am/profile-agent-channels to main September 24, 2026 13:14
am and others added 6 commits September 24, 2026 08:42
Co-authored-by: Kalvin Chau <[email protected]>

Signed-off-by: Kalvin Chau <[email protected]>
…itations

Co-authored-by: Kalvin Chau <[email protected]>

Signed-off-by: Kalvin Chau <[email protected]>
Co-authored-by: Kalvin Chau <[email protected]>
Signed-off-by: Kalvin Chau <[email protected]>
@kalvinnchau
kalvinnchau merged commit 770d2ee into main Sep 24, 2026
12 checks passed
@kalvinnchau
kalvinnchau deleted the am/profile-add-agent branch September 24, 2026 16:40
morgmart pushed a commit that referenced this pull request Sep 24, 2026
…rs-support

* origin/main:
  feat: show owner-view agent memories in profiles (#231)
  Add opt-in Canvas-backed channel Todos (#222)
  Skip hidden folders when discovering plugins in a folder (#229)
  feat: add owned local agent actions to profiles (#190)
  feat(channels): move session creation into the context menu (#209)
  Add Goose as an agent harness option (#214)
  feat: preview channel agent activity in profiles (#187)
  Use context-aware identity names with human-first priority (#167)
  feat: add managed agents to channels from profiles (#196)

Signed-off-by: Carl <c217fe6b9d958f41c3a5e030dccc7f626775a923089cb6491305eade75ea1f1b@buzz.block.builderlab.xyz>

# Conflicts:
#	src/features/relay/outbox.ts
dr0uleau added a commit that referenced this pull request Nov 5, 2026
## Why

Desktop users need a clear way to find and apply Git plugin updates
during normal use.

## What

Offer shell notices and a Plugins menu entry for Git plugins that
declare update support. The plugin sets the default for background
checks. A saved per-plugin user choice overrides it. Plugins without the
declaration receive no background checks. Check at startup and hourly
while Buzz is visible. Checks do not install or reload plugins.

## How

Clicking the notice body opens that plugin’s update checkbox in Manage
plugins. The notice has a hover state and keyboard access. Update,
Review permissions, Later, and Dismiss keep their own actions. Back
restores the prior destination. Explicit Close retires matching plugin
visits.

Fetch a fresh immutable preview on action. Apply updates without added
access after confirmation from the notice. Require the existing access
review for added access or a publisher change. Preserve source identity,
managed pins, enabled state, signing rules, import concurrency, and
rollback limits.

Later hides the current candidate for the app run. Failed checks and
installs offer retry. Activation failures offer retry and the existing
rollback confirmation outside Settings.

Nexus needs the matching manifest declaration and host pin in [draft PR
#196](squareup/buzz-nexus#196). Older hosts
reject the new manifest field.

## Risk

An enabled plugin reloads as soon as the update installs. The notice
tells users to save unfinished forms and stop plugin workers first.

## Testing

At `7a433af38`, Blox passes all three push checks: TypeScript with 8,025
related frontend tests, design types and guards, and Clippy. The native
plugin crate passes 105 tests. The policy regression fails on the old
owner. The deferred-authorization regression fails before its fix and
passes after it. Scoped independent review finds no remaining blockers.
All 34 focused update tests pass. Clock and deferred-discovery tests
reproduce both review findings before the fixes. They also cover
recovery without a repeated zero-delay timer.

The full Toast browser file passes in Chromium and WebKit at
`29ca9f643`: 13 tests pass and one existing test skips. One browser case
adds real pointer hit tests and keyboard use for notice navigation. It
checks light/narrow and dark/wide layouts. Component and app tests cover
the settings checkbox and Back/Close history. No browser cases are
removed.

Native checks use the signed macOS app at `646ae3a94` and the real
relay. Published Nexus builds cover the notice in both themes, Later and
the Plugins menu, an enabled update, and access review with
cancellation. The app restores after restart. Native policy checks also
verify saved overrides across package replacement and restart. The
fixture adds only the update declaration to published Nexus code.

The signed app at `755afe96` contains the new notice navigation. Later
commits add browser types and fix check timing and pending Retry clicks.
They preserve the notice layout and navigation. Native acceptance passes
at `755afe96` with the saved sign-in, helper, signer, and profile. The
app restores its community and update notice after restart. A native
pointer click on the notice title opens Nexus details and focuses the
checked update setting. The operator confirms the flow on 2026-11-05.
The existing screenshots show the native notice, access review, and
checkbox. The operator authorizes merge as is; small dialog UX fixes
belong in a separate PR. All 41 CI checks pass at `7a433af38`. Human
review approves the PR. Both review threads are resolved.

## Screenshots

Native macOS debug app at `646ae3a94`, connected to the real relay.
Conversation content is blurred for privacy.

| Light | Dark |
| --- | --- |
| ![Plugin update notice in light
mode](https://github.com/user-attachments/assets/46400b53-d0ca-4e07-ad9a-b408b19d3613)
| ![Plugin update notice in dark
mode](https://github.com/user-attachments/assets/83a33698-2335-4039-9dd0-f040e5f82ec3)
|


| Access review · light | Access review · dark |
| --- | --- |
| ![Plugin access increase review in light
mode](https://github.com/user-attachments/assets/bb839091-8620-4d71-8c4e-a1ecfcac02a6)
| ![Plugin access increase review in dark
mode](https://github.com/user-attachments/assets/0c3a5283-b715-4115-9d72-1c0ab086bbd7)
|

The per-plugin setting uses the native app at `cba7d609`. The local
Nexus fixture adds the update declaration to published plugin bytes. Its
code and host access stay the same. The production declaration is in the
linked plugin PR.

| Checks on | Checks off |
| --- | --- |
| ![Automatic update checks
enabled](https://github.com/user-attachments/assets/a4a47c44-b238-4b98-b449-7fcd366a229f)
| ![Automatic update checks
disabled](https://github.com/user-attachments/assets/5f80a74a-3cc6-4e85-9ff6-df4bd12009fa)
|

buzz-review-completed

Generated with Codex

---------

Signed-off-by: Daniel Rouleau <[email protected]>
Co-authored-by: OpenAI Codex <[email protected]>
Co-authored-by: Codex <[email protected]>
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.

2 participants