moazzamak/dsh-train-dashboard ↗★ 0

dsh-train-dashboard

A right-pane training dashboard for the DeepSeek Harness: it runs a command of your own that writes a JSON snapshot of a training run, serves that snapshot over two HTTP routes, and charts it as a right-pane tab — one series at a time, with the age of the numbers always on screen. 适合需要实时监控和图表化展示本地训练运行状态的开发者。

패키지
dsh-train-dashboard
호환성
미검증
버전
0.2.1
라이선스
NOASSERTION
최근 업데이트
2026. 10. 6.

설치

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:moazzamak/dsh-train-dashboard

Configuration

The plugin has one composition row. Its config is replaced wholesale by a higher patch layer and never deep-merged, so a profile that overrides the row must restate every key it cares about.

- id: train-dashboard
  name: dsh-train-dashboard
  config:
    workspace: /absolute/path/to/your/project
    command: [python3, -m, your_project.snapshot_tool, --out, "{snapshot}"]
    snapshotPath: train-dashboard.snapshot.json
    refreshSeconds: 30
    timeoutSeconds: 120
keydefaultmeaning
workspace'' — set itAbsolute path. The command's working directory, and the base that snapshotPath and any relative path resolve against. A host process can start in the profile directory, where a relative path resolves to nothing, so name it.
command[] — set itThe argv of your producer, one word per list item. Not a shell string: no shell is involved, so quoting and && do not apply.
snapshotPathtrain-dashboard.snapshot.jsonWhere your command writes and the tab reads. Relative to workspace, or absolute.
arm''Optional label shown in the header when the snapshot does not name the run itself.
refreshSeconds30Minimum spacing between regenerations, and half the staleness threshold (a snapshot older than twice this is reported stale). Raise it, do not lower it, while a training job is running on the same machine.
timeoutSeconds120A regeneration is abandoned after this and reported, rather than leaving a spinner forever.
any other key—Kept as written, and usable as a {placeholder} in command.

Placeholders in command. {snapshot} becomes snapshotPath, {workspace} becomes workspace, and any other {name} becomes the config key of that name. So a producer with its own arguments declares them as keys:

    command: [my-tool, --logs, "{logsDir}", --run, "{arm}", --out, "{snapshot}"]
    logsDir: logs/train
    arm: run-7

An unknown placeholder is left as written rather than blanked, so a typo shows up in the command the tab prints instead of silently becoming an empty argument.

What the plugin does with the command. It runs it with cwd set to workspace, captures up to 256 KB of each of stdout and stderr (the last few stderr lines are shown when the exit code is not zero), and asks it to stop after timeoutSeconds, with a short grace period. Success is judged by the snapshot, not by the exit code: a command that exits zero without writing a readable snapshot has not answered the tab's question, and one that writes a good snapshot has.