v0.17.0
Community release. This version integrates four contributed PRs, closes both open issues, and lands three follow-up fixes from the integration review. Thanks to @Agony1023, @1n4001, @Saksham-Shrey, and @Eaven for the contributions.
New
- Update a teammate's model in-place (#26): pass
model: "provider/model"toteam_messagetargeting a teammate and their model hot-swaps on the next turn. No respawn, no re-assigning tasks. Lead only;textis optional when changing model only. The stored model now also sticks across every delivery path (peer messages, nudges, recovery redelivery) instead of applying once at spawn. - Force re-engage a completed teammate (#31):
team_messageaccepts lead-onlyforce: trueto wake a teammate who already reported completion, for legitimate follow-on work like multi-round review. - Notify-the-lead primitive (#34): system events (errors, timeouts, spawn failures) now wake the lead directly instead of relying on the idle backstop, so a failure is never silent.
- Versioned dashboard API (#33):
/api/statereturns an exportedEnsembleDashboardStatewith aversionfield for external consumers, plusleadSessionId,lastNudgedAt, and provider-retry signals.
Fixed
- Task status stays truthful across the whole lifecycle (#27/#34): spawning a teammate atomically claims its task, and a member's in-progress tasks return to the board whenever they stall, time out, are shut down, or are lost to a crash — no more work stranded on dead assignees.
- Dashboard timestamps (#32): historical activity no longer renders as 08:00:00/19:00:00 (epoch zero). OpenCode v1's
{ created }time shape is parsed correctly. - Teammate lifecycle robustness (#31): stall detection covers a member's first action, orphaned teams reconcile after crashes (without boot deadlock),
team_mergewarns honestly when there is nothing to merge instead of reporting false success, and broadcasts count toward chatty detection. - Watchdog stall notifications can no longer loop: a persistently undeliverable nudge stops re-firing the lead wake, DB write, and toast every check tick until the member shows fresh activity or the nudge ages out.
- Malformed provider retry payloads from older OpenCode versions no longer throw inside the shared event handler.
- Spawn rollback cannot resurrect a task that was completed during the claim window.
Upgrade notes
Pin the exact version (@hueyexe/opencode-ensemble@0.17.0) due to OpenCode's plugin cache behavior. Two additive schema migrations run automatically on first launch; existing databases upgrade in place.