mddl-harness
界面增强 活跃维护

mddl-harness

taltara/mddl-harness

提供可视化画布编排能力,支持拖拽各类模型与工具组件快速搭建工作流,可一键导出标准cordis.patch.yml覆盖配置文件,无需手写复杂配置即可完成工具链组合。

2
Stars 标星
0
Forks 分支
2
Watchers 关注
0
Open Issues
TypeScript
主要语言
MIT
开源协议
461 KB
仓库大小
1 个月前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:taltara/mddl-harness
git clone https://github.com/taltara/mddl-harness.git
git clone git@github.com:taltara/mddl-harness.git
README.md main

mddl harness

Visual orchestrator for DeepSeek Harness. Drag models and tools onto a canvas, then export a real cordis.patch.yml overlay.

This is not a fork of dsh and not a child-process wrapper around npx @deepseek-ai/dsh. Upstream already ships a web profile, Cordis patches, and session/event telemetry. We compile graphs into that overlay format so the work can later mount as a dsh-plugin.

Why this stack

PDF plan What we actually do
Next.js App Router Vite + React SPA. DSH serves static dist; RSC is dead weight.
Fictional dsh.yaml cordis.patch.yml (id replace + insert)
Spawn dsh run over Socket.io Later: Cordis plugin listening to session/event / agent/*
Config inside expanded nodes Dumb nodes + inspector (keeps XYFlow at 60fps)
xterm.js inside nodes Docked preview only. Terminal belongs in a later host plugin.

Packages

  • @mddl/graph-schema — graph IR and the shipped DSH row catalog
  • @mddl/compiler — graph → Cordis patch YAML, plus overlay linting
  • @mddl/studio — visual editor
  • dsh-blueprint — Blueprint tab inside the DSH web client (readme)
  • dsh-overlay-check — the overlay safety checks on their own, no dependencies, for anything that writes config (readme)

Run

pnpm install
pnpm dev

Studio: http://localhost:5173

pnpm lint       # biome check
pnpm format     # biome check --write
pnpm test
pnpm typecheck

CI runs lint, typecheck, test, and build on every push.

The canvas is saved to localStorage as you edit, so a reload keeps your graph.
Reset in the header restores the starter graph.

Find modules in the palette by name, row id, package, or description. Press
/ to jump to search, and Not on canvas hides what you already placed.

Apply an exported overlay. --patch is resolved from your terminal cwd, not the studio. Running ./cordis.patch.yml from ~ looks for /Users/<you>/cordis.patch.yml.

After Export (typical macOS download):

npx @deepseek-ai/dsh web --patch "$HOME/Downloads/cordis.patch.yml"

Or use the starter overlay in this repo (from the repo root):

npx @deepseek-ai/dsh web --patch "$PWD/examples/cordis.patch.yml"

What Phase 1 does not do

Live harness execution, profile install, or a DSH client slot. "Preview telemetry" is a local animation that proves the glow/edge path. Real run state comes from session/event in a later phase.

Capability disclosure

Before an overlay row is written, the preflight reports what each inserted
package declares it may do, using a capmark
manifest if the package ships one:

warning  capability-high-risk  "build-helper" declares fs:read, proc:spawn.
                               proc:spawn hands over broad control — read its
                               manifest before applying.

This is the one decision a runtime gate cannot make. A plugin's apply() runs
in-process with full Node privileges the moment its row loads, before any tool
call exists, so the write is the last point where installing it is still a
choice. It reports and never blocks: almost no plugin carries a manifest today,
and refusing them would make the check useless against a real profile.

dsh-overlay-check stays dependency-free; this lives in dsh-blueprint.

Roadmap

Shipped in dsh-blueprint 0.5.0: reading the live loader tree, linting the
config you actually booted, writing an overlay back behind a marker-delimited
block, refusing to write a row that would stop the harness booting, snapshots
with one-click restore, importing the running config onto the canvas, and
compiling to agent presets so the canvas changes what a session actually gets.
Next, in order:

  1. Map session/event onto canvas telemetry, replacing the local animation.
  2. English and 中文 both first class.
  3. Model rows beyond the shipped DeepSeek adapters.

If a harness will not start

A row naming a package the profile cannot load stops the harness booting
outright, rather than disabling one entry. dsh-blueprint refuses to write one,
but if you get there by another route, two things help:

  • dsh --profile <name> --dump-default-config reads the bundles while skipping
    the profile and home user layers, so it still answers when the overlay is the
    problem. Confirmed on rc.7: a row written into a profile's cordis.patch.yml
    shows in --dump-config and is absent from --dump-default-config.
  • The DSH handbook's recovery runbook
    by the sandbaseai folks is the most thorough write-up of getting back from
    this, including which user layer owns which file.

Status

Early. DSH is itself a developer preview with breaking changes between release
candidates, so the row ids and patch shape here track a moving target. Verified
against @deepseek-ai/dsh 0.1.0-rc.7.

License

MIT. See LICENSE.