Skip to content

v2.9.2

Latest

Choose a tag to compare

@edxeth edxeth released this 18 Sep 08:12

Install:

pi install git:github.com/edxeth/pi-subagents@v2.9.2

Or latest:

pi install git:github.com/edxeth/pi-subagents

✨ Features

Toggle agent enabled state from the Agents tab

Refs: e49336a7

Press Space on the Agents tab of the /subagents overlay to flip the enabled frontmatter key of the selected agent file. Only the enabled line changes, so comments, key order, and the agent body stay byte-for-byte the same. The key is appended when the file does not set it yet. Write failures show an error toast.

Disabled agents stay listed with a hollow icon, so you can re-enable them from the tab. The footer hint names the state that Space will produce (Space disable or Space enable). The launch policy and the roster keep excluding disabled agents.

🐛 Bug Fixes

The Herdr outstanding-work count returns to zero again

Refs: eafb25ef, 0c07bc0b, 08fc9fa1

A finished child could leave the Herdr work token (pi_subagents_work_v1) above zero forever, so the sidebar count never cleared. Three leaks are fixed:

  • A report delivered as nextTurn is parked in Pi until the operator sends the next prompt. Such a report never reached a context event, so its lease was never released. The lease is now marked consumed when Pi accepts the parked report, and it is released when the parent settles.
  • A background child whose process died without emitting exit or error stayed in the running set forever. The background watcher now finalizes the child when its process group is gone.
  • An interactive child whose pane launcher died without publishing a done sentinel or exit sidecar was waited on forever. The launcher now records its process id next to the done sentinel. A surviving record whose process is gone is reported as an abrupt exit instead of being ignored.

On Windows, liveness probes now check the child process id directly, and probing treats only ESRCH as "process gone". Permission errors and unsupported probe calls keep the child supervised instead of dropping a live child from the running set.

Child results survive completion races

Refs: 998c6baa

When the exit handler and the one-second poll finished the same child at the same time, the faster path could consume the child's result while the slower path reported an abrupt exit. The final report could then lose ping, token, and context metadata, and normal launcher cleanup could be classified as a crash. Death polling now defers to the group-exit waiter once that waiter owns the consumed sidecar, and the poll re-reads the launcher marker before it reports an abrupt exit.