Bundle
dsh-live-teams
A team of long-lived DSH Sessions with durable tasks, review and acceptance.
- Source
- Gdenich
- License
- Apache-2.0
- Updated
- Updated 4 hours ago
Readme
# dsh-live-teams Host half of DSH Live Teams. The Team tab's card geometry, type scale and interaction patterns are adapted from [dsh-context](https://github.com/bowenliang123/dsh-context) v0.52.1 by bowenliang123, Copyright 2025, under the Apache License 2.0; the implementation is transcribed and modified for dsh-live-teams. ## Install ```bash dsh plugin --profile <profile> add dsh-live-teams ``` Then enable it in that profile's `cordis.patch.yml` row (`DSH_LIVE_TEAMS=1`) and restart DSH. From a checkout instead of the registry: ```bash dsh plugin --profile <profile> add github:Gdenich/dsh-live-teams ``` Requirements: DSH Desktop 0.1.5-rc.1 or newer. The plugin checks the host when it mounts and turns the team off with a readable reason if a required service is missing, so a DSH update cannot leave it half-working. Supported releases are declared in `package.json` under `dsh.compatibility.dshReleases`. What it does today: durable workspace-owned team state; a narrow Session port; a deduplicating command queue; the Session-scoped context provider; tasks with attempts, declared paths, review and acceptance; a reconciling dispatcher that starts what the lead assigned and shows silence instead of guessing; Git-bound submissions whose review is a commit range and whose integration is a compare-and-swap; and a human task surface in the panel that creates, edits and releases work directly. The decisions behind each are in `docs/decisions/` (ADR 0001–0012) and the live evidence in `docs/implementation/pilot-findings.md`. Mounting is opt-in through this package's Cordis patch. The row is disabled unless the composition sets `DSH_LIVE_TEAMS=1`, and enabling it without a workspace path fails loudly instead of running half-wired. ## Layout TypeScript sources live in `src/`; `lib/` is the build output and is not edited by hand. The package follows the first-party DSH conventions: ESM `lib/<entry>.js`, declarations next to it, `exports` with `types`/`default` pairs, `files`, peer dependencies on the Harness packages, and `dsh.bundle.patch`. The build is unbundled on purpose: each entry is self-contained, so no hashed shared chunk can fall outside the published `files` list, and `lib/` mirrors `src/`. ## Modules | Module | Responsibility | |---|---| | `errors.ts` | Domain taxonomy, platform error translation, audit-only detail | | `storage.ts` | Atomic publish (temp file, `fsync`, `rename`, directory `fsync`) and a process-local lock | | `team-store.ts` | Team state under `<workspace>/.dsh-live-teams`, revision CAS, `bindingGeneration`, tolerant `events.jsonl` | | `session-bridge.ts` | The eight-method Session port from the architecture document §9 | | `command-queue.ts` | Durable admission, semantic deduplication, generation fencing, retry | | `context-provider.ts` | Session-scoped membership context for `systemPrompt.context(...)` | ## Invariants enforced here 1. Member identity, Session identity, role and model route are independent values. 2. Every plugin-originated command is admitted by `command-queue` before it reaches the port. 3. Admission is idempotent on `idempotencyKey`. The platform seam is not: two `prompt` calls sharing one `requestId` were both accepted in the compatibility spike. 4. A command records the `bindingGeneration` it was admitted for and is refused when the member was rebound. 5. `interrupt` cancels a turn and never touches task attempt ownership. 6. Team context is recomputed from authoritative state on every assembly and is never cached. 7. Model selection is deliberately not implemented: the platform call also rewrites the deployment-wide default model, and that policy needs an explicit human decision. ## Tests ```sh pnpm --filter dsh-live-teams check pnpm --filter dsh-live-teams build pnpm --filter dsh-live-teams test ``` Test files cover the error taxonomy, the store, the bridge, the queue, the context provider, and one integration file that drives the real store through the provider and the bridge on temporary workspaces.
Install
dsh plugin --profile web add github:Gdenich/dsh-live-teams
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-live-teams from the hub
- This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.