Repository navigation
Releases
v0.1.4 — member failures reach the chair
Member failures reach the chair, and the room locks are released
A member that fails no longer goes silent. In an earlier live run a provider content
filter refused one member seven times. The chair saw only "subagent finished" and had no
way to apply the room rule: nudge the member once, then replace it.
The plugin now observes agent/request-error and writes a notice to the chair mailbox
that names the member and the provider message. The third failure inside ten minutes also
wakes the chair, because that is a stuck member rather than one bad request.
Proven live, with a member pointed at a model id that does not exist:
broken: model request failed (400 INVALID_REQUEST The supported API model names are
deepseek-flash, deepseek-v4-pro, but you passed no-such-model-xyz.)
withRoomLock kept one map entry per room and never released it. The entry is now
released once the chain drains, with an identity check so a later task keeps its own.
Everything else that the plugin holds is bounded: registrations and the member index are
released when an agent is disposed or a room closes, the progress timer stops at close,
and the tool-activity map is capped with an age prune. Only the archive grows, and that
is on purpose. It is about 110 KB per closed room.
v0.1.3 — quiet console, silent arming
Quiet console, silent arming
Two fixes found by watching real rooms.
- The server console is quiet by default. Every mailbox write, task change, and
progress line printed to the console, about eighty lines for one busy room. Those
lines now go throughtrace(), which prints only when the row setsverbose: true.
The console keeps the boot line, a room opening and closing, a pause or a resume,
and every failure. - Arming prints nothing. The plugin arms the room tools in every root session the
harness creates. That work is silent, because the count follows the sessions the
harness restores, not the sessions a user is using, and a number nobody can explain
reads as a fault.
Arming still happens at session creation. An attempt to arm on the session's first
message was tested and reverted: the request is already assembled by then, so the model
never saw the room tools and fell back to plain subagents. Arming later needs a
pre-assembly hook the platform does not expose today.
v0.1.2 — quiet console, one sender tag, exact totals
Quiet console, one sender tag, exact totals
Three fixes found by running real rooms.
- The server console is quiet by default. Every mailbox write, task change, and
progress line printed to the console, about eighty lines for one busy room. Those
lines now go throughtrace(), which prints only when the row setsverbose: true.
The console keeps the boot line, the chair arming, room open and close, pause and
resume, and every failure. - The sender tag appears once. Members write their own
[name]tag, and the
delivery wrapper added a second one, so receivers saw[checker] [checker] ...in 69
messages of one run.wrap()now returns the body unchanged when it already starts
with the sender tag. - The message totals are exact.
runProgressappended progress lines to the chair
mailbox and never refreshedmessageTotals, so a live room recorded 44 against 45
real entries. The append and the refresh now share one room lock.
Verified live on a four-member room: 149 recorded against 149 real entries, 0 doubled
tags across 52 delivered messages, 0 member turn errors, and 0 new sessions.
v0.1.1 — progress lines without a fork
Progress lines without a fork
The 0.1.0 progress line came from a forked summarizer turn, copied from Claude Code.
Claude Code's summary fork passes skipTranscript: true. The DSH fork provider has no
such option, so every fork became a real session: one catalog row, one log on disk, and
one model call per busy member per tick. A five-minute run created 27 sessions and
1.3 MB of logs, and the lines said nothing useful.
- The line now names the member's own last completed tool call, read from the platform
tools/resultevent. No model call and no session. Example:bear: web_search. - A line that reports a long idle time tells the chair that a member may be stuck.
Example:bull: bash, idle 124s. - Room close now marks each active member
released, so an archived roster does not
show a live member inside a closed room.
Proven in a clean-room install from this repository into a fresh profile: 0 new sessions
during a room, and every progress line named a real tool.