dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
DSH 技能档案与工作汇报:浏览、搜索并为每个技能建档(方向/使用范围/能力边界/应用场景),复审与删除技能,并把每日简报汇成日报/周报/月报。
English · 中文
Downloaded a hundred skills and still can't find the right one when it matters? Sitting on hundreds of skills but no longer remember what any of them does?
A skill dossier + work report plugin for DeepSeek Harness (DSH). It turns the skills scattered across ~/.dsh/skills, .dsh/skills and ~/.agents/skills into a dossier you can read, verify and keep fresh — and rolls your daily engineering briefs into daily / weekly / monthly views.
One package, three panels:
| Panel | What it does |
|---|---|
| Skills | Browse, search, filter by direction category (same axis as the dossier panel), read details, one-click /name into the composer; disable (reversible trash) · reinstall · delete (one step, confirmed) |
| Dossier | Per-skill profile: direction (10 categories), use scope, capability boundaries, scenarios, origin, call stats, observed load success/failure, catalog token cost, freshness review |
| Report | Three read-only views — daily (detail), weekly (Mon–Sun) and monthly — over reporter/brief/YYYY-MM-DD.md. Weekly and monthly are a contribution graph plus four lines per project |
Reads the daily briefs scattered across your workspace into three views: daily / weekly / monthly.
It only reads — nothing is written to your files, no state is kept, no scheduler is needed. There is deliberately no retrospective, no export and no run history: a retrospective is the agent's job (let it read the briefs), export is what copy-paste already does, and run history existed to serve a scheduler that does not exist. All three would add state, extra writes and one more failure surface, while the daily view and the range roll-up need only reads.
The report half is an optional module:
dataRoot/briefDirare configurable and default toreporter/brief/inside the workspace. Ignore it and it is just a panel nobody opens — the skill and dossier halves are unaffected.
<dataRoot>/<briefDir>/YYYY-MM-DD.md, written by the brief skill. One ## Project name block per project, and the field names are the parsing contract — these five cannot be renamed:
---
date: 2026-09-11
---
## Project name
- 作用:one sentence on what it is
- 实现:its technical shape
- 今日进度:
- one status line (overwritten, not appended)
- 待办:
- at most 3
- 问题:
- real blockers only
The date comes from the date: frontmatter, falling back to the filename.
| View | Range | What you get |
|---|---|---|
| Daily | Today; falls back to the latest day that has a brief | Full detail per project: purpose / implementation / every progress item of that day / next steps / blockers, plus a stats line (N projects · N progress items · N todos · N issues) |
| Weekly | Monday–Sunday; falls back to the latest week with data | Contribution graph + four lines per project |
| Monthly | The 1st of the month through today | The same, on a whole-month axis instead of squeezed into one week |
Fallbacks are labelled: when one is used, the view says which day or week the data actually came from instead of pretending today has records.
One cell per day, darker means more was done that day.
≤9 / ≤29 / ≤59 / >59--dsw-alias-state-business-primary) mixed into the background with color-mix作用:what this project is
进度:the one status sentence written last
待办:the next steps recorded last
难点:the blockers recorded last
Taking "the last day" rather than "everything in the range" is deliberate: a brief's 今日进度 is itself an overwritten status, so the range views answer "where is each project now", not "what did you do this week" — the latter is what the daily view is for.
Profiling has exactly one purpose: let both the AI and the human understand what each skill is for.
A skill catalog carries only a name and a description — no boundaries, no scenarios, no freshness. Humans end up reading files; the model ends up guessing. This plugin writes a dossier per skill that both sides can read:
skill_dossier tool — before committing to load a skill's full textComparable plugins stop at "list them, toggle them". This one goes one step further: it profiles each skill and verifies it with observation instead of the model's own claim.
tools/result event; a skill load that succeeds is recorded ✅, a failure ❌ with its error — not "the model says it is useful" but "did it actually load"Requires Node ^22.19.0 || >=24.0.0 and an installed DSH (npx @deepseek-ai/dsh web once is enough).
# npm
dsh plugin --profile web add dsh-skill-dossier
# GitHub
dsh plugin --profile web add github:JeffreySuen-x/dsh-skill-dossier
# local directory (development)
dsh plugin --profile web add link:/absolute/path/dsh-skill-dossier
The repository commits its lib/ build artifacts, so a git install works as-is with no build-script authorization.
| Tool | Purpose |
|---|---|
skill_dossier | Read one skill's dossier (direction / scope / boundaries / scenarios / usage and observed outcomes); use it before loading a skill's full text |
skill_archive | Write a skill profile (direction / use scope / boundaries / scenarios / origin) |
skill_review | List skills due for review (freshness ranking) |
Dossiers are read by name: the model sees the name in the skill catalog and calls
skill_dossierfor the details. No lexical matching layer is needed — DSH already puts the skill catalog (name + description) into the system prompt and lets the model choose.
Every config key has a default; not configuring anything equals the previous behaviour. Override it in the profile's cordis.patch.yml under id: skill-dossier:
- id: skill-dossier
config:
report:
dataRoot: reporter # report data root
briefDir: brief # daily brief directory
Note: DSH's patch layer replaces the whole config rather than merging, so restate the keys you care about (unlisted keys fall back to the code defaults).
pnpm install # build tooling + type dependencies (@deepseek-ai/* are public packages)
pnpm run build # tsc emits lib/types, tsdown bundles lib/index.js and lib/client.js
pnpm run test # unit + integration tests
node qa/gates.mjs # test / typecheck / build / pack gates
After editing src/, run pnpm run build and commit lib/ — CI enforces git diff --exit-code -- lib so the two never drift.
macOS / Linux. Lifecycle file operations emit bash/POSIX commands; CI runs the full gate set on macOS and Ubuntu across Node 22/24.
Windows is not supported. Support was explicitly removed on 2026-09-17: that branch (pwsh commands, native MoveFileExW moves) was never verified on real hardware, yet it kept two CI legs permanently red — and a permanently red gate swallows the signal of every gate behind it (the real failures hid behind it for five days). To bring Windows back, start with real-machine verification instead of just restoring the branches.
webServer service and cannot be installed headless.rm leaves the skill restorable in trash. Non-filesystem skills are refused.MIT