Bundle
dsh-maestro-runtime
DSH runtime adapter for maestro-flow: guard, workflow context, KG sync, delegate notifications, team heartbeat, and coordinator bridge.
- Source
- zhao-wuyan
- stars
- 1 stars
- License
- MIT
- Updated
- Updated 5 days ago
Readme
# dsh-maestro-runtime
[English](README.md) | [中文](README.zh.md)
**Repository**: https://github.com/zhao-wuyan/dsh-maestro-runtime
**Related projects**:
- [Maestro Flow (GitHub)](https://github.com/catlog22/maestro-flow)
- [Maestro Flow 中文文档](https://catlog22.github.io/maestro-flow)
[DSH (DeepSeek Harness)](https://github.com/deepseek-ai/deepseek-harness) host plugin that adapts the Maestro-Flow runtime surface to DSH sessions.
P0 + P1 coverage: guard, workflow context injection, new-workspace onboarding, background KG sync, delegate notifications, team heartbeat, and coordinator bridge.
## Features
- **guard**
- blocks dangerous `bash` / `pwsh` commands (recursive delete, hard git reset, forced push, disk format, ...)
- blocks direct model writes to protected Maestro state (`.workflow/state.json`, `.workflow/config.json`, `.workflow/sessions/**`, `.workflow/runs/**`, `.workflow/.maestro/**`)
- enforces `.workflow/config.json` PathGuard boundaries
- validates `.workflow/specs/*.md` `<spec-entry>` format
- **context**
- injects a deduplicated `<maestro-context>` snapshot on user prompts and `/maestro*` skill invocations
- includes workflow state, active session, project title, specs index, knowhow index, delegate notifications
- **onboarding**
- when a `/maestro*` skill is invoked in a project without a valid Maestro workspace, injects one-time `/maestro-init` / `/maestro "<intent>"` guidance
- stays silent for ordinary non-Maestro prompts
- **kg**
- background `maestro kg init` when `maestro.db` is missing (5 min cooldown)
- background `maestro kg sync --incremental` when it exists (30 s cooldown)
- direct `node maestro.js` spawn, no cmd shell, no console window
- **delegate**
- scans host tmpdir and first-level `dsh-*` session temp dirs for `maestro-notify-*.jsonl`
- injects unread completion notifications and marks them read
- **team**
- appends a 60 s deduplicated heartbeat to `.workflow/collab/activity.jsonl` when the local git identity matches a joined member
- **coordinator**
- writes `maestro-coord-<dsh_session>.json` bridge files on `step/end` and `turn/end`
## Requirements
- DSH `0.1.0-rc.6` profile (`dsh web` works)
- Node.js >= 20
- pnpm >= 10
- `maestro-flow` CLI installed and available as `maestro` (used by KG background sync)
## Install
DSH plugins are installed into a profile with **pnpm** and mounted with a
`cordis.patch.yml` entry. This plugin can be installed directly from GitHub.
### Method 1: install directly from GitHub (recommended)
This package declares `dsh.bundle`, so `dsh plugin add` installs the
dependency **and** activates its bundle layer automatically:
```sh
dsh plugin --profile web add "github:zhao-wuyan/dsh-maestro-runtime#v0.1.2"
```
Equivalent manual pnpm command:
```sh
cd ~/.dsh/profiles/web
pnpm add "github:zhao-wuyan/dsh-maestro-runtime#v0.1.2"
```
No manual `cordis.patch.yml` edit is required. Restart DSH and verify the
bundle layer is active:
```sh
dsh --profile web --dump-config | grep maestro-runtime
```
To override a default, add this entry to
`~/.dsh/profiles/web/cordis.patch.yml` (user layer wins):
```yaml
- id: maestro-runtime
name: 'dsh-maestro-runtime'
config:
guardEnabled: true
contextEnabled: true
maxContextChars: 8000
kgEnabled: true
delegateMonitorEnabled: true
teamMonitorEnabled: true
coordinatorEnabled: true
```
### Pin a tag or commit
Replace the fragment in the GitHub shorthand to pin the exact source:
```sh
# stable tag
pnpm add "github:zhao-wuyan/dsh-maestro-runtime#v0.1.2"
# exact commit
pnpm add "github:zhao-wuyan/dsh-maestro-runtime#<commit-sha>"
```
### Method 2: clone and link locally (development)
```sh
git clone https://github.com/zhao-wuyan/dsh-maestro-runtime.git
cd ~/.dsh/profiles/web
dsh plugin --profile web add "<absolute-path-to>/dsh-maestro-runtime"
```
Because the checkout also declares `dsh.bundle`, the profile bundles list is
updated automatically. Restart DSH afterwards.
> On Windows use a forward-slash absolute path, for example
> `pnpm add "link:C:/Users/<you>/projects/dsh-maestro-runtime"`.
### Method 3: npm registry
If the package is available in your configured npm registry:
```sh
dsh plugin --profile web add "dsh-maestro-runtime@0.1.2"
```
Then add the same mount entry and restart DSH.
## Configuration
| Field | Default | Description |
| --- | --- | --- |
| `guardEnabled` | `true` | Enable tool guard |
| `contextEnabled` | `true` | Enable workflow context injection |
| `maxContextChars` | `8000` | Context injection byte budget |
| `kgEnabled` | `true` | Background `maestro kg init` / `sync` |
| `delegateMonitorEnabled` | `true` | Delegate notification injection |
| `teamMonitorEnabled` | `true` | Team heartbeat writes |
| `coordinatorEnabled` | `true` | Coordinator bridge writes |
## DSH plugin publishing conventions followed
- package name uses the `dsh-*` convention
- `type: module`, `main` and `exports` point to the built entry
- plugin entry exports `name` and `apply` (Cordis plugin contract)
- `inject: ['tools']` declares the required service
- shared DSH modules consumed at runtime (`dsh-agent`, `dsh-llm`, `dsh-tools`) are **peer dependencies**, not bundled dependencies, so the host installation keeps a single version
- `@deepseek-ai/cordis@^4.0.1` and DSH host peers are aligned with `0.1.0-rc.6`
- mount happens through profile `cordis.patch.yml`; no DSH source modification
- exports a Schemastery `Config` schema so invalid config fails loudly at load
- declares `dsh.bundle` so `dsh plugin add` activates the layer automatically
## Development
Edit `lib/index.js` while DSH is running. The profile HMR plugin (`root: ['.']`) reloads the plugin entry after the change settles.
After changing `package.json` dependencies or `cordis.patch.yml`, restart DSH.
## License
MIT
Install
dsh plugin --profile web add github:zhao-wuyan/dsh-maestro-runtime
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-maestro-runtime from the hub
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.