Releases: hueyexe/opencode-ensemble
v0.15.1
Bun Runtime Loading Fix
Fixes a startup failure where the plugin could not load under Bun.
- Bun's static module scanner detected the literal
"node:sqlite"string indb.tsand mapped it tobetter-sqlite3, failing at module load with'better-sqlite3' is not yet supported in Bun— even though that code path is dead on Bun (it only runs on Node/Electron). - Changed the require to
["node","sqlite"].join(":")so the scanner can't statically detect it, matching the existingbun:sqlitepattern indb.ts.
Also in this release
- docs: CONTRIBUTING now highlights the branch-naming prefix rule and the common "PR from your fork's main" gotcha.
Thanks to @CKGrafico for the fix (#22).
Full Changelog: v0.15.0...v0.15.1
v0.15.0
Project Grouping in Dashboard
Teams are now organized by project (the lead's working directory) so you can run multiple OpenCode instances across different repos without team collisions or ambiguous cleanup.
- New
projectlayer keyed by the lead's working directory - Active team-name uniqueness scoped to
project_idinstead of globally /api/statereturnsprojects[].teams(flatteamsretained for compatibility)- Collapsible project outline in the dashboard with coarse status and hover details
- Recovery and archive purge safety checks scoped per project — duplicate team names across projects no longer cause ambiguous cleanup or branch deletion
team_createaccepts optionalproject_name; otherwise a short random name is generated- Database migrations are now atomic so failed cross-version upgrades roll back cleanly
Contributors
Thanks to @ClSlaid for contributing project grouping in #16.
Full Changelog: v0.14.2...v0.15.0
v0.14.2
Desktop Runtime Compatibility
The plugin now loads and functions correctly on OpenCode Desktop (Node/Electron runtime).
- Build target switched from Bun to Node so the published bundle has no Bun-only APIs
- Runtime SQLite adapter: uses
bun:sqliteon Bun,node:sqliteon Node/Electron - Subprocess helper (
runCommand) replacesBun.spawnfor git operations - Dashboard HTTP server ported from
Bun.servetonode:http - CI pins Node 24 (required for stable
node:sqlite)
Multi-Instance State Partition Fix
When multiple Plugin instances share the same SQLite database (e.g. Desktop sidecar + opencode serve), teammates spawned by one instance were invisible to the other — every team_* tool call returned "This session is not in a team."
MemberRegistryis now rehydrated from SQLite on every plugin init (not just on crash recovery)findTeamBySession,resolveRecipientSession, andcheckToolIsolationfall back to SQLite when the in-memory registry misses- New
session.errorevent handler surfaces teammate failures as system messages to the lead
Also in this release
DashboardServer.stop(true)now callscloseAllConnections()for prompt shutdown under Nodeengines.node >= 24declared in package.json; runtime requirements documented in README- 37 new tests (605 total)
Full Changelog: v0.14.1...v0.14.2
v0.14.1
OpenCode SDK 1.14 Compatibility
This patch release updates OpenCode Ensemble for the current OpenCode plugin SDK/runtime.
- Updates
@opencode-ai/sdkto^1.14.45 - Updates
@opencode-ai/pluginto^1.14.45 - Updates pinned README install snippets to
@hueyexe/opencode-ensemble@0.14.1
Verification
- Verified local plugin runtime against OpenCode
v1.14.45 - Smoke tested team creation, task board, read-only spawn, messaging, dashboard health, shutdown, and cleanup
- Smoke tested writable
worktree: truespawn, teammate commit, graceful shutdown, preserved branch, and lead-side merge - Ran
bun run typecheck && bun test && bun run buildsuccessfully before publish
Full Changelog: v0.14.0...v0.14.1
v0.14.0
Archived Team Purge
Safely delete archived teams from Ensemble storage.
- Adds two-step purge through team_cleanup with preview and exact user approval labels
- Cleans stale archived worktree/workspace references and scoped Ensemble-owned branches during confirmed purge
- Blocks active teams, unsafe branch refs, dirty archived worktrees, and resources still referenced by active teams
- Updates docs for the purge workflow and bumps package snippets to 0.14.0
Full Changelog: v0.13.3...v0.14.0
v0.13.3
Skip worktree for read-only agents
Read-only agents (explore, plan) no longer create git worktrees on spawn. They can't write files, so isolation was unnecessary overhead.
- Worktree creation automatically skipped for explore/plan agent types
- Lead system prompt updated with guidance on worktree: false for custom read-only agents
- Stress test coverage for read-only agent full lifecycle
Also in this release
- Auto-assign workflow for issues
- Fixed flaky timing margins in rate-limit tests
Full Changelog: v0.13.2...v0.13.3
v0.13.2
Dashboard Triage Cockpit
The dashboard now gives leads a clearer mission-control view of live agent work.
- Added a team attention strip for blockers, active work, and recent activity
- Improved agent ranking, status metadata, task dependency display, and expandable activity messages
- Hardened keyboard access, focus handling, modal semantics, reduced-motion behavior, and mobile chrome
Also in this release
- Added a social preview image to the README and npm package
- Updated install snippets and package version to
0.13.2 - Isolated config tests from local global config and expanded dashboard contract coverage
Full Changelog: v0.13.1...v0.13.2
v0.13.1
Fix: Completion Loop Prevention
Fixes a bug where certain models (e.g. Kimi K2.6) would enter an infinite loop after teammates completed their work. The lead and teammate kept waking each other with courtesy replies, and the cycle never stopped.
- Added a
reported_to_leadflag that gets set when a teammate goes idle after messaging the lead - Messages to completed teammates are stored but no longer pushed via
promptAsync - Broadcasts and recovery redelivery also skip completed teammates
- Wake-lead now has a 5s cooldown and skips when all teammates are done
- Peer-flush and nudge skip completed teammates
- Flag resets if a teammate gets re-activated, so follow-up work still flows normally
- 10 new tests covering the loop scenario, Q&A during work, and re-activation
Full Changelog: v0.13.0...v0.13.1
v0.13.0
Stash-Free Merge Path
Removed git stash from the merge workflow. Sequential merges no longer silently lose work.
team_mergenow runsgit merge --squash+git reset HEADdirectly — no stash/pop cycle- Sequential merges work cleanly: merge A lands unstaged, merge B lands on top, nothing lost
- Conflict messages include full manual resolution steps (
git merge --squash+git reset HEAD)
Explicit Tool Messaging
All tool output now tells the lead exactly what happened and what to do next.
team_shutdownreports commit count: "alice committed 3 changes. Ready to merge." vs "alice has uncommitted changes only"team_mergeoutput: "Merged X's changes into your working directory (unstaged). Review with: git diff"team_tasks_completefires a TUI toast with progress: "socializer: 3/7 tasks complete"
Also in this release
- Spawn restriction softened from "CRITICAL: one call per response" to "one at a time, avoids worktree contention"
- Removed stale
git stash listreferences from cleanup overlap warnings
Full Changelog: v0.12.1...v0.13.0
v0.12.1
Merge Overlap Detection
team_merge now detects when you have local changes to files that the agent also modified, and blocks the merge to prevent silent overwrites.
- Overlap detection covers unstaged, staged, and untracked files
- Blocked merges list the conflicting files and preserve the branch for retry
team_cleanupsafety-net warns (non-blocking) when overlap is detected- Stash-pop warnings are now surfaced in merge output (previously swallowed)
- Graceful fallback if the overlap check itself fails
Full Changelog: v0.12.0...v0.12.1