Skip to content

v0.3.0 — Orchestration as a Collaboration Charter

Choose a tag to compare

@TimYuann TimYuann released this 19 Aug 04:25
· 180 commits to main since this release

orchestra-dsh v0.3.0 — Orchestration as a Collaboration Charter

This release turns orchestra-dsh from "role templates" into a full orchestration layer: an orchestration is a collaboration charter — who does what, who owns each decision, where work goes when done, where disputes go, when loops end, and who declares the team complete.

Highlights

🎼 Orchestration = collaboration charter

  • Topology schema v0.1: controller + roles[] (preset / sandbox / runtime / maxRounds / welcome) + protocol.{ownership, routes, completion}.
  • Hard validation for what the plugin can prove (role-id uniqueness, ownership/routes references, sandbox legality, runtime parameter pairs, preset resolvability); natural-language discipline stays in role prompts — no brittle text parsing, no workflow engine.
  • Driver onboarding upgraded: any proposal must pass six completeness tests (reachability, unique power, output consumers, loop exits, dispute destination, single closure owner). Role count is entirely task-driven.

📦 Preset system (Bug #4 root fix)

  • Built-in behavior packages: orchestra-implementer, orchestra-reviewer, orchestra-oracle (persona + tool composition).
  • Built-in topologies: duo, trio, oracle, and the new four-role-dev (implement ⇄ review main loop + on-demand oracle escalation).
  • Plugin seeds ~/.dsh/orchestra/ on first run (never overwrites user content); lookup order: project .orchestra/ > global > DSH-native > built-in.

🔄 Team lifecycle & recovery

  • team.json v1.1: teamId / status / controller / controllerHistory / topologyRef / mission / sessionHistory / reports; rounds → reportCount.
  • orchestra_dismiss: immutable archive + state cleanup + archive notice to live roles (role sessions stay alive).
  • orchestra_activate(archive_id): reused / resumed / replaced / failed per role, replacement records + recovery packet, controller takeover, degraded on partial failure.
  • orchestra_team always returns {team, archives}.

✉️ Honest delivery receipts

  • a2a_send / a2a_reply return {message_id, target_session_id, accepted_at_ms, delivery_mode} with live_inbox | durable_inbox | resumed_inbox.
  • The unreliable queued fake-success is gone: truly cold targets are resumed first — resume failure fails the call.
  • a2a_list progressive disclosure: your cwd first, archived folded by default, limit/offset, current_cwd_team annotation, full listing in lightweight (no-team) mode.

🐛 Fixes

  • Cold-delivery reliability (P0): no pending-item loss on failed resume, no in-memory queue promises.
  • Archive activation: dismissed snapshots parse correctly; orchestra_team schema accepts populated report lists.
  • Built-in preset/topology seeding now bypasses the workspace-write fence for the global config root.
  • /team bubble: the command renders as a normal /team <goal> bubble with a single collapsed notice to the model (no bracket-prefixed user message, no split turns).

Compatibility

  • Legacy team.json / archives / topologies parse transparently (normalized to v1.1).
  • Pure-A2A users (no team footprint) are unaffected by cwd filtering.
  • The legacy <cwd>/orchestra/topologies/ location is no longer read — move custom templates to .orchestra/topologies/.
  • @deepseek-ai/* remain peerDependencies only (host-provided; double-load protection unchanged).

Verification

  • 16 unit assertions (topology validation / team normalization / slug) + 4 headless E2E runs covering the full lifecycle (create → report → dismiss → activate), recovery, team schema, and a2a_list contract — all green on minimax-cn / MiniMax-M3.
  • See scripts/test-v0.3.0.mjs.

Full design spec: reports/spec-v0.3.0.md in the repo (internal, not published on npm).