Repository navigation
Releases: TimYuann/orchestra-dsh
Release list
v0.6.1 — DSH 0.2.0-rc.2 compatibility + A2A session-backend fix
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 addrefused 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
tscclean (host + client); 299/299 tests — 4 new regression tests, red without the fix.npm pack: 81 files,@deepseek-ai/*never entersdependencies(onlyjs-yaml).- Contract check against 0.2.0-rc.2 (npm packages + the shipped app bundle): every imported symbol,
all 15ctx.getservices, the three events, andSESSION_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 withorchestra-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
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 (realagent.cancel, the Composer Stop button)a2a_list— sorted by your cwd and recent activity, with aquerykeyword filter,roleand relativelastActivitya2a_read— reverse progressive disclosure: last 1–2 turns by default, widen on demandorchestra_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'
protocolblocks (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
orchestraToolslists are filtered silently rather than failing team creation. - The control point is unchanged:
orchestra_createstill refuses any call without thefrozenRefthat user approval produces.
Verification
- 223/223 tests green;
typecheck+buildclean. - The tarball was re-consumed from a clean directory (registers 17 tools: 7 A2A + 10 orchestra) and cold-booted on an isolated
compatprofile — composition rows present,orchestra-dsh/client.jsadvertised and served with thesettings.sectionregistration. - 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
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 newfour-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.jsonv1.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,degradedon partial failure.orchestra_teamalways returns{team, archives}.
✉️ Honest delivery receipts
a2a_send/a2a_replyreturn{message_id, target_session_id, accepted_at_ms, delivery_mode}withlive_inbox | durable_inbox | resumed_inbox.- The unreliable
queuedfake-success is gone: truly cold targets are resumed first — resume failure fails the call. a2a_listprogressive disclosure: your cwd first, archived folded by default,limit/offset,current_cwd_teamannotation, 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_teamschema accepts populated report lists. - Built-in preset/topology seeding now bypasses the workspace-write fence for the global config root.
/teambubble: 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).