Releases: andrea-tomassi/pi-open-agents
Release list
0.1.20
fix(subagent): fall back to the running pi entry when import.meta.resolve cannot see the host package (npm-distributed plugin + bundled pi runtime). Fixes subagent delegation failing with 'Cannot find module @earendil-works/pi-coding-agent' after npm install.
v0.1.19 — per-call model override in subagent()
Per-call model override (#10)
The subagent tool now accepts an optional model parameter:
subagent({ agent: "deep-research", task: "...", model: "zai/glm-5.3-flash" })
- Per-call: overrides the agent definition default for a single delegation — no need to fork
.agent.mdfiles for one cheap-model task - Fail-fast: malformed values (missing
/) are rejected before any child spawn - E2E verified: child process events report the overridden model
Also:
- README: crowd-favorites row for "model selection per subagent" (anomalyco/opencode#6651 👍71), roadmap updated
- 8 new tests (125 total)
v0.1.18 — docs: fleet stack guide + crowd favorites
Docs release — no code changes
- New: PI-WITH-HERDR.md — the pi × Herdr × pi-open-agents fleet stack:
- Advantages over tmux (workspace persistence, mouse-first UX, agent awareness)
- Agent-to-agent awareness via socket integration (
full_lifecycle_hook_authority) - 5-command tutorial + reference workstation setup (6 agents, one screen)
- README:
- "Popular requests, already covered" table — ecosystem's most upvoted asks (AGENTS.md 👍336, skills standard 👍183, subagent tool restrictions 👍70) mapped to what's already here
- Roadmap section: #8 permission inheritance, #9 hot-reload, #10 per-call model override, #11 parallel subagent limit
- Catchy fleet-stack hook: 🐑 "Herd your agents" + "Run a fleet" section
- CONTRIBUTING.md: added earlier in this cycle — read before opening PRs/issues
v0.1.16 — ship explorer agent
Add model-agnostic explorer agent (agents/explorer.agent.md). The explorer inherits the session default model and is distributed via npm for cross-harness compatibility (pi + OpenCode).
v0.1.15 — set_agent guards (primary-only enforcement)
Added
- Issue #5 / PR #6:
set_agentnow enforces primary-only usage:- Blocks calls from subagent processes (
PI_OPEN_AGENTS_DEPTH > 0) - Rejects
mode: subagentagents as targets (consistent with TUI selector) primaryandallmode agents remain selectable from primary processes- Tests invoke the real
execute()handler with full mock infrastructure
- Blocks calls from subagent processes (
Changed
typeboxadded to devDependencies (was an implicit transitive dependency)
Tests
- 117 tests (was 97), all passing
v0.1.14 — Subagent tool restriction and write/edit permission fix
Fixed
-
Issue #4 — write/edit permission collision:
writeandeditare now separate permission categories. Previously,{edit: true, write: false}silently producededit: denydue to both mapping to the same key. In pi,write(create/overwrite) andedit(search-and-replace) are distinct tools. -
Issues #1 + #2 — Subagent tool restriction: OpenCode-style
tools:map and explicitpermission:blocks now restrict the subagent child process toolset via the--toolsCLI flag. Previously, these restrictions were silently ignored for subagents — the child received all tools regardless.
Changed
toolToPermission()andtoolsMapToPermission()no longer collapsewriteintoedit. Onlyapply_patch(OpenCode-only) still maps toedit.- New
deriveToolsWhitelist()in subagent executor derives--toolsfrom permission allow-lists when no explicit tools array exists. - Removed dead
PI_OPEN_AGENTS_PERMISSIONfromRecursionEnvtype.
Known limitations
- Wildcard permissions (
*: allow+ specific denies) cannot produce a finite--toolswhitelist — the CLI flag is a whitelist, not a deny-list. The child gets all tools in this case. - Issue #3 (
variant:field) not addressed — requires a pi-core--variantCLI flag.
Tests
- 97 tests (84 existing updated + 13 new), all passing
v0.1.13
Fixed
-
Subagent output no longer echoes the request on pi 0.83.0. pi 0.83.0 changed its JSON event stream to emit
message_endfor every message role (user, assistant, toolResult) — not just assistant. The executor captured text from anymessage_end, so the echoed user task (Task: …) and raw tool results leaked into the subagent output whenever the final assistant turn had no text part (tool-only / error).The
message_endhandler now captures text, usage, and model only fromrole === "assistant"messages. Backward- and forward-compatible. -
Added regression tests replaying the real 0.83.0 event stream (user + assistant + toolResult
message_end) via an injected fake runner.
v0.1.12
Fix: subagent delegation outage
AuthStorage was removed from @earendil-works/pi-coding-agent in 0.80.x. The subagent executor imported it and called AuthStorage.create() unconditionally, throwing Cannot read properties of undefined (reading 'create') and breaking all subagent delegation regardless of the configured model.
Changes
- src/subagent/executor.ts — extract resilient, injectable
buildModelRegistry(). The cosmetic cost/context-window registry now degrades toundefinedinstead of crashing; downstream usage enrichment already tolerates a missing registry. - test/executor.test.ts — regression coverage (missing host symbols, throwing factory, happy path). CI-safe: skips when the optional
@earendil-workspeer dep is absent.
Compatibility
Backward compatible — identical behavior when AuthStorage is present.
v0.1.11 — OIDC trusted publishing test
Changed
- npm Trusted Publishing via OIDC — package now publishes automatically from GitHub Actions when a tag is pushed. No local
npm publishneeded, no npm token, no OTP. - Bumped Node to 22 for npm 12 compatibility
v0.1.9 — README fixes
Fixed
- Install command — fixed to use
npm:prefix in README - Banner image width — adjusted for better display