Use the resolved runtime config for discovery auth while preserving source SecretRef markers, keep full-catalog discovery unscoped, honor per-agent wildcards, and restrict discovered inventory to manifest-declared dynamic providers.
Fixes#115953
* fix(buzz): page reconnect history instead of dropping older messages
On reconnect the Buzz gateway asked the relay for a single capped page of
room history and treated EOSE as a complete recovery. Any backlog larger
than the per-room replay limit was never requested again, so those messages
never reached handleBuzzInbound, the agent, or the session transcript, and
nothing reported the loss.
The room subscription now records how much history its first page returned
and, when that page filled the limit, pages older history through the relay
until it is exhausted. Each page is dispatched through the existing bounded
replay queue and the next page waits for queue capacity, so recovery stays
memory bounded. A room whose backlog cannot be paged past a single
timestamp is now reported instead of dropped silently.
Membership tracking moves to room-membership-tracker.ts because buzz-bus.ts
was already at the 700 line ceiling.
* fix(buzz): hold dispatch capacity while a history page is in flight
Catch-up asked the replay queue whether capacity existed and then issued the
relay query, but nothing held those slots. Live room events arriving while
the query was in flight could consume them, so admitting the page afterwards
could report overflow, which closes the dispatch queue and drops every
queued message before forcing a reconnect. A busy room with slow inbound
handlers could repeat that instead of finishing recovery.
Capacity is now reserved rather than sampled. reserveCapacity resolves with a
reservation that owns its slots until released, page events are admitted
through that reservation, and the reservation is released once the page is
enqueued. Live enqueues keep the full pending limit and are never rejected
earlier because a reservation is outstanding. An overflow reported through a
reservation means the relay exceeded the page it was asked for, so it is
reported as a history error instead of tearing down the session.
* fix(buzz): bound reconnect history pages
* fix(buzz): preserve replay reservations
* test(buzz): cover catch-up settlement paths
* fix(buzz): drain saturated history ranges
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
* docs(config-channels): replace legacy allow:true with enabled:true for Discord, Slack, and Google Chat config examples
* docs(config-channels): repair channel configuration examples
Make the complete Discord, Slack, and Google Chat setup examples valid and keep Slack channel routing on stable IDs.
Co-authored-by: 赵旺0668001248 <zhao.wang1@xydigit.com>
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Closes#117046
Per-agent model, tool, skill, and node-binding edits in the Control UI were written to the retired `agents.list` shape, so the strict Gateway schema rejected them. Save failures could then be hidden by an immediate roster refresh.
Route all affected writers through the canonical keyed `agents.entries` resolver, preserve authored keys, reject unsafe keys, align adjacent cron and swarm readers, and keep failed saves dirty with the Gateway error visible in the active panel.
Validated with the exact Testbox changed gate, full CI, 314 focused UI tests, 11 Playwright scenarios, 42 Gateway config tests, clean autoreview, and ClawSweeper review.
The initial stale-pid scan gave lsof a 2000 ms spawn budget. On macOS hosts with many mounted volumes, lsof can exceed that budget, leaving the stale listener in place and making gateway restart fail on the busy port.
Give only the initial lsof scan a 5000 ms default. Keep process and ancestor ps inspection at 2000 ms, and keep the post-kill poll at 400 ms. An explicit findGatewayPidsOnPortSync timeout continues to bound every child process used by that probe.
Add regressions for the split defaults and explicit override behavior. This is a bounded mitigation for the residual slow-scan case related to #116950; the broader macOS polling architecture remains tracked by #90548.
Reported by @NirvanaCh7.
Co-authored-by: guptaishaan <guptaishaan@users.noreply.github.com>
* fix(cli): make commands, completion, and JSON output reliable
* fix(cli): reconcile completion coverage with current main
* test(cli): keep test routing stable across isolation lanes