Skip to content

Releases: TimYuann/orchestra-dsh

v0.6.1 — DSH 0.2.0-rc.2 compatibility + A2A session-backend fix

Choose a tag to compare

@TimYuann TimYuann released this 29 Sep 18:21

orchestra-dsh v0.6.1

DSH 0.2.0-rc.2 compatibility + an A2A session-backend fix.

Why 0.6.0 could not be installed or booted on the current DSH

The host's bundle gate (@deepseek-ai/dsh-app-boot) compares the running DSH version against the
@deepseek-ai/dsh* peer ranges and rejects exact pins. 0.6.0 pinned 18 peers to exactly
0.1.7-alpha.1, so on 0.2.0-rc.2:

  • dsh plugin add refused the install (nothing was installed), and
  • even a hand-installed tgz was denied at boot — the whole bundle layer was skipped
    (skipping profile bundle "orchestra-dsh"), so no A2A tool ever registered.

0.6.1 declares ranges instead: >=0.1.7-alpha.1 <0.3.0 for the dsh-* packages, ^4.0.3 /
^1.0.8 / ^1.1.5 / ^1.0.4 for the cordis family, plus @deepseek-ai/cordis-plugin-group: ^1.0.4
(required by the cordis:group rows in the role presets). devDependencies moved to 0.2.0-rc.2.

Fixed: a2a_create(execution="session") failed on a stock deployment

Error: published permission "custom" does not match blueprint "workspace-write"

Every created session is pinned to approval: never (D2-a) after the permission preset is
applied, and the host derives the effective preset name from the live knob state — so any preset
that declares approval: ask (the stock read-only / workspace-write) stops naming a table entry.
The lightweight blueprint compared that derived name against the selected one, while the governed
path already had the effective-value accommodation. The commit now verifies the declared knobs
(declared sandbox + the pinned approval) and writes the declared sandbox explicitly, because the host
only writes a knob when it differs from the deployment default.

This defect is pre-existing (it is not an rc.2 regression); it was found by this round's live
verification.

Verification

  • tsc clean (host + client); 299/299 tests — 4 new regression tests, red without the fix.
  • npm pack: 81 files, @deepseek-ai/* never enters dependencies (only js-yaml).
  • Contract check against 0.2.0-rc.2 (npm packages + the shipped app bundle): every imported symbol,
    all 15 ctx.get services, the three events, and SESSION_FORMAT_VERSION (4 in both) unchanged;
    the cordis-family runtime JS is byte-identical across the version bump.
  • Live on DSH 0.2.0-rc.2 in isolated profiles: headless subagent round trip (A2A-PONG), headless
    session round trip (A2A-SESSION-PONG), web profile on port 4602 boots with orchestra-dsh/client.js
    in the boot module graph, and a GUI-driven session round trip (A2A-WEB-OK).

Scope of this release

A2A only, by instruction. The team / delivery layer is unchanged and still a draft plan; restart-surviving
role identity and Windows were not verified this round. Details: UPDATE-v0.6.1.md.

v0.5.0 — lean-lane collaboration and multi-role orchestration

Choose a tag to compare

@TimYuann TimYuann released this 16 Sep 13:21

orchestra-dsh v0.5.0 — lean-lane collaboration and multi-role orchestration

npm 上的上一版是 0.3.0 —— 0.4.0 / 0.4.1 从未发布到 npm,所以 0.5.0 是 npm 用户直接跨到的版本。完整说明见 UPDATE-v0.5.0.md。

Added

  • a2a_stop — cancel the target session's running turn and clear its pending inbox (real agent.cancel, the Composer Stop button)
  • a2a_list — sorted by your cwd and recent activity, with a query keyword filter, role and relative lastActivity
  • a2a_read — reverse progressive disclosure: last 1–2 turns by default, widen on demand
  • orchestra_dispatch / orchestra_wait — dispatch a task to a lane; wait for committed writes (or a 20-minute heartbeat) instead of polling
  • Approval by a plain user reply (启动 / 可以 / ok); /team approve <draftId>@<revision> still works

Changed

  • Plugin records moved out of Session logs into <cwd>/orchestra/ files (ADR-0002). A custom Session event type made the whole log unreadable after a restart; sessions the plugin touched are now natively replayable again.
  • Orchestra is a thin lane engine: nodes hand hard facts to each other directly over A2A, a loop is bounded to 2 rounds on the front line, and the driver is woken by reports rather than acting as a graph clerk.
  • The five built-in task topologies' protocol blocks (loops / gates / handoffs / closure) remain as validated, declarative assets; the v0.5 runtime no longer drives them as a state machine.

Removed (breaking)

  • The micro state-machine tool surface — 16 tools: orchestra_loop_start, orchestra_attempt_start, orchestra_verdict, orchestra_handoff, orchestra_gate_open, orchestra_gate_fallback, orchestra_graph, orchestra_graph_reconcile, orchestra_reconcile, orchestra_decision, orchestra_document, orchestra_charters, orchestra_close, orchestra_apply_amendment, orchestra_freeze, orchestra_spawn.
  • Stale tool names left in your own topology/preset orchestraTools lists are filtered silently rather than failing team creation.
  • The control point is unchanged: orchestra_create still refuses any call without the frozenRef that user approval produces.

Verification

  • 223/223 tests green; typecheck + build clean.
  • The tarball was re-consumed from a clean directory (registers 17 tools: 7 A2A + 10 orchestra) and cold-booted on an isolated compat profile — composition rows present, orchestra-dsh/client.js advertised and served with the settings.section registration.
  • Published tarball is byte-identical to the validated local artifact (shasum 42ac1bb3, 73 files).
  • Honest not-run list and the external acceptance entry: UPDATE-v0.5.0.md §4/§5.

DSH compatibility: 0.1.5-rc.2 · License: MIT

v0.3.0 — Orchestration as a Collaboration Charter

Choose a tag to compare

@TimYuann TimYuann released this 19 Aug 04:25

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).